中斷用于執(zhí)行優(yōu)先級(jí)更高的任務(wù)
中斷顧名思義是“中途打斷”的意思。舉一個(gè)簡單的例子:您正在和部門的同事在開會(huì),突然老板進(jìn)來找你,你就得暫停會(huì)議,離開會(huì)議室,跟老板談完重要的事情,再重新回來會(huì)議室繼續(xù)會(huì)議。單片機(jī)的中斷就是類似的一個(gè)過程,發(fā)生中斷時(shí),就會(huì)打斷正在執(zhí)行的主程序,先處理完中斷任務(wù),返回主程序繼續(xù)運(yùn)行,當(dāng)然在執(zhí)行中斷函數(shù)之前,單片機(jī)需要把關(guān)鍵的數(shù)據(jù)保存下來,中斷函數(shù)執(zhí)行完成后才可以正確的恢復(fù)主函數(shù)運(yùn)行。
單片機(jī)的主程序是怎么運(yùn)行的?
其實(shí)單片機(jī)的主程序其實(shí)是一個(gè)主函數(shù),我們一般命名為Main,主函數(shù)會(huì)從上住下運(yùn)行的,執(zhí)行到最后又返回上面繼續(xù)運(yùn)行。我們用C語言編寫Main主函數(shù)時(shí),會(huì)用到while(1)讓主程序不斷的循環(huán)。
由此可見,主程序里的各種功能是按著順序來執(zhí)行的,誰也不能插隊(duì)。那怎么樣來實(shí)現(xiàn)中途打斷插隊(duì)呢?這就需要用到中斷了。
單片機(jī)的中斷程序是怎么執(zhí)行的?
單片機(jī)有著各種和樣的中斷功能,比如定時(shí)器中斷、外部中斷、串口中斷等等。比如我們要實(shí)時(shí)檢測一個(gè)按鍵的按下事件,如果在主程序中進(jìn)行掃描,就會(huì)有一定的延時(shí),需要等主程序運(yùn)行到按鍵掃描的程序時(shí)才可以檢測到按鍵的狀態(tài)。
中斷是單片機(jī)一個(gè)重要的功能,單片機(jī)會(huì)給所有中斷功能分配一個(gè)中斷向量(有些中斷功能會(huì)共用一個(gè)中斷向量)。當(dāng)開啟了相應(yīng)的中斷功能并且發(fā)生中斷時(shí),就會(huì)自動(dòng)跳轉(zhuǎn)到對應(yīng)的中斷向量運(yùn)行。在中斷向量處,我們就可以調(diào)用我們編寫好的中斷函數(shù),處理相關(guān)的事件就可以了。如果開啟了中斷嵌套,在中斷函數(shù)執(zhí)行過程發(fā)生優(yōu)先級(jí)更高的中斷,還可以暫停正在運(yùn)行的中斷函數(shù),去執(zhí)行更高級(jí)別的中斷程序。
中斷函數(shù)為什么不在主函數(shù)中運(yùn)行?
主函數(shù)是一個(gè)函數(shù),中斷函數(shù)也是一個(gè)函數(shù),它們是獨(dú)立的函數(shù),所以是分開的。上面已經(jīng)說得很清楚了,中斷是打斷正在運(yùn)行的函數(shù)去執(zhí)行優(yōu)先級(jí)更高的函數(shù),所以中斷就是打斷主函數(shù)去執(zhí)行更高優(yōu)先級(jí)別的中斷函數(shù)的一個(gè)過程。
在發(fā)生中斷時(shí),單片機(jī)會(huì)自動(dòng)跳轉(zhuǎn)到對應(yīng)的中斷向量,在中斷向量處,我們需要調(diào)用中斷函數(shù)來處理中斷事件,如果中斷事件的處理程序放在主函數(shù)中,那么這些處理中斷事件的程序就不是一個(gè)獨(dú)立的函數(shù)了,就沒法調(diào)用了。
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44983瀏覽量
650272 -
中斷
+關(guān)注
關(guān)注
5文章
905瀏覽量
42781 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64827
發(fā)布評論請先 登錄
STM32單片機(jī)DEBUG進(jìn)入不了主程序的原因
51單片機(jī)的中斷程序資料免費(fèi)下載

Arduino中的中斷函數(shù)詳細(xì)說明

單片機(jī)的中斷程序如何運(yùn)行

為什么單片機(jī)的主程序是死循環(huán)
【51單片機(jī)】有關(guān)單片機(jī)執(zhí)行中斷無法恢復(fù)主程序探討

MCS-51單片機(jī)的中斷系統(tǒng)

單片機(jī)課設(shè)-中斷程序

謹(jǐn)慎處理單片機(jī)中斷,中斷等價(jià)于比主程序優(yōu)先級(jí)更高的線程

基于單片機(jī)的外部中斷實(shí)驗(yàn) 中斷系統(tǒng)知識(shí)介紹

評論