当前位置:首页 > 单片机 > 单片机
[导读]   串行通信在波特率误差超过一定范围时,会产生错误。本节介绍的内容在51单片机上仅用软件就实现了波特率自动整定,最大程度地减小了波特率误差,因而可使串行通信的可靠性得到提高。    51单片机

  串行通信波特率误差超过一定范围时,会产生错误。本节介绍的内容在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的串行接口中。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

上个月,爱立信刚刚传出“对中国区业务进行战略调整,研发岗大面积裁员”的消息。这几天,就有员工确认,爱立信“核心网”成为了此次裁员的“重灾区”。

关键字: 爱立信 通信

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

以下内容中,小编将对波特率的相关内容进行着重介绍和阐述,希望本文能帮您增进对波特率的了解,和小编一起来看看吧。

关键字: 波特率 码元

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

设计工程师为了解决ISI问题,常常需要在链路损耗和均衡技术之间做出综合考虑。泰克的SDLA软件不仅可以模拟发送端的Tx EQ和接收端的Rx EQ,还能模拟传输链路的不同损耗。

关键字: 通信 示波器 测试测量

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机
关闭
关闭