写了一个51单片机的串口通讯函数,结果老是收不到上位机发送的字符串的首字母。

2025-03-04 04:38:54
推荐回答(4个)
回答1:

接收函数中,只有当收到“Z”时,才应该使 i=0;,才开始接收字符串。
另外,主函数发送,等待发送完毕时:while(!TI);,等待的期间,也会出现串口中断,也会收进一个字节到 word[i]=SBUF;。

回答2:

你的中断函数不对,应该加个判断,因为发送和接受都是一个入口。
void RS() interrupt 4
{
if(RI==1)
{
RI=0;
word[i]=SBUF;
i++;
if(i==9) //比较收到的字符串
{
i=0;
if(strcmp(word,order1)==0)
b=1;
else if(strcmp(word,order2)==0)
b=2;
}
j++;
}
}

回答3:

会不会是因为漏掉了一个'\0',系统定义字符串时的最后一个字符,除了前面的九个。

回答4:

“Z10S03999”,下位机接收到的数据是“ Z10S0399done9Z10S0399done”,这又是怎么回事?

确定硬件没问题么?