找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1337|回复: 4
收起左侧

STC15F2K60S2单片机调试超声波HC-SR04测距经验

[复制链接]
csmyldl 发表于 2019-8-5 22:27 | 显示全部楼层 |阅读模式
   经过一天的调试,终于把STC15F2K60S2单片机测量超声波HC-SR04的程序搞定,主要存在问题是:
  1、单片机时钟设置为22.1184MHz,而且采取1T模式运行时,触发信号维持10us以上时间要采用延时函数 Delay_us(250)并一定达到10us以上。
  2、等待回声接收的引脚echo要开启接收,即echo=1;
  3、触发信号发出后不能马上开启计数器计数,一定要等到有回声信号时(echo被置为高)才开启,为了防止回声信号一直不出现,增加超时退出。
  4、测量时间(echo维持高电平时间)也增加超时退出,否则程序出现死机。
  5、禁止定时计数后要软件清除一次中断标志,因是检测到echo回声停止,此时不一定出现中断(默认中断清除)
  6、为保证测量精度,TH1TL1中的计数值要减去初值并除以22,因计数22次为1us。
具体子函数如下:
/*------------------------------------------------
     超声波模块触发信号
------------------------------------------------*/
void trigger()
{
    trig=0;
          NOP(21);                             //延时  
    trig=1;
    Delay_us(250);                       //至少10us高电平
          trig=0;
}


/*------------------------------------------------
      超声波模块距离测试函数
------------------------------------------------*/
void measuring()      //晶振22.1184MHz
{  
           uint Return_time;                   //超声波返回时间
    uint Wait_time;
          TL1 = 0x33;                                      //设置定时初值         2ms定时
          TH1 = 0x53;                                      //设置定时初值
          echo=1;                             //等待回声(开启输入)
          trig=1;                             //初始状态
          Ping_count=0;                       //时间计数初值
          trigger();                          //触发
          Wait_time=0;
          while ((!echo)&(Wait_time++<10000)); //触发后等待echo出现高电平或超时不出现高电平
    TR1 = 1;                            //启动定时计数器T1
          Wait_time=0;
    while((echo)&(Wait_time++<10000));  //等待echo=0或超时不出现低电平
    TR1 = 0;                             //停止计数
          TF1 = 0;                             //因不是响应中断停止,故软件清除
    Return_time = (TH1<< 8) + TL1;
    Return_time = (Return_time - 0x5333)/22;     //多计时us部分    计数22次为1us
    Return_time = 2000*Ping_count + Return_time; //计算总时间,单位是微秒
    distance = 34.0*Return_time/200;             //计算距离为mm:(34毫米*时间/200)
}

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

hzw854025403 发表于 2019-8-5 23:16 | 显示全部楼层
试试看,最近也在调试超声波,随便问一下楼主精度怎么样
回复

使用道具 举报

 楼主| csmyldl 发表于 2019-8-6 22:37 | 显示全部楼层
误差2mm
回复

使用道具 举报

小乐子 发表于 2019-11-8 20:34 | 显示全部楼层
楼主有没有具体的例程啊
回复

使用道具 举报

浪哥来咯 发表于 2019-12-20 22:14 来自手机 | 显示全部楼层
能具体讲讲怎么用keil调试的吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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