找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1838|回復(fù): 2
收起左側(cè)

51單片機配合hcsr04無法工作

[復(fù)制鏈接]
ID:827263 發(fā)表于 2021-3-28 17:01 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
#include<intrins.h>

sbit Trig=P2^0;
sbit Echo=P2^1;
/*
   ---------------------
   延時函數(shù)
   ---------------------
*/
void delay(unsigned int z)
{
    unsigned int x,y;
    for(x=z;x>0;x--)
    for(y=400;y>0;y--);
}
/*
   ---------------------
    超聲波啟動函數(shù)
   ---------------------
*/
void start()                  
{
  int i;
  Trig=0;                  //控制端初始狀態(tài)拉低
  Echo=0;                  //初始狀態(tài)接收端置0
  Trig=1;                  //控制端拉高,給一個高電平
  for(i=0;i<20;i++)          //給至少10us的高電平
  {
    _nop_();                  //精確延時,推薦使用,在頭文件intrins.h中
  }
  Trig=0;                  //將控制端拉低,觸發(fā)條件完成
}
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);
  }
}


代碼如上,已經(jīng)測試過了,那個超聲波模塊正常工作,就是輪子不動,麻煩各位大哥了
回復(fù)

使用道具 舉報

ID:207421 發(fā)表于 2021-3-28 19:03 | 顯示全部樓層
1. 這程序沒有計算實際距離的代碼
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范圍內(nèi)
3. 用IO上的LED測試下,是否執(zhí)行了上一行代碼,如果執(zhí)行了, 那么證明判斷的值是有問題的
回復(fù)

使用道具 舉報

ID:827263 發(fā)表于 2021-3-28 19:45 | 顯示全部樓層
lwh999995 發(fā)表于 2021-3-28 19:03
1. 這程序沒有計算實際距離的代碼
2. while死等回波也是不太可靠的,所以time值也不一定在想要的范圍內(nèi)
3. ...

距離我在外面算過了,我直接換算成微秒了。
我在while下加過led測試程序,和定時器開關(guān)放一塊,led一閃一閃的,定時器應(yīng)該有打開,之后的程序我怕出錯,寫的很簡單。
我繼續(xù)做了,多謝老哥回答。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表