第四章-2 MCS-51單片機(jī)的內(nèi)部資源及其編程 外部中斷zxl_第1頁
第四章-2 MCS-51單片機(jī)的內(nèi)部資源及其編程 外部中斷zxl_第2頁
第四章-2 MCS-51單片機(jī)的內(nèi)部資源及其編程 外部中斷zxl_第3頁
第四章-2 MCS-51單片機(jī)的內(nèi)部資源及其編程 外部中斷zxl_第4頁
第四章-2 MCS-51單片機(jī)的內(nèi)部資源及其編程 外部中斷zxl_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章MCS-51單片機(jī)的內(nèi)部資源及其編程單片機(jī)技術(shù)與應(yīng)用4-2、外部中斷8051外部中斷中斷中斷源中斷優(yōu)先級中斷嵌套8051外部中斷中斷:當(dāng)CPU正處理某項事務(wù)時,若外界或內(nèi)部發(fā)生緊急事件,要求CPU暫停正在處理的工作轉(zhuǎn)而去處理這個緊急事件,待處理完以后再回到原來被中斷的地方,繼續(xù)執(zhí)行原來被中斷了的程序,這樣的過程稱為中斷。(堆棧)中斷源:向CPU提出中斷請求的源稱為中斷源外部跳變信號(下降延)外部低電平等(0)8051外部中斷中斷優(yōu)先級:當(dāng)幾個中斷源同時請求中斷時,CPU應(yīng)優(yōu)先響應(yīng)最需緊急處理的中斷請求。為此,需要規(guī)定各個中斷源的優(yōu)先級。在優(yōu)先級高的中斷請求處理完了以后。再響應(yīng)優(yōu)先級低的中斷請求。中斷嵌套:當(dāng)CPU正在處理一個優(yōu)先級低的中斷請求的時,如果發(fā)生另一個優(yōu)先級比它高的中斷請求,CPU能暫停當(dāng)前處理的中斷,轉(zhuǎn)去處理優(yōu)先級高的中斷請求,待處理完以后,再回到原來正在處理的低級中斷程序,這種高級中斷源能中斷低級中斷源的中斷處理稱為中斷嵌套。8051中斷8051單片機(jī)有5個中斷源2個中斷優(yōu)先級(2級中斷嵌套),優(yōu)先級可通過編程實現(xiàn)IE(中斷允許寄存器):中斷源的中斷請求是否能得到響應(yīng),受IE的控制;IP(中斷優(yōu)先級寄存器):各個中斷源的優(yōu)先級可由IP的各位來確定;同一優(yōu)先級中的各中斷源同時請求中斷時,由內(nèi)部的查詢邏輯來確定響應(yīng)的次序。8051中斷源8051五個中斷源INT0中斷(P3.2)T0中斷(P3.4)INT1中斷(P3.3)T1中斷(P3.5)串行中斷(P3.0、P3.1)8051中斷入口(ROM)地址和優(yōu)先級中斷源中斷號(n)中斷入口地址(8n+3)中斷優(yōu)先級INT0中斷00003H高低T0中斷1000BHINT1中斷20013HT1中斷3001BH串行口中斷40023HT2中斷5002BH例1如圖按下按鈕,對輸出燈取反查詢方式中斷方式8051INT0中斷機(jī)理當(dāng)INT0引腳輸入如下信號:下降沿(IT0=1)或低電平(IT0=0)CPU自動(硬件)產(chǎn)生中斷標(biāo)志(IE0=1)此時若INT0中斷允許(使能EX0=1,EA=1),則CPU立即停止當(dāng)前程序,跳轉(zhuǎn)到INT0對應(yīng)的中斷入口(ROM保留地址0x0003)執(zhí)行中斷服務(wù)程序(中斷服務(wù)程序后CPU自動對中斷標(biāo)志清零:IE0=0),待INT0中斷服務(wù)程序執(zhí)行完畢后再回原執(zhí)行程序處;若INT0中斷未允許,則程序不能跳轉(zhuǎn)到INT0中斷入口,不執(zhí)行中斷服務(wù)程序(中斷標(biāo)志IE0不能自動清0)。問提:中斷標(biāo)志IE0的產(chǎn)生與中斷使能是否有關(guān)?中斷服務(wù)程序常見問題中斷服務(wù)程序代碼過長,占了過多的進(jìn)程;定義全局標(biāo)志變量:中斷里設(shè)置標(biāo)志,主程序根據(jù)標(biāo)志執(zhí)行程序,完成后清除該標(biāo)志中斷端口不夠用(8051只有2個中斷INT0、INT1);更換MPU會擴(kuò)展INT0中斷方式執(zhí)行流程#include"reg51.h"unsignedchari=0;/**********int0中斷服務(wù)程序**********/voidINT0_ISR(void)interrupt0{ delay(200); if((P3_2==0)

P1=++i; }/**********主函數(shù)*******************/voidmain(void){IT0=1;//下降延中斷

EX0=1;//int0中斷使能

EA=1;//總中斷使能

while(1){;}//等待中斷}主程序中斷響應(yīng)初始化中斷等待中斷中斷服務(wù)程序返回中斷自動清中斷標(biāo)志……INT0查詢方式voidmain(void){IT0=1;//EX0=1;EA=1;while(1){//查詢方式1:if(IE0==1){IE0=0;//手動清中斷標(biāo)志

//P1=++I;……}_------P2=LED_seg[buf[i]]P0=LED_bit[i]I++;If(I==6) I=0delay(500);}}voidmain(void){while(1){//查詢方式2:while(IE0==0){ ;//等待INT0外部中斷}IE0=0;//手動清中斷標(biāo)志//……}}8051中斷系統(tǒng)與中斷有關(guān)的SFR注:*表示可以位尋址SFRD7D6D5D4D3D2D1D0地址*IP--PT2PSPT1PX1PT0PX0B8H*IEEA-ET2ESET1EX1ET0EX0A8HTMODGATEC/T#M1M0GATEC/T#M1M089H*TCONTF1TR1TF0TR0IE1IT1IE0IT088HSCONSM0SM1SM2RENTB8RB8TIRI98HPCONSMOD-------87HTCON:定時/計數(shù)器控制寄存器TF1、TF0:T1、T0溢出標(biāo)志TR1、TR0:T1、T0啟動控制位(TR=1:啟動定時器)IE1、IE0:INT1、INT0中斷標(biāo)志IT1、IT0:INT1、INT0觸發(fā)方式控制位(IT=1:下降沿觸發(fā),IT=0:低電平觸發(fā))TF1、TF0、IE1、IE0都具有自動清零功能。D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0SCON:串行口控制寄存器SM0SM1串行模式選擇SM2多機(jī)通訊允許位:方式0時,此位應(yīng)該為0;模式1時,當(dāng)接收到停止位時,該位將置位;方式2或方式3時,當(dāng)接收的第9位數(shù)據(jù)為1時,將置位REN串行接收允許位TB8在模式2和模式3中,將被發(fā)送數(shù)據(jù)的第9位RB8:在方式0中,該位不起作用;在方式1中該位為接收數(shù)據(jù)的停止位;在方式2和方式3中為接收數(shù)據(jù)的第9位TI串行發(fā)送結(jié)束標(biāo)志,由軟件清零RI串行接收結(jié)束標(biāo)志,由軟件清零D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRIIE:中斷允許寄存器EA:使能標(biāo)志位。1:所有中斷使能;0:禁止所有中斷ET2:T2中斷使能ES:串行通信中斷使能ET1:T1中斷使能EX1:INT1中斷使能ET0:T0中斷使能EX0:INT0中斷使能D7D6D5D4D3D2D1D0EA-ET2ESET1EX1ET0EX0IP:中斷優(yōu)先級寄存器-保留-保留PT2:T2中斷優(yōu)先級PS:串行通信中斷優(yōu)先級PT1:T1中斷優(yōu)先級PX1:INT1優(yōu)先級PT0:T0中斷優(yōu)先級PX0:INT0優(yōu)先級D7D6D5D4D3D2D1D0--PT2PSPT1PX1PT0PX0與中斷有關(guān)的各位PX0、PT0、PX1、PT1、PSEX0、ET0、EX1、ET1、ES、EAIT0、IT1TR0、TR1IE0、IE1、TF0、TF1、TI、RI以上各位可位尋址,且均為高電平有效8051外部中斷編程示例#include"reg51.h"http://C51中斷程序框架/**********int0中斷服務(wù)程序**********/voidINT0_ISR(void)interrupt0using0{//中斷服務(wù)程序

//……}/**********主函數(shù)*******************/voidmain(void){IT0=1;EX0=1;EA=1;//打開中斷源

while(1);//等待中斷}中斷服務(wù)函數(shù)與寄存器的定義為了滿足在C語言源程序中直接編寫中斷服務(wù)程序的要求,C51編譯器對函數(shù)的定義進(jìn)行了擴(kuò)展,增加了一個擴(kuò)展關(guān)鍵字interrupt。它是函數(shù)定義時的一個選項,加上這個選項即可將一個函數(shù)定義成中斷服務(wù)函數(shù)。定義格式為:

函數(shù)類型函數(shù)名(形式參數(shù)表)[interruptn][usingn]中斷服務(wù)函數(shù)與寄存器的定義函數(shù)類型函數(shù)名(形式參數(shù)表)[interruptn][usingn]關(guān)鍵字interrupt后面的n是中斷號,n的范圍為0-31。編譯器從8n+3處產(chǎn)生中斷向向量,具體的中斷號n和中斷向量取決于8051單片機(jī)芯片型號,常用中斷源和中斷向量如表所示。中斷號n中斷源中斷向量8n+30INT00003H1T0000BH2INT10013H3T1001BH4串行口0023H中斷服務(wù)函數(shù)與寄存器的定義工作寄存器:8051片內(nèi)RAM中有4個工作寄存器組,每個寄存器組中含8個工作寄存器(R0~R7)。C51編譯器擴(kuò)展了一個關(guān)鍵字using,專門用來選擇8051單片機(jī)的工作寄存器組。在定義一個函數(shù)時,using后面的n是一個0-3的常數(shù),分別表示4個功能完全一樣的工作寄存器組。在定義一個函數(shù)時,using是一個選項,若缺省編譯器自動分配一個寄存器組作絕對寄存器組訪問。需要注意的是,關(guān)鍵字using和interrupt的后面都不允許跟帶運(yùn)算符的表達(dá)式。中斷服務(wù)函數(shù)與寄存器的定義voidINT0_ISR(void)interrupt0{}voidTIMER0_ISR(void)interrupt1{}voidINT1_ISR(void)interrupt2{}voidTIMER1_ISR(void)interrupt3{}voidUART_ISR(void)interrupt4{}

中斷服務(wù)函數(shù)與寄存器的定義_KeilC51命令DEFINEBUTTON(定義按鈕)命令定義:DEFINEBUTTON“按鈕名”,“命令”在Debug-FunctionEditor(OpenIniFile)中定義外中斷按鈕:

definebutton"INT0(P3.2)","PORT3=PORT3^0x04"definebutton"T0(P3.4)","PORT3=PORT3^0x10"definebutton"INT1(P3.3)","PORT3=PORT3^0x08"definebutton"T1(P3.5)","PORT3=PORT3^0x20"

每按鈕一次對P3.2取反刪除:KILLBUTTONn>definebutton“clr

drtr”,”dptr=0”>killbutton1中斷服務(wù)函數(shù)與寄存器的定義_KeilC51命令EVAL>EVAL-(1/256)0x00>EVAL-(256/256)0xFF>PORT30xFF>ex0_isr_counter詢問變量的值中斷如何擴(kuò)充1定時器中斷作為外部中斷使用

把8051的T1、T0用作對外部脈沖計數(shù)方式。每當(dāng)P3.4(T0)或P3.3(T1)引腳上發(fā)生負(fù)跳變時,T1和T0的計數(shù)器加1。利用這個特性,可以把P3.4和P3.3引腳作為外部中斷請求輸入線,而定時器的溢出中斷作為外部中斷請求標(biāo)志。

T0(P3.4)+Vcc中斷如何擴(kuò)充1定時器中斷作為外部中斷使用(軟件)

定時器T1對外部計數(shù)/*TH1、TL1采用16進(jìn)制賦值*/voidint0(void)interrupt3{

/*中斷服務(wù)程序*/

}voidmain(void){TMOD=(TMOD&0x0f)|0x60;ET1=1;EA=1;TR1=1;TH1=0xFF;/*TH1=-1/256-1;*/TL1=0xFF;/*TL1=-1%256;*/while(1);}T1(P3.2)中斷如何擴(kuò)充2中斷和查詢結(jié)合的方式中斷如何擴(kuò)充2#include<reg51.h>sbitLED_A=P1^0;sbitLED_B=P1^1;sbitLED_C=P1^2;sbitIA=P1^3;sbitIB=P1^4;sbitIC=P1^5;中斷如何擴(kuò)充2voidmain(void){IT0=1; IT1=1; EX0=1; EX1=1; EA=1; LED_A=0;LED_B=0;LED_C=0; IA=1;IB=1;IC=1; while(1);}中斷如何擴(kuò)充2voidint0(void)interrupt0{LED_A=0;LED_B=0;LED_C=0; IE1=0; EX1=1;}voidint1(void)interrupt2{ EX1=0; if(IA==0)LED_A=1; elseif(IB==0)LED_B=1; elseif(IC==0)LED_C=1; }中斷如何擴(kuò)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論