常驻嘉宾
我爱雯婕
- 积分
- 4657
- 威望
- 2223
- 贡献
- 1682
- 兑换币
- 4
- 注册时间
- 2009-3-4
- 在线时间
- 376 小时
|
/*程序的目的是利用输入捕捉0通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后读取捕捉后的计数值,并用B口的LED指示中断成功,接线方面我采取的是PA6与PT0连接。编译可以通过可是连接的时候有错误“Fixup overflow in _Vector_8, to ic0_int type 1, at offset 0x0”,本人不知道什么原因,望高手赐教,能在我迷茫中给及希望感谢啊!*/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128"
unsigned int ic_first,ic_second,dic;/*声明变量*/
void Set_Pll(void);
void Ic_Init(void);
void main(void)
{
unsigned int i;
/* put your own code here */
Set_Pll(); /*设置锁相环*/
Ic_Init(); /*IC初始化*/
EnableInterrupts;
DDRA=0XFF; /*设置A为输出*/
PORTA=0X00; /*初始化为低电平*/
DDRB=0XFF; /*设置B为输出*/
PORTB=0XFF; /*初始化为高电平*/
for(;;)
{
for(i=0;i<6000;i++)
{
PORTA_BIT6=1; /*循环中设置为高电平*/
}
for(i=0;i<6000;i++)
{
PORTA_BIT6=0; /*循环中设置为低电平,产生一个方波*/
}
_FEED_COP(); /* feeds the dog,看门狗,不用理它 */
} /* loop forever */
/* please make sure that you never leave main */
}
/*设置锁相环,总线频率为24MHz*/
void Set_Pll(void)
{
CLKSEL=0X00;
PLLCTL=0XE1;
SYNR=2;
REFDV=1;
PLLCTL=0X60;
asm NOP;
asm NOP;
asm NOP;
while(!(CRGFLG&0X08));
CLKSEL=0X80;
}
/*IC初始化*/
void Ic_Init(void)
{
TSCR1=0X90; /*主定时器使能*/
TSCR2=0X07; /*Prescaler Factor=128*/
ICSYS=0X02; /*IC缓冲使能*/
TIOS=0; /*通道设置为输入捕捉*/
TCTL4=0XFF; /*采用上升、下降沿触发*/
TIE=0X00000001;/*通道0开中断*/
}
#pragma CODE_SEG NON_BANDKED
void interrupt 8 ic0_int (void)
{
TFLG1_C0F=1;/*中断标志清除*/
ic_second=TC0; /*通过读TC0寄存器来响应中断*/
dic=ic_second-ic_first; /*得到脉冲宽度*/
ic_first=ic_second;
PORTB++;/*用LED来指示已经进入中断*/
} |
|