6.2.4 工作方式说明
MCS-51系列单片机有T0和T1两个内部定时器/计数器。每个定进器/计数器都属于特殊功能寄存器,T0由高8位TH0和低8位TL0组成,T1由高8位TH1和低8位TL1组成。因此T0和T1均可通过字节传送指令为它们分别设置初值,以获得不同定时时间和所需的计数值。
定时器/计数器的功能和它们的工作方式有关,表6-3已列出它们在四种工作方式下的不同功能。
1.方式0
在本工作方式下,定时器/计数器按13位加1计数器工作,这13位由TH中高8位和TL中低5位组成,其中TL中高3位不用。设计这种工作方式主要是为了能与MCS-48系列单片机定时器/计数器兼容。
在定时器/计数器启动工作前,CPU先要装入方式控制字以设定其工作方式,然后再装入定时器/计数器初值,并通过指令启动其工作。13位计数器按加1计数器计数,计满为零时能自动向CPU发出溢出中断请求,但若要再次计数,CPU必须在其中断服务程序中为其重装初值。
T1在工作方式0时的工作过程示意如图6-27所示。
图6-27 T1在工作方式0时的工作过程示意图
使用定时器/计数器时一般使GATE=0,为什么要设计引脚?GATE的用途?是为了测量某个正脉冲的宽度。
当(TR1=1)且(GATE=1)时,设引脚上的信号是某个脉冲
所以根据TH1、TL1的值可以确定正脉冲的宽度。
2.方式1
在本方式下,定时器/计数器按16位加1计数器工作,该计数器由高8位TH和低8位TL组成。定时器/计数器在方式1下的工作情况和方式0时相同,只是最大定时/计数值是方式0时的8倍。
3.方式2
如图6-28所示,在方式2时,定时器/计数器被拆成一个8位寄存器TH(TH0/TH1)和一个8位计数器TL(TL0/TL1),CPU对其初始化时必须送相同的定时初值/计数初值。当定时器/计数器启动后,TL按8位加1计数器计数,每当它计满回零时,一方面向CPU发出溢出中断请求,另一方面从TH中重新获得初值并启动计数。
显然,定时器/计数器在方式2下工作时是不同于前两种方式的,定时器/计数器在方式0和方式1下计满回零时需要通过软件为其重装定时初值/计数初值,而在方式2下时TL回零能自动重装TH中的初值,但方式2下计数器长度仅有8位,最大计数值只有28=256。
由前面的叙述可知:
1)方式0或1中,TH1+TL1溢出时,TH1=TL1=0,如不重新赋值,则从0开始计数;在方式2中,由于具有自动重装功能,所以可以从特定值起开始计数。
2)定时器/计数器1在方式2下常作为串行接口波特率发生器(定时器/计数器0不能作为串行接口波特率发生器)。
图6-28 T1方式2时8位初值自动重装
4.方式3
在前三种工作方式下,T0和T1功能是完全相同的,但在方式3下T0和T1功能就不相同了。此时,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。
在方式3下的TH0和TL0是有区别的。TL0可以设定为定时器或计数器模式工作,仍由TR0控制启动或停止以及采用TF0作为溢出中断标志;TH0只能按定时器模式工作,它借用TR1和TF1来控制和存放溢出中断标志。因此T1就没有控制位可用了,故TL1在计满回零时不会产生溢出中断请求。
显然,T0和T1设定为方式3时实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生,图6-29所示是T0在工作方式3时2个8位计数器。由于TL1工作于无中断请求状态,故用它来作为串行接口可变波特率发生器是最好不过的。