(29条消息) 51单片机定时器TMOD与TCON、SCON_51单片机的tmod和tcon_EmbededCoder的博客-CSDN博客
1.周期浅析
单片机中有两种周期,一种是时钟周期,另一种是机器周期,对于此单片机来说,时钟周期即为1/12*10-6 s,即为1/12 us。机器周期的大小一般是12个时钟周期,但是也有更快、更高效的单片机,它的机器周期更小。
2.计时器
注意:计时器即可以进行计时,也可以进行计数,但是两种功能不能在同一个计时器上使用!
计时器,顾名思义,就是用来计算时间的。它通过特定的计算以及程序的结合来实现时间的准确计算。
51单片机中断级别
中断源 | 默认中断级别 | 序号 |
INT0---外部中断0 | 最高 | 0 |
T0---定时器/计数器0中断 | 第2 | 1 |
INT1---外部中断1 | 第3 | 2 |
T1----定时器/计数器1中断 | 第4 | 3 |
TX/RX---串行口中断 | 第5 | 4 |
T2---定时器/计数器2中断 | 第6 | 5 |
2.1 TMOD定时器/计数器模式控制寄存器
C51单片机一般设置有两个定时器,分别为T0和T1,通过TMOD指令来控制。TMOD指令是一个八位二进制的数,每一位的二进制有不同的含义。
上图分可以直观的看到每一位对应的功能。
因为C51单片机有两个定时器,所以TMOD的D0~D3(T0)控制一个定时器,D4~D7(T1)控制另一个定时器。两个定时器的用法完全相同,因此只解释D0~D3(T0)所指定的定时器。
我们只能一次性定义:TMOD=0x(XX)将相应的二进制转化成16进制进行统一设置
D3(GATE):控制定时器打开的开关。如果此位为0,我们只需要在TCON中进行设置便可以使用定时器,如果此位为1,我们不仅需要在TCON中进行设置,而且还需要对外部引脚进行设置才能使用。
D2(C/T):定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。
M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。
M1和M0共同控制计时器的模式一般设置为01,采用16进制计数器
2.2 TCON定时器控制寄存器
定时器控制寄存器,作用是控制定时器的启、停,标志定时器溢出和中断情况。
TF0/TF1(D5/D7):TF1=1表示T1有中断产生。(判断是否有中断产生,如果有则此位变为1,一般需要编写程序使其复位,以便下一次继续使用)
TR0/TR1(D4、D6):TR1=1表示T1开始运行。(单片机中T0引脚,需要高低电平的驱动)
IE0/IE1(D1/D3):IE0/IE1(D1/D3)=1表示INT0/INT1有中断产生。
IT0/IT1(D0/D2):IT0/IT1(D0/D2)=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。(IE位和IT位是判断外部中断的,即如果芯片相应外部引脚接收到IT设置的对应脉冲信号,便会将IE位置为1,一般需要编写程序使其复位,以便下一次继续使用)
2.3中断允许寄存器IE
EA(D7):整体中断允许位;EA=1允许中断。(相当于总开关此位为1才可以使用中断的功能)
(D6):此位不论置1还是0不产生任何效果。
ET2(D5):T2中断允许位;ET2=1允许中断(S52才有,一般同D6)。
ES(D4):串行中断允许位;ES=1允许中断。
ET1(D3):T1中断允许位;ET1=1允许中断。
EX1(D2):INT1中断允许位;EX1=1允许中断。
ET0(D1):T0中断允许位;ET0=1允许中断。
EX0(D0):INT0中断允许位;EX0=1允许中断。
只有打开总开关(EA)的同时打开相应的分开关(ET2,ES,ET1,EX1,ET0,EX0),对应中断才可以使用。
2.4位定时器设定触发时间
(只对T0计时器进行说明,T1与其同理)
M1 M0
0 0 方式0时,N=13(此为TH为8位,TL为5位)
0 1 方式1时,N=16(此为TH为8位,TL为8位)
1 0 方式2时,N=8(此为TH为8位,TL为0位)
1 1 方式3时,N=8(此为TH为8位,TL为8位,只适用于T0,且T0被分成两个独立的8位计数器TH与TL)
注:一般使用仅使用工作方式1。
根据定时时间和工作方式,通过公式:定时时间T=(2的N次方-X)12/单片机晶振频率,计算出时间常数X,把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了,也可以直接将一个十进制数大于256的部分直接赋给TH0,小于256的部分直接赋给TL0。
例如:
(设置T0每50ms触发一次,仅针对方式1)
TH0=(65536-50000)/256
TL0=(65536-50000)%256 或
TH0=0x3c
TL0=0x80
总结定时器的操作步骤如下:
1.选择工作方式(设置M0,M1的值)
2.选择控制方式GATE(为0是只要软件设定好参数即可,为1则需要软件设定参数,且定时器/计数器的中断引脚需要为高电平)
3.确定定时器的工作模式,是定时模式还是计数模式(C/T)
4.给定时器设初值(设置THX与TLX)
5.开启定时器中断(设置ET0或ET1)
6.开启总中断(设置EA的值)
7.定时器/计数器的选择T0/T1(设置TR1或TR0的值)