|
大概写一个,具体的LZ你去调试去吧
unsigned char IsFinish = FALSE;//用于确认数据是否接收完成
struct
{
unsigned char Rbuf[7];//存放接收的指令
unsigned char PIndex;//位置指针
}RxCommand;//找一个地方初始化PIndex为0
//在接收中断中
unsigned char RxByte = SBUF;
if (FALSE == IsFinish)
{
switch(RxCommand.PIndex)
{
case 0:
{
if (RxByte == 0xEB)
{
//数据为期望
RxCommand.Rbuf[RxCommand.PIndex++] = RxByte;
}
else
{
RxCommand.PIndex = 0;
}
break;
}
//自己补完剩下的
case 5:
{
//最后一个数据处理
if (RxByte == 0xEB)
{
//数据为期望
RxCommand.Rbuf[RxCommand.PIndex++] = RxByte;
IsFinish = TRUE;//接收完成
RxCommand.PIndex = 0;//复位位置指针
}
else
{
RxCommand.PIndex = 0;
}
break;
}
}
}
unsigned char DataLen = 0;
//在主程序中应用的话:
if (TRUE == IsFinish)
{
DataLen = RxCommand.Rbuf[4];//取出数据长度
//发送数据头
Sendchar(0xED);
//自己处理完剩下的
//发送长度
Sendchar(DataLen);
for (unsigned char i = 0; i < DataLen; i++)
{
//把你的数据发出去,我也不知道你的数据在哪
}
//把帖尾补上,自己完成了。
IsFinish = FALSE;//重置标志让串口重新接收
} |
|