高级会员
- 积分
- 669
- 威望
- 419
- 贡献
- 192
- 兑换币
- 0
- 注册时间
- 2010-11-20
- 在线时间
- 29 小时
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
float Distance;
unsigned int n, shicha,cn0,cn1 ;
//-----时钟初始化程序--------//
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,1 PIT模块禁止
PITINTE = 0x03; //通道0,1中断使能
PITMUX = 0x00; //16位定时通道0使用0号8位微计数器,16位定时器1使用1号微计数器
PITMTLD0 =120-1; //8位定时器初值设定。120分频,在24MHzBusClock下,为0.2MHz。即5us.
PITLD0 =4000-1; //16位定时器初值设定,即定时20ms
PITCE = 0X01; //通道0,1 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();
}
void ECT0_Init(void)
{
TSCR2=0x06; //禁止溢出中断,分频系数64 周期 2.67us
TIOS=0x00; //PT7为输入捕捉
TCTL3=0xc0; //输入捕捉7上升沿和下降沿均有效
TIE_C7I=1; //通道7输入捕捉中断允许
TSCR1=0x80; //使能定时器
}
void interrupt 15 Timer0_Onput(void)
{
TFLG1_C7F=1;
if(!(n%2)==0)
{
cn0=TCNT;
}
else if(n%2==0)
{
cn1=TCNT;
if(cn1>cn0)
{
shicha=cn1-cn0;
}
else if(cn1<cn0)
{
shicha=cn1+65535-cn0;
Distance=shicha*2.67*0.017; //单位cm
}
}
}
//=======================主函数================================//
void main(void)
{
PLL_Init(); //设置锁相环
Pit_Init();
IO_Init();
ECT0_Init();
EnableInterrupts;
for(;;)
{
}
} |
|