|
超時接收完成。在一些沒有結(jié)束位和不固定長度的情況下可以使用?梢浦哺髌脚_單片機。- =。~~
- #define MaxLen 255 //最大長度
- u16 RecTimNum=0; //接收計時
- FunctionalState RecStart=DISABLE; //接收啟動標(biāo)志位
- FunctionalState RecFinish=DISABLE; //接收完成標(biāo)志位
- u8 ReceiveBuf[MaxLen]={0}; //接收緩沖區(qū)
- u8 BufLen=0; //接收長度
- /* 超時接收完成函數(shù) 定時器中斷1ms進入一次 */
- void Rec_TimOut(void)
- {
- if(RecStart==ENABLE)
- {
- if(++RecTimNum==5) //5ms沒有接收到數(shù)據(jù)默認(rèn)接收完成
- {
- RecTimNum=0; //計時清零
- RecStart=DISABLE;
- RecFinish=ENABLE; //接收完成標(biāo)志位置位
- //接收完成處理函數(shù)
- Uart_Send(ReceiveBuf,BufLen); //本段為將接收到的數(shù)據(jù)重新發(fā)送回串口;丨h(huán)測試
- BufLen=0; //長度清零
- RecFinish=DISABLE; //接受完成
- }
- }
- }
- /* UART接收函數(shù) 放在串口接收中斷*/
- void Uart_Receive()
- {
- u8 temp;
- if(RecStart==DISABLE) //第一次進入串口中斷
- {
- RecStart=ENABLE; //接收啟動標(biāo)志
- }
- RecTimNum=0; //每次重新進入串口接收中斷時,清零計數(shù),表示還未接收完成
- temp = UART_ReceiveData8(); //從緩沖區(qū)取出數(shù)據(jù)
- ReceiveBuf[BufLen++]=temp; //接收緩沖區(qū)
- }
復(fù)制代碼
測試結(jié)果如下:

|
|