单片机串口通信接收与发送字符串问题

2019-03-24 17:19发布

我的目的是通过电脑给单片机发送一个字符串k+25,单片机接收到该字符串后,发送给电脑25这两个字符;单片机虽然接受到了该字符串,但是发送到电脑时总是+2
这两个字符。我在发送函数里已经用for(j=2;j<4;j++)来限制只发送25这两个字符了,可是现在一直发送+2这两个字符,麻烦各位大神帮我看一下吧,谢谢了
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. unsigned char flag,a,i,j;
  5. uchar table[];
  6. void init()
  7. {
  8.    TMOD=0x20;
  9.    TH1=0xFD;
  10.    TL1=0xFD;
  11.    TR1=1;
  12.    REN=1;
  13.    SM0=0;
  14.    SM1=1;
  15.    EA=1;
  16.    ES=1;
  17.    
  18.   }

  19. void main()
  20. {
  21.    init();
  22.    while(1)
  23.    {

  24.        if(flag==1)
  25.        {   
  26. //          for(i=0;i<4;i++)
  27. //            {
  28. //               table=a;
  29. //              }
  30.                ES=0;
  31. //              SBUF=table[2];
  32. //               SBUF=table[3];
  33.             for(j=2;j<4;j++)
  34.             {
  35.               SBUF=table[j];
  36.                while(!TI);      
  37.               TI=0;
  38.               flag=0;
  39.               ES=1;
  40.               }
  41.              flag=0;
  42.              ES=1;
  43.            }
  44. //           flag=0;
  45. //           ES=1;
  46.            // flag=0;
  47.          
  48. //           ES=1;
  49. //            flag=0;
  50.      
  51.           }
  52. //      SBUF=a;
  53. //      while(!TI);
  54. //      TI=0;
  55. //      ES=1;
  56. //      flag=0;
  57. //     
  58. }
  59. void ser()interrupt 4
  60. {
  61. //    RI=0;
  62. //    a=SBUF;
  63.   for(i=0;i<4;i++)
  64.   {       while(!RI);
  65.       table=SBUF;
  66.     //  while(!RI);
  67.       RI=0;
  68.   }
  69. //     table[0]=SBUF;
  70. //     table[1]=SBUF;
  71. //     table[2]=SBUF;
  72. //     table[3]=SBUF;
  73.      flag=1;
  74.    
  75. }
复制代码

下面是串口助手调试情况:
QQ图片20170409142356.png

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
FENFAXIANGSHANG
2019-03-26 20:32
长得帅怪我落 发表于 2017-4-10 09:28
前面那个,你的中断里面写法不对,
   while(!RI);
for(i=0;i

一开始我问的那个实现了,但是现在出现了一个bug,如果我把主函数中改成(j=1;j<3;j++)按理说通过串口助手调试后应该显示+2两个字符,而现在并不是,呈现的是后两个字符25.即使我发送1234这两个字符,显示的不是23,而是34这两个字符,为什么呢?

一周热门 更多>