51单片机串行口波特率计算

 

1.工作方式介绍:

 

方式 0 这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。 

常用于串行口外接移位寄存器,以扩展并行I/O口,这种方式不适用与两个MCS-51之间的串行通信。
 

方式1真正用于数据的串行发送和接收。TXD引脚和RXD引脚分别用于发送和接收数据。

方式1收发1帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。


方式 2 串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控为10的第九位数据和1位停止位1。采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 1/32 ,可由 PCON 的最高位选择。 

方式 3 方式 3 与方式 2 完全类似,唯一的区别是方式 3 的波特率是可变的。而帧格式与方式 2- 样为 11 位一帧。所以方式 3 也适合于多机通信。

 

SM0  SM1   方式   

 0      0        0   同步移位寄存器方式(用于扩展I/O口)

 0      1        1   8位异步收发,波特率可变(由定时器控制)

 1      0        2   9位异步收发,波特率为fosc/64fosc/32

 1      1        3   9位异步收发,波特率可变(由定时器控制)

 

2.计算公式总结:

 

方式0波特率固定为:fosc / 12

 

方式1波特率的计算公式为:(串行口为波特率可变的8位异步通信接口,SMOD为PCON寄存器的最高位值(0或1))

         方式1波特率 =(2^SMOD / 32) * 定时器T1的溢出率

注:当SMOD=1时,要比SMOD=0时的波特率加倍,所以也称SMOD位为波特率倍增位

 

方式2的波特率由下式确定:

         方式2波特率=( 2^SMOD / 64) * fosc

方式3的波特率由下式确定:

         方式3波特率 = (2^SMOD / 32) * 定时器T1的溢出率

 

溢出速率 = 1 / 溢出时间

溢出时间(相当于定时时间)= (2^8 – TH1初值)* Tcy

机器周期Tcy = 12时钟周期 = 12*(1/fosc)

故:溢出速率 = 1 / 溢出时间 = 1 / [(256 - TH1初值)* (12 / fosc)] = fosc / [12 *(256-TH1初值)]

计数速率 = 1 / 计数时间 = 1 / (12 / fosc) = fosc / 12

故也可写成:溢出速率 = 计数速率 / (256-TH1初值) = fosc / [12 *(256-TH1初值)]   

注:一般来说,定时器方式2用来确定波特率是比较理想的,它不需要中断服务程序设置初值,且算出的波特率比较准确。在用户使用的波特率不是很低的情况下,建议使用定时器T1的方式2来确定波特率。定时器方式1或方式3定时,常用T1作为波特率发生器。

而对于定时器方式0和方式1的最大特点是计数溢出后,计数器为全0。因而在循环定时或循环计数应用时就存在反复装入计数初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对此问题而设置的。定时器/计数器的方式2位自动恢复初值的(初值自动装入)8位定时器/计数器,TLX作为常数缓冲器,当TLX计数器溢出时,在置1溢出标志位TFX的同时,还自动的将THX中的初值送入至TLX,使TLX从处置开始重新计数。这种方式可以省去用户软件中重装处置的程序,简化定时器初值的计算方法,可以相当精确的确定定时时间。

而定时器方式3是为了增加1个附加的8位定时器/计数器而提供的,从而使MCS-51具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR0=0,停止计数(此时T1可以用来做串口波特率发生器。)

猜你喜欢

转载自blog.csdn.net/WalterBrien/article/details/92847894