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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2503|回復: 3
打印 上一主題 下一主題
收起左側

ESP8266如何從15單片機串口中讀取需要的數據?

[復制鏈接]
跳轉到指定樓層
樓主
ID:886263 發表于 2022-4-12 17:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我用2套15F2K60S單片機+8266,一套做發射端,一套做接收端。
發射端已經弄好了一套程序,超聲波和聲音傳感器測量數據,數據格式如下:T=60.3cm,S=0E。發送是正常的,F在問題就是接收端解釋不了我需要的數據。早期測試的時候,串口2的數據是可以接收到的,但獲取不了需要的數據。

接收端的8266是用串口2的,代碼如下:

  1. //串口2中斷
  2. void Uart2() interrupt 8 using 1
  3. {

  4. IE2 = 0x00;                  //關閉串口2中斷
  5.                         if (S2CON & S2RI)
  6.                         {
  7.                         S2CON &= ~S2RI;         
  8.                         res = S2BUF;
  9.                         test[RX_num2]=res;
  10.                         RX_num2++;

  11.                                 if(res=='T'||u>0)
  12.                                 {
  13.                                 
  14.                                 RX_buffer2[u]=res;
  15.                                 u++;
  16.                                 //i++;
  17.                                         if(res=='E')
  18.                                         {
  19.                                                 
  20.                                                 //添加對收到信息的處理代碼
  21.                                         memset(RX_buffer2, 0, 30);//清緩存數據
  22.                                         u=0;
  23.                                         //i=0;                                   //接收計數變量清0
  24.                                         }                        
  25.                                 }
  26.                         if(RX_num2>tbuf) RX_num2 = 0;
  27.                         }
  28.                         if (S2CON & S2TI)
  29.                         {
  30.                         S2CON &= ~S2TI;            
  31.                         }
  32.                         IE2 = 0x01;                //開啟串口2中斷

  33.                         
復制代碼

求各位大神幫忙看看。要怎么才能獲取到我需要的關鍵信息。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:301191 發表于 2022-4-12 22:34 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:123289 發表于 2022-4-14 09:26 | 只看該作者
中斷后關閉中斷是個錯誤的觀念,不是說不可以。
1、至少浪費兩條指令的時間,開它和關它。
2、如果新的中斷來了,則可能會留失數據,如你認為后面又打開了,則不關不是一樣嗎。
不要在中斷中分析數據(IF RES 如何如何)!!中斷只做數據的接收與存儲就行了,做個標記立即結束退出,這樣中斷服務時間才最短,不會影響到下個數據的接收。數據處理應在主程序中去做!
記。核兄袛喾⻊粘绦颍M可能地節省時間,盡快退出。能在主程序中處理的,不要在中斷中處理。
理由:中斷服務程序期間,其它平級低級中斷將無法響應!!
例如:時間中斷執行時間長,中斷期間,低級的串口中斷來了,因無法即時響應,結果下一個串行字節又來了,則數據就丟失了一個。這種事情,在你的程序中是否會發生呢?全面查一下。
回復

使用道具 舉報

地板
ID:886263 發表于 2022-4-16 15:53 | 只看該作者
yzwzfyz 發表于 2022-4-14 09:26
中斷后關閉中斷是個錯誤的觀念,不是說不可以。
1、至少浪費兩條指令的時間,開它和關它。
2、如果新的中 ...

你好,問題解決了。加了這個res2 = S2BUF; 就可以正常識別了。
  1. //串口2中斷
  2. void Uart2() interrupt 8 using 1
  3. {

  4. IE2 = 0x00;                  //關閉串口2中斷
  5.                         if (S2CON & S2RI)
  6.                         {
  7.                         S2CON &= ~S2RI;         
  8.                         res2 = S2BUF;
  9.                         RX_buffer2[RX_num2]=res2;
  10.                         RX_num2++;
  11.                         if(res2=='\n') RX_num2 = 0;flag=1;
  12.                         }
  13.                         if (S2CON & S2TI)
  14.                         {
  15.                         S2CON &= ~S2TI;            
  16.                         }
  17.                         IE2 = 0x01;                //開啟串口2中斷

  18.                        

  19. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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