您的位置:网站首页 > 电器维修资料网 > 正文 >
基于AT89S51的波特率制定方法
★★★★★【文章导读】:基于AT89S51的波特率制定方法具体内容是:在串行通信中,收、发双方发送或接收的波特率必须一致。通过软件对at89s51的串行口可设定4种工作方式。其中方式0和方式2的波特率是固定的;方式1和方式3的波特率是可变的,由定时器t1的溢出率(t1每秒溢出的次数)来…
来源: 日期:2013-12-18 14:01:02 人气:标签:
在串行通信中,收、发双方发送或接收的波特率必须一致。通过软件对at89s51的串行口可设定4种工作方式。其中方式0和方式2的波特率是固定的;方式1和方式3的波特率是可变的,由定时器t1的溢出率(t1每秒溢出的次数)来确定。
波特率的定义
串行口每秒发送(或接收)的位数称为波特率。设发送一位所需要的时间为t,则波特率为1/t。
对于定时器的不同工作方式,得到的波特率的范围是不一样的,这是由定时器/计数器t1在不同工作方式下计数位数的不同所决定的。
定时器t1产生波特率的计算
波特率和串行口的工作方式有关。
(1)串行口工作在方式o时,波特率固定为时钟频率fosc的1/12,且不受smod位值的影响。若fosc=12 mhz,波特率为fosc/12,即1 mbit/s。
(2)串行口工作在方式2时,波特率仅与smod位的值有关。其关系式为
若fosc=12 mhz:smod=0,波特率=187.5 kbit/s;smod=1,波特率=375 kbit/s。
(3)串行口工作在方式1或方式3时,常用定时器tl作为波特率发生器,其关系式为(1)
由式(1)可见,tl的溢出率和smod的值共同决定波特率。
在实际设定波特率时,tl常设置为方式2定时(自动装初值),即tl1作为8位计数器,th1存放备用初值。这种方式不仅使操作方便,也可避免因软件重装初值带来的定时误差。
设定时器tl方式2的初值为x,则有(2)
将式(2)代入式(1),则有(3)
由式(3)可见,这种方式下波特率随fosc、smod和初值x而变化。
在实际使用时,经常根据已知波特率和时钟频率fosc来计算定时器tl的初值x。为避免繁杂的初值计算,常用的波特率和初值x间的关系常列成下表形式,以供查用。
表 用定时器tl产生的常用波特率
对上表有以下两点需要注意:
(1)在使用的时钟振荡频率fosc为12 mhz或6 mhz时,将初值x和,fosc带入式(7-3)中,分子除以分母不能整除,因此计算出的波特率有一定误差。要消除误差可以通过调整时钟振荡频率fosc实现,例如采用的时钟频率为11.0592 mhz。因此,当使用串行口进行串行通信时,为减小波特率误差,应该使用的时钟频率必须为11.0592 mhz。
(2)如果串行通信选用很低的波特率,如波特率选为55,可将定时器tl设置为方式1定时。但在这种情况下,tl溢出时,需在中断服务程序中重新装入初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整。
例如:若at89s51单片机的时钟振荡频率为11.0592 mhz,选用tl的方式2定时作为波特率发生器,波特率为2400 bit/s,求初值。
设t1为方式2定时,选smod=0。
将已知条件带入式(3)中,有
从中解得x=244=f4h。
只要把f4h装入th1和tl1,则tl发出的波特率为2400 bit/s。该结果也可直接从上表中查到。
这里时钟振荡频率选为11.0592 mhz,就可使初值为整数,从而产生精确的波特率。
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: 基于AT89S51的多机通信
- 下一篇: 基于AT89S51的双机串行通信的硬件连接