历史上的今天
返回首页

历史上的今天

今天是:2025年02月26日(星期三)

正在发生

2018年02月26日 | 串行通信中的波特率设置分析

2018-02-26 来源:eefocus

  51单片机具有串行通信能力。其串行接口( UART)是一个全双工的通信接口,能方便地与其他单片机实现双机或多机串行通信。随着IBM - PC机的普及和单片机应用的迅速发展,把这两种微型机结合起来的应用日益广泛,从而使之既具有较强的实时控制功能,又有很强的数据处理能力,充分发挥了不同机种的特长。在这种应用中,双方都采用了RS - 232C标准串行通信接口,以实现双机或多机之间的通信。
  
  在不同机种的微机通信中,众所周知的一个问题是进行通信的双方应该采用相同的传输速率,即双方都应使用同样的传输波特率,这是确保通信成功的重要条件之一。下面仅对通信中波特率的设置问题作一些论述,供大家参考。
  
  在IBM - PC/XT系统中,配备有异步通信适配器,该板上设有INS8250异步通信接口。PC机上波特率的设置是通过对8250初始化而实现的。在8250端口寄存器中,3FSH和3F9H分别设置为波特率因子的低8位和高8位值。该因子取值范围为1~65 535,对输入时钟(1. 843 2 MHz)进行分频,产生16倍波特率的波特率发生器时钟(BAUDOUT),因而


  
  对8250初始化预置了波特率因子之后,波特率发生器方可产生规定的波特率。
  
  51单片机串行通信的波特率因串行口工作方式选择不同而异。它除了与系统的振荡频率、电源控制寄存器PCON的SMOD位有关外,还与定时器T1的设置有关。
  
  在串行口工作方式O时,波特率固定不变,其大小为foSC/12。在串行口方式2时,波特率也只固定为两种,与SMOD位的值有关:当SMOD-O时,波特率为foSC/64;当SMOD=1时,波特率为foSC/32。串行口方式1、3的波特率是可变的,除与SMOD位的取值有关外,主要取决于定时器1的溢出率。当定时器1用作串行通信的波特率发生器时,波特率可由下式确定:
  
  波特率=T1溢出率/n
  
  式中:n=32或16,对应于PCON中SMOD=O或1。而Ti的溢出率取决于计数速率和定时时间常数,即
  
  T1溢出率=计数速率/256-x
  
  此时T1工作于方式2,即8位自动装载方式。这种方式可以避免重新设定定时初值。式中x即为在TH1和TL1中装入的初始计数值。定时器1的计数速率与定时器工作方式的选择有关。当选择T1为定时工作方式时,其计数输入脉冲为内部时钟信号,即每个机器周期使寄存器值加1,而每个机器周期为12个振荡周期,故计数速率为fosc/12。若系统fosc=12 MHz,则T1计数速率为fosc/12=1 MHz。由此可得出


  
  例如,假定串行通信双方波特率要求为9 600 b/s.系统振荡频率fosc=11. 59 MHz,当SMOD选为1时,TH1、TL1的初值计算如下:

将此值置入TH,、TL1时,波特率发生器产生的实际的传输速率为

  在这种情况下,PC机与单片机可以进行正常的接收与发送。
  
  根据以上条件,若系统采用12 MHz系统时钟,按照上面公式计算可得出z≈250或249(FAH或F9H)。此时在THi和TL1中置入FAH或F9H时,实际的传输速率为10 416. 67或8 928. 57 b/s,其误差分别为-8.5%或+7%。
  
  实践表明,PC机与单片机在这种条件下不能实现正常的接收与发送。
  
  上面的计算表明,在串行通信中,当规定了传输速率以后,波特率的设置与系统使用的振荡频率有着很重要的作用,可直接影响通信的成功与失败。上例中,当双机约定了传输速率为9600 b/s时,若系统振荡频率为12 MHz或6 MHz,PC机的波特率为9 600 b/s,而单片机实际的波特率大于(或小于)9 600 b/s.则波特率误差为8.5%。也就是说,若PC机以101.17 μs的时间发送一位数据,则单片机以96 μs的时间接收一位数据。在接收一帧数据的过程中,由于误差的累积,则产生了错码。
  
  我们知道,在单片机的串行接收方式(1、2、3)中,CPU以16倍波特率的采样速率不断对接收数据(RxD)采样,一旦检测到由1到0的负跳变,16分频计数器立刻复位,使之满度翻转的时刻恰好与输入位的边沿对准。16分频计数器把每个接收位的时间分为16份,在中间三位即7、8、9状态时,位检测器对RxD端的值采样,并以3取2的表决方式,确定所接收的数据位。这3个状态,理论上对应于每一位的中间段,若发送端与接收端的传输速率不一致,就会发生采样偏移。这种传输速率的误差在允许范围内不致产生错位或漏码;但当误差超出允许范围时,便会发生错位,使接收的某数据重复接收,因而产生接收数据错。
  
  下面仅对由波特率误差引起的错码现象作一分析。例如PC机与单片机的通信速率约定为9 600 b/s,系统时钟为6 MHz时,为了按约定的速率通信,PC机在8250异步通信接口中的3F8H和3F9H寄存器中设定波特率因子分别为OCH和OOH;而单片机中定时器1初值TH1=TL1 =FDH。此时,PC机发送数据与单片机接收数据情况如下:
  
  PC机发送数据    单片机接收数据
  
  10H—1FH        30H~3FH

  以上数据表明了接收数据中出现的错码情况。通过对上述错码进行剖析可以看到:当因波特率误差引起接收端采样偏移时,如果这个偏移使得接收某数据位的采样在该位中点的半位间隔时,将会对该位采样两次,因而形成了上面的错码情况。下面公式表明错码或漏码发生的位数N:

即当串行异步通信的帧格式为11位时:
  
  ●N≤11,表示一帧数据中有某位被采样错,且采样出错在第N位;
  
  ●N>ll,表示一帧数据中没有数据位发生采样错。
  
  本例中,波特率误差为8. 5%,由上面公式得出8.5%×11=0.935>0.5,说明在这个波特率误差下将出现采样错,且出错位为:

  即在数据帧包括起始位的第6位发生错码,在第6位采样了两次,因而得到上面错码情况。

  由此可以类推出错误的接收数据。
  
  相反,当PC机的传送波特率大于单片机的传送波特率时,则会在第N位出现漏码错误。这里不再赘述。
  
  由上面的公式还可以推断出,当波特率相对误差小于4. 5%时,这种采样的偏移将不影响正常的数据接收。但一般为了保证传输的可靠性,通常波特率误差不大于2.5%,而尽量选择最小的传输误差率。
  
  在波特率的设置中,还有一个问题值得注意,这就是SMOD位的选择也影响着波特率的准确率。请看下面例子:
  
  设波特率为2 400 b/s,fosc=6 MHz时,SMOD可以任选为0或1。但是由于对SMOD不同的选择,产生了不同的波特率误差:

  上面的分析说明了SMOD值虽然是可以任意选择的,但在某些情况下,它直接影响着波特率误差范围,因而在波特率设置时,对SMOD的选取也需要做适当的考虑。
  
  以上对串行通信所必须涉及的波特率设置问题作了一些分析。由此可以看出,在异机种的串行通信中,波特率的设置是很重要的问题,它直接关系着串行通信的成功与失败,因此在波特率设置时需要给予足够的认识。


推荐阅读

史海拾趣

Electrocube Inc公司的发展小趣事

作为一家有社会责任感的企业,Electrocube Inc公司始终关注环保问题。公司积极采用环保材料和生产工艺,减少生产过程中的污染排放。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。这种对环保的关注和践行,使得Electrocube Inc公司在业界树立了良好的形象。

Hokuriku公司的发展小趣事

在20世纪70年代,电子行业正处于快速发展期,对高精度、高稳定性的电子元器件需求激增。Hokuriku Electric凭借其深厚的技术积累,成功研发出新一代高精度金属板电阻器。这款电阻器不仅具有极低的温度系数和出色的长期稳定性,还大幅提升了电子设备的性能和可靠性。这一技术突破迅速赢得了市场的广泛认可,使Hokuriku Electric在电阻器领域崭露头角,为后续发展奠定了坚实基础。

AnDAPT__Inc.公司的发展小趣事

在20世纪70年代,电子行业正处于快速发展期,对高精度、高稳定性的电子元器件需求激增。Hokuriku Electric凭借其深厚的技术积累,成功研发出新一代高精度金属板电阻器。这款电阻器不仅具有极低的温度系数和出色的长期稳定性,还大幅提升了电子设备的性能和可靠性。这一技术突破迅速赢得了市场的广泛认可,使Hokuriku Electric在电阻器领域崭露头角,为后续发展奠定了坚实基础。

FutureWafer公司的发展小趣事

90年代初期,随着全球化进程的加速,Hokuriku Electric开始将目光投向国际市场。公司首先在欧洲和北美设立了销售分支机构,随后又逐步拓展至亚洲其他地区。通过参加国际展会、建立合作伙伴关系等多种方式,Hokuriku Electric成功将其优质产品推向全球市场。这一过程中,公司不仅积累了丰富的国际销售经验,还提升了品牌知名度和影响力,为后续的全球化发展奠定了坚实基础。

Cristek Interconnects Inc公司的发展小趣事

随着环保意识的日益增强,Cristek Interconnects Inc公司积极响应国家号召,将环保理念融入到企业的生产经营中。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对环保技术的研发力度,推出了一系列环保型电子产品连接器,为行业的可持续发展做出了贡献。

这五个故事只是Cristek Interconnects Inc公司在电子行业发展中的一部分缩影,它们展现了公司在技术创新、质量管理、市场拓展、供应链优化和环保理念践行等方面的努力和成就。这些故事共同构成了Cristek Interconnects Inc公司发展的精彩篇章,也为公司的未来发展奠定了坚实的基础。

BERNSTEIN公司的发展小趣事

BERNSTEIN公司的历史可以追溯到Weimar时期,当时Bernstein兄弟在莱比锡创立了“Monopol”公司,专注于为电气建筑服务控制系统生产和制造低压产品。初创时期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,Bernstein兄弟凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列具有竞争力的产品,并逐渐在市场上站稳脚跟。

问答坊 | AI 解惑

并口调试工具

一个并口(LPT-1)的调试工具.真的很好用.有搞PC机并口开发的朋友就用到它了! [ 本帖最后由 西门 于 2009-5-11 23:53 编辑 ]…

查看全部问答>

SHLoadDIBitmap

HBITMAP   bitmap = SHLoadDIBitmap(m_pMainShellPicture[PICTURE_BACKGROUND].sPicturePath); 这个函数是用在wince下开发的函数,是载入图片的,我用的abitmap=shloaddibitmap(路径),调用也是成功的,但是有一问题就是在调用了上百次 ...…

查看全部问答>

请教SD卡保护区读写的问题

文档介绍SD卡有约1/10的空间是保护区(也是\"安全数字卡\"命名所在),但现在还不清楚这部分区域如果操作,如果上文件系统,更不清楚这部分的数据保护功能能否使用的了,因为文件系统不能指定扇区,也就不能指定到保护区. 1.SD的保护区如何操作? 2.如果 ...…

查看全部问答>

请问,usb的键盘扫描码和ps/2的键盘扫描码一样么? 另外ps/2的组合键(比如ctrl+c)扫描码是什么呢?

RT 谢谢了,小弟在做毕业设计,需要知道这些,可是查不出来啊,望赐教。…

查看全部问答>

准备学习单片机编程

我想学习单片机编程.我想买一套相关的工具好像要一块实验板.要支持ISP的.不知道还要买些什么东西 新手.大家指点一下,并推荐一下具体的产品…

查看全部问答>

求书:Computer Organization and Design:: The Hardware/Software Interface

找了好久都找不到,有这本书的同学,还请共享一下…

查看全部问答>

ST网站真垃圾

                                 如题…

查看全部问答>

eZ430-RF2500中ADC10问题

Demo中AP端转换电压的源代码如下:       ADC10CTL1 = INCH_11;                  // AVcc/2      AD ...…

查看全部问答>

如何给一个数组分配一段特定的存储空间

如何给一个数组分配一段特点的存储空间。如想给数组S[1024]分配一段特定存储空间。使用#pragma具体怎么操作。…

查看全部问答>