智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2555|回复: 8
打印 上一主题 下一主题

超声波代码 distance为啥是实际距离的两倍??

[复制链接]

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
跳转到指定楼层
#
发表于 2014-4-13 11:04:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
2贡献

#include "common.h"
#include "include.h"
#define  Trig   PTA27  //超声波输入(触发)
#define  Echo   PTD6  //超声波接收

#define  led1  PTB20_OUT//野火自带的led灯


void PORTD_IRQHandler(void);        //PORTD端口中断服务函数
void PIT0_IRQHandler(void);
uint8  m=0;
uint32  t=0;
uint8  f=0;
uint32 time=0;
uint32 time_rising=0;

void HC_SR04_Send(void)
{

gpio_set(Trig, 1);
DELAY_US(20);
gpio_set(Trig, 0);

//printf("\n Trig\n");
}

//float  distance=0;
uint32 distance=0;


void main()
{
   // printf("\n*****csb测试*****\n");
    gpio_init (Trig, GPO,0);
    DELAY_US(2);

   pit_init_us(PIT0, 100);                          //定时 1000 个bus时钟 后中断  100us
   set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler);   // 设置中断复位函数到中断向量表里
   // enable_irq(PIT1_IRQn);                       //IRQ_RISING   IRQ_FALLING  IRQ_EITHER
    port_init(Echo, ALT1 | IRQ_EITHER | PULLUP );          //初始化 PTD7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
    set_vector_handler(PORTD_VECTORn ,PORTD_IRQHandler);    //设置PORTE的中断复位函数为 PORTE_IRQHandler
    enable_irq (PORTD_IRQn);                                //使能PORTE中断
     //HC_SR04_Send();
     //DELAY_MS(50);
    while(1)
    {
        HC_SR04_Send();

        DELAY_MS(500);

    }
}


void PORTD_IRQHandler(void)
{


    uint8  n = 0;    //引脚号
    n = 6;
    m++;
    if(PORTD_ISFR & (1 << n))           //PTD7 触发中断
    {
        PORTD_ISFR  = (1 << n);        //写1清中断标志位

        /*  以下为用户任务  */

      //  printf("\n按下按键\n");
       // key_handler();
         if(m==1)
          {
            t=0;
         // pit_init_ms(PIT1, 10);                          //定时 1000 个bus时钟 后中断
         // set_vector_handler(PIT1_VECTORn,PIT1_IRQHandler);   // 设置中断复位函数到中断向量表里
          enable_irq(PIT0_IRQn);                         // 使能LPTMR

          // pit_time_start  (PIT0);                 //开始计时  
          // printf("\ntime_start\n");  


          }
         if((m==2)||(t>=348))
          {
           disable_irq(PIT0_IRQn);
           if(t>=348)
             t=348;
           //time_rising= pit_time_get(PIT1);        //获取 PITn计时时间
          //time_rising= pit_time_get_us (PIT1);        //获取 PITn计时时间
          // pit_time_close (PIT1);
           //time= 100*t;
         // printf("\n time为:%d us\n",time);  
         //  f=t;
           // distance=(17*t)/2;
           distance=17*t;//(340*t*100us)/2=17*t 为啥是实际距离的两倍?????
           printf("\n distance为:%d mm\n",distance);    //打印延时时间
         //  t=0;
           m=0;
           //disable_irq(PIT1_IRQn);

          }  
        /*  以上为用户任务  */
    }

}

void PIT0_IRQHandler(void)
{

    t++;
    PIT_Flag_Clear(PIT0);       //清中断标志位
}

回复

使用道具 举报

5

主题

57

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1275
威望
648
贡献
355
兑换币
426
注册时间
2014-1-17
在线时间
136 小时
毕业学校
重庆机电职业技术学院
8#
发表于 2014-4-16 10:47:09 | 只看该作者
能不能把你的工程文件发我一份,我也认为你在距离计算了以后马上把t清零,我觉得你自己写了一部分底层驱动函数,用的是野火的库。823638601@qq.com
回复

使用道具 举报

83

主题

584

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4042
威望
2998
贡献
12
兑换币
1807
注册时间
2013-9-2
在线时间
516 小时
7#
发表于 2014-4-14 18:26:15 | 只看该作者
t没清零嘛
回复

使用道具 举报

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
6#
 楼主| 发表于 2014-4-13 21:39:41 | 只看该作者
warn00 发表于 2014-4-13 11:54
超声波发送再接收,一个来回

可是我除以2了哈
回复

使用道具 举报

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
5#
 楼主| 发表于 2014-4-13 21:38:42 | 只看该作者
BMN李 发表于 2014-4-13 15:21
往返就是两倍了嘛

可是我除以2了哈
回复

使用道具 举报

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
4#
 楼主| 发表于 2014-4-13 21:37:50 | 只看该作者
BMN李 发表于 2014-4-13 15:29
正好我也在写超声波,你这程序有问题吧。
port_init(Echo, ALT1 | IRQ_EITHER | PULLUP );          //初始 ...

跳变
回复

使用道具 举报

83

主题

584

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4042
威望
2998
贡献
12
兑换币
1807
注册时间
2013-9-2
在线时间
516 小时
3#
发表于 2014-4-13 15:29:41 | 只看该作者
正好我也在写超声波,你这程序有问题吧。
port_init(Echo, ALT1 | IRQ_EITHER | PULLUP );          //初始化 PTD7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
下降沿触发中断??
回复

使用道具 举报

83

主题

584

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4042
威望
2998
贡献
12
兑换币
1807
注册时间
2013-9-2
在线时间
516 小时
2#
发表于 2014-4-13 15:21:11 | 只看该作者
往返就是两倍了嘛
回复

使用道具 举报

1

主题

199

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4422
威望
2037
贡献
1315
兑换币
1099
注册时间
2012-10-30
在线时间
535 小时
1#
发表于 2014-4-13 11:54:47 | 只看该作者
超声波发送再接收,一个来回
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 13:29 , Processed in 0.105999 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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