标题:
(求助)51单片机串口接收字符串的问题
[打印本页]
作者:
autumn888
时间:
2014-7-7 22:22
标题:
(求助)51单片机串口接收字符串的问题
当通过串口向单片机发送不确定长度的字符串时,如何校验开始位和结束位,并且最终判断所接收到的字符串的长度?
比如: 开始位用2位”AE“来表示,结束位用2位”BF“来表示, 当向单片机发送如”AE...BF"类型的字符串时, 单片机如何将这一字符串保存到一个预设的数组中,并且正确判断这个字符串的长度?
哪位大虾能否帮忙贴段代码以参考?谢谢先
作者:
a110
时间:
2014-7-17 16:49
开始位何结束位这些都是由芯片的自动完成校验的,
作者:
WKK001
时间:
2014-7-17 19:32
/***************串口中断程序***************/
void com() interrupt 4 using 2
{
uchar a=0,c=0;
uint b=65535;
ES=0;
while(b--)
{
while(!RI);
RI=0;
c=SBUF;
if(c==0x10||c==0x02||c==0x03)
{
if(a!=0)
{
if(com_bus[a-1]==0x10) {com_bus[a-1]=c;} //若接收到的数据前面接收到了0X10 则过滤掉
else{com_bus[a]=c; a++; if(c==0x03){bz=1;}} //若接收的数据前面没有0x10则送入缓冲区 若接收到0x03 则置接收完成标志
}
else {com_bus[a]=c; a++; if(c!=0x02) {b=0;} } //若接收数据帧头不对,则跳出接收
}
else
{
com_bus[a]=c; a++; //若接收数据帧头不对,则跳出接收
if(com_bus[0]!=0x02) {b=0;}
}
if(com_bus[0]==0x02&&c==0x03&&bz==1)
{
b=0;
bz=0;
}
}
ES=1;
}
作者:
WKK001
时间:
2014-7-17 19:35
这个是我原来琢磨的,当时跟你的想法一样。这个接收长度可以不确定 ,接收帧头判断不对则退出,收到结尾也退出,数据送到缓冲区,希望对你有帮助
作者:
3263065307
时间:
2016-5-5 19:18
可是会出现数据的传送缺失的情况怎么弄呀比如123456可能变为12356少一些数据呀,这个怎么办呀
作者:
ankun11
时间:
2016-5-5 22:31
数据帧头--数据长度--数据区--数据和
作者:
siked
时间:
2016-5-6 11:11
有种方法! 首先发个校验,在发个字符长度,
然后 接受端就 循环取那个长度的个数!至于后面的问题可以 返回去学学 C语言的一些基础!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1