关于通信协议,求助
通信协议的格式0X0D 0X0A两字节开头,又以0X0D 0X0A两字节结尾,实际就是回车换行两个符号。中间是有效的数据,无效验,用串口做通信方式,中断怎么写才稳定,附上我的串口程序:void UART1_ROUTINE() interrupt4
{
unsigned char r1data;
if(RI)
{
RI=0;
r1data=SBUF;
RXD1=r1data;
if(r1data==0x0a&&RXD1==0x0d)
{
if(RXD1_STA==1)
{
RXD1_STA=2;
CHECK_RE1();
}
else
{
RXD1_STA=1;
RXD1_i=1;
RXD1=0x0D;
RXD1=0x0A;
}
}
RXD1_i++;
if(RXD1_i>49)
{RXD1_i=0;}
}
if(TI)
{TI=0;}
}
现在有个问题就是如果某次发送有头无尾或者有尾无头,那就全乱了。 状态机模式,另外,为何要搞成这么复杂,头尾不一样,好弄啊 jingwaner 发表于 2012-10-11 13:27 static/image/common/back.gif
状态机模式,另外,为何要搞成这么复杂,头尾不一样,好弄啊
能说说什么是状态机模式吗?我的单片机是接受别的模块发过来的数据,我没办法修改协议! // if(r1data==0x0a&&RXD1==0x0d)
// {
// switch(RXD1_STA)
// {
// case 0:
// {
// RXD1_STA=1;
// RXD1=0x0d;
// RXD1=0x0a;
// RXD1_i=1;
// }
// break;
//
// case 1:
// {RXD1_STA=2;}
// break;
//
// default:
// {RXD1_STA=2;}
// break;
// }
// if(RXD1_STA==2)
// {CHECK_RE1();}
//
//
// }
这个是我前面调试的程序,状态机是不是这个样子? 与状态机感觉没一点关系
页:
[1]