金牌会员
- 积分
- 2624
- 威望
- 1359
- 贡献
- 901
- 兑换币
- 895
- 注册时间
- 2014-9-11
- 在线时间
- 182 小时
|
下面是一个用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; //不允许覆盖寄存器 |
|