单片机如何接收字符串(有结束符)

PC串口调试助手发送BAIDU#,在中断中接收到#结束,无论发送多长,都以#结束。求高手解答编写

第1个回答  2013-08-26
#include<reg51.h>

#define uchar unsigned char
uchar recive[];
main()
{
uchar dat,i;
TMOD=0x20;
SCON=0x50;
TR1=1;
while(1)
{
if(RI)
{
RI=0;
dat=SBUF;
recive[i]=dat;
i++;
if(dat=='#')i=0;
}
}
}追问

这个我是放在一个uart.c的子程序里面的,如果要在main.c主程序里该如何调用recive[]这个字符串?

追答

全局变量就可以了。

追问

在main.c也这样?
#define uchar unsigned char
uchar recive[];
我全局变量的话,从PC上发过来,再经单片机发回去串口调试助手上就显示乱码了,数据不对啊

追答

这个问题比较综合,显示乱码有多种原因,为了验证,你可以直接给数组赋值发给单片机试试效果。

本回答被提问者采纳
第2个回答  2013-08-26
#include<reg51.h>
#define uchar unsigned char
uchar recive[];
.......

if(SBUF=='#')
{
flag_end==1; ///接收结束即可
}追问

这样又没有字符串

追答

这是判断结束的。

保存的话,肯定要一个数组。

if(RI==1)
{
RI=0;
recive[CNT++]=SBUF;

if(SBUF=='#')
{
flag_end=1; ///接收结束
}
}

追问

楼下的程序我全局变量的话,从PC上发过来,再经单片机发回去串口调试助手上就显示乱码了,数据不对啊

追答

串口助手和单片机这边是不是波特率不同啊?

追问

相同的,现在没有问题了

相似回答