51系列的单片机中都有两个定时器T0和T1,网上的资料挺多的,52单片机比51单片机的资源多了一个定时器T2和128字节的ram。定时器T2的功能比T1、T0都强大,但描述它的资料不多,可能是使用得比较少的缘故吧。它是一个16位的具有自动重装和捕获能力的定时/计数器,它的计数时钟源可以是内部的机器周期,也可以是P1.0输入的外部时钟脉冲。T2的控制寄存器的功能描述如下: T2CON(T2的控制寄存器),字节地址0C8H: 各位的定义如下: TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件xx,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。 EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。EXF2也是只能通过软件来xx的。 RCLK:串行接收时钟标志,只能通过软件的置位或xx;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器 TCLK:串行发送时钟标志,只能通过软件的置位或xx;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器 EXEN2:T2的外部允许标志,只能通过软件的置位或xx;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。 TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2 C/T2:T2的定时方式或计数方式选择位。只能通过软件的置位或xx;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。 CP/RT2:捕获/重装载标志,只能通过软件的置位或xx。CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2重装载;CP/RT2=1时,选择捕获方式,这时若T2EX引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。 T2MOD(方式寄存器),字节地址0C9H: -- -- -- -- -- -- T2OE DCEN T2OE:T2输出允许位,当T2OE=1的时候,允许时钟输出到P1.0。(仅对80C54/80C58有效) DCEN:向下计数允许位。DCEN=1是允许T2向下计数,否则向上计数。 T2的数据寄存器TH2、TL2和T0、T1的用法一样,而捕获寄存器RCAP2H、RCAP2L只是在捕获方式下,产生捕获操作时自动保存TH2、TL2的值。 以上是T2的相关寄存器的描述,其实用法上跟T0、T1是差不多的,只是功能增强了,设置的东西多了而已。
51波特率计算公式 : 如TH1=0XFD TL1=OXFD; Smod=0 Fose=11.0592*1000000 计算出来的是9600 TMOD=0X20; //定时器1工作方式2,8位自动重载 TH1=OXFD; //初值 TL1=OXFD; PCON=0X00; //SMOD=0 TCON=0X40; //TR1=0 SCON=0X50 //,SM0=0,SM1=1,REN=1; 52波特率计算公式: Fose/32(2(16次方)-初值) 如定义115200的波特率 SCON=0x50; // UART_mode=1,REN=1 RCAP2H=0xFF; RCAP2L=0xFD; // 11.0592MHz 115200B=0xFFFD(-3) T2MOD=0; T2CON=0x34; // Set T2 to baud rate register |