MSP430F5529的IO口管腳的中斷學習筆記
#include
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0; //將LED1對應的IO口P1.0設置為輸出
P1OUT &= ~BIT0; //初始化該燈設置為滅
P1DIR &= ~BIT7; //將按鍵1對應的IO口P1.7設置為輸入
P1IFG &= ~BIT7; //初始化清空中斷標志位
P1IE |= BIT7; //P1.7中斷使能
P1IES |= BIT7; //下降沿產(chǎn)生中斷
P1OUT |= BIT7; //P1.7設置為上拉電阻:OUT = 1; REN = 1;
P1REN |= BIT7;
__enable_interrupt();
while(1);
}
#pragma vector = PORT1_VECTOR //固定格式,聲明中斷向量地址,不能變
__interrupt void LED(void) //函數(shù)名,可以任意定義
{
int i;
switch(__even_in_range(P1IV,18))
{
case 0x10:
for (i = 0; i < 12000; i++);
if ((P1IN & BIT7) == 0) //注意位運算的優(yōu)先級?。?!非常重要
P1OUT ^= BIT0;
break;
default:
break;
}
}
經(jīng)驗總結(jié):
1.按鍵需要延時消抖
本文引用地址:http://m.butianyuan.cn/article/201611/317589.htm2. 標志位需要手動清零 (此處不完全正確,還有問題需要考慮)
3. 中斷程序格式:
#pragma vector = PORT2_VECTOR //固定格式,聲明中斷向量地址,不能變
__interrupt void fuck430(void) //函數(shù)名,可以任意定義
{
switch(__even_in_range(P2IV,18))
{
case 0x06:
…
break;
default:
break;
}
}
4. 主程序中要開總中斷,然后有循環(huán)
5. 位運算的優(yōu)先級很低,注意加括號
6. 按鍵的上拉電阻,OUT、REN、IES
一上午終于把IO中斷弄懂了。吸取位運算優(yōu)先級的教訓。
評論