這篇要和大家介紹的是如何利用外部的按鈕當成中斷的事件

範例程式如下:

 

我們希望當按下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;

 

pull high.jpg

P1.3Interrupt發生時, 會跳到Port1Interrupt Service Routine (ISR), 並且讓P1.3Flag設為1. 所以在ISR裡面, 我們除了要把反轉LED的指令寫進去, 同時別忘了把所產生的Flag清掉(設為0), 否則CPU會覺得P1.3Interrupt又被觸發到.

 

最後, 或許讀者會有個疑問, 為什麼在這邊的Flag需要自己清除, 原因是因為Port1去讀Flag, 一次是讀到16Bits, 有可能是來自不同的Interrupt, 所以在發生Interrupt, 要先判斷是哪個Bit產生的Interrupt, 並且在做完ISR時要記得清除Flag.

 

創作者介紹
創作者 學無止境 的頭像
kuojed

學無止境

kuojed 發表在 痞客邦 留言(4) 人氣( 1962 )