通信协议的格式0X0D 0X0A两字节开头,又以0X0D 0X0A两字节结尾,实际就是回车换行两个符号。中间是有效的数据,无效验,用串口做通信方式,中断怎么写才稳定,附上我的串口程序:
void UART1_ROUTINE() interrupt 4
{
unsigned char r1data;
if(RI)
{
RI=0;
r1data=SBUF;
RXD1[RXD1_i]=r1data;
if(r1data==0x0a&&RXD1[RXD1_i-1]==0x0d)
{
if(RXD1_STA==1)
{
RXD1_STA=2;
CHECK_RE1();
}
else
{
RXD1_STA=1;
RXD1_i=1;
RXD1[0]=0x0D;
RXD1[1]=0x0A;
}
}
RXD1_i++;
if(RXD1_i>49)
{RXD1_i=0;}
}
if(TI)
{TI=0;}
}
现在有个问题就是如果某次发送有头无尾或者有尾无头,那就全乱了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
能说说什么是状态机模式吗?我的单片机是接受别的模块发过来的数据,我没办法修改协议!
// {
// switch(RXD1_STA)
// {
// case 0:
// {
// RXD1_STA=1;
// RXD1[0]=0x0d;
// RXD1[1]=0x0a;
// RXD1_i=1;
// }
// break;
//
// case 1:
// {RXD1_STA=2;}
// break;
//
// default:
// {RXD1_STA=2;}
// break;
// }
// if(RXD1_STA==2)
// {CHECK_RE1();}
//
//
// }
这个是我前面调试的程序,状态机是不是这个样子?
一周热门 更多>