3.6.2 定时器/计数器设计原理

3.6.2 定时器/计数器设计原理

AT89S51/AT89S52单片机有三个可编程的定时器/计数器,以满足定时或延时的需求。当为定时器时,将按照预先设置好的长度运行一段时间后产生一个溢出中断;当为计数器时,在单片机的外部中断引脚上检测到一个脉冲信号后计数器加1,如果达到预先设置好的时间数目,则产生一个中断事件。计数方式可采取查询方式和中断方式进行计数。

1.单片机定时器/计数器的工作原理和异同点

AT89S51/AT89S52单片机定时器/计数器的工作原理是相同的,都是对脉冲进行计数的,只不过脉冲的来源不同,定时器的脉冲来源于晶振的12分频,计数器的则来自外部脉冲。若计数内部晶振驱动时钟,则它就是定时器;若计数输入引脚的脉冲信号,则它就是计数器。

AT89S51/AT89S52单片机是工作在定时方式还是计数方式,计数脉冲是多少,可以通过相关的SFR寄存器来设定。在计数脉冲记满后,利用溢出标志信号实现查询或中断处理。下面分析定时功能和计数功能的异同点。

首先,大家一定要清楚什么是定时功能,什么是计数功能,二者有什么区别。

定时器和计数器都是加1计数的,定时器实际上也是以计数方式工作的,只是它对固定频率的脉冲计数,由于脉冲周期固定,因此可由计数值计算出时间。

当工作在定时方式时,输入信号是内部时钟脉冲,每个机器周期使寄存器的值增加1。每个机器周期等于12个振荡周期,故计数频率为振荡器频率的1/12,当采用12 MHz的晶振时,计数速率为1 MHz。

当工作在计数方式时,计数脉冲来自相应的外部输入引脚。当输入信号产生1到0的跳变时,计数寄存器的值增加1。识别引脚上的跳变需要2个机器周期,即24个振荡周期,故从外部输入的脉冲信号最高频率为晶振频率的1/24,当晶振为12 MHz时,最高计数频率为500 kHz,高于此频率,计数将出错。对外部输入信号的占空比没有特别要求的,为了确保采样,信号的电平至少要保持1个机器周期。

虽然定时功能和计数功能的本质都是计数,但是计数的对象不一样,定时功能是对机器周期进行计数的,而计数功能是对外接信号进行计数的。

下面以T0工作方式0为例进行讲解,如图3.27所示。

图3.27 T0工作方式0控制逻辑图

图3.27中,有一个单刀双置开关C/,用于决定T0的工作方式:定时方式或计数方式。

(1)当C/=0时,开关接通定时功能(对机器周期计数);

(2)当C/=1时,开关接通计数功能(对由P3.4引脚传输的外部脉冲信号计数)。

计的数放在TH0和TL0中,不同的工作方式下,TH0和TL0的位数不一样(如表3.8所示),所以能够记录数值的范围也不一样。这就好比不同的工作方式下提供有不同大小的碗,能够装的水当然也不一样。计满后自动将溢出标志位TF0置位,同时向系统申请中断。

另外,图3.27中还有一个开关“控制端”,用于控制定时/计数功能的启动或停止。这个开关由TRO、GATE、经一串组合逻辑电路(包括非门、或门、与门)控制。由逻辑电路可知:当GATE=0时,TO的启动与停止仅受TR0控制;当GATE=1时,T0的启动与停止由TR0和外部中断引脚上的电平状态共同控制。

2.AT89S51/AT89S52单片机定时器/计数器涉及的专用寄存器及其作用

AT89S51单片机定时器/计数器涉及的专用寄存器是工作模式寄存器(TMOD),其负责设定单片机是工作于定时模式还是计数模式。TMOD是一个8位寄存器,其中低4位负责T0的设定,高4位负责T1的设定。MO、M1为工作模式设置位,通过设定MO、M1,可以使定时器/计数器工作于4种工作模式。而对于AT89S52单片机,由于有3个定时器/计数器,所以增加了T2MOD特殊功能寄存器供定时器/计数器T2使用。

通过TCON既可以查询定时器/计数器有没有溢出,又可以启动和停止定时器/计数器。