定时器/计数器实质上是加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器。定时器/计数器的基本结构如图2.1所示。
图2.1 定时器/计数器基本结构
由图2.1可知,定时器1、定时器0都是16位加法计数器,分别由两个8位的计数器TH1和TL1,TH0和TL0构成,它的工作状态及工作方式由定时器/计数器的工作方式寄存器TMOD及定时器/计数器控制寄存器TCON的各位决定。工作状态有定时和计数两种,由TMOD中的一位控制。工作方式有0~3共4种,由TMOD中的两位编码决定。寄存器TMOD和TCON通过软件来写入。每个定时器可以被单独访问。定时器/计数器的输出是加法计数器的计满溢出信号,它使TCON的某位(TF0或TF1)置1,作为定时器/计数器的溢出中断标志。
当定时器工作在计数方式时,计数器对来自外部输入端T0(P3.4)或T1(P3.5)信号进行计数,当检测到输入端信号出现下降沿时,计数器加1,它在每个机器周期的S5P2时采样外部输入电平,如果前一个机器周期采样值为高电平,在后一个机器周期为低电平时,则计数器加1。新的计数值是在检测到输入引脚电平出现下降沿后,于下一个机器周期的S3P1期间装入计数器中,因此检测一个从1到0的下降沿需要两个机器周期,所以最高计数频率为振荡频率的1 /24。故必须保证输入信号从1到0的下降沿至少在一个机器周期内保持不变。
当定时器工作在定时方式时,输入时钟脉冲是由晶体振荡的输出12分频后得到的,因此是对其机器周期进行计数,其频率为晶振频率的1 /12。如单片机系统采用12 MHz晶振,其机器周期为1 μs。
这里要注意的是:计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应是计数器计数的最大值与这一计数值的差值,设最大值为M,计数值为N,初值为X,则X的计算方式如下:
计数状态:X=M—N
定时状态:X=M—定时时间/T
而 T=12 ÷晶振频率