用CodeWarrior调试,使用的P&E (USB MON08 Multilink Rev.D)工具,在仿真界面下,主程序仿真正确(把口线简单的拉低或拉高,测试口线电压);但一直无法进入中断,提示如下: Error:At location FFDE_ Error:Attempt to use invalid or uninitialized memory Error:interrupt processing failed. 程序: include <hidef.h> /* for EnableInterrupts macro */ #include <MC68HC908LJ12.h> /* include peripheral declarations */ void delay2(int num); uchar key_set,key_up,key_down; void main(void) { CONFIG1 = 0x09; //CONFIG2 = 0x10;
//键盘输入设置及中断 DDRD = 0x8F; //PTD4,5,6作为输入,0,1,2,3,7输出 PTD &= 0x70; //PTD低四位输出初始值为0 KBSCR_MODEK = 1; //选择触发方式为下降沿和低电平 //Initialize KeyBoard(to prevent a false interrupt) KBSCR_IMASKK = 1; KBIER = 0x70; KBSCR_ACKK = 1; KBSCR_IMASKK = 0;
EnableInterrupts; /* enable interrupts */ //参数初始 key_set=0;key_up=0;key_down=0;
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: for(;;) { __RESET_WATCHDOG(); /* feeds the dog */
delay2(100); } } interrupt void KBI_ISR(void) { KBSCR_IMASKK = 1; //屏蔽键盘中断
if(PTD_PTD4==0) //在中断服务程序中查询是由哪一个口引起的中断 { PTD=0; key_set=1;key_up=0;key_down=0; } if(PTD_PTD5==0) { PTD=0; key_set=0;key_up=1;key_down=0; } if(PTD_PTD6==0) { PTD=0; key_set=0;key_up=0;key_down=1; }
KBSCR_ACKK = 1; //清除中断确认,避免误中断 KBSCR_IMASKK = 0; //不屏蔽键盘中断 } void delay2(int num) { int delay_i,delay_j;
for(delay_i=0;delay_i<num;delay_i++) for(delay_j=0;delay_j<num;delay_j++); } 另外,在P&E_FCS_linker.prm中,添加了: VECTOR 15 KBI_ISR 还有,好象其它中断,譬如定时器中断也不行,求老大们知道。 |