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

標題: 請教單片機串口通訊問題,最后置標志位語句不是每次都能執行 [打印本頁]

作者: liuzanshui    時間: 2019-6-18 16:03
標題: 請教單片機串口通訊問題,最后置標志位語句不是每次都能執行

用C8051F410, 需要從串口接收兩個字節,收到后置標志位,程序如下

vvoid comm0_rx(void) interrupt 4   

{

        m=0;

  while(m<2)

   {

          if(RI0)                  

         {

            RI0=0;                  

            recdata[m]=SBUF0;

           m++;

         }

     }

        

              m=0;

       while(m<2)               

           {

                  SBUF0=recdata[m];

                    while(!TI0);           

                    TI0=0;               

                   m++;

           }

            flag0=1;        

            flag1=1;        

           ES0=0;                 

}

     程序運行后,接收及發送都沒問題,但就是最后置標志位語句不是每次都能執行,偶爾接收一次就能執行,大多數要接收好幾次才能置位(次數不定)。開始時接收和發送是在一起,后來分開,甚至置位語句放在接收與發送之間也沒用。哪位大俠遇到過這種問題?

   


作者: xuyaqi    時間: 2019-6-19 08:14
不能把中斷處理程序搞得這么復雜,會影響串口接收的,中斷里設標志,復雜處理中斷外執行。
作者: lfc315    時間: 2019-6-19 10:14
因為你有好幾個判斷,滿足了判斷條件才會執行到最后,間隔時間相對來說很長了
作者: liuzanshui    時間: 2019-6-19 10:26
xuyaqi 發表于 2019-6-19 08:14
不能把中斷處理程序搞得這么復雜,會影響串口接收的,中斷里設標志,復雜處理中斷外執行。

已經盡力精簡了,收到數據后置標志位,然后禁止串口通信,主程序執行完相應的任務后再重開串口
作者: liuzanshui    時間: 2019-6-19 10:29
xuyaqi 發表于 2019-6-19 08:14
不能把中斷處理程序搞得這么復雜,會影響串口接收的,中斷里設標志,復雜處理中斷外執行。

不管中斷程序效率如何,總不能漏掉語句吧,這才是我不理解的地方
作者: xuyaqi    時間: 2019-6-19 11:07
liuzanshui 發表于 2019-6-19 10:26
已經盡力精簡了,收到數據后置標志位,然后禁止串口通信,主程序執行完相應的任務后再重開串口

“收到數據后置標志位,然后禁止串口通信”怎么能禁止串口通信,對方發送你不是漏掉了嘛,你應該在接收中斷里照章全收,在中斷外處理這樣才不會漏數據。
作者: liuzanshui    時間: 2019-6-19 13:20
xuyaqi 發表于 2019-6-19 11:07
“收到數據后置標志位,然后禁止串口通信”怎么能禁止串口通信,對方發送你不是漏掉了嘛,你應該在接收中 ...

開始是將ES0=0語句放在中斷外,現在放在中斷的結尾,結果都一樣。我是先接收和發送完數據,退出中斷前禁止串口
作者: yzwzfyz    時間: 2019-6-19 15:50
你能照著沙發的意義去做,腦子就夠用了。
你自己把你現在的程序畫成流程圖看看,走得通走不通?




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