您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制基于AT89S51的波特率制定方法 正文
基于AT89S51的波特率制定方法

基于AT89S51的波特率制定方法

点击数:7220 次   录入时间:03-04 11:59:12   整理:http://www.55dianzi.com   电脑-单片机-自动控制
  在串行通信中,收、发双方发送或接收的波特率必须一致。通过软件对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位的值有关。其关系式为
  1
  若fosc=12 MHz:SMOD=0,波特率=187.5 kbit/s;SMOD=1,波特率=375 kbit/s。
  
  (3)串行口工作在方式1或方式3时,常用定时器Tl作为波特率发生器,其关系式为(1)
  1
  由式(1)可见,Tl的溢出率和SMOD的值共同决定波特率。
  
  在实际设定波特率时,Tl常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放备用初值。这种方式不仅使操作方便,也可避免因软件重装初值带来的定时误差。
  
  设定时器Tl方式2的初值为X,则有(2)
  2
  将式(2)代入式(1),则有(3)
  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)中,有
  2
  从中解得X=244=F4H。
  
  只要把F4H装入TH1和TL1,则Tl发出的波特率为2400 bit/s。该结果也可直接从上表中查到。
  
  这里时钟振荡频率选为11.0592 MHz,就可使初值为整数,从而产生精确的波特率。


本文关键字:波特率  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制