这篇文章主要介绍了51单片机的定时器2的寄存器和功能。
首先,我们来了解一下定时器2控制寄存器T2CON。定时器2是一个16位定时器/计数器,可以通过设置特殊功能寄存器T2CON中的C/T2位将其作为定时器或计数器使用。定时器2有三种模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这三种模式由T2CON进行设置。T2CON寄存器的字节地址为C8H,单片机复位时T2CON全部被清0,其定义如下表所示。
接下来,我们详细解释一下各个寄存器的含义:
1. TF2(Timer 2 Overflow Flag):定时器2溢出标志位。当定时器2溢出时置位,必须由软件清0。当RCLK=1或TCLK=1时,TF2将不会置位。
2. EXF2(External Interrupt Flag):定时器2外部标志。当EXEN2=1且T2EX(单片机的P1.1口)的负跳变产生捕捉或重装时,EXF2置位。定时器2中断使能时,EXF2=1将使CPU进入定时器2的中断服务程序。EXF2必须用软件清0。在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断。
3. RCLK(Receive Clock Flag):接收时钟标志。RCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的接收时钟;RCLK=0时,定时器1的溢出脉冲作为接收时钟。
4. TCLK(Transmit Clock Flag):发送时钟标志。TCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的发送时钟;TCLK=0时,定时器1的溢出脉冲作为发送时钟。
5. EXEN2(External Interrupt Enable Flag):定时器2外部使能标志。当EXEN2=1且定时器2未用作串行口时钟时,允许T2EX引脚的负跳变产生捕获或重装;当EXEN2=0时,T2EX引脚的负跳变对定时器2无效。
在这里,我们还要对捕获功能进行简要介绍。捕获就是捕捉某一瞬间的值,通常用于测量外部某个脉冲的宽度或周期。使用捕获功能可以准确地测量出脉冲的宽度或周期。捕获的工作原理是:单片机内部有两组寄存器,其中一组的内部数值是按固定机器周期递增或递减的,通常这组寄存器就是单片机内部定时器的计数器寄存器(TLn,THn)。当与捕获功能相关的外部某引脚有一个负跳变时,捕获便会立即将此时第一组寄存器中的数值准确地捕获,并且存入另一组寄存器中,这组寄存器通常被称为“陷阱寄存器”(RCAPnL,RCAPnH)。同时向CPU申请中断,软件记录两次捕获之间的数据后,便可以准确地计算出该脉冲的周期。
最后,我们介绍一下TR2(Timer 2 Start/Stop Control Bit):定时器2启动/停止控制位。这一位置1时启动定时器2,清0则停止定时器2。
/T2 定时器/计数器选择位。
当 C/T2 =1 时,设置为外部事件计数器(下降沿触发);当 C/T2 =0 时,设置为内部定时器。
CP/RL2 捕获/重装标志。
当 CP/RL2=1 且 EXEN2=1 时,T2EX 引脚的负跳变产生捕获。
当 CP/RL2=0 且 EXEN2=0 时,定时器2 的溢出或 T2EX 引脚的负跳变都可以使定时器自动重装。当 RCLK=1 或 TCLK=1 时,该位无效,且定时器强制为溢出时自动重装。
这个寄存器对定时器/计数器2 的模式设置如下表所示。
定时器/计数器2 的三种工作模式:
1. 定时器模式:定时器2 作为基本计时器工作,具有预分频功能。
2. 计数器模式:定时器2 作为基本计数值计数器工作,具有预分频功能。
3. 重复计数器模式:定时器2 作为基本计数值计数器工作,具有预分频功能,并且可以进行重复计数操作。
2. 定时器2 模式控制寄存器 T2MOD
该寄存器用来设定定时器2 自动重装模式的递增或递减模式,字节地址为 C9H,该寄存器不可位寻址。单片机复位时 T2MOD 全部被清0,这个寄存器的定义如下表所示。
定时器2 模式控制寄存器 T2MOD
T2OE——定时器2 输出使能位。
DCEN——向下计数使能位。
3. 定时器2 的三种模式:
(1) 捕获模式:通过 T2CON 中的 EXEN2 设置两个选项。如果 EXEN2=0,定时器2 作为 16 位定时器或计数器(由 T2CON 中的 C/T2 位选择),溢出时置位 TF2(定时器2 溢出标志位)。该位可用于产生中断(通过使能 IE 寄存器中的定时器2 中断使能位)。如果 EXEN2=1,与以上描述相同,但增加了一个特性,即外部输入 T2EX 引脚由 l 变0 时,将定时器2 中 TL2 和 TH2 的当前值各自捕获到 RCAP2L 和 RCAP2H 中。另外,T2EX 引脚的负跳变使得 T2CON 中的 EXF2 置位,EXF2 也像 TF2 一样能够产生中断(其向量与定时器2 溢出中断地址相同,定时器2 中断服务程序通过 TF2 和 EXF2 来确定引起中断的事件)。捕获模式如下图所示。在该模式中,TL2 和 TH2 没有重新装载值,甚至当 T2EX 产生捕获事件时,计数器仍以 T2 脚的负跳变或震荡频率的 1/12(12 时钟模式)或 1/6(6
在16位自动重装模式中,定时器2可以通过C/T2位配置为定时器/计数器,编程控制递增/递减计数。计数方向由T2MOD寄存器中的DCEN位确定。当DCEN=0时,定时器2默认为向上计数。当DCEN=1时,定时器2可通过T2EX引脚确定递增或递减计数。下图展示了DCEN=0时,定时器2自动递增计数的原理图。在该模式下,通过设置EXEN2位进行选择。如果EXEN2=0,定时器2递增到0FFFFH,并在溢出后将TF2置位,然后将RCAP2L和RCAP2H中的16位值作为重新装载的值装入定时器2。RCAP2L和RCAP2H的值是通过软件预设的。如果EXEN2=1,16位重新装载可以通过溢出或T2EX引脚的负跳变实现。此负跳变同时将EXF2置位。如果定时器2的中断被使能,则当TF2或EXF2置1时产生中断。
当DCEN=1时,定时器2可以递增或递减计数。这种模式的工作原理如下图所示...(此处省略了下文)。此模式下,允许T2EX引脚控制计数的方向。当T2EX引脚引脚置1时,定时器2递增计数,计数到0FFFFH后溢出并置位TF2,还将产生中断(如果中断被使能)。定时器2的溢出将使RCAP2L和RCAP2H中的16位值作为重新装载值放入TL2和TH2。当T2EX置0时,定时器2递减计数。当TL2和TH2计数到等于RCAP2L和RCAP2H时,定时器2将TF2置位并产生中断,同时将0FFFFH载入到TL2和TH2。
(2)波特率发生器模式
寄存器T2CON的TCLK和(或)RCLK位允许从定时器1或定时器2获得串行口发送和接收的波特率。当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率的设置有同样的作用。通过这两位,串行口能得到不同的接收和发送的波特率,一个通过定时器1产生,另一个通过定时器2产生。有关波特率生成的工作原理,我们将在以后的串行口实验中进行介绍,这里不做过多介绍。