gongkaiyu 发表于 2010-5-25 14:48:19

串口通讯每个字符之间延时问题

我向串口发送一串字符比如十六进制“AA550100ff00ff”我用VISA直接写入字符串,另一个串口设备有时收到有时收不到,而且收不到的概率比较多,而我逐个发,先发“AA”加200ms延时,再发‘55’加200ms延时,再发‘01’加200ms延时,再发‘00ff’加200ms延时,再发‘00ff’,这样另一各串口设备才能收到。请问有没有简单一点的方法解决这个问题,谢谢!

mingyuexin1984 发表于 2010-5-25 16:23:08

这个不需要延时吧?我做过类似的,很简单的,发送字符串设置为“十六进制显示”,如果是定长的话接收端可以将“读取VISA”的字节数设置成常数。另外你得匹配好发送速率和波特率

飞雨天 发表于 2010-5-26 11:37:56

单片机不要设置波特率么?

qiuyan 发表于 2010-5-26 12:18:30

回复 3# gongkaiyu 的帖子


    发送速率单片机也要设置的,要与串口相同的波特率才可以的

gongkaiyu 发表于 2010-5-26 10:17:55

请问那个发送速率怎么匹配,还有接收设备是一个51单片机的老产品。我用串口助手发一串字符“aa550100ff00ff”,也是收不到的概率比较多,而且即使收到了有时也不能执行相应的动作,但是每个字节加延时就能收到。

飞雨天 发表于 2010-5-26 16:28:56

双方波特率一致的情况下,看下接收方的程序,单片机串口是没有硬件缓冲的,要自己在中断程序中分配

gongkaiyu 发表于 2010-5-26 17:00:35

能看到单片机程序就好了,人家加密的,即使解密了反汇编整理也是相当麻烦的

gongkaiyu 发表于 2010-5-26 14:50:01

波特率是4800,labview发送是一串字符一下子发送,而51单片机是逐个字节接收的速度是不是跟不上,得让labview等等他。如果说波特率不对再怎么加延时也是没用的。我现在就逐个字节发,效果不错,就是有点麻烦。

mingyuexin1984 发表于 2010-5-26 14:55:29

举个例子,单片机要发送7个字节的十六进制数据,发送速率是10Hz(根据实际需要自己设定),那么需要的带宽大约为:7*10*10=700bps,因此串口的波特率最低应设为2400,但也不需要太高,我一般保证是所需带宽的2倍。
另外,字符接收不全,可能与你的串口接收程序有关系,最好先看一下LabVIEW自带的范例,稍微修改一下应该就可以了。
祝你好运!

gongkaiyu 发表于 2010-5-26 15:41:44

谢谢楼上的答复
页: [1]
查看完整版本: 串口通讯每个字符之间延时问题