STC89C516单片机内部有3个16位可编程的定时器/计数器,即定时器T0、T1和T2。它们既有定时又有计数功能。通过设置相关的特殊功能寄存器可以选择启动定时功能或计数功能。需要注意的是,这个定时器系统是单片机内部一个独立的硬件部分,它与CPU和晶振通过内部控制线连接并相互作用。CPU一旦开启定时功能后,定时器便在晶振的作用下自动开始计时,当定时器的计数器计满后,会产生中断,即通知CPU处理。
定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,用来确定T0和T1的工作方式和功能;TCON是控制寄存器,控制T0和T1的启动和停止以及设置溢出标志。T2MOD是定时器T2的模式控制寄存器。T2CON是T2的控制寄存器。
计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出的脉冲经过12分频后送来;另一个是T0或T1引脚输入的外部脉冲。每来一个脉冲计数器加1,当加到最大值时,再输入一个脉冲就使计数器归0,并且计数器的溢出使TCON寄存器中的TF0或TF1置1。如果使能了中断功能,则还会向CPU发出中断请求。如果定时器/计数器工作于定时器模式,则表示定时时间到;如果工作于计数模式,则表示计数值已满。
当设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个震荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期就是定时时间。
如果设置为计数模式,外部事件脉冲由T0或T1引脚输入到计数器,当CPU在一个周期内采集到高电平输入,而在下一个周期采集到低电平输入时,则计数器加1,更新的计数值在下一个周期装入计数器。由于检测一个下降沿需要两个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。