小白学习写51单片机串口通信控制led闪烁频率,死循环了怎么破?

额,想用while写小灯循环,可是发现这样写直接进死循环了,没有返回值,也就改变不了频率了。求助求助

#include<intrins.h>


typedef unsigned char u8;
typedef unsigned int u16;

u8 i;

sbit led=P0^0;

void delay(u16 a)
{
    while(a--);
}


void UsartInit()  
{
     SCON=0X50;
     TMOD=0X20; 
     PCON=0X80; 
     TH1=0XF3;
     TL1=0XF3;      
     ES=1;
     EA=1;
     TR1=1;
}

void Uart() interrupt 4   
{
    u8 receiveData;

    i=SBUF;



         switch(i)
         {
          case'0':led=0;break;
          case'1':led=1;break;
          case'2':
                 {  
                  while(1)
                 {
                 led=0;
                 delay(45000);
                 led=1;
                 delay(45000);
                 }
                 break;              
                 }

          case'3':
                 {
                 while(1)
                 {
                 led=0;
                 delay(25000);
                 led=1;
                 delay(25000);
                 }
                 break;}
          case'4':
                 {
                  while(1)
                  {
                  led=0;
                  delay(15000);
                  led=1;
                  delay(15000);
                  }
                  break;
                  }

         }



    receiveData=SBUF;
    RI=0;


    SBUF=receiveData;
    while(!TI);
    TI=0;
}

void main()
{
   UsartInit();
   while(1);
}

1个回答

你的while在case里面当然会死循环呀,把while放到switch的外面来,就可以了。

weixin_45880069
Bay_# 。。。试了一下,这样不可行呀。直接没有接收值了
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问