單片機(jī)定時(shí)器應(yīng)用舉例_第1頁
單片機(jī)定時(shí)器應(yīng)用舉例_第2頁
單片機(jī)定時(shí)器應(yīng)用舉例_第3頁
單片機(jī)定時(shí)器應(yīng)用舉例_第4頁
單片機(jī)定時(shí)器應(yīng)用舉例_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1單片機(jī)定時(shí)器應(yīng)用舉例學(xué)習(xí)目的

1、了解80C51定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理;

2、了解中斷的概念和中斷的功能;

3、掌握80C51定時(shí)/計(jì)數(shù)器工作方式的特點(diǎn)及應(yīng)用;

4、掌握80C51中斷系統(tǒng)結(jié)構(gòu)、處理過程和使用方法。學(xué)習(xí)重點(diǎn)和難點(diǎn)

1、定時(shí)器/計(jì)數(shù)器的初始化;

2、中斷系統(tǒng)結(jié)構(gòu)、處理過程和使用方法;

3、定時(shí)器/計(jì)數(shù)器與中斷的綜合應(yīng)用;

4、外部中斷源的擴(kuò)展方法。第1頁/共73頁4.180C51定時(shí)器/計(jì)數(shù)器

在測(cè)量控制系統(tǒng)中,經(jīng)常要求有一些實(shí)時(shí)時(shí)鐘,以實(shí)現(xiàn)定時(shí)控制、定時(shí)測(cè)量,同時(shí)有時(shí)也要求對(duì)外部事件進(jìn)行計(jì)數(shù)等,所以我們經(jīng)常要遇到定時(shí)/計(jì)數(shù)這樣一些問題。要實(shí)現(xiàn)定時(shí)/計(jì)數(shù),有3種主要方法:軟件定時(shí)、硬件定時(shí)和可編程定時(shí)/計(jì)數(shù)器,本節(jié)介紹80C51可編程定時(shí)/計(jì)數(shù)器。4.1.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)

定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)如圖4-1所示。

一、組成:80C51定時(shí)/計(jì)數(shù)器由定時(shí)器0、定時(shí)器1、定時(shí)器方式寄存器TMOD和定時(shí)器控制寄存器TCON四部分組成

二、各部分的功能:

1、定時(shí)器0(T0)和定時(shí)器1(T1)(1)80C51單片機(jī)內(nèi)部有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,稱為定時(shí)器0

(簡(jiǎn)稱T0)和定時(shí)器1(簡(jiǎn)稱T1),可編程選擇其作為定時(shí)器用或作為計(jì)數(shù)器用。第2頁/共73頁返回第3頁/共73頁

(2)定時(shí)器0或定時(shí)器1用作計(jì)數(shù)器時(shí),對(duì)芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計(jì)數(shù),每輸入一個(gè)脈沖,加法計(jì)數(shù)器加1;其用作定時(shí)器時(shí),對(duì)內(nèi)部機(jī)器周期脈沖計(jì)數(shù),由于機(jī)器周期是定值,故計(jì)數(shù)值確定時(shí),時(shí)間也隨之確定。(3)16位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位寄存器組成,即:T0由TH0和TL0構(gòu)成,T1由TH1和TL1構(gòu)成,TL0、TL1、TH0、TH1的訪問地址依次為8AH8DH。每個(gè)寄存器均可單獨(dú)訪問,這些寄存器是用于存放定時(shí)初值或計(jì)數(shù)初值的。2、方式寄存器TMOD和控制寄存器TCONTMOD、TCON與定時(shí)器0、定時(shí)器1間通過內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)置定時(shí)器的工作方式,TCON用于控制定時(shí)器的啟動(dòng)與停止,并保存T0、T1的溢出和中斷標(biāo)志。第4頁/共73頁4.1.280C51定時(shí)/計(jì)數(shù)器的原理

16位的定時(shí)/計(jì)數(shù)器實(shí)質(zhì)上是一個(gè)加1計(jì)數(shù)器,可實(shí)現(xiàn)定時(shí)和計(jì)數(shù)兩種功能,其功能由軟件設(shè)置和控制。

1、定時(shí)/計(jì)數(shù)器設(shè)置為定時(shí)功能時(shí)當(dāng)定時(shí)/計(jì)數(shù)器設(shè)置為定時(shí)工作方式時(shí),計(jì)數(shù)器的加1信號(hào)由振蕩器的12分頻信號(hào)產(chǎn)生,即每過一個(gè)機(jī)器周期,計(jì)數(shù)器加1,直至計(jì)滿溢出。定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的時(shí)鐘頻率有關(guān)。因一個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,所以計(jì)數(shù)頻率fc應(yīng)為系統(tǒng)時(shí)鐘頻率fosc的十二分之一,即=fosc。如果單片機(jī)的晶振頻率為12MHz,則計(jì)數(shù)周期為1s(即:T==1s)。這是最短的定時(shí)周期,通過改變定時(shí)器的定時(shí)初值,并適當(dāng)選擇定時(shí)器的長度(8位、13位或16位),可以調(diào)整定時(shí)時(shí)間。第5頁/共73頁2、定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)功能時(shí)

當(dāng)定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)器對(duì)來自外部輸入引腳T0(P3.4)和T1(P3.5)的信號(hào)進(jìn)行計(jì)數(shù),外部脈沖的下降沿將觸發(fā)計(jì)數(shù)。在每個(gè)機(jī)器周期的S5P2期間采樣外部引腳輸入電平,若前一個(gè)機(jī)器周期采樣值為1,后一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。新的計(jì)數(shù)值是在檢測(cè)到外部輸入引腳電平發(fā)生1到0的負(fù)跳變后,于下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器中的,可見,檢測(cè)一個(gè)由1到0的負(fù)跳變需要兩個(gè)機(jī)器周期,所以,最高檢測(cè)頻率為振蕩頻率的1/24。如果晶振頻率為12MHz,則最高計(jì)數(shù)頻率為0.5MHz。雖然對(duì)外部輸入信號(hào)的占空比無特殊要求,但為了確保給定電平在變化前至少被采樣一次,外部計(jì)數(shù)脈沖的高電平與低電平保持時(shí)間均需在一個(gè)機(jī)器周期以上。第6頁/共73頁4.280C51定時(shí)/計(jì)數(shù)器的控制

在定時(shí)/計(jì)數(shù)器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時(shí)/計(jì)數(shù)器,這個(gè)過程叫定時(shí)/計(jì)數(shù)器的初始化。在初始化程序中,要將工作方式控制字寫入定時(shí)器方式寄存器(TMOD),工作狀態(tài)控制字寫入定時(shí)器控制寄存器(TCON),賦定時(shí)/計(jì)數(shù)初值給TH0(TH1)和TL0(TL1)。

4.2.1定時(shí)/計(jì)數(shù)器方式寄存器TMOD

定時(shí)/計(jì)數(shù)器方式寄存器TMOD的作用是設(shè)置T0、T1的工作方式。

TMOD的格式:第7頁/共73頁TMOD的低4位為定時(shí)器0的方式字段,高4位為定時(shí)器1的方式字段,它們的含義完全相同。各位的功能含義如下:

1、M1、M0:方式選擇位。定義如下:

2、C/T:功能選擇位。當(dāng)C/T=0時(shí),以定時(shí)器方式工作;當(dāng)C/T=1時(shí),以計(jì)數(shù)器方式工作。M1M0

工作方式

功能說明

00

方式0

13位計(jì)數(shù)器

01方式116位計(jì)數(shù)器

10方式2自動(dòng)重裝入初值8位計(jì)數(shù)器

11方式3定時(shí)器0:分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器定時(shí)器1:停止計(jì)數(shù)

第8頁/共73頁3、GATE:門控位當(dāng)GATE=0時(shí),軟件啟動(dòng)定時(shí)器,即用指令使TCON中的TR1(TR0)置1即可啟動(dòng)定時(shí)器1(定時(shí)器0)。當(dāng)GATE=1時(shí),軟件和硬件共同啟動(dòng)定時(shí)器,即用指令使TCON中的TR1(TR0)置1時(shí),同時(shí)還需要外部中斷(P3.2)或(P3.3)引腳輸入高電平時(shí)方可啟動(dòng)定時(shí)器1(定時(shí)器0)。

TMOD不能位尋址,只能用字節(jié)指令設(shè)置高4位定義定時(shí)器1,低4位定義定時(shí)器0定時(shí)器工作方式。復(fù)位時(shí)TMOD=00H,即所有位均置0。第9頁/共73頁

4.2.2定時(shí)/計(jì)數(shù)器控制寄存器TCON

定時(shí)/計(jì)數(shù)器控制寄存器TCON的作用是控制定時(shí)器的啟動(dòng)與停止,并保存T0、T1的溢出和中斷標(biāo)志。TCON中的高4位用于控制定時(shí)/計(jì)數(shù)器的啟停和中斷請(qǐng)求。各位的功能含義如下:

1、TF1(TCON.7位):定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)滿數(shù)產(chǎn)生溢出時(shí),由硬件自動(dòng)置TF1=1。在中斷允許時(shí),向CPU發(fā)出定時(shí)器1的中斷請(qǐng)求,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0。在中斷屏蔽(以查詢方式工作)時(shí),TF1可作溢出查詢測(cè)試用(判斷該位是否為1),此時(shí)只能由軟件清0。其TCON的格式如下:第10頁/共73頁2、TR1(TCON.6位):定時(shí)器1啟??刂莆?。當(dāng)GATE=0時(shí),用指令使TR1置1即啟動(dòng)定時(shí)器1工作,若用指令使TR1清0則停止定時(shí)器1工作。當(dāng)GATE=1時(shí),用指令使TR1置1的同時(shí)外部中斷(P3.3)的引腳輸入高電平才能啟動(dòng)定時(shí)器1工作。

3、TF0(TCON.5位):定時(shí)器0溢出標(biāo)志位。其功能及操作情況同TF1。

4、TR0(TCON.4位):定時(shí)器0啟??刂莆弧F涔δ芗安僮髑闆r同TR1。

TCON中的低4位用于控制外部中斷,與定時(shí)/計(jì)數(shù)器無關(guān),將在中斷一節(jié)中詳細(xì)介紹。

5、IE1(TCON.3位):外部中斷1()請(qǐng)求標(biāo)志位。

6、IT1(TCON.2位):外部中斷1()觸發(fā)方式選擇位。

7、IE0(TCON.1位):外部中斷0()請(qǐng)求標(biāo)志位。

8、IT0(TCON.0位):外部中斷0()觸發(fā)方式選擇位。

當(dāng)系統(tǒng)復(fù)位時(shí),TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標(biāo)志位或啟動(dòng)定時(shí)器都可以用位操作指令(如SETBTR1、JBCTF1,LOOP)。第11頁/共73頁4.2.3定時(shí)/計(jì)數(shù)器的初始化

1.定時(shí)/計(jì)數(shù)器的初始化步驟

由于定時(shí)/計(jì)數(shù)器的功能是由軟件編程確定的,所以,一般在使用定時(shí)器/計(jì)數(shù)前都要對(duì)其進(jìn)行初始化。初始化驟如下:

(1)確定定時(shí)/計(jì)數(shù)器的工作方式,確定方式控制字,并寫入TMOD。

(2)預(yù)置定時(shí)初值或計(jì)數(shù)初值,根據(jù)定時(shí)時(shí)間或計(jì)數(shù)次數(shù),計(jì)算定時(shí)初值或計(jì)數(shù)初值,并寫入TH0、TL0或TH1、TL1。

(3)根據(jù)需要開啟定時(shí)/計(jì)數(shù)器的中斷,直接對(duì)IE寄存器中的相應(yīng)位(EA、EX0、EX1、ET0、ET1)賦值。

(4)啟動(dòng)定時(shí)/計(jì)數(shù)器工作,將TCON中的TR1或TR0置1。

2.定時(shí)或計(jì)數(shù)初值的計(jì)算定時(shí)/計(jì)數(shù)器的初值因工作方式的不同而不同,其定時(shí)或計(jì)數(shù)初值的計(jì)算見表4-1。

第12頁/共73頁表4-1定時(shí)或計(jì)數(shù)初值的計(jì)算方法注:對(duì)表4-1作如下說明:表中T表示定時(shí)時(shí)間,T機(jī)表示機(jī)器周期;計(jì)數(shù)初值公式中的計(jì)數(shù)值為脈沖個(gè)數(shù);在方式3中只討論T0。T0被分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。而TL0可定時(shí)亦可計(jì)數(shù);而TH0只能用作簡(jiǎn)單的內(nèi)部定時(shí),不能用作對(duì)外部脈沖進(jìn)行計(jì)數(shù)。第13頁/共73頁[例1]:定時(shí)器1采用方式1來定時(shí),要求每50ms溢出一次,如采用12MHz晶振,則計(jì)數(shù)周期T=1s,求定時(shí)初值X。解:根據(jù)定時(shí)初值X的計(jì)算公式可得:[例2]:要求定時(shí)器1采用方式0、方式1和方式2來計(jì)100個(gè)脈沖的計(jì)數(shù)初值X。解:根據(jù)計(jì)數(shù)初值X的計(jì)算公式可得:第14頁/共73頁

3、定時(shí)或計(jì)數(shù)初值的裝入現(xiàn)以例2的計(jì)數(shù)初值X為例,來介紹定時(shí)/計(jì)數(shù)器在不同工作方式下初值的裝入方法。①方式0是13位定時(shí)/計(jì)數(shù)器,若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X的高八位裝入TH1,而低五位裝入TL1的低五位(TL1的高三位無效,可填補(bǔ)0)。所以要裝入1F9CH初值,應(yīng)按照如下方法進(jìn)行。

1F9CH=0001111110011100B

把13位中的高八位11111100B裝入TH1,而把13位中的低五位xxx11100B裝入TL1(xxx用“0”填入)。用指令來裝入計(jì)數(shù)初值為:

MOVTH1,#0FCH;#FCH→TH1MOVTL1,#1CH;#1CH→TL1②方式1是16位定時(shí)/計(jì)數(shù)器,若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X的高八位裝入TH1,而低八位裝入TL1,用指令來裝入計(jì)數(shù)初值為:

MOVTH1,#0FFH;#0FFH→TH1MOVTL1,#9CH;#9CH→TL1③方式2是自動(dòng)重裝入初值8位定時(shí)/計(jì)數(shù)器,只要裝入一次,以后就自動(dòng)裝入初值。若采用定時(shí)/計(jì)數(shù)器T1,則計(jì)數(shù)初值X既要裝入TH1,也要裝入TL1,用指令來裝入計(jì)數(shù)初值為:

MOVTH1,#9CH;#9CH→TH1MOVTL1,#9CH;#9CH→TL1

第15頁/共73頁

4.380C51定時(shí)/計(jì)數(shù)器的工作方式及應(yīng)用

通過對(duì)方式寄存器TMOD中M0、M1位進(jìn)行設(shè)置,可選擇四種工作方式,即方式0、方式1、方式2和方式3,下面逐一進(jìn)行介紹。4.3.1方式0

方式0構(gòu)成一個(gè)13位定時(shí)/計(jì)數(shù)器,以定時(shí)器0為例。圖4-2是方式0的邏輯結(jié)構(gòu),定時(shí)器1的結(jié)構(gòu)和操作與定時(shí)器0完全相同。

由圖4-2可知,定時(shí)/計(jì)數(shù)器是由TL0中的低5位和TH0中的高8位組成一個(gè)13位加1計(jì)數(shù)器(TL0中的高3位不用);若TL0中的第5位有進(jìn)位,直接進(jìn)到TH0中的最低位。而TH0溢出時(shí)向中斷位TF0進(jìn)位(硬件自動(dòng)置位),并申請(qǐng)中斷。圖4-2定時(shí)器0在方式0時(shí)的邏輯結(jié)構(gòu)圖第16頁/共73頁當(dāng)C/T=0時(shí),多路開關(guān)連接12分頻器輸出,定時(shí)器0對(duì)機(jī)器周期計(jì)數(shù),此時(shí),定時(shí)器0為定時(shí)器。當(dāng)C/T=1時(shí),多路開關(guān)與T0(P3.4)相連,外部計(jì)數(shù)脈沖由T0腳輸入,當(dāng)外部信號(hào)電平發(fā)生由0到1的負(fù)跳變時(shí),計(jì)數(shù)器加1,此時(shí),定時(shí)器0為計(jì)數(shù)器。當(dāng)門控位GATE=0時(shí),或門輸出始終為1,與門被打開,與門的輸出電平始終與TR0的電平一致,實(shí)現(xiàn)由TR0控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和停止。若軟件使TR0置1,接通控制開關(guān),啟動(dòng)定時(shí)器0,13位加1計(jì)數(shù)器在定時(shí)初值或計(jì)數(shù)初值的基礎(chǔ)上進(jìn)行加1計(jì)數(shù);溢出時(shí),13位加1計(jì)數(shù)器為0,TF0由硬件自動(dòng)置1,并申請(qǐng)中斷。如要循環(huán)計(jì)數(shù),則定時(shí)器0需重置初值,且需用軟件將TF0復(fù)位,可采用重置初值語句和JBC命令。若軟件使TR0清0,關(guān)斷控制開關(guān),停止定時(shí)器0,加1計(jì)數(shù)器停止計(jì)數(shù)。當(dāng)GATE=1時(shí),與門的輸出由的輸入電平和TR0位的狀態(tài)來確定。若TR0=1則與門打開,外部信號(hào)電平通過引腳直接開啟或關(guān)斷定時(shí)器0,當(dāng)為高電平時(shí),允許計(jì)數(shù),否則停止計(jì)數(shù);若TR0=0,則與門被封鎖,控制開關(guān)被關(guān)斷,停止計(jì)數(shù)。第17頁/共73頁圖4-3定時(shí)器0在方式1時(shí)的邏輯結(jié)構(gòu)圖4.3.2方式1

定時(shí)器工作于方式1時(shí),其邏輯結(jié)構(gòu)圖如圖4-3所示。在方式1下,以定時(shí)器0為例,定時(shí)/計(jì)數(shù)器是由TL0中的8位和TH0中的8位組成一個(gè)16位加1計(jì)數(shù)器。方式1其結(jié)構(gòu)與操作幾乎完全與方式0相同,最大的區(qū)別是方式1的加1計(jì)數(shù)器位數(shù)是16位。

第18頁/共73頁圖4-4定時(shí)器0在方式2時(shí)的邏輯結(jié)構(gòu)圖4.3.3方式2

定時(shí)/計(jì)數(shù)器工作于方式2時(shí),其邏輯結(jié)構(gòu)圖如圖4-4所示。

由圖4-4可知,在方式2下,以定時(shí)器0為例,定時(shí)/計(jì)數(shù)器是一個(gè)能自動(dòng)裝入初值的8位加1計(jì)數(shù)器。TH0中的8位用于存放定時(shí)初值或計(jì)數(shù)初值,TL0中的8位用于加1計(jì)數(shù)器,加1計(jì)數(shù)器溢出后,硬件使TF0自動(dòng)置1,同時(shí)自動(dòng)將TH0中存放的定時(shí)初值或計(jì)數(shù)初值再裝入TL0,繼續(xù)計(jì)數(shù)。方式0和方式1用于循環(huán)計(jì)數(shù),在每次計(jì)滿溢出后,計(jì)數(shù)器都復(fù)0,要進(jìn)行新一輪計(jì)數(shù)還須重置計(jì)數(shù)初值。這不僅導(dǎo)致編程麻煩,而且影響定時(shí)時(shí)間精度。而方式2具有初值自動(dòng)裝入功能,避免了這些缺陷,適合用于較高精確的定時(shí)信號(hào)發(fā)生器。第19頁/共73頁圖4-5定時(shí)器0在方式3時(shí)的邏輯結(jié)構(gòu)圖4.3.4方式3

1.定時(shí)/計(jì)數(shù)器0工作于方式3時(shí)的結(jié)構(gòu)特點(diǎn)定時(shí)/計(jì)數(shù)器0工作于方式3時(shí),其邏輯結(jié)構(gòu)圖如圖4-5所示。由圖可知,定時(shí)/計(jì)數(shù)器0工作于方式3時(shí),定時(shí)器0分為兩個(gè)獨(dú)立的8位加1計(jì)數(shù)器TH0和TL0。其中TL0既可用于定時(shí),也能用于計(jì)數(shù);TH0只能用于定時(shí)。在方式3下,TL0占用原T0的各控制位、引腳和中斷源。即C/、GATE、TR0、TF0和T0(P3.4)引腳、(P3.2)引腳。而TH0占用原定時(shí)器1的控制位TF1和TR1,同時(shí)還占用了定時(shí)器1的中斷源,其啟動(dòng)和關(guān)閉僅受TR1置1或清0控制。TH0只能對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),因此,TH0只能用作簡(jiǎn)單的內(nèi)部定時(shí),不能用作對(duì)外部脈沖進(jìn)行計(jì)數(shù),是定時(shí)器0附加的一個(gè)8位定時(shí)器。第20頁/共73頁2.定時(shí)器0在方式3下T1的結(jié)構(gòu)特點(diǎn)

T1不能工作在方式3下,因?yàn)樵赥0工作在方式3下時(shí),T1的控制位TR1、TF1和中斷源被T0的TH0占用。但是T1可工作在方式0、方式1、方式2下,此時(shí),定時(shí)器1僅由控制位切換其定時(shí)或計(jì)數(shù)功能,當(dāng)計(jì)數(shù)器計(jì)滿溢出時(shí),只能將輸出送往串行口。在這種情況下,定時(shí)器1一般用作串行口波特率發(fā)生器或不需要中斷的場(chǎng)合。設(shè)置好T1的工作方式,T1就自動(dòng)開始計(jì)數(shù);因此其啟動(dòng)和關(guān)閉較為特殊,若要停止計(jì)數(shù),只需送入一個(gè)設(shè)置定時(shí)器1為方式3的方式字即可。定時(shí)/計(jì)數(shù)器0在方式3下的T1邏輯結(jié)構(gòu),如圖4-6所示。第21頁/共73頁圖4-6定時(shí)/計(jì)數(shù)器0在方式3下的T1邏輯結(jié)構(gòu)第22頁/共73頁[例3]如圖4-7所示,P1口中接有八個(gè)發(fā)光二極管,編程使八個(gè)管輪流點(diǎn)亮,每個(gè)管亮100ms,采用定時(shí)T0方式1,設(shè)晶振為6MHz。分析:利用T0完成100ms的定時(shí),當(dāng)P1口線輸出高電平“1”時(shí),發(fā)光二極管亮,每隔100ms“1”左移一次,采用定時(shí)方式1,先計(jì)算定時(shí)初值:

4.3.5定時(shí)/計(jì)數(shù)器的編程應(yīng)用定時(shí)/計(jì)數(shù)器是單片機(jī)應(yīng)用系統(tǒng)中的重要部件,通過下面實(shí)例可以看出,靈活應(yīng)用定時(shí)/計(jì)數(shù)器可提高編程技巧,減輕CPU的負(fù)擔(dān),簡(jiǎn)化外圍電路。仿真鏈接第23頁/共73頁程序如下:

ORG0100HMOVA,#01H;置第一個(gè)LED亮

LOOP0:MOVP1,A

MOVTMOD,#01H;T0工作于方式1MOVTH0,#3CH;置定時(shí)器初值

MOVTL0,#0B0H;定時(shí)100msSETBTR0;啟動(dòng)T0LOOP1:JBCTF0,LOOP2;100ms到轉(zhuǎn)L002,并清TF0SJMPLOOP1LOOP2:RLASJMPLOOP0

思考:若例3采用定時(shí)T1,以上程序怎樣修改。第24頁/共73頁[例4]:用定時(shí)器1,方式0實(shí)現(xiàn)1s的延時(shí),fosc=12MHZ。解:因方式0采用13位計(jì)數(shù)器,其最大定時(shí)時(shí)間為:8192×1s=8.192ms,可選擇定時(shí)時(shí)間為5ms,再循環(huán)200次。則定時(shí)器1的初值為:因13位計(jì)數(shù)器中TL1的高3位未用,應(yīng)填寫0,TH1占高8位,所以,X的實(shí)際填寫值應(yīng)為:X=0110001100011000B=6318H

即:TH1=63H,TL1=18H,又因采用方式0定時(shí),故TMOD=00H??删幍?s延時(shí)子程序如下:

DELAY:MOVR3,#200 ;置5ms計(jì)數(shù)循環(huán)初值

MOVTMOD,#00H;設(shè)定時(shí)器1為方式0MOVTH1,#63H;置定時(shí)器初值

MOVTL1,#18H SETB TR1 ;啟動(dòng)T1LP1:JBC TF1,LP2;查詢計(jì)數(shù)溢出

SJMP LP1 ;未到5ms繼續(xù)計(jì)數(shù)

LP2:MOV TH1,#63H;重新置定時(shí)器初值

MOV TL1,#18H DJNZ R3,LP1;未到1s繼續(xù)循環(huán)

RET ;返回主程序仿真鏈接第25頁/共73頁

[例5]:利用定時(shí)器1測(cè)量高電平脈沖的寬度,采用定時(shí)器1方式1設(shè)計(jì)程序,晶振頻率6MHz。

解:根據(jù)題意,用定時(shí)器1方式1時(shí),被測(cè)高電平脈沖從外部中斷INT1(P3.3)引腳輸入,門控位GATE取1,即由軟件和硬件共同啟動(dòng)定時(shí)器;被測(cè)脈沖為高電平時(shí),啟動(dòng)定時(shí)器1,開始計(jì)數(shù);被測(cè)脈沖變?yōu)榈碗娖綍r(shí),停止定時(shí)器1,停止計(jì)數(shù),計(jì)數(shù)值分別存放到片內(nèi)RAM區(qū)40H、41H、42H單元中;計(jì)數(shù)值與機(jī)器周期的乘積就是所測(cè)脈沖的寬度。用定時(shí)器1方式1時(shí),定時(shí)器/計(jì)數(shù)器方式寄存器TMOD高4位中的M1M0應(yīng)取01,GATE取1;因?yàn)橛枚〞r(shí)功能,C/T取0;定時(shí)器方式寄存器TMOD低4位取0,所以TMOD應(yīng)為90H。定時(shí)初值為00H。定時(shí)器以查詢方式工作。第26頁/共73頁參考程序:

ORG0000HLJMPMAINORG0100HMAIN:MOV40H,#00H;數(shù)據(jù)存儲(chǔ)單元清0MOV41H,#00HMOV42H,#00HMOVTMOD,#90H;置定時(shí)器1為工作方式1MOVTH1,#00H;定時(shí)初值清0MOVTL1,#00HJBP3.3,$;查詢低電平

SETBTR1;準(zhǔn)備啟動(dòng)定時(shí)器1JNBP3.3,$;高電平到,啟動(dòng)定時(shí)器1LP1:JBCTF1,LP2JBP3.3,LP1;低電平到,停止定時(shí)器1SJMPLP3LP2:INC40H;存儲(chǔ)區(qū)最高位加1SJMPLP1LP3:CLRTR1;停止定時(shí)器1MOV41H,TH1;計(jì)數(shù)值高8位放入存儲(chǔ)區(qū)

MOV42H,TL1;計(jì)數(shù)值低8位放入存儲(chǔ)區(qū)

LCALLDIS;調(diào)用顯示子程序

SJMPMAIN;重復(fù)循環(huán)

ORG0800HDIS:(略);顯示子程序

END第27頁/共73頁[例6]:試用定時(shí)器0,方式2實(shí)現(xiàn)1s的延時(shí),fosc=12MHZ。

解:因方式2是8位計(jì)數(shù)器,其最大定時(shí)時(shí)間為:256×1s=256s,為實(shí)現(xiàn)1s延時(shí),可選擇定時(shí)時(shí)間為250s,再循環(huán)4000次。定時(shí)時(shí)間選定后,可確定計(jì)數(shù)值為250,則定時(shí)器0的初值為:X=M計(jì)數(shù)值=256250=6=6H。采用定時(shí)器0,方式2工作,因此,TMOD=02H??删幍?s延時(shí)子程序如下:

DELAY:MOV R5,#28H ;置25ms計(jì)數(shù)循環(huán)初值

MOV R6,#64H;置250s計(jì)數(shù)循環(huán)初值

MOVTMOD,#02H;置定時(shí)器0為方式2MOVTH1,#06H;置定時(shí)器初值

MOVTL1,#06HSETB TR1 ;啟動(dòng)定時(shí)器LOOP1:JBC TF1,LOOP2 ;查詢計(jì)數(shù)溢出

SJMP LP1 ;無溢出則繼續(xù)計(jì)數(shù)LOOP2:DJNZ R6,LP1 ;未到25ms繼續(xù)循環(huán)

MOV R6,#64H DJNZR5,LOOP1 ;未到1s繼續(xù)循環(huán)

RET仿真鏈接第28頁/共73頁[例7]:試用定時(shí)器0,方式3實(shí)現(xiàn)1s的延時(shí),fosc=12MHZ。

解:根據(jù)題意,定時(shí)器0中的TH0只能為定時(shí)器,定時(shí)時(shí)間可設(shè)為250s;TL0設(shè)置為計(jì)數(shù)器,計(jì)數(shù)值可設(shè)為200。TH0計(jì)滿溢出后,用軟件復(fù)位的方法使T0(P3.4)引腳產(chǎn)生負(fù)跳變,TH0每溢出一次,T0引腳便產(chǎn)生一個(gè)負(fù)跳變,TL0便計(jì)數(shù)一次。TL0計(jì)滿溢出時(shí),延時(shí)時(shí)間應(yīng)為50ms,循環(huán)20次便可得到1s的延時(shí)。由上述分析可知,TH0計(jì)數(shù)初值為

X=(256250)=6=06HTL0計(jì)數(shù)初值為

X=(256200)=56=38HTMOD=00000111B=07H仿真鏈接第29頁/共73頁可編得1s延時(shí)子程序如下:

DELAY:MOVR3,#14H;置100ms計(jì)數(shù)循環(huán)初值

MOVTMOD,#07H;置定時(shí)器0為方式3計(jì)數(shù)

MOVTH0,#06H;置TH0初值

MOV TL0,#38H ;置TL0初值

SETB TR0 ;啟動(dòng)TL0 SETB TR1 ;啟動(dòng)TH0LOOP1:JBCTF1,LOOP2;查詢TH0計(jì)數(shù)溢出

SJMPLP1 ;未到500s繼續(xù)計(jì)數(shù)

LOOP2:MOVTH0,#06H;重置TH0初值

CLRP3.4 ;T0引腳產(chǎn)生負(fù)跳變

NOP ;負(fù)跳變持續(xù)

NOPSETB P3.4;T0引腳恢復(fù)高電平

JBCTF0,LOOP3;查詢TH0計(jì)數(shù)溢出

SJMPLOOP1;100ms未到繼續(xù)計(jì)數(shù)

LOOP3:MOV TL0,#38H;重置TL0初值

DJNZR3,LOOP1 ;未到1s繼續(xù)循環(huán)

RET1第30頁/共73頁4.480C51的中斷系統(tǒng)

4.4.1中斷的概念中斷是通過硬件來改變CPU的運(yùn)行方向的。當(dāng)CPU在執(zhí)行程序時(shí),由內(nèi)部或外部的原因引起的隨機(jī)事件要求CPU暫時(shí)停止正在執(zhí)行的程序,而轉(zhuǎn)向執(zhí)行一個(gè)用于處理該隨機(jī)事件的程序,處理完后又返回被中止的程序斷點(diǎn)處繼續(xù)執(zhí)行,這一過程就稱為中斷。中斷之后所執(zhí)行的相應(yīng)的處理程序通常稱之為中斷服務(wù)或中斷處理子程序,原來正常運(yùn)行的程序稱為主程序。主程序被斷開的位置(或地址)稱為“斷點(diǎn)”。引起中斷的原因,或能發(fā)出中斷申請(qǐng)的來源,稱為“中斷源”。中斷源要求服務(wù)的請(qǐng)求稱為“中斷請(qǐng)求”(或中斷申請(qǐng))。第31頁/共73頁4.4.2中斷的特點(diǎn)及功能

1、中斷的特點(diǎn)

1)提高CPU的效率中斷可以解決高速的CPU與低速的外設(shè)之間的矛盾,使CPU和外設(shè)并行工作。CPU在啟動(dòng)外設(shè)工作后繼續(xù)執(zhí)行主程序,同時(shí)外設(shè)也在工作。每當(dāng)外設(shè)做完一件事就發(fā)出中斷申請(qǐng),請(qǐng)求CPU中斷它正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,中斷處理完之后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。這樣,CPU可啟動(dòng)多個(gè)外設(shè)同時(shí)工作,大大地提高了CPU的效率。

2)實(shí)時(shí)處理在實(shí)時(shí)控制系統(tǒng)中,工業(yè)現(xiàn)場(chǎng)的各種參數(shù)和信息都會(huì)隨時(shí)間而變化。這些外界變量可根據(jù)要求隨時(shí)向CPU發(fā)出中斷申請(qǐng),請(qǐng)求CPU及時(shí)處理中斷請(qǐng)求。如果滿足中斷條件,CPU就立刻會(huì)響應(yīng),轉(zhuǎn)入中斷處理,從而實(shí)現(xiàn)實(shí)時(shí)處理。

3)故障處理控制系統(tǒng)的故障和緊急情況難以預(yù)料的,如掉電、設(shè)備運(yùn)行出錯(cuò)等,可通過中斷系統(tǒng)由故障源向CPU發(fā)出中斷請(qǐng)求,再由CPU轉(zhuǎn)到相應(yīng)的故障處理程序進(jìn)行處理。第32頁/共73頁2、中斷的功能(1)實(shí)現(xiàn)中斷響應(yīng)和中斷返回當(dāng)CPU收到中斷請(qǐng)求后,CPU要根據(jù)相關(guān)條件(如中斷優(yōu)先級(jí)、是否允許中斷)進(jìn)行判斷,決定是否響應(yīng)這個(gè)中斷請(qǐng)求。若響應(yīng),則在執(zhí)行完當(dāng)前指令后立刻響應(yīng)這一中斷請(qǐng)求。CPU中斷過程為:第一步將斷點(diǎn)處的PC值(即下一條應(yīng)執(zhí)行指令的地址)壓入堆棧保留下來(這稱為保護(hù)斷點(diǎn),由硬件自動(dòng)執(zhí)行)。第二步將有關(guān)的寄存器內(nèi)容和標(biāo)志PSW狀態(tài)壓入堆棧保留下來(這稱為保護(hù)現(xiàn)場(chǎng),由用戶自己編程完成)。第三步執(zhí)行中斷服務(wù)程序。第四步中斷返回,CPU將繼續(xù)執(zhí)行原主程序。中斷返回過程為:首先恢復(fù)原保留寄存器的內(nèi)容和標(biāo)志位的狀態(tài),這稱為恢復(fù)現(xiàn)場(chǎng),由用戶編程完成。然后,再加返回指令RETI,RETI指令的功能是恢復(fù)PC值,使CPU返回?cái)帱c(diǎn),這稱為恢復(fù)斷點(diǎn)。中斷流程圖如圖4-8所示。第33頁/共73頁圖4-8中斷流程第34頁/共73頁

(2)實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì)中斷優(yōu)先權(quán)也稱為中斷優(yōu)先級(jí)。中斷系統(tǒng)中存在著多個(gè)中斷源,同一時(shí)刻可能會(huì)有不止一個(gè)中斷源提出中斷請(qǐng)求,因此需要給所有中斷源安排不同的優(yōu)先級(jí)別。CPU可通過中斷優(yōu)先級(jí)排隊(duì)電路首先響應(yīng)中斷優(yōu)先級(jí)高的中斷請(qǐng)求,等到處理完優(yōu)先級(jí)高的中斷請(qǐng)求后,再來響應(yīng)優(yōu)先級(jí)低的中斷請(qǐng)求。

(3)實(shí)現(xiàn)中斷嵌套當(dāng)CPU響應(yīng)某一中斷時(shí),若有中斷優(yōu)先級(jí)更高的中斷源發(fā)出中斷請(qǐng)求,CPU會(huì)暫停正在執(zhí)行的中斷服務(wù)程序,并保留這個(gè)程序的斷點(diǎn),轉(zhuǎn)向執(zhí)行中斷優(yōu)先級(jí)更高的中斷源的中斷服務(wù)程序,等處理完這個(gè)高優(yōu)先級(jí)的中斷請(qǐng)求后,再返回來繼續(xù)執(zhí)行被暫停的中斷服務(wù)程序。這個(gè)過程稱為中斷嵌套。中斷嵌套流程圖如圖4-9所示。

80C51中斷可實(shí)現(xiàn)兩級(jí)中斷嵌套。高優(yōu)先級(jí)中斷源可中斷正在執(zhí)行的低優(yōu)先級(jí)中斷服務(wù)程序,除非執(zhí)行了低優(yōu)先級(jí)中斷服務(wù)程序的CPU關(guān)中斷指令。同級(jí)或低優(yōu)先級(jí)的中斷不能中斷正在執(zhí)行的中斷服務(wù)程序。第35頁/共73頁圖4-9中斷嵌套流程圖返回第36頁/共73頁圖4-1080C51中斷系統(tǒng)結(jié)構(gòu)圖4.4.380C51中斷系統(tǒng)的結(jié)構(gòu)及中斷源

一、80C51中斷系統(tǒng)的結(jié)構(gòu)

80C51的中斷系統(tǒng)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷嵌套,中斷系統(tǒng)結(jié)構(gòu)如圖4-10所示。由圖可知,與中斷有關(guān)的有:①4個(gè)寄存器,分別為中斷源寄存器TCON和SCON、中斷允許控制寄存器IE和中斷優(yōu)先級(jí)控制寄存器IP;②5個(gè)中斷源,分別為外部中斷0請(qǐng)求(INT0)、外部中斷1請(qǐng)求(INT1)、定時(shí)器0溢出中斷請(qǐng)求TF0、定時(shí)器1溢出中斷請(qǐng)求TF1和串行中斷請(qǐng)求RI或TI。③中斷優(yōu)先級(jí)控制寄存器IP和順序查詢邏輯電路,共同決定5個(gè)中斷源的排列順序,5個(gè)中斷源分別對(duì)應(yīng)5個(gè)固定的中斷入口地址。

第37頁/共73頁二、80C51的中斷源

80C51有5個(gè)中斷源,它們是:1、外部中斷0請(qǐng)求,由80C51的P3.2腳輸入。可由IT0(TCON.0位)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.2引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE0(TCON.1位)置1,向CPU申請(qǐng)中斷。中斷服務(wù)程序入口地址為0003H。2、外部中斷1請(qǐng)求,由80C51的P3.3腳輸入。可由IT1(TCON.2位)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.3引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE1(TCON.3位)置1,向CPU申請(qǐng)中斷。中斷服務(wù)程序入口地址為0013H。3、TF0:定時(shí)器T0溢出中斷請(qǐng)求。當(dāng)定時(shí)器T0產(chǎn)生溢出時(shí),定時(shí)器T0中斷請(qǐng)求標(biāo)志位(TCON.5位)置1(由硬件自動(dòng)執(zhí)行),向CPU申請(qǐng)中斷。中斷服務(wù)程序入口地址為000BH。4、TF1:定時(shí)器T1溢出中斷請(qǐng)求。當(dāng)定時(shí)器T1產(chǎn)生溢出時(shí),定時(shí)器T1中斷請(qǐng)求標(biāo)志位(TCON.7位)置1(由硬件自動(dòng)執(zhí)行),向CPU申請(qǐng)中斷。中斷服務(wù)程序入口地址為001BH5、RI或TI:串行中斷請(qǐng)求。當(dāng)串行口接收完一幀串行數(shù)據(jù)時(shí)置位RI(SCON.0位)(由硬件自動(dòng)執(zhí)行)或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI(SCON.1位),向CPU申請(qǐng)中斷。中斷服務(wù)程序入口地址為0023H。第38頁/共73頁其中TF1、TR1、TF0和TR0這四位是控制定時(shí)器的啟動(dòng)與停止的,在定時(shí)/計(jì)數(shù)器一節(jié)中已經(jīng)詳細(xì)討論過,下面只作簡(jiǎn)單介紹。

1、TF1(TCON.7位):定時(shí)器1溢出標(biāo)志位。定時(shí)器1被啟動(dòng)計(jì)數(shù)后,從初值開始做加1計(jì)數(shù),計(jì)滿溢出后由硬件自動(dòng)使TF1置1,并申請(qǐng)中斷。此標(biāo)志一直保持到CPU響應(yīng)中斷后,才由硬件自動(dòng)清0。也可用軟件查詢?cè)摌?biāo)志,并由軟件清0。

2、TR1(TCON.6位):定時(shí)器1啟??刂莆?。

3、TF0(TCON.5位):定時(shí)器0溢出標(biāo)志位。其功能同TF1。

4、TR0(TCON.4位):定時(shí)器0啟、停控制位。其功能同TR1。

4.4.480C51中斷的控制

一.定時(shí)器控制寄存器TCON

定時(shí)器控制寄存器TCON的作用是控制定時(shí)器的啟動(dòng)與停止,并保存T0、T1的溢出中斷標(biāo)志和外部中斷、的中斷標(biāo)志。TCON寄存器的格式和各位定義如下:第39頁/共73頁

以下這四位直接與中斷有關(guān),需進(jìn)行詳細(xì)討論。

5、IT1(TCON.2位):外部中斷1(INT1)觸發(fā)方式選擇位。

當(dāng)ITl=0時(shí),外部中斷1為電平觸發(fā)方式。在這種方式下,CPU在每個(gè)機(jī)器周期的S5P2期間對(duì)INT1(P3.3)引腳采樣,若為低電平,則認(rèn)為有中斷申請(qǐng),硬件自動(dòng)使IEl標(biāo)志置1;若為高電平,則認(rèn)為無中斷申請(qǐng)或中斷申請(qǐng)已撤除,硬件自動(dòng)使IEl標(biāo)志清0。在電平觸發(fā)方式中,CPU響應(yīng)中斷后不能由硬件自動(dòng)使IEl清0,也不能由軟件使IEl清0,所以在中斷返回前必須撤消INT1引腳上的低電平,否則將再次中斷,導(dǎo)致出錯(cuò)。

當(dāng)ITl=1時(shí),外部中斷1為邊沿觸發(fā)方式。CPU在每個(gè)機(jī)器周期的S5P2期間采樣INT1(P3.3)引腳。若在連續(xù)兩個(gè)機(jī)器周期采樣到先高電平后低電平,則認(rèn)為有中斷申請(qǐng),硬件自動(dòng)使IEl置1,此標(biāo)志一直保持到CPU響應(yīng)中斷時(shí),才由硬件自動(dòng)清0。在邊沿觸發(fā)方式下,為保證CPU在兩個(gè)機(jī)器周期內(nèi)檢測(cè)到先高后低的負(fù)跳變,輸入高低電平的持續(xù)時(shí)間至少要保持12個(gè)時(shí)鐘周期。

6、IE1(TCON.3位):外部中斷1(INT1)請(qǐng)求標(biāo)志位。IEl=1表示外部中斷1向CPU申請(qǐng)中斷。當(dāng)CPU響應(yīng)外部中斷1的中斷請(qǐng)求時(shí),由硬件自動(dòng)使IE1清0(邊沿觸發(fā)方式)。

7、IE0(TCON.1位):外部中斷0(INT0)請(qǐng)求標(biāo)志位。其功能同IE1。

8、IT0(TCON.0位):外部中斷0觸發(fā)方式選擇位。其功能同IT1。

80C51系統(tǒng)復(fù)位后,TCON初值均清0,應(yīng)用時(shí)要注意各位的初始狀態(tài)。第40頁/共73頁1、TI(SCON.1位):串行發(fā)送中斷請(qǐng)求標(biāo)志。CPU將一個(gè)字節(jié)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,就啟動(dòng)發(fā)送,每發(fā)送完一個(gè)串行幀數(shù)據(jù),硬件自動(dòng)使TI置1。但CPU響應(yīng)中斷后,硬件并不能自動(dòng)使TI清0,必須由軟件使TI清0。2、RI(SCON.0位):串行接收中斷請(qǐng)求標(biāo)志。在串行口允許接收時(shí),每接收完一個(gè)串行幀數(shù)據(jù),硬件自動(dòng)使RI置1。但CPU響應(yīng)中斷后,硬件并不能自動(dòng)使RI清0,必須由軟件使RI清0。80C51系統(tǒng)復(fù)位后,SCON初值均清0,應(yīng)用時(shí)要注意各位的初始狀態(tài)。二.串行口控制寄存器SCON

串行口控制寄存器SCON的低2位TI和RI保存串行口的發(fā)送中斷和接收中斷標(biāo)志。SCON寄存器的格式和各位定義如下:第41頁/共73頁1、EA(IE.7位):CPU中斷總允許控制位。EA=1,CPU開放所有中斷。各中斷源的允許還是禁止,分別由各中斷源的中斷允許位單獨(dú)加以控制;EA=0,CPU禁止所有的中斷,稱為關(guān)中斷。2、ES(IE.4位):串行口中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。3、ET1(IE.3位):定時(shí)器1中斷允許位。ET1=1,允許定時(shí)器1中斷;ETl=0,禁止定時(shí)器1中斷。

4、EX1(IE.2位):外部中斷1(INT1)中斷允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。

5、ET0(IE.1位):定時(shí)器0中斷允許位。ET0=1,允許定時(shí)器0中斷;ET0=0,禁止定時(shí)器0中斷。

6、EX0(IE.0位):外部中斷0(INT0)中斷允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。

80C51單片機(jī)系統(tǒng)復(fù)位后,IE中各中斷允許位均被清0,即禁止所有中斷。

開中斷過程是:首先開總中斷:SETBEA,然后,開T1中斷:SETBET1,這2條位操作指令也可合并為1條字節(jié)指令:MOV IE,#88H。三.中斷允許寄存器IE80C51單片機(jī)有5個(gè)中斷源都是可屏蔽中斷,其中斷系統(tǒng)內(nèi)部設(shè)有一個(gè)專用寄存器IE,用于控制CPU對(duì)各中斷源的開放或屏蔽。IE寄存器的格式和各位定義如下:第42頁/共73頁1、PS(IP.4位):串行口中斷優(yōu)先級(jí)控制位。PS=1,串行口為高優(yōu)先級(jí)中斷;PS=0,串行口為低優(yōu)先級(jí)中斷。2、PT1(IP.3位):定時(shí)器1中斷優(yōu)先級(jí)控制位。PT1=1,定時(shí)器1為高優(yōu)先級(jí)中斷;PTl=0,定時(shí)器1為低優(yōu)先級(jí)中斷。3、PX1(IP.2):外部中斷1(INT1)中斷優(yōu)先級(jí)控制位。PX1=1,外部中斷1為高優(yōu)先級(jí)中斷;PXl=0,外部中斷1為低優(yōu)先級(jí)中斷。四.中斷優(yōu)先級(jí)寄存器IP80C51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),每個(gè)中斷源都可以通過編程確定為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷,因此,可實(shí)現(xiàn)二級(jí)嵌套。同一優(yōu)先級(jí)別中的中斷源可能不止一個(gè),也有中斷優(yōu)先權(quán)排隊(duì)的問題。專用寄存器IP為中斷優(yōu)先級(jí)寄存器,鎖存各中斷源優(yōu)先級(jí)控制位,IP中的每一位均可由軟件來置1或清0,且1表示高優(yōu)先級(jí),0表示低優(yōu)先級(jí)。IP寄存器的格式和各位定義如下:第43頁/共73頁

4、PT0(IP.1):定時(shí)器0中斷優(yōu)先級(jí)控制位。PT0=1,定時(shí)器T0為高優(yōu)先級(jí)中斷PT0=0,定時(shí)器0為低優(yōu)先級(jí)中斷。

5、PX0(IP.0):外部中斷0(INT0)中斷優(yōu)先級(jí)控制位。PX0=1,外部中斷0為高優(yōu)先級(jí)中斷;PX0=0,外部中斷0為低優(yōu)先級(jí)中斷。當(dāng)80C51系統(tǒng)復(fù)位后,IP低5位全部清0,所有中斷源均設(shè)定為低優(yōu)先級(jí)中斷。如果幾個(gè)同一優(yōu)先級(jí)的中斷源同時(shí)向CPU申請(qǐng)中斷,CPU通過內(nèi)部硬件查詢邏輯,按自然優(yōu)先級(jí)順序確定先響應(yīng)哪個(gè)中斷請(qǐng)求。自然優(yōu)先級(jí)由硬件形成,排列如下:第44頁/共73頁

4.580C51中斷處理過程

中斷處理過程可分為三個(gè)階段,即中斷響應(yīng)、中斷處理和中斷返回。不同的計(jì)算機(jī)因其中斷系統(tǒng)的硬件結(jié)構(gòu)不同,因此,中斷響應(yīng)的方式也有所不同。這里,僅以80C51單片機(jī)為例進(jìn)行介紹。

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

一、中斷響應(yīng)中斷響應(yīng)是CPU對(duì)中斷源中斷請(qǐng)求的響應(yīng),包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。CPU并不是任何時(shí)刻都響應(yīng)中斷請(qǐng)求,而是在中斷響應(yīng)條件滿足之后才會(huì)響應(yīng)。CPU響應(yīng)中斷必須首先滿足以下三個(gè)基本條件。

1、中斷源要有中斷請(qǐng)求。2、中斷總允許位EA=1。

3、中斷源的中斷允許位為1。在滿足以上條件的基礎(chǔ)上,CPU一般會(huì)響應(yīng)中斷,但若有下列任何一種情況存在,中斷響應(yīng)都會(huì)受到阻斷。

1、CPU正在響應(yīng)同級(jí)或高優(yōu)先級(jí)的中斷服務(wù)程序。

2、當(dāng)前執(zhí)行的指令尚未執(zhí)行完。

3、正在執(zhí)行指令RET、RETI或任何對(duì)專用寄存器IE、IP進(jìn)行讀/寫的指令。

CPU在執(zhí)行完上述指令之后,要再執(zhí)行一條指令,才能響應(yīng)中斷請(qǐng)求。若由于上述條件的阻礙中斷未能得到響應(yīng),當(dāng)條件消失時(shí)該中斷標(biāo)志卻已不再有效,那么該中斷將不被響應(yīng)。

第45頁/共73頁二、中斷響應(yīng)時(shí)間在控制系統(tǒng)中,為了滿足控制精度和時(shí)間要求,我們需要弄清CPU響應(yīng)中斷所需的時(shí)間。響應(yīng)中斷的時(shí)間分為最短時(shí)間(需要三個(gè)機(jī)器周期)和最長時(shí)間(需要八個(gè)機(jī)器周期)。某中斷響應(yīng)的時(shí)序如圖4-11所示。1、響應(yīng)中斷的最短時(shí)間

80C51的中斷響應(yīng)時(shí)間,從標(biāo)志置1到進(jìn)入相應(yīng)的中斷服務(wù),至少需要三個(gè)完整的機(jī)器周期。這三個(gè)機(jī)器周期的分配是:第一個(gè)機(jī)器周期用于查詢中斷標(biāo)志狀態(tài),即M1周期的S5P2前某中斷生效,在S5P2期間其中斷請(qǐng)求被鎖存到相應(yīng)的標(biāo)志位中去;M2恰逢指令的最后一個(gè)機(jī)器周期,且該指令不是RETI或訪問IE、IP的指令。第二、三個(gè)機(jī)器周期用于保護(hù)斷點(diǎn)、關(guān)CPU中斷和自動(dòng)執(zhí)行硬件LCALL指令。即M3和M4便可以執(zhí)行硬件LCALL指令,M5周期將進(jìn)入了中斷服務(wù)程序。

圖4-11某中斷響應(yīng)的時(shí)序第46頁/共73頁

2、響應(yīng)中斷的最長時(shí)間若CPU在執(zhí)行RETI或訪問IE、IP指令的第一個(gè)機(jī)器周期中查詢到有某中斷源的中斷請(qǐng)求,若該中斷是開放的,則80C51需要執(zhí)行一條指令才會(huì)響應(yīng)這個(gè)中斷請(qǐng)求。這種情況下,CPU響應(yīng)中斷需要八個(gè)機(jī)器周期,為最長時(shí)間,這八個(gè)機(jī)器周期的分配是:執(zhí)行RETI或訪問IE、IP指令需要另加一個(gè)機(jī)器周期,因?yàn)镃PU需要在這類指令的第一個(gè)機(jī)器周期查詢?cè)撝袛嗾?qǐng)求的存在;執(zhí)行RETI或訪問IE、IP指令的下一條指令需要四個(gè)機(jī)器周期;響應(yīng)中斷到進(jìn)入該中斷入口地址需要三個(gè)機(jī)器周期。

需要說明一點(diǎn):對(duì)于二級(jí)嵌套中斷,所需要的等待時(shí)間取決于正在執(zhí)行的中斷服務(wù)程序的長短,等待時(shí)間無法確定。所以,對(duì)于沒有嵌套的單級(jí)中斷,CPU響應(yīng)中斷的時(shí)間為三個(gè)~八個(gè)機(jī)器周期。4.5.2中斷響應(yīng)過程在滿足中斷響應(yīng)條件后,CPU響應(yīng)中斷,中斷響應(yīng)過程包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。首先,將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置1,以屏蔽同級(jí)別中斷源的中斷請(qǐng)求。其次,硬件自動(dòng)生成長調(diào)用指令(LCALL),把斷點(diǎn)地址壓入堆棧保護(hù)(不保護(hù)狀態(tài)寄存器PSW及其它寄存器內(nèi)容),然后將中斷源對(duì)應(yīng)的中斷入口地址裝入程序計(jì)數(shù)器PC中(由硬件自動(dòng)執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,并執(zhí)行中斷服務(wù)程序。中斷響應(yīng)過程的前兩步是由中斷系統(tǒng)內(nèi)部自動(dòng)完成的,而中斷服務(wù)程序則要由用戶編寫程序來完成。

第47頁/共73頁80C51單片機(jī)各中斷源的入口地址(稱為中斷矢量)由硬件事先設(shè)定,分配如下:中斷源中斷入口地址外部中斷00003H定時(shí)器T0中斷000BH外部中斷10013H定時(shí)器T1中斷001BH串行口中斷0023H

使用時(shí),通常在這些中斷入口地址處存放一條絕對(duì)跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序的起始地址上去。例如采用定時(shí)器T1中斷,其中斷入口地址為001BH,中斷服務(wù)程序名為CTT1,因此,指令形式為:

ORG 001BH ;T1中斷入口

AJMPCTT1 ;轉(zhuǎn)向中斷服務(wù)程序第48頁/共73頁4.5.3中斷處理中斷處理就是執(zhí)行中斷服務(wù)程序,中斷服務(wù)程序從中斷入口地址開始執(zhí)行,到返回指令RETI為止。此過程一般包括三部分內(nèi)容,一是保護(hù)現(xiàn)場(chǎng),二是處理中斷源的請(qǐng)求,三是恢復(fù)現(xiàn)場(chǎng)。通常,主程序和中斷服務(wù)程序都會(huì)用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器。在執(zhí)行中斷服務(wù)程序時(shí),CPU若用到上述寄存器,就會(huì)破壞原先存在這些寄存器中的內(nèi)容,一旦中斷返回,將會(huì)造成主程序的混亂。因此,在進(jìn)入中斷服務(wù)程序后,一般要先保護(hù)現(xiàn)場(chǎng),然后再執(zhí)行中斷處理程序,在中斷返回主程序之前,再恢復(fù)現(xiàn)場(chǎng)。在編寫中斷服務(wù)程序時(shí)要注意以下幾點(diǎn):

1、各中斷源的中斷入口地址之間只相隔8個(gè)字節(jié),安排不下中斷服務(wù)程序,因此,在中斷入口地址單元通常存放一條無條件轉(zhuǎn)移指令LJMP,可將中斷服務(wù)程序轉(zhuǎn)至存儲(chǔ)器的任何空間。

2、若要求禁止更高優(yōu)先級(jí)中斷源的中斷請(qǐng)求,應(yīng)先用軟件關(guān)閉CPU中斷或屏蔽更高級(jí)中斷源的中斷,在中斷返回前再開放被關(guān)閉或被屏蔽的中斷。

3、在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)時(shí),為了不使現(xiàn)場(chǎng)數(shù)據(jù)受到破壞或造成混亂,一般規(guī)定此時(shí)CPU不再響應(yīng)新的中斷請(qǐng)求。因此,在編寫中斷服務(wù)程序時(shí),在保護(hù)現(xiàn)場(chǎng)之前要關(guān)中斷,在保護(hù)現(xiàn)場(chǎng)之后再開中斷;在恢復(fù)現(xiàn)場(chǎng)之前關(guān)中斷,在恢復(fù)現(xiàn)場(chǎng)之后再開中斷。第49頁/共73頁4.5.4中斷返回一、中斷返回中斷返回是指中斷服務(wù)完成后,CPU返回到原程序斷開的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來的程序。中斷返回通過執(zhí)行中斷返回指令RETI來實(shí)現(xiàn),該指令的功能是首先將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置0,以開放同級(jí)別中斷源的中斷請(qǐng)求;其次,從堆棧區(qū)把斷點(diǎn)地址取出,送回到程序計(jì)數(shù)器PC中。因此,不能用RET指令代替RETI指令。綜上所述,中斷處理過程用流程圖表示如圖4-12所示。圖4-12中斷處理過程流程圖

第50頁/共73頁二、中斷請(qǐng)求的撤除

CPU響應(yīng)中斷請(qǐng)求后即進(jìn)入中斷服務(wù)程序,在中斷返回前,應(yīng)撤除該中斷請(qǐng)求,否則會(huì)引起另一次中斷。不同中斷源中斷請(qǐng)求的撤除方法是不一樣的。

1、定時(shí)器中斷請(qǐng)求的撤除對(duì)于定時(shí)器0或定時(shí)器1溢出中斷,CPU在響應(yīng)中斷后即由硬件自動(dòng)清除其中斷標(biāo)志位TF0或TF1,無需采取其它措施。

2、串行口中斷的撤除對(duì)于串行口中斷,在CPU響應(yīng)中斷后,硬件不能清除中斷請(qǐng)求標(biāo)志TI和RI,必須在中斷服務(wù)程序中由軟件來清除相應(yīng)的標(biāo)志。

3、外部中斷的撤除外部中斷分為邊沿觸發(fā)和電平觸發(fā)兩種方式。

1)對(duì)于邊沿觸發(fā)的外部中斷0(INT0)或1(INT1),CPU在響應(yīng)中斷后由硬件自動(dòng)清除其中斷標(biāo)志位IE0或IE1,無需采取其它措施。

2)對(duì)于電平觸發(fā)的外部中斷0(INT0)或1(INT1),其中斷請(qǐng)求撤除方法較復(fù)雜。因?yàn)?,CPU響應(yīng)中斷后,硬件會(huì)自動(dòng)清除中斷請(qǐng)求標(biāo)志IE0或IEl,但由于加到或引腳的外部中斷請(qǐng)求信號(hào)并未撤除,中斷請(qǐng)求標(biāo)志IE0或IEl會(huì)再次被置1,所以在CPU響應(yīng)中斷后應(yīng)立即撤除或引腳上的低電平。一般采用加一個(gè)D觸發(fā)器和幾條指令的方法來解決這個(gè)問題。

第51頁/共73頁

第一條指令使P1.0為0,因P1.0與D觸發(fā)器的異步置1端相連,Q端輸出為1,從而撤除中斷請(qǐng)求。第二條指令使P1.0變?yōu)?(撤除對(duì)Q的置1),因此,Q繼續(xù)受CP控制,即新的外部中斷請(qǐng)求信號(hào)再來也能向80C51申請(qǐng)中斷。第二條指令是必不可少的,否則,新的外部中斷將無法產(chǎn)生。

由圖4-12可知,外部中斷請(qǐng)求信號(hào)不直接加INT0或INT1引腳上,而是加在D觸發(fā)器的CP端。由于D端接地,當(dāng)外部中斷請(qǐng)求的正脈沖信號(hào)出現(xiàn)在CP端時(shí),Q端輸出為0,INT0或INT1為低,外部中斷向80C51發(fā)出中斷請(qǐng)求。在中斷服務(wù)程序中開始的三條指令可先在P1.0輸出一個(gè)寬度為2個(gè)機(jī)器周期的負(fù)脈沖,使D觸發(fā)器的Q端置1,然后由軟件來清除中斷請(qǐng)求標(biāo)志IE0或IEl。第52頁/共73頁4.680C51外部中斷擴(kuò)展與中斷系統(tǒng)的應(yīng)用

80C51單片機(jī)只有兩個(gè)外部中斷請(qǐng)求輸入端和,在實(shí)際應(yīng)用中,若外部中斷源超過兩個(gè),就不夠用了,因此需擴(kuò)充外部中斷源,這里介紹兩種簡(jiǎn)單的方法,定時(shí)器擴(kuò)展法和中斷加查詢擴(kuò)展法。定時(shí)器擴(kuò)展法用于外部中斷源個(gè)數(shù)不太多并且定時(shí)器有空余的場(chǎng)合。中斷加查詢擴(kuò)展法用于外部中斷源個(gè)數(shù)較多的場(chǎng)合,但因查詢時(shí)間較長,在實(shí)時(shí)控制中要注意能否滿足實(shí)時(shí)控制要求。

4.6.1用定時(shí)器作外部中斷源

80C51單片機(jī)有兩個(gè)定時(shí)器,具有兩個(gè)內(nèi)中斷標(biāo)志和外計(jì)數(shù)引腳,如在某些應(yīng)用中不被使用,則它們的中斷可作為外部中斷請(qǐng)求使用。此時(shí),可將定時(shí)器設(shè)置成計(jì)數(shù)方式,計(jì)數(shù)初值可設(shè)為滿量程,通過外部輸入端T0(P3.4)或T1(P3.5)上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1便產(chǎn)生溢出,向CPU發(fā)出中斷請(qǐng)求。利用此特性,可把T0腳或T1腳作為外部中斷請(qǐng)求輸入線,而計(jì)數(shù)器的溢出中斷作為外部中斷請(qǐng)求標(biāo)志。

第53頁/共73頁[例8]將定時(shí)器T1擴(kuò)展為外部中斷源。

解:將定時(shí)器T1設(shè)定為方式2(自動(dòng)恢復(fù)計(jì)數(shù)初值),TL1和TH1的初值均設(shè)置為FFH,允許T1中斷,CPU開放中斷,源程序如下:

MOVTMOD,#60H MOVTH1,#0FFH MOVTL1,#0FFH SETBTR1 SETBET1 SETBEA

當(dāng)T1(P3.5)引腳的外部中斷請(qǐng)求輸入線發(fā)生負(fù)跳變時(shí),TL1加1溢出使TF1置1,向CPU發(fā)出中斷申請(qǐng),同時(shí),TH1的內(nèi)容又自動(dòng)送給TL1使TL1恢復(fù)初值。這樣,T1引腳每輸入一個(gè)負(fù)跳變,TF1都會(huì)置1,向CPU請(qǐng)求中斷,此時(shí),T1腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。同理,也可使定時(shí)器T0擴(kuò)展為外部中斷源。第54頁/共73頁圖4-14利用擴(kuò)展成多個(gè)中斷源的原理圖4.6.2中斷和查詢相結(jié)合對(duì)多個(gè)外部中斷源,可采用一個(gè)外中斷或,利用中斷和查詢相結(jié)合的方法來解決多個(gè)外部中斷源的響應(yīng)問題。電路原理圖如圖4-14所示。

由圖可知,4個(gè)外部擴(kuò)展中斷源通過4個(gè)OC非門電路組成或非后再與(P3.3)相連,4個(gè)外部擴(kuò)展中斷源1

中斷源4中有一個(gè)或幾個(gè)出現(xiàn)高電平時(shí)則輸出為0,使腳為低電平,從而發(fā)出中斷請(qǐng)求。在中斷服務(wù)程序中,依次查詢P1.0~P1.3口的中斷源輸入狀態(tài),就可以確定究竟是哪個(gè)中斷源提出中斷請(qǐng)求。然后,轉(zhuǎn)入到相應(yīng)的中斷服務(wù)程序,4個(gè)擴(kuò)展中斷源的優(yōu)先級(jí)順序由軟件查詢順序決定,即最先查詢的優(yōu)先級(jí)最高,最后查詢的優(yōu)先級(jí)最低。

第55頁/共73頁[例9]:設(shè)計(jì)一個(gè)利用擴(kuò)展4個(gè)外中斷的中斷服務(wù)。

解:根據(jù)圖4-14所示,編程如下:

ORG0013H ;外部中斷1入口

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

INT1:PUSHPSW ;保護(hù)現(xiàn)場(chǎng)

PUSHACCJNBP1.0,EXT0 ;中斷源查詢并轉(zhuǎn)相應(yīng)中斷服務(wù)程序

JNBP1.1,EXT1 JNBP1.2,EXT2 JNBP1.3,EXT3EXIT:POPACC ;恢復(fù)現(xiàn)場(chǎng)

POPPSW RETI EXT0:

;中斷源1中斷服務(wù)程序

AJMPEXITEXT2:

;中斷源2中斷服務(wù)程序

AJMPEXITEXT3:

;中斷源3中斷服務(wù)程序

AJMPEXIT思考題:設(shè)計(jì)一個(gè)利用外部中斷0(INT0)擴(kuò)展5個(gè)中斷源的電路原理圖和程序。

仿真鏈接第56頁/共73頁4.6.3中斷系統(tǒng)的應(yīng)用中斷系統(tǒng)的初始化實(shí)質(zhì)上是針對(duì)4個(gè)與中斷有關(guān)的特殊功能寄存器TCON、SCON、IE和IP進(jìn)行控制和管理,具體步驟如下:

1、開CPU中斷總開關(guān)(EA);

2、設(shè)置中斷允許寄存器IE中相應(yīng)的位,確定各個(gè)中斷源是否允許中斷;

3、對(duì)多級(jí)中斷設(shè)置中斷優(yōu)先級(jí)寄存器IP中相應(yīng)的位,確定各中斷源的優(yōu)先級(jí)別;

4、設(shè)置定時(shí)器控制寄存器TCON中相應(yīng)的位,確定外部中斷是邊沿觸發(fā)還是電平觸發(fā)的觸發(fā)方式。第57頁/共73頁

[例10]:用89S51單片機(jī)控制一個(gè)交通信號(hào)燈系統(tǒng),晶振采用12MHz。設(shè)設(shè)A車道與B車道交叉組成十字路口,A是主道,B是支道。設(shè)計(jì)要求如下:

1、用發(fā)光二極管模擬交通信號(hào)燈,用按鍵開關(guān)模擬車輛檢測(cè)信號(hào);

2、正常情況下,A、B兩車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。

3、在交通繁忙時(shí),交通信號(hào)燈控制系統(tǒng)應(yīng)有手控開關(guān),可人為地改變信號(hào)燈的狀態(tài),以緩解交通擁擠狀況。在B車道放行期間,若A車道有車而B車道無車,按下開關(guān)K1使A車道放行15s;在A車道放行期間,若B車道有車而A車道無車,按下開關(guān)K2使B車道放行15s。

4、有緊急車輛通過時(shí),按下K3開關(guān)使A、B車道均為紅燈,禁行20s。解:設(shè)計(jì)步驟如下:

一、總體設(shè)計(jì)思想根據(jù)設(shè)計(jì)要求,制定總體設(shè)計(jì)思想如下:

1、正常情況下運(yùn)行主程序,采用0.5秒延時(shí)子程序的反復(fù)調(diào)用來實(shí)現(xiàn)各種定時(shí)時(shí)間;

2、一道有車而另一道無車時(shí),采用外部中斷1執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為低優(yōu)先級(jí)中斷;

3、有緊急車輛通過時(shí),采用外部中斷0執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為高優(yōu)先級(jí)中斷,實(shí)現(xiàn)二級(jí)中斷嵌套。第58頁/共73頁控制狀態(tài)P1口控制碼P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0未用未用B道綠燈B道黃燈B道紅燈A道綠燈A道黃燈A道紅燈A道放行,B道禁止F3H11110011A道警告,B道禁止F5H11110101A道禁止,B道放行DEH11011110A道禁止,B道警告EEH11101110A道禁止,B道禁止F6H11110110表4-2交通信號(hào)燈與控制狀態(tài)的對(duì)應(yīng)關(guān)系

二、硬件設(shè)計(jì)用12只發(fā)光二極管模擬交通信號(hào)燈,以89S51單片機(jī)的P1口控制這12只發(fā)光二極管,由于單片機(jī)帶負(fù)載能力有限,因此,在P1口與發(fā)光二極管之間用74LS07作驅(qū)動(dòng)電路,P1口輸出低電平時(shí),信號(hào)燈亮;輸出高電平時(shí),信號(hào)燈滅。在正常情況和交通繁忙時(shí),A、B兩車道的六只信號(hào)燈的控制狀態(tài)有五種形式,即P1口控制功能及相應(yīng)控制碼如表4-2所示。第59頁/共73頁

分別以按鍵K1、K2模擬A、B道的車輛檢測(cè)信號(hào),開關(guān)K1按下時(shí),B車道放行;開關(guān)K2按下時(shí),A車道放行;開關(guān)K1和K2的控制信號(hào)經(jīng)異或取反后,產(chǎn)生中斷請(qǐng)求信號(hào)(低電平有效),通過外部中斷1向CPU發(fā)出中斷請(qǐng)求;因此產(chǎn)生外部中斷1中斷的條件應(yīng)是:,可用集成塊74LS266(如無74LS266,可用74LS86與74LS04組合)來實(shí)現(xiàn)。采用中斷加查詢擴(kuò)展法,可以判斷出要求放行的是A車道(按下開關(guān)K1)還是B車道(按下開關(guān)K2)。以按鍵K0模擬緊急車輛通過開關(guān),當(dāng)K0為高電平時(shí)屬正常情況,當(dāng)K0為低電平時(shí),屬緊急車輛通過的情況,直接將K0信號(hào)接至(P3.2)腳即可實(shí)現(xiàn)外部中斷0中斷。綜上所述,可設(shè)計(jì)出硬件電路如圖4-15。第60頁/共73頁圖4-15交通燈模擬控制電路圖仿真鏈接第61頁/共73頁

三、軟件設(shè)計(jì)

1、主程序采用查詢方式定時(shí),由R2寄存器確定調(diào)用0.5秒延時(shí)子程序的次數(shù),從而獲取交通燈的各種時(shí)間。子程序采用定時(shí)器1方式1查詢式定時(shí),定時(shí)器定時(shí)50ms,R3寄存器確定50ms循環(huán)10次,從而獲取0.5秒的延時(shí)時(shí)間。有車車道放行中

2、有車車道放行的中斷服務(wù)程序首先要保護(hù)現(xiàn)場(chǎng),因需用到延時(shí)子程序和P1口,故需保護(hù)的寄存器有R3、P1、TH1和TL1,保護(hù)現(xiàn)

溫馨提示

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