/*采用2*3键盘中的key0来实现键盘引起的中断程序,以此来验证中断*/ #include<msp430x54x.h>
void sys_init() //初始化 { P1DIR &=0XFE; //p1.0为输入 P1OUT |=BIT0; //p1.0输出高电平 P1REN |=BIT0; //p1.0带上拉电阻 P1IES =BIT0; //p1.0中断触发为下降沿 P1IE =0X01; //p1.0的中断允许打开 P1IFG &=~0X01; //p1.0中断标志位清零 P2DIR |=0X01; //p2.0为输出 P2OUT=0X00; //p2输出低电平 } //延时程序 void delay(unsigned int j){ unsigned int i; for(i=2;i>0;i--){ for(;j>0;j--) __no_operation();} }
//主程序 void main() { WDTCTL=WDTPW+WDTHOLD;//关闭看门狗 sys_init(); //调用初始化函数 _EINT(); while(1); } //中断 #pragma vector=PORT1_VECTOR __interrupt void port1_down(void) { if((P1IFG&BIT0)==BIT0) // { //处理P1IN.0中断 P1IE=0X00; P1IFG &= ~BIT0; //清除中断标志 P2OUT=0X01; //p2.0输出高电平 delay(10); for(;;){ if((P1OUT&0X0F)==0X0F) break; } P2OUT=0X00; P1OUT |=0X01; P1IE =0X01; }
}
仿真的结果是全速运行时不行,单步调试时p1iv能跳变为02h,p1ifg.0之谓1,可就是跳不进中断处理程序。望有大神能知道知道,或许程序问题,或者是仿真调试问题。。。。大家多多发表意见吧!!!
|