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

发布者:huijiazi5210最新更新时间:2019-11-09 来源: 51hei关键字:STC15F2K60S2  单片机调  试超声波  HC-SR04测距 手机看文章 扫描二维码
随时随地手机看文章

经过一天的调试,终于把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)
}

关键字:STC15F2K60S2  单片机调  试超声波  HC-SR04测距 引用地址:STC15F2K60S2单片机调试超声波HC-SR04测距经验

上一篇:单片机点阵时钟原理图和源码
下一篇:51单片机数字温度计+灯光报警的proteus仿真+注释详细的源码

推荐阅读最新更新时间:2024-11-05 15:36

STC15F2K60S2串口1程序
此程序为才写的串口1,工作模式1程序,自己测试没问题 //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译 //假定测试芯片的工作频率为18.432MHz #include reg51.h sfr P4 = 0xc0; sfr P5 = 0xc8; sfr AUXR = 0x8e ; unsigned char temp ; bit flag = 0 ; void UartInit(void) //9600bps@11.0592MHz { SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &=
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved