本帖最后由 xvezhe 于 2014-2-26 09:29 编辑
//串口中断
void timer1(void) interrupt 4
{
uchar ch;
if(RI)
{
ch = SBUF; //接收串口数据
ES = 0;
if(State_machine==0)
{
if(ch==0x55) State_machine=1; //数据帧头
else State_machine=0;
}
else if(State_machine==1)
{
if(ch==0xaa) State_machine=2; //数据帧头
else State_machine=0;
}
else if(State_machine==2)
{
dat_bug [ i ] = ch; //存储串口数据
num=dat_bug[0];
i++;
if(i>=2*num+2)
{
i=0;State_machine=0;
read_flag=1; //取数标志位
}
}
RI = 0;
ES = 1;
}
}
以上的代码。若一次接收失败,则后面的接收时, read_flag就不会置1;
也就是说,接收的数据 i 不满足i>=2*num+2, i 就不会 清0.。。。串口接收不定长数据,怎样在其收到的数据错误的情况下,恢复接收缓冲区
相对以上代码,若接收失败,不会影响到下一次接收。。。。应如何更改,请各位指点
|