/*采用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,可就是跳不进中断处理程序。望有大神能知道知道,或许程序问题,或者是仿真调试问题。。。。大家多多发表意见吧!!!