微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stc52单片机 串口通信失败。请大神指点一二。

stc52单片机 串口通信失败。请大神指点一二。

时间:10-02 整理:3721RD 点击:

本人想要在串口方式1下,实现下位机对上位机命令的读取和反馈。不过不知道咋回事,信息无法反馈到上位机。请大佬指点一二。

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. uchar a,b[20]="0",i,j,flag1;
  9. void init();
  10. void delay(uint);
  11. void main()
  12. {
  13.         init();
  14.         while(1)
  15.         {
  16.                 while(b[i]!='\0');        
  17.                 delay(20);
  18.                 flag1=2;
  19.                 while(b[j]!='\0')
  20.                 {
  21.                         SBUF=b[j];
  22.                     while(TI==0);
  23.                                 TI=0;
  24.                         j++;
  25.                 }
  26.                 while(1);
  27.         }        
  28. ;        
  29. }


  30. void init()
  31. {
  32.         dula=0;
  33.         wela=0;
  34.         TMOD=0x20;
  35.         TH1=0xfd;
  36.         TL1=0xfd;
  37.         REN=1;
  38.         SM0=0;
  39.         SM1=1;
  40.         //SCON=50;
  41.         EA=1;
  42.         ES=1;
  43.         TR1=1;
  44.     a=0,i=0,j=0,flag1=0;        
  45. }

  46. void ser() interrupt 4
  47. {      
  48.         if(flag1==0)
  49.                 {
  50.                                 RI=0;
  51.                                 a=SBUF;
  52.                                 if(a!='\0')
  53.                                 {
  54.                                         b[i]=a;
  55.                                         i++;
  56.                                 }
  57.                                 else
  58.                                         b[i]='\0';
  59.                    }
  60. }

  61. void delay(uint z)
  62. {
  63.         uint x,y;
  64.         for(x=z;x>0;x--)
  65.                 for(y=110;y>0;y--);
  66. }

复制代码



那么多while,不死掉?

死在shile1

串口中断里判断flag1=0,主程序却让flag1=2,第二个while(1)不需要

亲,串口接受 中断函数不对,建议你找一段标准的用,不要自己杜撰呦

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top