标题: 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