MSP430F5529的IO口管腳的中斷學(xué)習(xí)筆記
#include
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0; //將LED1對(duì)應(yīng)的IO口P1.0設(shè)置為輸出
P1OUT &= ~BIT0; //初始化該燈設(shè)置為滅
P1DIR &= ~BIT7; //將按鍵1對(duì)應(yīng)的IO口P1.7設(shè)置為輸入
P1IFG &= ~BIT7; //初始化清空中斷標(biāo)志位
P1IE |= BIT7; //P1.7中斷使能
P1IES |= BIT7; //下降沿產(chǎn)生中斷
P1OUT |= BIT7; //P1.7設(shè)置為上拉電阻: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ùn)算的優(yōu)先級(jí)!??!非常重要
P1OUT ^= BIT0;
break;
default:
break;
}
}
經(jīng)驗(yàn)總結(jié):
1.按鍵需要延時(shí)消抖
本文引用地址:http://butianyuan.cn/article/201611/317589.htm2. 標(biāo)志位需要手動(dòng)清零 (此處不完全正確,還有問題需要考慮)
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ùn)算的優(yōu)先級(jí)很低,注意加括號(hào)
6. 按鍵的上拉電阻,OUT、REN、IES
一上午終于把IO中斷弄懂了。吸取位運(yùn)算優(yōu)先級(jí)的教訓(xùn)。
評(píng)論