请问 串口输入01后为什么会出现循环 应该怎么实现串口.....

2019-07-16 01:52发布

#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit RX=P1^1;
sbit TX=P1^2;
sbit D5=P1^4;
unsigned char flag_uart,flag_on,flag_s=0;
uchar a;
void Star_srch04();  //SR_HC04启动函数
void Count();   //计算函数
void init()     //初始化
{
TMOD=0X21;
SCON=0X50;
TH0=0;
TL0=0;
TH1=0XFD;
TL1=0XFD;
TR1=1;
ET0=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;

}
void main()
{
init();
while(1)
{
  if(flag_uart==1)
  {
   flag_uart=0;
   ES=0;
   ti=1;
   switch(flag_on)
   {
    case 0:puts("turn on hcsr04! ");
      Star_hcsro4();
      Count();
         break;
    case 1:puts("turn off hcsr04! ");
      TX=0;
      break;
    case 2:puts("Error! ");
      break;
   }
   while(!TI);
   TI=0;
   ES=1;
  }
}
}
void Star_hcsr04()
{ TX=0;
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
while(!RX);
TR0=1;
D5=0;
while(RX);
TR0=0;
D5=1;
}
void Count()
{
float s;
unsigned char time;
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.845)/10;
if(flag_s==1)
{
  flag_s=0;
  ES=0;
  TI=1;
  puts("---- ");
  while(!TI);
  TI=0;
  ES=1;
}
    ES=0;
TI=1;
printf("the distance is %fmm ,s");
while(!TI);
TI=0;
ES=1;
}
void T0_time() interrupt 1
{
  flag_s=1;
TH0=0;
TL0=0;

}
void ser() interrupt 4
{
  RI=0;
a=SBUF;
flag_uart=1;
if(a==1)
  flag_on=0;
else if(a==2)
   flag_on=1;
  else
   flag_on=2;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。