//功能:单片机读取VGUS屏返回指令 //来源:武汉中显科技有限公司 www.viewtech.cn //全局变量 u16 StartNum=0,TalNum=0; #define BUFFER_SIZE 2048//指令缓冲区大小,用户可根据自己单片机的容量修改 u8 CommBuff[BUFFER_SIZE]//定义指令缓冲区 #define USER_R3 0xA5//帧头 #define USER_RA 0x5A//帧头 ///////////////// //串口中断函数 //用户根据单片机的不同,修改串口中断函数,中断函数内只保存串口数据到缓冲区 void USART3_IRQHandler(void) { CommBuff[TalNum++]=USART_ReceiveData(USART3);//保存串口数据 if(TalNum==BUFFER_SIZE) TalNum=0; } //主程序指令解析函数 //用户在主循环中调用 void deal_command() { u16 i,CurNum,tem_TalNum; u8 CmdBuf[256]; u16 nowbuffer,len; len=StartNum; tem_TalNum=TalNum; if(tem_TalNum==len)// return; if(CommBuff[StartNum]!=USER_R3) { StartNum++; if(StartNum==BUFFER_SIZE) StartNum=0; return; } if(tem_TalNum>len) nowbuffer=tem_TalNum-len; else nowbuffer=tem_TalNum+BUFFER_SIZE-len; if(nowbuffer<5) return; CurNum=StartNum+2; if(CurNum>BUFFER_SIZE-1) CurNum-=BUFFER_SIZE; len=CommBuff[CurNum]+3; if(nowbuffer4) { if(i==len+3)// { StartNum=CurNum; break; } else if(i>255)// { StartNum=CurNum; return; } else if(CurNum==tem_TalNum) return; } } ///现在解析指令CmdBuf保存一整条指令 switch(CmdBuf[3]) { case 0x81: break; case 0x83: break; default:////命令无效,删除 break; } return; }