当M1M0=10时,T0采用方式2工作,如图5-4所示,此时T0是一个8位自动重装定时/计数器,低8位TL0用作计数(最大计数值为2 8 =256),高8位TH0用于保存计数初值。若TL0计数已满发生溢出,TF0置“1”的同时,TH0中的初值将自动装入TL0。
图5-4 定时/计数器T0工作方式2的原理图
提示
方式2的计数范围虽然比较小,但是初值可自动恢复,因此适用于计数范围较小、需要重复计数的场合,例如脉冲信号发生器。
【例5-3】 在工业流水线生产中,常利用传感器检测货品经过个数。这里我们进行模仿操作,由单片机定时器T1的外部脉冲输入引脚对检测的脉冲信号进行计数,当计数满12个时,让电机运转3秒后停止。脉冲计数及电机控制的电路如图5-5所示。
图5-5 脉冲计数及电机控制电路图
分析如下:
利用T1的方式2计数对外部脉冲计数,根据题目要求,当计数12次能够产生溢出,则T1的初值应设定为256-12=244。TMOD寄存器的高4位是针对T1进行设置,其中M1M0=10设为方式2,
设为计数方式。电机的启动与停止通过P1.0进行控制,当P1.0输出1时三极管导通,电机得电运行,当P1.0输出0时,三极管截止,电机失电停止。
c语言的源程序如下:
工作方式3及应用当M1M0=11时,T0采用方式3工作,如图5-6所示,在这种工作方式下,T0被拆成两个独立的定时/计数器来用。其中,TL0使用T0原有的资源,可以作为8位定时/计数器;TH0使用T1的TR1和TF1,只能对内部脉冲计数,作为定时器使用。