串行通信在波特率误差超过一定范围时,会产生错误。本节介绍的内容在51单片机上仅用软件就实现了波特率自动整定,最大程度地减小了波特率误差,因而可使串行通信的可靠性得到提高。
51单片机具有一个全双工的串行接口,提供了多机通信功能,可方便地构成多机系统(多机容错系统、集散型多级系统),为完成大型的控制任务提供了有效的手段。用51单片机组成的多机控制系统,国内已出现多例。在这样的系统中,可靠地实现多处理器间的信息交换(串行通信)是十分重要的。本节的研究发现,波特率作为串行通信的速率,同时对通信的可靠性有重要影响。
一、正常串行通信的实现条件
串行通信是按位传送数据的。每个数据有8或9个数据位,加上起始位和停止位构成一个串行帧。每一位占用时间t,1/t称为串行通信的波特率。理想情况下,发送机和接收机设置的波特率一致。接收机的接收控制器在串行帧每一数据位的中点进行采样,能接收到正确的数据,但要求波特率完全一致是不可能的。这就提出了一个问题:要可靠地实现串行通信,允许收发双方的波特率有多大误差?我们以一个10位的串行帧为例进行分析。
图1 - 85 (b)是正常工作的情形,波特率一致。在图1 - 85(a)中,接收波特率不变,而发送波特率变小,每位的时间t延长5%,在第10位采样时,就产生了错位,不能进行正常通信。对于10位的串行帧,允许的最大波特率误差不超过5%;在多机通信方式下,串行帧是11位的,允许的最大波特率误差不超过4. 5%。
上面得到的仅仅是理想情况下的波特率误差允许上限。实际应用中,由于硬件设备的频带有限,数据位的上下跳沿要占用一定时间,每个数据位的有效时间比理想情况要短,所以对波特率误差会有更严格的要求。
二、波特率误差来源及克服办法
1.51单片机串行通信波特率的产生
51单片机的串行口有4种操作模式,由串行口控制字scon中的两位smo和sm1设置。模式0作同步移位寄存器,与通信无关;模式2的波特率直接由机器主频fosc决定,不方便应用;常用的是模式1和模式3.分别是8位和9位异步通信口。其波特率是可变的,由机内的定时/计数器1(c/t1)来产生,波特率有以下公式:
其中smod是电源控制字pcon中的一位,可编程为0或1。
c/t1有3种工作模式:模式0为13位定时/计数器,模式1为16位定时/计数器,而模式2是可自动重装时间常数的8位定时/计数器。当需要的波特率不是太低时,一般用模式2作波特率发生器:一方面省去了用c/ti中断服务重装时间常数的工作,更主要的是避免了因中断响应时间不同引起的波特率随机误差。对c/t,的模式2,波特率按如下公式计算:
式中:fosc为晶振频率;th1为时间常数。
若采用6 mhz的晶振,用模式2可产生的最低波特率为61。对于实时控制系统,绝不会采用更低的信息传递速率(每秒6个数据)。所以,以下讨论只限于c/ti的模式2作波特率发生器的情况。
2.波特率误差的来源
由式(1 -4)可知,fbit与fosc及th1有关。首先考虑fosc对.fbit的影响。51的振荡器电路是由晶体及电容c1、c2构成的。xtal1及xtal2为外接晶体管引脚。fosc主要由晶体的固有频率决定,同时也与电容c1、c2及外界温度有一定关系。另外,晶体频率的标称值与实际值也不可能完全一致。我们曾测定过一组标称4 mhz的晶体,发现离散度达2%。由式(1-4)得:
这说明用有误差的fosc去计算fbit时,fbit,会产生同样大小的相对误差。
下面考虑th,的影响。时间常数只有8位字长,这样就必然存在量化误差。采用四舍五入后,thi的量化误差|△th1| max=0.5。综合式(1-4)、(1-5)得:
由式(1 -6)可以看出,由量化误差产生的波特率误差与波特率成正比,与fosc成反比;并且若置smod-l,则可使误差减小一半。
3.减小波特率误差的措施
人工设置波特率,不可避免要用到fosc的标称值,这样就引入了一个误差源。采用自动整定,可以消除由fosc标称值不准确引入的误差。
波特率自动整定可按如下的方法进行:在一个多机系统中,由系统主机产生出一个预定波特率的方波信号,从串行口发送到各从机;各从机以各自的时钟为基准测定此方波的周期所包含的机器周期数n,从n可以方便地换算出产生同样波特率需要的时间常数th1。计算公式推导如下:
51单片机一个机器周期的时间为δt=12/fosc,一个方波周期包含两个串行数据位,这样,每位数据占用的时间为
而fbit=1/t,代入式(1-4)得
th1的量化误差总是存在的,为减小其影响,应尽量选smod=1;在用式(1-7)进行计算时,要进行舍入,而不是截尾。
采用自动整定时,波特率误差仅由th,的量化误差引起:
采用12 mhz晶体,fbit=4 800时可能的最大波特率误差为3.84% (smod=1).可以保证正常通信。一般系统1 200的波特率就足以满足要求了。
三、波特率自动整定的实现和结论
1.自动整定的实现
51单片机的p3口是复用的,其中的p3.0(串行口接收线)和p3.1(发送线)可以用作一般输入/输出口线,也可作为串行口使用。利用这个特点,可以在不对串行口接线作任何变动的情况下,仅利用软件实现波特率的自动整定。
首先要完成的是方波周期的测量。为保证测量精度,共测8个方波周期的机器周期数,然后除以8(移位即可)得n。采用c/t1的模式1(16位定时器)计时,程序流程图如图1- 86所示。
最后得到的16 位计数值存放在th1、tl1中,其值为8n。取smod=1,式(1-7)成为
至此,时间常数th1计算完毕,接下来可进行常规的串行口初始化。若有必要,还可进行波特率误差校验。编程是很容易的,这里省略。
2.结 论
①串行通信中的波特率误差超过一定范围会影响通信的可靠性,在高波特率下更加严重。
②本例给出的波特率自动整定方法对硬件不作任何变动,仅用软件即可方便实现。在12 mhz晶振下实现了4 800 b/s的高速通信,避免了人工试凑波特率的困难。
③当串行口作为通用仪表对系统机的数据接口时,此方法尤有意义。本节的成果已用于一个通用转速表对ibm - pc的串行接口中。
超高清时代LED显示技术的发展和应用
国外著名科技媒体PhoneArea 手机续航测试对比,三星新机垫底
iPhone 8P与iPhone X对比分析 你的完美购机指南
中国移动开展5G+绽放行动,实施千亿产业拉动和五百亿价值分享计划
WT1高性能90W电焊台主机的特点及应用
串行通信的实现条件和波特率自动整定问题
2020年航空业将会发生哪些重大的变化
iphone8什么时候上市?iphone8即将发布:iphone8七大消息汇总,哪一项才是惊喜中的意外?
三星夺下 Verizon 5G订单,最受伤的是诺基亚和爱立信
HTC官方旗舰店下架了几乎全部的手机将要退出中国市场
Profinet转485modbus网关解决传输距离及数据丢失问题
是德直流电子负载测试应用
普华永道重磅发布创新数字化工具——iBAS智能银行流水分析解决方案
人工智能是真格基金重点投资的领域之一
digilent带有可调增益功能的MEMS扩音器介绍
嵌入式中精准、低功耗的理念是怎样贯彻的
中国发射天链卫星实现全球组网 可不间断天地通信
5GAA全球首个5G智慧交通示范项目启动,智能网联汽车领域走向市场化
盘点雷达技术在物联网和嵌入式设计中的创新应用
母线槽红外测温解决方案:提高管理效率,降低故障发生率