定时器/计数器是一种计数装置,若对内部时钟脉冲计数,可视为定时器;若对外部时钟脉冲计数,可视为计数器。
定时器/计数器的应用可以采用中断的方式当定时或计数达到时产生中断,另外也可以采用询问的方式,不断询问计数状态,以控制程序流程。
8051计数寄存器是thx和tlx两个8位的寄存器,x=1或x=0。
8051的定时器/计数器
8051单片机有2个16位定时器/计数器:定时器0(timer0)和定时器1(timer1)简称t0和t1,8052在包含了t0、t1还有一个timer 2(t2)。这三个定时器/计数器都可作为内部定时器或外部计数器。
若是作为内部定时器时,是计数内部的脉冲。以12mhz的计数时钟脉冲系统为例,将12mhz/12送入定时器,此时定时器所计数的脉冲周期为1us。若采用16位的定时模式,则最多可计数65536个脉冲(即2^16),约0.0655s。
若作为外部计数器时,则是计数由t0或t1引脚送入的脉冲。同样的,若采用16位的定时模式,最多可计数65536(即2^16)个计数量。
定时器/计数器模式寄存器tmod
定时器/计数器模式寄存器tmod主要设定定时器/计数器的工作模式、计数信号来源及启动方式等。
tmod模式寄存器的低四位t0(0-3)配置定时器/计数器0(timer0)的工作模式,高四位t1(4-7)配置定时器/计数器1(timer1)的工作模式,这两部分的结构类似,只是控制的对象不同。
我们以高四位为例来了解tmod模式寄存器的使用,即使用t 1,(t0一样的用法):
gate为timer的门控开关,用来决定timer 1(t 1)的启动方式。
若gate = 0,则只要 tr1 = 1,即可启动timer 1,称为内部启动或软件启动;
若gate = 1,则需要 tr1 = 1,还要等待外部中断引脚int1为高电平,timer 1才能启动工作,称为外部启动或硬件启动。
c/t(count/timer)定时器/计数器切换开关:c/t=0为内部定时器,用来计数osc/12的脉冲;c/t=1为外部计数模式,用来计数由t 1(p3.5)引脚输入的脉冲;
m0,m1定时/计数模式选择开关:
mode0(m1 = 0,m0 = 0):
提供两个13位定时器/计数器(timer 0/timer 1),如前所述,计数量分别存放在th1和tl1两个8位计数寄存器里。其中th1放置8位,tl1放置5。
如前所述,若要执行定时功能,则c/t设定为0,计数内部脉冲;若要执行计数功能,设置c/t为1,计数外部脉冲信号。
启动方式为外部启动时:设定gate = 1,tr1=1,再等待外部中断引脚int1输入高电平,即可启动 timer 1;
启动方式为内部启动时:设定gate = 0,tr1=1,即可启动 timer 1;
mode1(m1 = 0,m0 = 1):
提供两个16位定时/计数器,计数量分别存放在thx和tlx两个8位计数寄存器里。
mode 1下的定时器/计数器的工作模式切换、启动方式等与mode 0 完全一样,mode 1计数量更大,所以完全可以替代mode 0。
mode 2(m1 = 1,m0 = 0):
提供两个8位可自动加载的定时器/计数器(timer 0和 timer 1),其计数寄存器里的计数量放置在tlx里,当改定时器/计数器中断时,会自动将thx计数寄存器里的计数量载入到tlx里。由于计数只用了8位,所以其最大计数为256。
mode 2下的定时器/计数器的工作模式切换、启动方式等与mode 0 完全一样。
mode 3(m1 = 1,m0 = 1):
此工作模式是一种特殊的模式,提供一个8位的定时器/计数器 timer 0和一个8位的定时器timer 1。
其中timer 0除了不具有自动加载功能外,与mode 2的timer0几乎完全一样。
而timer 1定时器也几乎可以被mode 2的timer 1所取代。
定时器/计数器控制寄存器tcon
寄存器tcon的高四位一共定时器/计数器的启动开关和中断时的标志位,低四位为外部中断触发控制位和外部中断请求标志位,如下图:
tf1:定时器timer 1中断(溢出)标志位。当timer 1时,由硬件自动设定tf1= 1,并向cpu申请中断。timer 1中断结束时,cpu自动对tf1清零。tf1也可以用软件清零。
tr1:定时器timer 1启动开关。tr=1,timer 1启动,tr1=0关闭timer 1。
tf0:定时器t0溢出标志位。其功能与tf1相同。
tr0:定时器t0运行控制位。其功能与tr1相同。
ie1:外部中断1(int1)标志位。
it1:外部中断1(int1)触发方式控制位。
ie0:外部中断0(int0)标志位。
it0:外部中断0(int0)触发方式控制位。
计数寄存器:
8051的计数寄存器是thx和tlx两个8位寄存器,除了mode 3之外,th0和tl0是timer 0所使用的计数寄存器,th1和tl1是timer 1所使用的的计数寄存器。若是8052还有timer 2所使用的th2和tl2。
8051定时器/计数器是一种正数计数器。当计数到满(溢出)时,即产生中断。我们计数时用该模式下的最大计数量减去所需计数,即从终点往前推,比如最大计数量为100,需要计数40,则从60处开始计数。
不同模式下的最大计数量不同,设定方式也有差异。
下面对各个模式下计数寄存器分别做说明:
mode 0
由于mode 0 tlx计数寄存器只使用5位,2^5 = 32,我们要把计数起点的值除以32,其余数放入tlx计数寄存器;其商放入thx计数寄存器。例如要使用timer 0计数6000,则:
tl0 = (8192 - 6000)% 32;//取低5位
th0 = (8192 - 6000)/ 32;//取高8位
mode 1
在此模式下,tlx和thx计数寄存器都是8位,而2^8=256,同样使用timer 0计数6000则
tl0 = (65536 - 6000)% 256;
th0 = (65536 - 6000)/ 256;
mode 3
在此模式下,使用tl0计数寄存器作为第一个定时器/计数器的计数量,而th0计数寄存器作为第二个定时器的计数量,用到哪个就填入哪个。两个都用到就对tl0、th0分别填入对应的值。填入方法与mode 2一样。
定时器/计数器的使用
定时器/计数器有两种使用方式:中断和查询
中断:包括定时器/计数器中断的设定、计数量的设定、启动设定及中断子程序的编写
查询:只要设定计数量及启动,然后判断定时器/计数器的标志位(tfx)是否动作,接着程序流程的跳转。
中断设定(关于8051的中断就不展开了):
中断的设定包括开启开关(ie寄存器的设定)、中断优先级的设定(即ip寄存器的设定)、中断信号的设定(tcon寄存器的设定)等。例如要开启中断总开关及t0开关(ie为中断启用寄存器,ip为中断优先级寄存器):
ie=0x82;//打开中断总开关及启用t0中断
把t0中断设定高优先级,并设定为内部定时器,软件启动方式,采用mode 1:
ip=0x02;//t0中断高优先级
tmod = 0x01;//设定为内部定时器、软件启动和mode 1
计数量设定(略,见上文)
定时器/计数器启动
trx=1;// 启动timer x
中断子程序
中断程序格式:void +函数名+interrupt +数字0—5
0 外部中断int0
1 定时器/计数器tf0
2外部中断int1
3定时器/计数器tf1
4串行口ti/ri
5定时器/计数器tf2/exf2(8052才有)
注意区分定时器/计数器的中断编号与外部中断编号,定时器 0的中断编号为 1,定时器 1的中断编号为 3,定时器 2的中断编号为 5。
如:
void my_int (void) interrupt 3 //timer 1溢出中断子程序
{
…….//中断子程序逻辑代码
}
一种AI增强离子淌度与中红外光谱的协同方法
STM32F7x0和H7x0超值系列(Value Lines) 微控制器功能介绍
小米5C首发松果处理器?是噱头,松果处理器或将10月出货
抓住重要战略机遇期 推动工业互联网快速发展
单片机I/O口的结构的详解与说明
8051单片机的定时器/计数器
linux怎么进入vim命令窗口
INGUN全新最小电动标记工具
5G还没用上6G就浮现了 6G的速度难道要上天
地物光谱仪在热致变色材料表征中的应用
欧姆龙变频器过电流的原因及解决方法
加速度计和陀螺仪的测量范围、测量精度及单位换算方法
为什么AI感知和人类的感知很难比较
如何采购ARM六核RK3399安卓工控开发主板
莎朗股份和昀丰科技均已对外发布了股票停牌公告
电容式触摸IC可以应用于哪些产品上?目前都流行哪些功能
AMD、NVIDIA和英特尔三巨头的晶圆暗战影响我国芯片发展
骁龙888选择集成基带的理由是什么
iQOO和vivoX27买哪个好
泉州移动开通了福建首个BookRRU杆微站现网实测5G下载速率可达880Mbps