HC-SR04超声波模块问题求解答
时间:10-02
整理:3721RD
点击:
我的超声波运行过一会就会死机,卡在echo高电平上不变,敲它一下它就能正常运行,但是过一会又卡死了,在里面加了一段跳出代码也不行:
while(!Echo);
TR0=1;
while(Echo)
{
if(temp>=100)
{
temp=0;
Echo=0;
}
}
TR0=0;
temp是在定时器里改变的0.5毫秒改变一次,
是程序问题还是模块坏了还是什么原因#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led7=P1^7;
sbit Trig=P1^3;
sbit Echo=P1^5;//超声波端口的定义 Trig为触发口 Echo为状态口
static unsigned int s;
unsigned int time=0;//用来存储计时时间
uint temp, i=0;//定时时间长度控制
bit flag=0;
void Delay20us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 6;
while (--i);
}
void main()
{
TMOD=0x11;
TH0=0;
TL0=0;//定时器0用作定时 来计时而测量距离
TL1 = 0x33; //设置定时初值 500us
TH1 = 0xFE; //设置定时初值
ET1=1;
// ET0=1;
EA=1;
TR1=1;
//定时器的初始化设置
while(1)
{
while(!Echo);
TR0=1;
while(Echo)
{
if(temp>=100)
{
temp=0;
Echo=0;
}
}
TR0=0; //超声波测量
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*0.034)/2;
if(s<=15)
{
led1=0;
led7=1;
}
else
{
led1=1;
led7=0;
}
}
}
//void timer0() interrupt 1 //超出测量范围
//{
// flag=1;
//}
void timer1() interrupt 3 //定时器1中断函数
{
TL1 = 0x33; //设置定时初值 500us
TH1 = 0xFE; //设置定时初值
temp++;
i++; //每次20毫秒产生一次中断 500us
if(i>=140) //每80毫秒发送一次状态
{
i=0;
Trig=1;
Delay20us();
Trig=0;
}
}
while(!Echo);
TR0=1;
while(Echo)
{
if(temp>=100)
{
temp=0;
Echo=0;
}
}
TR0=0;
temp是在定时器里改变的0.5毫秒改变一次,
是程序问题还是模块坏了还是什么原因#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led7=P1^7;
sbit Trig=P1^3;
sbit Echo=P1^5;//超声波端口的定义 Trig为触发口 Echo为状态口
static unsigned int s;
unsigned int time=0;//用来存储计时时间
uint temp, i=0;//定时时间长度控制
bit flag=0;
void Delay20us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 6;
while (--i);
}
void main()
{
TMOD=0x11;
TH0=0;
TL0=0;//定时器0用作定时 来计时而测量距离
TL1 = 0x33; //设置定时初值 500us
TH1 = 0xFE; //设置定时初值
ET1=1;
// ET0=1;
EA=1;
TR1=1;
//定时器的初始化设置
while(1)
{
while(!Echo);
TR0=1;
while(Echo)
{
if(temp>=100)
{
temp=0;
Echo=0;
}
}
TR0=0; //超声波测量
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*0.034)/2;
if(s<=15)
{
led1=0;
led7=1;
}
else
{
led1=1;
led7=0;
}
}
}
//void timer0() interrupt 1 //超出测量范围
//{
// flag=1;
//}
void timer1() interrupt 3 //定时器1中断函数
{
TL1 = 0x33; //设置定时初值 500us
TH1 = 0xFE; //设置定时初值
temp++;
i++; //每次20毫秒产生一次中断 500us
if(i>=140) //每80毫秒发送一次状态
{
i=0;
Trig=1;
Delay20us();
Trig=0;
}
}