C52单片机定时器2介绍

2020-01-13来源: eefocus关键字:C52  单片机  定时器2

定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获、自动重新装载(递增或是递减计数)和波特率发生器。


知识点一、定时器2的控制寄存器T2CON(可按位寻址)*

D7位--TF2:定时器2溢出标志位。用于请求中断(必须由软件清0)

D6位--EXF2:定时器外部标志位。当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0)

D5位--RCLK:接受时钟标志位。默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供。

D4位--TCLK:发送时钟标志位。原理同上

D3位--EXEN2:定时器2的外部使能标志位。定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装

D2位--TR2:定时器2启动/停止控制位。

D1位--C/T2:定时器2的定时器/计数器选择位(在reg52头文件中定义为了C_T2,请注意,下面相同)

D0位--CP/RL2:捕获/重装标志位。


知识点二  定时器2的模式控制寄存器T2MOD(不可按位寻址)

该寄存器在单片机的头文件reg2.h中可能没有被定义,自己定义吧!

D1位—T2OE:定时器2输出使能位

D0位—DCEN:向下计数使能位


知识点三:定时器2的三种模式*

*1、捕获模式*

在"CP/RL2=1"&&"TR2=1"时进入捕获模式。通过对控制寄存器T2CON的外部使能标志位EXEN2的置位和清0,又可以有分为如下两种工作模式:

<1>EXEN2=0:

此时定时器2作为一个16位的定时器/计数器(由定时器/计数器选择位C/T2位选择)使用,实验已通过。

<2>EXEN2=1:

此时定时器在前者的基础上,增加一个特性,即允许接受外部输入T2CON的负跳变,此负跳变使定时器2中的TH2和TL2中的值存入陷阱寄存器RCAP2H和RCAP2L中,并将外部标志位EXF2置位,引起中断。该中断与前者中的中断同时存在并共用同一中断程序(在中断中可检测TF2和T2EX位确定是哪一个引起的中断)。除此之外该模式下,当中断是T2EX位引发的时,虽然引发了中断,但是由于不是溢出,并且计数器没有停止计数,因此,此时TH2和TL2不用重新装载值。


实验证明在此模式下可以实现:用溢出中断输出方波,用线接入T2EX(P1^1),在T2EX的中断中使蜂鸣器响起来,理论和实践一样,蜂鸣器响的频率是方波的两倍(因为它只捕捉负跳变)


2、自动重装模式(递增/递减计数器)*

16位自动重装模式中,定时器2可通过C/T2位配置为定时器/计数器,根据外部使能标志位EXEN2的置位和清0,可分为两种情况:

<1>EXEN2=0时

定时器2为16位自动重装的普通定时器,由陷阱寄存器提供重装的值,只需要预设一下即可,可用于定时精度要求高,定时时间长(16位)的情况。

<2>EXEN2=1时,根据递减计数使能位DCEN的置位和清0可分为两种情况:

A1、T2MOD=0x00(DCEN=0;默认情况);

与上一种情况相比,此时16位自动重新装载可由外部T2EX的负跳变,和溢出任意一种触发,并都能产生中断。

A2、T2MOD=0x01(DCEN=1);

此时允许T2EX控制计数的方向;T2EX=0时,重装的值为0FF和0FF,递减计数与陷阱寄存器预存值相等时,置位TF2产生中断。T2EX=1时;自动重装值为陷阱寄存器中的值,溢出时置位TF2产生中断。


3、波特率发生器模式                                                                                                                                            T2CON的TCLK和RCLK位为0(默认)时,串行口发送和接受的波特率由定时器1提供;置位为1时,由定时器2提供。可以一个通过定时器1,一个通过定时器2,这样可以获得发送和接受时不同的波特率。


注意的地方: 定时器2作为定时器时,递增频率为晶振频率的12分频,而定时器2作为波特率发生器时,它的递增频率为晶振频率的2分频。


模式1和模式3的波特率=(振荡器频率/32)  *  (65535-N)

定时器2为计数模式时,外部时钟信号由T2(P1^0)引脚进入。


定时器2作为波特率发生器的时候,TH2溢出并不会置位TF2,所以此时可以不用禁止定时器2中断,若是EXEN2位被置位时,可以将T2EX作为附加的外部中断。


定时器2作为波特率发生器的时候,不要对TH2和TL2读写,可以读陷阱寄存器,但是也不要写。当对定时器2的陷阱寄存器进行访问时,应关闭定时器(TR2清0)。


4、可编程时钟输出

52系列单片机,可设定定时器/计数器2通过T2(p1^0)引脚输出时钟。

P1^0除了可以作为普通I/O口外,还可以作为定时器2的外部计数输入和时钟信号输出。

C/T2=0并且T2MOD的T2OE位为1时,可将定时器2选为时钟信号发生器,自动装初值。设置公式:

时钟信号输出频率=(振荡器频率/4)* (65535-N)

在时钟输出模式下,计数器溢出不会产生中断请求。这种功能相当于定时器2可同时作为波特率发生器和时钟发生器。


**因为此时外部中断并没有被暂用,若是在设置上不冲突的话可能同时还可以响应T2EX引入的外部信号,这个只是猜想,还没有用实验证明过,哈哈***


知识点三,单片机对于外来脉冲信号具有计数功能,但是有要求:

计数脉冲的最高频率=振荡器的频率/24

并且为了确保给定电平在电平变化之前能被采样一次,则这个电平至少要维持一个机器周期。

关键字:C52  单片机  定时器2 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485469.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:C51单片机定时器/计数器中断功能详细分析(二)
下一篇:单片机成长之路(51基础篇) - 020 51单片机寄存器功能一览表

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

S3C2410 bootloader ----VIVI阅读笔记
首先在移植前应该熟悉了解vivi的架构,启动过程,了解了原理性的东西之后,再去做移植比较好吧,我也新手进来公司的第1件事就是弄VIVI, 不过我是剪裁,移植主要部分是改bootload分区和kernel MTD分区,保证一致,其他的记不得了,GOOGLE里有非常丰富的关于vivi -0.1.4到s3c2410移植或者启动过程分析的资料. S3C2410 bootloader ----VIVI阅读笔记 (转)上 2007-06-14 13:06 建议读一读《嵌入式系统Boot Loader技术内幕》(詹荣开著),google一下就会找到一片。什么是Bootloader就不再这里废话了,看看
发表于 2020-01-09
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Ⅰ、写在前面上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程。上一篇文章主要内容:I2C协议、模拟I2C底层驱动、EEPROM(AT24Xxx)单字节读写操作。本文主要内容:STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。实例实验效果:1、多字节读写:任意地址(66), 写入任意长度(129)、读取并打印出来2、单字节读写:任意地址(0),写入1字节数据、 读取并打印出来实验说明:1.多字节读写实验为什么是从66地址写? 为什么是写入129字节?答案:验证对EEPROM多字节
发表于 2020-01-09
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
STM32系统学习——I2C (读写EEPROM)
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))45 {46 if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(1);47 }48 49 /* 发送要写入的 EEPROM 内部地址(即 EEPROM 内部存储器的地址) */50 I2C_SendData(EEPROM_I2Cx, WriteAddr);51 52 I2CTimeout = I2CT_FLAG_TIMEOUT;53 /* 检测 EV8 事件并清除标志*/54 while (!I2C_CheckEvent(EEPROM_I2Cx,55 I2C_EVENT_MASTER_BYTE_TRANSMITTED))56 {57 if
发表于 2020-01-09
STM32系统学习——I2C (读写EEPROM)
stm32中core_m3.h和core_m3.c详解
对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。 CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)。 接下来就来了解一下Core_cm3.c里面有什么东东:首先是汇编关键字__ASM和__INLINE的宏定义,支持不同的编译器。由于使用的是Keil,所以就只看第一种,__CC_ARM。这里面的函数调用都只符合ARM过程调用标准的,如R0到R3用作参数和返回值传递,这也是这里面唯一用到的。此外,在Keil中使用了__asm关键字后,编译器
发表于 2020-01-09
超大底+高像素,豪威推旗舰传感器OV48C
豪威在CES上发布了OV48C,这是一款4800万像素的图像传感器,具有1.2微米的大像素尺寸,官方称可为旗舰智能手机相机提供高分辨率和出色的低光拍照性能。OV48C的传感器尺寸为1/1.3英寸,像素尺寸为1.2μm,有效像素为4800万。同时,它还号称是首颗具备芯级HDR的产品,信噪比更低、运动鬼影更少。OV48C传感器自带4单元彩色滤波阵列、支持4800万像素拜耳输出、支持四像素合一(等效1200万像素、2.4μm),支持4K/8K视频拍摄和360fps慢动作等。豪威市场经理Arun Jayaseelan表示:“高分辨率、大像素尺寸和高动态范围的结合对于旗舰手机相机的夜间模式等功能至关重要,OV48C是行业内唯一提供高48MP
发表于 2020-01-09
DS3231模块配合stc89c52程序与原理图
这一阶段一直在学习宋雪松老师的书,感觉写的很棒,在普中开发板上写了DS1302的时钟(虽然很渣,自带的时钟芯片还有问题),心血来潮买了个时钟模块DS2321,买来不会用卖家提供的是Arduino的程序,源程序网上很多,但总想自己写,看了半天的DS2321时序图恍然大悟——这不是IIC时序么,赶紧把之前写的IIC文件拿过来,写了个下载进去,时钟不动,检查了一下是器件地址多加了<<1,改完走的一溜一溜的,程序名字是DS1302,因为是从1302改过来的,名字懒得改,并不是挂羊头卖狗肉可以放心食用实物图 单片机源程序如下:#include <reg52.h>#include<
发表于 2020-01-08
DS3231模块配合stc89c52程序与原理图
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved