單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 5單片機(jī)中斷系統(tǒng)_第1頁
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 5單片機(jī)中斷系統(tǒng)_第2頁
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 5單片機(jī)中斷系統(tǒng)_第3頁
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 5單片機(jī)中斷系統(tǒng)_第4頁
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 5單片機(jī)中斷系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)中斷系統(tǒng)05

介紹中斷的基本概念、基本結(jié)構(gòu)、相關(guān)的特殊功能寄存器以及對(duì)中斷系統(tǒng)的的初始化編程以及中斷函數(shù)的設(shè)計(jì)。05AT89S52的硬件結(jié)構(gòu)01單片機(jī)中斷技術(shù)概述0203外部中斷的仿真實(shí)例單片機(jī)中斷系統(tǒng)結(jié)構(gòu)5.1AT89S52單片機(jī)的硬件組成中斷事件中斷程序主程序中斷說明:1、中斷技術(shù)主要用于實(shí)時(shí)監(jiān)測(cè)與控制,要求單片機(jī)快速響應(yīng)與及時(shí)處理2、沒有中斷系統(tǒng),單片機(jī)大量時(shí)間可能會(huì)浪費(fèi)在查詢是否有服務(wù)請(qǐng)求上

3、采用中斷技術(shù)完全消除查詢方式的等待,提高單片機(jī)工作效率和實(shí)時(shí)性是指CPU執(zhí)行正常程序時(shí),系統(tǒng)中出現(xiàn)特殊請(qǐng)求,CPU暫時(shí)中止當(dāng)前的程序,轉(zhuǎn)去處理更緊急的事件(執(zhí)行中斷服務(wù)程序),處理完畢(中斷服務(wù)完成)后,CPU自動(dòng)返回原程序的過程。05AT89S52的硬件結(jié)構(gòu)01單片機(jī)中斷技術(shù)概述0203外部中斷的仿真實(shí)例單片機(jī)中斷系統(tǒng)結(jié)構(gòu)5.2AT89S52單片機(jī)的引腳中斷系統(tǒng)內(nèi)部結(jié)構(gòu)圖5.2AT89S52單片機(jī)的引腳一、中斷源63

定時(shí)器/計(jì)數(shù)器T0(P3.4):5

定時(shí)器/計(jì)數(shù)器T2:4

定時(shí)器/計(jì)數(shù)器T1(P3.5)T2(P1.0)計(jì)滿溢出觸發(fā)T2EX(P1.1)下跳沿觸發(fā)RXD(P3.0):接收完一幀數(shù)據(jù)觸發(fā)計(jì)滿溢出觸發(fā)計(jì)滿溢出觸發(fā)

串行通信口TXD(P3.1):發(fā)送完一幀數(shù)據(jù)觸發(fā)5.2AT89S52單片機(jī)的引腳二、中斷請(qǐng)求3T0:TF0

硬件置位清零4T1:TF1

硬件置位清零5T2:TF2硬件置位、軟件清零EXF2硬件置位、軟件清零6

串行通信口RI

硬件置位、軟件清零TI硬件置位、軟件清零5.2AT89S52單片機(jī)的引腳三、中斷允許=0,開關(guān)斷開=1,開關(guān)閉合【例】

若允許片內(nèi)2個(gè)外部中斷,并禁止其他中斷源的中斷請(qǐng)求,寫設(shè)置IE程序段。EX0=1; EX1=1;EA=1; IE=0x85;字節(jié)操作位操作總開關(guān)保留T2串口T1INT1T0INT05.2AT89S52單片機(jī)的引腳四、中斷優(yōu)先級(jí)=0,開關(guān)斷開=1,開關(guān)閉合T2串口T1INT1T0INT0【例】兩個(gè)外中斷請(qǐng)求為高優(yōu)先級(jí),其他中斷請(qǐng)求為低優(yōu)先級(jí)。寫設(shè)置IP程序段。PX0=1; PX1=1; IP=0x05;字節(jié)操作位操作思考:1.多個(gè)同級(jí)中斷同時(shí)申請(qǐng),CPU該優(yōu)先響應(yīng)哪個(gè)中斷?2.低級(jí)中斷正在執(zhí)行,有高級(jí)中斷申請(qǐng),CPU該如何響應(yīng)?5.2AT89S52單片機(jī)的引腳四、中斷優(yōu)先級(jí)T2串口T1INT1T0INT0自然優(yōu)先級(jí)順序:低高多個(gè)同級(jí)中斷同時(shí)申請(qǐng),CPU該優(yōu)先響應(yīng)哪個(gè)中斷?12低級(jí)中斷正在執(zhí)行,有高級(jí)中斷申請(qǐng),CPU該如何響應(yīng)?高級(jí)中斷服務(wù)程序低級(jí)中斷服務(wù)程序2級(jí)中斷嵌套:

主程序低級(jí)中斷高級(jí)中斷兩個(gè)不可尋址的“優(yōu)先級(jí)激活觸發(fā)器”指示某高優(yōu)先級(jí)中斷正在執(zhí)行,所有后來中斷均被阻止指示某低優(yōu)先級(jí)中斷正在執(zhí)行,所有同級(jí)中斷都被阻止,但不阻斷高優(yōu)先級(jí)的中斷請(qǐng)求。5.2AT89S52單片機(jī)的引腳四、中斷優(yōu)先級(jí)多個(gè)中斷同時(shí)申請(qǐng)時(shí)中斷優(yōu)先原則:(概括為四句話)

不同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng):先高后低相同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng):按自然順序執(zhí)行正處理低優(yōu)先級(jí)中斷又接到高級(jí)別中斷:高打斷低正處理高優(yōu)先級(jí)中斷又接到低級(jí)別中斷:高不理低3一個(gè)中斷正在執(zhí)行,又一個(gè)同級(jí)中斷申請(qǐng),CPU該如何響應(yīng)?5.2AT89S52單片機(jī)的引腳五、中斷響應(yīng)當(dāng)滿足下列條件時(shí)CPU才會(huì)響應(yīng)中斷1.有中斷源發(fā)出的中斷請(qǐng)求,即中斷請(qǐng)求標(biāo)志為“1”;2.總中斷允許位EA=1,即CPU開中斷;3.申請(qǐng)中斷的中斷源的中斷允許位為“1”,即中斷沒有被屏蔽;4.無同級(jí)或更高級(jí)中斷服務(wù)程序正在運(yùn)行;5.當(dāng)前的指令周期已經(jīng)結(jié)束。當(dāng)CPU響應(yīng)中斷后,由硬件自動(dòng)執(zhí)行了下列操作1.查詢優(yōu)先級(jí)激活觸發(fā)器,對(duì)后來的同級(jí)或低級(jí)中斷請(qǐng)求不予響應(yīng);2.保護(hù)斷點(diǎn),即PC的內(nèi)容送入堆棧保存;3.清除可清除的中斷請(qǐng)求標(biāo)志位:IE0、IE1、TF0、TF14.中斷入口地址送PC,進(jìn)入相應(yīng)的中斷函數(shù)開始執(zhí)行;5.?dāng)帱c(diǎn)出棧送給PC,開放同級(jí)或低級(jí)中斷允許,返回主程序斷點(diǎn)執(zhí)行。5.2AT89S52單片機(jī)的引腳六、中斷函數(shù)中斷入口地址1序號(hào)中斷源

入口地址(匯編語言用)

中斷號(hào)(C語言用)1INT00x000302T00x000B13INT10x001324T10x001B35

串口0x002346T20x002B5中斷服務(wù)函數(shù)2void函數(shù)名(void)interrupt

n

[usingm]{函數(shù)體語句}[usingm]項(xiàng)可省略n是中斷號(hào),n=0~5m=0~3RS0和RS1決定①中斷函數(shù)沒有返回值,也沒有參數(shù);②中斷函數(shù)無需調(diào)用,由系統(tǒng)自動(dòng)調(diào)用。③中斷函數(shù)不能被其他函數(shù)調(diào)用;④中斷函數(shù)應(yīng)盡量簡短;!5.3外部中斷的仿真實(shí)例5.3.1

基于外部中斷控制的LED燈仿真實(shí)例任務(wù)要求:按鍵(中斷方式)控制LED亮滅,每按一次按鈕,改變一次LED狀態(tài)。1硬件電路設(shè)計(jì)軟件設(shè)計(jì)2①觸發(fā)方式:下降沿觸發(fā),IT0=1;②開放INT0中斷允許:EX0=1;③優(yōu)先級(jí)別:

PX0=1;④開放總中斷:EA=1;⑤中斷服務(wù)程序:LED取反5.3外部中斷的仿真實(shí)例5.3.1

基于外部中斷控制的LED燈仿真實(shí)例任務(wù)要求:按鍵(中斷方式)控制LED亮滅,每按一次按鈕,改變一次LED狀態(tài)。軟件設(shè)計(jì)2①觸發(fā)方式:下降沿觸發(fā),IT0=1;②開放INT0中斷允許:EX0=1;③優(yōu)先級(jí)別:

PX0=1;④開放總中斷:EA=1;⑤中斷服務(wù)程序:LED取反#include<reg52.h>sbitLED=P1^0; //LED控制引腳/**************主函數(shù)************/voidmain(){IT0=1; //外中斷0下降沿觸發(fā)

EX0=1; //允許外中斷0中斷

PX0=1; //優(yōu)先級(jí)設(shè)置,可選

EA=1; //總中斷允許

while(1);}/********外部中斷0中斷服務(wù)函數(shù)****/voidEX_INT0(void)interrupt0using2{LED=!LED;//取反LED燈}5.3外部中斷的仿真實(shí)例5.3.2入場人數(shù)檢測(cè)仿真實(shí)例任務(wù)要求:設(shè)計(jì)入場人數(shù)檢測(cè)計(jì)數(shù)裝置,使用紅外對(duì)射光電開關(guān)作為入場檢測(cè)傳感器,使用四位數(shù)碼管作為顯示器,顯示入場人數(shù)。硬件電路設(shè)計(jì)1軟件設(shè)計(jì)2①INT1初始化下降沿觸發(fā):IT1=1;開INT1中斷允許:EX1=1;開放總中斷:EA=1;②中斷服務(wù)程序人數(shù)累加:PCount++;③顯示:動(dòng)態(tài)顯示P1.3~P1.0位選P0段碼段5.3外部中斷的仿真實(shí)例5.3.2入場人數(shù)檢測(cè)仿真實(shí)例任務(wù)要求:設(shè)計(jì)入場人數(shù)檢測(cè)計(jì)數(shù)裝置,使用紅外對(duì)射光電開關(guān)作為入場檢測(cè)傳感器,使用四位數(shù)碼管作為顯示器,顯示入場人數(shù)。#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint ucharcodedisp_code[]={0xC0,0xF9,0xA4,

0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};uchardisBuf[4]; uintPCount=0;//記錄人數(shù)voiddisp_delay();//用于顯示的延時(shí)函數(shù)voidDisplayScan(void);//顯示器掃描voiddisplay_update(uintdat);//顯示voidmain(void){IT1=1; //下降沿觸發(fā)

EX1=1; //外中斷0允許

EA=1; //總中斷允許

while(1){DisplayScan(); //數(shù)碼管掃描

display_update(PCount);//更新緩存

}}voidEX0int(void)interrupt2using2{PCount++;//人數(shù)計(jì)數(shù)變量增加1}voiddisp_delay(){uinti;for(i=0;i<126;i++);}5.3外部中斷的仿真實(shí)例5.3.2入場人數(shù)檢測(cè)仿真實(shí)例任務(wù)要求:設(shè)計(jì)入場人數(shù)檢測(cè)計(jì)數(shù)裝置,使用紅外對(duì)射光電開關(guān)作為入場檢測(cè)傳感器,使用四位數(shù)碼管作為顯示器,顯示入場人數(shù)。voidDisplayScan(void){staticucharled_count=0;P0=0xff; //消隱

P1=(1<<(led_count%4)); //位選

P0=disp_code[disBuf[led_count%4]];//段選

disp_delay(); //延時(shí)

led_count++; //增加計(jì)數(shù)器的值}voiddisplay_update(uintdat){uchari;if(dat>9999)return;for(i=0;i<4;i++){disBuf[i]=dat%10;dat/=10;}}5.3.3簡易火焰檢測(cè)報(bào)警器仿真實(shí)例任務(wù)要求:當(dāng)檢測(cè)到火焰信號(hào)時(shí),發(fā)聲光報(bào)警;若檢測(cè)到火焰但沒有發(fā)出聲光報(bào)警信號(hào),則也可采用手動(dòng)報(bào)警方式報(bào)警;采用按鍵取消報(bào)警信號(hào)。硬件電路設(shè)計(jì)1無光:P32高電平有光:P32低電平中斷中斷按鍵沒按下:P33高電平按鍵按下:P33低電平P2.0高電平:蜂鳴器不響P2.0低電平:蜂鳴器不響P3.7查詢?nèi)∠存I5.3外部中斷的仿真實(shí)例5.3.3簡易火焰檢測(cè)報(bào)警器仿真實(shí)例任務(wù)要求:當(dāng)檢測(cè)到火焰信號(hào)時(shí),發(fā)聲報(bào)警;若檢測(cè)到火焰但沒有發(fā)出聲報(bào)警信號(hào),則也可采用手動(dòng)報(bào)警方式報(bào)警;采用按鍵取消報(bào)警信號(hào)。硬件電路設(shè)計(jì)1軟件設(shè)計(jì)2①外部中斷初始化下降沿觸發(fā):IT0=1;IT1=1;開中斷允許:EX0=1;

EX1=1;開放總中斷:EA=1;INT0中斷:蜂鳴器響,LED亮②中斷服務(wù)程序:報(bào)警③取消報(bào)警:查詢P3.7優(yōu)先級(jí)別:PX0=1;

PX1=1;INT1中斷:蜂鳴器響,LED亮5.3外部中斷的仿真實(shí)例5.3.3簡易火焰檢測(cè)報(bào)警器仿真實(shí)例任務(wù)要求:當(dāng)檢測(cè)到火焰信號(hào)時(shí),發(fā)聲報(bào)警;若檢測(cè)到火焰但沒有發(fā)出聲報(bào)警信號(hào),則也可采用手動(dòng)報(bào)警方式報(bào)警;采用按鍵取消報(bào)警信號(hào)。軟件設(shè)計(jì)2#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitLED=P1^7;//LED定義sbitbuzzer=P2^0; //蜂鳴器位定義sbitcancal=P3^7;//取消按鍵voiddelay(uintdat);//延時(shí)voidEX_init();//外部中斷初始化函數(shù)voidmain(){ EX_init();while(1){if(cancal==1) //檢查cancal是否按下

delay(10); //去抖

if(cancal==0)//檢查cancal是否按下

{

buzzer=1;//取消報(bào)警

LED=1;//取消光報(bào)警

}}}

voidEX_int0()interrupt0{

buzzer=0;//有火焰報(bào)警LED=0;//光報(bào)警}voidEX1_int1()interrupt2{

buzzer=0;//按鍵按下報(bào)警LED=0;//光報(bào)警IE1=0;}//清按鍵抖動(dòng)引起的標(biāo)志位

5.3外部中斷的仿真實(shí)例5.3.3簡易火焰檢測(cè)報(bào)警器仿真實(shí)例任務(wù)要求:當(dāng)檢測(cè)到火焰信號(hào)時(shí),發(fā)聲報(bào)警;若檢測(cè)到火焰但沒有發(fā)出聲報(bào)警信號(hào),則也可采用手動(dòng)報(bào)警方式報(bào)警;采用按鍵取消報(bào)警信號(hào)。軟件設(shè)計(jì)2voidEX_init(){IT0=1;//INT0下跳沿觸發(fā)

EX0=1;//開INT0中斷允許

PX0=1;//火焰檢測(cè)高優(yōu)先級(jí)

IT1=1;//INT1下跳沿觸發(fā)

EX1=1;//開INT1中斷允許

PX1=0;//按鍵報(bào)警低優(yōu)先級(jí)

EA=1; //開總中斷}voiddelay(uintdat){uinti,j;for(j=dat;j>0;j--) for(i=110;i>0;i--);}5.3外部中斷的仿真實(shí)例5.3.4基于外部中斷的行列式鍵盤仿真實(shí)例任務(wù)要求:使用數(shù)碼管(共陽)顯示4×4矩陣鍵盤中按下鍵的鍵號(hào)“0~F”。例如,1號(hào)鍵按下時(shí),數(shù)碼管顯示“1”;采用中斷掃描法獲得鍵值。硬件電路設(shè)計(jì)1數(shù)碼管:P1段碼端4*4鍵盤:掃描法P2.7~P2.4:輸出掃描碼1111:沒有按鍵按下與門輸出1逐列輸出0:按鍵按下與門輸出0只要有按鍵按下,與門輸出0,產(chǎn)生中斷中斷服務(wù)函數(shù):識(shí)別鍵號(hào)5.3.4基于外部中斷的行列式鍵盤仿真實(shí)例任務(wù)要求:使用數(shù)碼管(共陽)顯示4×4矩陣鍵盤中按下鍵的鍵號(hào)“0~F”。例如,1號(hào)鍵按下時(shí),數(shù)碼管顯示“1”;采用中斷掃描法獲得鍵值。軟件設(shè)計(jì)2#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽0~Fucharcodekey[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//鍵值voidKey_value()interrupt0{ucharkey_scan[]={0xef,0xdf,0xbf,0x7f};//掃描uchari=0,j=0;for(i=0;i<4;i++){P2=key_scan[i];//輸出掃描碼

for(j=0;j<16;j++){if(key[j]==P2)//讀鍵值,并判斷鍵號(hào)

{

P1=seg[j];//顯示閉合鍵

溫馨提示

  • 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)論