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