新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430F5529的IO口管腳的中斷學習筆記

MSP430F5529的IO口管腳的中斷學習筆記

作者: 時間:2016-11-09 來源:網(wǎng)絡 收藏
非常簡單的一個程序,在F5529的開發(fā)板上用按鍵的IO中斷控制LED的亮滅:
#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.htm

2. 標志位需要手動清零 (此處不完全正確,還有問題需要考慮)

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)先級的教訓。




評論


技術專區(qū)

關閉