为什么上位机不能按预期般控制HC-SR04 (能打开不能关闭).....
时间: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=0,flag_on,flag_s=0,flag_open=0;
uchar a;
float S;
void Star_hcsr04(); //HC-SR04启动函数
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();
TX=0;
RX=0;
while(1)
{
if(flag_uart==1)
{
flag_uart=0;
ES=0;
TI=1;
switch(flag_on)
{
case 0:puts("turn on hcsr04!\n");
while(!TI);
TI=0;
ES=1;
flag_open=1;
break;
case 1:puts("turn off hcsr04!\n");
while(!TI);
TI=0;
ES=1;
TX=0;
flag_open=0;
break;
case 2:puts("Error!\n");
while(!TI);
TI=0;
ES=1;
flag_open=0;
break;
}
}
if(flag_open==1)
{
Star_hcsr04();
Count();
}
}
}
void Star_hcsr04()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_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()
{
unsigned char time;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.845)/10;
if(flag_s==1||S>4000)
{
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=0,flag_on,flag_s=0,flag_open=0;
uchar a;
float S;
void Star_hcsr04(); //HC-SR04启动函数
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();
TX=0;
RX=0;
while(1)
{
if(flag_uart==1)
{
flag_uart=0;
ES=0;
TI=1;
switch(flag_on)
{
case 0:puts("turn on hcsr04!\n");
while(!TI);
TI=0;
ES=1;
flag_open=1;
break;
case 1:puts("turn off hcsr04!\n");
while(!TI);
TI=0;
ES=1;
TX=0;
flag_open=0;
break;
case 2:puts("Error!\n");
while(!TI);
TI=0;
ES=1;
flag_open=0;
break;
}
}
if(flag_open==1)
{
Star_hcsr04();
Count();
}
}
}
void Star_hcsr04()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_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()
{
unsigned char time;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.845)/10;
if(flag_s==1||S>4000)
{
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;
}
已退回1积分