标题: 求助单片机串口通信程序运行的问题 [打印本页]

作者: AnRan_    时间: 2022-2-19 10:56
标题: 求助单片机串口通信程序运行的问题
刚学的串口通信,现在要求写一个程序,串口接收到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 发表于 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 发表于 2022-2-19 11:41
试一下把if(temp=='6')改成if(temp==6)

加上楼下的RI=0并且改成这个就行了,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1