|
发表于 2013-1-28 08:43:27
|
显示全部楼层
本帖最后由 flywater 于 2013-1-28 17:24 编辑
//每次中断只接收一个数据;
void UART0_ISR (void) interrupt 4
{
if(RI0) //是接收中断;
{
RI0=0;
UART0_Buffer[com_dat] = SBUF0; //把从串口读出的字符存到数组
com_dat=( com_dat < sizeof(UART0_Buffer)-1 ) ? (com_dat+1) : (sizeof(UART0_Buffer)-1);
}
else //是发送中断;
{
TI0=0;
.......
}
}
//然后在主程序中调用串口数据处理函数;
void DoSerial()
{
if(com_dat<SetNum) //数据未收够,退出;
return;
if(UART0_Buffer[0]!=Header) //命令头不正确,数据无效,扔掉退出 (可选,也可根据情况再增加数据完整性校验 CRC等)
{
com_dat=0;
return;
}
...............数据校验
//数据接收正确,开始处理
switch(UART0_Buffer[1]) //处理相应命令;
{
case COMMAND1:
........
break;
case COMMAND2:
........
break;
}
//命令处理完成,复位接收缓冲;
com_dat=0;
}
|
|