STC89C52开发学习(八)

STC89C52独有的T2定时器

和一般的51单片机相比较,52单片机多出一个T2定时器/计数器。定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位,可以将其设置位定时器或者是计数器模式;通过设置T2CON中的工作模式选择位可以将定时器2设为3种工作模式,分别是:捕获、自动重装载和波特率发生器(这里只对波特率发生器进行展开)

STC89C52开发学习(八)_第1张图片

波特率发生器模式

寄存器T2CON中TCLK和RCLK位允许从定时器1或定时器2获得串行口发送和接收的波特率。当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率有同样的作用。

下面先看一下定时器2在波特率发生器模式下工作的逻辑结构:
STC89C52开发学习(八)_第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的串口通信

你可能感兴趣的:(C51开发)