首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

openMSP430中斷驅動I/O測試代碼解析

     編輯:關於C語言

openMSP430中斷驅動I/O測試代碼解析

代碼功能

演示openMSP430微控制器的GPIO中斷驅動:P2口輸出LED流水燈效果,P1.0按鍵中斷控制流水方向反轉。

完整源碼註釋

#include "omsp_system.h"

volatile char shift = 0x01; // 全局狀態變量,控制流水方向

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;      // 關閉看門狗定時器
    P2DIR = 0xff;                  // P2.0-P2.7 設置為輸出模式
    P2OUT = shift;                 // 初始化P2輸出值
    P1DIR = 0x00;                  // P1.0-P1.7 設置為輸入模式
    P1IE = 0x01;                   // 啟用P1.0中斷
    P1IES = 0x00;                  // 中斷沿選擇:0=上升沿,1=下降沿
    P1IFG = 0x00;                  // 清除所有P1中斷標誌位
    eint();                        // 開啟全局中斷
    
    while (1) {
        if (P2OUT == 0x00) {       // 若輸出為0,重置為初始值
            P2OUT = shift;
        } else if (shift == 0x01) { // 正向流水:左移
            P2OUT = (P2OUT << 1);
        } else {                    // 反向流水:右移
            P2OUT = (P2OUT >> 1);
        }
    }
}

// P1口中斷服務程序
interrupt(PORT1_VECTOR) port1_isr(void) {
    if (P1IFG & 0x01) {            // 確認是P1.0觸發
        shift ^= 0x81;             // 翻轉最低位與最高位(0x01↔0x80),改變流水方向
        P1IFG &= ~0x01;            // 清除P1.0中斷標誌位
    }
}

關鍵技術點解析

  1. volatile關鍵字:防止編譯器優化shift,確保主循環與中斷服務程序見到一致的最新值
  2. 中斷向量:interrupt(PORT1_VECTOR)聲明ISR關聯P1口中斷向量
  3. 中斷標誌位管理:ISR中必須手動清除P1IFG,否則會重複進入中斷
  4. 位運算技巧:shift ^= 0x81巧妙實現0x01(左移)與0x80(右移)狀態切換
  5. 主循環邏輯:無阻塞輪詢,通過shift狀態決定移位方向,實現雙向流水燈

硬件連接建議

  • P2.0-P2.7 接8個LED(含限流電阻)
  • P1.0 接按鍵(上拉/下拉電阻),按下產生上升沿觸發中斷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved