找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1368|回复: 2
收起左侧

51单片机配合hcsr04无法工作

[复制链接]
ID:827263 发表于 2021-3-28 17:01 | 显示全部楼层 |阅读模式
#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);
  }
}


代码如上,已经测试过了,那个超声波模块正常工作,就是轮子不动,麻烦各位大哥了
回复

使用道具 举报

ID:207421 发表于 2021-3-28 19:03 | 显示全部楼层
1. 这程序没有计算实际距离的代码
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范围内
3. 用IO上的LED测试下,是否执行了上一行代码,如果执行了, 那么证明判断的值是有问题的
回复

使用道具 举报

ID:827263 发表于 2021-3-28 19:45 | 显示全部楼层
lwh999995 发表于 2021-3-28 19:03
1. 这程序没有计算实际距离的代码
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范围内
3. ...

距离我在外面算过了,我直接换算成微秒了。
我在while下加过led测试程序,和定时器开关放一块,led一闪一闪的,定时器应该有打开,之后的程序我怕出错,写的很简单。
我继续做了,多谢老哥回答。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表