C ~ 一个串口接收思路

void uart_rx_isr(void) //接收中断函数
{
uchar c;
c=SBUF;//c等于接收的字节;
switch (recv_state)
{
case :
if (c==0x02) // 是数组第一字节
{
recv_state=; // 进入下一个状态
}
else
recv_state=; // 回到初始状态
break; case :
if (c!=0xff) // 是数组第二字节 拢共 3位数据 中间这位 为数据位 就不进行校验判断了
{
recv_state=; // 进入下一个状态
Rx_Data=SBUF; //把 这个数据 纪录下来 作为 后面的判断
}
else
{
recv_state=; // 回到初始状态
}
break; case :
if (c==0x03) // 是数组第三字节
{
// recv_state=3; // 进入下一个状态
Flag=;
recv_state=; // 回到初始状态
}
else
{
recv_state=; // 回到初始状态
}
break;
}
} void UART_interrupt() interrupt
{
if(RI==)//如果接收了数据(RI会置1)
{
RI=; //先清零,下次可以在接收数据
uart_rx_isr(); //调用数据判断这个函数
}
}

串口数据串位后进行排列

void RecvDataDispose(uint8_t *Buff)
{
uint8_t i=0;
uint8_t TempBuff[16]={0};
for(i = 0;i<16;i++)
{
if(i<=12)
{
if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
{
memcpy(TempBuff,DisposeData+i,16-i);
memcpy(TempBuff+16-i,DisposeData,i);
memcpy(FinalData,TempBuff,16);
break;
}
}
else
{
memcpy(TempBuff,DisposeData+13,3);
memcpy(TempBuff+3,DisposeData,13);
memcpy(DisposeData,TempBuff,16);
for(i=0;i<=12;i++)
{
if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
{
memcpy(TempBuff,DisposeData+i,16-i);
memcpy(TempBuff+16-i,DisposeData,i);
memcpy(FinalData,TempBuff,16);
break;
}
}
break;
}
}
}
上一篇:IPy的使用


下一篇:VBS编辑字段