STC89C52独有的T2定时器
和一般的51单片机相比较,52单片机多出一个T2定时器/计数器。定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位,可以将其设置位定时器或者是计数器模式;通过设置T2CON中的工作模式选择位可以将定时器2设为3种工作模式,分别是:捕获、自动重装载和波特率发生器(这里只对波特率发生器进行展开)
波特率发生器模式
寄存器T2CON中TCLK和RCLK位允许从定时器1或定时器2获得串行口发送和接收的波特率。当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率有同样的作用。
下面先看一下定时器2在波特率发生器模式下工作的逻辑结构:
看不懂上面的图?哈哈哈哈,不重要,只需要看得见在TH2,TL2下有两个寄存器RCAP2H,RCAP2L,他们的值由软件预置。直接对TH2,TL2进行重装载,看过前面定时器章节的应该会懂,只可意会不可言传。
波特率计算方式
模式3,也就是波特率发生器模式:
公式:
波特率=振荡器频率/32x[65536-(RCAP2H,RCAP2L)]
下面先看看初始化波特率115200的使用
void bote_115200()
{
SCON = 0x50;//数据位8位,停止位1位,起始位1位怎么配!都要根据芯片手册来写 ,使能接收
T2CON |= 0x1<<4 | 0x1<<5; //TCLK = 1(TranmitCLock) RCLK = 1
TH2 = 0xFF;
TL2 = 0xFD;
RCAP2H = 0xFF; //RCAP2*的值为TH*重载
RCAP2L = 0xFD;
TR2 = 1; //启动定时器
EA = 1;
ES = 1;
}
常用的T2定时器作用就是用来设置波特率115200的串口通信