更新日期:2023-09-04 17:15:47
来源:互联网
浏览量:6
下面来看看小编为您整理的串口通信 接受错误的答案
两个51单片机485串口通信接收数据出错原因?大概发送三、五次会有一次全部接收正确。程序如下:在线等!1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。
这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
这种处理方法,就会遗漏收到的数据。
2.有人在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。
但是,却在中断函数中,将 TI 清零!
这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。
3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。
对此,做而论道发表自己常用的方法:
接收数据时,使用中断方式,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用中断方式,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其急需求解!。。。这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如
abc1这个字符串的ASCII码(16进制)在ANSI编码下为61 62 63 31,但在Unicode中则变为61 00 62 00 63 00 31 00。
要想解决这个问题,你必须用字节数组而不是字符串变量来接收数据,并且要按字节读取而不是按字符读取。也可以采用编码转换函数强制把Unicode编码转换为ANSI编码,比如:
Dim s As String
s = abc1
s = StrConv(s, vbFromUnicode)
但要注意,转换后的字符串是不能在VB直接使用的(将是乱码),只能作为数据来使用(读取的时候必须按字节读取,比如MidB(s, 1, 1))。
上面的串口通信 接受错误来源于网友整理,仅供参考。提示:想了解更多串口通信 接受错误(串口通信错误解决办法)相关的内容,请尝试通过上方搜索框搜索。