【哈爾濱工業大學】《單片機原理》(建議收藏) P11 - 11. 5.1-AT89S51單片機的中斷系統(1)

长安书院_
146粉絲
2026年5月16日
AI 生成·可能包含錯誤
這一章我們主要介紹終端系統的硬件結構和工作原理
掌握這硬件結構和工作原理就是非常非常重要的
對我們深刻理解終端系統是如何工作的
這個對我們幫助非常大
再一個介紹與終端系統相關的那些特殊功能計算器
還有終端系統的一些特性
終端系統的一些特性
最後呢
我們介紹一下終端系統的一些初始化編程
還有呢
它的終端服務程序設計
這個大家最終要掌握終端服務程序設計
還有終端初始化會編程
會編程
這兩點非常非常重要
前面就它的基礎
單片機最大特點就是軟件和硬件緊密結合在一起
終端技術
我們在危機原理可能都已經學過了
終端技術主要對於單片機來說
用於實時檢測和控制
要求單片機能快速地響應終端請求員提出的服務請求要及時處理
如果某個終端員發出終端請求的時候呢
如果這個終端請求你用軟件初始化
就允許他提出終端請求
那麼單片機就馬上終止目前正在進行的正在執行的終端服務主程序
然後轉到終端處理程序
就是所謂的終端服務主程序
來處理這個終端請求啊
好
終端服務程序處理完終端請求以後呢
再回到原來被終止的這個主程序那個地方
這就斷點啊
繼續執行被中斷的主程序啊
那麼下面大家看一個圖
這個圖呢
就是中斷的基本過程執行主程序
然後大家注意到這個地方啊
終端員申請中斷
注意這個中斷是隨機的
不一定什麼時候
然後呢
如果這個中斷請求員允許他中斷的話
然後還有其他的一些中斷條件滿足的話呢
他單憑GCP就顯然中斷請求
然後進入到中斷服務主程序
然後呢
執行完以後處理完了再返回這個斷點
大家注意啊
這個斷點是什麼位置呢
就是說
當中斷員提出中斷請求的時候
要打斷正常執行的主程序
那麼正在執行這一條指令的下一條指令
他的地址一定壓到對站裏面去
當執行完中斷服務主程序返回主程序的時候呢
那個斷點地址再彈出來
然後呢
你就按那斷點地址呢
主程序繼續執行
這就是中斷的響應和處理過程
大家想想
如果這個單片機沒有中斷系統
那麼大量的時間就會浪費在什麼地方呢
查詢那些各個中斷員有沒有中斷服務請求啊
這效率肯定是不高啊
所以採用中斷技術呢
就是完全消除了單片機
就是在查詢方式當中的等待
可以大大提高單片機的工作效率和實時性啊
所以單片機對我們來說
這裏面的中斷系統是非常非常重要的
我們搞的實時測控監測
那麼這個沒有中斷系統就完成不了
實際上
千用式處理器系統裏面都有這個中斷
這一模塊啊
大家知道這個中斷系統的功能強弱
也決定了這個處理器呢
它的功能強弱
能從某一個側面反映出這個處理器
它的處理功能強弱
那麼以後我們大家可能要學習DSP
學習千用式微處理器
這些千用式處理器家族的其他成員
我們就會就會發現51單片機的中斷系統
相對來說還是比較簡單的啊
比較簡單
好
下面我們看一下51單片機的中斷系統結構
那麼這個中斷系統結構呢
大家看這個圖啊
一共有五個中斷請求員
哪幾個呢
這是外中斷0
外中斷1
然後呢
這是定時器T0
這個是定時器T1
這個是穿行口中斷
這個是發送中斷
這個是接收中斷
外中斷0呢
大家注意它是一個引腳
我們前面已經講過這個引腳
那麼這個中斷
就是外設立中斷請求
要加到這個腳上
這個中斷請求的方式有兩種
一種是電瓶處罰
低電瓶有效
也就是說當加到這個引腳
原來是高電瓶的時候
不會發出中斷請求
當爲低電瓶的時候就會發出中斷請求
還有一種是跳檐處罰
所以你看這個地方表示的是跳檐的意思啊
這個表示是電瓶
跳檐處罰什麼概念呢
你給一個負跳檐
就等外設呀
加到這個引腳上
一個負跳檐
負跳面
然後就等於發出一箇中斷請求
好
這是外中斷0
外中斷1和它的道理是一樣的
那麼T0和T1
這是兩個定時器
當定時器寄出去
實際上定時器的本身就是一個寄出器
那麼當這個定時器寄滿的時候
就會把中斷請求標誌指1
所以這是兩個定時器寄出器的寄出標誌
寄滿的話呢
就把相應的中斷位指1
中斷請求位
這個是串口的發送中斷
這是接收中斷
因爲串口呢
中斷有兩種
一種發送中斷
一種接收中斷
它倆共用一箇中斷入口
那麼這一排大家一定要注意
這是對應的這個中斷源的中斷請求標誌
中斷請求標誌
大家注意外中斷0呢
這是一箇中斷請求標誌
外中斷1在這
這個是T0
這個是T1
這兩個是寄出寄出標誌
這個是發送中斷標誌位
這個接收中斷標誌位
然後呢
大家注意看啊
這是對應的這些標誌位呢
它在哪個寄存器
這個是寄存器的標號
那麼這兩個中斷源呢
在SCON的
這兩個中斷標誌在SCON這個寄存器裏面
這四個標誌呢
在TCON這個特殊功能寄存器裏面
一會兒我們就會講這兩個
介紹這兩個寄存器
然後大家注意看啊
這是
這個一箇中斷源的中斷請求是否能得到響應
還要看是否允許它
那麼這1X0這位呢
是控制外部中斷0是否允許外部中斷0申請中斷的這麼一個控制位
這個是控制T0是否允許T0中斷
這個是控制T1是否允許
就是INT1的中斷
這個是控制定時器寄存器T1的
中斷允許控制位
這個是創新口的中斷允許控制位
所以大家注意看啊
每一位實際上都是對應特殊功能寄存器當中的某一位
你可以用軟件把它指引或清零
當單片機復位的時候呢
相應的
相應的這幾個位呢
都爲0啊
都爲0
下面大家再看這個啊
後面這個總的開關EA位
EA位呢
是總的中斷開關允許位
大家注意總的開關允許位呢
總的中斷開關允許位也叫CPU開中斷分中斷
它是管整個中斷系統
這些中斷源的中斷請求是否能得到響應
是否允許
那麼我要這個開關
假設一合上
大家看到它是帶聯動
是聯動的開關啊
那麼大家一定要注意
你要把這位寫零的話呢
這開關全打開
所有的中斷源大家看那個通路都過不去啊
一共五路五個中斷源的中斷請求過不去
如果這位只一的話呢
那麼所有開關
它是聯動的合上
那麼就是總的中斷允許
至於說某一箇中斷源的中斷請求是否能夠被允許
還取決於這五個中斷允許位
你開關合不合上
就是中斷允不允許
也就是說允不允許它提出中斷請求啊
好
那麼假設這開關全合上的話呢
中斷請求
比如說這一路就到這了
那麼這個IP大家注意看上面的IP啊
IP呢
是表示中斷優先級的意思
一箇中斷源有高優先級有低優先級
那麼對於我們五一單品級這個應用中斷系統來說呢
它要麼是高優先級
要麼是低優先級
那麼這對應的這五個位
大家看這一共五個位啊
五個位你可以用軟件把它指一
它是高優先級
你也可以把它清零
它是低優先級啊
所以呢
這個優先級這個開關呢
就選要麼是高優先級
要麼是低優先級
然後大家看最後呢
有高優先級中斷請求和低優先級中斷請求
你是哪個優先級的就進到哪個
那個高級或者是低級的中斷請求隊列裏面啊
所以大家注意這個中斷系統非常重要
這裏大家要注意哪幾個問題
一箇中斷源是否有中斷請求
要看中斷標誌
那麼這些都是對應的相應的寄存器
這些就是相應的位
串口的中斷標誌
中斷請求標誌在SCON寄存器裏面
上面那四個中斷源
兩個外中斷
兩個定時器
它的中斷請求在PCON寄存器裏面
這些位呢
都是特殊功能寄存器相應的位
都可以用軟件把它植入或清零
那麼再看這一列
這一列呢
前面有一個IE寄存器
這個叫什麼呢
中斷允許寄存器對應的這五個開關是也就對應五個中斷源
是否允許它能夠提出中斷請求
那麼這些這五個位呢
也是在特殊功能寄存器裏可以用軟件把它植入或清零
那麼這一個五個聯動開關呢
是這個系統的總的中斷開關位
如果這位EA這位寫零的話
開關全打開
那麼大家想想五個中斷源
即使前面那些開關合上
它的中斷請求是體現在這
這中斷請求標誌也過不去啊
也過不去啊
所以這一位如果寫一的話呢
五個聯動開關都合上
也就是說允許CPU開中斷
也就是說總的中斷是允許的
然後大家注意看
這個塊上面是IP
IP什麼意思呢
是中斷優先級的意思
它是一個特殊功能寄存器
如果這個中斷源
你想讓它爲高優先級的話
就把相應的位把它植移
你比如說對於這個串口來說
它的優先級標誌位在這
你把它植移
它開關擋線上面
它是高優先級
就轉向了高優先級
高級中斷
高優先級中斷的排隊序列裏面
如果這個開關擋線下面
它是低優先級
低優先級
那麼它就在這個低優先級中斷這個系列
所以中斷源你可以設爲高優先級中斷
或者是低優先級中斷
好
這個是中斷系統結構是非常非常重要的
要求大家把它記住
要求大家把記住
然後我們後面講的那些特殊功能寄存器
它的硬件結構
大家都和這個中斷系統的硬件結構結合起來
它處於要搞清楚
這些特殊功能寄存器處於這個中斷系統的哪一部分
哪一部分
好
這是中斷系統
那麼大家注意
五個中斷請求源
大家把它記住
一個是Y中斷0
它就是INT0非
Y中斷1
INT非
還有兩個定時器中斷
它對應的中斷請求標準是TF0
定時器1的中斷請求標準
E出中斷請求標準是TF1
還有串引口的中斷請求
串引口的中斷請求呢
是大家注意看
是TI或者是RI
TI或RI
這個TI或RI
那麼這一共五個中斷源
對應的中斷請求標誌
大家要看
I10,I11,TF1,TF0,TI或RI
那麼這五個中斷請求標誌
大家注意看
體現在什麼地方
I10,I11,TF0,TF1,RI,TI
好
那麼中斷請求標誌
寄存器
剛纔大家都看到了
就說這五個中斷源的中斷請求標誌
在哪呢
分別在TCON寄存器
ICON寄存器
TCON寄存器
它實際上是定時器寄出器的控制寄存器
是我們下一章要介紹的內容
那這個寄存器格式
大家看一看
這是字節地址88H
字節地址
所以它是可謂尋址的
88898A8B
這是對應的位地址
那麼最低位呢
IT0
這一位I10
IT1,I11
那麼這兩位是我們下一章介紹的
這裏我們暫時不管
這TF1,TF0是這個定時器
兩個定時器的溢出標誌位
它的位地址呢
分別是8FH,8DH
所以這個是TCON寄存器
那麼對照剛纔我們這個圖
大家注意TCON寄存器在這呢
TCON寄存器
正好這些位都在這裏
TCON寄存器
大家注意啊
我們從最低位開始看一下
IT0
這個是大家注意
這個是外中段的中段處罰方式選擇
這個是外中段0
外中段1的中段請求標誌位
IT0
IT1是兩個外中段的中段處罰選擇
有哪兩種中段處罰選擇呢
一種是電瓶處罰
一種是跳源處罰
也就是說
某一箇中段源在單片機外嘛
如果像它的外中段0引腳發一個負調變
這個叫跳源處罰
能夠引起單片機中斷
如果發一個低電瓶
那麼它是電瓶處罰
所以這兩位呢
是處罰方式選擇
這位是外中段0的中段請求標誌
這是外中段1的中段請求標誌
這個是定時器技術器0的中段請求標誌
這個是定時器1的中段請求標誌啊
所以有沒有中段請求
某一個器件有沒有中段請求
取決於什麼
取決於對應的中段標誌啊
是否爲1
那麼當然這些外設功能部件都做到片內了
兩個定時器
還有呢
對應的兩個引腳上的外中段0
外中段1
那麼這兩個大家一定要注意
是兩個外中段的處罰方式選擇啊
一會我們後面還要介紹
好
這是TCON計算器
各位含義呢
我們那裏都教材裏面都介紹
下面再看ICON計算器
ICON計算器實際上它是我們介紹的
再下一張串行口部分的控制計算器
它的字節地址呢
是98H
可以未尋指啊
末位地址是0或者是8嘛
是可以未尋
這裏面與中段有關的兩個標誌位在這呢
這個是串行口的發送中段標誌位
這個是串行口的接收中段標誌位啊
所以
ICON這個特殊功能計算器
它的字節地址98H最低兩位存的是最低兩位是串行口發送中段
或者是接收中段的標誌位都可以進行未尋指啊
未尋指
那麼ICON計算器
在我們剛纔的那個中段系統結構裏呢
處於什麼位置
在這啊
在這這兩位啊
發送中段接收中段
大家一定要注意串行口
雖然它有一箇中段入口
但實際上它有兩個中段
串行口發送或接收數據是以針爲單位的
這一針信息發完以後
一定要
就是發送中段有效
發送中段有效
然後就進入中段服務程序
把下一次要發的那一個字節數據
送到發送緩衝器裏
同理
它還有個接收中段
當接收完一針信息以後
要引起中段
接收完的信息
在接收緩衝器裏面
單片機CPU應當把接收緩衝器裏的數據讀走
在中段服務程序裏
所以它有發送中段和接收中段標誌
大家應當弄明白
這TCON和ICON裏面各個標誌位的含義
好
那麼下面我們看一看
一箇中段員要想申請中段
有一個對他就是他能不能發出中段請求
也就是說允不允許他提出中段請求
那麼這個叫中段允許控制
還有一個問題
這個中段員還要給他定優先級
他有兩個優先級
高優先級和低優先級
所以怎麼來進行中段優先級的控制
這也是擺在我們面前的一個問題
好
那麼中段允許控制是由IE寄存器來控制
中段優先級的控制是由IP寄存器來控制
IE的含義是什麼呢
Interrupt Enable就是中段允許的意思
這個IP就是我們英文裏面中段優先級的碩寫
所以這是兩個特殊功能寄存器
首先我們看一下中段允許寄存器IE
那麼中段允許寄存器實際上是控制了各中段員
就是各個中段員的開放或者是屏蔽
允不允許他中斷
他的字節地址呢
IE這個寄存器的字節地址爲A8
大家一看就可以進行未尋址
那麼大家看看這個
看一下啊
這個是IE寄存器的格式
最低位EF0
次低位ET0等等等
A8H是他的字節地址
那麼他的位地址自然最低位就是A8H
那麼
5051單片機
你對這個中段的開放和關閉呢
實際上是由兩機來控制
通過誰呢
由IE這個寄存器來進行控制
哪兩機呢
首先是總的中段開關控制
就是總開關
中段的總開關是誰呢
這位EA這位
這位就在這
這位呢
就是剛纔大家看到那個圖
那個聯動開關
這位如果只一
那些聯動開關都扯上
這位如果寫零
那五個開關都斷開
大家想想
如果寫零的話
那五個開關都斷開的話
任何一箇中段員的中段請求都不會得到響應
大家看看這個圖啊
看看這個圖
我們再回顧這個圖
所以這個圖是非常重要
就在這大家看啊
IE就是這個寄存器
EA這位
IE寄存器裏EA這位
如果寫一的話
這五個聯動開關都合上
如果寫零的話
全打開
全打開的話
任何一箇中段員的中段請求
沿着這個通路都傳不到這個響應中段這個邏輯裏
所以呢
EA這位是中段總開關啊
總的允許開關好
那麼他是控制
如果整個這五個中段員
我誰想讓他中段發出中段請求
都給他關閉掉
我就把這位EA這位寫零就行啊
EA這位在哪呢
就是在IE寄存器裏面
剛纔的IE寄存器
第五位大家注意IE寄存器裏第五位
就這五位是管五個中段員控制他們的中段是否允許這五個控制位
寫一的話
響應到這個開關就合上
寫零的話就打開
所以你要控制某一箇中段員
控制某一箇中段員的中段請求是否允許
大家注意一定要把對應這開關合上
一定允許他中斷啊
當然大家還注意
還有後面這EA這些五個開關都得合上啊
當然這一位呢
是管五個中段員的
而各個中段員是否他的中段請求得到響應
取決於他們自己的這些
中段允許位啊
所以五個中段員的中段允許位
大家看一看啊
把它記一下
ESE就也有的意思
S是serial就是串口的意思
T1 T0是兩個定時器
然後呢
X1 X0
這是兩個外形段
所以這個中段系統結構是非常非常重要
這裏有一個問題啊
同學該問
當然我單片機服務以後
這個時候中段允許繼承器
各個那五個中段員呢
是否允許他中斷呢
大家注意
當單片機服務以後呢
IE繼承器被清零了
實際上意味着什麼
所有中段請求都發不出來了
就那五個開關單獨的開關都被打開了啊
當然IE這位就中段員的中段允許
你可以用軟件SiteB把它指一或者Clear
把它清零啊
所以各位都可以用未操作指令把它指一或清零
因爲它是可未訓織的啊
好
如果某一箇中斷員允許他中斷
你就把IE相應位置一啊
當然還要注意一個必要條件什麼的
EA位必須指一
就那五個聯動開關都合上
這個相當於總的中斷開關位嘛
好
那麼怎麼來改變IE呢
剛纔已經說了
可以用SiteB
Bat
這個我剛纔就在指令系統裏面第三章已經介紹過了
ClearBat把它清零啊
當然
你可以對整個IE自己而進行操作
那麼下面大家看這個例子啊
看這個例子
如果允許片內兩個定時器技術器中斷
並且禁止其他中斷員的中斷請求
讓你編寫一下設置IE的相應程序段
就相當於對這個中斷系統啊
是否允許他中斷的處理化程序段怎麼編呢
如果我用V操作指令非常簡單
ClearES
這個就禁止串口中斷
ClearES0
禁止外部中斷
外部中斷零中斷
ClearES1
禁止外中斷一中斷
SiteBET0
SiteBET1
這兩個是允許定時器T0和T1中斷
SiteB1A
大家注意
就能管五個聯動開關那個
就是總的中斷開關位呢
是把它指1
然後CPU開中斷
也就是說總的中斷允許
所以大家注意
如果讓你做完成這個要求的話
處理化程序這個段就這麼寫啊
那麼我可以把這五條V操作指令
我合成一條字節操作指令
大家注意
Mode IE把8A送到IE裏面就可以了
8A爲什麼是這樣呢
大家可以看IE寄存器的格式啊
IE寄存器8A是什麼意思啊
把1 0 0 0
因爲這是管串口
所以它也禁止中斷
1呢
8裏面的1是EA
就是總的中斷開關位允許
總的中斷允許
然後A呢
就1 0 1 0 1
這是T1
就是兩個定時器允許中斷
兩個外中斷不允許中斷
它都寫上0
所以呢
用字節操作呢
這個指令來編這段程
就一條指令
但是呢
需要你得對這裏面的硬件呢
這個特殊功能寄存器
各位要特別清楚
它各位的含義是什麼啊
好
下面介紹一下中斷優先級
寄存器IP
8051單片機這個中斷系統裏面
所有的中斷傾存源
它分爲兩個優先級啊
可以用軟件來設置爲高優先級或低優先級啊
由於就兩個中斷優先級
它可以實現兩級中斷嵌套
也就是說
我主程序正在執行的時候
這時候呢
低優先級某個低優先級中斷請求員申請中斷
然後我中斷正在執行的
主程序
然後呢
去跳向這個中斷源的中斷入口
然後呢
就執行低優先級的中斷服務程序
正執行低優先級這個中斷服務程序
那某個中斷源爲高優先
他又提出中斷請求
那麼就可以打斷目前正在進行的低優先級中斷服務程序
然後跳向高優先級中斷服務程序執行執行完了
再回到低優先級的中斷服務指程序那個斷點
然後呢
再執行低優先級中斷服務指程序執行完了以後
再跳向主程序的那個斷點
所以這個兩機中斷嵌套
它的
結構就是這樣
我正執行
主程序
然後低優先級一箇中斷源請求中斷了
然後響應他的中斷執行他的中斷服務指程序
在這呢
高優先級某個高優先級中斷源又提出中斷請求
然後去響應高優先級的中斷請求
然後執行完了
再返回低優先級的這個中斷服務指程序的斷點
然後繼續執行剩下的程序執行完畢以後
再返回到主程序這個斷點繼續執行主程序
所以大家一定要注意
由於就兩個優先級只能進行兩機
中斷嵌套這個大家一定要知道
那同學就會想到前面的指程序調用了
指程序調用可以調多少次啊
我進到某一個指程序
然後又調用指程序
然後進到另一個指程序又調用指程序
最多可以調多少次啊
這個大家一定要想一想啊
但終端系統是絕對沒有那個
就說你進到低優先級
你能打斷他的只有這個中斷源是高優先級
當高優先級中斷源的中斷請求正在處理的時候
就不會再有任何中斷服務指程序來打
也就換句話說
如果一箇中斷源被定位高優先級中斷
他是不能被任何其他的中斷所中斷啊
這個大家一定要
所以對8051單片機來說呢
他就是兩機中斷嵌套啊
兩機中斷嵌套
所以我們大家也可以考慮一下調用指程序
那裏面也相當於不斷調不斷調可以調用多少
所以這裏提示大家在調用指程序的時候
這時候還要看對戰啊
還要看對戰
好
8051單片機這個中斷系統
他就兩個優先機
所以用起來也比較簡單
相對來說啊
他的功能就比如和DSP啊
嵌入式啊
處理器相比呢
相對來說啊
和簡單一些
但是簡單帶來一個什麼好處呢
非常好用啊
非常好用
非常清晰
那麼剛纔已經說了
整個8051單片機中斷系統一共分爲高優先級
低優先級
大家注意啊
這個優先級嵌套
這個要遵循兩個基本原則
大家注意啊
低優先級可以被高優先級中斷
但是高優先級不能被低優先級來中斷
這個道理很簡單啊
第二同級不能中斷同級的
大家想想
如果你被定爲高優先級的話
你就在執行中斷的時候就不會被其他中斷員所中斷
那麼中斷優先級寄存器IP呢
它的字節地址是B8H
大家一看呢
字節地址末位是8
它可以進行未尋指
你可以用軟件用未操作指令或字節操作指令
把其中的某個位指一或清零來確定各個中斷員的中斷優先級啊
所以這個IP這個寄存器的格式呢
大家看一看在這呢啊
在這
那麼大家一定要注意這五個中斷員前面這個P啊
表示的就是優先級的意思
後邊跟着呢
是對應的是哪個中斷員
這個是串口
這個是T1Y中斷1T0Y中斷0
這是它的字節地址
那麼字節地址末位爲8
它的位地址呢
最低那位就是和字節地址相同
好
這五個中斷員五個中斷請求員的中斷優先級
他們的優先級設置就是通過設置這個寄存器來定的啊
寫1對應這位寫1
他就是高優先級寫0的話
他就爲第一優先級
所以在單片機運行的時候
對中斷系統最開始有個初始化編程
這初始化編程一定你想好需要把哪些中斷員定位高優先級中斷員
把哪些中斷員定位低優先級中斷啊
這個大家要清楚
再一個問題一定要注意
當單片機扶位的時候
這些位都爲什麼
都爲0
都爲0意味着什麼
各個中斷員初始化爲低優先級
就是在扶位時候
它是低優先級的啊
那麼各個位我就不再解釋了
寫1的話
它就高優先級
寫0的話
低優先級
由於它可以進行未遜值
所以你可以用SETV或CLR指令把它指引或清零
也可以呢
直接寫一個字節到IP這個計算器裏面
把各個中斷員的中斷優先級別把它定準了啊
把它確定好
這裏還要大家注意一個問題啊
就是我們中斷系統裏面有兩個不可遜值
什麼叫不可遜值
你不能用指令來對它指引或清零
有兩個不可遜值的優先級激活處罰器
什麼意思呢
這兩個處罰器代表中斷系統在執行某一箇中斷的時候來告訴用戶
它是高優先級中斷
還是低優先級中斷啊
它實際上代表了你當前執行這個中斷的優先級別啊
那麼大家注意
有同學會提這麼個問題
當半電梯復位的時候
那五個中斷員全低優先級
那這時候有某一箇中斷員
就假設這五個中斷員同時申請中斷
我顯然隨的
在這五個中斷員都是同一中斷級別的時候
實際上
他這時候就內部有一個輔助優先級結構來決定的
還是這五個中斷員
儘管他是同一個優先級的
他們實際上還有一個優先級高低的問題
那麼就取決於什麼呢
裏邊有個輔助的優先級結構
你可以
硬件來自動查詢
它這個優先級結構級別呢
實際上就等於把各個中斷員的中斷優先級別先後次序都定了
你比如說這五個中斷員在這兒
如果大家這五個中斷員都高優先級
或者都爲低優先級
他們是同一中斷級別的
那麼這裏大家一定要注意
實際上在大家都是同一級別的情況下
外部中斷零是級別最高的
串口中斷是最低的
他的優先級查詢次序就按這個次序由高到低來進行
所以大家一定要注意
在各個中斷員
你用軟件把IP設置爲相同優先級的情況下
外部中斷零的優先級最高
串引口的中斷優先權是最低的
最低的
下面我們大家看一個例子
我們對中斷優先級寄存器進行初始化
假設我們要求設置兩個外中斷請求爲高優先級中的其他中斷請求爲低優先級
那麼這一段程序怎麼來編寫呢
大家看SETB PX0
這是外中斷零
SETB就把這位指一
剛纔的IP寄存器指一表示
它是高優先級中斷
這個SETB PX1實際上是把外中斷一設爲高優先級
其他那三個中斷員呢
我都用clear把他們清零
他們就都是低優先級中斷了
當然這五條指令呢
你可以用一個字節操作指令來完成
大家注意看
把05H送到IP裏面
只要大家看看把這個各個位呢
用剛纔這個
大家看IP寄存器格式
05H
000
這三個0
這是零
5呢
是0101
這兩個外中斷呢
爲高優先級
其他都爲低優先級
所以要用字節操作指令呢
很容易
但是呢
你得對這個寄存器節奏要特別清楚
否則你看一個指令什麼意思你都不明白
這就是彙編語言的特點
直接對寄存器進行操作
好
下面我們再探討一個問題
就是說一箇中斷員的中斷請求要想被得到響應
必須滿足哪些條件
這個大家一定要注意
如果一箇中斷員的中斷請求被響應
必須滿足下面這些必要條件
這個大家一定要清楚
實際上我們在危機原理裏面也基本講過這些問題
對於8051單片機來說
首先一箇中斷員的中斷請求被允許了
能夠響應他的話
第一個必要條件
EA這位設置爲一
叫總的中斷開關爲一
總的中斷允許EA等於一
第二個條件是他這個中斷員必須發中斷請求
並且發完中斷請求以後
他對應的中斷請求標準位爲一
表明他有中斷請求
得發中斷請求
第三呢
是這個中斷的中斷允許位
之一
就是說允許他中斷
第四個呢
是無同級或者更高級中斷被服務
就是說目前呢
沒有同級的
大家知道這個中斷機
8051單片機中斷優先級結構是
就是它的工作原理是那樣
同級不能打斷同級的
低級不能打斷高級的
一箇中斷員如果設置成爲高優先級的話
是不能被任何其他中斷所能打斷的
所以這四個必要條件
大家一定要清楚
一箇中斷員的中斷請求
如果能夠被響應
必須滿足這四個條件
總的中斷開關等於一
然後他得發出中斷請求
他所以他對應的中斷請求標誌就爲一
然後呢
還得允許他中斷
另外呢
沒有同級或更高級的中斷呢
正在被服務
那麼實際上啊
51單片機的CPU是在每一條指令週期的話
每一個機器週期都在查詢這個中斷標誌位啊
查這些標誌位
如果滿足上面這些條件
那麼在下一條指令開始就可以進行中斷響應
所以這個地方一個最重要的問題
大家注意51單片機的中斷請求
某一中斷員中斷請求能夠被響應的必要條件
有四條啊
有四條
這個是比較重要的一個基本概念
那麼中斷響應過程是什麼
假設剛纔總的中斷開關位置一了
然後我是某一箇中斷員也發出中斷請求了
這時候中斷響應過程啊
同時還中斷被允許了
那麼這時候中斷響應過程
大家注意啊
他的過程是這樣
如果這個中斷員中斷請求能夠響應
就剛纔那四個必要條件都被允許
都滿足的話
首先大家一樣
硬件自動生成一個
LAN口
然後這個是對應的終端入口
這個中斷員的終端入口啊
他是16位啊
16位的
那麼這是由硬件自動生成的
我們大家不管他裏面的硬件邏輯呢
產生這個長調用指令啊
好
你比如說我們現在
假設外中斷一
一剛纔那四個條件都滿足了
所以外部中斷一請求中斷
然後對他進行響應
那麼大家注意
首先自動的生成這個長調用指令
0013H
大家注意0013呢
是那程序存儲器的外中斷一的中斷入口
對吧
這是我們前面講過的
大家沒有忘吧
那麼
就0013先跳向這個地方
然後再把目前這個主程序當中的程序
繼續程序指針PC呢
這個內容壓到對站裏面
把這個斷點保護起來
然後再把這個終端入口0013呢
裝到PC指針裏面
然後就跳向相應的終端入口啊
那麼這裏就有一個問題
大家一定要注意
五個終端源都有各自的終端入口
這個在設計8051單片機的時候是已經定死的
是固定的
五個終端入口地址在什麼地方呢
在程序存儲器的
那些特殊地址裏面
大家看一看啊
五個終端入口
外部中斷零是0013
外部中斷零是0003
定時器技術器梯零是000B
外部中斷1是0013
梯1是001B
串口中斷是0023
每兩個終端入口之間差幾個單元
差八個單元
照理說一個終端源的終端景調
如果能夠被響應的話
你就應當在終端入口這個位置啊
開始放終端處理程序
但是大家一定要注意
一般來說八個單元來放終端處理程序的話
往往是不夠的
所以一般在這終端入口這個地方又放一個跳轉指令
跳向什麼呢
真正的終端處理程序啊
爲什麼要放跳轉指令
原因就是兩個終端入口之間
只有八個單元
你終端服務程序
往往要超過這八個單元啊
好
所以呢
大家注意一般這個終端入口這個地方就是放無條件跳轉
那麼這個終端入口地址
大家一定要記住
這裏我問大家這個終端入口地址是哪類存儲器的
位於哪類存儲器裏面的地址啊
是程序存儲器
那麼這裏大家一定要注意一個問題啊
當單片機服務的時候
大家注意PC指針指向的是0000H
它下面一個單元
0001H
再下面一個單元
0002H
再下一個單元是什麼單元
就是0003
所以當單片機服務的時候呢
那個零地址那個地方
那有三個空間單元
那三個單元都放什麼呢
放一個長跳轉指令
跳向什麼地方呢
跳向主程序MIN
MIN
MIN主程序
而不能直接往下放主程序
爲什麼
你要放主程序的話
就佔用這些單元
那麼當這些終端源
它的終端請求被響應的時候呢
那就亂套了
所以大家一定要注意啊
當單片機服務的時候
PC指針裏面裝的是0000H
然後後面還有0001
0002
這三個單元
正好能夠放一個長跳轉指令
所以一般說來
編寫程序的時候啊
ORG
0000H
那這個地方都放一條什麼指令呢
LJAMP
然後呢
跳向主程序
這主程序標號啊
這是主程序標號
所以呢
這條指令放完以後
下一個單元是什麼
就是這個0003吧
對吧
所以大家看讀的程序的時候呢
程序第一條指令
都是這個
跳向主程序
所以說主程序安排在程序存儲器的哪個位置
你根據需要來定
那麼一般都放到哪一個位置呢
你就把這位置寫個ORG
某一個位置
某一個位置啊
所以大家一定要把這個單片機服務的時候
PC指針的狀態和最開始爲什麼要用這條指令
爲什麼不直接往下寫程序
一定要搞清楚啊
爲什麼不直接往下寫程序
好
那麼大家注意一個問題啊
如果遇到下面三種情況
大家注意這時候中斷響應都被封鎖
就說你一箇中斷源的中斷請求
在前面的四個必要條件已滿足以後
是不是就一定能得到響應呢
不一定
如果遇到下面這三種情況
這個中斷響應就被封鎖掉
被封鎖
哪三種情況呢
第一種CPU正在處理同級或更高級的中斷
這時候自然不會響應
同級不能打斷同級的
低級不能打斷高級啊
這第一種情況
再一條要注意
所查詢的機器週期不是當前正在執行指令的最後一個機器週期
任何一條指令執行的時候
尤其是乘除指令
它是四個機器週期
你每一個機器週期都查詢那五個中斷請求標誌
而且那些條件都滿足了
那爲什麼不能響呢
原因是當前正在執行這條指令還沒到
它最後一個機器週期也就說沒有執行完
你不可能把這個指令執行到一半廢棄了
然後再去響應中斷
這是不可能的
所以爲了保證指令執行的完整性
這時候這個機器週期肯定不會響應
第三種情況
如果正在執行的是中斷返回
或者是訪問IE或IP的指令
如這時候按照8051單片機中斷系統的規定
要把這一條指令執行完以後
再執行完
再執行一條指令
這時候纔有可能響應你的中斷請求
大家想一想
這個問題留給大家
爲什麼這樣啊
所以遇到這三種情況
雖然單片機在每一個機器週期
都查詢那五個中斷請求標準位
而且前面滿足中斷請求的那幾個條件
四個條件都滿足
那四個必要條件都滿足
那麼這個中斷一定就響應嗎
不一定
遇到這三種情況的話
肯定不會響應
第一種情況
大家都明白
同級和更高級的中斷能夠處理
那不會響應你
第二種呢
是你正在執行這條指令是個長指令
每到這個指令的最後一個機器週期執行完
當然不會執行你現在的中斷
響應你這個中斷
要保持要保證啊
當前執行這條指令的完整性
一定要把它執行完
第三種情況呢
執行RTI或者是訪問IEIP的指令
這時候一定也不會馬上響應
他要去再執行一條指令啊
回過頭來才能響應你這個中斷請求
是吧
那麼大家注意
如果真是這三種情況
這時候會出現什麼情況
那CPU就會丟棄
中斷查詢結果了
你剛纔我一查有中斷請求
那四個條件都滿足
但是這時候就把它丟棄掉了
就是認爲我不能響應你這個中斷請求
所以這個中斷查詢結果就丟棄掉
也就不能對你中斷請求馬上進行響應
所以大家一定要注意
所以剛纔呢
有兩個問題大家一定要牢記
就是一箇中斷請求要能夠被響應
他必須滿足到四個條件
還有一個比較重要的呢
就是說當一箇中斷員的中斷請求
那四個條件都滿足的話
那麼能不能馬上就響應
那還要看出沒出現這三種情況
好
休息一會
