首页 > 代码库 > 单片机定时器2使用

单片机定时器2使用

定时器T2

reg52.h没有T2MOD寄存器

regx55.hT2MOD寄存器而且sbit已经定义

概述

定时器2是一个16位通用计数器,其具有两种操作模式:16位自动重载模式和16位捕获模式。

如果预分频功能被禁止,定时器2工作时,16位通用加法计数器以12分频的周期脉冲计数,每个周期16位通用加法计数器加1或减1

定时器2T2MOD寄存器、T2CON存器、功能存器TH2TL2RC2HRC2L等电路构成。

TH2TL2构成16位通用计数器。

RC2HRC2L作为16位寄存器,在自动重载模式中RC2HRC2L作为16位通用计数器的16位初值寄存器

捕捉模式中,当引脚T2EX上出现下降沿跳变时,把TH2TL2的当前值捕捉到RC2HRC2L中去。

  1.控制寄存器T2CON

T2CON(T2的控制寄存器),字节地址0C8H:

位地址   0CFH    0CEH   0CDH   0CCH   0CBH   0CAH   0C9H   0C8H

符  号   TF2     EXF2   RCLK   TCLK   EXEN2  TR2    C/T2   CP/RT2

各位的定义如下:

TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。

EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。EXF2也是只能通过软件来清除的。

RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器

TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器

EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。

TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2

C/T2T2的定时方式或计数方式选择位。只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。

CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2重装载;CP/RT2=1时,选择捕获方式,这时若T2EX引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。但是如果RCLK=1TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。

 2.模式寄存器T2MOD

寄存器T2MOD用来选择定时器2的工作模式。其组成如图8-8所示。

 

T2MOD(方式寄存器),字节地址0C9H

 

D7     D6     D5     D4     D3     D2     D1     D0

--      --      --      --       --      --      T2OE   DCEN

T2OET2输出允许位,当T2OE=1的时候,允许时钟输出到P1.0。(仅对80C54/80C58有效)

DCEN:向下计数允许位。DCEN=1是允许T2向下计数,否则向上计数。

 

T2的数据寄存器TH2TL2T0T1的用法一样,而捕获寄存器RCAP2HRCAP2L只是在捕获方式下,产生捕获操作时自动保存TH2TL2的值。

    以上是T2的相关寄存器的描述,其实用法上跟T0T1是差不多的,只是功能增强了,设置的东西多了而已。

定时/计数器2其实用到最多的就是T2CON这个寄存器啦,它设定的定时和计数的方式。有三种工作方式,捕获,自动重装,波特率发生器

 

 

定时器T2工作模式

波特率发生器:

  当T2CON(表3)中的TCLK 和RCLK 置位时,定时/计数器2 作为波特率发生器使用。如果定时/计数器2 作为发送器或接收器,其发送和接收的波特率可以是不同的,定时器1 用于其它功能,如图7 所示。若RCLK 和TCLK 置位,则定时器2工作于波特率发生器方式。

  波特率发生器的方式与自动重装载方式相仿,在此方式下,TH2 翻转使定时器2 的寄存器用RCAP2H 和RCAP2L 中的16位数值重新装载,该数值由软件设置。

  在方式1 和方式3 中,波特率由定时器2 的溢出速率根据下式确定:

方式1和3的波特率=定时器的溢出率/16

定时器既能工作于定时方式也能工作于计数方式,在大多数的应用中,是工作在定时方式(C/T2=0)。定时器2 作为波特率发生器时,与作为定时器的操作是不同的,通常作为定时器时,在每个机器周期(1/12 振荡频率)寄存器的值加1,而作为波特率发生器使用时,在每个状态时间(1/2 振荡频率)寄存器的值加1。波特率的计算公式如下:

  方式1和3的波特率=振荡频率/{32*[65536-(RCP2H,RCP2L)]}式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16 位无符号数。

  定时器2 作为波特率发生器使用的电路如图7 所示。T2CON 中的RCLK 或TCLK=1 时,波特率工作方式才有效。在波特率发生器工作方式中,TH2 翻转不能使TF2 置位,故而不产生中断。但若EXEN2 置位,且T2EX 端产生由1 至0 的负跳变,则会使EXF2 置位,此时并不能将(RCAP2H,RCAP2L)的内容重新装入TH2 和TL2 中。所以,当定时器2 作为波特率发生器使用时,T2EX 可作为附加的外部中断源来使用。需要注意的是,当定时器2 工作于波特率器时,作为定时器运行(TR2=1)时,并不能访问TH2 和TL2。因为此时每个状态时间定时器都会加1,对其读写将得到一个不确定的数值。

  然而,对RCAP2 则可读而不可写,因为写入操作将是重新装载,写入操作可能令写和/或重装载出错。在访问定时器2或RCAP2 寄存器之前,应将定时器关闭(清除TR2)。

产生11.0592MHz, 9600bps

void Inituart(void)//11.0592MHz,9600bps

{TH2=RCAP2H=0Xff;
 TL2=RCAP2L=0XDC;
 T2MOD=0;//reg52没有
T2CON=0X34;

}

2.自动重载模式

控制寄存器T2CON中的     置“0”时,定时器2被选择为自动重载模式。

该模式下,定时器2计数至溢出时,将寄存器RC2HRC2L中的16位初始值重新装入定时器的TH2TL2寄存器中,开始新一轮计数循环。

并置位寄存器T2CONTF2位表示计数溢出,从而向CPU发送中断请求信号。

溢出标志TF2必须由程序清零。根据控制寄存器T2MODDCEN控制位的设置,自动重载模式可进一步分为两种类型。

1)禁止递增/递减计数模式

DCEN = 0,则递增/递减计数选择被禁止,此时定时器只能递增计数。工作原理如图8-10所示。

定时器2寄存器:寄存器T2CONT2MOD包含定时器2的控制位和状态位(如表2和表3所示),寄存器对RCAP2HRCAP2L是定时器2的捕捉/自动重载寄存器。中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。

 

 

EXEN2 = 0,置位TR2定时器开始递增计数,计数至最大值FFFFH后溢出并置位TF2,同时将寄存器RC2中的16位重载值重新装入定时器寄存器。

重载值由软件预先设置。新一轮计数循环开始,定时器同上一轮计数循环一样,从重载值开始递增计数。

EXEN2 = 1,置位TR2定时器开始递增计数至最大值FFFFH。计数溢出或输入引脚T2EX的负/正跳变(由寄存器T2MOD的位EDGESEL选择)均会引起16位重载,将寄存器RC2的内容重新装入定时器寄存器。

中断标志位:

若由溢出引起重载,溢出标志TF2置位。

若由引脚T2EX的负/正跳变引起重载,寄存器T2CON中的EXF2置位。

这两种情况均产生中断,定时器进入下一轮计数循环。EXF2标志和TF2一样必须由软件清零。

 

允许硬件启动时(T2RHEN=1)

T2EX第一个上升沿/下降沿触发TR2=1启动T2;

上升沿/下降沿的选择由T2REGS选择;

如果使能外部控制(EXEN2=1),引脚T2EX的边沿跳变完成两个任务:(由T2REGS选择上升沿/下降沿)

启动T2

EXF2置位

2)以递增或递减计数。

引脚T2EX的逻辑电平为1

定时器2递增计数,因此定时器递增计数,计数至最大值FFFFH后溢出并置位TF2RC2寄存器的16位重载值重新装入定时器寄存器。

引脚T2EX的逻辑电平为0

定时器2递减计数。定时器递减计数并当THL2的值和寄存器RC2中的值相等时发生下溢。下溢后置位TF2,并将值FFFFH重新载入定时器寄存器THL2

若允许硬件启动T2(当T2RHEN=1)时,根据T2EX输入的是上升沿/下降沿可将T2设置为递增、递减计数

T2由上升沿启动,T2只能工作于递增模式

T2由下降沿启动,T2只能工作于递减模式

定时250us产生2kHz方波

void Inittimer2 (void)//12MHz,2kHz

{TH2=RCAP2H=0Xff;
 TL2=RCAP2L=0XDC;
 T2MOD=0;//reg52没有

IE=0XA0;

T2CON=0X04;

}

void timer2(void) interrupt 5 using 2
{ TF2=0;
    P1_2=!P1_2;
}

main()
{  inittimer2();
 while(1);

}

3.捕获模式

控制寄存器T2CON中的     EXEN2置位时,定时器进入16位捕获模式。

此模式下,递减计数功能必须禁止。16位计数器始终递增计数,计数至最大值FFFFH后溢出,TF2置位并将0000H重新载入定时器寄存器TH2TL2中。

溢出后TF2置位,则定时器向CPU发送中断请求。

在引脚T2EX的下降沿/上升沿(由T2MOD.EDGESEL选择),将定时器寄存器(THL2)的值捕获到寄存器RC2中。如果在计数器加1时检测到捕获信号,计数器先加1然后执行捕获操作,从而确保总能捕获到定时计数器的最新值。执行完捕获操作,EXF2置位、可用来产生中断请求

若允许硬件启动T2(当T2RHEN=1)时,引脚T2EX输入的第一个下降沿/上升沿(由T2MOD.EDGESEL选择)启动T2

在启动T2的同时,置位EXF2

在下一个下降沿/上升沿到来时,将进行捕获操

引脚号第二功能  P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出

 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)