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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

C51中斷服務函數(shù)的定義 由于標準C沒有處理單片機中斷的定義,為直接編寫中斷服務程序,C51編譯器對函數(shù)的定義進行了擴展,增加了一個擴展關鍵字interrupt,使用該關鍵字可以將一個函數(shù)定義成中斷服務函數(shù)。

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

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

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

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

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

)引腳接上拉電阻并接有一只按鈕開關K1。用K1按鈕來產(chǎn)生外部中斷0的輸入信號。接口電路如圖所示。 要求將外部中斷0設為負跳沿觸發(fā)。在程序剛啟動時,P1口上的8只LED亮。按一次按鈕開關K1,使引腳P3.2接地,產(chǎn)生一個外中斷0的中斷請求,在中斷服務程序中,讓低4位LED和高4位LED交替閃爍。參考程序:18#include<reg51.h>voidDelay(unsignedinti) /*定義延時函數(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的中斷服務函數(shù)*/{unsignedintk;

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

溫馨提示

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

評論

0/150

提交評論