所示。与TL0的情况不同,对于定时器/计数器0的另一半TH0,则只能作为简单的定时器使用。而且由于定时器/计数器0的控制位已被TL0独占,因此只好借用定时器/计数器1的控制位TR1和TF1。即以计数溢出去置位TF1,而定时的启动和停止则受TR1的状态控制。由于TL0既能作定时器使用也能作计数器使用,而TH0只能作定时器使用却不能作计数器使用,因此在工作方式3下,定时器/计数器0可以构成二个定时器或一个定时器一个计数器。
(2)工作方式3下的定时器/计数器1
如果定时器/计数器0已工作在工作方式3,则定时器/计数器1只能工作在方式0、方式1或方式2下,它的运行控制位TR1及计数溢出标志位TF1已被定时器/计数器0借用,如图6-10所示。
在这种情况下,定时器/计数器1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。因为已没有计数溢出标志位TF1可供使用,因此只能把计数溢出直接送给串行口。当作为波特率发生器使用时,只需设置好工作方式,便可自动运行。如要停止工作,只需送入一个把它设置为方式3的方式控制字就可以了。因为定时器/计数器1不能在方式3下使用,如果硬把它设置为方式3,就停止工作。
<>定时器/计数器的应用举例
例6-9 设单片机的晶振频率f=6MHz,使用定时器1以方式1产生周期为500μs的等宽正方波脉冲,并由P1.0输出,以中断方式完成。
① 计算计数初值
250=(216-COUNT)×2,求得计数器初值:(TH1)=FFH,(TL1)=83H ② 确定TMOD寄存器的内容 ③ 程序
定时器1向CPU申请中断时,CPU是转到001BH去响应中断,而001BH开始的8个单元放不下中断服务程序,所以在001BH处安排一条LJMP INT_T1。
例6-10 利用单片机内的定时器/计数器来定时,每隔
1秒钟把累加器A的内容循环右移一次,共移8次。(设单片机晶振频率f=6MHz):
例6-11 门控位GATE的使用,使用T0测试
引脚上正脉冲宽度TP。
TMOD中有一门控位GATE,其功能是使T0、T1的运行受到外部中断请求 电平的控制。当GATE(TMOD.3)=1,必须使TR0和 (TMOD.7)=1,必须使TR1和
、
同时为1时,T0才运行;当GATE
同时为1时,T1才运行。
作为GATE的应用实例,这里介绍一种脉冲宽度的检测方法。设要检测的正脉冲加在 上,其宽度为TP。检测方法是:设置定时器T0为方式1、门控、定时。在 低电平时软件启动T0,但这时T0并不立即计数,而是要等到 计时。当
为
变为高电平时T0才开始
变为低电平时,T0随之停止计时。这时使TR0=0,读出TH0、TL0的内容
乘以定时脉冲周期,可得到被检测脉冲宽度为TP。
执行以上程序,得到被检测脉冲宽度为TP =(R6R7)×12/f(f为时钟频率)。 例6-12 用单片机定时/计数器设计一个秒表,由P1口连接的LED采用BCD码显示,发光二极管亮表示0,暗表示1。计满60s后从头开始,依次循环。
解:定时器1工作于定时方式1,产生1s的定时,假设主频focs=12M