微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问 串口输入01后为什么会出现循环 应该怎么实现串口.....

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

时间:10-02 整理:3721RD 点击:
#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!\n");
      Star_hcsro4();
      Count();
         break;
    case 1:puts("turn off hcsr04!\n");
      TX=0;
      break;
    case 2:puts("Error!\n");
      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("----\n");
  while(!TI);
  TI=0;
  ES=1;
}
    ES=0;
TI=1;
printf("the distance is %fmm\n,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;
}

求各位帮忙 谢谢了

循环输出turn on hcsr04 的问题已经解决(将
while(!TI);
   TI=0;
   ES=1;
放入循环内)    但是HC-SR04 模块还是打不开...

循环输出turn on hcsr04 的问题已经解决(将
while(!TI);
   TI=0;
   ES=1;
放入循环内)    但是HC-SR04 模块还是打不开...

为什么没人帮我呢。

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

网站地图

Top