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

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测距 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479499.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC15F2K60S2设置内部时钟工作频率
STC15F2K60S2系列单片机有两个时钟源,一个是内部高精度R/C时钟,另一个是外部时钟(外部输入的时钟或者外部晶体振荡产生的时钟)。STC15F2K60S2的内部集成高精度R/C时钟,+/-1%温漂,常温下温漂5%,5MHz~35MHz宽范围可设置,可彻底省去昂贵晶振电路和外部复位电路。设置单片机内部高精度R/C时钟,在程序中包含下面代码。#define FOSC                11059200L                   
发表于 2019-05-22
STC15F2K60S2设置内部时钟工作频率
STC15F2K60S2芯片A/D转换器的应用
A/D转换中断,EADC = 0,禁止A/D转换中断。2.6.中断优先级控制寄存器IPIP:中断优先级控制寄存器(可位寻址)SFR nameAdessBitB7B6B5B4B3B2B1B0IPB8HNamePPCAPLVDPADCPSPT1PX1PT0PX0PADC:A/D转换中断优先级控制位。当PADC = 0时,A/D转换中断为最低优先级中断(优先级0)当PADC = 1时,A/D转换中断为最高优先级中断(优先级1)3.A/D转换器的结构 4.程序/****************************************************///利用STC12C5A60S2AD转换,实现温度计//函数
发表于 2018-06-21
STC15F2K60S2芯片A/D转换器的应用
STC15F2K60S2芯片PWM的应用
1.目的脉宽调制(PWM,Pulse Width Modulation)是一种使用程序来控制波形占空比、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。STC15系列单片机的PCA模块可以通过设定各自的寄存器PCA_PWMn(n=0,1,2.下同)中的位EBSn_1/PCA_PWMn.7及EBSn_0/PCA_PWMn.6,使其工作于8位PWM或7位PWM或6位PWM模式。2.与CCP/PWM/PCA应用有关的特殊功能寄存器符号描述位地址及其符号复位值地址B7B6B5B4B3B2B1B0CCONPCA Control RegisterD8HCFCR---CCF2CCF1CCF000xxxx00CMODPCA
发表于 2018-06-20
STC15F2K60S2芯片PWM的应用
STC15F2K60S2芯片A/D转换器的应用
A/D转换中断,EADC = 0,禁止A/D转换中断。2.6.中断优先级控制寄存器IPIP:中断优先级控制寄存器(可位寻址)SFR nameAdessBitB7B6B5B4B3B2B1B0IPB8HNamePPCAPLVDPADCPSPT1PX1PT0PX0PADC:A/D转换中断优先级控制位。当PADC = 0时,A/D转换中断为最低优先级中断(优先级0)当PADC = 1时,A/D转换中断为最高优先级中断(优先级1)3.A/D转换器的结构 4.程序/****************************************************///利用STC12C5A60S2AD转换,实现温度计//函数
发表于 2018-06-20
STC15F2K60S2芯片A/D转换器的应用
STC15F2K60S2内E2PROM应用
区要分开来,以使程序不会遭到破坏。这样就节省了片外资源,使用起来也更加方便。下面就详细介绍STC 单片机内置EEPROM 及其使用方法2.STC15F2K60S2系列单片机的内部结构图STC15F2K60S2系列单片机的内部结构框图如下图所示,STC15F2K60S2系列单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、IO口、高速A/D转换、看门狗、UART高速异步串行通信口1/串行通信口2,CCP/PWM/PCA,一组高速同步串行端口SPI,片内高精度R/C时钟及高可靠复位等模块,STC15F2K60S2系列单片机几乎包含了数据采集和控制中的所有单元模块。  
发表于 2018-06-20
STC15F2K60S2内E2PROM应用
利用51单片机按键设置ztw电调
============================================================================ */ // // Update to MPU6050 by shinetop // MCU: STC89C52 // 2012.3.1 // 功能: 显示加速度计和陀螺仪的10位原始数据 // // GY-52 MPU3050 IIC测试程序 // 使用单片机STC89C51 // 晶振:11.0592M // 显示:LCD1602 // 编译环境 Keil uVision2 // 参考宏晶网站24c04通信程序 // 时间:2011年9月1日 // QQ:531389319 // #include <REG52.H> #include <math.h> //Keil
发表于 2016-06-13
小广播
何立民专栏 单片机及嵌入式宝典

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

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