版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
會計學(xué)1單片機(jī)定時器應(yīng)用舉例學(xué)習(xí)目的
1、了解80C51定時/計數(shù)器的結(jié)構(gòu)與工作原理;
2、了解中斷的概念和中斷的功能;
3、掌握80C51定時/計數(shù)器工作方式的特點(diǎn)及應(yīng)用;
4、掌握80C51中斷系統(tǒng)結(jié)構(gòu)、處理過程和使用方法。學(xué)習(xí)重點(diǎn)和難點(diǎn)
1、定時器/計數(shù)器的初始化;
2、中斷系統(tǒng)結(jié)構(gòu)、處理過程和使用方法;
3、定時器/計數(shù)器與中斷的綜合應(yīng)用;
4、外部中斷源的擴(kuò)展方法。第1頁/共73頁4.180C51定時器/計數(shù)器
在測量控制系統(tǒng)中,經(jīng)常要求有一些實(shí)時時鐘,以實(shí)現(xiàn)定時控制、定時測量,同時有時也要求對外部事件進(jìn)行計數(shù)等,所以我們經(jīng)常要遇到定時/計數(shù)這樣一些問題。要實(shí)現(xiàn)定時/計數(shù),有3種主要方法:軟件定時、硬件定時和可編程定時/計數(shù)器,本節(jié)介紹80C51可編程定時/計數(shù)器。4.1.1定時/計數(shù)器的結(jié)構(gòu)
定時/計數(shù)器的結(jié)構(gòu)如圖4-1所示。
一、組成:80C51定時/計數(shù)器由定時器0、定時器1、定時器方式寄存器TMOD和定時器控制寄存器TCON四部分組成
二、各部分的功能:
1、定時器0(T0)和定時器1(T1)(1)80C51單片機(jī)內(nèi)部有兩個16位的可編程定時/計數(shù)器,稱為定時器0
(簡稱T0)和定時器1(簡稱T1),可編程選擇其作為定時器用或作為計數(shù)器用。第2頁/共73頁返回第3頁/共73頁
(2)定時器0或定時器1用作計數(shù)器時,對芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計數(shù),每輸入一個脈沖,加法計數(shù)器加1;其用作定時器時,對內(nèi)部機(jī)器周期脈沖計數(shù),由于機(jī)器周期是定值,故計數(shù)值確定時,時間也隨之確定。(3)16位的定時/計數(shù)器分別由兩個8位寄存器組成,即:T0由TH0和TL0構(gòu)成,T1由TH1和TL1構(gòu)成,TL0、TL1、TH0、TH1的訪問地址依次為8AH8DH。每個寄存器均可單獨(dú)訪問,這些寄存器是用于存放定時初值或計數(shù)初值的。2、方式寄存器TMOD和控制寄存器TCONTMOD、TCON與定時器0、定時器1間通過內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)置定時器的工作方式,TCON用于控制定時器的啟動與停止,并保存T0、T1的溢出和中斷標(biāo)志。第4頁/共73頁4.1.280C51定時/計數(shù)器的原理
16位的定時/計數(shù)器實(shí)質(zhì)上是一個加1計數(shù)器,可實(shí)現(xiàn)定時和計數(shù)兩種功能,其功能由軟件設(shè)置和控制。
1、定時/計數(shù)器設(shè)置為定時功能時當(dāng)定時/計數(shù)器設(shè)置為定時工作方式時,計數(shù)器的加1信號由振蕩器的12分頻信號產(chǎn)生,即每過一個機(jī)器周期,計數(shù)器加1,直至計滿溢出。定時器的定時時間與系統(tǒng)的時鐘頻率有關(guān)。因一個機(jī)器周期等于12個時鐘周期,所以計數(shù)頻率fc應(yīng)為系統(tǒng)時鐘頻率fosc的十二分之一,即=fosc。如果單片機(jī)的晶振頻率為12MHz,則計數(shù)周期為1s(即:T==1s)。這是最短的定時周期,通過改變定時器的定時初值,并適當(dāng)選擇定時器的長度(8位、13位或16位),可以調(diào)整定時時間。第5頁/共73頁2、定時/計數(shù)器設(shè)置為計數(shù)功能時
當(dāng)定時/計數(shù)器設(shè)置為計數(shù)工作方式時,計數(shù)器對來自外部輸入引腳T0(P3.4)和T1(P3.5)的信號進(jìn)行計數(shù),外部脈沖的下降沿將觸發(fā)計數(shù)。在每個機(jī)器周期的S5P2期間采樣外部引腳輸入電平,若前一個機(jī)器周期采樣值為1,后一個機(jī)器周期采樣值為0,則計數(shù)器加1。新的計數(shù)值是在檢測到外部輸入引腳電平發(fā)生1到0的負(fù)跳變后,于下一個機(jī)器周期的S3P1期間裝入計數(shù)器中的,可見,檢測一個由1到0的負(fù)跳變需要兩個機(jī)器周期,所以,最高檢測頻率為振蕩頻率的1/24。如果晶振頻率為12MHz,則最高計數(shù)頻率為0.5MHz。雖然對外部輸入信號的占空比無特殊要求,但為了確保給定電平在變化前至少被采樣一次,外部計數(shù)脈沖的高電平與低電平保持時間均需在一個機(jī)器周期以上。第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的作用是設(shè)置T0、T1的工作方式。
TMOD的格式:第7頁/共73頁TMOD的低4位為定時器0的方式字段,高4位為定時器1的方式字段,它們的含義完全相同。各位的功能含義如下:
1、M1、M0:方式選擇位。定義如下:
2、C/T:功能選擇位。當(dāng)C/T=0時,以定時器方式工作;當(dāng)C/T=1時,以計數(shù)器方式工作。M1M0
工作方式
功能說明
00
方式0
13位計數(shù)器
01方式116位計數(shù)器
10方式2自動重裝入初值8位計數(shù)器
11方式3定時器0:分為兩個獨(dú)立的8位計數(shù)器定時器1:停止計數(shù)
第8頁/共73頁3、GATE:門控位當(dāng)GATE=0時,軟件啟動定時器,即用指令使TCON中的TR1(TR0)置1即可啟動定時器1(定時器0)。當(dāng)GATE=1時,軟件和硬件共同啟動定時器,即用指令使TCON中的TR1(TR0)置1時,同時還需要外部中斷(P3.2)或(P3.3)引腳輸入高電平時方可啟動定時器1(定時器0)。
TMOD不能位尋址,只能用字節(jié)指令設(shè)置高4位定義定時器1,低4位定義定時器0定時器工作方式。復(fù)位時TMOD=00H,即所有位均置0。第9頁/共73頁
4.2.2定時/計數(shù)器控制寄存器TCON
定時/計數(shù)器控制寄存器TCON的作用是控制定時器的啟動與停止,并保存T0、T1的溢出和中斷標(biāo)志。TCON中的高4位用于控制定時/計數(shù)器的啟停和中斷請求。各位的功能含義如下:
1、TF1(TCON.7位):定時器1溢出標(biāo)志位。當(dāng)定時器1計滿數(shù)產(chǎn)生溢出時,由硬件自動置TF1=1。在中斷允許時,向CPU發(fā)出定時器1的中斷請求,進(jìn)入中斷服務(wù)程序后,由硬件自動清0。在中斷屏蔽(以查詢方式工作)時,TF1可作溢出查詢測試用(判斷該位是否為1),此時只能由軟件清0。其TCON的格式如下:第10頁/共73頁2、TR1(TCON.6位):定時器1啟??刂莆?。當(dāng)GATE=0時,用指令使TR1置1即啟動定時器1工作,若用指令使TR1清0則停止定時器1工作。當(dāng)GATE=1時,用指令使TR1置1的同時外部中斷(P3.3)的引腳輸入高電平才能啟動定時器1工作。
3、TF0(TCON.5位):定時器0溢出標(biāo)志位。其功能及操作情況同TF1。
4、TR0(TCON.4位):定時器0啟??刂莆?。其功能及操作情況同TR1。
TCON中的低4位用于控制外部中斷,與定時/計數(shù)器無關(guān),將在中斷一節(jié)中詳細(xì)介紹。
5、IE1(TCON.3位):外部中斷1()請求標(biāo)志位。
6、IT1(TCON.2位):外部中斷1()觸發(fā)方式選擇位。
7、IE0(TCON.1位):外部中斷0()請求標(biāo)志位。
8、IT0(TCON.0位):外部中斷0()觸發(fā)方式選擇位。
當(dāng)系統(tǒng)復(fù)位時,TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標(biāo)志位或啟動定時器都可以用位操作指令(如SETBTR1、JBCTF1,LOOP)。第11頁/共73頁4.2.3定時/計數(shù)器的初始化
1.定時/計數(shù)器的初始化步驟
由于定時/計數(shù)器的功能是由軟件編程確定的,所以,一般在使用定時器/計數(shù)前都要對其進(jìn)行初始化。初始化驟如下:
(1)確定定時/計數(shù)器的工作方式,確定方式控制字,并寫入TMOD。
(2)預(yù)置定時初值或計數(shù)初值,根據(jù)定時時間或計數(shù)次數(shù),計算定時初值或計數(shù)初值,并寫入TH0、TL0或TH1、TL1。
(3)根據(jù)需要開啟定時/計數(shù)器的中斷,直接對IE寄存器中的相應(yīng)位(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機(jī)表示機(jī)器周期;計數(shù)初值公式中的計數(shù)值為脈沖個數(shù);在方式3中只討論T0。T0被分為兩個獨(dú)立的8位計數(shù)器TL0和TH0。而TL0可定時亦可計數(shù);而TH0只能用作簡單的內(nèi)部定時,不能用作對外部脈沖進(jìn)行計數(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的高三位無效,可填補(bǔ)0)。所以要裝入1F9CH初值,應(yīng)按照如下方法進(jìn)行。
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ù)器的工作方式及應(yīng)用
通過對方式寄存器TMOD中M0、M1位進(jìn)行設(shè)置,可選擇四種工作方式,即方式0、方式1、方式2和方式3,下面逐一進(jìn)行介紹。4.3.1方式0
方式0構(gòu)成一個13位定時/計數(shù)器,以定時器0為例。圖4-2是方式0的邏輯結(jié)構(gòu),定時器1的結(jié)構(gòu)和操作與定時器0完全相同。
由圖4-2可知,定時/計數(shù)器是由TL0中的低5位和TH0中的高8位組成一個13位加1計數(shù)器(TL0中的高3位不用);若TL0中的第5位有進(jìn)位,直接進(jìn)到TH0中的最低位。而TH0溢出時向中斷位TF0進(jìn)位(硬件自動置位),并申請中斷。圖4-2定時器0在方式0時的邏輯結(jié)構(gòu)圖第16頁/共73頁當(dāng)C/T=0時,多路開關(guān)連接12分頻器輸出,定時器0對機(jī)器周期計數(shù),此時,定時器0為定時器。當(dāng)C/T=1時,多路開關(guān)與T0(P3.4)相連,外部計數(shù)脈沖由T0腳輸入,當(dāng)外部信號電平發(fā)生由0到1的負(fù)跳變時,計數(shù)器加1,此時,定時器0為計數(shù)器。當(dāng)門控位GATE=0時,或門輸出始終為1,與門被打開,與門的輸出電平始終與TR0的電平一致,實(shí)現(xiàn)由TR0控制定時/計數(shù)器的啟動和停止。若軟件使TR0置1,接通控制開關(guān),啟動定時器0,13位加1計數(shù)器在定時初值或計數(shù)初值的基礎(chǔ)上進(jìn)行加1計數(shù);溢出時,13位加1計數(shù)器為0,TF0由硬件自動置1,并申請中斷。如要循環(huán)計數(shù),則定時器0需重置初值,且需用軟件將TF0復(fù)位,可采用重置初值語句和JBC命令。若軟件使TR0清0,關(guān)斷控制開關(guān),停止定時器0,加1計數(shù)器停止計數(shù)。當(dāng)GATE=1時,與門的輸出由的輸入電平和TR0位的狀態(tài)來確定。若TR0=1則與門打開,外部信號電平通過引腳直接開啟或關(guān)斷定時器0,當(dāng)為高電平時,允許計數(shù),否則停止計數(shù);若TR0=0,則與門被封鎖,控制開關(guān)被關(guān)斷,停止計數(shù)。第17頁/共73頁圖4-3定時器0在方式1時的邏輯結(jié)構(gòu)圖4.3.2方式1
定時器工作于方式1時,其邏輯結(jié)構(gòu)圖如圖4-3所示。在方式1下,以定時器0為例,定時/計數(shù)器是由TL0中的8位和TH0中的8位組成一個16位加1計數(shù)器。方式1其結(jié)構(gòu)與操作幾乎完全與方式0相同,最大的區(qū)別是方式1的加1計數(shù)器位數(shù)是16位。
第18頁/共73頁圖4-4定時器0在方式2時的邏輯結(jié)構(gòu)圖4.3.3方式2
定時/計數(shù)器工作于方式2時,其邏輯結(jié)構(gòu)圖如圖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ù)器都復(fù)0,要進(jìn)行新一輪計數(shù)還須重置計數(shù)初值。這不僅導(dǎo)致編程麻煩,而且影響定時時間精度。而方式2具有初值自動裝入功能,避免了這些缺陷,適合用于較高精確的定時信號發(fā)生器。第19頁/共73頁圖4-5定時器0在方式3時的邏輯結(jié)構(gòu)圖4.3.4方式3
1.定時/計數(shù)器0工作于方式3時的結(jié)構(gòu)特點(diǎn)定時/計數(shù)器0工作于方式3時,其邏輯結(jié)構(gòu)圖如圖4-5所示。由圖可知,定時/計數(shù)器0工作于方式3時,定時器0分為兩個獨(dú)立的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的中斷源,其啟動和關(guān)閉僅受TR1置1或清0控制。TH0只能對機(jī)器周期進(jìn)行計數(shù),因此,TH0只能用作簡單的內(nèi)部定時,不能用作對外部脈沖進(jìn)行計數(shù),是定時器0附加的一個8位定時器。第20頁/共73頁2.定時器0在方式3下T1的結(jié)構(gòu)特點(diǎn)
T1不能工作在方式3下,因?yàn)樵赥0工作在方式3下時,T1的控制位TR1、TF1和中斷源被T0的TH0占用。但是T1可工作在方式0、方式1、方式2下,此時,定時器1僅由控制位切換其定時或計數(shù)功能,當(dāng)計數(shù)器計滿溢出時,只能將輸出送往串行口。在這種情況下,定時器1一般用作串行口波特率發(fā)生器或不需要中斷的場合。設(shè)置好T1的工作方式,T1就自動開始計數(shù);因此其啟動和關(guān)閉較為特殊,若要停止計數(shù),只需送入一個設(shè)置定時器1為方式3的方式字即可。定時/計數(shù)器0在方式3下的T1邏輯結(jié)構(gòu),如圖4-6所示。第21頁/共73頁圖4-6定時/計數(shù)器0在方式3下的T1邏輯結(jié)構(gòu)第22頁/共73頁[例3]如圖4-7所示,P1口中接有八個發(fā)光二極管,編程使八個管輪流點(diǎn)亮,每個管亮100ms,采用定時T0方式1,設(shè)晶振為6MHz。分析:利用T0完成100ms的定時,當(dāng)P1口線輸出高電平“1”時,發(fā)光二極管亮,每隔100ms“1”左移一次,采用定時方式1,先計算定時初值:
4.3.5定時/計數(shù)器的編程應(yīng)用定時/計數(shù)器是單片機(jī)應(yīng)用系統(tǒng)中的重要部件,通過下面實(shí)例可以看出,靈活應(yīng)用定時/計數(shù)器可提高編程技巧,減輕CPU的負(fù)擔(dān),簡化外圍電路。仿真鏈接第23頁/共73頁程序如下:
ORG0100HMOVA,#01H;置第一個LED亮
LOOP0:MOVP1,A
MOVTMOD,#01H;T0工作于方式1MOVTH0,#3CH;置定時器初值
MOVTL0,#0B0H;定時100msSETBTR0;啟動T0LOOP1:JBCTF0,LOOP2;100ms到轉(zhuǎn)L002,并清TF0SJMPLOOP1LOOP2:RLASJMPLOOP0
思考:若例3采用定時T1,以上程序怎樣修改。第24頁/共73頁[例4]:用定時器1,方式0實(shí)現(xiàn)1s的延時,fosc=12MHZ。解:因方式0采用13位計數(shù)器,其最大定時時間為:8192×1s=8.192ms,可選擇定時時間為5ms,再循環(huán)200次。則定時器1的初值為:因13位計數(shù)器中TL1的高3位未用,應(yīng)填寫0,TH1占高8位,所以,X的實(shí)際填寫值應(yīng)為:X=0110001100011000B=6318H
即:TH1=63H,TL1=18H,又因采用方式0定時,故TMOD=00H??删幍?s延時子程序如下:
DELAY:MOVR3,#200 ;置5ms計數(shù)循環(huán)初值
MOVTMOD,#00H;設(shè)定時器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設(shè)計程序,晶振頻率6MHz。
解:根據(jù)題意,用定時器1方式1時,被測高電平脈沖從外部中斷INT1(P3.3)引腳輸入,門控位GATE取1,即由軟件和硬件共同啟動定時器;被測脈沖為高電平時,啟動定時器1,開始計數(shù);被測脈沖變?yōu)榈碗娖綍r,停止定時器1,停止計數(shù),計數(shù)值分別存放到片內(nèi)RAM區(qū)40H、41H、42H單元中;計數(shù)值與機(jī)器周期的乘積就是所測脈沖的寬度。用定時器1方式1時,定時器/計數(shù)器方式寄存器TMOD高4位中的M1M0應(yīng)取01,GATE取1;因?yàn)橛枚〞r功能,C/T取0;定時器方式寄存器TMOD低4位取0,所以TMOD應(yīng)為90H。定時初值為00H。定時器以查詢方式工作。第26頁/共73頁參考程序:
ORG0000HLJMPMAINORG0100HMAIN:MOV40H,#00H;數(shù)據(jù)存儲單元清0MOV41H,#00HMOV42H,#00HMOVTMOD,#90H;置定時器1為工作方式1MOVTH1,#00H;定時初值清0MOVTL1,#00HJBP3.3,$;查詢低電平
SETBTR1;準(zhǔn)備啟動定時器1JNBP3.3,$;高電平到,啟動定時器1LP1:JBCTF1,LP2JBP3.3,LP1;低電平到,停止定時器1SJMPLP3LP2:INC40H;存儲區(qū)最高位加1SJMPLP1LP3:CLRTR1;停止定時器1MOV41H,TH1;計數(shù)值高8位放入存儲區(qū)
MOV42H,TL1;計數(shù)值低8位放入存儲區(qū)
LCALLDIS;調(diào)用顯示子程序
SJMPMAIN;重復(fù)循環(huán)
ORG0800HDIS:(略);顯示子程序
END第27頁/共73頁[例6]:試用定時器0,方式2實(shí)現(xiàn)1s的延時,fosc=12MHZ。
解:因方式2是8位計數(shù)器,其最大定時時間為:256×1s=256s,為實(shí)現(xiàn)1s延時,可選擇定時時間為250s,再循環(huán)4000次。定時時間選定后,可確定計數(shù)值為250,則定時器0的初值為:X=M計數(shù)值=256250=6=6H。采用定時器0,方式2工作,因此,TMOD=02H??删幍?s延時子程序如下:
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實(shí)現(xiàn)1s的延時,fosc=12MHZ。
解:根據(jù)題意,定時器0中的TH0只能為定時器,定時時間可設(shè)為250s;TL0設(shè)置為計數(shù)器,計數(shù)值可設(shè)為200。TH0計滿溢出后,用軟件復(fù)位的方法使T0(P3.4)引腳產(chǎn)生負(fù)跳變,TH0每溢出一次,T0引腳便產(chǎn)生一個負(fù)跳變,TL0便計數(shù)一次。TL0計滿溢出時,延時時間應(yīng)為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)生負(fù)跳變
NOP ;負(fù)跳變持續(xù)
NOPSETB P3.4;T0引腳恢復(fù)高電平
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的運(yùn)行方向的。當(dāng)CPU在執(zhí)行程序時,由內(nèi)部或外部的原因引起的隨機(jī)事件要求CPU暫時停止正在執(zhí)行的程序,而轉(zhuǎn)向執(zhí)行一個用于處理該隨機(jī)事件的程序,處理完后又返回被中止的程序斷點(diǎn)處繼續(xù)執(zhí)行,這一過程就稱為中斷。中斷之后所執(zhí)行的相應(yīng)的處理程序通常稱之為中斷服務(wù)或中斷處理子程序,原來正常運(yùn)行的程序稱為主程序。主程序被斷開的位置(或地址)稱為“斷點(diǎn)”。引起中斷的原因,或能發(fā)出中斷申請的來源,稱為“中斷源”。中斷源要求服務(wù)的請求稱為“中斷請求”(或中斷申請)。第31頁/共73頁4.4.2中斷的特點(diǎn)及功能
1、中斷的特點(diǎn)
1)提高CPU的效率中斷可以解決高速的CPU與低速的外設(shè)之間的矛盾,使CPU和外設(shè)并行工作。CPU在啟動外設(shè)工作后繼續(xù)執(zhí)行主程序,同時外設(shè)也在工作。每當(dāng)外設(shè)做完一件事就發(fā)出中斷申請,請求CPU中斷它正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,中斷處理完之后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。這樣,CPU可啟動多個外設(shè)同時工作,大大地提高了CPU的效率。
2)實(shí)時處理在實(shí)時控制系統(tǒng)中,工業(yè)現(xiàn)場的各種參數(shù)和信息都會隨時間而變化。這些外界變量可根據(jù)要求隨時向CPU發(fā)出中斷申請,請求CPU及時處理中斷請求。如果滿足中斷條件,CPU就立刻會響應(yīng),轉(zhuǎn)入中斷處理,從而實(shí)現(xiàn)實(shí)時處理。
3)故障處理控制系統(tǒng)的故障和緊急情況難以預(yù)料的,如掉電、設(shè)備運(yùn)行出錯等,可通過中斷系統(tǒng)由故障源向CPU發(fā)出中斷請求,再由CPU轉(zhuǎn)到相應(yīng)的故障處理程序進(jìn)行處理。第32頁/共73頁2、中斷的功能(1)實(shí)現(xiàn)中斷響應(yīng)和中斷返回當(dāng)CPU收到中斷請求后,CPU要根據(jù)相關(guān)條件(如中斷優(yōu)先級、是否允許中斷)進(jìn)行判斷,決定是否響應(yīng)這個中斷請求。若響應(yīng),則在執(zhí)行完當(dāng)前指令后立刻響應(yīng)這一中斷請求。CPU中斷過程為:第一步將斷點(diǎn)處的PC值(即下一條應(yīng)執(zhí)行指令的地址)壓入堆棧保留下來(這稱為保護(hù)斷點(diǎn),由硬件自動執(zhí)行)。第二步將有關(guān)的寄存器內(nèi)容和標(biāo)志PSW狀態(tài)壓入堆棧保留下來(這稱為保護(hù)現(xiàn)場,由用戶自己編程完成)。第三步執(zhí)行中斷服務(wù)程序。第四步中斷返回,CPU將繼續(xù)執(zhí)行原主程序。中斷返回過程為:首先恢復(fù)原保留寄存器的內(nèi)容和標(biāo)志位的狀態(tài),這稱為恢復(fù)現(xiàn)場,由用戶編程完成。然后,再加返回指令RETI,RETI指令的功能是恢復(fù)PC值,使CPU返回斷點(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)先級。中斷系統(tǒng)中存在著多個中斷源,同一時刻可能會有不止一個中斷源提出中斷請求,因此需要給所有中斷源安排不同的優(yōu)先級別。CPU可通過中斷優(yōu)先級排隊(duì)電路首先響應(yīng)中斷優(yōu)先級高的中斷請求,等到處理完優(yōu)先級高的中斷請求后,再來響應(yīng)優(yōu)先級低的中斷請求。
(3)實(shí)現(xiàn)中斷嵌套當(dāng)CPU響應(yīng)某一中斷時,若有中斷優(yōu)先級更高的中斷源發(fā)出中斷請求,CPU會暫停正在執(zhí)行的中斷服務(wù)程序,并保留這個程序的斷點(diǎn),轉(zhuǎn)向執(zhí)行中斷優(yōu)先級更高的中斷源的中斷服務(wù)程序,等處理完這個高優(yōu)先級的中斷請求后,再返回來繼續(xù)執(zhí)行被暫停的中斷服務(wù)程序。這個過程稱為中斷嵌套。中斷嵌套流程圖如圖4-9所示。
80C51中斷可實(shí)現(xiàn)兩級中斷嵌套。高優(yōu)先級中斷源可中斷正在執(zhí)行的低優(yōu)先級中斷服務(wù)程序,除非執(zhí)行了低優(yōu)先級中斷服務(wù)程序的CPU關(guān)中斷指令。同級或低優(yōu)先級的中斷不能中斷正在執(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個中斷源,2個優(yōu)先級,可實(shí)現(xiàn)二級中斷嵌套,中斷系統(tǒng)結(jié)構(gòu)如圖4-10所示。由圖可知,與中斷有關(guān)的有:①4個寄存器,分別為中斷源寄存器TCON和SCON、中斷允許控制寄存器IE和中斷優(yōu)先級控制寄存器IP;②5個中斷源,分別為外部中斷0請求(INT0)、外部中斷1請求(INT1)、定時器0溢出中斷請求TF0、定時器1溢出中斷請求TF1和串行中斷請求RI或TI。③中斷優(yōu)先級控制寄存器IP和順序查詢邏輯電路,共同決定5個中斷源的排列順序,5個中斷源分別對應(yīng)5個固定的中斷入口地址。
第37頁/共73頁二、80C51的中斷源
80C51有5個中斷源,它們是:1、外部中斷0請求,由80C51的P3.2腳輸入。可由IT0(TCON.0位)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測到P3.2引腳上出現(xiàn)有效的中斷信號時,中斷標(biāo)志IE0(TCON.1位)置1,向CPU申請中斷。中斷服務(wù)程序入口地址為0003H。2、外部中斷1請求,由80C51的P3.3腳輸入。可由IT1(TCON.2位)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測到P3.3引腳上出現(xiàn)有效的中斷信號時,中斷標(biāo)志IE1(TCON.3位)置1,向CPU申請中斷。中斷服務(wù)程序入口地址為0013H。3、TF0:定時器T0溢出中斷請求。當(dāng)定時器T0產(chǎn)生溢出時,定時器T0中斷請求標(biāo)志位(TCON.5位)置1(由硬件自動執(zhí)行),向CPU申請中斷。中斷服務(wù)程序入口地址為000BH。4、TF1:定時器T1溢出中斷請求。當(dāng)定時器T1產(chǎn)生溢出時,定時器T1中斷請求標(biāo)志位(TCON.7位)置1(由硬件自動執(zhí)行),向CPU申請中斷。中斷服務(wù)程序入口地址為001BH5、RI或TI:串行中斷請求。當(dāng)串行口接收完一幀串行數(shù)據(jù)時置位RI(SCON.0位)(由硬件自動執(zhí)行)或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時置位TI(SCON.1位),向CPU申請中斷。中斷服務(wù)程序入口地址為0023H。第38頁/共73頁其中TF1、TR1、TF0和TR0這四位是控制定時器的啟動與停止的,在定時/計數(shù)器一節(jié)中已經(jīng)詳細(xì)討論過,下面只作簡單介紹。
1、TF1(TCON.7位):定時器1溢出標(biāo)志位。定時器1被啟動計數(shù)后,從初值開始做加1計數(shù),計滿溢出后由硬件自動使TF1置1,并申請中斷。此標(biāo)志一直保持到CPU響應(yīng)中斷后,才由硬件自動清0。也可用軟件查詢該標(biāo)志,并由軟件清0。
2、TR1(TCON.6位):定時器1啟??刂莆?。
3、TF0(TCON.5位):定時器0溢出標(biāo)志位。其功能同TF1。
4、TR0(TCON.4位):定時器0啟、??刂莆?。其功能同TR1。
4.4.480C51中斷的控制
一.定時器控制寄存器TCON
定時器控制寄存器TCON的作用是控制定時器的啟動與停止,并保存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時,外部中斷1為電平觸發(fā)方式。在這種方式下,CPU在每個機(jī)器周期的S5P2期間對INT1(P3.3)引腳采樣,若為低電平,則認(rèn)為有中斷申請,硬件自動使IEl標(biāo)志置1;若為高電平,則認(rèn)為無中斷申請或中斷申請已撤除,硬件自動使IEl標(biāo)志清0。在電平觸發(fā)方式中,CPU響應(yīng)中斷后不能由硬件自動使IEl清0,也不能由軟件使IEl清0,所以在中斷返回前必須撤消INT1引腳上的低電平,否則將再次中斷,導(dǎo)致出錯。
當(dāng)ITl=1時,外部中斷1為邊沿觸發(fā)方式。CPU在每個機(jī)器周期的S5P2期間采樣INT1(P3.3)引腳。若在連續(xù)兩個機(jī)器周期采樣到先高電平后低電平,則認(rèn)為有中斷申請,硬件自動使IEl置1,此標(biāo)志一直保持到CPU響應(yīng)中斷時,才由硬件自動清0。在邊沿觸發(fā)方式下,為保證CPU在兩個機(jī)器周期內(nèi)檢測到先高后低的負(fù)跳變,輸入高低電平的持續(xù)時間至少要保持12個時鐘周期。
6、IE1(TCON.3位):外部中斷1(INT1)請求標(biāo)志位。IEl=1表示外部中斷1向CPU申請中斷。當(dāng)CPU響應(yīng)外部中斷1的中斷請求時,由硬件自動使IE1清0(邊沿觸發(fā)方式)。
7、IE0(TCON.1位):外部中斷0(INT0)請求標(biāo)志位。其功能同IE1。
8、IT0(TCON.0位):外部中斷0觸發(fā)方式選擇位。其功能同IT1。
80C51系統(tǒng)復(fù)位后,TCON初值均清0,應(yīng)用時要注意各位的初始狀態(tài)。第40頁/共73頁1、TI(SCON.1位):串行發(fā)送中斷請求標(biāo)志。CPU將一個字節(jié)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,就啟動發(fā)送,每發(fā)送完一個串行幀數(shù)據(jù),硬件自動使TI置1。但CPU響應(yīng)中斷后,硬件并不能自動使TI清0,必須由軟件使TI清0。2、RI(SCON.0位):串行接收中斷請求標(biāo)志。在串行口允許接收時,每接收完一個串行幀數(shù)據(jù),硬件自動使RI置1。但CPU響應(yīng)中斷后,硬件并不能自動使RI清0,必須由軟件使RI清0。80C51系統(tǒng)復(fù)位后,SCON初值均清0,應(yīng)用時要注意各位的初始狀態(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位):定時器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單片機(jī)系統(tǒng)復(fù)位后,IE中各中斷允許位均被清0,即禁止所有中斷。
開中斷過程是:首先開總中斷:SETBEA,然后,開T1中斷:SETBET1,這2條位操作指令也可合并為1條字節(jié)指令:MOV IE,#88H。三.中斷允許寄存器IE80C51單片機(jī)有5個中斷源都是可屏蔽中斷,其中斷系統(tǒng)內(nèi)部設(shè)有一個專用寄存器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單片機(jī)有兩個中斷優(yōu)先級,每個中斷源都可以通過編程確定為高優(yōu)先級中斷或低優(yōu)先級中斷,因此,可實(shí)現(xiàn)二級嵌套。同一優(yōu)先級別中的中斷源可能不止一個,也有中斷優(yōu)先權(quán)排隊(duì)的問題。專用寄存器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)先級中斷。當(dāng)80C51系統(tǒng)復(fù)位后,IP低5位全部清0,所有中斷源均設(shè)定為低優(yōu)先級中斷。如果幾個同一優(yōu)先級的中斷源同時向CPU申請中斷,CPU通過內(nèi)部硬件查詢邏輯,按自然優(yōu)先級順序確定先響應(yīng)哪個中斷請求。自然優(yōu)先級由硬件形成,排列如下:第44頁/共73頁
4.580C51中斷處理過程
中斷處理過程可分為三個階段,即中斷響應(yīng)、中斷處理和中斷返回。不同的計算機(jī)因其中斷系統(tǒng)的硬件結(jié)構(gòu)不同,因此,中斷響應(yīng)的方式也有所不同。這里,僅以80C51單片機(jī)為例進(jìn)行介紹。
4.5.1中斷響應(yīng)與中斷響應(yīng)時間
一、中斷響應(yīng)中斷響應(yīng)是CPU對中斷源中斷請求的響應(yīng),包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。CPU并不是任何時刻都響應(yīng)中斷請求,而是在中斷響應(yīng)條件滿足之后才會響應(yīng)。CPU響應(yīng)中斷必須首先滿足以下三個基本條件。
1、中斷源要有中斷請求。2、中斷總允許位EA=1。
3、中斷源的中斷允許位為1。在滿足以上條件的基礎(chǔ)上,CPU一般會響應(yīng)中斷,但若有下列任何一種情況存在,中斷響應(yīng)都會受到阻斷。
1、CPU正在響應(yīng)同級或高優(yōu)先級的中斷服務(wù)程序。
2、當(dāng)前執(zhí)行的指令尚未執(zhí)行完。
3、正在執(zhí)行指令RET、RETI或任何對專用寄存器IE、IP進(jìn)行讀/寫的指令。
CPU在執(zhí)行完上述指令之后,要再執(zhí)行一條指令,才能響應(yīng)中斷請求。若由于上述條件的阻礙中斷未能得到響應(yīng),當(dāng)條件消失時該中斷標(biāo)志卻已不再有效,那么該中斷將不被響應(yīng)。
第45頁/共73頁二、中斷響應(yīng)時間在控制系統(tǒng)中,為了滿足控制精度和時間要求,我們需要弄清CPU響應(yīng)中斷所需的時間。響應(yīng)中斷的時間分為最短時間(需要三個機(jī)器周期)和最長時間(需要八個機(jī)器周期)。某中斷響應(yīng)的時序如圖4-11所示。1、響應(yīng)中斷的最短時間
80C51的中斷響應(yīng)時間,從標(biāo)志置1到進(jìn)入相應(yīng)的中斷服務(wù),至少需要三個完整的機(jī)器周期。這三個機(jī)器周期的分配是:第一個機(jī)器周期用于查詢中斷標(biāo)志狀態(tài),即M1周期的S5P2前某中斷生效,在S5P2期間其中斷請求被鎖存到相應(yīng)的標(biāo)志位中去;M2恰逢指令的最后一個機(jī)器周期,且該指令不是RETI或訪問IE、IP的指令。第二、三個機(jī)器周期用于保護(hù)斷點(diǎn)、關(guān)CPU中斷和自動執(zhí)行硬件LCALL指令。即M3和M4便可以執(zhí)行硬件LCALL指令,M5周期將進(jìn)入了中斷服務(wù)程序。
圖4-11某中斷響應(yīng)的時序第46頁/共73頁
2、響應(yīng)中斷的最長時間若CPU在執(zhí)行RETI或訪問IE、IP指令的第一個機(jī)器周期中查詢到有某中斷源的中斷請求,若該中斷是開放的,則80C51需要執(zhí)行一條指令才會響應(yīng)這個中斷請求。這種情況下,CPU響應(yīng)中斷需要八個機(jī)器周期,為最長時間,這八個機(jī)器周期的分配是:執(zhí)行RETI或訪問IE、IP指令需要另加一個機(jī)器周期,因?yàn)镃PU需要在這類指令的第一個機(jī)器周期查詢該中斷請求的存在;執(zhí)行RETI或訪問IE、IP指令的下一條指令需要四個機(jī)器周期;響應(yīng)中斷到進(jìn)入該中斷入口地址需要三個機(jī)器周期。
需要說明一點(diǎn):對于二級嵌套中斷,所需要的等待時間取決于正在執(zhí)行的中斷服務(wù)程序的長短,等待時間無法確定。所以,對于沒有嵌套的單級中斷,CPU響應(yīng)中斷的時間為三個~八個機(jī)器周期。4.5.2中斷響應(yīng)過程在滿足中斷響應(yīng)條件后,CPU響應(yīng)中斷,中斷響應(yīng)過程包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。首先,將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1,以屏蔽同級別中斷源的中斷請求。其次,硬件自動生成長調(diào)用指令(LCALL),把斷點(diǎn)地址壓入堆棧保護(hù)(不保護(hù)狀態(tài)寄存器PSW及其它寄存器內(nèi)容),然后將中斷源對應(yīng)的中斷入口地址裝入程序計數(shù)器PC中(由硬件自動執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,并執(zhí)行中斷服務(wù)程序。中斷響應(yīng)過程的前兩步是由中斷系統(tǒng)內(nèi)部自動完成的,而中斷服務(wù)程序則要由用戶編寫程序來完成。
第47頁/共73頁80C51單片機(jī)各中斷源的入口地址(稱為中斷矢量)由硬件事先設(shè)定,分配如下:中斷源中斷入口地址外部中斷00003H定時器T0中斷000BH外部中斷10013H定時器T1中斷001BH串行口中斷0023H
使用時,通常在這些中斷入口地址處存放一條絕對跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序的起始地址上去。例如采用定時器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)場,二是處理中斷源的請求,三是恢復(fù)現(xiàn)場。通常,主程序和中斷服務(wù)程序都會用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器。在執(zhí)行中斷服務(wù)程序時,CPU若用到上述寄存器,就會破壞原先存在這些寄存器中的內(nèi)容,一旦中斷返回,將會造成主程序的混亂。因此,在進(jìn)入中斷服務(wù)程序后,一般要先保護(hù)現(xiàn)場,然后再執(zhí)行中斷處理程序,在中斷返回主程序之前,再恢復(fù)現(xiàn)場。在編寫中斷服務(wù)程序時要注意以下幾點(diǎn):
1、各中斷源的中斷入口地址之間只相隔8個字節(jié),安排不下中斷服務(wù)程序,因此,在中斷入口地址單元通常存放一條無條件轉(zhuǎn)移指令LJMP,可將中斷服務(wù)程序轉(zhuǎn)至存儲器的任何空間。
2、若要求禁止更高優(yōu)先級中斷源的中斷請求,應(yīng)先用軟件關(guān)閉CPU中斷或屏蔽更高級中斷源的中斷,在中斷返回前再開放被關(guān)閉或被屏蔽的中斷。
3、在保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場時,為了不使現(xiàn)場數(shù)據(jù)受到破壞或造成混亂,一般規(guī)定此時CPU不再響應(yīng)新的中斷請求。因此,在編寫中斷服務(wù)程序時,在保護(hù)現(xiàn)場之前要關(guān)中斷,在保護(hù)現(xiàn)場之后再開中斷;在恢復(fù)現(xiàn)場之前關(guān)中斷,在恢復(fù)現(xiàn)場之后再開中斷。第49頁/共73頁4.5.4中斷返回一、中斷返回中斷返回是指中斷服務(wù)完成后,CPU返回到原程序斷開的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來的程序。中斷返回通過執(zhí)行中斷返回指令RETI來實(shí)現(xiàn),該指令的功能是首先將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置0,以開放同級別中斷源的中斷請求;其次,從堆棧區(qū)把斷點(diǎn)地址取出,送回到程序計數(shù)器PC中。因此,不能用RET指令代替RETI指令。綜上所述,中斷處理過程用流程圖表示如圖4-12所示。圖4-12中斷處理過程流程圖
第50頁/共73頁二、中斷請求的撤除
CPU響應(yīng)中斷請求后即進(jìn)入中斷服務(wù)程序,在中斷返回前,應(yīng)撤除該中斷請求,否則會引起另一次中斷。不同中斷源中斷請求的撤除方法是不一樣的。
1、定時器中斷請求的撤除對于定時器0或定時器1溢出中斷,CPU在響應(yīng)中斷后即由硬件自動清除其中斷標(biāo)志位TF0或TF1,無需采取其它措施。
2、串行口中斷的撤除對于串行口中斷,在CPU響應(yīng)中斷后,硬件不能清除中斷請求標(biāo)志TI和RI,必須在中斷服務(wù)程序中由軟件來清除相應(yīng)的標(biāo)志。
3、外部中斷的撤除外部中斷分為邊沿觸發(fā)和電平觸發(fā)兩種方式。
1)對于邊沿觸發(fā)的外部中斷0(INT0)或1(INT1),CPU在響應(yīng)中斷后由硬件自動清除其中斷標(biāo)志位IE0或IE1,無需采取其它措施。
2)對于電平觸發(fā)的外部中斷0(INT0)或1(INT1),其中斷請求撤除方法較復(fù)雜。因?yàn)?,CPU響應(yīng)中斷后,硬件會自動清除中斷請求標(biāo)志IE0或IEl,但由于加到或引腳的外部中斷請求信號并未撤除,中斷請求標(biāo)志IE0或IEl會再次被置1,所以在CPU響應(yīng)中斷后應(yīng)立即撤除或引腳上的低電平。一般采用加一個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端接地,當(dāng)外部中斷請求的正脈沖信號出現(xiàn)在CP端時,Q端輸出為0,INT0或INT1為低,外部中斷向80C51發(fā)出中斷請求。在中斷服務(wù)程序中開始的三條指令可先在P1.0輸出一個寬度為2個機(jī)器周期的負(fù)脈沖,使D觸發(fā)器的Q端置1,然后由軟件來清除中斷請求標(biāo)志IE0或IEl。第52頁/共73頁4.680C51外部中斷擴(kuò)展與中斷系統(tǒng)的應(yīng)用
80C51單片機(jī)只有兩個外部中斷請求輸入端和,在實(shí)際應(yīng)用中,若外部中斷源超過兩個,就不夠用了,因此需擴(kuò)充外部中斷源,這里介紹兩種簡單的方法,定時器擴(kuò)展法和中斷加查詢擴(kuò)展法。定時器擴(kuò)展法用于外部中斷源個數(shù)不太多并且定時器有空余的場合。中斷加查詢擴(kuò)展法用于外部中斷源個數(shù)較多的場合,但因查詢時間較長,在實(shí)時控制中要注意能否滿足實(shí)時控制要求。
4.6.1用定時器作外部中斷源
80C51單片機(jī)有兩個定時器,具有兩個內(nèi)中斷標(biāo)志和外計數(shù)引腳,如在某些應(yīng)用中不被使用,則它們的中斷可作為外部中斷請求使用。此時,可將定時器設(shè)置成計數(shù)方式,計數(shù)初值可設(shè)為滿量程,通過外部輸入端T0(P3.4)或T1(P3.5)上發(fā)生負(fù)跳變時,計數(shù)器加1便產(chǎn)生溢出,向CPU發(fā)出中斷請求。利用此特性,可把T0腳或T1腳作為外部中斷請求輸入線,而計數(shù)器的溢出中斷作為外部中斷請求標(biāo)志。
第53頁/共73頁[例8]將定時器T1擴(kuò)展為外部中斷源。
解:將定時器T1設(shè)定為方式2(自動恢復(fù)計數(shù)初值),TL1和TH1的初值均設(shè)置為FFH,允許T1中斷,CPU開放中斷,源程序如下:
MOVTMOD,#60H MOVTH1,#0FFH MOVTL1,#0FFH SETBTR1 SETBET1 SETBEA
當(dāng)T1(P3.5)引腳的外部中斷請求輸入線發(fā)生負(fù)跳變時,TL1加1溢出使TF1置1,向CPU發(fā)出中斷申請,同時,TH1的內(nèi)容又自動送給TL1使TL1恢復(fù)初值。這樣,T1引腳每輸入一個負(fù)跳變,TF1都會置1,向CPU請求中斷,此時,T1腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。同理,也可使定時器T0擴(kuò)展為外部中斷源。第54頁/共73頁圖4-14利用擴(kuò)展成多個中斷源的原理圖4.6.2中斷和查詢相結(jié)合對多個外部中斷源,可采用一個外中斷或,利用中斷和查詢相結(jié)合的方法來解決多個外部中斷源的響應(yīng)問題。電路原理圖如圖4-14所示。
由圖可知,4個外部擴(kuò)展中斷源通過4個OC非門電路組成或非后再與(P3.3)相連,4個外部擴(kuò)展中斷源1
中斷源4中有一個或幾個出現(xiàn)高電平時則輸出為0,使腳為低電平,從而發(fā)出中斷請求。在中斷服務(wù)程序中,依次查詢P1.0~P1.3口的中斷源輸入狀態(tài),就可以確定究竟是哪個中斷源提出中斷請求。然后,轉(zhuǎn)入到相應(yīng)的中斷服務(wù)程序,4個擴(kuò)展中斷源的優(yōu)先級順序由軟件查詢順序決定,即最先查詢的優(yōu)先級最高,最后查詢的優(yōu)先級最低。
第55頁/共73頁[例9]:設(shè)計一個利用擴(kuò)展4個外中斷的中斷服務(wù)。
解:根據(jù)圖4-14所示,編程如下:
ORG0013H ;外部中斷1入口
AJMPINT1 ;轉(zhuǎn)向中斷服務(wù)程序入口
INT1:PUSHPSW ;保護(hù)現(xiàn)場
PUSHACCJNBP1.0,EXT0 ;中斷源查詢并轉(zhuǎn)相應(yīng)中斷服務(wù)程序
JNBP1.1,EXT1 JNBP1.2,EXT2 JNBP1.3,EXT3EXIT:POPACC ;恢復(fù)現(xiàn)場
POPPSW RETI EXT0:
;中斷源1中斷服務(wù)程序
AJMPEXITEXT2:
;中斷源2中斷服務(wù)程序
AJMPEXITEXT3:
;中斷源3中斷服務(wù)程序
AJMPEXIT思考題:設(shè)計一個利用外部中斷0(INT0)擴(kuò)展5個中斷源的電路原理圖和程序。
仿真鏈接第56頁/共73頁4.6.3中斷系統(tǒng)的應(yīng)用中斷系統(tǒng)的初始化實(shí)質(zhì)上是針對4個與中斷有關(guān)的特殊功能寄存器TCON、SCON、IE和IP進(jìn)行控制和管理,具體步驟如下:
1、開CPU中斷總開關(guān)(EA);
2、設(shè)置中斷允許寄存器IE中相應(yīng)的位,確定各個中斷源是否允許中斷;
3、對多級中斷設(shè)置中斷優(yōu)先級寄存器IP中相應(yīng)的位,確定各中斷源的優(yōu)先級別;
4、設(shè)置定時器控制寄存器TCON中相應(yīng)的位,確定外部中斷是邊沿觸發(fā)還是電平觸發(fā)的觸發(fā)方式。第57頁/共73頁
[例10]:用89S51單片機(jī)控制一個交通信號燈系統(tǒng),晶振采用12MHz。設(shè)設(shè)A車道與B車道交叉組成十字路口,A是主道,B是支道。設(shè)計要求如下:
1、用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號;
2、正常情況下,A、B兩車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。
3、在交通繁忙時,交通信號燈控制系統(tǒng)應(yīng)有手控開關(guān),可人為地改變信號燈的狀態(tài),以緩解交通擁擠狀況。在B車道放行期間,若A車道有車而B車道無車,按下開關(guān)K1使A車道放行15s;在A車道放行期間,若B車道有車而A車道無車,按下開關(guān)K2使B車道放行15s。
4、有緊急車輛通過時,按下K3開關(guān)使A、B車道均為紅燈,禁行20s。解:設(shè)計步驟如下:
一、總體設(shè)計思想根據(jù)設(shè)計要求,制定總體設(shè)計思想如下:
1、正常情況下運(yùn)行主程序,采用0.5秒延時子程序的反復(fù)調(diào)用來實(shí)現(xiàn)各種定時時間;
2、一道有車而另一道無車時,采用外部中斷1執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為低優(yōu)先級中斷;
3、有緊急車輛通過時,采用外部中斷0執(zhí)行中斷服務(wù)程序,并設(shè)置該中斷為高優(yōu)先級中斷,實(shí)現(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)的對應(yīng)關(guān)系
二、硬件設(shè)計用12只發(fā)光二極管模擬交通信號燈,以89S51單片機(jī)的P1口控制這12只發(fā)光二極管,由于單片機(jī)帶負(fù)載能力有限,因此,在P1口與發(fā)光二極管之間用74LS07作驅(qū)動電路,P1口輸出低電平時,信號燈亮;輸出高電平時,信號燈滅。在正常情況和交通繁忙時,A、B兩車道的六只信號燈的控制狀態(tài)有五種形式,即P1口控制功能及相應(yīng)控制碼如表4-2所示。第59頁/共73頁
分別以按鍵K1、K2模擬A、B道的車輛檢測信號,開關(guān)K1按下時,B車道放行;開關(guān)K2按下時,A車道放行;開關(guān)K1和K2的控制信號經(jīng)異或取反后,產(chǎn)生中斷請求信號(低電平有效),通過外部中斷1向CPU發(fā)出中斷請求;因此產(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為高電平時屬正常情況,當(dāng)K0為低電平時,屬緊急車輛通過的情況,直接將K0信號接至(P3.2)腳即可實(shí)現(xiàn)外部中斷0中斷。綜上所述,可設(shè)計出硬件電路如圖4-15。第60頁/共73頁圖4-15交通燈模擬控制電路圖仿真鏈接第61頁/共73頁
三、軟件設(shè)計
1、主程序采用查詢方式定時,由R2寄存器確定調(diào)用0.5秒延時子程序的次數(shù),從而獲取交通燈的各種時間。子程序采用定時器1方式1查詢式定時,定時器定時50ms,R3寄存器確定50ms循環(huán)10次,從而獲取0.5秒的延時時間。有車車道放行中
2、有車車道放行的中斷服務(wù)程序首先要保護(hù)現(xiàn)場,因需用到延時子程序和P1口,故需保護(hù)的寄存器有R3、P1、TH1和TL1,保護(hù)現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣西交通職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考題庫含詳細(xì)答案解析
- 2026年濰坊護(hù)理職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題含詳細(xì)答案解析
- 2026年蘭州科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題及答案詳細(xì)解析
- 2026四川內(nèi)江市市中區(qū)龍門鎮(zhèn)中心敬老院招聘聘用人員1人考試參考試題及答案解析
- 2026年哈爾濱北方航空職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試參考題庫含詳細(xì)答案解析
- 2026年濰坊工程職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫含詳細(xì)答案解析
- 2026年黔南民族幼兒師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試備考試題及答案詳細(xì)解析
- 2026年集美大學(xué)誠毅學(xué)院單招綜合素質(zhì)筆試模擬試題含詳細(xì)答案解析
- 2026年珠海城市職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫含詳細(xì)答案解析
- 2026年吉林科技職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 高血壓教學(xué)查房復(fù)習(xí)過程教案(2025-2026學(xué)年)
- 建設(shè)工程消防施工質(zhì)量通病及整改示例
- 感控PDCA持續(xù)質(zhì)量改進(jìn)
- 混凝土行業(yè)供應(yīng)鏈分析報告
- 2025年云服務(wù)器采購合同協(xié)議
- 2025滬科版(五四制)八年級化學(xué)主題一化學(xué)的魅力知識清單
- 補(bǔ)氣血培訓(xùn)課件
- 基層高血壓管理流程
- 測試工程師年終總結(jié)
- 市域社會治理現(xiàn)代化
- 2025年江蘇電子信息單招試題及答案
評論
0/150
提交評論