單片機定時器應用舉例_第1頁
單片機定時器應用舉例_第2頁
單片機定時器應用舉例_第3頁
單片機定時器應用舉例_第4頁
單片機定時器應用舉例_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

會計學1單片機定時器應用舉例學習目的

1、了解80C51定時/計數(shù)器的結構與工作原理;

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

3、掌握80C51定時/計數(shù)器工作方式的特點及應用;

4、掌握80C51中斷系統(tǒng)結構、處理過程和使用方法。學習重點和難點

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

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

3、定時器/計數(shù)器與中斷的綜合應用;

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

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

定時/計數(shù)器的結構如圖4-1所示。

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

二、各部分的功能:

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

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

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

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

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

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

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

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

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

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

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

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

工作方式

功能說明

00

方式0

13位計數(shù)器

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

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

11方式3定時器0:分為兩個獨立的8位計數(shù)器定時器1:停止計數(shù)

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

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

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

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

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

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

4、TR0(TCON.4位):定時器0啟停控制位。其功能及操作情況同TR1。

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

5、IE1(TCON.3位):外部中斷1()請求標志位。

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

7、IE0(TCON.1位):外部中斷0()請求標志位。

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

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

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

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

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

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

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

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

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

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

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

1F9CH=0001111110011100B

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

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

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

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

第15頁/共73頁

4.380C51定時/計數(shù)器的工作方式及應用

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

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

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

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

第18頁/共73頁圖4-4定時器0在方式2時的邏輯結構圖4.3.3方式2

定時/計數(shù)器工作于方式2時,其邏輯結構圖如圖4-4所示。

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

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

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

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

ORG0100HMOVA,#01H;置第一個LED亮

LOOP0:MOVP1,A

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

MOVTL0,#0B0H;定時100msSETBTR0;啟動T0LOOP1:JBCTF0,LOOP2;100ms到轉L002,并清TF0SJMPLOOP1LOOP2:RLASJMPLOOP0

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

即:TH1=63H,TL1=18H,又因采用方式0定時,故TMOD=00H。可編得1s延時子程序如下:

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

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

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

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

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

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

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

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

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

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

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

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

LCALLDIS;調用顯示子程序

SJMPMAIN;重復循環(huán)

ORG0800HDIS:(略);顯示子程序

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MOVTH0,#06H;置TH0初值

MOV TL0,#38H ;置TL0初值

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

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

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

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

NOP ;負跳變持續(xù)

NOPSETB P3.4;T0引腳恢復高電平

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

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

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

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

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

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

1、中斷的特點

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

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

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

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

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

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

一、80C51中斷系統(tǒng)的結構

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

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

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

1、TF1(TCON.7位):定時器1溢出標志位。定時器1被啟動計數(shù)后,從初值開始做加1計數(shù),計滿溢出后由硬件自動使TF1置1,并申請中斷。此標志一直保持到CPU響應中斷后,才由硬件自動清0。也可用軟件查詢該標志,并由軟件清0。

2、TR1(TCON.6位):定時器1啟停控制位。

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

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

4.4.480C51中斷的控制

一.定時器控制寄存器TCON

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

以下這四位直接與中斷有關,需進行詳細討論。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.580C51中斷處理過程

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

4.5.1中斷響應與中斷響應時間

一、中斷響應中斷響應是CPU對中斷源中斷請求的響應,包括保護斷點和將程序轉向中斷服務程序的入口地址。CPU并不是任何時刻都響應中斷請求,而是在中斷響應條件滿足之后才會響應。CPU響應中斷必須首先滿足以下三個基本條件。

1、中斷源要有中斷請求。2、中斷總允許位EA=1。

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

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

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

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

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

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

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

圖4-11某中斷響應的時序第46頁/共73頁

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

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

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

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

ORG 001BH ;T1中斷入口

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

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

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

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

第50頁/共73頁二、中斷請求的撤除

CPU響應中斷請求后即進入中斷服務程序,在中斷返回前,應撤除該中斷請求,否則會引起另一次中斷。不同中斷源中斷請求的撤除方法是不一樣的。

1、定時器中斷請求的撤除對于定時器0或定時器1溢出中斷,CPU在響應中斷后即由硬件自動清除其中斷標志位TF0或TF1,無需采取其它措施。

2、串行口中斷的撤除對于串行口中斷,在CPU響應中斷后,硬件不能清除中斷請求標志TI和RI,必須在中斷服務程序中由軟件來清除相應的標志。

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

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

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

第51頁/共73頁

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

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

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

4.6.1用定時器作外部中斷源

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

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

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

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

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

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

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

第55頁/共73頁[例9]:設計一個利用擴展4個外中斷的中斷服務。

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

ORG0013H ;外部中斷1入口

AJMPINT1 ;轉向中斷服務程序入口

INT1:PUSHPSW ;保護現(xiàn)場

PUSHACCJNBP1.0,EXT0 ;中斷源查詢并轉相應中斷服務程序

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

POPPSW RETI EXT0:

;中斷源1中斷服務程序

AJMPEXITEXT2:

;中斷源2中斷服務程序

AJMPEXITEXT3:

;中斷源3中斷服務程序

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

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

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

2、設置中斷允許寄存器IE中相應的位,確定各個中斷源是否允許中斷;

3、對多級中斷設置中斷優(yōu)先級寄存器IP中相應的位,確定各中斷源的優(yōu)先級別;

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

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

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

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

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

4、有緊急車輛通過時,按下K3開關使A、B車道均為紅燈,禁行20s。解:設計步驟如下:

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

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

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

3、有緊急車輛通過時,采用外部中斷0執(zhí)行中斷服務程序,并設置該中斷為高優(yōu)先級中斷,實現(xiàn)二級中斷嵌套。第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交通信號燈與控制狀態(tài)的對應關系

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

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

三、軟件設計

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論