版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目六中斷的應(yīng)用
6.1項(xiàng)目基本技能
6.2項(xiàng)目基本知識6.3技能拓展6.4互動環(huán)節(jié)6.5習(xí)題
任務(wù)1LED控制電路
1.任務(wù)要求系統(tǒng)硬件設(shè)計(jì)如圖6-1所示,要求每按動按鍵S2一次,發(fā)光二極管LED改變一次亮滅狀態(tài)。6.1項(xiàng)目基本技能
2.程序設(shè)計(jì)
1)設(shè)計(jì)方法通過按鍵信號輸入觸發(fā)中斷,P1.0輸出高低電平控制LED亮滅狀態(tài)。中斷程序按以下步驟完成:
(1)中斷方式的選擇。外部中斷可用電平觸發(fā),也可選擇邊沿觸發(fā)。當(dāng)采用電平觸發(fā)方式時,在程序中應(yīng)設(shè)置IT0為0。硬件上,在引腳接低電平,單片機(jī)就能采樣到中斷請求信號,硬件自動置IE0為1,為避免一次按鍵引起多次中斷響應(yīng),應(yīng)在中斷返回前從硬件上撤消中斷請求信號(即釋放按鍵),這可以通過在中斷返回前用軟件等待按鍵釋放來完成。
當(dāng)采用邊沿觸發(fā)方式時,在程序中應(yīng)設(shè)置IT0為1。硬件上,在引腳有負(fù)脈沖產(chǎn)生,只要中斷請求負(fù)脈沖的寬度大于1個機(jī)器周期,單片機(jī)就能采樣到中斷請求信號。通過按一次鍵產(chǎn)生一次負(fù)跳變,從而產(chǎn)生一次中斷請求。單片機(jī)將采樣到的信號鎖存到中斷請求標(biāo)志寄存器中,硬件自動置IE0為1。即使單片機(jī)暫時不響應(yīng),這個標(biāo)志也不丟失,只有在外部中斷響應(yīng)之后,硬件才將IE0清除。圖6-1LED控制電路
(2)開放中斷。有了中斷請求不一定能夠產(chǎn)生中斷,還必須利用程序?qū)⒏鱾€“允許/禁止中斷”開關(guān)設(shè)置成開放狀態(tài)。51單片機(jī)的中斷控制分為兩級,一級是針對不同中斷源的,比如開放外部中斷0只要將EX0置1即可;另一級是總開關(guān),必須用指令將總允許標(biāo)志位EA置1,這些均可在中斷程序初始化中進(jìn)行。
(3)中斷服務(wù)程序的位置。外部中斷0的入口地址是0003H,而中斷服務(wù)程序則可放在程序存儲器的任何位置,在編寫匯編語言代碼時須在0003H單元放一條跳轉(zhuǎn)指令,指向中斷服務(wù)程序的入口地址。中斷服務(wù)程序最后一條指令必須是RETI指令,以便在中斷服務(wù)程序執(zhí)行完后返回到被中斷的主程序。編寫C語言代碼則只需聲明中斷服務(wù)函數(shù)。
2)流程圖程序參考流程如圖6-2所示。其中圖6-2(a)為主程序流程圖,圖6-2(b)為中斷服務(wù)子程序流程圖。圖6-2程序流程圖
3)指令代碼
(1)編寫匯編語言代碼。采用電平觸發(fā)方式,用匯編語言編寫的指令代碼如下:;;;;程序名:A6_11.ASM;;;;功能:外部中斷0電平觸發(fā)方式控制燈的狀態(tài)
ORG 0000H AJMP MAIN ORG 0003H ;中斷入口
AJMP IR0 ORG 0100H ;主程序MAIN: MOV SP,#40H ;設(shè)棧底
SETB EX0 ;中斷允許
CLR IT0 ;低電平觸發(fā)方式
SETB EA
;開中斷HERE:SJMP HERE ;等待中斷
ORG 0400H ;中斷服務(wù)程序IR0: CPL P1.0 ;改變LED的亮滅WAIT:JNB P3.2,WAIT ;查詢P3.2引腳,等待按鍵釋放
RETI ;中斷返回采用邊沿觸發(fā)方式,用匯編語言編寫的指令代碼如下:;;;;程序名:A6_12.ASM;;;;功能:外部中斷0邊沿觸發(fā)方式控制燈的狀態(tài)
ORG 0000H ;復(fù)位入口
AJMP MAIN ;跳轉(zhuǎn)到主程序
ORG 0003H ;中斷入口
AJMP IR0;響應(yīng)中斷,跳轉(zhuǎn)到中斷服務(wù)程序
ORG 0100H ;主程序開始MAIN:MOV SP,#40H ;設(shè)棧底
SETB IT0 ;設(shè)置邊沿觸發(fā)方式
SETB EX0 ;中斷允許
SETB EA ;CPU開中斷HERE:
SJMP HERE ;等待中斷
ORG 0400H ;中斷服務(wù)程序IR0:CPL P1.0 ;改變LED亮滅
RETI ;中斷返回
WAIT:JNB P3.2,WAIT指令說明:若P3.2=0,跳轉(zhuǎn)到WAIT處,即原地踏步;若P3.2=1,程序順序向下執(zhí)行。
(2)編寫C語言代碼。采用電平觸發(fā)方式,用C語言編寫的指令代碼如下:采用邊沿觸發(fā)方式,用C語言編寫的指令代碼如下:
while(P3_0==0);語句說明:查詢P3.0引腳是否為低電平,若為低電平執(zhí)行空語句,再查詢P3.0引腳的狀態(tài),若再為低電平,繼續(xù)執(zhí)行空語句,循環(huán)往復(fù),直到P3.0引腳為高電平,返回主函數(shù)體中。
P1=~P1;語句說明:上電復(fù)位后,P1=11111111B,第一次執(zhí)行語句后,P1=00000000B。任務(wù)2航標(biāo)燈控制電路
1.任務(wù)要求用單片機(jī)的定時器與中斷功能控制一個“航標(biāo)燈”,黑夜時發(fā)光二極管按指定頻率閃爍(如:亮2s,滅2s,循環(huán));白天時發(fā)光二極管不亮。
2.硬件電路設(shè)計(jì)本任務(wù)選用光敏電阻來調(diào)節(jié)電路中的高低電平,光敏電阻如圖6-3所示,是一個光感應(yīng)器件,能隨外部光強(qiáng)改變電阻的阻值。當(dāng)外部光照強(qiáng)時電阻的阻值減小,當(dāng)外部光照弱時電阻的阻值增大。電路原理圖如圖6-4所示,由光敏電阻和電位器組成分壓電路,白天和夜晚光照強(qiáng)度不同,光敏電阻阻值發(fā)生變化,從而使P3.2引腳呈現(xiàn)高電平或低電平,P3.2引腳是的輸入端口,若為低電平,觸發(fā)中斷。圖6-3光敏電阻圖6-4航標(biāo)燈控制電路
3.軟件設(shè)計(jì)
1)設(shè)計(jì)方法主程序控制白天滅燈,黑夜時外部中斷0中斷服務(wù)子程序?qū)崿F(xiàn)LED燈亮2s,滅2s,如此循環(huán)。延時子程序采用定時器T1,方式1,查詢方式定時50ms,循環(huán)10次,從而獲取2秒的延時時間。
2)流程圖主程序及中斷服務(wù)子程序的流程圖如圖6-5(a)和圖6-5(b)所示:圖6-5程序流程圖
3)指令代碼
(1)編寫匯編語言源程序代碼,程序如下:
中斷初始化程序中中斷允許既可以按位來操作也可以按字節(jié)操作。如按字節(jié)操作指令:
MOVIE,#81H可以寫成按位操作指令:
SETBEA
SETBEX0(2)編寫C語言源程序代碼,程序如下:
while(!TF0);語句說明:溢出標(biāo)志位TF0若為0,則!TF0為1,滿足while語句循環(huán)條件,執(zhí)行空語句,若TF0=1,退出循環(huán)。當(dāng)定時時間未到,溢出標(biāo)志位TF0始終為0,則反復(fù)執(zhí)行空語句,無限循環(huán),直到定時器0定時溢出,TF0=1為止。4.電路板制作
1)航標(biāo)燈電路元件清單所用器件如表6-1所示。表6-1航標(biāo)燈電路元件清單
2)航標(biāo)燈控制電路的面包板制作航標(biāo)燈控制電路面包板實(shí)物如圖6-6所示。圖6-6航標(biāo)燈控制電路
3)調(diào)試運(yùn)行單片機(jī)P1.0輸出高低電平控制三極管的導(dǎo)通與截止,從而控制LED燈的亮滅,所以要正確識別三極管的發(fā)射極、基極、集電極,才能保證連接電路正確。P3.2引腳是作為外部中斷0的中斷源端口,P3.2為低電平有中斷請求,來模擬夜晚到來。P3.2引腳的高低電平需要通過光敏電阻和電位器同時來調(diào)節(jié)。
將目標(biāo)代碼文件A6-2.hex或C6-2.hex加載到STC89C51單片機(jī)中,程序運(yùn)用了定時和中斷技術(shù),調(diào)試程序時,可將斷點(diǎn)分別設(shè)置在中斷入口處、子程序內(nèi)部和中斷返回處等觀測點(diǎn)。然后通過觀察程序是否運(yùn)行到斷點(diǎn)所在的位置來判斷程序運(yùn)行控制過程是否正確。任務(wù)3定時器中斷應(yīng)用
1.任務(wù)要求在項(xiàng)目五任務(wù)1中,霓虹燈的控制使用定時器T0,工作方式1,查詢方式實(shí)現(xiàn)1s的延時,本任務(wù)采用定時器中斷方式來實(shí)現(xiàn)。
2.硬件電路設(shè)計(jì)參見項(xiàng)目五任務(wù)1。
3.軟件設(shè)計(jì)
1)編寫匯編語言源程序代碼。采用定時器T0中斷定時50ms,用R3作50ms計(jì)數(shù)單元,在此基礎(chǔ)上再用08H位作1s計(jì)數(shù)溢出標(biāo)志,主程序從0100H開始,中斷服務(wù)程序名為CONT??稍O(shè)計(jì)源程序如下:;;;;程序名:A6_3.ASM;;;;功能:定時器T0中斷方式實(shí)現(xiàn)延時1s的霓虹燈控制ORG 0000H ;程序入口AJMP 0100H ;指向主程序ORG 000BH ;定時器T0中斷入口AJMP CONT ;指向中斷服務(wù)程序ORG 0100HMAIN:MOV
TMOD,#01H;設(shè)置定時器T0為工作方式1定時
MOV TH0,#3CH ;置50ms定時初值
MOV TL0,#0B0H
SETB
ET0 ;允許定時器T0中斷
SETB EA ;開中斷
SETB TR0
;啟動定時器T0
CLR 08H
;清1s計(jì)滿標(biāo)志位
MOV R3,#20 ;置50ms循環(huán)初值DISP: MOV R2,#7 MOV A,#0FEHNEXT: MOV P1,AHERE1: JNB 08H,HERE1
;查詢1s時間到否 CLR 08H ;1s時間到,清標(biāo)志位 RL A DJNZ R2,NEXT MOV R2,#7NEXT1: MOV P1,AHERE2: JNB 08H,HERE2
;查詢1s時間到否 CLR 08H RR A DJNZ R2,NEXT1 AJMP DISPCONT:MOV TH0,#3CH ;重置50ms定時初值 MOV TL0,#0B0H DJNZ R3,EXIT ;判1s定時到否 MOV R3,#20 ;置50ms循環(huán)初值
SETB 08H ;標(biāo)志位置1 EXIT: RETI END
定時器采用查詢工作方式,在1s定時程序期間一直占用CPU;采用中斷工作方式,在1s定時程序期間CPU可處理其他指令,從而充分發(fā)揮定時器/計(jì)數(shù)器的功能,大大提高了CPU的效率。
2)編寫C語言源程序代碼設(shè)置flag作為延時1s的標(biāo)志位,定時器T0定時50ms產(chǎn)生1次中斷,count變量減1計(jì)數(shù),中斷20次,count減到0,延時1s時間到,flag由中斷函數(shù)置1。主函數(shù)查詢flag是否為1,來判斷1s時間到否。源程序如下:
while(flag==0);語句說明:當(dāng)flag=0時,循環(huán)執(zhí)行空語句,flag=1時,退出循環(huán)體,向下執(zhí)行語句。此語句也可簡寫為“while(!flag);”。選擇變量類型時應(yīng)盡量選用無符號型,可以減少測試符號的額外操作,可以提高代碼效率。
4.電路板制作
1)準(zhǔn)備器件參照項(xiàng)目五任務(wù)1。
2)用面包板連接電路參照項(xiàng)目五任務(wù)1。
3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A5_1.ASM或C5_1.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里,接通電路板電源,可觀察到霓虹燈顯示效果。知識點(diǎn)1單片機(jī)中斷系統(tǒng)
1.單片機(jī)中斷系統(tǒng)
1)中斷的概念中斷是指計(jì)算機(jī)暫時停止源程序的執(zhí)行轉(zhuǎn)而為外部設(shè)備服務(wù),并在服務(wù)完以后自動返回源程序執(zhí)行的過程。6.2項(xiàng)目基本知識
一個資源(CPU)面對多項(xiàng)任務(wù),但由于資源有限,因此就可能出現(xiàn)資源競爭的局面,即幾項(xiàng)任務(wù)來爭奪一個CPU。而中斷技術(shù)就是解決資源競爭的有效方法,采用中斷技術(shù)可以使多項(xiàng)任務(wù)共享一個資源,所以中斷技術(shù)實(shí)質(zhì)上就是一種資源共享技術(shù)。
2)引入中斷技術(shù)的優(yōu)點(diǎn)
(1)提高了CPU的工作效率,實(shí)現(xiàn)了CPU和外部設(shè)備的并行工作。
(2)實(shí)現(xiàn)實(shí)時控制。所謂實(shí)時控制,就是要求計(jì)算機(jī)能及時地響應(yīng)被控對象提出的分析、計(jì)算和控制等請求,使被控對象保持在最佳工作狀態(tài),以達(dá)到預(yù)定的控制效果。由于這些控制參數(shù)的請求都是隨機(jī)發(fā)出的,而且要求單片機(jī)必須作出快速響應(yīng)并及時處理。對此,只有靠中斷技術(shù)才能實(shí)現(xiàn)。
(3)便于突發(fā)故障(如硬件故障、運(yùn)算錯誤、電源掉電、程序故障等)的及時發(fā)現(xiàn),提高系統(tǒng)可靠性。
(4)能使用戶通過鍵盤發(fā)出請求,隨時可以對運(yùn)行中的計(jì)算機(jī)進(jìn)行干預(yù)。
3)中斷源向CPU發(fā)出中斷請求的來源稱之為中斷源。MCS-51系列單片機(jī)是一個多中斷源的單片機(jī),以STC89C51單片機(jī)為例,共有5個中斷源,外部中斷源2個,定時中斷源2個和串行中斷源1個。
(1)外部中斷。外部中斷是由外部信號引起的,共有2個中斷源,即外部中斷0和外部中斷1。中斷請求信號分別由引腳(P3.2)和(P3.3)引入。外部中斷請求有兩種信號方式,即電平方式和脈沖方式??赏ㄟ^設(shè)置有關(guān)控制位進(jìn)行定義。電平方式的中斷請求是低電平有效的,只要單片機(jī)在中斷請求引入端上采樣到有效的低電平時,就激活外部中斷。脈沖方式的中斷請求則是脈沖下降沿有效的,CPU在每個機(jī)器周期對中斷請求引入端進(jìn)行采樣,如前一次為高電平,后一次為低電平,即為有效中斷請求。
(2)定時中斷。定時中斷是為滿足定時或計(jì)數(shù)的需要而設(shè)置的。當(dāng)計(jì)數(shù)結(jié)構(gòu)發(fā)生計(jì)數(shù)溢出時,即表明定時時間到或計(jì)數(shù)值已滿。請求是在單片機(jī)芯片內(nèi)部發(fā)生的。
(3)串行中斷。串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串行口接收或發(fā)送完一組串行數(shù)據(jù)時,就產(chǎn)生一個中斷請求。請求是在單片機(jī)芯片內(nèi)部自動發(fā)生的。
2.中斷控制
1)定時器控制寄存器(TCON)該寄存器用于保存外部中斷請求以及定時器的計(jì)數(shù)溢出。寄存器的內(nèi)容及位地址如表6-2所示。表6-2定時器控制寄存器TCON格式
(1)?IE0和IE1:外中斷請求標(biāo)志位。當(dāng)CPU采樣到()端出現(xiàn)有效中斷請求時,IE0(IE1)位由硬件置“1”。在中斷響應(yīng)完成后轉(zhuǎn)向中斷服務(wù)時,再由硬件自動清“0”。
(2)?IT0和IT1:外中斷請求觸發(fā)方式控制位。IT0(IT1)=1脈沖觸發(fā)方式,脈沖下降沿有效;IT0(IT1)=0電平觸發(fā)方式,低電平有效。IT0和IT1控制位由軟件置“1”或清“0”。
(3)?TF0和TF1:計(jì)數(shù)溢出標(biāo)志位。當(dāng)計(jì)數(shù)器產(chǎn)生計(jì)數(shù)溢出時,相應(yīng)的溢出標(biāo)志位由硬件置“1”。當(dāng)轉(zhuǎn)向中斷服務(wù)時,再由硬件自動清“0”。計(jì)數(shù)溢出標(biāo)志位的使用有兩種情況:采用中斷方式時,作中斷請求標(biāo)志位來使用;采用查詢方式時,作查詢狀態(tài)位來使用。
2)串行口控制寄存器(SCON)串行口寄存器的內(nèi)容及位地址如表6-3所示。表6-3串行口控制寄存器SCON格式
SCON是串行口控制寄存器,其低兩位TI和RI為串行口發(fā)送中斷標(biāo)志和接收中斷標(biāo)志,其他位請參考項(xiàng)目八內(nèi)容。
(1)?TI:串行口發(fā)送中斷請求標(biāo)志位。當(dāng)發(fā)送完一幀串行數(shù)據(jù)后,由硬件置“1”,在轉(zhuǎn)向中斷服務(wù)程序后,用軟件清“0”。
(2)?RI:串行口接收中斷請求標(biāo)志位。當(dāng)接收完一幀串行數(shù)據(jù)后,由硬件置“1”,在轉(zhuǎn)向中斷服務(wù)程序后,用軟件清“0”。串行中斷請求由TI和RI的邏輯或得到。就是說,無論是發(fā)送標(biāo)志還是接收標(biāo)志,都會產(chǎn)生串行中斷請求。
3)中斷允許控制寄存器(IE)該寄存器地址為0A8H,位地址0AFH~0A8H。寄存器的內(nèi)容及位地址如表6-4所示。表6-4中斷允許控制寄存器IE格式
(1)?EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中斷;EA=1,中斷總允許。總允許后中斷的禁止或允許由各中斷源的中斷允許控制位進(jìn)行設(shè)置。
(2)?EX0(EX1):外部中斷允許控制位。EX0(EX1)=0,禁止外中斷;EX0(EX1)=1,允許外中斷。
(3)?ET0和ET1:定時中斷允許控制位。ET0(ET1)=0,禁止定時中斷;ET0(ET1)=1,允許定時中斷。
(4)?ES:串行中斷允許控制位。ES=0,禁止串行中斷;ES=1,允許串行中斷。
4)中斷優(yōu)先級控制寄存器(IP)
IP寄存器地址為0B8H,位地址為0BFH~0B8H。寄存器的內(nèi)容及位地址如表6-5所示。表6-5中斷優(yōu)先級控制寄存器IP格式
(1)?PX0:外部中斷0優(yōu)先級設(shè)定位;
(2)?PT0:定時中斷0優(yōu)先級設(shè)定位;
(3)?PX1:外部中斷1優(yōu)先級設(shè)定位;
(4)?PT1:定時中斷1優(yōu)先級設(shè)定位;
(5)?PS:串行中斷優(yōu)先級設(shè)定位。上述優(yōu)先級標(biāo)志位為“0”的優(yōu)先級為低;為“1”的優(yōu)先級為高。
5)中斷優(yōu)先級控制原則和控制邏輯
MCS-51單片機(jī)具有兩級優(yōu)先級,具備兩級中斷服務(wù)嵌套的功能。其中斷優(yōu)先級的控制原則是:
(1)低優(yōu)先級中斷請求不能打斷高優(yōu)先級的中斷服務(wù),但高優(yōu)先級中斷請求可以打斷低優(yōu)先級的中斷服務(wù),從而實(shí)現(xiàn)中斷嵌套。
(2)如果一個中斷請求已被響應(yīng),則同級的其他中斷服務(wù)將被禁止,即同級不能嵌套。
(3)如果同級的多個中斷請求同時出現(xiàn),則按CPU查詢次序確定哪個中斷請求被響應(yīng)。其查詢先后次序?yàn)椋和獠恐袛?、定時中斷0、外部中斷1、定時中斷1、串行中斷。
6)中斷初始化與中斷控制寄存器狀態(tài)設(shè)置外中斷初始化共有三項(xiàng)內(nèi)容:中斷總允許、外中斷允許和中斷方式設(shè)定。定時中斷則只有前兩項(xiàng)內(nèi)容,沒有中斷方式控制。知識點(diǎn)2中斷處理過程
1.單片機(jī)中斷系統(tǒng)的結(jié)構(gòu)
MCS-51單片機(jī)中斷系統(tǒng)的結(jié)構(gòu)框圖如圖6-7所示。圖6-7MCS-51單片機(jī)中斷系統(tǒng)結(jié)構(gòu)框圖
如圖6-7所示,中斷系統(tǒng)主要包括以下各功能部件:
1)與中斷有關(guān)的寄存器與中斷有關(guān)的寄存器有4個,分別為中斷標(biāo)志寄存器TCON和SCON、中斷允許控制寄存器IE和中斷優(yōu)先級控制寄存器IP。
2)中斷源中斷源有5個,分別為:外部中斷0請求、外部中斷1請求、T0溢出中斷請求TF0、T1溢出中斷請求TF1、串行口中斷請求RI或TI。
3)中斷標(biāo)志位中斷標(biāo)志位分布在TCON和SCON兩個寄存器中。
4)中斷允許控制位中斷允許控制位分為中斷允許總控制位EA與中斷源控制位,它們集中在IE寄存器中,用于控制中斷的開放和屏蔽。
5)中斷優(yōu)先級控制寄存器
5個中斷源的排列順序由中斷優(yōu)先級控制寄存器IP和自然優(yōu)先級共同確定。
2.中斷處理過程中斷處理過程包括中斷響應(yīng)和中斷處理兩個階段,如圖6-8所示。不同的計(jì)算機(jī)因其中斷系統(tǒng)的硬件結(jié)構(gòu)不同,其中斷響應(yīng)的方式也有所不同。這里介紹MCS-51系列單片機(jī)的中斷過程。圖6-8中斷處理過程流程圖
1)中斷響應(yīng)
(1)中斷響應(yīng)的條件:①有中斷源提出中斷請求;②中斷總允許位EA=1,即CPU開放中斷;③申請中斷的中斷源的中斷允許位為1,即沒有被屏蔽。
MCS-51單片機(jī)的CPU在每個機(jī)器周期采樣各中斷請求標(biāo)志位,如有置位,只要以上條件滿足,且下列三種情況都不存在,那么,在下一機(jī)器周期CPU響應(yīng)中斷。否則,采樣的結(jié)果被取消。這三種情況是:①?CPU正在處理同級或高級優(yōu)先級的中斷。②現(xiàn)行的機(jī)器周期不是所執(zhí)行指令的最后一個機(jī)器周期。③正在執(zhí)行的指令是返回或訪問IE、IP指令。CPU在執(zhí)行返回或訪問IE、IP的指令后,至少需要再執(zhí)行一條其他指令后才會響應(yīng)中斷請求。
(2)中斷響應(yīng)。中斷響應(yīng)將當(dāng)前PC值送入堆棧SP中,也就是將CPU本來要取用的指令地址暫存到堆棧中保護(hù)起來,以便中斷結(jié)束時,CPU能找到原來程序的斷點(diǎn)處,繼續(xù)執(zhí)行下去。這一措施由中斷系統(tǒng)自動保存完成。保護(hù)現(xiàn)場時關(guān)閉中斷,以防其他中斷信號干擾。此時,中斷系統(tǒng)關(guān)閉該中斷源接收電路,其他中斷請求均被禁止。這一措施需用指令完成。
按中斷源入口地址進(jìn)入中斷服務(wù)程序,51單片機(jī)5個中斷源所對應(yīng)的中斷類型號和中斷服務(wù)程序入口地址為: 中斷源 n 入口地址 外部中斷0 0 0003H
定時/計(jì)數(shù)器0 1 000BH
外部中斷1 2 0013H
定時/計(jì)數(shù)器1 3 001BH
串行口 4 0023H
2)中斷處理
(1)中斷服務(wù)程序。在中斷響應(yīng)后,單片機(jī)自動調(diào)用的子程序稱為中斷服務(wù)程序。采用匯編語言程序設(shè)計(jì),使用中斷時,因中斷服務(wù)程序可放在程序存儲器的任何位置,通常在中斷入口地址處存放一條絕對跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序的起始地址上去。中斷服務(wù)程序最后一條指令必須是RETI指令。
C51編譯器支持在C源程序中直接以函數(shù)形式編寫中斷服務(wù)程序。常用的中斷函數(shù)定義語法如下:
void函數(shù)名()interruptn其中n為中斷類型號,C51編譯器允許0~31個中斷,n取值范圍為0~31。
(2)中斷返回。計(jì)算機(jī)在中斷響應(yīng)時執(zhí)行到RETI指令時,立即結(jié)束中斷并從堆棧中自動取出在中斷響應(yīng)時壓入堆棧的PC當(dāng)前值,從而使CPU返回源程序中斷點(diǎn)繼續(xù)進(jìn)行下去。中斷執(zhí)行過程如圖6-9所示。圖6-9中斷執(zhí)行過程
(3)中斷嵌套。當(dāng)CPU響應(yīng)某一中斷時,若有優(yōu)先權(quán)高的中斷源發(fā)出中斷請求,則CPU能中斷正在進(jìn)行的中斷服務(wù)程序,并保留這個程序的斷點(diǎn)(類似于子程序嵌套),響應(yīng)高級中斷。高級中斷處理結(jié)束以后,再繼續(xù)進(jìn)行被中斷的中斷服務(wù)程序,這個過程稱為中斷嵌套,其示意圖如圖6-10所示。如果發(fā)出新的中斷請求的中斷源的優(yōu)先權(quán)級別與正在處理的中斷源同級或更低時,CPU不會響應(yīng)這個中斷請求,直至正在處理的中斷服務(wù)程序執(zhí)行完以后才能去處理新的中斷請求。圖6-10中斷嵌套流程圖知識點(diǎn)3中斷采樣和查詢
1.中斷采樣
采樣就是CPU在每個機(jī)器周期對引腳(P3.2)和(P3.3)進(jìn)行信號檢測,根據(jù)采樣結(jié)果設(shè)置TCON寄存器中相應(yīng)的標(biāo)志位,以便CPU在下一個機(jī)器周期檢測這些中斷標(biāo)志位的狀態(tài),了解是否有外部中斷申請,然后根據(jù)中斷初始化情況決定是否響應(yīng)。
對于定時器T0、T1及串行口中斷的中斷請求,都發(fā)生在芯片內(nèi)部,可以直接設(shè)置
TCON寄存器和SCON寄存器中相應(yīng)的標(biāo)志位,無須采樣。
2.中斷查詢
CPU檢測TCON寄存器和SCON寄存器中各標(biāo)志位的狀態(tài),來決定有沒有中斷請求發(fā)生及是哪一個中斷請求。
3.中斷響應(yīng)時間
中斷響應(yīng)時間定義為從檢測到中斷申請到轉(zhuǎn)去執(zhí)行中斷服務(wù)程序所需的時間。CPU在每個機(jī)器周期的S5P2期間查詢每個中斷源,并設(shè)置相應(yīng)的標(biāo)志位,在下一機(jī)器周期S6期間按優(yōu)先級順序查詢每個中斷標(biāo)志,如查詢到某個中斷標(biāo)志為1,將在下一個機(jī)器周期S1期間按優(yōu)先級進(jìn)行中斷處理。一般情況下中斷響應(yīng)時間在3~8個機(jī)器周期之間。
4.中斷標(biāo)志的清除方式
中斷標(biāo)志清除方式有三種情況:
(1)定時器T0、T1及邊沿觸發(fā)方式的外部中斷標(biāo)志。TF0、TF1、IE0、IE1在中斷響應(yīng)后由硬件自動清除,無需采取其他措施。
(2)電平觸發(fā)方式的外部中斷標(biāo)志。外部中斷標(biāo)志IE1、IE0不能自動清除,必須撤除或的電平信號。知識點(diǎn)4中斷源的擴(kuò)充
MCS-51系列單片機(jī)僅有兩個外部中斷請求輸入端和,在實(shí)際應(yīng)用中,若外部中斷源超過兩個,就需要擴(kuò)充外部中斷源,這里介紹兩種簡單可行的方法。
1.用定時器作外部中斷源
MCS-51單片機(jī)有兩個定時器,具有兩個內(nèi)中斷標(biāo)志和外計(jì)數(shù)引腳,如在某些應(yīng)用中不被使用,則它們的中斷可作為外部中斷請求使用。此時,可將定時器設(shè)置成計(jì)數(shù)方式,計(jì)數(shù)初值可設(shè)為滿量程,則它們的計(jì)數(shù)輸入端T0(P3.4)或T1(P3.5)引腳上發(fā)生負(fù)跳變時,計(jì)數(shù)器加1便產(chǎn)生溢出中斷。利用此特性,可把T0腳或T1腳作為外部中斷請求輸入線,而計(jì)數(shù)器的溢出中斷作為外部中斷請求標(biāo)志。
例將定時器T0擴(kuò)展為外部中斷源。將定時器T0設(shè)定為方式2(自動恢復(fù)計(jì)數(shù)初值),TH0和TF0的初值均設(shè)置為255,允許T0中斷,CPU開放中斷。匯編語言源程序段如下:MOV TMOD,#06HMOV TH0,#255MOV TL0,#255SETB TR0SETB ET0SETB EA…C語言源程序段如下:TMOD=0x06;TH0=0xff;TL0=0xff;TR0=1;ET0=1;EA=1;…
當(dāng)連接在T0引腳上的外部中斷請求輸入線發(fā)生負(fù)跳變時,TL0加1溢出,TF0置1,向CPU發(fā)出中斷申請。T0引腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。同樣,也可將定時器T1擴(kuò)展為外部中斷源。
2.中斷和查詢相結(jié)合方式兩根外部中斷輸入線(和腳)的每一根都可以通過或非門連接多個外部中斷源,以達(dá)到擴(kuò)展外部中斷源的目的。其電路原理圖如圖6-11所示。圖6-11一個外中斷擴(kuò)展成多個外中斷的原理圖
由圖6-11可知,4個外部擴(kuò)展中斷源輸入引腳EXINT0~EXINT3通過或非門再與(P3.3)相連。同時,4個輸入引腳分別連接到單片機(jī)P1口的P1.0~P1.3引腳。當(dāng)4個輸入引腳中有一個或幾個出現(xiàn)高電平時,或非門輸出為0,使腳為低電平,從而發(fā)出中斷請求。因此,這些擴(kuò)充的外部中斷源都是電平觸發(fā)方式(高電平有效)。
CPU執(zhí)行中斷服務(wù)程序時,先依次查詢P1口的中斷源輸入狀態(tài),再轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。4個擴(kuò)展中斷源的優(yōu)先級順序由軟件查詢順序決定,即最先查詢的優(yōu)先級最高,最后查詢的優(yōu)先級最低。匯編語言中斷服務(wù)程序如下:
ORG 0003H ;外部中斷0入口
AJMP INT0 ;轉(zhuǎn)向中斷服務(wù)程序入口
INT0:PUSH PSW ;保護(hù)現(xiàn)場
PUSH ACC
JNB P1.0,EXT0 ;中斷源查詢并轉(zhuǎn)相應(yīng)中斷服務(wù)程序
JNB P1.1,EXT1 JNB P1.2,EXT2 JNB P1.3,EXT3C語言中斷服務(wù)程序段如下:voidint_1interrupt2 //外部中斷1中斷類型號為2{unsignedchari;P1=0xff; //讀P1口引腳前先置全1i=P1; //P1口引腳狀態(tài)讀入變量ii&=0x0f;
//采用與操作屏蔽掉i的高四位switch(i){
case0x01:exint0();break; //調(diào)用函數(shù) exint0(),EXINTT0中斷服務(wù),此處省略
case0x02:exint1();break; //調(diào)用函數(shù) exint1(),EXINTT1中斷服務(wù),此處省略
case0x04:exint2();break; //調(diào)用函數(shù) exint2(),EXINTT2中斷服務(wù),此處省略
case0x08:exint3();break; //調(diào)用函數(shù) exint3(),EXINTT3中斷服務(wù),此處省略
default:break;
}}同樣,外部中斷1也可作相應(yīng)的擴(kuò)展。任務(wù)4交通燈控制
1.任務(wù)要求設(shè)計(jì)并實(shí)現(xiàn)單片機(jī)交通燈控制系統(tǒng),實(shí)現(xiàn)以下兩種情況下的交通燈控制:
(1)正常情況下雙方向輪流點(diǎn)亮信號燈,信號燈的狀態(tài)如表6-6所示。
(2)有緊急車輛通過時,A、B道均為紅燈。6.3技能拓展
表6-6交通燈顯示狀態(tài)表
2.硬件電路設(shè)計(jì)本任務(wù)涉及定時控制東南西北四個方向上的12盞交通信號燈,并且出現(xiàn)緊急情況時,能及時調(diào)整交通燈指示狀態(tài)。采用12個LED發(fā)光二極管模擬紅、黃、綠交通燈,用單片機(jī)的P1口控制發(fā)光二極管的亮滅狀態(tài)。而單片機(jī)的P1口只有8個控制端,如何控制12個二極管的亮滅呢?
觀察表6-6不難發(fā)現(xiàn),在不考慮左轉(zhuǎn)彎行駛車輛的情況下,東、西兩個方向的信號燈顯示狀態(tài)是一樣的,所以,對應(yīng)兩個方向上的6個發(fā)光二極管只用P1口的3根I/O口線控制即可。同樣道理,南、北方向上的6個發(fā)光二極管可用P1口的另外3根I/O口線。當(dāng)I/O口線輸出高電平時,對應(yīng)的交通燈滅;反之,當(dāng)I/O口線輸出低電平時,對應(yīng)的交通燈亮。各控制口線的分配以及控制狀態(tài)如表6-7所示。表6-7交通燈控制口線分配及控制狀態(tài)表
按鍵S1模擬緊急情況發(fā)生,當(dāng)S1為高電平(不按按鍵)時,表示正常情況;S1為低電平(按下按鍵)時,表示緊急情況,將S1按鍵接至腳(P3.2)即可實(shí)現(xiàn)外部中斷0中斷申請。根據(jù)以上分析,我們采用如圖6-12所示的電路連接方法。圖6-12交通燈控制電路
考慮到可能有緊急情況發(fā)生,在單片機(jī)的引腳連接按鍵S1,當(dāng)按鍵按下時讓A、B兩個方向都是紅燈。
3.軟件設(shè)計(jì)
1)流程圖正常情況下交通燈控制程序流程圖如圖6-13所示,中斷服務(wù)程序流程圖如圖6-14所示;有緊急車輛通過時,采用外部中斷0方式進(jìn)入與其相應(yīng)的中斷服務(wù)程序。圖6-13正常情況下交通燈控制程序流程圖圖6-14中斷情況下交通燈狀態(tài)流程圖
從圖6-13可以看出,程序需要多個不同的延時時間:2s、5s、10s、25s、55s等,假定信號燈閃爍時亮滅時間各為0.5s,可以把0.5s延時作為基本延時時間。
2)編寫匯編語言代碼。主程序采用查詢方式定時,由R2寄存器確定調(diào)用0.5s延時子程序的次數(shù),從而獲取交通燈的各種時間。子程序采用定時器T1,方式1,查詢方式定時,定時器定時50ms,R3寄存器確定50ms循環(huán)10次,從而獲取0.5s的延時時間。緊急車輛出現(xiàn)時的中斷服務(wù)程序需保護(hù)現(xiàn)場,然后執(zhí)行相應(yīng)的服務(wù),待交通燈信號出現(xiàn)后延時20s,確保緊急車輛通過交叉路口,再恢復(fù)現(xiàn)場,返回主程序。用匯編語言編寫的指令代碼如下:
程序段說明,程序段如下:
MOV R2,#6WARN2: CPL P1.5 ;B綠燈閃爍
ACALL DELAY DJNZ R2,WARN2
P1.5控制綠燈的亮滅,P1.5置0燈點(diǎn)亮,P1.5置1綠燈熄滅,反復(fù)執(zhí)行置0置1指令,實(shí)現(xiàn)燈閃爍,程序段可寫為: MOV R2,#3WARN2: CLR P1.5 ;B綠燈亮
ACALL DELAY SETB P1.5 ;B綠燈滅
ACALL DELAY DJNZ R2,WARN23)編寫C語言代碼用C語言編寫的指令代碼如下:
在中斷服務(wù)程序中,通常首先需要保護(hù)現(xiàn)場,然后才是真正的中斷處理程序。中斷返回時需要恢復(fù)現(xiàn)場,在保護(hù)和恢復(fù)現(xiàn)場時,為了不使現(xiàn)場數(shù)據(jù)遭到破壞或造成混亂,一般規(guī)定此時CPU不再響應(yīng)新的中斷請求。因此,在編寫中斷服務(wù)程序時,要注意在保護(hù)現(xiàn)場前關(guān)中斷,在保護(hù)現(xiàn)場后若允許高優(yōu)先級中斷,則應(yīng)開中斷。同樣,在恢復(fù)現(xiàn)場前也應(yīng)先關(guān)中斷,恢復(fù)之后再開中斷。
4.電路板制作
1)交通燈控制電路元件清單交通燈控制電路元件清單如表6-8所示。表6-8交通燈控制電路元件清單2)交通燈控制電路的面包板制作交通燈控制電路面包板實(shí)物如圖6-15所示。圖6-15交通燈控制電路
3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A6_4.ASM或C6_4.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,觀察交通燈控制電路演示情況并調(diào)試:
(1)首先觀察正常情況下信號燈的狀態(tài),體會定時器的作用。開關(guān)S1不按下,使用全速運(yùn)行的方法調(diào)試程序,觀察A、B道信號燈是否按照項(xiàng)目設(shè)計(jì)的要求進(jìn)行輪流放行。如果有誤,仔細(xì)分析故障現(xiàn)象確定故障點(diǎn),采用斷點(diǎn)運(yùn)行和單步運(yùn)行相結(jié)合的方法,查找程序錯誤,修改程序直至結(jié)果正常;對延時函數(shù)可以采用跟蹤的方法來調(diào)試。
(2)觀察緊急情況下信號燈的狀態(tài),理解中斷優(yōu)先級別的概念。連續(xù)運(yùn)行程序,使信號燈正常輪流放行。按下S1,模擬實(shí)現(xiàn)緊急情況,觀察A、B道是否均為紅燈。采用斷點(diǎn)運(yùn)行的方法進(jìn)行調(diào)試,在中斷函數(shù)int_0?()開始處設(shè)定一個斷點(diǎn),連續(xù)運(yùn)行程序,按下開關(guān)S1后程序應(yīng)暫時停止在設(shè)定的斷點(diǎn)處。若程序不能停止在設(shè)定的斷點(diǎn)處位置,同樣用萬用表測量P3.2的電平是否正常,從而排除硬件故障。在斷點(diǎn)之后,可以單步調(diào)試程序排除軟件問題使程序運(yùn)行正常。
本任務(wù)程序主要包括三部分:主函數(shù)、延時函數(shù)和中斷函數(shù)。程序調(diào)試時,若要觀察最終結(jié)果可選擇全速運(yùn)行調(diào)試,若要檢查子程序的運(yùn)行過程可選擇跟蹤運(yùn)行調(diào)試。編寫中斷函數(shù)時:
(1)中斷函數(shù)不能進(jìn)行參數(shù)傳遞;
(2)中斷函數(shù)沒有返回值;
(3)在任何情況下都不能直接調(diào)用中斷函數(shù);
(4)中斷函數(shù)使用浮點(diǎn)運(yùn)算要保存浮點(diǎn)寄存器的狀態(tài);
(5)如果在中斷函數(shù)中調(diào)用了其他函數(shù),則被調(diào)用函數(shù)所使用的寄存器必須與中斷函數(shù)相同,被調(diào)函數(shù)最好設(shè)置為可重入的。
問1:匯編語言中斷服務(wù)程序設(shè)計(jì)時,在中斷入口處位置都要寫一條跳轉(zhuǎn)指令,為什么不直接寫中斷服務(wù)程序呢?答:各中斷源的中斷入口地址之間只相隔8個字節(jié),容納不下普通的中斷服務(wù)程序。因此,在中斷入口地址單元通常存放一條無條件轉(zhuǎn)移指令,可將中斷服務(wù)程序轉(zhuǎn)至程序存儲器的其他任何空間。
6.4互動環(huán)節(jié)
問2:中斷服務(wù)程序?yàn)槭裁匆Wo(hù)現(xiàn)場及恢復(fù)現(xiàn)場呢?答:通常主程序和中斷服務(wù)程序都會用到累加器A、狀態(tài)寄存器PSW及其他一些寄存器。當(dāng)CPU進(jìn)入中斷服務(wù)程序用到上述寄存器時,會破壞原來存儲在寄存器中的內(nèi)容,一旦中斷返回,將會導(dǎo)致主程序的混亂。因此,在進(jìn)入中斷服務(wù)程序后,一般要先保護(hù)現(xiàn)場,然后,執(zhí)行中斷處理程序,在中斷返回之前再恢復(fù)現(xiàn)場。編寫中斷服務(wù)程序時還需注意以下幾點(diǎn):
(1)若要在執(zhí)行當(dāng)前中斷程序時禁止其他更高優(yōu)先級中斷,需先用軟件關(guān)閉CPU中斷,或用軟件禁止相應(yīng)高優(yōu)先級
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版建筑材料購銷合同書模板
- 二零二五年度臺球室租賃及品牌形象合作合同3篇
- 2025購銷合同常用文本
- 二零二五年度全新租賃房屋合同住宅押金退還管理協(xié)議3篇
- 2025年度全新出售房屋買賣貸款擔(dān)保合同3篇
- 2025年度年度全新高空纜車運(yùn)營意外事故免責(zé)服務(wù)協(xié)議3篇
- 二零二五年度智慧社區(qū)建設(shè)與運(yùn)營管理協(xié)議合同范文2篇
- 2025年農(nóng)村兄弟分家協(xié)議及遺產(chǎn)分配執(zhí)行方案
- 2025年度養(yǎng)殖場勞務(wù)合同(養(yǎng)殖場安全生產(chǎn)監(jiān)管)3篇
- 二零二五年度創(chuàng)業(yè)投資股權(quán)代持專項(xiàng)合同2篇
- 診所污水污物糞便處理方案及周邊環(huán)境
- 產(chǎn)品報(bào)價單(5篇)
- 指揮中心 施工方案
- 金融模擬交易實(shí)驗(yàn)報(bào)告
- 國家開放大學(xué)電大本科《古代小說戲曲專題》2023期末試題及答案(試卷號:1340)
- 加德納多元智能理論教學(xué)課件
- 北師大版數(shù)學(xué)八年級上冊全冊教案
- 從業(yè)人員在安全生產(chǎn)方面的權(quán)利和義務(wù)
- 新開模具清單
- 抗菌藥物臨床應(yīng)用指導(dǎo)原則(2023年版)
- 2023年軍政知識綜合題庫
評論
0/150
提交評論