在串行通信中,为了保证数据的发送和接收成功,要求发送方发送数据的速率与接收方接收数据的速率相同,而将双方的波特率设置相同就可以达到这个要求。
在串行通信的四种方式中,方式0的波特率是固定的,而方式1~方式3的波特率则是可变的。波特率是数据传送的速率,它用每秒传送的二进制数的位数来表示,单位符号是Baud。
1.方式0的波特率
方式0的波特率固定为时钟振荡频率的1/12,即方式0的波特率=
2.方式2的波特率
方式2的波特率由寄存器PCON中的SMOD位决定。当SMOD=0时,方式2的波特率为时钟振荡频率的1/64;当SMOD=1时,方式2的波特率加倍,为时钟振荡频率的1/32,即
方式2的波特率=2SMOD/64·fosc
3.方式1和方式3的波特率
方式1和方式3的波特率除了与SMOD位有关,还与定时/计数器T1的溢出率有关。方式1和方式3的波特率可用下式计算:
方式1、3的波特率=2SMOD/32·T1的溢出率
T1的溢出率是指定时/计数器T1在单位时间内计数产生的溢出次数,也即溢出脉冲的频率。
在将定时/计数器T0设为工作方式3时(设置方法见第5章内容),T1可以工作在方式0、方式1或方式2三种方式下。当T1工作于方式0时,它对脉冲信号(由时钟信号fosc经12分频得到)进行计数,计到213时会产生一个溢出脉冲到串行通信口作为移位脉冲;当T1工作于方式1和2时,则分别要计到216和28-X(X为T1的初值,可以设定)才产生溢出脉冲。
如果欲提高串行通信口的波特率,可让T1工作在方式2,因为该方式计数时间短,溢出脉冲频率高,并且能通过设置T1的初值来调节计数时间,从而改变T1产生的溢出脉冲的频率(又称T1的溢出率)。当T1工作在方式2时,T1两次溢出的时间间隔,也即T1的溢出周期为
T1的溢出周期=12/fosc·(28-X)
T1的溢出率为溢出周期的倒数,即(www.xing528.com)
T1的溢出率=fosc/[12·(28-X)]
故当T1工作在方式2时,串行通信口工作方式1、3的波特率为
方式1、3的波特率
由上式可推导出T1在方式2时,其初值X为
X=28-2SMOD·fosc/(384·波特率)
例如,单片机的时钟频率fosc=11.0592MHz,现要让串行通信的波特率为2400Baud,可将串行通信口的工作方式设为1、T1的方式设为2,并求出T1应设的初值。
求T1初值的过程如下。
先进行寄存器设置:为了让波特率不倍增,将寄存器PCON中的数据设为00H,这样SMOD位就为“0”;设置寄存器TMOD中的数据为20H,这样T1就工作在方式2。再计算并设置T1的初值:
X=28-2SMOD·fosc/(384·波特率)=256-20×11.0592×106/(384×2400)=244
十进制数244转换成十六进制数为F4H,将T1的初值设为F4H。
由于设置波特率和初值需要计算,比较麻烦,一般情况下可查表来进行设置。常见的波特率设置见表6-2。
表6-2 常见的波特率设置
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。