中斷用于執(zhí)行優(yōu)先級更高的任務
中斷顧名思義是“中途打斷”的意思。舉一個簡單的例子:您正在和部門的同事在開會,突然老板進來找你,你就得暫停會議,離開會議室,跟老板談完重要的事情,再重新回來會議室繼續(xù)會議。單片機的中斷就是類似的一個過程,發(fā)生中斷時,就會打斷正在執(zhí)行的主程序,先處理完中斷任務,返回主程序繼續(xù)運行,當然在執(zhí)行中斷函數(shù)之前,單片機需要把關鍵的數(shù)據(jù)保存下來,中斷函數(shù)執(zhí)行完成后才可以正確的恢復主函數(shù)運行。
單片機的主程序是怎么運行的?
其實單片機的主程序其實是一個主函數(shù),我們一般命名為Main,主函數(shù)會從上住下運行的,執(zhí)行到最后又返回上面繼續(xù)運行。我們用C語言編寫Main主函數(shù)時,會用到while(1)讓主程序不斷的循環(huán)。
由此可見,主程序里的各種功能是按著順序來執(zhí)行的,誰也不能插隊。那怎么樣來實現(xiàn)中途打斷插隊呢?這就需要用到中斷了。
單片機的中斷程序是怎么執(zhí)行的?
單片機有著各種和樣的中斷功能,比如定時器中斷、外部中斷、串口中斷等等。比如我們要實時檢測一個按鍵的按下事件,如果在主程序中進行掃描,就會有一定的延時,需要等主程序運行到按鍵掃描的程序時才可以檢測到按鍵的狀態(tài)。
中斷是單片機一個重要的功能,單片機會給所有中斷功能分配一個中斷向量(有些中斷功能會共用一個中斷向量)。當開啟了相應的中斷功能并且發(fā)生中斷時,就會自動跳轉(zhuǎn)到對應的中斷向量運行。在中斷向量處,我們就可以調(diào)用我們編寫好的中斷函數(shù),處理相關的事件就可以了。如果開啟了中斷嵌套,在中斷函數(shù)執(zhí)行過程發(fā)生優(yōu)先級更高的中斷,還可以暫停正在運行的中斷函數(shù),去執(zhí)行更高級別的中斷程序。
中斷函數(shù)為什么不在主函數(shù)中運行?
主函數(shù)是一個函數(shù),中斷函數(shù)也是一個函數(shù),它們是獨立的函數(shù),所以是分開的。上面已經(jīng)說得很清楚了,中斷是打斷正在運行的函數(shù)去執(zhí)行優(yōu)先級更高的函數(shù),所以中斷就是打斷主函數(shù)去執(zhí)行更高優(yōu)先級別的中斷函數(shù)的一個過程。
在發(fā)生中斷時,單片機會自動跳轉(zhuǎn)到對應的中斷向量,在中斷向量處,我們需要調(diào)用中斷函數(shù)來處理中斷事件,如果中斷事件的處理程序放在主函數(shù)中,那么這些處理中斷事件的程序就不是一個獨立的函數(shù)了,就沒法調(diào)用了。
-
單片機
+關注
關注
6043文章
44622瀏覽量
638535 -
中斷
+關注
關注
5文章
900瀏覽量
41751 -
函數(shù)
+關注
關注
3文章
4346瀏覽量
62971
發(fā)布評論請先 登錄
相關推薦
Arduino中的中斷函數(shù)詳細說明
![Arduino中的<b class='flag-5'>中斷</b>函數(shù)詳細說明](https://file.elecfans.com/web1/M00/A3/CB/o4YBAF1bWwyAVejcAAqm1MO3hQw776.png)
為什么單片機的主程序是死循環(huán)
【51單片機】有關單片機執(zhí)行中斷無法恢復主程序探討
![【51<b class='flag-5'>單片機</b>】有關<b class='flag-5'>單片機</b>執(zhí)行<b class='flag-5'>中斷</b>無法恢復<b class='flag-5'>主程序</b>探討](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MCS-51單片機的中斷系統(tǒng)
![MCS-51<b class='flag-5'>單片機</b>的<b class='flag-5'>中斷</b>系統(tǒng)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機課設-中斷程序
![<b class='flag-5'>單片機</b>課設-<b class='flag-5'>中斷</b><b class='flag-5'>程序</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
謹慎處理單片機中斷,中斷等價于比主程序優(yōu)先級更高的線程
![謹慎處理<b class='flag-5'>單片機</b><b class='flag-5'>中斷</b>,<b class='flag-5'>中斷</b>等價于比<b class='flag-5'>主程序</b>優(yōu)先級更高的線程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論