智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4214|回复: 19
打印 上一主题 下一主题

超声波测距程序

[复制链接]

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
跳转到指定楼层
1#
发表于 2014-11-3 21:05:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是一个用XDT512的超声波测距程序,用示波器却监测不到echo引脚的高电平...
请各路大神前来帮忙...


#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

float Distance;
float T_duration;
unsigned int T0,T1;

//============时钟初始化程序============//
void PLL_Init(void)                    //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{                                          //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  REFDV=1;                           //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));                 
  CLKSEL=0x80;                              
}


//============IO口初始化============//   
void IO_Init(void)   
{   
    DDRA=0x02;               // A1输出     
}   


//============延时函数=============//  
void DELAY(unsigned int loop_times)                 //延时10us程序
{
unsigned int loop_i,loop_j;
for(loop_i=0;loop_i<loop_times;loop_i++)
   {
    for(loop_j=0;loop_j<38;loop_j++)
    ;
    }
}


//===============PIT模块初始化==================//
void Pit_Init(void)
{
  PITCFLMT_PITE = 1;    //使能PIT模块
  PITCE = 0X00;               //通道0 PIT模块禁止
  PITINTE = 0x01;          //通道0中断使能
  PITMUX = 0x00;           //16位定时通道0使用0号8位微计数器
  PITMTLD0 =240-1;       //   8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即10us.
  PITLD0 =50000-1;          //16位定时器初值设定,即定时0.5s
  PITCE = 0X01;              //通道0 PIT模块使能
}


//==============触发信号发生程序==========//
void Chufa(void)
   {
     PORTA_PA1=1;         //PA1输出高电平
     DELAY(1);                 //延时10us
    PORTA_PA1=0;         //PA1输出低电平
   }  


#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 66 void PIT0(void)
   {
      PITTF_PTF0 = 1;
       Chufa();  
    }
    #pragma CODE_SEG DEFAULT

//============ECT初始化============//  
void ECT0_Init(void)
     {
      TSCR2=0x06;          //禁止溢出中断,分频系数64     周期 2.67us
      TIOS=0xfe;            //PT0为输入捕捉
      TCTL3=0x03;           //输入捕捉0上升沿和下降沿均有效               
      TIE_C0I=1;              //通道0输入捕捉中断允许
      ICSYS_TFMOD=1;    //中断标志设置方式,当锁存发生时触发中断
      ICSYS_BUFEN=1;
      ICSYS_LATQ=0;       //通道0处于队列工作方式
      ICOVW_NOVW0=0;     //允许覆盖寄存器
      TFLG1=0xff;             //清除各IC/OC中断标志位
      TFLG2=0xff;            //清除自由定时器中断标志位
      TSCR1=0x80;           //使能定时器
      }

/*************************************************************/
/*                   输入捕捉中断函数                        */
/*************************************************************/
  
interrupt VectorNumber_Vtimch0 void  T0_CAPTURE(void)
    {           
    if(TFLG1_C0F==1)
    TFLG1_C0F=1;

    T0=TC0H;
    T1=TC0;

    if(T1>T0)
    {
        T_duration=T1-T0;
        Distance=T_duration*2.67*0.017;   // 距离cm        
    }
    else
    {
         T_duration=65535+T1-T0;
         Distance=T_duration*2.67*0.017;   // 距离cm
    }

    TC0H=0x0000;
    TC0=0x0000;   //清除通道0的寄存器和保持寄存器

  }
                 
   //=======================主函数============================//
   void main(void)
   {
   DisableInterrupts;
    PLL_Init();         //设置锁相环
    Pit_Init();   
    IO_Init();
    ECT0_Init();
    EnableInterrupts;   

     for(;;)
     {

     }
   }





补充内容 (2014-11-6 16:01):
TCTL4=0x03;              //输入捕捉0上升沿和下降沿均有效
ICOVW_NOVW0=1;     //不允许覆盖寄存器
回复

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
2#
 楼主| 发表于 2014-11-3 21:06:45 | 只看该作者
烦请各位看看程序哪里不对,请不吝赐教...
{:2_36:}
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
3#
 楼主| 发表于 2014-11-4 08:36:25 | 只看该作者
Help
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
4#
 楼主| 发表于 2014-11-5 15:09:52 | 只看该作者
:'(自顶,不能沉呐...
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
5#
 楼主| 发表于 2014-11-6 15:56:32 | 只看该作者
:'(:'(
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
6#
 楼主| 发表于 2014-11-12 10:17:01 | 只看该作者
:victory::victory:程序证实是可用的,使用时注意将"补充内容"的代码替换原文中代码...
回复 支持 反对

使用道具 举报

3

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
661
威望
325
贡献
204
兑换币
207
注册时间
2015-1-21
在线时间
66 小时
毕业学校
陕西科技大学
7#
发表于 2015-4-3 11:52:48 | 只看该作者
这个程序可用吗?
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
8#
 楼主| 发表于 2015-4-7 09:20:05 | 只看该作者
西安小姑娘 发表于 2015-4-3 11:52
这个程序可用吗?

嗯,可以的
回复 支持 反对

使用道具 举报

3

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
661
威望
325
贡献
204
兑换币
207
注册时间
2015-1-21
在线时间
66 小时
毕业学校
陕西科技大学
9#
发表于 2015-4-7 12:11:44 | 只看该作者
Mr.不弃 发表于 2015-4-7 09:20
嗯,可以的

最后还是没用输入捕捉,老是捕捉不到,最后用了普通IO~~:Q
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2624
威望
1359
贡献
901
兑换币
895
注册时间
2014-9-11
在线时间
182 小时
10#
 楼主| 发表于 2015-4-8 10:37:41 | 只看该作者
西安小姑娘 发表于 2015-4-7 12:11
最后还是没用输入捕捉,老是捕捉不到,最后用了普通IO~~

补充内容 (2014-11-6 16:01):
TCTL4=0x03;              //输入捕捉0上升沿和下降沿均有效
ICOVW_NOVW0=1;     //不允许覆盖寄存器
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 14:28 , Processed in 0.065079 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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