接收函数中,只有当收到“Z”时,才应该使 i=0;,才开始接收字符串。
另外,主函数发送,等待发送完毕时:while(!TI);,等待的期间,也会出现串口中断,也会收进一个字节到 word[i]=SBUF;。
你的中断函数不对,应该加个判断,因为发送和接受都是一个入口。
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++;
}
}
会不会是因为漏掉了一个'\0',系统定义字符串时的最后一个字符,除了前面的九个。
“Z10S03999”,下位机接收到的数据是“ Z10S0399done9Z10S0399done”,这又是怎么回事?
确定硬件没问题么?