中斷是為使單片機具有對外部或內部隨機發(fā)生的事件進行處理而設置的。51單片機有5種中斷源,即有5種對應的情況發(fā)生時會使單片機去處理中斷程序(中斷函數(shù))。
此篇主要整理定時器中斷筆記。采用定時器中斷會涉及中斷寄存器,定時器/計數(shù)器相關寄存器(TCON,TMOD),中斷函數(shù)等知識點。
其中,中斷寄存器,定時器/計數(shù)器相關寄存器本身或者相關位用來做初始化,中斷函數(shù)的內容主要是體現(xiàn)發(fā)生中斷后所需要的操作(在中斷函數(shù)內寫代碼)。
1.中斷允許寄存器IE
圖1.中斷寄存器IE
中斷寄存器用來設定各個中斷源的打開和關閉,IE在特殊功能寄存器中,字節(jié)地址為A8H,位地址(由低位到高位)分別是A8H~AFH,該寄存器運行位尋址,即可對該寄存器的每一位進行單獨操作。單片機復位時IE全部被清零。下面列舉各位的在不同狀態(tài)下的具體含義:
EA-------全局中斷允許位
EA = 1,打開全局中斷控制,在此條件下由各個中斷控制位(TCON寄存器中的TRn位)控制相應中斷的打開和關閉。
EA = 0,關閉全部中斷。
-- 無效位
ET2--定時器/計數(shù)器2中斷允許位
ET2 = 1,打開T2中斷。
ET2 = 0,關閉T2中斷。
ES--串行口中斷允許位
ES = 1,打開串行口中斷。
ES = 0,關閉串行口中斷。
ET1--定時器/計數(shù)器中斷允許位
ET1 = 1,打開T1中斷。
ET1 = 0, 關閉T1中斷。
EX1--外部中斷1中斷允許位
EX1 = 1,打開外部中斷1中斷。
EX1 = 0,關閉外部中斷1中斷。
ET0--定時器/計數(shù)器0中斷允許位
ET0 = 1, 打開T0中斷。
ET0 = 0,關閉T0中斷。
EX--外部中斷0中斷允許位
EX0 = 1,打開外部中斷0中斷。
EX0 = 0,關閉外部中斷0中斷。
2.定時器/計數(shù)器相關寄存器(TMOD,TCON)
定時器/計數(shù)器工作方式寄存器(TMOD)
圖2.定時器/計數(shù)器工作方式寄存器
定時器/計數(shù)器工作方式寄存器在特殊功能寄存器中,字節(jié)地址為89H,不能位尋址。TMOD用來確定定時器的工作方式及功能選擇。單片機復位時TMOD全被被清零。下面介紹各位在不同值下的含義:
GATE --門控制位。
GATE = 0,定時器/計數(shù)器啟動與停止僅受TCON寄存器中TRn(n = 0, 1)來控制。
GATE = 1,定時器/計數(shù)器啟動與停止由TCON寄存器中的TRn(n=0, 1)和外部中斷引腳(INT0或INT1)的電平狀態(tài)來共同控制。
C/T`--定時器模式和計數(shù)器模式選擇位。
C/T` = 1,為計數(shù)器模式;C/T` = 0,為定時器模式。
M1M0--工作方式選擇位(見下表)
圖3.定時器/計數(shù)器的4中工作方式
定時器/計數(shù)器控制寄存器TCON
定時器/計數(shù)器控制寄存器在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低到高)分別為88H~8FH,該寄存器可進行位尋址。TCON寄存器用來控制定時器啟,停,標志寄存器溢出和中斷情況。單片機復位時TCON全部被清零。各位被賦不同值的含義如下:
圖4.定時器/計數(shù)器控制寄存器TCON
TF1--定時器1溢出標志位
當定時器1計滿溢出時,由硬件使TF1置1,并申請中斷。進入中斷程序后由硬件自動清零。如使用定時器中斷,則該位不用人為操作;但如用軟件查詢方式,當查詢到該位為1時,需用軟件清零。
TR1--定時器1運行控制位
由軟件清0關閉定時器1。當GATE = 1,且INT1為高電平時,TR1置1啟動定時器1;當GATE = 0時,TR1置1時即可啟動定時器1.
TF0--定時器0溢出標志位,功能和操作方式和TF1相同。
TR0--定時器0運行標志位,其功能和操作方式同TR1。
IE1--外部中斷1請求標志
當IT1 = 0,時為電平觸發(fā)方式,每個機器周期的S5P2采樣INT1引腳;若INT1引腳為低電平,則置1,否則IE1清0。
當IT1 = 1,INT1為跳變沿觸發(fā)方式,當?shù)谝粋€機器周期采樣到INT1為低電平時,則IE1置1。IE1=1時,表示外部中斷1正在向CPU申請中斷。當CPU響應中斷,轉向中斷服務程序時,該位由硬件清0.
IT1--外部中斷1觸發(fā)方式選擇位
IT1= 0,為電平觸發(fā)方式,引腳INT1上低電平有效。
IT1 = 1,為跳變沿觸發(fā)方式,引腳INT1上的電平從高到低的負跳變有效。
IE0--外部中斷0請求標志,其功能及操作方式同IE1。
IT0--外部中斷0觸發(fā)方式選擇位,其功能及操作方式同IT1。
51單片機中斷系統(tǒng)
第一、什么可經(jīng)引起中斷,生活中很多事件能引起中斷:有人按了門鈴了,電話鈴響了,你的鬧鐘鬧響了,你燒的水開了…。等等諸如此類的事件,我們把能引起中斷的稱之為中斷源,單片機中也有一些能引起中斷的事件,8031中一共有5個:兩個外部中斷,兩個計數(shù)/定時器中斷,一個串行口中斷。
第二、中斷的嵌套與優(yōu)先級處理:設想一下,我們正在看書,電話鈴響了,同時又有人按了門鈴,你該先做那樣呢?如果你正是在等一個很重要的電話,你一般不會去理會門鈴的,而反之,你正在等一個重要的客人,則可能就不會去理會電話了。如果不是這兩者(即不等電話,也不是等人上門),你可能會按你常常的習慣去處理??傊@里存在一個優(yōu)先級的問題,單片機中也是如此,也有優(yōu)先級的問題。優(yōu)先級的問題不僅僅發(fā)生在兩個中斷同時產生的情況,也發(fā)生在一個中斷已產生,又有一個中斷產生的情況,比如你正接電話,有人按門鈴的情況,或你正開門與人交談,又有電話響了情況??紤]一下我們會怎么辦吧。
第三、中斷的響應過程:當有事件產生,進入中斷之前我們必須先記住現(xiàn)在看書的第幾頁了,或拿一個書簽放在當前頁的位置,然后去處理不一樣的事情(因為處理完了,我們還要回來繼續(xù)看書):電話鈴響我們要到放電話的地方去,門鈴響我們要到門那邊去,也說是不一樣的中斷,我們要在不一樣的地點處理,而這個地點常常還是固定的。計算機中也是采用的這種辦法,五個中斷源,每個中斷產生后都到一個固定的地方去找處理這個中斷的程序,當然在去之前首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來的地方繼續(xù)往下執(zhí)行程序。具體地說,中斷響應能分為以下幾個步驟:1、保護斷點,即保存下一將要執(zhí)行的指令的地址,就是把這個地址送入堆棧。2、尋找中斷入口,根據(jù)5個不一樣的中斷源所產生的中斷,查找5個不一樣的入口地址。以上工作是由計算機自動完成的,與編程者無關。在這5個入口地址處存放有中斷處理程序(這是程序編寫時放在那兒的,如果沒把中斷程序放在那兒,就錯了,中斷程序就不能被執(zhí)行到)。3、執(zhí)行中斷處理程序。4、中斷返回:執(zhí)行完中斷指令后,就從中斷處返回到主程序,繼續(xù)執(zhí)行。究竟單片機是怎么樣找到中斷程序所在位置,又怎么返回的呢?我們稍后再談。
MCS-51單片機中斷系統(tǒng)的結構:
5個中斷源的符號、名稱及產生的條件如下。
INT0:外部中斷0,由P3.2端口線引入,低電平或下跳沿引起。
INT1:外部中斷1,由P3.3端口線引入,低電平或下跳沿引起。
T0:定時器/計數(shù)器0中斷,由T0計滿回零引起。
T1:定時器/計數(shù)器l中斷,由T1計滿回零引起。
TI/RI:串行I/O中斷,串行端口完成一幀字符發(fā)送/接收后引起。
整個中斷系統(tǒng)的結構框圖見下圖一所示。
51單片機擴展中斷的四種方法
一、采用硬件請求和軟件查詢的方法:
這種方法是:把各個中斷源通過硬件“或非(高有效,如CD4002)”(與,低有效)門引入到單片機外部中斷源輸入
端(INT0或INT1),同時再把外部中斷源送到單片機的某個輸入輸出端口,這
樣當外部中斷時,通過“或非”(與)門引起單片機中斷,在中斷服務程序中再通
過軟件查詢,進而轉相應的中斷服務程序。顯然,這種方法的中斷優(yōu)先級取決于
軟件查詢的次序。其硬件連接和軟件編程如下:
Void zhongduan (void) interrupt 0 using 3 //中斷函數(shù)
{
EX0=0;//關中斷
If(P0_0=1) { *****}//中斷查詢
If(P0_1=1) { *****}//中斷查詢
If(P0_2=1) { *****}//中斷查詢
EX0=1;開中斷
}
二、用普通二極管構成中斷選擇
擴展的8個外部中斷源均通過二極管向I N T(x=0或I)請求中斷。當某個外部中斷源請求中斷服務時輸出低電平,單片機的I NT 經(jīng)二極管接地電平,單片機滿足響應外部中斷(I N T)請求條件,響應中斷,程序立即轉向I NT 對應的中斷入口地址處開始執(zhí)行中斷服務程序,通過軟件查詢PI.0~P1.7口外中斷源的狀態(tài),以識別提出請求的外擴中斷源,并轉向中斷服務程序為其服務,其查詢順序即為外部擴展中斷源的中斷優(yōu)先級順序。在圖中,是選用PI.0~PI.7作為外擴中斷源請求的狀態(tài)信息輸入端口。
有點類似第一種方法。
三、用定時器/計數(shù)器作外部中斷
單片機的定時器/計數(shù)器是一個加一計數(shù)器,每當計數(shù)輸入端有一個“1—0”的負
跳變時,計數(shù)器加一,當加一計數(shù)器溢出時,就向CPU發(fā)出中斷,利用這個特性
來擴展中斷的方法是:首先把定時器/計數(shù)器設置成計數(shù)方式,并預置滿值,把
外部中斷源輸入到P3口第4引腳或第5引腳(計數(shù)器輸入端),這樣就可以利用
定時器/計數(shù)器作為單片機外部中斷了。注意這種方法的中斷服務的入口地址應
在000BH或001BH。
四、用專用中斷擴展芯片8259A
8259A是可編程中斷控制接口,單片機控制八級中斷。在系統(tǒng)中還可采用級聯(lián)方式,一個主片可級聯(lián)8個從片,構成64級中斷處理系統(tǒng)。
這樣在程序小于8K的情況,就可以用一片單片機實現(xiàn)了,而不需要用兩片單片機控制,還要進行單片機點對點通訊。
評論
查看更多