8051单片机的定时器/计数器T0和T1可由软件对特殊功能寄存器TMOD中控制位C/进行设置,以选择定时功能或计数功能。设置M1、M0位,有4种工作模式,即模式0、模式1、模式2和模式3。在模式0、1和2时,T0与T1的工作模式相同;在模式3时,两个定时器的工作模式不同。
1)模式0
模式0是选择定时器(T0或T1)高8位加低5位的一个13位定时器/计数器。图5.4是T0在模式0时的逻辑电路结构。
图5.4 定时器模式0的逻辑电路结构
在这种模式下,16位寄存器(TH0和TL0)只用13位,其中TL0的高3位未用,其余位占整个13位的低5位,TH0占高8位。当TL0的低5位溢出时,向TH0进位,而TH0溢出时向中断标志位TF0进位(硬件TF0),并申请中断。T0溢出否可查询TF0是否置位,以产生T0中断。
在图5.4中,C/=0时,控制开关接通振荡器12分频输出端,T0对机器周期计数,这就是定时工作方式。其定时时间为:当C/=1时,控制开关使引脚T0(P3.4)与13位计数器相连,外部计数脉冲由引脚T0(P3.4)输入,当外部信号电平发生“1”到“0”跳变时,计数器加1,这时,T0成为外部事件计数器。这就是计数工作方式。
t=(213-T0初值)×振荡周期×12
当GATE=0时,使或门输出A点电位为常“1”,或门被封锁,于是,引脚输入信号无效。这时,或门输出的常“1”打开与门,B点电位取决于TR0状态,由TR0一位就可控制计数开关K开启或关断T0。若软件使TR0置1,接通计数开关K,启动T0在原值上加1计数,直至溢出。溢出时,13位寄存器清零,TF0置位并申请中断,T0仍从0重新计数。若TR0=0,则关断计数开关K,停止计数。
当GATE=1时,A点电位取决于(P3.4)引脚的输入电平,仅当输入高电平且TR1=1时,B点才是高电平,计数开关K闭合,T0开始计数,当由1变0时,T0停止计数。这一特性可以用来测量在端出现的正脉冲的宽度。
2)模式1
该模式是一个16位定时器/计数器,其逻辑电路结构如图5.5所示。它的结构与操作几乎与模式0完全相同,唯一的区别是:在模式1中,寄存器TH0和TL0是以全16位参与操作,用于定时工作方式时,其定时时间为:
t=(216-T0初值)×振荡周期×12
图5.5 定时器模式1的逻辑电路结构
用于计数工作方式时,计数长度为216=65536(个外部脉冲)。
3)模式2
模式2把TL0或TL1配置成一个可以自动重装载的8位定时器/计数器,其逻辑电路结构如图5.6所示。
TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0的内容重装载到TL0。此处的16位的计数器将被拆成两个,其中,TL0用作8位计数器,TH0用以保持初值。(www.xing528.com)
在程序初始化时,TL0和TH0由软件赋予相同的初值。一旦TL0计数溢出,置位TF0,并将TH0的初值再自动装入TL0,可继续计数,循环重复。用于定时器工作方式时,其定时时间(TF0溢出周期)为:
t=(28-TH0初值)×振荡周期×12
图5.6 定时器模式2的逻辑电路结构
用于计数工作方式时,最大计数长度(TH0初值=0)为28=256(个外部脉冲)。
这种工作方式可省去用户软件重装常数的程序,并可确保精度较高的定时时间,特别适于作串行口波特率发生器。
4)模式3
模式3对T0和T1是大不相同的。
若将T0设置为模式3,TL0和TH0将被分成两个互相独立的8位计数器,其逻辑电路结构如图5.7所示。
图5.7 定时器模式3的逻辑电路结构
其中TL0用原T0的各控制位、引脚和中断源,即C/、GATE、TR0、TF0和(P3.4)引脚、(P3.2)引脚。TL0除仅用8位寄存器外,其功能和操作与模式0(13位计数器)、模式1(16位计数器)完全相同。TL0也可为定时器方式或计数器方式。
TH0只可用作简单的内部定时功能(见图5.7),它占用了定时器T1的控制位TR1和T1的中断标志位TF1,其启动和关闭仅受TR1的控制。
定时器T1无操作模式3状态,若将T1设置为模式3,会使T1立即停止计数,也就是保持住原有的计数值,其作用相当于使TR1=0,封锁与门,断开计数开关K。
在定时器T0用作模式3时,T1仍可设置为模式0~2,如图5.8所示。TR1和TF1被定时器T0占用,计数器开关K已被接通,用T1控制位C/切换其定时器或计数器工作方式就可使T1运行。寄存器(8位、13位或16位)溢出时,只能将输出送入串行口或用于不需要中断的场合。在一般情况下,当定时器T1用作串行口波特率发生器时,定时器T0设置为工作模式3。此时,常把定时器T1设置为模式2用作波特率发生器,如图5.8(b)所示。
图5.8 定时器T0模式3下的T1结构
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。