历史上的今天
返回首页

历史上的今天

今天是:2025年08月02日(星期六)

2020年08月02日 | STC89C52单片机定时器2详细整理

2020-08-02 来源:eefocus

51单片机是我自学的第一款单片机,那时正好是过春节,想起那个寒假,外面下着大雪,有时还会传来一两声爆竹的炸响,而我一个人在房间里摆弄单片机开发板,反复调试程序的时光,真是难忘!


我自认为这款单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。所以掌握好定时器2还是非常有必要的。以下是在我完全搞明白它的原理和用法的基础上整理的一篇小文章。读起来,好像Datasheet一样!请原谅,希望没有辜负你的点击!


定时器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并且为了确保给定电平在电平变化之前能被采样一次,则这个电平至少要维持一个机器周期。

推荐阅读

史海拾趣

问答坊 | AI 解惑

PCB制版技术-CAM和光绘工艺

PCB制版技术-CAM和光绘工艺   PCB制作技术,包含计算机辅助制造处理技术,也即是CAD/CAM,还有光绘技术,光绘工艺的一般流程是:检查文件一确定工艺参数一CAD文件转 Gerber文件一CAM处理和输出。 关健字:PCB制版技术,Gerber数据,CAD软件,CAM软 ...…

查看全部问答>

TLC2543转换显示不正常

TLC2543与ATMEGA8515通过SPI通信,测量电路大体是这样:首先利用电桥把铂电阻温度信号转换成电信号,然后经过运放放大进入TLC2543模拟输入通道,由数码管显示所测温度值,结果拿个金属导体一碰有关的元件管脚,显示就不正常,有时候变成全0,有时候 ...…

查看全部问答>

51基本程序 99秒马表 定时出现问题 很奇怪....

#include unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//共阳 unsigned char tm; unsigned char ts; unsigned char bt; void main(void) {         unsigned char i,j;   ...…

查看全部问答>

ARM汇编的问题,高手请进,呵呵!

ARM汇编中的b %B1这条语句代表什么意思呀?谢谢!…

查看全部问答>

最好的项目合作群:34048757连接技术和市场的最后一段距离

有技术的人联合起来找项目。可以发布项目寻求合作,可以自由组建团队。互相分享接项目经验。…

查看全部问答>

dsp项目合作

请问在有在沈阳用DSP2808做过项目的公司和个人吗,我最近有个项目想一起合作,我的邮箱是jtstianshui@sohu.com…

查看全部问答>

把超级电容器用于整流滤波是否可行?

     滤波电容器在整流滤波电路中起着重要作用,电容量越大滤波效果越好。特别是在低压整流(如5V、3.3V甚至更低的电压)输出时往往因为滤波电容器的电容量不够大而产生较大的纹波电压。      将超级电容 ...…

查看全部问答>

【求伪代码或C】以下的decode函数是ARM汇编,只求大致的意思,谢谢

.text:00000A58                 EXPORT decode .text:00000A58 decode                       &nbs ...…

查看全部问答>

求助手工PCB的制作

求助。。。。 想知道手工制作PCB需要的原料及器材  在网上看了下东西有很多 看的有点晕了 P.S.本人对电子方面不了解。。望各位大虾能尽量详细告诉我一下 感谢~~~…

查看全部问答>

用CC3000 实现远程控制电灯

内容如题目所示,,我手里有一块CC3000+MP430fr5739   还有一个智能插座  一个无线路由   我想要实现对电灯的远程控制    由于本人是初学者  所以恳请各位达人给予帮助与批评    先谢谢各位了…

查看全部问答>