MCS-51中斷系統:5個中斷源(兩個外部中斷, 兩個定時器, 一個串口),2個優先級
中斷相關概念
中斷:當CPU正在處理某件事情時,單片機外部或內部發生的某一緊急事件請求CPU立即去處理,于是,CPU暫時中止當前的工作,轉去處理這個緊急事件,待處理完畢后,再回到原來被中止的地方,繼續原來的工作。
中斷過程
中斷發生:CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理;
中斷響應和中斷服務:CPU暫時中斷當前的工作,轉去處理事件B(B的優先級要高于A);
中斷返回:待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A ;
中斷源(中斷請求源):能夠向CPU發出中斷申請的部件。
中斷系統結構
外部中斷0和1:低電平或者脈沖下降沿時產生中斷請求;
定時器/計數器0和1:計數值由FF變為00時產生中斷請求;(定時功能:計數脈沖來源于片內;計數功能:計數脈沖來源于片外);
串行口:發送或者接受1字節數據時產生中斷請求;
中斷控制
4個特殊功能寄存器來實施中斷控制: ? 中斷允許寄存器 IE ? 中斷優先級寄存器 IP ? 定時/計數器及外部中斷控制寄存器 TCON ? 串口控制寄存器 SCON
中斷允許寄存器 IE
EA 中斷允許總控制位。0禁止,1允許。
ES 串行中斷允許控制位。0禁止,1允許。
ET1 定時計數器1中斷允許控制位。0禁止,1允許。
EX1 外部中斷1允許控制位。0禁止,1允許。
ET0 定時計數器0中斷允許控制位。0禁止,1允許。
EX0 外部中斷0允許控制位。0禁止,1允許。
中斷優先級寄存器 IP
PX0 外部中斷0的優先級控制位。1為高,0為低
PT0 定時中斷0的優先級控制位。1為高,0為低
PX1 外部中斷1的優先級控制位。1為高,0為低
PT1 定時中斷0的優先級控制位。1為高,0為低
PS 串行中斷的優先級控制位。1為高,0為低
串行口控制寄存器 SCON
TI:串口發送中斷標志,響應中斷時用軟件將TI標志清零
RI:串口接收中斷標志,響應中斷時用軟件將RI標志清零
定時/計數器的控制寄存器 TCON
外部中斷觸發方式位 IT0、IT1(ITx)
ITx = 0 低電平觸發,響應中斷后IEx不自動清0ITx = 1 脈沖下降沿觸發,響應中斷后IEx自動清0
外部中斷請求0/1的中斷請求標志位IE0、IE1
定時器/計數器T0/T1的溢出中斷請求標志位TF0/TF1(TFx)
啟動T0/T1計數后,從初值加1計數,直到最高位產生溢出時,硬件將TFx置“1”,向CPU請求中斷。 響應中斷后TFx自動清0;
TR0,TR1與中斷無關,僅與定時器/計數器T0/T1有關;
中斷響應
中斷響應就是CPU對中斷源發出的中斷請求做出的響應。
中斷響應條件
CPU開中斷,即中斷允許寄存器IE中的中斷允許總控制位EA = 1;中斷源發出中斷請求;中斷源的中斷允許位為1;沒有同級或者高級的優先級中斷正在執行;
中斷響應的過程
由硬件根據中斷源的類型自動生成一條長調用指令LCALL addr16。CPU執行LCALL addr16。
中斷響應的時間
響應時間在3~8個機器周期之內;最短響應時間:查詢中斷請求標志位(T)+LCALL(2T);
中斷響應的過程
將相應優先級狀態觸發器置1(阻斷后來同級或低級中斷 )執行硬件LCALL指令(PC入棧,中斷服務程序入口址送PC)執行中斷服務程序PS:編寫中斷服務程序注意:中斷服務程序入口存放指令LJMP或AJMP;現場保護與現場恢復。
中斷返回
最后指令為RETI,功能為:
將斷點從堆棧彈送PC,CPU從原斷點繼續執行將相應優先級狀態觸發器清0,恢復原來工作狀態
8051中斷程序設計
中斷服務程序基本流程
關中斷:為了防止此時有高一級的中斷進入,以免現場保護的執行過程被中斷。
現場保護:所謂現場是指中斷時刻單片機中某些寄存器和存儲器單元中的數據或狀態。為了不讓中斷服務程序的執行破壞這數據或狀態,以免中斷返回后影響主程序的運行,需要將他們送入堆棧保存起來。
開中斷:為了允許有更高級的中斷進入。這樣一來,除了現場保護和現場恢復外,中斷處理的過程仍允許中斷嵌套的功能。
中斷處理
關中斷:為了防止此時有高一級的中斷進入,以免現場恢復的執行過程被中斷。
現場恢復:中斷處理結束后,在返回主程序前,把保存的現場的內容從堆棧中彈出,以恢復那些寄存器和存儲單元中的原有內容
開中斷:為了允許有更高級的中斷進入?,F場恢復后,仍允許中斷嵌套的功能。
中斷返回:必須是返回指令RETI。CPU執行完這條指令后,把響應中斷時所置“1”的優先級狀態觸發器清“0”,然后從堆棧中彈出棧頂上的兩個字節的斷點地址送到程序計數器PC,彈出的第一個字節送入PCH,第二個字節送入PCL,CPU從斷點處重新執行被中斷的主程序。
實例
ORG 0000H ;程序開始LJMP START ;= LJMP 1000HORG 0003H ;外部中斷0入口地址
LJMP INTORG 1000H ;主程序入口START: MOV P1, #0AAH ; #0AAH=10101010BSETB EX0 ;允許外部中斷0SETB PX0 ;設置外部中斷0為高優先級SETB IT0 ;設置外部中斷0為脈沖下降沿觸發SETB EA ;開中斷SJMP $ ;原地跳轉,等待中斷
INT: CLR EA ;關中斷PUSH PSW ;現場保護PUSH ACC ;SETB EA ;開中斷
CPL A ;對累加器A按位取反MOV P1, A ;累加器A值送P1端口
CLR EA ;關中斷POP ACC ;現場保護POP PSW ;SETB EA ;開中斷RETI ;```
-
中斷系統
+關注
關注
1文章
96瀏覽量
61070 -
MCS-51單片機
+關注
關注
5文章
96瀏覽量
19873
原文標題:MCS-51 單片機的中斷系統
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論