打印
[应用方案]

N76E003 超声波测距

[复制链接]
847|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

#define uint unsigned int
#define uchar unsigned  char
#define NOP() {_nop_();_nop_();_nop_();_nop_();}


sbit Trig=P0^5;//测距触发引脚
long int temp,t;
int i=0;

/************************************************************************************************************
* 外部中断0服务程序
************************************************************************************************************/
void int0() interrupt 0
{
    t=(TH0*256+TL0);//计算高电平持续的时间,上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时
    TH0=0;
    TL0=0;
}

void main (void)
{
        Set_All_GPIO_Quasi_Mode;
        P00_Input_Mode;//将P00设置为输入模式
        P00 = 1;
        Trig=0;//为低电平
        TMOD=0x19;
        TR0=1;//启动定时器0
        EX0=1;//使能部中断0
        IT0=1;//外部中断0下降沿触发
        set_EA;//开启总中断
    while(1)
    {
            Trig=1;
            NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
            Trig=0;
            temp=t*0.17;//得到距离
    }
}
跟尺子出来的数据差不多


疑惑与不解:回顾下以前的博文,觉得直接使用N76E003单片机自带的输入捕获功能就可实现对超声波模块信号宽度测量,但是测出来的数据误差很大,明明原理跟外部中断差不多的呀,还发现用3.3V驱动模块,用逻辑分析仪可以得到比较好的波形,但是单片机读取的数据就是不对,还是用5V供电才能得到一个相对准确的数据。


使用特权

评论回复
沙发
LcwSwust| | 2020-9-8 13:15 | 只看该作者
外部中断0里未关闭定时器

使用特权

评论回复
板凳
wangshujun| | 2020-9-24 14:22 | 只看该作者
hc04一类的超声波模块吧,这类模块在3.3供电时效果差了很多的,首先确保模块稳定可靠
76e003有一个定时器有捕获功能,可以考虑用这个功能的2个输入分别实现实现tig和echo的下降沿捕获,这样就没有进中断等操作的误差了
不过实际上这类超声波模块,内部是一个频率很低的低端mcu实现的本身精度就有限,追求很高的捕获精度也没多大意义
另外76e003的内部rc精度也有限,用于精确计时也差点意思,外加有源晶振就太贵了,划不来

使用特权

评论回复
地板
keaibukelian| | 2020-10-9 16:38 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
labasi| | 2020-10-9 16:50 | 只看该作者
精度能达到多少呀

使用特权

评论回复
6
paotangsan| | 2020-10-9 16:52 | 只看该作者
代码很详细

使用特权

评论回复
7
renzheshengui| | 2020-10-9 16:53 | 只看该作者
楼主辛苦啦

使用特权

评论回复
8
wakayi| | 2020-10-9 16:54 | 只看该作者
传感器用的什么呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

681

主题

1534

帖子

7

粉丝