新聞中心

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

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

        作者: 時間:2016-11-09 來源:網絡 收藏
        非常簡單的一個程序,在F5529的開發板上用按鍵的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; //下降沿產生中斷
        P1OUT |= BIT7; //P1.7設置為上拉電阻:OUT = 1; REN = 1;
        P1REN |= BIT7;
        __enable_interrupt();
        while(1);
        }
        #pragma vector = PORT1_VECTOR //固定格式,聲明中斷向量地址,不能變
        __interrupt void LED(void) //函數名,可以任意定義
        {
        int i;
        switch(__even_in_range(P1IV,18))
        {
        case 0x10:
        for (i = 0; i < 12000; i++);
        if ((P1IN & BIT7) == 0) //注意位運算的優先級!!!非常重要
        P1OUT ^= BIT0;
        break;
        default:
        break;
        }
        }
        經驗總結:

        1.按鍵需要延時消抖

        本文引用地址:http://www.104case.com/article/201611/317589.htm

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

        3. 中斷程序格式:

        #pragma vector = PORT2_VECTOR //固定格式,聲明中斷向量地址,不能變

        __interrupt void fuck430(void) //函數名,可以任意定義

        {

        switch(__even_in_range(P2IV,18))

        {

        case 0x06:

        break;

        default:

        break;

        }

        }

        4. 主程序中要開總中斷,然后有循環

        5. 位運算的優先級很低,注意加括號

        6. 按鍵的上拉電阻,OUT、REN、IES

        一上午終于把IO中斷弄懂了。吸取位運算優先級的教訓。




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴化市| 龙海市| 长白| 荆州市| 济阳县| 外汇| 桦南县| 静海县| 田东县| 长沙县| 长沙市| 延津县| 淄博市| 桃源县| 云霄县| 巴彦淖尔市| 依兰县| 乌兰察布市| 宾阳县| 五指山市| 永川市| 肥城市| 山东| 万宁市| 唐海县| 同德县| 河南省| 同仁县| 济宁市| 布拖县| 高邑县| 汉寿县| 镇康县| 张家口市| 曲阜市| 翁源县| 广东省| 威远县| 普安县| 博白县| 沙坪坝区|