好了,將按鍵寫完輸入輸出就都完了,我們來看看微控制器內部那些東西,首先說說中斷。
中斷系統是為使cpu具有對外界緊急事件的實時處理能力而設定的。舉個例子:相信不少人都有這樣的經歷,放假了在家看電視[1],突然聽到爸媽開門的聲音[2],抓緊關掉電視,開始寫作業[3],乙個小時後你爸媽喊你吃飯[4],開始吃飯[5],吃完繼續作業[6],經過睡覺上廁所等各種操作後,終於第二天早上爸媽出去工作了,又開始看電視[7]。當**處理器cpu正在處理某件事的時候外界發生了緊急事件請求,要求cpu暫停當前的工作,轉而去處理這個緊急事件,處理完以後,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷。實現這種功能的部件稱為中斷系統。請求cpu中斷的請求源稱為中斷源。
那麼:這個過程中,1就是正在執行的事情,2是中斷源,其打斷了1這件事,開始執行3這件事,這件事又被稱為中斷服務程式,4也是乙個中斷,而且4出現的時候,即使正在執行2對應的中斷服務程式,也依然能夠去執行4中斷源對應的中斷服務程式5,因此我們說,4中斷源的優先順序要高於2中斷源,這樣我們就實現了中斷巢狀,當5執行完後,會回到3被打斷地方繼續執行,也就是6,最後經過各種中斷等其他操作後,最終會回到最初被打斷的1這件事。
stc微控制器也是51核心微控制器,但是效能比早期51要好很多,中斷源也更豐富,每個系列的微控制器對應的中斷源可能有區別,但是基本的外部中斷、定時器中斷等都有。看圖:
通過終端結構圖,我們可以看出不同中斷請求源所對應的使能暫存器和中斷優先順序,例如如果想要使能外部中斷0(int0),則至少需要開啟ex0, ea三個暫存器,其對應的中斷請求標誌位是ie0,就是說中斷產生後,ie0會被自動置位。
下邊這張圖顯示了每個中斷源對應的觸發行為,比如外部中斷0,當出現下降沿、上公升沿和下降沿兩種情況時,都是可以產生中斷訊號的。
下邊這個**中,我們首先需要注意的時相同優先順序內的查詢次序這一列,每個中斷都有乙個查詢次序,微控制器在執行時會按照這個順序去查詢,當查到某個中斷源的中斷請求標誌位為置位時,就產生中斷。部分中斷可以有兩個到多個(比如stm32微控制器)中斷優先順序,在這裡可以使用px暫存器進行優先順序的設定。
無論是輸入輸出還是中斷或是其他,幾乎所有的功能都需要使用程式來實現,也就是軟體開發了,在處理中斷時,實際上中斷的產生和置位等操作大多是硬體本身完成的,很少需要手動進行置位,我們需要寫的**基本都是中斷服務程式。但是這裡如何將中斷源和中斷服務程式繫結到一起呢?或者說,中斷源產生後,怎麼知道應該執行哪個服務程式呢?這個地方有乙個新的名詞,叫做中斷號,而中斷號其實就是中斷查詢次序。通過給函式指定中斷號,乙個普通函式就變成了中斷服務程式。例
//普通的函式大體包含函式返回值型別,函式名稱、函式引數、函式體函式返回值等幾個基本組成部分
void
test()
//在普通函式宣告之後,我們在後邊給其指定中斷號,則該函式就變成了中斷服務程式
//需要注意的是:通常中斷服務程式沒有函式返回值,也沒有引數
void
test
() interrupt 0
8086學習(四)中斷
為什麼要用io介面?答 四個不匹配 速平格時,就這樣記了,沒法記的。針對這幾個不匹配,用不同的方法,例如設定緩衝以匹配速度,設定電平轉換電路,設定格式轉換電路,設定時序控制電路等 緩衝器與鎖存器各用在什麼地方?很顯然了,緩衝器用於匯流排上,起到緩衝作用,提高匯流排驅動能力 電平匹配 鎖存器具有暫存資...
作業系統筆記(四)中斷
ctime 2020 04 30 13 33 34 0900 1588221214 標籤 空格分隔 技術 作業系統 8086 80386 的中斷向量表並不像arm的中斷向量表放在位址0處,而是位置可變。當建好中斷向量表之後,通過lidt指令,將中斷向量表的位址給idtr暫存器,這樣當cpu發生中斷時...
Linux裝置樹 四 中斷
中斷一般包括中斷產生裝置和中斷處理裝置。中斷控制器負責處理中斷,每乙個中斷都有對應的中斷號及觸發條件。中斷產生裝置可能有多個中斷源,有時多個中斷源對應中斷控制器中的乙個中斷,這種情況中斷產生裝置的中斷源稱之為中斷控制器中對應中斷的子中斷。一般情況中斷產生裝置數量要多於中斷控制器,多個中斷產生裝置的中...