51单片机:定时器/计数器TMOD设定
51单片机:定时器/计数器TMOD设定
51单片机:定时器/计数器TMOD设定

上图为TMOD格式,8位分为两组,高四位控制T1,低四位控制T0
GATE :为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。
GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能工作。
C/T :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。
M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。

几种TMOD设置:
定时器工作模式下,GATE = 0:
- TMOD = 0X01 (T0工作在方式1)
- TMOD = 0X02 (T0工作在方式2)
- TMOD = 0X10 (T1工作在方式1)
- TMOD = 0X20 (T1工作在方式2)
1.方式0时,N=13(此为TH为8位,TL为5位)
2.方式1时,N=16(此为TH为8位,TL为8位)
3.方式2时,N=8(此为TH为8位,TL为0位) 4. 方式3时,N=8(此为TH为8位,TL为8位,只适用于T0,且T0被分成两个独立的8位计数器TH与TL)。
计数器工作模式下,GATE = 0:
TMOD = 0X05 (T0工作在方式1, T0的二进制码为0101,转化为十六进制为5H,因此TMOD =0x05)
TMOD = 0X06 (T0工作在方式2, T0的二进制码为0110,转化为十六进制为6H,因此TMOD =0x06)
(采用计数器模式,需要在外部引脚T0(P3.4)或T1(P3.5)提供一个能够进行负跳变的设备,比如开关按键)
根据定时时间和工作方式,通过公式:定时时间T=(2的N次方-X)12/单片机晶振频率,计算出时间常数X
把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。
定时器的3种工作方式图解:
工作方式0:
例如:定时 5ms。5ms=5000us,
TH0(8192-5000)/32;
TL0(8192-5000)%32;
除以32是因为TL0是一个5位寄存器的容量。
所以要中断200次才能达到1s。

工作方式1:可以装入总数65536.
例如:定时 1ms。1ms=1000us,所以65536-1000=64536。转换为16禁进制为0XFC18;
TH0=(65536-1000)/256;
TL0=(65536-100)%256;
或者:
TH0=OXFC;
TL0=0X18;

工作方式2:可以装入总数256
方式0和方式1,当计数溢出后,计数器变为0,所以要反复重新装填初值,这会影响定时精度。但是方式2可以解决这个问题。

其中低位TL0是8位定时器,而TH0是常数缓冲器,当低位TL0溢出时,在溢出标志位TF0置1的同时,自动将高位TH0的常数重新装入TL0中,让TL0从初值开始重新计数,这样就不用人为软件重新装入初值带来的误差,从而提高精度。
由于两个是分开的,所以计算初值可以不用求余取模:
TL0=总值-要计数的个数;
TH0=总值-要计数的个数;
例如:定时0.1ms,0.1ms=100us,所以256-100=246,转换为16进制为9C。
TH0=0X9C;
TL0=0X9C;

工作方式3:

定时器的操作步骤如下:
1.选择工作方式(设置M0,M1的值)
2.选择控制方式GATE(为0是只要软件设定好参数即可,为1则需要软件设定参数,且定时器/计数器的中断引脚需要为高电平)
3.确定定时器的工作模式,是定时模式还是计数模式 C/T.
4.给定时器设初值(设置THX与TLX)
5.开启定时器中断(设置ET0或ET1)
6.开启总中断(设置EA的值)
7.定时器/计数器的选择T0/T1(设置TR1或TR0的值)