1.方式0
定时器0和定时器1均可以工作在方式0,原理相同,以下以定时器0作说明。方式0为13位方式,由TL0的低5位和TH0的8位构成13位计数器(TL0的高3位无效)。方式0的结构如图5-3所示。
图5-3 T0(或T1)方式0结构图
定时/计数选择:当C/T=0时,T0为定时器,定时信号为振荡周期12分频后的脉冲;当C/T=1时,T0为计数器,计数信号来自引脚T1的外部信号。
定时器T0能否启动工作,还受到了TR0、GATE和引脚信号INT0的控制。由图中的逻辑电路可知,当GATE=0时,只要TR0=1就可打开控制门,使定时器工作;当GATE=1时,只有TR0=1且INT0=1,才可打开控制门。GATE、TR0、C/T的状态选择由定时器的控制寄存器TMOD和TCON中相应位状态确定,INT0则是外部引脚上的信号。
在一般的应用中,通常使GATE=0,从而由TR0的状态控制T0的开闭:TR0=1,打开T0;TR0=0,关闭T0。在特殊的应用场合,例如利用定时器测量接于INT0引脚上的外部脉冲高电平的宽度时,可使GATE=1,TR0=1。当外部脉冲出现上升沿,亦即INT0由0变1电平时,启动T0定时,测量开始;一旦外部脉冲出现下降沿,亦即INT0由1变0时,就关闭了T0。
定时器启动后,定时或计数脉冲加到TL0的低5位,从预先设置的初值(时间常数)开始不断增1。TL0计满后,向TH0进位。当TL0和TH0都计满后,置位T0的定时器回零标志TF0,以此表明定时时间或计数次数已到,以供查询或在打开中断的条件下,可向CPU请求中断。如需进一步定时/计数,需用指令重置时间常数。
在方式0下,当为计数工作方式时,计数值的范围是1~8192(213)。
当为定时工作方式时,定时时间的计算公式为
定时时间=(213-计数初值)×晶振周期×12或(213-计数初值)×机器周期
2.方式1
方式1与方式0几乎一样,只是方式1是16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成,从而比工作方式0有更宽的定时/计数范围。
当为计数工作方式时,计数值的范围是1~65536(216)。
当为定时工作方式时,定时时间计算公式为(www.xing528.com)
定时时间=(216-计数初值)×晶振周期×12或(216-计数初值)×机器周期
3.方式2
8位自动装入时间常数方式。由TL0构成8位计数器,TH0仅用来存放时间常数。启动T0前,TL0和TH0装入相同的时间常数,当TL0计满后,除定时器回零标志TF0置位,具有向CPU请求中断的条件外,TH0中的时间常数还会自动地装入TL0,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时/计数范围要小于方式0和方式1。方式2的结构如图5-4所示。
图5-4 T0(或T1)方式2结构图
当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH以硬件方法自动给计数器TL重新加载,变软件加载为硬件加载。初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。如此重复不止。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,最大只能到255。
这种自动重新加载工作方式非常适用于循环定时或循环计数应用,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用。
4.方式3
方式3只适用于定时器0。如果使定时器1为方式3,则定时器1将处于关闭状态。
当T0为方式3时,TH0和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0只能用作定时器,并使用T1的控制位TR1、回零标志TF1和中断源,如图5-5所示。
通常情况下,T0不运行于方式3,只有在T1处于方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串口波特率发生器的应用场合而特地提供的。
图5-5 T0(或T1)方式3结构图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。