這篇要和大家介紹的是如何利用外部的按鈕當成中斷的事件
範例程式如下:
我們希望當按下P1.3的按鈕時, LED1的燈號會改變, 所以必須把Port1的中斷設定給打開.
P1IE |= BIT3; // Port1 interrupt enable
接下來則是判斷P1.3何時觸發中斷的事件. 設為0時為正緣觸發中斷, 設為1時, 負緣觸發中斷.
P1IES |= BIT3; // trigger when P1.3 high-to-low transition
接著, 為了定義P1.3初始狀態, 所以我們利用MSP430的內部電阻讓P1.3預設為high的狀態.
P1REN |= BIT3;

當P1.3的Interrupt發生時, 會跳到Port1的Interrupt Service Routine (ISR), 並且讓P1.3的Flag設為1. 所以在ISR裡面, 我們除了要把反轉LED的指令寫進去, 同時別忘了把所產生的Flag清掉(設為0), 否則CPU會覺得P1.3的Interrupt又被觸發到.
最後, 或許讀者會有個疑問, 為什麼在這邊的Flag需要自己清除, 原因是因為Port1去讀Flag時, 一次是讀到16個Bits, 有可能是來自不同的Interrupt, 所以在發生Interrupt時, 要先判斷是哪個Bit產生的Interrupt, 並且在做完ISR時要記得清除Flag.
請先 登入 以發表留言。