欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1700|回復: 1
收起左側

單片機串口定時中斷超時接收 附源程序

[復制鏈接]
ID:948358 發表于 2022-6-5 13:01 | 顯示全部樓層 |閱讀模式
借助T0定時器,不斷的計數+1
    接收到一幀數據(1Byte)后,串口中斷服務函數將定時器T0計數清0(類似喂狗),并創建一個計數標志
    一幀數據(1Byte)長度約為1.04ms[9600bps,1,0,1]。當串口中斷數據接收完畢后,短時間無有效數據接收并進入中斷服務函數,此時T0計數器不被清0,不斷累加
    持續檢測到大于固定時間時,認為此刻一串數據已傳輸完畢。
    固定時間間隔一般設置3-5倍的一幀數據長度(1.04ms)

UART中斷服務函數處理:
    接收到一個字節,打開T0計數軟件標志,清一次計數器(計數器在T0定時器中一直在+1)
  1. void uart_ISR() interrupt 4
  2. {               
  3.         if(RI)
  4.         {
  5.                 RI = 0;
  6.                 timer_start = 1;                        //1. 接收到一幀數據時,打開T0軟件計數器開始計數
  7.                 recv_buf[recv_Cnt] = SBUF;
  8.                 recv_Cnt++;               
  9.                 if(recv_Cnt >= MAX_LENGTH)                //超出開辟數組的保護處理,剩余掐斷
  10.                 {
  11.                         recv_Cnt = MAX_LENGTH;
  12.                 }
  13.                 ctimer_Cnt = 0;                                //3. 一幀數據接收完成后,將T0計數單元清0,類似喂狗。但T0一直累加        
  14.         }
  15. }
復制代碼

T0定時中斷服務函數處理:
接收到串口一個字節數據到達標志,開始計數+1。判斷計數累計循環次數,確定一串數據已發送完成

  1. void Timer0_ISR() interrupt 1
  2. {        
  3.         TR0 = 0;        //進T0中斷首先關閉定時器
  4.         if(timer_start)
  5.         {
  6.                 ctimer_Cnt++;                                        //2. 接收到一幀數據后,定時時間計數單元開始計數
  7.                 if(ctimer_Cnt > MAX_RECV_TIME)                //4. 一串數據接收完成后,下一幀無數據,此時ctimer_Cnt一直被累加,
  8.                 {                                                                        // 當計時大于3ms,認為一串數據已接收完成,將完成標志置1
  9.                         ctimer_Cnt = 0;                        
  10.                         recv_flag = 1;
  11.                         cRealLen = recv_Cnt;        //5. 一串數據傳輸完畢后,將實際長度輸出,生成數組recv_buf[],由主函數處理解析                                
  12.                         recv_Cnt = 0;                                       
  13.                 }
  14.         }               
  15.         TL0 = 0x66;                //裝初值
  16.         TH0 = 0xFC;
  17.         TR0 = 1;                //打開定時器T0
  18. }
復制代碼
回復

使用道具 舉報

ID:390416 發表于 2022-6-6 10:50 | 顯示全部樓層
單片機發送到串口助手,以及串口助手顯示到LCD1602
http://m.raoushi.com/bbs/dpj-214747-1.html
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表