衡阳派盒市场营销有限公司

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>不了解中斷,還怎么玩單片機(jī)?資料下載

不了解中斷,還怎么玩單片機(jī)?資料下載

2021-04-10 | pdf | 121.08KB | 次下載 | 3積分

資料介紹

中斷 單片機(jī)CPU在處理某一事???A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。 例如,當(dāng)你正在洗衣時(shí),突然手機(jī)響了(中斷發(fā)生),你暫時(shí)中斷洗衣的工作,轉(zhuǎn)去接電話(中斷響應(yīng)和中斷服務(wù)),待你接完后,再回來繼續(xù)洗衣(中斷返回),這一過程就是中斷。 單片機(jī)中斷分為內(nèi)部中斷和外部中斷兩大類,外部中斷由單片機(jī)外部設(shè)備產(chǎn)生,中斷產(chǎn)生后通過單片機(jī)的外部管腳傳遞給單片機(jī),傳遞這個(gè)中斷信號(hào)最簡(jiǎn)單的方法就是 規(guī)定單片機(jī)的管腳在什么狀態(tài)下有外部中斷產(chǎn)生,這樣單片機(jī)通常是有一個(gè)或多個(gè)IO口,當(dāng)在輸入狀態(tài)時(shí)可以用來檢測(cè)外部中斷信號(hào)。 有外部中斷產(chǎn)生的條件通常也 就是這五種:IO口輸入為高、IO口輸入為低、IO口輸入由高變?yōu)榈汀O口輸入由低變?yōu)楦摺O口輸入由高變低或者由低變高。 一個(gè)連接到 單片機(jī)的外部設(shè)備,如果想要使用單片機(jī)的外部中斷,就必須在自己請(qǐng)求單片機(jī)中斷響應(yīng)的時(shí)候給單片機(jī)提供單片機(jī)在這五種信號(hào)中所支持的類型來觸發(fā)單片機(jī)中 斷。程序運(yùn)轉(zhuǎn)中,一個(gè)中斷不是只產(chǎn)生一次,一般都會(huì)間隔持續(xù)產(chǎn)生,這五種外部中斷觸發(fā)信號(hào)前四種都有一個(gè)問題,就是外設(shè)發(fā)出請(qǐng)求中斷信號(hào)后如果信號(hào)請(qǐng)求線 狀態(tài)不改變,外設(shè)會(huì)無法向單片機(jī)提供下一次中斷請(qǐng)求信號(hào)。讓我們來看看以單片機(jī)和外部設(shè)備采用負(fù)跳變觸發(fā)中斷為例的觸發(fā)情況。 外部設(shè)備以負(fù)跳變觸發(fā)單片機(jī)中斷,第一次中斷請(qǐng)求外部設(shè)備的中斷請(qǐng)求輸出腳可以從高變低,觸發(fā)單片機(jī)中斷,第一次中斷請(qǐng)求發(fā)生后中斷請(qǐng)求腳保持輸出低,外部設(shè)備無法產(chǎn)生第二次中斷的觸發(fā)負(fù)跳變信號(hào)。 圖1 外設(shè)只能產(chǎn)生一次中斷請(qǐng)求信號(hào)示意圖 將外部設(shè)備的中斷請(qǐng)求信號(hào)做出修改,原來為需要中斷時(shí)只是輸出從高到低變化,現(xiàn)在改為輸出先從高變到低,經(jīng)過一小段時(shí)間后自己從低變回高,這樣就可以每次需要中斷時(shí)都能向單片機(jī)輸出負(fù)跳變觸發(fā)信號(hào)。 圖2 外設(shè)可連續(xù)產(chǎn)生中斷請(qǐng)求信號(hào)示意圖一 或者是由外部設(shè)備提供某種接口,單片機(jī)通過該接口可以對(duì)外部設(shè)備進(jìn)行中斷清除操作,中斷清除操作可以讓外部設(shè)備的中斷請(qǐng)求輸出腳恢復(fù)到高。 圖3 外設(shè)可連續(xù)產(chǎn)生中斷請(qǐng)求信號(hào)示意圖二 外部中斷觸發(fā)還有一些特殊方式,比如外部脈沖寬度測(cè)量、外部脈沖計(jì)數(shù)等,這些方式都是在前面幾種基本觸發(fā)方式上進(jìn)行功能擴(kuò)展得來的,外部脈沖寬度測(cè)量就是當(dāng) 中斷信號(hào)線跳變時(shí)會(huì)啟動(dòng)內(nèi)部一個(gè)計(jì)時(shí)器,到下一次中斷信號(hào)線跳變時(shí)通過計(jì)時(shí)器得到脈沖寬度并重新啟動(dòng)計(jì)時(shí)器,這些方式很少會(huì)使用到,不做詳述。 內(nèi)部中斷是指單片機(jī)內(nèi)部的功能模塊產(chǎn)生中斷信號(hào),只要是單片機(jī)內(nèi)部在CPU外圍能獨(dú)立工作的功能模塊都會(huì)提供中斷功能,常見的內(nèi)部中斷類型有時(shí)鐘 Timer、串口UART、模數(shù)轉(zhuǎn)換ADC等。內(nèi)部中斷的工作流程和外部中斷沒太多區(qū)別,只是中斷請(qǐng)求信號(hào)是在單片機(jī)內(nèi)部進(jìn)行傳輸,中斷信號(hào)不是管腳上的 電平狀態(tài),而是一個(gè)寄存器里面的相應(yīng)標(biāo)志位,通常當(dāng)某個(gè)內(nèi)部中斷產(chǎn)生中斷請(qǐng)求時(shí)就會(huì)將相應(yīng)標(biāo)志位置為1,CPU響應(yīng)中斷時(shí)將這個(gè)標(biāo)志位清0。 圖4 內(nèi)部中斷觸發(fā)示意圖 單片機(jī)對(duì)中斷標(biāo)志位的處理方法沒有統(tǒng)一標(biāo)準(zhǔn),具體的約定方法要看單片機(jī)文檔。大部分是標(biāo)志位為1有中斷產(chǎn)生,但有少數(shù)單片機(jī)是標(biāo)志位為0有中斷產(chǎn)生;有的單片機(jī)對(duì)中斷標(biāo)志位是CPU寫入什么就給改寫成什么,有的則是規(guī)定必須通過寫1或?qū)?來實(shí)現(xiàn)清除操作,還有少數(shù)只要讀一下中斷標(biāo)志位就會(huì)自動(dòng)清除掉該標(biāo)志位。 如果單片機(jī)不想被外部中斷觸發(fā),大不了將用于連接外部中斷觸發(fā)信號(hào)的管腳接成不會(huì)觸發(fā)中斷的電壓狀態(tài)就可以,但內(nèi)部中斷無法去改變內(nèi)部 連線,所以單片機(jī)為了可以選擇中斷是否可以被除法,在其內(nèi)部會(huì)有相關(guān)的寄存器來進(jìn)行選擇,通過里面的控制標(biāo)志位,開發(fā)人員可以根據(jù)實(shí)際情況決定是否使用中 斷。通常單片機(jī)里面有一個(gè)總控制位,這個(gè)位可以控制所有中斷的開與關(guān),然后每一種中斷自己還有一個(gè)獨(dú)立的控制位決定自己的開與關(guān),如果想使用某個(gè)中斷,就 需要將總中斷開關(guān)和對(duì)應(yīng)中斷的開關(guān)都打開。 當(dāng)單片機(jī)有中斷信號(hào)產(chǎn)生時(shí),就會(huì)觸發(fā)對(duì)應(yīng)中斷,不同的中斷源會(huì)需要不同的響應(yīng)方法,也就是說不同 的中斷產(chǎn)生的時(shí)候,需要單片機(jī)程序依照不同的中斷源做出不同的響應(yīng),這就是中斷服務(wù)程序。如果是UART收到新數(shù)據(jù)產(chǎn)生中斷,應(yīng)該是UART中斷服務(wù)程序 將數(shù)據(jù)讀回來并做處理,如果是ADC轉(zhuǎn)換完成產(chǎn)生的中斷,需要的則是ADC中斷服務(wù)程序?qū)?shù)據(jù)讀回來并做處理。如果需要清中斷標(biāo)志位動(dòng)作,一般都是在中斷 服務(wù)程序里面完成。 不同的中斷源需要與之對(duì)應(yīng)的中斷服務(wù)程序,實(shí)際開發(fā)中并不是所有的中斷都會(huì)被用到,開發(fā)人員為了節(jié)約程序代碼空間會(huì)只寫 出自己要使用到的中斷服務(wù)程序,也就是說會(huì)有一些中斷沒有與之對(duì)應(yīng)的中斷服務(wù)程序,如果觸發(fā)了這樣的中斷,單片機(jī)程序會(huì)運(yùn)行出錯(cuò),前面中斷各自獨(dú)立的控制 位就排上用場(chǎng),將這些控制位關(guān)掉,相應(yīng)中斷就不會(huì)被觸發(fā)。 單片機(jī)開始上電的時(shí)候,如果控制中斷是否被打開的寄存器控制標(biāo)志位被打開,可能會(huì)出現(xiàn)中斷被誤觸發(fā)的情況,而這個(gè)中斷如果沒有與之相對(duì)應(yīng)的中斷服務(wù)程序的話程序就會(huì)跑飛,所以單片機(jī)上電的時(shí)候一般會(huì)自動(dòng)將這些寄存器里面的標(biāo)志位都關(guān)掉,以免誤觸發(fā)。 中斷服務(wù)程序是單片機(jī)程序的一部分,具體內(nèi)容由開發(fā)人員決定,這樣中斷服務(wù)程序的大小在單片機(jī)程序中的位置就不固定,當(dāng)單片機(jī)的中斷被觸發(fā)后,單片機(jī)需要知道中斷服務(wù)程序在什么位置才能執(zhí)行它,單片機(jī)通過中斷跳轉(zhuǎn)表(中斷向量表)來解決這個(gè)問題。 雖然中斷服務(wù)程序的大小和在整個(gè)程序中的位置會(huì)不固定,但程序只要被燒進(jìn)單片機(jī)系統(tǒng),對(duì)于這個(gè)程序來說其中斷服務(wù)程序的大小和在整個(gè)程序中的位置就會(huì)被固定 下來,如果對(duì)單片機(jī)程序空間分配我們做出一些約定,將一個(gè)絕對(duì)固定地址專門分配給中斷使用,程序編譯時(shí)會(huì)將中斷服務(wù)程序的起始地址(或者是跳轉(zhuǎn)到中斷服務(wù) 程序的指令)填到這個(gè)絕對(duì)固定地址所在的空間,當(dāng)中斷產(chǎn)生時(shí)候,單片機(jī)先將絕對(duì)固定地址所在位置里面的內(nèi)容讀出,根據(jù)所讀內(nèi)容就可以跳轉(zhuǎn)到中斷服務(wù)程序。 圖5 中斷響應(yīng)示意圖 簡(jiǎn)單的單片機(jī)所提供的中斷種類有限,為了簡(jiǎn)化程序,會(huì)給每一個(gè)中斷分配一個(gè)用來存放中斷服務(wù)程序地址的地址空間,這種方法其實(shí)沒什么不好的地方,只是單片機(jī) 技術(shù)發(fā)展到現(xiàn)在遇到了瓶頸,高端單片機(jī)越來越復(fù)雜,于是一些專業(yè)廠商開始合作共享技術(shù)資源,例如ARM公司利用他們?cè)贑PU架構(gòu)體系上的技術(shù)優(yōu)勢(shì)專門給另 外的廠商提供CPU內(nèi)核,另外的廠商在ARM內(nèi)核的CPU外圍增加功能模塊,這些功能模塊大都支持中斷。 圖6 ARM內(nèi)核單片機(jī)架構(gòu)圖 不同廠家在相同CPU內(nèi)核基礎(chǔ)上設(shè)計(jì)出來的單片機(jī)外圍的功能模塊會(huì)各不相同,從而中斷的種類和個(gè)數(shù)也各不相同,而CPU處理中斷的方法是一樣的,如果延續(xù)簡(jiǎn)單的單片機(jī)給每個(gè)中斷都分配一個(gè)地址空間的做法顯然有問題,CPU無法知道到底有多少種中斷需要支持,這些中斷又分別對(duì)應(yīng)什么模塊,于是采用另外一種中斷處理方法,將所有中斷地址都指向同一個(gè),并將所有中斷依次編號(hào),中斷產(chǎn)生時(shí)候CPU會(huì)告訴中斷服務(wù)程序當(dāng)前中斷編號(hào)是多少,然后中斷服務(wù)程序根據(jù)中斷編號(hào) 做出相應(yīng)響應(yīng)。 圖7 公用中斷入口中斷響應(yīng)流程圖圖8 獨(dú)立中斷入口中斷響應(yīng)流程圖 所有中斷使用同一個(gè)中斷向量地址,然后通過中斷號(hào)判斷中斷類別的方法雖然解決了通用CPU內(nèi)核中斷不能直接對(duì)應(yīng)中斷向量地址的問題,但把它中斷處理的流程和具有獨(dú)立中斷向量表的單片機(jī)相比就會(huì)發(fā)現(xiàn):中斷的響應(yīng)速度會(huì)變慢。具有獨(dú)立中斷向量表的單片機(jī)只要一條跳轉(zhuǎn)指令就可以直接進(jìn)入中斷程序,而沒有獨(dú)立中斷向量表的單片機(jī)需要先跳轉(zhuǎn)到中斷公共入口,然后通過代碼判定中斷類別,確定中斷類別后才跳轉(zhuǎn)到真正的中斷程序中去。C語言的代碼會(huì)讓這種情況更加惡化,所以如果是沒有獨(dú)立中斷向量表的單片機(jī)一般采用匯編查表的方法加快中斷響應(yīng)速度。 圖9 匯編中斷快速跳轉(zhuǎn)表 中斷程序執(zhí)行完畢后回返回繼續(xù)執(zhí)行主程序,這樣就要求中斷不改變主程序的運(yùn)行狀態(tài),所以中斷響應(yīng)時(shí)需要將程序當(dāng)前運(yùn)行的狀態(tài)信息保存起來,比如程序運(yùn)行到什 么位置、當(dāng)前CPU狀態(tài)寄存器的狀態(tài)等信息。當(dāng)中斷程序執(zhí)行完畢,可以通過這些信息將CPU狀態(tài)寄存器恢復(fù)原來狀態(tài),并能返回原程序繼續(xù)執(zhí)行。不同的單片機(jī)對(duì)此的處理方式也會(huì)有不同,一種是完全由硬件來完成,并不需要程序來進(jìn)行管理;另外一種是將狀態(tài)信息用相應(yīng)指令保存在特定位置,返回時(shí)再用相應(yīng)指令恢復(fù)原來狀態(tài)。 單片機(jī)中斷還有中斷優(yōu)先級(jí)和中斷嵌套的概念,但不是所有的單片機(jī)都會(huì)支持這兩種功能。中斷優(yōu)先級(jí)是不同的中斷會(huì)有不同的優(yōu)先級(jí)別,如果同時(shí)有兩個(gè)中斷產(chǎn)生,單片機(jī)會(huì)先響應(yīng)優(yōu)先級(jí)高的中斷。中斷嵌套是指在中斷響應(yīng)當(dāng)中又有新的中斷產(chǎn)生,單片機(jī)可以暫停當(dāng)前的中斷程序執(zhí)行去響應(yīng)新的中斷,新中斷程序執(zhí)行完以后在接著執(zhí)行當(dāng)前中斷程序。一般中斷嵌套是高優(yōu)先級(jí)的中斷可以插入低優(yōu)先級(jí)中斷響應(yīng)程序,同級(jí)或低級(jí)的中斷不能插入當(dāng)前中斷響應(yīng)程序。 圖10 中斷嵌套示意圖 中斷步驟說明: 步驟①保存主程序現(xiàn)場(chǎng),執(zhí)行中斷1服務(wù)程序。 步驟②保存中斷1服務(wù)程序現(xiàn)場(chǎng),執(zhí)行中斷2服務(wù)程序。 步驟③恢復(fù)中斷1服務(wù)程序現(xiàn)場(chǎng),繼續(xù)執(zhí)行中斷1服務(wù)程序。 步驟④恢復(fù)主程序現(xiàn)場(chǎng),準(zhǔn)備繼續(xù)執(zhí)行主程序,有新中斷不能繼續(xù)執(zhí)行主程序。 步驟⑤保存主程序現(xiàn)場(chǎng),執(zhí)行中斷3服務(wù)程序。 步驟⑥恢復(fù)主程序現(xiàn)場(chǎng),準(zhǔn)備繼續(xù)執(zhí)行主程序,有新中斷不能繼續(xù)執(zhí)行主程序。 步驟⑦保存主程序現(xiàn)場(chǎng),執(zhí)行中斷4服務(wù)程序。 步驟⑧恢復(fù)主程序現(xiàn)場(chǎng),無中斷產(chǎn)生繼續(xù)執(zhí)行主程序。 有的單片機(jī)一進(jìn)入中斷函數(shù)就會(huì)自動(dòng)將中斷的總控制位關(guān)掉,需要開發(fā)人員在中斷程序中用程序再次打開,否則一次中斷后所有的中斷就不能繼續(xù)使用。對(duì)于中斷標(biāo)志位,在寫單片機(jī)程序的時(shí)候要依據(jù)單片機(jī)文檔進(jìn)行清除標(biāo)志為操作,不然有可能會(huì)一旦產(chǎn)生某個(gè)中斷就會(huì)連續(xù)不停的反復(fù)響應(yīng)這個(gè)中斷,導(dǎo)致主程序不能繼續(xù)運(yùn)行。 來源:網(wǎng)絡(luò)(本文僅供學(xué)習(xí)參考使用,版權(quán)歸原作者所有) (mbbeetchina)
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
百家乐官网新注册送彩金| 金莎娱乐| 网页百家乐| 线上百家乐官网可靠吗| 真人百家乐蓝盾赌场娱乐网规则| 专业百家乐官网筹码| 娱乐城注册送现金58| 最好的百家乐游戏平台1| 什么是百家乐官网平注法| 大发扑克网站| HG百家乐大转轮| 百家乐官网真人娱乐平台| 澳门顶级赌场| 百家乐注码技术打法| 真人百家乐官网博弈| 黎城县| 大发888娱乐城官方| 百家乐网址皇冠现金网| 迪威百家乐官网娱乐场| 泰兴市| 大发888充钱| 百家乐金海岸软件| 跨国际百家乐官网的玩法技巧和规则 | 百家乐官网输惨了| 百家乐官网知敌便能制胜| 久盛国际娱乐城| 威尼斯人娱乐城备用地址 | 永利高百家乐现金网| 百家乐官网哪条下路好| 若尔盖县| 大发888娱乐客户端下载| 百家乐博赌场娱乐网规则| 百家乐梅花图标| 百家乐官网真人游戏娱乐网| 大亨百家乐官网游戏| 大发888娱乐城 df888ylc3403| 百家乐的桌布| 百家乐官网必胜方程式| 真让百家乐官网游戏开户| 五湖四海娱乐城| 大发888官网黄金版|