標題: 求助單片機串口通信程序運行的問題 [打印本頁]

作者: AnRan_    時間: 2022-2-19 10:56
標題: 求助單片機串口通信程序運行的問題
剛學的串口通信,現(xiàn)在要求寫一個程序,串口接收到6的時候led燈全亮,請幫我看一下這個代碼哪里有問題,波特率9600的
單片機源程序如下:
  1. #include <reg52.h>

  2. void UARTInit()
  3. {
  4.         EA=1;
  5.         ES=1;
  6.         REN=1;
  7.         SM0=0;SM1=1;
  8.         TR1=1;//開啟定時器1
  9.         TMOD |=0X20;
  10.         TH1=0XFD;
  11.         TL1=0XFD;
  12. }
  13. void main()
  14. {               
  15.         UARTInit();
  16.         while(1)
  17.         {
  18.         
  19.         }
  20. }
  21. void UART() interrupt 4
  22. {
  23.         unsigned char temp;
  24.         if(RI)
  25.         {
  26.                 temp=SBUF;
  27.                 if(temp=='6')
  28.                         P1=0x00;
  29.         }
  30.         if(TI)
  31.                 TI=0;
  32. }
復制代碼


作者: LPB2021    時間: 2022-2-19 11:41
試一下把if(temp=='6')改成if(temp==6)
作者: lkc8210    時間: 2022-2-19 12:44

  1. void UART() interrupt 4
  2. {
  3.         unsigned char temp;
  4.         if(RI)
  5.         {
  6.                         RI = 0;//<<<<<<<<<<<<<<<<<<<缺了對RI清零
  7.                 temp=SBUF;
  8.                 if(temp=='6')
  9.                         P1=0x00;
  10.         }
  11.         if(TI)
  12.                 TI=0;
  13. }
復制代碼


加上對RI清零那句后
在真機上成功控制P1
但在Proteus里仿真依失敗

用SCON = 0x50;
取代        
REN=1;
SM0=0;
SM1=1;
就成功在Proteus里仿真
作者: AnRan_    時間: 2022-2-19 14:32
本帖最后由 AnRan_ 于 2022-2-19 14:45 編輯
lkc8210 發(fā)表于 2022-2-19 12:44
加上對RI清零那句后
在真機上成功控制P1
但在Proteus里仿真依失敗
加上RI=0并且把temp=‘6’改成temp=6就行了,謝謝
作者: AnRan_    時間: 2022-2-19 14:32
本帖最后由 AnRan_ 于 2022-2-19 14:44 編輯
LPB2021 發(fā)表于 2022-2-19 11:41
試一下把if(temp=='6')改成if(temp==6)

加上樓下的RI=0并且改成這個就行了,謝謝




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