const u8 HEAD[] = {0xfe, 0x0f, 0xbc}; //连续的三个固定byte为帧头
void cp_rx(u8 d) //在接受中断里面调用
{
cp1wRx.buf[cp1wRx.cnt] = d;
if(cp1wRx.cnt < 3)
{
if (d != HEAD[cp1wRx.cnt])
{
cp1wRx.cnt = 0;
if(d != 0xfe) //一定重新找头!!!, 以免连续的头部: 0xfe 0xfe出错
return;
}
}
else if(cp1wRx.cnt == 3)
{
cp1wRx.len = d; //得到了总长度
}
else
{
if(cp1wRx.cnt >= (cp1wRx.len + 8)) //长度到了, 收尾
{
uartRxDisable();
cp1wRx.rxOk = 1;
return;
}
}
if(cp1wRx.cnt < 36) //防止溢出
cp1wRx.cnt++;
}
串行通讯, 怎样可靠获多byte的帧头?
比如: 三个固定的帧头: 0xfe, 0x0f, 0xbc
一定要在帧头不对的时候, 重新找帧头!!!, 以免连续的头部出错时, 比如: 0xfe 0xfe, 失去同步
1391

被折叠的 条评论
为什么被折叠?



