找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3997|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機超時接收程序完成

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:77367 發(fā)表于 2015-4-19 02:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  超時接收完成。在一些沒有結(jié)束位和不固定長度的情況下可以使用?梢浦哺髌脚_單片機。- =。~~


  1. #define MaxLen    255               //最大長度

  2. u16 RecTimNum=0;                    //接收計時
  3. FunctionalState RecStart=DISABLE;   //接收啟動標(biāo)志位
  4. FunctionalState RecFinish=DISABLE;  //接收完成標(biāo)志位
  5. u8 ReceiveBuf[MaxLen]={0};          //接收緩沖區(qū)
  6. u8 BufLen=0;                        //接收長度

  7. /* 超時接收完成函數(shù) 定時器中斷1ms進入一次 */
  8. void Rec_TimOut(void)
  9. {
  10.     if(RecStart==ENABLE)
  11.     {
  12.         if(++RecTimNum==5)                  //5ms沒有接收到數(shù)據(jù)默認(rèn)接收完成
  13.         {
  14.             RecTimNum=0;                    //計時清零
  15.             RecStart=DISABLE;               
  16.             RecFinish=ENABLE;               //接收完成標(biāo)志位置位
  17.             //接收完成處理函數(shù)
  18.             Uart_Send(ReceiveBuf,BufLen);   //本段為將接收到的數(shù)據(jù)重新發(fā)送回串口;丨h(huán)測試

  19.             BufLen=0;                       //長度清零
  20.             RecFinish=DISABLE;              //接受完成
  21.         }
  22.     }
  23. }

  24. /* UART接收函數(shù) 放在串口接收中斷*/
  25. void Uart_Receive()
  26. {
  27.     u8 temp;
  28.     if(RecStart==DISABLE)           //第一次進入串口中斷
  29.     {
  30.         RecStart=ENABLE;            //接收啟動標(biāo)志
  31.     }
  32.     RecTimNum=0;                    //每次重新進入串口接收中斷時,清零計數(shù),表示還未接收完成
  33.     temp = UART_ReceiveData8();    //從緩沖區(qū)取出數(shù)據(jù)
  34.     ReceiveBuf[BufLen++]=temp;      //接收緩沖區(qū)

  35. }
復(fù)制代碼






測試結(jié)果如下:
  

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:371527 發(fā)表于 2019-1-29 13:15 | 只看該作者
串口等待時間超時程序,不錯!加入crc更好
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表