发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[应用方案]

N76E003 超声波测距

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

#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;//得到距离
    }
}


使用特权

评论回复

打赏榜单

linoox 打赏了 5.00 元 2019-11-06
理由:正在用n76e003做超声波测距,我对这个芯片不熟,遇到了一些问题,能加您的qq咨询一下吗,我的qq是1279141018 黎工。非常感谢

评论
捉虫天师 2019-11-6 22:51 回复TA
@linoox :遇到了啥技术难题 
21mengnan 2019-11-6 19:37 回复TA
@linoox :这程序很难理解吗?就是让发射管发射信号时候开始定时器计时,然后收到回波信号触发外部中断,在中断读出来时间,这个时间是声波一来一回的时间,T*V=2S;V=340m/S所以S=t*170m/s 如果这里时间单位不是S,而是ms,那么就是S=t*0.17 
沙发
21mengnan|  楼主 | 2019-6-11 22:55 | 只看该作者
跟尺子出来的数据差不多

使用特权

评论回复
板凳
21mengnan|  楼主 | 2019-6-11 22:56 | 只看该作者
觉得直接使用N76E003单片机自带的输入捕获功能就可实现对超声波模块信号宽度测量,但是测出来的数据误差很大,明明原理跟外部中断差不多的呀,还发现用3.3V驱动模块,用逻辑分析仪可以得到比较好的波形,但是单片机读取的数据就是不对,还是用5V供电才能得到一个相对准确的数据

使用特权

评论回复
地板
21mengnan|  楼主 | 2019-11-6 19:38 | 只看该作者
这个例子使用了定时器,外部中断,所以还是非常简单的,官方提供的BSP已经充分介绍了这两个功能的用法,这是基本的功能了。这个超声波测距的理论很简单,就是发射声波时候开始计时,然后接收到声波的回波后触发中断读取计时数据。然后根据声波在空气中的速度算出来距离。

使用特权

评论回复
5
21mengnan|  楼主 | 2019-11-6 19:39 | 只看该作者
我觉得这个没必要再多讲了吧,哈哈。

使用特权

评论回复
6
dongliushui| | 2019-11-6 20:05 | 只看该作者
那意思这个需要修改一下。

使用特权

评论回复
7
dongliushui| | 2019-11-6 20:06 | 只看该作者
#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;

使用特权

评论回复
8
dongliushui| | 2019-11-6 20:07 | 只看该作者
谁有板子,试试怎么搞精度比较靠谱。比较准。

使用特权

评论回复
9
捉虫天师| | 2019-11-6 22:51 | 只看该作者
不知道上面那位打赏的朋友是遇到了什么难题啊。应该以回帖形式提问,这样大家可以方便回复啊。

使用特权

评论回复
10
小明的同学| | 2019-11-6 23:24 | 只看该作者
资料不错,看看。

使用特权

评论回复
11
天灵灵地灵灵| | 2019-11-7 00:02 | 只看该作者
看来不错,有打赏。

使用特权

评论回复
12
yiyigirl2014| | 2019-11-7 19:35 | 只看该作者
多谢各位大佬分享。

使用特权

评论回复
13
dongliushui| | 2019-11-7 22:13 | 只看该作者
这个资料非常不错。我也借此巩固了知识。

使用特权

评论回复
14
小灵通2018| | 2019-11-7 23:27 | 只看该作者
之前没研究过,看起来很容易理解。

使用特权

评论回复
15
shuihe112| | 2019-11-8 11:05 | 只看该作者
以前没研究,学习一下。

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

906

帖子

1

粉丝