| 中斷的基本原理 要搞清楚什么是中斷,我們可以從生活中的一個例子了解下。 你正在家里看電視,突然家里座機響了,你起身去接電話,接完電話后繼續回來看電視。 這就是生活中的中斷現象,也就是一個正在做的事情被外部的事情打斷,當執行完外部事情后,繼續做原本的事情。 什么是中斷? 所謂中斷,是指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)命令進行刪除。 |
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |