请问 串口输入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;
}
#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 模块还是打不开...
为什么没人帮我呢。