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

標(biāo)題: ESP8266如何從15單片機(jī)串口中讀取需要的數(shù)據(jù)? [打印本頁(yè)]

作者: 風(fēng)曉得OME    時(shí)間: 2022-4-12 17:07
標(biāo)題: ESP8266如何從15單片機(jī)串口中讀取需要的數(shù)據(jù)?
我用2套15F2K60S單片機(jī)+8266,一套做發(fā)射端,一套做接收端。
發(fā)射端已經(jīng)弄好了一套程序,超聲波和聲音傳感器測(cè)量數(shù)據(jù),數(shù)據(jù)格式如下:T=60.3cm,S=0E。發(fā)送是正常的。現(xiàn)在問(wèn)題就是接收端解釋不了我需要的數(shù)據(jù)。早期測(cè)試的時(shí)候,串口2的數(shù)據(jù)是可以接收到的,但獲取不了需要的數(shù)據(jù)。

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

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

  4. IE2 = 0x00;                  //關(guān)閉串口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.                                                 //添加對(duì)收到信息的處理代碼
  21.                                         memset(RX_buffer2, 0, 30);//清緩存數(shù)據(jù)
  22.                                         u=0;
  23.                                         //i=0;                                   //接收計(jì)數(shù)變量清0
  24.                                         }                        
  25.                                 }
  26.                         if(RX_num2>tbuf) RX_num2 = 0;
  27.                         }
  28.                         if (S2CON & S2TI)
  29.                         {
  30.                         S2CON &= ~S2TI;            
  31.                         }
  32.                         IE2 = 0x01;                //開(kāi)啟串口2中斷

  33.                         
復(fù)制代碼

求各位大神幫忙看看。要怎么才能獲取到我需要的關(guān)鍵信息。

作者: 人工置頂員    時(shí)間: 2022-4-12 22:34
頂一下
作者: yzwzfyz    時(shí)間: 2022-4-14 09:26
中斷后關(guān)閉中斷是個(gè)錯(cuò)誤的觀念,不是說(shuō)不可以。
1、至少浪費(fèi)兩條指令的時(shí)間,開(kāi)它和關(guān)它。
2、如果新的中斷來(lái)了,則可能會(huì)留失數(shù)據(jù),如你認(rèn)為后面又打開(kāi)了,則不關(guān)不是一樣嗎。
不要在中斷中分析數(shù)據(jù)(IF RES 如何如何)!!中斷只做數(shù)據(jù)的接收與存儲(chǔ)就行了,做個(gè)標(biāo)記立即結(jié)束退出,這樣中斷服務(wù)時(shí)間才最短,不會(huì)影響到下個(gè)數(shù)據(jù)的接收。數(shù)據(jù)處理應(yīng)在主程序中去做!!
記住:所有中斷服務(wù)程序,要盡可能地節(jié)省時(shí)間,盡快退出。能在主程序中處理的,不要在中斷中處理。
理由:中斷服務(wù)程序期間,其它平級(jí)低級(jí)中斷將無(wú)法響應(yīng)!!
例如:時(shí)間中斷執(zhí)行時(shí)間長(zhǎng),中斷期間,低級(jí)的串口中斷來(lái)了,因無(wú)法即時(shí)響應(yīng),結(jié)果下一個(gè)串行字節(jié)又來(lái)了,則數(shù)據(jù)就丟失了一個(gè)。這種事情,在你的程序中是否會(huì)發(fā)生呢?全面查一下。
作者: 風(fēng)曉得OME    時(shí)間: 2022-4-16 15:53
yzwzfyz 發(fā)表于 2022-4-14 09:26
中斷后關(guān)閉中斷是個(gè)錯(cuò)誤的觀念,不是說(shuō)不可以。
1、至少浪費(fèi)兩條指令的時(shí)間,開(kāi)它和關(guān)它。
2、如果新的中 ...

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

  4. IE2 = 0x00;                  //關(guān)閉串口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;                //開(kāi)啟串口2中斷

  18.                        

  19. }
復(fù)制代碼








歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1