6.3 定时器/计数器的工作方式
TMOD用来设置定时器/计数器的工作模式(定时模式和计数模式)和工作方式(方式0、方式1、方式2、方式3)。下面来介绍定时器/计数器的4种工作方式。
1.方式0
当M1、M0=00时,定时器/计数器被设置为工作方式0,等效逻辑电路如图6-2所示(以定时器/计数器T1为例)。
13位计数器由TLx(x=0,1)低5位和THx高8位构成。若TLx低5位溢出,则向THx进位,THx计数溢出把TCON中的溢出标志位TFx置1并且请求中断。
位控制的电子开关决定了定时器/计数器的两种工作模式。
(1),电子开关打在上面位置,定时器/计数器T1(或T0)为定时模式,把时钟振荡器12分频后的脉冲作为计数信号。
(2),电子开关打在下面位置,定时器/计数器T1(或T0)为计数模式,计数脉冲为P3.4(或P3.5)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1。
GATE=0时,使“或”门输出A点电位保持为1,“或”门被封锁。于是引脚输入信号无效,这时,“或”门输出的1打开“与”门。B点电位取决于TR1的状态,由TR1一位就可控制计数开关的开启或关断。若软件使TR1置1便接通计数开关,启动定时器/计数器T1在原值上加1计数,直至溢出。
图6-2 方式0逻辑电路
当GATE=1时,A点电位取决于引脚的输入电平。仅当
输入高电平且TR1=1时,B点才是高电平,计数开关K闭合,定时器/计数器T0开始计数;当
由1变0时,定时器/计数器T0停止计数。这一特性可以用来测量在
端出现的正脉冲宽度。
2.方式1
当M1、M0=01时,定时器/计数器工作于方式1,这时定时器/计数器的等效逻辑电路如图6-3所示。
图6-3 方式1逻辑电路
该方式是一个16位的定时器/计数器,结构几乎与方式0完全相同,唯一的差别是在方式1中,寄存器TH0和TL0的16位全部参与操作。
3.方式2
当M1、M0=10时,定时器/计数器工作于方式2。
方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。
当M1、M0为10时,定时器/计数器工作于方式2,这时定时器/计数器的等效逻辑电路如图6-4所示。
图6-4 方式2逻辑电路
方式2把TL0或TH0设置成一个可以自动重装初值的8位定时器/计数器。TL1计数溢出时,不仅使溢出中断标志位TF1置1,而且还自动把TH1中的内容重新装载到TL1中。这里,16位定时器/计数器被拆成两个,TL1用作8位计数器,TH1用来保存初值。
在程序初始化时,TH1和TL1用程序赋予相同的值,当TL1计数溢出,使TF1置位为1,并将TH1中的初值自动装入TL1,继续计数。
4.方式3
当M1、M0=11时,定时器/计数器工作于方式3。
方式3是为增加一个8位定时器/计数器而设置的,使AT89S51单片机具有3个定时器/计数器。
方式3只适用于定时器/计数器T0。定时器/计数器T1不能工作在方式3。定时器/计数器T1处于方式3时相当于TR1=0,停止计数(此时定时器/计数器T1可用来作为串行口的波特率产生器)。
(1)工作在方式3下的定时器/计数器T0
TMOD的低2位为11时,定时器/计数器T0设置为工作在方式3下,定时器/计数器T0分为两个独立的8位计数器TL0和TH0,TL0使用定时器/计数器T0的状态控制位C/、GATE、TR0、TF0,而TH0固定为一个8位定时器/计数器(不能作为外部计数模式),并使用定时器/计数器T1的状态控制位TR1、TF1和中断请求源TF1。
(2)定时器/计数器T0工作在方式3时定时器/计数器T1的各种工作方式
定时器/计数器T0工作于方式3时,定时器/计数器T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或用于不需要中断的场合。
定时器/计数器T1无工作方式3,若将定时器/计数器T1设置为方式3,会使定时器/计数器T1立即停止计数,也就是保持住原有的计数值,作用相当于使TR1=0。定时器/计数器T1可工作于其他三种方式下。一般情况下,当定时器/计数器T1用作串行口的波特率发生器时,定时器/计数器T0才设置为工作方式3,此时,常把定时器/计数器T1设置为方式2。