51手記之標準51(三)
MCS51提供5個(gè)中斷源,每個(gè)中斷源有2個(gè)中斷優(yōu)先級,可實(shí)現兩級中斷服務(wù)程序嵌套;優(yōu)先級相同的中斷服務(wù)程序不會(huì )發(fā)生嵌套。

1.中斷源
包括兩個(gè)外部中斷、兩個(gè)定時(shí)器溢出中斷和一個(gè)串行口中斷。
1)外部中斷源: MCS51有兩條外部中斷請求輸入線(xiàn),允許外部中斷源以低電平或負邊沿兩種中斷觸發(fā)方式來(lái)輸入中斷請求信號
中斷請求標志位IE0、IE1,
控制寄存器:TCON
2)定時(shí)器溢出中斷源:
屬于內部中斷,8031內部有兩個(gè)16位的定時(shí)器/計數器,受內部定時(shí)脈沖(主脈沖經(jīng)12分頻后)或T0/T1引腳上輸入的外部定時(shí)脈沖控制。定時(shí)器T0/T1在定時(shí)脈沖作用下從全“1”變?yōu)槿?ldquo;0”時(shí)可以自動(dòng)向CPU提出溢出中斷請求,以表明定時(shí)器T0或T1的定時(shí)時(shí)間已到。定時(shí)器T0/T1的定時(shí)時(shí)間可由用戶(hù)通過(guò)程序設定,以便CPU在定時(shí)器溢出中斷服務(wù)程序內進(jìn)行計時(shí)。
3)串行口中斷源:
屬于內部中斷,串行口中斷分為串行口發(fā)送中斷和串行口接收中斷兩種。在串行口進(jìn)行發(fā)送/接收數據時(shí),每當串行口發(fā)送/接收完一組串行數據時(shí),串行口電路自動(dòng)使串行口控制寄存器SCON中的RI葳TI中斷標志位置位,并自動(dòng)向CPU發(fā)出串行口中斷,CPU響應串行口中斷后便立即轉入串行口中斷服務(wù)程序執行。
2.中斷控制
CPU對中斷源的開(kāi)放和屏蔽,以及每個(gè)中斷源是否被允許中斷,都受中斷允許寄存器IE控制。每個(gè)中斷源優(yōu)先級的設定,則由中斷優(yōu)先級寄存器IP控制。
8031內部中斷系統對各中斷源中斷優(yōu)先級有一個(gè)統一的規定,各中斷源按規定從高到低的排列順序為:
外部中斷0→ 定時(shí)器中斷T0→ 外部中斷1 →定時(shí)器中斷T1→ 串行口中斷3.中斷響應
CPU在每個(gè)機器周期的S5P2期間采樣中斷標志,在下一個(gè)機器周期的S6期間按先后順序查詢(xún)中斷標志。在查詢(xún)到某一中斷標志為1時(shí),則在下一個(gè)機器周期S1期間按優(yōu)先級別進(jìn)行中斷處理。中斷系統通過(guò)硬件生成長(cháng)調用指令LCALL,將程序轉移到中斷入口地址單元,執行相應的中斷服務(wù)程序。
響應中斷時(shí),CPU先置位優(yōu)先級狀態(tài)觸發(fā)器,接著(zhù)再執行由硬件產(chǎn)生的長(cháng)調用指令LCALL。該指令將程序計數器PC的內容壓入堆棧保護起來(lái)。但對諸如PSW、累加器A等寄存器并不保護(需要時(shí)可由軟件保護)。然后將對應的中斷入口地址裝入程序計數器PC,使程序轉移到該中斷入口地址單元,去執行中斷服務(wù)程序。
CPU響應中斷請求后,在中斷返回(RETI指令)前,必須撤除請求,否則會(huì )錯誤地再一次引起中斷響應。
評論