标题: 能不能帮我看看为什么数据后接收不到? [打印本页]

作者: 机械嗷嗷嗷    时间: 2021-9-23 16:44
标题: 能不能帮我看看为什么数据后接收不到?
  1. #include "reg52.h"

  2. void ConfigUART(unsigned int baud);

  3. void main()
  4. {
  5.     EA = 1;
  6.     ConfigUART(9600);
  7.     while(1);
  8. }

  9. void ConfigUART(unsigned int baud)
  10. {
  11.     SCON = 0x50;//配置为模式1
  12.     TMOD &= 0xf0;
  13.     TMOD |= 0x20;
  14.     TH1 = 256 - (11059200/12/32)/baud;
  15.     TL1 = TH1;
  16.     ET1 = 0;//利用T1中断来进行接收(发送)完成的中断,所以要禁用T1的计时器中断
  17.     TR1 = 1;
  18. }

  19. void InterruptUART() interrupt 4
  20. {
  21.     if(RI)
  22.    {
  23.       RI = 0;
  24.       SBUF = SBUF + 1;//将接收的数据+1再发回去
  25.    }       
  26.     if(TI)
  27.    {
  28.       TI = 0;
  29.    }
  30. }
复制代码


屏幕截图 2021-09-23 164334.png (43.57 KB, 下载次数: 24)

屏幕截图 2021-09-23 164334.png

作者: 188610329    时间: 2021-9-23 17:34
ES = 1   呢????
作者: lkc8210    时间: 2021-9-23 17:46
  1. #include "reg52.h"

  2. void ConfigUART(unsigned int baud);
  3. unsigned char TBUF;
  4. void main()
  5. {
  6.     EA = 1;
  7.     ConfigUART(9600);
  8.     while(1)
  9.                 {
  10.                         if(TBUF)//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  11.                         {
  12.                                 SBUF = TBUF;
  13.                                 TBUF = 0;
  14.                         }
  15.                 }
  16. }

  17. void ConfigUART(unsigned int baud)
  18. {
  19.     SCON = 0x50;//配置为模式1
  20.     TMOD &= 0x0F;//错1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  21.     TMOD |= 0x20;
  22.     TH1 = 256 - (11059200/12/32)/baud;
  23.     TL1 = TH1;
  24.     ET1 = 0;//利用T1中断来进行接收(发送)完成的中断,所以要禁用T1的计时器中断
  25.     TR1 = 1;
  26.     ES = 1;//错2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  27. }

  28. void InterruptUART() interrupt 4
  29. {
  30.     if(RI)
  31.    {
  32.       RI = 0;
  33.       TBUF = SBUF + 1;//将接收的数据+1再发回去//错3<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  34.    }      
  35.     if(TI)
  36.    {
  37.       TI = 0;
  38.    }
  39. }
复制代码
错1:不是TMOD &= 0xF0;
错2:没有开启串口中断
错3:最好不要在串口中断中对SBUF赋值

作者: 郑汉松    时间: 2021-9-24 09:04
EA = ES = 1;
作者: 闷得儿橙    时间: 2021-9-24 17:19
你要加上EAES都等于1




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