定时/计数器概述

一、定时/计数器概述

在工业检测与控制中,很多场合都要用到计数或者定时功能。例如,对外部脉冲进行计数、产生精确的定时时间以及作串行口的波特率发生器等。

89C51单片机内部设有两个16位的可编程定时/计数器,可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变,其结构框图如图5-3所示。

图5-3 定时器/计数器的结构框图

定时/计数器实质上就是一个加1计数器,其功能由软件控制、切换。16位的定时/计数器分别由两个8位的专用寄存器组成,即T0由TH0和TL0构成;T1由TH1和TL1构成。其访问地址依次为8AH—8DH,每个寄存器均可单独访问,这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,还可以保存T0、T1的溢出和中断标志。

当定时/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。由于一个机器周期等于12个振荡周期,所以计数频率f=fosc/12。如果晶振频率fosc为12MHz,则计数周期为1μs。

当定时/计数器为计数工作方式时,通过T0和T1的外部输入引脚(P3.4和P3.5)对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若本机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以,检测一个负跳变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。

例如,如果选用12MHz晶振,则计数器的最高计数频率为0.5MHz。为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

当CPU用软件给定时/计数器设置了某种工作方式之后,定时/计数器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时/计数器计满溢出,才可能中断CPU当前操作。CPU也可以重新设置定时/计数器工作方式,以改变定时/计数器的操作。