前一段时间想过msp430的io口中断的问题
例如p1的8个io口进中断的话写的都是一个中断矢量那么 如果同时想用多个io口的话就会 造成混乱 因为他们进去的都是一个中断函数;
最后终于想出来了他们进的虽然是一个中断函数 但是他们的中断标志位是不同的 分布于P1IFG的不同的位 所以在函数里面再进行判断就行了
下面是我让p1至p4在接受到高电平后进入中断的一个历程
#include"msp430g2553.h"
#define uint unsigned int
uint chh=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1OUT&=~BIT0; // io初始化
P1DIR &= ~BIT3;
P1DIR &= ~BIT1;
P1DIR &= ~BIT2;
P1DIR &= ~BIT4;
P1IE |= BIT3+BIT1+BIT2+BIT4;
P1IES |= BIT3+BIT1+BIT2+BIT4;
P1REN |= BIT3+BIT1+BIT2+BIT4;
P1IFG &= ~BIT3;
P1IFG &= ~BIT1;
P1IFG &= ~BIT2;
P1IFG &= ~BIT4;
_EINT(); //打开全局中断
while(1)
{
if(chh==4)
{
chh=0;
}
}
}
#pragma vector=PORT1_VECTOR //中断函数
__interrupt void Port_1(void)
{
switch(P1IFG)
{
case 2: P1OUT=BIT0;
chh=chh+1;
break;
case 4 : P1OUT&=~BIT0;
chh=chh+1;
break;
case 8 : P1OUT=BIT0;
chh=chh+1;
break;
case 16 : P1OUT&=~BIT0;
chh=chh+1;
break;
}
其实就是通过switch函数对P1IFG的值进行判断 并及时清零P1IFG就可以了
以上就是我的一些想法 希望对某些人能有些启发