今天串口通信遇到个很奇葩的问题到现在不知道原因

2019-07-15 16:00发布

源码如下:
  1. #include <mydec.h>

  2. uchar r_a=1;

  3. void UART_Initial(void)
  4. {
  5.         SCON=0X50;
  6.         TMOD=0X20;
  7.         EA=1;
  8.         ES=1;
  9.         TH1=0XFD;
  10.         TL1=0XFD;
  11.         TR1=1;



  12. }

  13. void SendByte(uchar dat)
  14. {
  15.         SBUF=dat;
  16.         while(!TI);
  17.         TI=0;

  18. }

  19. void SendString(uchar *s)
  20. {       
  21.         while(*s)
  22.         {
  23.                
  24.                 SendByte(*s);
  25.                 s++;
  26.         }
  27. }





  28. void main()
  29. {
  30.         uchar *s="hello world!";
  31.         UART_Initial();
  32.         SendString(s);
  33. //        SendByte(r_a);
  34. //        while(!T0);
  35. //        T0=0;

  36.                



  37. }

  38. //void UART_Inter() interrupt 4
  39. //{
  40. //        if(TI)
  41. //        {
  42. //               
  43. //       
  44. //        }
  45. //        if(RI)
  46. //        {
  47. //                r_a=SBUF;
  48. //                P1=r_a;
  49. //                SBUF=r_a;
  50. //                RI=0;
  51. //
  52. //       
  53. //        }
  54. //
  55. //
  56. //
  57. //}
复制代码代码其实只有几行,高手们帮看下。现在的问题是,当我把第二行的 uchar r_a=1;注释掉时,hello world 能输出到串口助手的输出端,接收区会不停打印这两个单词。但是如果添上这句代码,就接收不到。只会出现一次hhello world!然后就没有反应了,求教高手是怎么回事。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
linhe1992
2019-07-15 19:50
不知道你不注释掉定义的那一句是什么效果,从目前来看,你是想收到一个数据,然后串口先发送helloworld,在发送接受的数据。但你的串口中断里边直接给sbuf赋值。可是你是先显示helloworld,所以sbuf会先被一次赋值为helloworld,本来接收的数据并没有被留下来,所以输出自然不会有。

一周热门 更多>