打印

关于单片机与计算机串口通迅数据格式问题

[复制链接]
3773|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwj839105|  楼主 | 2007-8-25 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 

各位大虾好,小弟最近有一事不明,特来此求证,望各位前辈能不吝赐教。
小弟最近写了个仪表的MODBUS通讯协议,采用MODBUS RTU,其数据格式为1个起始位,8个数据位,偶校验和1个停止位,在51单片机中我设定是串口方式三(1个起始位,8个数据位,1个停止位,TB8/RB8为校验位),在开始调试时计算机串口调试软件的数据格式的设置与单片机一致,但无法通讯,下位机接收数据一直是错误的。后来将串口调试软件改为、1个起始位,8个数据位,2个停止位后一切正常。
在此有个问题,在我的理解为什么单片机的校验位到计算机后会成为停止位,小弟在网上,和写上位机程序的朋友多方求证,一直没找到答案,期待各位前辈能解我疑惑,不胜感激!我的邮箱地址:wwj_839105@163.com QQ:370298084
 
 

相关帖子

沙发
lixun00| | 2007-8-25 12:47 | 只看该作者

没有验证过,请检查上位机确保是和下位机相同的设置.

使用特权

评论回复
板凳
pppking| | 2007-8-25 13:01 | 只看该作者

校验位怎么会变成停止位呢

TB8/RB8为校验位,在一些CPU中这个位有好几种设置方法:
A.偶校验
B.奇校验
C.强制为0
D.强制为1
你可能就使用了强制为1的方式

串口通讯最基本,也许很简单,但一定要细心

使用特权

评论回复
地板
wwj839105|  楼主 | 2007-8-25 14:34 | 只看该作者

关于单片机与计算机串口通迅数据格式问题

我最先调式时,串口调试软件和下位机串口格式都是设定的1个起始位,8个数据位,一个停止位,偶检验。这时的通讯反而不成功。但后来把串口调试软件的串口数据格式设为1个起始位,8个数据位,2个停止位,偶校验,就成了。。呵呵。。。百思不得其解。但万幸现在能用。还挺正常。。。
对校验方面不可能有错。下面的我对发送数据的校验的程序段。
            ACC = sendBuf[sendPosi];
            TB8 = P;    //加上校验位
            SBUF = sendBuf[sendPosi];
接收和这一样形式,只是对RB8了。
所以这个问题是我想求证。为何上位机和下位机格式不一样到完全没点问题,一致反而到不行。

使用特权

评论回复
5
pppking| | 2007-8-27 08:37 | 只看该作者

波特率误差产生的问题

使用特权

评论回复
6
农民讲习所| | 2007-8-27 08:48 | 只看该作者

现代通信不使用奇偶校验

使用协议包。
使用了MODBUS,不应该使用偶校验。

使用特权

评论回复
7
wwj839105|  楼主 | 2007-9-17 11:38 | 只看该作者

............................

  怎么可能是波特率问题?我板子是用的11.0592M的晶振,对单片机通讯来说,这种晶振的误差相对是比较小的,就算不考虑这些,为什么我后来改为2位停止位后又行,这时候就不曾在波特率误差问题了?
  在这里小弟谢谢各位大哥给小弟的帮助,这段时间也请教过很多写上位机的朋友,但也都没答案,甚至有个朋友给我写过一个测试程序,但也得不出所以然。在网上也找了许久,但好像还没有谁提过此问题发生过。这也许是小弟对单片机与计算机在通讯格式方面有些格式定义还不是太理解,因为我不相信以前没人做过这种通讯方式,既然没人提到这方面问题,那可能是我错了,小弟定会弄清楚这个问题,在此真诚感谢大家,谢谢,谢谢!

使用特权

评论回复
8
wwj839105|  楼主 | 2007-9-17 11:43 | 只看该作者

6楼: 现代通信不使用奇偶校验

我想这也不是校验的问题,在后面我改为2个停止位后,校验都是正确的,不然不能正常通讯。如果不用偶校验那用什么校验?MODBUS通讯协议用的就是偶校验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝