中斷的基本原理
要搞清楚什么是中斷,我們可以從生活中的一個例子了解下。
你正在家里看電視,突然家里座機響了,你起身去接電話,接完電話后繼續回來看電視。
這就是生活中的中斷現象,也就是一個正在做的事情被外部的事情打斷,當執行完外部事情后,繼續做原本的事情。
什么是中斷?
所謂中斷,是指CPU在正常運行程序時,由于內部/外部事件或由程序預先安排的事件,引起CPU中斷正在運行的程序,而轉到為內部/外部事件或為預先安排的事件服務的程序中去,服務完畢,再返回去執行波暫時中斷的程序
由于某個事件的發生,CPU暫停當前正在執行的程序,轉而執行處理該事件的一個程序。該程序執行完成后,CPU接著執行被暫停的程序。這個過程稱為中斷。
根據中斷源的位置,有兩種類型的中斷。有的中斷源在CPU的內部,稱為內部中斷。大多數的中斷源在CPU的外部,稱為外部中斷。
根據中斷引腳的不同,或者CPU響應中斷的不同條件,也可以把中斷劃分為可屏蔽中斷和不可屏蔽中斷兩種。
使用中斷的好處
1、 實行分時操作 提高 CPU 的效率 只有當服務對象向 CPU 發出中斷申請時 才去為它服務 這樣 我們就可以利用中斷功能同時為多個對象服務 從而大大提高了 CPU 的工作效率
2、 實現實時處理
利用中斷技術 各個服務對象可以根據需要隨時向 CPU 發出中斷申請 及時發現和處理中斷請求并為
使用中斷
現在,我們使用相同的電路連接圖,然后修改代碼以使用硬件中斷。然后把下面的代碼下載進入控制板中,當按下按鈕時,LED的狀態就會立刻改變,盡管代碼仍然是在主循環中,而且是同樣的延時。
中斷命令語法介紹
attachInterrupt(interrupt, function, mode)
interrupt:中斷引腳數
function:中斷發生時調用的函數,此函數必須不帶參數和不返回任何值。該函數有時被稱為中斷服務程序。
mode:定義何時發生中斷以下四個contstants預定有效值:
LOW 當引腳為低電平時,觸發中斷
CHANGE 當引腳電平發生改變時,觸發中斷
RISING 當引腳由低電平變為高電平時,觸發中斷
FALLING 當引腳由高電平變為低電平時,觸發中斷.
當發生外部中斷時,調用一個指定函數。當中斷發生時,該函數會取代正在執行的程序。大多數的Arduino板有兩個外部中斷:0(數字引腳2)和1(數字引腳3)。
arduino Mege有四個外部中斷:數字2(引腳21),3(20針),4(引腳19),5(引腳18)。
注意事項
當中斷函數發生時,delya()和millis()的數值將不會繼續變化。當中斷發生時,串口收到的數據可能會丟失。你應該聲明一個變量來在未發生中斷時儲存變量。
重新分配中斷
中斷可以再任何時候通過attachInterrupt()命令進行改變。當重新使用attachInterrupt()時,先前分配的中斷就會從對應引腳上移除。
啟用\停止中斷
Arduino也可以忽略所有中斷。如果你需要在一段代碼中不執行中斷,只需要執行 noInterrupts()命令。當這段代碼執行完以后,你可以使用 interrupts()命令重新啟用中斷。
刪除中斷
終端也可以通過detachInterrupt(interrupt_number)命令進行刪除。 |
|