串口通讯问题

时间:2021-12-21 17:57:30
我通过串口接收51单片机上发来的信息,不知道为什么最多只能接收8个数字,请问如何接收8个以上数字?

5 个解决方案

#1


很简单,你设置一下InputLen长度为你想要的长度,一般也可以设置为0,即全部接受“接收缓冲区”中的数据。

还有一个原因,那就是你的延时不够长,一般来说9600bps的通讯速率,要求每个字节大约停顿1.2-1.5ms,譬如你接收的字节在20个,则最好停顿25个ms。

注意:串口通信的等待中,不要用DoEvents,请用Sleep或GetTickCount之类的空循环,否则可能造成通讯的阻塞和程序中断!!

#2


停顿25MS在哪里设?

#3


反对Gutta(冯大狂) 的方法。

串口通讯的方法建议:

与外部设备的通讯遵循外部设备的通讯协议才是最终解决问题的办法。通讯协议中一定有可以表示协议起始和停止的标志。因此,不管用什么方法接收数据,一定要等到接收到停止码才算是接收完整。

例如:

要接收一段形如“[00][00][A][B][C][D][E][F][G][H][I][J][00][01]”的数据。
你可能第一次只收到了“[00][00][A][B][C][D][E]][F][G][H][I]”,你必须等到下一次收到后面的数据并判断出来结束标志[00][01]才算完整。
当然,你很可能在第二次收到的数据是“[J][00][01][00][00][A][B][C][D][E][F][G][H]”,这时,你可以把后面的这部分“[00][00][A][B][C][D][E][F][G][H]”暂时保存,等到下一次收到数据后一并处理。

以上方法适用于所有串口通讯方式。

通讯方式建议:

1、 串口发送接收数据频率较高时,可以采用定时器;
2、 频率较低时,采用串口中断方式比较好。

#4


能不能举个例了呀,这样说不太懂,先谢谢了。

#5


学习

#1


很简单,你设置一下InputLen长度为你想要的长度,一般也可以设置为0,即全部接受“接收缓冲区”中的数据。

还有一个原因,那就是你的延时不够长,一般来说9600bps的通讯速率,要求每个字节大约停顿1.2-1.5ms,譬如你接收的字节在20个,则最好停顿25个ms。

注意:串口通信的等待中,不要用DoEvents,请用Sleep或GetTickCount之类的空循环,否则可能造成通讯的阻塞和程序中断!!

#2


停顿25MS在哪里设?

#3


反对Gutta(冯大狂) 的方法。

串口通讯的方法建议:

与外部设备的通讯遵循外部设备的通讯协议才是最终解决问题的办法。通讯协议中一定有可以表示协议起始和停止的标志。因此,不管用什么方法接收数据,一定要等到接收到停止码才算是接收完整。

例如:

要接收一段形如“[00][00][A][B][C][D][E][F][G][H][I][J][00][01]”的数据。
你可能第一次只收到了“[00][00][A][B][C][D][E]][F][G][H][I]”,你必须等到下一次收到后面的数据并判断出来结束标志[00][01]才算完整。
当然,你很可能在第二次收到的数据是“[J][00][01][00][00][A][B][C][D][E][F][G][H]”,这时,你可以把后面的这部分“[00][00][A][B][C][D][E][F][G][H]”暂时保存,等到下一次收到数据后一并处理。

以上方法适用于所有串口通讯方式。

通讯方式建议:

1、 串口发送接收数据频率较高时,可以采用定时器;
2、 频率较低时,采用串口中断方式比较好。

#4


能不能举个例了呀,这样说不太懂,先谢谢了。

#5


学习