第6章 C51中斷編程_第1頁
第6章 C51中斷編程_第2頁
第6章 C51中斷編程_第3頁
第6章 C51中斷編程_第4頁
第6章 C51中斷編程_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章C51中斷編程一、中斷1.概念:所謂中斷,是指在計(jì)算機(jī)執(zhí)行程序的過程中,當(dāng)出現(xiàn)某種情況,如發(fā)生緊急事件或其他情況時(shí),由服務(wù)對(duì)象向CPU發(fā)出中斷請(qǐng)求信號(hào),要求CPU暫時(shí)中斷當(dāng)前程序的執(zhí)行,而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,待處理程序執(zhí)行完畢后,再返回來繼續(xù)執(zhí)行原來被中斷的程序。2看電視中斷處理中斷請(qǐng)求實(shí)際生活中斷返回電話鈴響接聽電話主程序計(jì)算機(jī)事件發(fā)生事件處理主程序看電視2.中斷系統(tǒng)89C51中斷系統(tǒng)共有5個(gè)中斷請(qǐng)求源:(1)——外部中斷請(qǐng)求0,中斷請(qǐng)求信號(hào)由引腳輸入,中斷請(qǐng)求標(biāo)志為IE0。(2)——外部中斷請(qǐng)求1,中斷請(qǐng)求信號(hào)由

引腳輸入,中斷請(qǐng)求標(biāo)志為IE1。(3)定時(shí)器/計(jì)數(shù)器T0計(jì)數(shù)溢出發(fā)出的中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TF0。(4)定時(shí)器/計(jì)數(shù)器T1計(jì)數(shù)溢出發(fā)出的中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TF1。(5)串行口中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為發(fā)送中斷TI或接收中斷RI。34中斷系統(tǒng)結(jié)構(gòu)示意圖中斷請(qǐng)求標(biāo)志寄存器5個(gè)中斷請(qǐng)求源的中斷請(qǐng)求標(biāo)志分別由定時(shí)器/計(jì)數(shù)器的控制寄存器TCON和串行口控制寄存器SCON的相應(yīng)位鎖存。5中斷允許寄存器IEAT89C51的對(duì)各中斷源的開放或屏蔽,是由中斷允許寄存器IE控制的。6中斷優(yōu)先級(jí)寄存器IP中斷請(qǐng)求源有兩個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)兩級(jí)中斷嵌套。兩條基本規(guī)則:(1)低優(yōu)先級(jí)可被高優(yōu)先級(jí)中斷,高優(yōu)先級(jí)不能低優(yōu)先級(jí)中斷。(2)任何一種中斷一旦得到響應(yīng),不會(huì)再被它的同級(jí)中斷源所中斷。7中斷響應(yīng)的過程:首先由硬件自動(dòng)生成一條長調(diào)用指令“LCALLaddr16”。就是程序存儲(chǔ)區(qū)中相應(yīng)的中斷入口地址。例如,對(duì)于外部中斷1的響應(yīng),硬件自動(dòng)生成的長調(diào)用指令為

LCALL0013H首先將程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧以保護(hù)斷點(diǎn),再將中斷入口地址裝入PC,使程序轉(zhuǎn)向響應(yīng)中斷請(qǐng)求的中斷入口地址。8各中斷源服務(wù)程序的入口地址:兩個(gè)中斷入口間只相隔8字節(jié),難以安放一個(gè)完整的中斷服務(wù)程序。因此,通常在中斷入口地址處放置一條無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向中斷服務(wù)程序入口。910二、

C51中斷服務(wù)函數(shù)的定義 由于標(biāo)準(zhǔn)C沒有處理單片機(jī)中斷的定義,為直接編寫中斷服務(wù)程序,C51編譯器對(duì)函數(shù)的定義進(jìn)行了擴(kuò)展,增加了一個(gè)擴(kuò)展關(guān)鍵字interrupt,使用該關(guān)鍵字可以將一個(gè)函數(shù)定義成中斷服務(wù)函數(shù)。

由于C51編譯器在編譯時(shí)對(duì)聲明為中斷服務(wù)程序的函數(shù)自動(dòng)添加了相應(yīng)的現(xiàn)場(chǎng)保護(hù)、阻斷其他中斷、返回時(shí)恢復(fù)現(xiàn)場(chǎng)等處理的程序段,因而在編寫中斷服務(wù)函數(shù)時(shí)可不必考慮這些問題,減輕了用匯編語言編寫中斷服務(wù)程序的繁瑣程度,而把精力放在如何處理引發(fā)中斷請(qǐng)求的事件上。11 中斷服務(wù)函數(shù)的一般形式為: 函數(shù)類型

函數(shù)名(形式參數(shù)表)[interruptn][usingn] 關(guān)鍵字interrupt后面的

n是中斷號(hào),對(duì)于89C51,取值為0~4,編譯器從8×n+3處產(chǎn)生中斷向量。89C51中斷源對(duì)應(yīng)的中斷號(hào)和中斷向量表:中斷號(hào)n中斷源中斷向量(8×n+3)0外部中斷00003H1定時(shí)器0000BH2外部中斷10013H3定時(shí)器1001BH4串行口0023H其他值保留8×n+312

AT89C51在內(nèi)部RAM中有4個(gè)工作寄存器區(qū),每個(gè)寄存器區(qū)包含8個(gè)工作寄存器(R0-R7)。C51擴(kuò)展了一個(gè)關(guān)鍵字using,專門用來選擇AT89S51的4個(gè)不同的工作寄存器區(qū)。在定義一個(gè)函數(shù)時(shí),using是一個(gè)選項(xiàng),如果不選用該項(xiàng),則由編譯器選擇一個(gè)寄存器區(qū)作為絕對(duì)寄存器區(qū)訪問。 關(guān)鍵字using對(duì)函數(shù)目標(biāo)代碼的影響如下: 在中斷函數(shù)的入口處將當(dāng)前工作寄存器區(qū)內(nèi)容保護(hù)到堆棧中,函數(shù)返回前將被保護(hù)的寄存器區(qū)的內(nèi)容從堆棧中恢復(fù)。 使用關(guān)鍵字using在函數(shù)中確定一個(gè)工作寄存器區(qū)時(shí)必須小心,要保證工作寄存器區(qū)切換都只在指定的控制區(qū)域中發(fā)生,否則將產(chǎn)生不正確的函數(shù)結(jié)果。還要注意,帶using屬性的函數(shù)原則上不能返回bit類型的值,且關(guān)鍵字using和關(guān)鍵字interrupt都不允許用于外部函數(shù),另外也都不允許有一個(gè)帶運(yùn)算符的表達(dá)式。1314 例如,外中斷1(

)的中斷服務(wù)函數(shù)書寫如下:voidint1()interrupt2using0/*中斷號(hào)n=2,選擇0區(qū)工作寄存器區(qū)*/ 編寫AT89S51中斷程序時(shí),應(yīng)遵循以下規(guī)則:(1)中斷函數(shù)沒有返回值,如果定義了一個(gè)返回值,將會(huì)得到不正確的結(jié)果。因此建議在定義中斷函數(shù)時(shí),將其定義為void類型,以明確說明沒有返回值。(2)中斷函數(shù)不能進(jìn)行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。15(3)在任何情況下都不能直接調(diào)用中斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。因?yàn)橹袛嗪瘮?shù)的返回是由指令RETI完成的。RETI指令會(huì)影響89C51中的硬件中斷系統(tǒng)內(nèi)的不可尋址的中斷優(yōu)先級(jí)寄存器的狀態(tài)。如果在沒有實(shí)際的中斷請(qǐng)求的情況下,直接調(diào)用中斷函數(shù),也就不會(huì)執(zhí)行RETI指令,其操作結(jié)果有可能產(chǎn)生一個(gè)致命的錯(cuò)誤。(4)如果在中斷函數(shù)中再調(diào)用其他函數(shù),則被調(diào)用的函數(shù)所使用的寄存器區(qū)必須與中斷函數(shù)使用的寄存器區(qū)不同。16三、C51中斷程序的編寫為響應(yīng)中斷請(qǐng)求而進(jìn)行中斷處理的程序稱為中斷程序。由中斷初始化程序和中斷服務(wù)程序兩部分組成。中斷初始化程序的位置位于主程序中,主要包括選擇外部中斷的觸發(fā)方式、開中斷、設(shè)置中斷優(yōu)先級(jí)等。例:控制8只LED交替閃爍的電路17 【例】在單片機(jī)系統(tǒng)的P1口上接有8只LED,LED的陽極接+5V,陰極接P1口的引腳。當(dāng)P1口某一口線輸出為0時(shí),將LED點(diǎn)亮。在外部中斷0輸入腳P3.2(

)引腳接上拉電阻并接有一只按鈕開關(guān)K1。用K1按鈕來產(chǎn)生外部中斷0的輸入信號(hào)。接口電路如圖所示。 要求將外部中斷0設(shè)為負(fù)跳沿觸發(fā)。在程序剛啟動(dòng)時(shí),P1口上的8只LED亮。按一次按鈕開關(guān)K1,使引腳P3.2接地,產(chǎn)生一個(gè)外中斷0的中斷請(qǐng)求,在中斷服務(wù)程序中,讓低4位LED和高4位LED交替閃爍。參考程序:18#include<reg51.h>voidDelay(unsignedinti) /*定義延時(shí)函數(shù)Delay(),i是形式參數(shù),不能賦初值*/{ unsignedintj; for(;i>0;i--) for(j=0;j<333;j++) /*晶振為12MHz*/ {;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{ EA=1; /*總中斷允許*/ EX0=1; /*外部中斷0中斷允許*/ IT0=1;/*選擇外部中斷0為跳沿觸發(fā)方式,也可改為IT0=0電平觸發(fā)方式*/ while(1)/*循環(huán)*/ {P1=0;}/*P1口的8只LED全亮*/}1920voidint0()interrupt0using0/*外中斷0的中斷服務(wù)函數(shù)*/{unsignedintk;

EX0=0; /*禁止外部中斷0中斷*/ for(k=0;k<10;k++) /*循環(huán)10次*/ { P1=0x0f; /*低

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論