第5章 MCS-51單片機(jī)中斷系統(tǒng)_第1頁
第5章 MCS-51單片機(jī)中斷系統(tǒng)_第2頁
第5章 MCS-51單片機(jī)中斷系統(tǒng)_第3頁
第5章 MCS-51單片機(jī)中斷系統(tǒng)_第4頁
第5章 MCS-51單片機(jī)中斷系統(tǒng)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章中斷系統(tǒng)5.1 中斷的概念5.2 MCS-51單片機(jī)的中斷流程5.3 MCS-51的中斷響應(yīng)條件和中斷處理5.4 中斷程序編程舉例5.1中斷的概念當(dāng)CPU正在處理某事件的時(shí)候,外部發(fā)生的某一事件請(qǐng)求CPU迅速去處理,于是CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。中斷服務(wù)處理完該事件后,再返回到原來被中止的地方繼續(xù)原來的工作,這樣的過程稱為中斷。中斷舉例中斷源、中斷允許控制、中斷優(yōu)先級(jí)處理、中斷響應(yīng)過程中斷服務(wù)程序1中斷服務(wù)程序

2中斷事件1中斷事件

25.2MCS-51單片機(jī)的中斷流程主程序單片機(jī)中斷的應(yīng)用舉例例1假設(shè)某消防隊(duì)坐落在道路的一邊,正常情況下,交通紅綠燈以30s的間隔輪流點(diǎn)亮,當(dāng)有消防任務(wù)時(shí),消防官兵只需要按一下設(shè)置在路邊的消防緊急按鈕,則道路交通燈就會(huì)變成紅燈并持續(xù)10s時(shí)間,禁止其他車輛通行,使消防車可以順利通過,10s后自動(dòng)返回紅綠燈輪流點(diǎn)亮的正常狀態(tài),用51單片機(jī)的中斷可以實(shí)現(xiàn)上述功能。例2在工業(yè)應(yīng)用場合經(jīng)常利用中斷電路來實(shí)現(xiàn)系統(tǒng)的故障顯示。假設(shè)有四個(gè)終端設(shè)備和主控室相連接,主控室可以采用聲音報(bào)警或指示燈等方式表示終端設(shè)備是否正常工作。當(dāng)終端設(shè)備正常工作時(shí),主控室指示燈滅,當(dāng)終端設(shè)備工作異常時(shí),主控室對(duì)應(yīng)指示燈亮,用單片機(jī)中斷電路可以實(shí)現(xiàn)??偨Y(jié):單片機(jī)的中斷能實(shí)現(xiàn)哪些功能?P82解決快速CPU和慢速外設(shè)之間的矛盾,使CPU和外設(shè)可以并行工作。具備故障處理能力,提高機(jī)器自身的可靠性。中斷方式消除了CPU在查詢方式中的等待現(xiàn)象,大大提高了CPU的工作效率。及時(shí)采集、實(shí)時(shí)控制。將現(xiàn)場采集的數(shù)據(jù)通過中斷方式及時(shí)傳送給CPU,經(jīng)過處理后立即做出反應(yīng),實(shí)現(xiàn)現(xiàn)場控制。中斷和子程序調(diào)用的區(qū)別P82中斷子程序調(diào)用中斷產(chǎn)生是隨機(jī)的程序事先安排的可為外設(shè)和單片機(jī)內(nèi)部事件服務(wù)為主程序服務(wù),與外設(shè)無關(guān)主程序┇

MOVA,3AH

LCALLDELAYMOVB,A┇

LCALLDELAYMOVA,B┇DELAY子程序DELAY:MOVR0,30H┇

RET子程序調(diào)用中斷服務(wù)程序1中斷服務(wù)程序

2中斷事件1中斷事件

2中斷流程主程序中斷和子程序調(diào)用的區(qū)別P82中斷子程序調(diào)用中斷產(chǎn)生是隨機(jī)的程序事先安排的可為外設(shè)和單片機(jī)內(nèi)部事件服務(wù)為主程序服務(wù),與外設(shè)無關(guān)中斷程序和主程序的關(guān)系ORG0000HLJMPMAINORG0003H;外部中斷0的中斷入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中斷0下降沿觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制LOOP:SETBP1.0;綠燈被點(diǎn)亮

LCALLDELAY1S

;延時(shí)1sCLRP1.0;綠燈熄滅

SETBP1.1;紅燈被點(diǎn)亮

LCALLDELAY1S;延時(shí)1sCLRP1.1;紅燈熄滅

LJMP LOOPINT_EX0:SETBP1.1;紅燈被點(diǎn)亮

CLRP1.0;綠燈熄滅

LCALLDELAY1S;延時(shí)1sRETI

中斷初始化程序51中斷系統(tǒng)的五個(gè)中斷源P831、INT0——外部中斷0。中斷請(qǐng)求通過P3.2引腳輸入。2、INT1——外部中斷1

中斷請(qǐng)求通過P3.3引腳輸入。3、T0——定時(shí)器/計(jì)數(shù)器0溢出中斷4、T1——定時(shí)器/計(jì)數(shù)器1溢出中斷5、TX/RX——串行口中斷。P3口第二功能(P20)讀選通外部寫選通外部計(jì)數(shù)輸入計(jì)數(shù)器定時(shí)器計(jì)數(shù)輸入計(jì)數(shù)器定時(shí)器申請(qǐng)外部中斷申請(qǐng)外部中斷串行數(shù)據(jù)發(fā)送串行數(shù)據(jù)接收功能含義RAMRAM1/0/10RDWRTTINTINTRXDTXD1010第二功能51中斷系統(tǒng)的五個(gè)中斷源P831、INT0——外部中斷0。中斷請(qǐng)求通過P3.2引腳輸入。2、INT1——外部中斷1

中斷請(qǐng)求通過P3.3引腳輸入。3、T0——定時(shí)器/計(jì)數(shù)器0溢出中斷4、T1——定時(shí)器/計(jì)數(shù)器1溢出中斷5、TX/RX——串行口中斷。

當(dāng)串行口完成一幀數(shù)據(jù)的發(fā)送或接收時(shí),

便自動(dòng)請(qǐng)求中斷。溢出時(shí)自動(dòng)請(qǐng)求中斷P3口第二功能(P20)讀選通外部寫選通外部計(jì)數(shù)輸入計(jì)數(shù)器定時(shí)器計(jì)數(shù)輸入計(jì)數(shù)器定時(shí)器申請(qǐng)外部中斷申請(qǐng)外部中斷串行數(shù)據(jù)發(fā)送串行數(shù)據(jù)接收功能含義RAMRAM1/0/10RDWRTTINTINTRXDTXD1010第二功能IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXRXESET0EX0EX1ET1EA自然優(yōu)先級(jí)矢量地址高級(jí)中斷請(qǐng)求自然優(yōu)先級(jí)矢量地址低級(jí)中斷請(qǐng)求PX0PT0PX1PT1PSIEIP中斷請(qǐng)求標(biāo)志寄存器

TCON、SCON中斷允許控制寄存器

IE中斷優(yōu)先級(jí)寄存器IPMCS-51單片機(jī)中斷系統(tǒng)結(jié)構(gòu)P82interrupt

enablepriorityconfig單片機(jī)例5.5消防緊急按鈕源程序如下:ORG0000HLJMPMAINORG0003H;外部中斷0的中斷入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中斷0下降沿觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制LOOP:SETBP1.0;綠燈被點(diǎn)亮

LCALLDELAY1S

;延時(shí)1sCLRP1.0;綠燈熄滅

SETBP1.1;紅燈被點(diǎn)亮

LCALLDELAY1S;延時(shí)1sCLRP1.1;紅燈熄滅

LJMP LOOPINT_EX0:SETBP1.1;紅燈被點(diǎn)亮

CLRP1.0;綠燈熄滅

LCALLDELAY1S;延時(shí)1sRETI

中斷初始化程序5.2.1中斷請(qǐng)求標(biāo)志寄存器想要接聽電話必須有兩個(gè)條件:電話鈴必須響;你聽到鈴聲響。對(duì)于51單片機(jī)同樣如此,光有中斷源是不夠的,還必須能夠被接收到。51單片機(jī)采用設(shè)置中斷請(qǐng)求標(biāo)志寄存器TCON和串行口中斷請(qǐng)求標(biāo)志寄存器SCON的方式來記錄是否接收到中斷,接收到則相應(yīng)位置1。TIRI

SCON(98H)9FH9EH9DH9CH9BH9AH99H98HTF1TF0IE1IT1IE0IT0

TCON(88H)8FH8EH8DH8CH8BH8AH89H88HTF1TF0IE1IT1IE0IT0

TCON(88H)8FH8EH8DH8CH8BH8AH89H88H1、TCON中斷請(qǐng)求標(biāo)志寄存器

TCON寄存器的8位使用了6位,另外兩位將在第六章使用。

TCON鎖存T0和T1的溢出中斷標(biāo)志及外部中斷0和1的中斷標(biāo)志等。externalTrigger各控制位的含義TF1:定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志位。T1TF0:定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志位。T0當(dāng)啟動(dòng)T1計(jì)數(shù)后,T1從初值開始加1計(jì)數(shù),計(jì)數(shù)器最高位產(chǎn)生溢出時(shí),由硬件自動(dòng)使TF1置1,向CPU發(fā)出中斷請(qǐng)求。當(dāng)CPU響應(yīng)中斷時(shí),硬件將自動(dòng)對(duì)TF1清0。IE1:外部中斷1的中斷請(qǐng)求標(biāo)志。INT1(P3.3)IE0:外部中斷0的中斷請(qǐng)求標(biāo)志。INT0(P3.2)以IE1為例:當(dāng)檢測到外部中斷引腳INT1(P3.3)上存在有效的中斷請(qǐng)求信號(hào)時(shí),由硬件自動(dòng)使IE1置1。當(dāng)CPU響應(yīng)中斷請(qǐng)求時(shí),由硬件自動(dòng)使IE1清0。

各控制位的含義IE1:外部中斷1的中斷請(qǐng)求標(biāo)志。INT1(P3.3)IE0:外部中斷0的中斷請(qǐng)求標(biāo)志。INT0(P3.2)以IE1為例:當(dāng)檢測到外部中斷引腳INT1(P3.3)上存在有效的中斷請(qǐng)求信號(hào)時(shí),由硬件自動(dòng)使IE1置1。當(dāng)CPU響應(yīng)中斷請(qǐng)求時(shí),由硬件自動(dòng)使IE1清0。

IT1:外部中斷1的中斷觸發(fā)方式控制位。IT0:外部中斷0的中斷觸發(fā)方式控制位。以IT1為例:

IT1=0時(shí),外部中斷1為低電平觸發(fā)方式。即若引腳P3.3為低電平,則有中斷請(qǐng)求信號(hào),則IE1置1;

IT1=1時(shí),外部中斷1為下降沿觸發(fā)方式。

若引腳P3.3的電平一個(gè)機(jī)器周期高電平,接著的下一個(gè)機(jī)器周期為低電平,則有中斷請(qǐng)求信號(hào),則IE1置1。注意:IE1、IE0由硬件自動(dòng)設(shè)置

IT1、IT0可由用戶設(shè)置。提問:外部中斷0下降沿觸發(fā),怎么置位?

SETBIT0Trigger2、串行口中斷請(qǐng)求標(biāo)志寄存器SCONTIRI

SCON(98H)9FH9EH9DH9CH9BH9AH99H98H

SCON為串行口控制寄存器,其低2位鎖存串行口的接收中斷和發(fā)送中斷標(biāo)志RI和TI。

SCON中TI和RI的格式如下所示SCON中控制位的含義TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志CPU將一個(gè)數(shù)據(jù)寫入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)發(fā)送。每發(fā)送完一幀串行數(shù)據(jù)后,硬件置TI=1。但CPU響應(yīng)中斷時(shí),并不清除TI,必須在中斷服務(wù)程序中由程序?qū)I清0。RI:串行口接收中斷請(qǐng)求標(biāo)志在串行口允許接收時(shí),每接收完一個(gè)串行幀,硬件置RI=1

。CPU響應(yīng)中斷時(shí)不會(huì)清除RI,必須在中斷服務(wù)程序中由程序?qū)I清0。transmitreceive

總結(jié):MCS-51的中斷標(biāo)志

優(yōu)先級(jí)高低INT0INT1T0T1串口IE0TF0IE1TF1TIRI中斷源中斷標(biāo)志位每一個(gè)中斷源都有相應(yīng)的中斷標(biāo)志位;某一個(gè)中斷源申請(qǐng)中斷,相應(yīng)中斷標(biāo)志位置1。中斷矢量0003H000BH0013H001BH0023HP265.2.2中斷允許控制寄存器EAESET1EX1ET0EX0

IE(A8H)AFHAEHADHACHABHAAHA9HA8HEA—中斷允許總控制位。

EA=0,屏蔽所有的中斷請(qǐng)求;

EA=1,CPU開放中斷。開放哪個(gè)中斷,還要取決于各中斷源的中斷允許控制位的狀態(tài)。這就是所謂的兩級(jí)控制。EnableES—串行口中斷允許位

ES=0,禁止串行口中斷;S:serial

ES=1,允許串行口中斷ET1—定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位

ET1=0,禁止T1中斷;T:timer

ET1=1,允許T1中斷ET0—定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位

ET0=0,禁止T0中斷;

ET0=1,允許T0中斷EX1—外部中斷1的中斷允許位

EX1=0,禁止外部中斷1中斷;X:external

EX1=1,允許外部中斷1中斷EX0—外部中斷0的中斷允許位。

EX0=0,禁止外部中斷0中斷;

EX0=1,允許外部中斷0中斷例5.1:假設(shè)允許外部中斷0中斷,禁止其他中斷。試設(shè)置IE的相應(yīng)值。解:對(duì)于51單片機(jī)采用兩級(jí)中斷控制,所以(IE)=10000001B=81H,對(duì)IE的設(shè)置可以用如下方式實(shí)現(xiàn)(a)用字節(jié)操作指令

MOVIE,#81H;(b)用位操作指令

SETBEX0 ;外部中斷0允許中斷

SETBEA ;CPU開中斷一般情況下,建議使用位操作方式設(shè)置IE的值,這樣可以增加程序的可讀性。

EAESET1EX1ET0EX0

IE(A8H)11000000PSPT1PX1PT0PX0IP(B8H)

BCHBBHBAHB9HB8H1、中斷優(yōu)先級(jí)寄存器IP的格式PS—串行口中斷優(yōu)先級(jí)控制位PT1—定時(shí)器/計(jì)數(shù)器T1中斷優(yōu)先級(jí)控制位PX1—外部中斷1中斷優(yōu)先級(jí)控制位PT0—定時(shí)器/計(jì)數(shù)器T0中斷優(yōu)先級(jí)控制位PX0—外部中斷0中斷優(yōu)先級(jí)控制位若某控制位為1,則相應(yīng)的中斷源規(guī)定為高級(jí)中斷;反之,為0,則相應(yīng)的中斷源規(guī)定為低級(jí)中斷。5.2.3中斷優(yōu)先級(jí)控制priority2、中斷優(yōu)先級(jí)排列順序

當(dāng)同時(shí)接收到幾個(gè)同一優(yōu)先級(jí)的中斷請(qǐng)求時(shí),響應(yīng)哪個(gè)中斷源則取決于內(nèi)部硬件查詢順序。其優(yōu)先級(jí)(自然優(yōu)先級(jí))排列順序如下圖所示:中斷源

同級(jí)內(nèi)的中斷優(yōu)先級(jí)外部中斷0中斷高級(jí)定時(shí)器/計(jì)數(shù)器T0溢出中斷外部中斷1定時(shí)器/計(jì)數(shù)器T1溢出中斷串行口中斷低級(jí)例5.4:單片機(jī)有5個(gè)中斷源,但只能設(shè)置兩個(gè)中斷優(yōu)先級(jí),因此在中斷優(yōu)先級(jí)安排上受到一定的限制,試問以下幾種中斷的優(yōu)先級(jí)排列(級(jí)別從高到低)是否可能?若可能,則應(yīng)如何設(shè)置中斷源的中斷級(jí)別?(1)定時(shí)器T0,定時(shí)器T1,外中斷0,外中斷1,串行口中斷(2)串行口中斷,定時(shí)器T0,外中斷0,外中斷1,定時(shí)器T1解:(1)只有采取編程設(shè)置IP。

將定時(shí)器T0,定時(shí)器T1設(shè)置為高優(yōu)先級(jí),那么定時(shí)器T0,定時(shí)器T1優(yōu)先級(jí)高于外中斷0,外中斷1,串行口中斷;

同級(jí)中斷按照自然優(yōu)先級(jí)排列,定時(shí)器T0的優(yōu)先級(jí)要高于定時(shí)器T1;外中斷0,外中斷1,串行口中斷也滿足自然優(yōu)先級(jí)排列順序??梢詫?shí)現(xiàn)(IP)=00001010B(2)無法實(shí)現(xiàn)中斷源

同級(jí)內(nèi)的中斷優(yōu)先級(jí)外部中斷0中斷高級(jí)定時(shí)器/計(jì)數(shù)器T0溢出中斷外部中斷1定時(shí)器/計(jì)數(shù)器T1溢出中斷串行口中斷低級(jí)PSPT1PX1PT0PX0IP(B8H)由于51單片機(jī)只有兩個(gè)優(yōu)先級(jí)設(shè)置,故只存在兩級(jí)中斷嵌套結(jié)構(gòu),兩級(jí)中斷嵌套的中斷過程如圖所示。第一級(jí)中斷必須為IP中設(shè)置的低級(jí)中斷請(qǐng)求,第二級(jí)中斷為IP中設(shè)置的高級(jí)中斷請(qǐng)求。CPU執(zhí)行高級(jí)中斷服務(wù)程序響應(yīng)高級(jí)中斷請(qǐng)求返回低級(jí)中斷程序高級(jí)中斷請(qǐng)求響應(yīng)低級(jí)中斷請(qǐng)求返回主程序低級(jí)中斷請(qǐng)求CPU執(zhí)行主程序CPU執(zhí)行低級(jí)中斷服務(wù)程序5.2.5中斷嵌套P87問:假設(shè)51單片機(jī)的5個(gè)中斷源經(jīng)過設(shè)置后的優(yōu)先級(jí)由高到低的順序?yàn)椋?/p>

定時(shí)器T0,定時(shí)器T1,外中斷0,外中斷1,串行口中斷

IP高級(jí)

IP低級(jí)(1)如果定時(shí)器T0發(fā)出中斷請(qǐng)求后,單片機(jī)執(zhí)行定時(shí)器T0中斷程序過程中,外部中斷0發(fā)出中斷請(qǐng)求,這時(shí)會(huì)出現(xiàn)中斷嵌套嗎?(2)如果定時(shí)器T1發(fā)出中斷請(qǐng)求后,單片機(jī)執(zhí)行定時(shí)器T1中斷程序過程中,定時(shí)器T0發(fā)出中斷請(qǐng)求,這時(shí)會(huì)出現(xiàn)中斷嵌套嗎?總結(jié):中斷嵌套必須是IP低級(jí)中斷內(nèi)嵌IP高級(jí)中斷。當(dāng)一個(gè)中斷被響應(yīng)后,所有與之同級(jí)或低級(jí)的中斷源的中斷請(qǐng)求都被禁止,不發(fā)生嵌套。不會(huì)不會(huì)5.3MCS-51的中斷響應(yīng)條件和中斷處理中斷響應(yīng)的條件中斷處理過程5.3.1中斷響應(yīng)的條件MCS-51單片機(jī)響應(yīng)中斷條件有以下條件:◆有中斷源發(fā)出中斷請(qǐng)求?!糁袛嘣试S位EA=1,即CPU開放中斷?!羯暾?qǐng)中斷的中斷源的允許位為1,即對(duì)應(yīng)的中斷源開放中斷◆

CPU沒有響應(yīng)同級(jí)或更高級(jí)別的中斷請(qǐng)求?!舢?dāng)前指令執(zhí)行完畢?!羧绻?dāng)前正執(zhí)行的指令是返回指令(RETI)或訪問IP、IE寄存器的指令,則CPU在執(zhí)行完當(dāng)前指令后,至少再執(zhí)行一條指令才會(huì)中斷。中斷源發(fā)中斷請(qǐng)求中斷響應(yīng)條件是否滿足?把PC斷點(diǎn)地址壓入堆棧

相應(yīng)中斷源的中斷入口地址送入PC,轉(zhuǎn)向中斷服務(wù)程序NY

由硬件自動(dòng)完成5.3.2中斷處理過程圖

中斷源及其對(duì)應(yīng)的中斷入口地址

P88或P26中斷源中斷入口地址外部中斷0(INT0)外部中斷1(INT1)定時(shí)器T0中斷定時(shí)器T1中斷串行口中斷0023H001BH0013H0003H000BH

中斷服務(wù)程序存放在相應(yīng)的中斷入口地址處。每個(gè)中斷向量地址之間隔了8個(gè)單元,如0003-000BH,在如此少的空間中如何完成用戶中斷程序呢?很簡單,在中斷入口地址處安排一個(gè)LJMP指令,就可以跳轉(zhuǎn)到中斷程序可以放下的地方。建議即使中斷服務(wù)程序小于8字節(jié),也采用跳轉(zhuǎn)指令方式,以便養(yǎng)成規(guī)范的編程風(fēng)格。8個(gè)字節(jié)LJMPINT_EX0例5.5消防緊急按鈕源程序如下:ORG0000HLJMPMAINORG0003H;外部中斷0的中斷入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中斷0下降沿觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制LOOP:SETBP1.0;綠燈被點(diǎn)亮

LCALLDELAY1S

;延時(shí)1sCLRP1.0;綠燈熄滅

SETBP1.1;紅燈被點(diǎn)亮

LCALLDELAY1S;延時(shí)1sCLRP1.1;紅燈熄滅

LJMP LOOPINT_EX0:SETBP1.1;紅燈被點(diǎn)亮

CLRP1.0;綠燈熄滅

LCALLDELAY1S;延時(shí)1sRETIEND中斷初始化程序

關(guān)中斷保護(hù)現(xiàn)場中斷服務(wù)

開中斷

關(guān)中斷恢復(fù)現(xiàn)場

開中斷中斷返回?cái)帱c(diǎn)地址由堆棧彈入PC保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的過程中不允許中斷,以免現(xiàn)場遭到破壞。保護(hù)和恢復(fù)現(xiàn)場之后的開中斷是為了允許有更高級(jí)中斷打斷此中斷服務(wù)程序。硬件自動(dòng)完成中斷服務(wù)程序PUSHACCPUSHPSWPOPPSWPOPACCCLREASETBEARETI例5.5正常情況下,非交叉路口的交通紅綠燈以1s的間隔輪流點(diǎn)亮,當(dāng)有消防任務(wù)時(shí),消防官兵只需要按一下設(shè)置在路邊的消防緊急按鈕,則道路交通燈就會(huì)變成紅燈并持續(xù)1s時(shí)間,禁止其他車輛通行,使消防車可以順利通過,1s后自動(dòng)返回按緊急按鈕前燈的狀態(tài),繼續(xù)紅綠燈輪流點(diǎn)亮的正常狀態(tài),試用51單片機(jī)來模擬實(shí)現(xiàn)上述功能。P91分析:1、用紅色和綠色發(fā)光二極管模擬道路交通燈,并與單片機(jī)的I/O口相連,可通過設(shè)置I/O口的電平來點(diǎn)亮發(fā)光二極管。2、用按鈕開關(guān)或閘刀開關(guān)模擬消防緊急按鈕,可將開關(guān)與單片機(jī)的外部中斷0的引腳相連,引入外部中斷信號(hào)。3、沒有中斷發(fā)生時(shí),紅色和綠色發(fā)光二極管輪流被點(diǎn)亮,均持續(xù)1S(通過調(diào)用延時(shí)子程序?qū)崿F(xiàn))——主程序。4、當(dāng)中斷發(fā)生時(shí),將紅色發(fā)光二極管點(diǎn)亮,并持續(xù)1秒

——中斷服務(wù)程序。5.4中斷程序編程舉例解:將P1口的P1.1~P1.0分別接紅和綠色發(fā)光二極管D1~D0模擬道路交通燈,P3.2(INT0)引腳接一開關(guān)以模擬消防緊急按鈕。圖5-10AT89C51單片機(jī)模擬交通燈電路原理圖P92P3.2中斷初始化程序怎么寫?書P20例5.5源程序如下:ORG0000HLJMPMAINORG0003H;外部中斷0的中斷入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中斷0下降沿觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制LOOP:SETBP1.0;綠燈被點(diǎn)亮

LCALLDELAY1S;延時(shí)1sCLRP1.0;綠燈熄滅

SETBP1.1;紅燈被點(diǎn)亮

LCALLDELAY1S;延時(shí)1sCLRP1.1;紅燈熄滅

LJMPLOOP中斷初始化程序【100ms延時(shí)子程序如下】DELAY:MOVR6,#0C8H;外循環(huán)200次

LOOP1:MOVR7,#0F8H;內(nèi)循環(huán)248次

NOP;時(shí)間補(bǔ)償

LOOP2:DJNZR7,LOOP2;延時(shí)2μs×248=496μsDJNZR6,LOOP1;延時(shí)500μs×200=100msRET【延時(shí)1s調(diào)用100ms延時(shí)子程序如下】;1s是100ms的10倍,即連續(xù)執(zhí)行100ms延時(shí)子程序10次即可

DELAY1S:MOVR0,#10

LOOP0:LCALLDELAYDJNZR0,LOOP0RET

INT_EX0:

PUSHP1PUSH00HPUSH06HPUSH07HSETBP1.1;紅燈被點(diǎn)亮

CLRP1.0;綠燈熄滅

LCALLDELAY1S;延時(shí)1s

POP07HPOP06HPOP00HPOPP1RETIEND

需要保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的原因:需要保護(hù)在主程序和中斷程序中都會(huì)使用的寄存器、并口等。因?yàn)镽0、R6、R7在中斷服務(wù)程序中最后都減到0了,當(dāng)中斷返回時(shí),會(huì)接著中斷前的延時(shí)子程序繼續(xù)執(zhí)行,此時(shí)的R0、R6、R7之一很有可能從0開始減,得0FFH,而不是中斷前的值,延時(shí)就長了。

保護(hù)P1口的狀態(tài),是為了中斷返回后繼續(xù)中斷前燈的顯示狀態(tài),即若中斷前綠燈亮了0.5秒,中斷后綠燈還需要亮0.5秒,而不是紅燈亮0.5秒。保護(hù)現(xiàn)場,00H、06H、07H分別是R0、R6、R7的地址,PUSH、POP操作數(shù)只能是直接地址P43恢復(fù)現(xiàn)場例5.6在工業(yè)應(yīng)用場合經(jīng)常利用中斷電路來實(shí)現(xiàn)系統(tǒng)的故障顯示,假設(shè)有四個(gè)終端設(shè)備和主控室相連接,主控室可以采用指示燈方式表示終端設(shè)備是否正常工作。當(dāng)終端設(shè)備正常工作時(shí),主控室指示燈滅,當(dāng)終端設(shè)備工作異常時(shí),主控室指示燈亮,試用單片機(jī)中斷電路來實(shí)現(xiàn)。分析:1、用4個(gè)發(fā)光二極管模擬4個(gè)信號(hào)燈。

2、單片機(jī)只有兩個(gè)外部中斷源,但是現(xiàn)在有四個(gè)外部中斷請(qǐng)求,那么必然存在中斷擴(kuò)展,單片機(jī)如何實(shí)現(xiàn)外部中斷擴(kuò)展呢?外部中斷源的擴(kuò)展1.將定時(shí)器T0,T1中斷源作外部中斷源2.查詢方式擴(kuò)展外部中斷源把多個(gè)中斷源通過硬件(或非門)引入外部中斷源輸入端(INT0或INT1),同時(shí)將中斷源連接到某I/O接口。這樣,每個(gè)中斷源都可以引起中斷,在中斷服務(wù)程序中通過軟件查詢I/O口,便可以確定哪一個(gè)是正在申請(qǐng)的中斷源。3.用中斷控制芯片(如8259)進(jìn)行擴(kuò)展專用中斷控制器8259可以直接擴(kuò)展8個(gè)中斷源,經(jīng)級(jí)聯(lián)后,最多可以擴(kuò)展64個(gè)中斷源??删幊讨袛喙芾硇酒?259A

8259A的內(nèi)部結(jié)構(gòu)與外設(shè)相連與CPU相連IR0圖5-11利用中斷電路來實(shí)現(xiàn)系統(tǒng)的故障顯示電路原理圖P3.2或非中斷初始化程序怎么寫?1000101000本例用查詢方式擴(kuò)展外部中斷源表示外設(shè)有故障對(duì)應(yīng)外設(shè)4對(duì)應(yīng)外設(shè)3對(duì)應(yīng)外設(shè)2對(duì)應(yīng)外設(shè)1對(duì)應(yīng)外設(shè)4對(duì)應(yīng)外設(shè)3對(duì)應(yīng)外設(shè)2對(duì)應(yīng)外設(shè)1

ORG0000H LJMPMAIN ORG0003H

LJMPINT_EX0 ORG0030HMAIN:

CLRIT0;外部中斷0低電平觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制

SJMP$;等待中斷到來INT_EX0:JNBP1.0,NEXT1

SETBP1.4 LJMPINT_EX0_ENDNEXT1:JNBP1.1,NEXT2

SETBP1.5LJMPINT_EX0_ENDNEXT2:JNBP1.2,NEXT3

SETBP1.6LJMPINT_EX0_ENDNEXT3:JNBP1.3,INT_EX0_END

SETBP1.7INT_EX0_END:RETIEND例5.6源程序:中斷服務(wù)程序中對(duì)4個(gè)設(shè)備的中斷請(qǐng)求信號(hào)依次查詢并處理任一設(shè)備有故障都會(huì)觸發(fā)中斷

ORG0000H LJMPMAIN ORG0003H

LJMPINT_EX0 ORG0030HMAIN:

CLRIT0;外部中斷0低電平觸發(fā)方式

SETBEX0;外部中斷0允許控制

SETBEA;單片機(jī)中斷允許控制

SJMP$;等待中斷到來INT_EX0:JNBP1.0,NEXT1

SETBP1.4 LJMPINT_EX0_ENDNEXT1:JNBP1.1,NEXT2

SETBP1.5LJMPINT_EX0_ENDNEXT2:JNBP1.2,NEXT3

SETBP1.6LJMPINT_EX0_ENDNEXT3:JNBP1.3,INT_EX0_END

SETBP1.7INT_EX0_END:RETIEND例5.6源程序:任一設(shè)備有故障都會(huì)觸發(fā)中斷;若P1.0=0則外設(shè)4無故障,繼續(xù)檢查外設(shè)3;若P1.0=1則外設(shè)4有故障,將對(duì)應(yīng)燈點(diǎn)亮;若P1.1=0則外設(shè)3無故障,繼續(xù)檢查外設(shè)2;若P1.1=1則外設(shè)3有故障,將對(duì)應(yīng)燈點(diǎn)亮;若P1.2=0則外設(shè)2無故障,繼續(xù)檢查外設(shè)1;若P1.2=1則外設(shè)2有故障,將對(duì)應(yīng)

溫馨提示

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