|
430 F5529 双按键中断只能触发一个中断的求助!!!!!
[复制链接]
1芯积分
初学MSP430,写了个程序想控制5529上的两个独立按键S1和S2分别对应Port1和Port2的中断来实现按键次数计数,但是现在程序跑出来只有中断Port1能进入中断,请各位大神帮忙看下问题,小弟感激不尽~~
程序如下:
#include
void delay_Nms(unsigned int n)
{
volatile int a=0;
unsigned int i;
unsigned int j;
for(i = n;i > 0;i--)
for(j = 100;j > 0;j--)
_NOP();
}
extern volatile int a=0;
extern volatile int b=0;
void main()
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P2DIR =0x00;
P2IFG=0x00;
P4DIR |= BIT7;
P2REN |= BIT1;
P2IE = 0x02;
P2IES = 0x02;
P2IN = BIT1;
P1DIR &= ~BIT1;
P1DIR |= BIT0; // 设置P1.1 为输入,P1.0为输出
P1REN |= BIT1;//打开上拉,触发边沿是从高电平到低电平
P1IE = 0x02; // 设置P1.1 可以中断
P1IES = 0x02; // 设置P1.1 为下降沿中断
P1IFG=0;
_EINT();
_BIS_SR(LPM0_bits + GIE); // 进入低功耗睡眠,打开总总断开关
}
unsigned char p1keyj(void) // 判键子程序
{
unsigned char x;
x=(P1IN&0X02); // P1.1 接有按键
return(x); // 有按键返回非全 0
}
unsigned char p2keyj(void) // 判键子程序
{
unsigned char y;
y=(P2IN&0X02); // P2.1 接有按键
return(y); // 有按键返回非全 0
}
#pragma vector=PORT1_VECTOR //中断服务程序:
__interrupt void p1int(void)
{
P1OUT ^=BIT0;
while(p1keyj());
delay_Nms(2);
P1IFG=0x00;
a++;
}
#pragma vector=PORT2_VECTOR //中断服务程序:
__interrupt void p2int(void)
{
P4OUT ^=BIT7;
while(p2keyj());
delay_Nms(2);
P2IFG=0x00;
b++;
}
上拉电阻之类的都设置了,个人感觉端口初始化没问题,可能是vector=PORT2_VECTOR 的问题,因为vector=PORT1_VECTOR能触发P1.1的中断,但是同样就不能触发P2.1的中断,求各位大神指点,谢过~~
|
|