为啥用串口助手发1flag1可以启动,发其他的flag2不能运行还是怎么的,电机不停!!

#include<reg52.h>
#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
unsigned char Dat;
unsigned char i,j;
void flag1();
void flag2();
sbit moto1=P1^0; //定义电机1管脚
sbit moto21=P1^1; //定义电机2管脚
sbit moto22=P1^2;
sbit led1=P2^0; //定义P2.0口是led1
sbit led2=P2^6; //定义P2.1口是led2
sbit led3=P2^4;
void main()
{
moto1=0;
moto21=0;
moto22=0;
led3=0;
SCON=0x50;
PCON=0x00;
TMOD=0x20;
EA=1;
ES=1;
TL1=0xfd; //波特率9600
TH1=0xfd;
TR1=1;
while(1)
    { 
    }
}
void serial() interrupt 4 //串行中断服务函数
{
Dat=SBUF; //把收到的信息从SBUF放到buf中
RI=0;
if(Dat==1)
   {
   flag1(); // 指令1
   }
 else //指令2
 {
 flag2();
 }
}
void delay(u16 i) //延时函数
{
while(i--);
}
void flag1()
{
  led3=1;
  moto1=1;
  led1=0;
    for(i=0;i<100;i++) //循环100次,也就是大约5S
    {
     delay(5000); //大约延时50ms
    }
     moto1=0; //关闭电机1
     led1=1; //关闭指示灯
     while(1)
     {
      moto21=1; //电机2正转
      moto22=0;
      led2=0;
     for(j=0;j<195;j++)
         {
         delay(5000);
         }
        moto21=1; //停车
        moto22=1;
     for(j=0;j<5;j++)
      {
      delay(5000);
      }
    moto21=0; //反转
    moto22=1;
    led2=~led2;
     for(j=0;j<195;j++)
     {
     delay(5000);
     }
     moto21=1; //停车
     moto22=1;
    for(j=0;j<5;j++)
    {
     delay(5000);
    }
  }
}
  void flag2() //电机1、2停止
{
  while(1)
  {
  moto1=0;
  moto21=1;
  moto22=1;
  led1=1;
  led2=1;
  led3=0;
  }
} 

 

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。