csmbbcy 发表于 2013-4-24 15:26:18

求助:串口收和发都可以,就是接收的时候多了第一个字节00

本帖最后由 csmbbcy 于 2013-4-24 16:14 编辑

avr单片机之间串口通讯,串口收和发都可以,就是接收的时候,总是第一个字节是多出来的,一般是00H,不知道为什么,后面的一串数据都是对的,请人指教下

01 03 20 38 2E 49 6E 2D 50 6F 77 65 72 3A 20 20 20 30 57 53 3A 20 20 20 30 57 20 20 57 3A 20 20 20 30 57 75 61
00 01 03 20 39 2E 54 6F 74 61 6C 2D 45 6E 65 72 67 79 3A 20 20 20 20 20 20 20 20 20 20 20 20 30 20 57 A5 73 45 33
00 01 03 20 31 30 2E 44 65 76 69 63 65 2D 41 64 64 72 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 11 2F
00 01 03 20 31 2E 01 3A 20 20 30 25 20 20 4C 6F 77 20 20 20 20 20 56 3A 20 30 2E 30 56 20 49 3A 20 33 36 41 04 88
01 03 20 34 2E 57 69 6E 64 2D 50 6F 77 65 72 3A 20 20 20 50 3A 20 20 20 30 57 20 20 20 49 3A 20 37 36 41 1E 01
00 01 03 20 35 2E 4C 53 31 3A 4D 6F 64 65 31 2D 46 75 6C 6C 4F 6E 3A 35 2E 39 56 20 4F 66 66 3A 36 2E 30 56 A9 95

这是接收到的数据 第一组和第5组是对的 其他的多了个00
我用的就是中断方式的 M64单片机
工作是这样的:用电脑上的串口调试助手和单片机连接调试,串口助手发送读取指令,然后接收,上面的数据就是助手接收到的数据。
单片机一开始初始化成接收状态,等待串口助手的指令,
然后接收到指令,这时候关闭接收,判断数据,然后再打开发送,发送数据,发送完毕后再关闭发送,然后打开接收,等待下一个指令。

l另外我用的是485方式的

mainbp 发表于 2013-4-24 15:34:14

我遇到的是刚上电的时候会收到00H(M8),但是改成中断方式就没有那种现象了,我也没搞清楚,等老师解疑

csmbbcy 发表于 2013-4-24 15:36:13

楼上也遇到了?我用的就是中断方式的 M64      有时候能收发正常,但是大多数时候总是会接收到个00H不知道哪里的问题

csmbbcy 发表于 2013-4-24 15:36:55

而且总是第一个字节是00H 后面的数据都是正确的

csmbbcy 发表于 2013-4-24 15:40:31

file:///C:/Documents%20and%20Settings/DELL-CSM/%E6%A1%8C%E9%9D%A2/123321123.jpg上面一组是正确的 下面一组就多了个00了

wangguanfu 发表于 2013-4-24 15:41:16

csmbbcy 发表于 2013-4-24 15:40 static/image/common/back.gif
上面一组是正确的 下面一组就多了个00了

file:///C:/。。。。?

csmbbcy 发表于 2013-4-24 15:42:29

晕 图片没出来   就是
01 03 20 38 2E 49 6E 2D 50 6F 77 65 72 3A 20 20 20 30 57 53 3A 20 20 20 30 57 20 20 57 3A 20 20 20 30 57 75 61
00 01 03 20 39 2E 54 6F 74 61 6C 2D 45 6E 65 72 67 79 3A 20 20 20 20 20 20 20 20 20 20 20 20 30 20 57 A5 73 45 33
这样2组数据

csmbbcy 发表于 2013-4-24 15:54:33

求助中。。。

scybzxl 发表于 2013-4-24 16:11:12

没遇见过这样的情况,估计是你的接收指针有误。。。。

csmbbcy 发表于 2013-4-24 17:17:49

so what can i do?

mitchell 发表于 2013-4-24 17:27:06

485总线,A端加上拉电阻,B端加下拉电阻,保证空闲状态时A-B > 200mV。

csmbbcy 发表于 2013-4-24 17:37:00

mitchell 发表于 2013-4-24 17:27 static/image/common/back.gif
485总线,A端加上拉电阻,B端加下拉电阻,保证空闲状态时A-B > 200mV。

请教一下,一般网上的电路都是+5V 3.3k 120欧 3.3k GND 这样的,貌似120欧2端压降只有90mV 也没有200mV呀

gyzzg2030 发表于 2013-4-24 17:37:07

你的数据是怎么来的,要是数据来不及准备呢

csmbbcy 发表于 2013-4-24 17:41:48

gyzzg2030 发表于 2013-4-24 17:37 static/image/common/back.gif
你的数据是怎么来的,要是数据来不及准备呢

你是说发送的数据吗 我觉得应该准备好了 不然后面的数据应该不对才是 但现在后面的数据都是对的

gyzzg2030 发表于 2013-4-24 17:43:35

不矛盾啊,第一个没准备好,后面的准备好了啊

mitchell 发表于 2013-4-24 17:46:12

csmbbcy 发表于 2013-4-24 17:37 static/image/common/back.gif
请教一下,一般网上的电路都是+5V 3.3k 120欧 3.3k GND 这样的,貌似120欧2端压降只有90mV 也没有200mV呀 ...

我一般都用1K,120R,1K;
高速的时候,用300R,150R,300R。

csmbbcy 发表于 2013-4-24 17:50:11

本帖最后由 csmbbcy 于 2013-4-24 17:52 编辑

多谢mitchell , gyzzg2030 解答   

485的 我目前用的2k 100 2k      我再改改试试看

expressme 发表于 2013-4-24 17:54:14

我也碰到同样问题,中间120欧电阻去掉,数据后面的0就没有了,不知道什么原因!

csmbbcy 发表于 2013-4-24 17:57:11

本帖最后由 csmbbcy 于 2013-4-24 17:58 编辑

嗯 很烦人 要是用得到MODBUS协议里面 很多人不对包头字节进行判断 最后认为是错误的数据包    其实去掉前面第一个00 就是正确的数据了

csmbbcy 发表于 2013-4-26 10:19:46

{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}{:dizzy:}

cyr_hongfeng 发表于 2013-4-26 11:20:12

我也也遇到这样的问题,
不过通信协议是我自己定的,我忽略掉第一个00即可

czzhouyun 发表于 2013-4-26 11:23:41

去掉中间的120R的电阻,你是近距离测试,此电阻不要加,远距离测试时根据情况再考虑加或是不加

csmbbcy 发表于 2013-4-26 14:14:51

多谢各位      学习了

mitchell 发表于 2013-4-26 14:38:43

csmbbcy 发表于 2013-4-26 14:14 static/image/common/back.gif
多谢各位      学习了

请公布你最后的解决办法,以便别人学习。

csmbbcy 发表于 2013-4-26 15:14:24

mitchell 发表于 2013-4-26 14:38 static/image/common/back.gif
请公布你最后的解决办法,以便别人学习。

之前用的电阻2k 100 2k把2k 改成了1k100去掉
页: [1]
查看完整版本: 求助:串口收和发都可以,就是接收的时候多了第一个字节00