标题:
51单片机配合hcsr04无法工作
[打印本页]
作者:
被噶的韭菜
时间:
2021-3-28 17:01
标题:
51单片机配合hcsr04无法工作
#include<reg51.h>
#include<intrins.h>
sbit Trig=P2^0;
sbit Echo=P2^1;
/*
---------------------
延时函数
---------------------
*/
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=400;y>0;y--);
}
/*
---------------------
超声波启动函数
---------------------
*/
void start()
{
int i;
Trig=0; //控制端初始状态拉低
Echo=0; //初始状态接收端置0
Trig=1; //控制端拉高,给一个高电平
for(i=0;i<20;i++) //给至少10us的高电平
{
_nop_(); //精确延时,推荐使用,在头文件intrins.h中
}
Trig=0; //将控制端拉低,触发条件完成
}
void count()
{
unsigned int time,timeH,timeL;
timeH=TH0;
timeL=TL0;
TH0=0;
TL0=0;
time=timeH*256+timeL;
if(time<542 ) //542us,换算成距离是10cm(11.0592m)
P1=0x00; //p1控制4个轮子
else
P1=0xAA;
}
void main()
{
while(1)
{
TMOD=0X11;
TH0=0;
TL0=0;
start();
while(!Echo);
TR0=1;
while(Echo);
TR0=0;
count();
delay(120);
}
}
代码如上,已经测试过了,那个超声波模块正常工作,就是轮子不动,麻烦各位大哥了
作者:
lwh999995
时间:
2021-3-28 19:03
1. 这程序没有计算实际距离的代码
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范围内
3. 用IO上的LED测试下,是否执行了上一行代码,如果执行了, 那么证明判断的值是有问题的
作者:
被噶的韭菜
时间:
2021-3-28 19:45
lwh999995 发表于 2021-3-28 19:03
1. 这程序没有计算实际距离的代码
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范围内
3. ...
距离我在外面算过了,我直接换算成微秒了。
我在while下加过led测试程序,和定时器开关放一块,led一闪一闪的,定时器应该有打开,之后的程序我怕出错,写的很简单。
我继续做了,多谢老哥回答。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1