这里将介绍另一款定时器TMR2模块,TMR2与前面介绍的TMR0和TMR1相比,最大的差别是只能工作于定时模式,因此称它为“定时器TMR2”。
TMR2为8位宽,附带二个4位宽的分频器:一个“预分频器”和一个“后分频器”,一个可编程的8位周期寄存器PR2。其主要用途:
1. 可以用作时间定时器,但是不能作为计数器;
2. 可以为同步串行端口MSSP模块提供波特率时钟;
3. 可以与CCP模块配合使用,实现脉宽调制PWM功能。
TMR2的核心是一个可以由软件读/写的8位宽的计数器,它也是按递增计数,从某一初值(缺省为0)开始递增,直到与周期寄存器PR2中内容匹配之后,在下一次递增时则返回到00H,并且会产生匹配信号,该匹配信号将作为“后分频器”的计数脉冲。
只有在后分频器产生溢出时,才会将溢出中断标志位TMR2IF(PIR1的bit1)置1。如果此时相关的中断使能位都置位,则会引起CPU的中断响应。通过对中断使能位TMR2IE的置位或复位,即可允许或禁止CPU响应TMR2产生的中断请求。 需要注意的是: 1. TMR2和RAM空间统一编址,地址为11H;
2. 可用软件方式直接读/写TMR2的内容;
3. 有一个4位的预分频器和一个4位的后分频器;
4. 有一个8位周期寄存器;
5. 累加计数的触发信号只能选择内部系统时钟;
与TMR2有关的寄存器共有6个,如下表所示。这6个寄存器中的前3个寄存器的功能可以查看“中断系统”。在此介绍TMR2控制寄存器T2CON。
TMR2控制寄存器T2CON是一个只用到低7位的可读/写寄存器,最高位未用,其余各位的含义如下:
1. TOUT-PS3~TOUT-PS0:TMR2后分频器分频比选择位,如下表所列:
2. TMR2-ON:TMR2使能控制位。1=启用TMR2;0=关闭TMR2,可以降低功耗。
3. T2CK-PS1~T2CK-PS0:预分频器分频比选择位,如下表所列:
TMR2的内部结构,如下图所示,包含5个组成部分。下面分析各个部分的功能和组成关系。 核心部分就是一个8位宽的累加计数器TMR2。其复位值是00H,也可以是在00H~FFH范围内由用户设定的一个起始值。
4位宽的预分频器,对于进入TMR2的时钟信号进行预先分频,允许选择3种不同的分频比(1:1、1:4或1:16)。
注意:在对TMR2或控制寄存器进行写操作时,都可以使预分频器清0;在用任何方式复位时,都会对预分频器清0。
周期寄存器PR2也是一个8位可读/写寄存器。用来预置一个作为TMR2一次计数过程结束的周期值。芯片复位后PR2寄存器被自动设置为全1(FFH)。
比较器是一个8位宽的按位比较逻辑电路,只有当参加比较的两组数据完全相同之后,下一次递增时,“匹配”输出端才会送出高电平,其他情况下该输出端均保持低电平。
4位宽的后分频器,对于比较器的输出信号进行后续分频,允许连续选择16种分频比,其输出信号频率是输入信号频率的1/N (N=1~16) 。
TMR2的工作是可控的,所以还包含一个控制门G1。只有当TMR2使能位TMR2ON置1,系统时钟才能通过G1,TMR2也才能进入活动状态。
TMR2只有一种工作方式:定时器方式,其触发钟信号也只能从内部系统时钟4分频后得到。
5.1 禁止TMR2工作
TMR2也比TMR0多了一种选择,即可以被用户程序关闭而节电,此点类似于TMR1。具体方法是将TMR2使能控制位TMR2ON清0。此时与门G1的一只引脚被低电平封锁,其输出端均保持低电平;因此使得累加计数器TMR2不能活动。
5.2 定时工作方式
TMR2只有定时工作模式,该模式可以被用来实现一般的延时或定时。但是,TMR2的主要目的并不是把它用作普通的定时器,而是为CCP模块或MSSP模块提供周期可调的时基信号。
用作周期可调的时基发生器
当TMR2被用作周期可调的时基发生器时,可以为CCP模块或MSSP模块提供周期可调的时基信号。
这时,应该将中断使能位TMR2IE清0,即屏蔽TMR2的中断功能,相当于把后分频器的作用也屏蔽了;通过对周期寄存器PR2设置不同的值,以及给预分频器设定不同的分频比,来灵活调整TMR2输出端的信号周期TTMR2 。该周期的计算式为:
TTMR2=(4/fosc)*N1*(PR2+1)
其中:fosc为系统时钟频率;N1为预分频器的分频比(取1、4或16);PR2为周期寄存器预赋值;PR2+1是因为在TMR2与PR2匹配后的下一次增量时TMR2才回00H。
用作延迟时间可调周期性定时器
把TMR2作为延迟时间可调的周期性定时器,会比TMR0的定时方式更加节省软件开销。
TMR2不必像TMR0那样,每次溢出后,都要给寄存器TMR2赋初值。只要一次性设定溢出周期(通过设定预分频器、后分频器以及PR2来实现),TMR2就将会周期性地按预先设定的溢出周期产生超时中断。该超时溢出周期的计算式为 :
TTMR2IF=(4/fosc)*N1*(PR2+1)*N2
其中,N2为后分频器的分频比(连续可取1~16)。这时的简化电路如下图所示:
用作普通定时器
TMR2也可以像TMR0那样用作普通的定时器,这样使用时,可以将后分频器的分频比设定为1:1,PR2的值设定为最大值FFH,就相当于把后分频器、周期寄存器以及比较器的功能禁止掉了,使得它们不发挥作用。
从而使TMR2简化为类似于TMR0一样,带有一个分频比可设定为1:1、1:4或1:16的4位预分频器。这时超时溢出周期的计算式为:
TTMR2IF=(4/fosc)*N1*(256-M)
其中,M为TMR2的初始值。简化电路如下图所示:
采用这种用法时,需要在TMR2每次超时溢出时,都要给TMR2赋一次初始值。累加计数寄存器TMR2,就会以该初始值为起点开始增量,直到递增到FFH,之后再出现一个计数脉冲,就会将TMR2复位清0,并且发出中断请求(TMR2IF被置1)。如果想把预分频器的功能禁止掉,可以把它的分频比也设置为1:1,这样就相当于把预分频器给短路掉了。