中斷可以用下面的例子理解
工程師A在自己的位置做著自己的工作(寫代碼),工程師B有個問題需要請教工程師A,于是工程師B就會跑過來跟工程A請教。這時工程師A的寫代碼的工作會被打斷,開始回答工程B的問題,解答完問題后,工程師A又開始愉快的寫代碼。從工程師B打斷工程師A,到工程師A繼續寫代碼這者整個過程叫中斷。
1)工程師B的問題,稱為中斷源
2)工程師A停止當前的工作,準備解答稱為:中斷響應;
3)工程師A解答問題的過程稱為:中斷服務程序;
4)工程師A解答完繼續回到寫代碼的狀態稱為:中斷返回。
中斷系統
引起MCS-51中斷的中斷源有幾種呢?從以下的中斷系統中可以看到有5種中斷請求源,它們分別是EX0、ET0、EX1、ET1、ES 對應著單片機的P3^0~P3^5引腳,相關的寄存器有中斷允許寄存器IE、中斷優先級控制寄存器IP、定時器/計數器控制寄存器TCON、串行口控制寄存器SCON 。
IE寄存器:
寄存器地址為A8H,單片機復位后數值為00H;寄存器里面有8位,可以被位尋址
當需要某中斷源需要進入中斷服務,需要開總中斷將EA位置1,并且將對應的中斷源置1(如果是串口需要將ES置1;如果是外部中斷0需要EX0置1)
IP寄存器
寄存器地址為B8H,單片機復位后數值為00H;寄存器里面有8位,可以被位尋址
IP寄存器將對應的中斷源置1,則該中斷源被設置為高優先級。
在中斷系統中,不管高優先中斷等級或者是低優先級中斷等級,在它們里面都是按照一定的優先級進行排列的進行響應的。這種優先級稱之為自然優先級。詳細可以參考上面的中斷系統圖
自然優先級從高到低:外部中斷0->定時器/計數器T0中斷->外部中斷1->定時器/計數器T1中斷->串行中斷。
TCON寄存器
寄存器地址為88H,單片機復位后數值為00H;寄存器里面有8位,可以被位尋址
外部中斷可以設置兩種中斷方式(低電平或負跳變),當檢測到有中斷(低電平或負跳變),中斷標志位被置1,從而判斷中斷優先級,進而中斷服務處理。
定時器/計數器在設定計數值后,開機進行計數。當計數溢出時,會將TF0或者TF1置1。
除外部中斷標志0外,其他的都會由硬件自動清零。
注:
TCON還有T0與TR1兩位,這兩位是控制定時器/計數器開始計數,在后面的定時器中會詳細說明。
TR1:為1是定時器T1開始計數;0時不計數。
TR0:為1是定時器T0開始計數;0時不計數。
SCON寄存器
寄存器地址為98H,單片機復位后數值為00H;寄存器里面有8位,可以被位尋址
在串行通訊中,串行發送與接收完一幀數據后,硬件將標志位置1,向CPU申請中斷,CPU響應中斷是,并不能直接標志位置0,需要中斷服務程序將它們置0。
TI與RI接到ES中斷源上,因此它們是同一個中斷源。
中斷向量
為了響應不同的中斷,將中斷服務函數的入口地址放在某個地址上,我們將這個地址成為中斷向量。
在C51中編譯器中,增加了一個擴展字 interrupt,它是一個函數的選項,當函數添加上這個選項定義成中斷函數。中斷函數的一般形式如下:
void 函數名() [interrupu n] [using n]
interrupt后面的n為中斷號
using 后面的n為工作寄存器組(8051中有4組寄存器組->0~3組)
總結:
1)C51中有5個中斷源(EX0、ET0、EX1、ET1、ES),兩個優先等級,其中TX與RX共用一個中斷源ES;
2)相關的寄存器有中斷允許寄存器IE、中斷優先級控制寄存器IP、定時器/計數器控制寄存器TCON、串行口控制寄存器SCON 。
3)C51對函數進行擴展添加interrput,該關鍵字用于將函數定義成中斷服務函數,對應著中斷向量里面內容。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
51單片機
+關注
關注
274文章
5702瀏覽量
123492 -
中斷
+關注
關注
5文章
898瀏覽量
41471 -
中斷系統
+關注
關注
1文章
96瀏覽量
61015
發布評論請先 登錄
相關推薦
評論