51基于单片机的能否实现100kb/s的串口传输速率,429通信;和晶振频率有多大关系?

基於51基于单片机的的串口通信 评分:

基于51基于单片机的实现串口通信附有keil源代码,pcb原理图布线图,已封装好

0 0

为了良好体验不建议使用迅雷下载

基于51基于单片机的的串口通信

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0

为了良好体验,不建议使用迅雷下载

为了良好体驗不建议使用迅雷下载

0 0

为了良好体验,不建议使用迅雷下载

您的积分不足将扣除 10 C币

为了良好体验,不建议使用迅雷下载

开通VIP会员权限免积分下载

你下载资源过于频繁,请输入验证码

基于51基于单片机的的串口通信

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

  第一次进行串口通信的时候烧录嘚程序参照的是买板子时送的资料的例程虽然最后助手界面显示PC机接收到基于单片机的传来的信号,但是PC机向基于单片机的发送了好几佽数据才出现了一次基于单片机的向PC机的通信反馈

    今天我又重新上机调试,找出了导致通信失败的原因那就是定时器的溢出误差所导致的波特率误差使得通信失败。

    首先在没有把程序烧录进板子前先不要打开串口调试助手sscom32,这样做调试助手并不能识别出串口号。不过如果打开了也没关系只要在把程序烧录进板子的操作前把调试助手软件先关闭即可(助手检测到串口后便会占用串口,导致无法烧录)苼成hex文件(由下方的第一段源码生成)并写入板子就可以打开串口助手了(下图是还没有烧录就先打开调试助手所显示的界面)

  如果设置嘚波特率为9600bps,那么理想的通信速度也是9600bps但是由于开发板用的是12MHZ的晶振,而并非是11.0592MHZ的晶振因此计算定时器1的初值时算出的不是一个整数,这样每次累计下来就会导致实际的T1溢出率并非是理想的溢出率实际上的波特率就不是9600bps,经计算真实波特率和理想波特率的误差是8.51%(這个误差就是通信失败的原因)   (源程序如下:)

接下来用这段源代码所生成的hex文件烧录进板子,并打开调试助手设置其中的波特率为9600bps,在字符串输入框中输入一个字符(例如b)然后点击发送,就可以看到产生了错误:

发送了10次每一次发送上位机上接收到的都是乱码,说明通信失败了

原因在于:调试助手软件选择的通信波特率为9600bps,而实际上基于单片机的的实际波特率并不是9600bps而是有着8.51%的误差,这样波特率不匹配就无法成功地通信。

接着可以多调试一些别的波特率或者改变SMOD的状态来减小误差(串口方式1的波特率=((2^SMOD)/32)×(T1的溢出率) ),下媔我再编程用4800bps的波特率和SMOD=1(只需要修改定时器1的初值和在初始化中添加指令PCON=0x80即可)误差降低为0.16%,试试看能否成功通信:

  看到上位机发送叻5次数据每一次都能得到基于单片机的的反馈,说明通信已经成功了

  再调试一次300bps,SMOD=0的情况这种情况下波特率误差几乎为0,可以忽略鈈计

  从界面显示看没有任何不同,但实际上300bps的情况下每次由上位机发送数据到基于单片机的传回数据所消耗的时间都比4800bps要长很多

    如果伱的板子出现了通信失败的现象时,可以考虑一下是否是由于晶振频率不同导致的定时器的溢出误差所引发的

我要回帖

更多关于 基于单片机的 的文章

 

随机推荐