第6章 輸入輸出和中斷系統(tǒng)_第1頁
第6章 輸入輸出和中斷系統(tǒng)_第2頁
第6章 輸入輸出和中斷系統(tǒng)_第3頁
第6章 輸入輸出和中斷系統(tǒng)_第4頁
第6章 輸入輸出和中斷系統(tǒng)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章輸入/輸出和中斷系統(tǒng)

單片機(jī)原理及應(yīng)用16.1微機(jī)的輸入/輸出方式CPU與外部設(shè)備交換信息通常有以下幾種方式:(1)程序控制傳送方式,又分為無條件傳送方式和查詢傳送方式(2)中斷傳送方式(3)直接存儲(chǔ)器存取(DMA)方式

無條件傳送流程圖查詢傳送流程圖2◆無條件傳送的缺點(diǎn)必須確認(rèn)外設(shè)是準(zhǔn)備好的◆查詢傳送的缺點(diǎn)

CPU在查詢過程中什么都不能做,CPU的工作效率低下◆解決的方法采用中斷方式◆中斷方式與以上兩種方式的根本區(qū)別

CPU由數(shù)據(jù)傳送的主動(dòng)方變?yōu)楸粍?dòng)方外設(shè)需要傳送數(shù)據(jù),向CPU發(fā)出中斷請(qǐng)求,CPU響應(yīng)后,轉(zhuǎn)去為外設(shè)服務(wù)(傳送數(shù)據(jù)),服務(wù)后CPU繼續(xù)執(zhí)行原來的程序3◆應(yīng)用程序的一般形式從本章開始,涉及到單片機(jī)的應(yīng)用(設(shè)計(jì)單片機(jī)的應(yīng)用電路、編制單片機(jī)的應(yīng)用程序)許多單片機(jī)的初學(xué)者都普遍存在這樣的問題:對(duì)自己要設(shè)計(jì)的作品的功能很清楚,但不知道如何安排各個(gè)部分程序,也就是不太會(huì)設(shè)計(jì)程序流程圖4◆應(yīng)用程序的一般形式(以你們?yōu)槔┏跏蓟鞒绦驘o限循環(huán)執(zhí)行的幾件事(可能包含幾個(gè)子程序)其中如果有緊急事情的話,還需要有中斷服務(wù)程序56.2中斷系統(tǒng)概念中斷的定義:

當(dāng)中央處理器CPU正在處理某事件時(shí),外界發(fā)生了更為緊急的請(qǐng)求,要求CPU暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個(gè)緊急事件,處理完畢后,再回到原來被中斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。主程序斷點(diǎn)正在執(zhí)行中的某條指令中斷服務(wù)程序RETI響應(yīng)中斷請(qǐng)求返回主程序中斷響應(yīng)中斷返回中斷服務(wù)中斷過程流程6◆當(dāng)CPU正在處理一個(gè)中斷源請(qǐng)求時(shí),發(fā)生了另一個(gè)優(yōu)先級(jí)比它高的中斷源請(qǐng)求。如果CPU能夠暫停對(duì)原來的中斷源的處理程序,轉(zhuǎn)而去處理優(yōu)先級(jí)更高的中斷源請(qǐng)求,處理完以后,再回到原來的低級(jí)中斷處理程序,這樣的過程稱為中斷嵌套?!艟哂羞@種功能的中斷系統(tǒng)稱為多級(jí)中斷系統(tǒng);沒有中斷嵌套功能的則稱為單級(jí)中斷系統(tǒng)。主程序響應(yīng)低級(jí)別中斷請(qǐng)求響應(yīng)高級(jí)別中斷請(qǐng)求二級(jí)中斷嵌套示意76.3MCS-51中斷系統(tǒng)結(jié)構(gòu)80C51單片機(jī)有5個(gè)中斷源,具有兩個(gè)中斷優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷嵌套5個(gè)中斷源的排列順序由中斷優(yōu)先級(jí)控制寄存器IP和順序查詢邏輯電路(圖6-4中的自然優(yōu)先級(jí)排隊(duì)電路)共同決定5個(gè)中斷源對(duì)應(yīng)5個(gè)固定的中斷入口地址(中斷矢量,見p.146)與中斷系統(tǒng)有關(guān)的特殊功能寄存器(4個(gè)):

定時(shí)器控制寄存器TCON、串口控制寄存器SCON、中斷允許寄存器IE、中斷優(yōu)先級(jí)控制寄存器IP5個(gè)中斷源:外部中斷:INT0和INT1

定時(shí)器/計(jì)數(shù)器溢出中斷:定時(shí)器/計(jì)數(shù)器T0和T1

串口中斷:TX或RX(發(fā)送或接收中斷)89

6.3.1中斷源與中斷請(qǐng)求標(biāo)志

MCS-51單片機(jī)設(shè)有5個(gè)中斷源,中斷請(qǐng)求標(biāo)志分別是:2個(gè)外部中斷請(qǐng)求標(biāo)志:IE0(INT0)、IE1(INT1)2個(gè)內(nèi)部定時(shí)器/計(jì)數(shù)器溢出中斷請(qǐng)求標(biāo)志:TF0(定時(shí)器/計(jì)數(shù)器T0)、TF1(定時(shí)器/計(jì)數(shù)器T1)1個(gè)內(nèi)部串行口中斷請(qǐng)求標(biāo)志:TI或RI

這些中斷請(qǐng)求標(biāo)志分別由特殊功能寄存器TCON和SCON的相應(yīng)位鎖存10定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)TF1TF0IE1IT1IE0IT088HT1溢出中斷請(qǐng)求標(biāo)志T0溢出中斷請(qǐng)求標(biāo)志外中斷0觸發(fā)方式0:低電平觸發(fā)1:邊沿觸發(fā)外中斷0中斷請(qǐng)求標(biāo)志0:無中斷請(qǐng)求1:有中斷請(qǐng)求外中斷1觸發(fā)方式外中斷1中斷請(qǐng)求標(biāo)志CPU相應(yīng)中斷后,將TF1自動(dòng)清0若查詢方式,則需軟件清011串口控制寄存器(SCON)TIRI98H串口發(fā)送中斷請(qǐng)求標(biāo)志每發(fā)送1幀數(shù)據(jù)后硬件置1軟件清0串口接收中斷請(qǐng)求標(biāo)志每接收1幀數(shù)據(jù)后硬件置1軟件清0注:CPU響應(yīng)中斷后,并不清除TI或RI,所以必須由軟件清0126.3.2MCS-51的中斷控制中斷的開放和屏蔽中斷 中斷允許寄存器IE的作用,是控制所有中斷源的開放或禁止,以及每個(gè)中斷源是否被允許。寄存器IE的位格式如下:中斷允許寄存器(IE)EA××ESET1EX1ET0EX0A8H總允許位串口外中斷0定時(shí)器T0外中斷1定時(shí)器T11:允許中斷0:禁止中斷13中斷優(yōu)先級(jí)別的設(shè)定MCS-51系列單片機(jī)具有兩個(gè)中斷優(yōu)先級(jí)。對(duì)于所有的中斷源,均可由軟件設(shè)置為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷每個(gè)中斷源的中斷優(yōu)先級(jí)都可以通過程序來設(shè)定,由中斷優(yōu)先級(jí)寄存器IP統(tǒng)一管理中斷優(yōu)先級(jí)寄存器(IP)×××PSPT1PX1PT0PX0B8H串口外中斷0定時(shí)器T0外中斷1定時(shí)器T10:低優(yōu)先級(jí)1:高優(yōu)先級(jí)14例如CPU開中斷可由以下兩條指令來實(shí)現(xiàn):

SETBEA;EA置1或ORLIE,#80H;按位“或”,EA置1CPU關(guān)中斷可由以下兩條指令來實(shí)現(xiàn):

CLREA;EA清0或ANLIE,#7FH;按位“與”,EA清0

又如設(shè)置外部中斷源0為高優(yōu)先級(jí),外部中斷源1為低優(yōu)先級(jí),可由下面指令來實(shí)現(xiàn):

SETBPX0;PX0置1CLRPX1;PX1清015

優(yōu)先級(jí)結(jié)構(gòu)在工作過程中中斷系統(tǒng)對(duì)各中斷源的處理遵循以下基本原則:低優(yōu)先級(jí)中斷可以被高優(yōu)先級(jí)中斷所中斷,反之不能。中斷源的自然優(yōu)先級(jí)中斷源同級(jí)自然優(yōu)先級(jí)外部中斷0最高級(jí)定時(shí)器0中斷↓外部中斷1┆

定時(shí)器1中斷↓串行口中斷最低級(jí)16例:設(shè)80C51的片外中斷為高優(yōu)先級(jí),片內(nèi)中斷為低優(yōu)先級(jí),試設(shè)置IP相應(yīng)值。解:(a)用字節(jié)操作指令

MOVIP,#05H

(b)用位操作指令

SETBPX0SETBPX1CLRPSCLRPT0CLRPT1176.3.3中斷處理過程中斷處理過程可分為三個(gè)階段,即中斷響應(yīng)、中斷處理和中斷返回。

(1)中斷響應(yīng)◆響應(yīng)條件有中斷源發(fā)出中斷請(qǐng)求中斷總允許位EA=1,即CPU開中斷申請(qǐng)中斷的中斷源的中斷允許位為1,即中斷沒有被屏蔽無同級(jí)或更高級(jí)中斷正在被服務(wù)當(dāng)前的指令周期已經(jīng)結(jié)束若現(xiàn)行指令為RETI或者是訪問IE或IP指令時(shí),該指令以及緊接著的另一條指令已執(zhí)行完18◆

中斷響應(yīng)操作過程

MCS-51的CPU在第1個(gè)機(jī)器周期按優(yōu)先級(jí)順序查詢中斷標(biāo)志,如查詢到某個(gè)中斷標(biāo)志為1,將在接下來的2個(gè)機(jī)器周期按優(yōu)先級(jí)進(jìn)行中斷處理:中斷系統(tǒng)首先將斷點(diǎn)地址進(jìn)棧保護(hù),并通過硬件自動(dòng)將相應(yīng)的中斷矢量地址裝入PC,以便進(jìn)入相應(yīng)的中斷服務(wù)程序?!?/p>

中斷響應(yīng)時(shí)間

在一般情況下,MCS-51響應(yīng)中斷的時(shí)間至少為3個(gè)機(jī)器周期。中斷源中斷矢量地址中斷源中斷矢量地址外中斷00003H定時(shí)器T0000BH外中斷10013H定時(shí)器T1001BH串口0023H19(2)中斷處理◆各中斷源的入口矢量地址之間只相隔8個(gè)單元,一般的中斷服務(wù)程序是容納不下的,因而最常用的方法是在中斷入口地址單元處存放一條無條件轉(zhuǎn)移指令,轉(zhuǎn)至存儲(chǔ)器其他的任何空間。◆若在執(zhí)行當(dāng)前中斷程序時(shí)禁止更高優(yōu)先級(jí)中斷,應(yīng)用軟件關(guān)閉CPU中斷(屏蔽該高級(jí)中斷),在中斷返回前再開放中斷?!粼诒Wo(hù)現(xiàn)場和恢復(fù)現(xiàn)場時(shí),為了不使現(xiàn)場信息受到破壞或造成混亂,一般應(yīng)關(guān)閉CPU中斷,使CPU暫不響應(yīng)新的中斷請(qǐng)求(用于在應(yīng)用中使用了兩個(gè)以上的中斷)0003H(INT0的中斷矢量):LJMPINT_0(INT0程序入口地址)中斷服務(wù)程序:保護(hù)現(xiàn)場

…………中斷服務(wù)恢復(fù)現(xiàn)場

RETI20(3)中斷返回在中斷服務(wù)程序中,最后一條指令必須為中斷返回指令RETI

返回到程序斷點(diǎn)處繼續(xù)執(zhí)行6.4中斷請(qǐng)求的撤除6.4.1.定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求的撤除 其中斷請(qǐng)求是自動(dòng)撤除的,無需采取其他措施。6.4.2.串行口中斷請(qǐng)求的撤除通過如下指令將RI和TI撤除:

CLRRI;撤除接收中斷

CLRTI;撤除發(fā)送中斷216.4.3.外部中斷請(qǐng)求的撤除(電平觸發(fā))

INSVR:ANLP1,#0FEHORLP1,#01H┇RETIEND22用單穩(wěn)態(tài)觸發(fā)器構(gòu)成的外部中斷請(qǐng)求電路(電平觸發(fā))單穩(wěn)態(tài)觸發(fā)器中斷請(qǐng)求信號(hào)由于電平觸發(fā)的外部中斷請(qǐng)求需人為撤消,所以,外部中斷請(qǐng)求一般設(shè)置為邊沿觸發(fā)236.5中斷系統(tǒng)的初始化及應(yīng)用6.5.1.中斷系統(tǒng)的初始化(1)開放某中斷源的中斷請(qǐng)求

(2)設(shè)定所用中斷的中斷優(yōu)先級(jí)*(3)若為外部中斷,則應(yīng)規(guī)定中斷觸發(fā)方式(低電平或邊沿觸發(fā))(4)CPU開中斷24例6-2:寫出INT1為低電平觸發(fā)、高優(yōu)先級(jí)的中斷系統(tǒng)初始化程序。解:(1)采用位操作指令

SETBEX1

;外中斷1開中斷

SETBPX1;令其為高優(yōu)先級(jí)

CLRIT1;令其為電平觸發(fā)

SETBEA;CPU開總中斷

(2)采用字節(jié)型指令

MOVIE,#84H

;開中斷

ORLIP,#04H;高優(yōu)先級(jí)

ANLTCON,#0FBH;電平觸發(fā)256.5.2.中斷系統(tǒng)的應(yīng)用(中斷處理)

ORGADDRESS;ADDRESS為中斷矢量(5個(gè)中斷矢量之一)

LJMPINTVS;INTVS為中斷服務(wù)程序入口MAIN: ……..┇

LJMPMAIN

INTVS:CLREA;關(guān)中斷

PUSHPSW;保護(hù)現(xiàn)場

PUSHACC┇SETBEA;開中斷,允許CPU響應(yīng)高級(jí)中斷┇中斷服務(wù)┇

CLREA;關(guān)中斷

POPACC;恢復(fù)現(xiàn)場

POPPSW┇SETBEA;開中斷

RETI;中斷返回若系統(tǒng)中只使用了一個(gè)中斷源,則CPU開、關(guān)中斷可以略去26

中斷源及其對(duì)應(yīng)的中斷矢量(表6-1p.146)外部中斷0(INT0):0003H

定時(shí)器0中斷:000BH

外部中斷1(INT1):0013H

定時(shí)器1中斷:001BH

串口中斷:0023H

中斷矢量的間隔為8個(gè)單元,所以應(yīng)在中斷矢量地址處安排一條無條件轉(zhuǎn)移指令LJMP中斷服務(wù)程序標(biāo)號(hào)(或AJMP)6.5.3中斷應(yīng)用舉例例6-3P1.7~P1.4為輸入口,P1.3~P1.0為輸出口,反映輸入口開關(guān)的狀態(tài),輸入為高電平時(shí),相應(yīng)的LED亮。每中斷一次,對(duì)外部狀態(tài)檢測(cè)一次,外部中斷采用邊沿觸發(fā)方式。(R-S觸發(fā)器作用:消除開關(guān)抖動(dòng)

1-S2-R)27流程圖28;機(jī)器碼必須從0000H開始存放;轉(zhuǎn)到主程序;INT0的中斷矢量;轉(zhuǎn)到INT0中斷服務(wù)程序;定義主程序;允許INT0中斷;設(shè)為邊沿觸發(fā);CPU開中斷;CPU等中斷;定義中斷服務(wù)程序;設(shè)P1口高4位輸入和低4位輸出初態(tài);將狀態(tài)送到P1口;讀開關(guān)狀態(tài);將高4位狀態(tài)交換到低4位;輸出到低4位;中斷返回 ORG0000HLJMPMAIN

ORG0003H

LJMPINSER

ORG0050HMAIN:SETBEX0

SETBIT0

SETBEAHERE:SJMPHERE

ORG0200H

INSER:MOVA,#0F0HMOVP1,A

MOVA,P1

SWAPA

MOVP1,A

RETIEND

初始化296.6MCS-51外部中斷擴(kuò)展方法

MCS-51單片機(jī)有兩個(gè)外部中斷請(qǐng)求輸入端

INT0和INT1。在實(shí)際應(yīng)用中,若外部中斷源有兩個(gè)以上時(shí),就需要進(jìn)行外部中斷擴(kuò)展。擴(kuò)展外部中斷源的方法有兩種:用定時(shí)器擴(kuò)展外部中斷源(定時(shí)器章節(jié)介紹)I/O口查詢方式擴(kuò)展外部中斷源306.6.2.硬件申請(qǐng)軟件查詢擴(kuò)展中斷源注:反相器一定是OC門輸出,否則輸出短路!用4個(gè)反相器構(gòu)成的4輸入或非門31中斷服務(wù)程序是一個(gè)查詢程序32 ORG0003H LJMPINTRP ………INTRP:PUSHPSW PUSHACC JBP1.0,DV1 JBP1.1,DV2 JBP1.2,DV3 JBP1.3,DV4EXIT: POPACC POPPSW RETIDV1: ……..

裝置1中斷服務(wù)

AJMPEXITDV2: ……..

裝置2中斷服務(wù)

AJMPEXITDV3: ……..

裝置3中斷服務(wù)

AJMPEXITDV4: ……..

裝置4中斷服務(wù)

AJMPEXIT33例6-4利用中斷顯示系統(tǒng)故障正常時(shí)監(jiān)測(cè)點(diǎn)為低電平故障時(shí)監(jiān)測(cè)點(diǎn)為高電平系統(tǒng)工作正常時(shí),4個(gè)監(jiān)測(cè)點(diǎn)均為低電平,LED不亮某個(gè)部分出現(xiàn)故障時(shí),相應(yīng)的監(jiān)測(cè)點(diǎn)為高電平,對(duì)應(yīng)的LED點(diǎn)亮LED1LED2LED3LED434

ORG0000H

AJMPMAIN

;上電復(fù)位,轉(zhuǎn)向主程序

ORG0003H

;外部中斷0入口地址

AJMPINSER

;轉(zhuǎn)向中斷服務(wù)程序

ORG0050HMAIN:ANLP1,#55H;P1.0,P1.2,P1.4,P1.6為輸入;P1.1,P1.3,P1.5,P1.7輸出為0SETBEX0;允許外部中斷0中斷

SETBIT0;選擇邊沿觸發(fā)方式

SETBEA;CPU開中斷HERE:SJMPHERE

;等待中斷INSER:JNBP1.0,L1;查詢中斷源,P1.0=0,轉(zhuǎn)L1SETBP1.1;是P1.0引起的中斷,使相應(yīng)的二極管亮L1:JNBP1.2,L2;繼續(xù)查詢

SETBP1.3L2:JNBP1.4,L3SETBP1.5L3:JNBP1.6,L4SETBP1.7L4:RETIEND

注意查詢的方法監(jiān)測(cè)點(diǎn)低電平為正常P1.0、P1.2、P1.4、P1.6接監(jiān)測(cè)點(diǎn)

設(shè)置堆棧35中斷應(yīng)用:

1.LED控制S1S2用按鍵開關(guān)S1、S2控制LED閃亮與熄滅P1.0=0,LED亮P1.0=1,LED滅36流程圖延時(shí)子程序(略)控制熄滅控制閃亮37

LIANGBIT00H ORG0000H LJMPST ORG0003H LJMPINT_0

ORG0013H LJMPINT_1

ORG0050HST: SETBP1.0

SETBEX0

SETBIT0

SETBEX1

SETBIT1

SETBEA CLRLIANG

MOVSP,#60H;定義一個(gè)位標(biāo)志,LIANG=1,LED閃亮;轉(zhuǎn)到主程序;轉(zhuǎn)到INT0服務(wù),控制熄滅;轉(zhuǎn)到INT1服務(wù),控制閃亮;定義主程序;外設(shè)初始化,LED熄滅;允許INT0中斷;INT0邊沿觸發(fā);允許INT1中斷;INT1邊沿觸發(fā);CPU開中斷;標(biāo)志初始化;設(shè)置堆棧38MAIN: JNBLIANG,LED_MIE CLRP1.0 LCALLDELAY SETBP1.0 LCALLDELAY SJMPMAINLED_MIE:SETBP1.0 SJMPMAININT_0:CLRLIANG RETIINT_1:SETBLIANG RETI;亮標(biāo)志≠1,轉(zhuǎn)LED滅;否則LED閃亮;LED熄滅;亮標(biāo)志=0;中斷返回;亮標(biāo)志=1;中斷返回CPLP1.0LCALLDELAY39DELAY: MOVR7,#250DL1: MOVR6,#250DL2: NOP;1機(jī)器周期(1uS)

NOP;1機(jī)器周期(1uS)

DJNZR6,DL2;2機(jī)器周期(2uS)

DJNZR7,DL1 RET;延時(shí)250mS END ;fosc=12MHz40中斷應(yīng)用:

2.中斷控制流水燈循環(huán)方向用開關(guān)控制流水燈的循環(huán)方向采用中斷控制方式在中斷服務(wù)程序中設(shè)置循環(huán)方向標(biāo)志41主程序流程圖中斷服務(wù)程序流程圖(有鍵按下進(jìn)入)F_L為循環(huán)方向標(biāo)志42 F_LBIT00H ORG0000H LJMPMAIN ORG0003H LJMPINT_0 ORG0050H;********主程序初始化********MAIN: SETBEX0 SETBIT0 SETBEA MOVSP,#60H MOVA,#0FEH SET

溫馨提示

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