第五章 MCS-51-定時計(jì)數(shù)器_第1頁
第五章 MCS-51-定時計(jì)數(shù)器_第2頁
第五章 MCS-51-定時計(jì)數(shù)器_第3頁
第五章 MCS-51-定時計(jì)數(shù)器_第4頁
第五章 MCS-51-定時計(jì)數(shù)器_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章MCS-51定時/計(jì)數(shù)器、串行口及中斷系統(tǒng)

本章重點(diǎn)討論:

1.定時/計(jì)數(shù)器;

2.全雙工串行口;3.中斷系統(tǒng)。5.1MCS-51定時/計(jì)數(shù)器5.1.1定時器/計(jì)數(shù)器的基本概念5.1.2MCS-51定時/計(jì)數(shù)器的組成5.1.3定時器/計(jì)數(shù)器的控制方法5.1.4定時器、計(jì)數(shù)器的初始化5.1.5舉例5.1.6定時計(jì)數(shù)器總結(jié)計(jì)數(shù)概念的引入1生活中計(jì)數(shù)的例子處處可見。例:錄音機(jī)上的計(jì)數(shù)器、家里面用的電度表、汽車上的里程表等等。再舉一個工業(yè)生產(chǎn)中的例子,線纜行業(yè)在電線生產(chǎn)出來之后要計(jì)米,也就是測量長度,怎么測法呢?用尺量?不現(xiàn)實(shí),太長不說,要一邊做一邊量呢,怎么辦呢?行業(yè)中有很巧妙的方法,用一個周長是1米的輪子,將電纜繞在上面一周,由線帶輪轉(zhuǎn),這樣輪轉(zhuǎn)一周不就是線長1米嘛,所以只要記下輪轉(zhuǎn)了多少圈,就可以知道走過的線有多長了。計(jì)數(shù)概念的引入2石油工業(yè)中,也有大量計(jì)數(shù)的問題。比如如何確定油層的深度?通常采用的方法是在裸眼井完鉆測井以后,需要下金屬套管固井,每一根套管的長度是一樣的,比如10米,在每根套管的接箍處都打上磁標(biāo)記。下完套管就要用水泥固井,然后套管就被永久埋在地下。為了產(chǎn)出石油,下一步就是在測井以后確定的層位處射孔。這時在射孔槍的上面就通過電纜接了一根磁定位儀器,這個儀器可以測量到套管接箍上的磁標(biāo)記,并且可以計(jì)量磁標(biāo)記的數(shù)目,因此就可以確定射孔槍的目標(biāo)油層的深度。當(dāng)然10m以內(nèi)的深度是靠地面測量電纜長度確定的。計(jì)數(shù)器的容量1從一個生活中的例子看起:一個水盆在水龍頭下,水龍沒關(guān)緊,水一滴滴地滴入盆中。水滴不斷落下,盆的容量是有限的,過一段時間之后,水就會逐漸變滿。那么單片機(jī)中的計(jì)數(shù)器有多大的容量呢?8031單片機(jī)中有兩個計(jì)數(shù)器,分別稱之為T0和T1,這兩個計(jì)數(shù)器分別是由兩個8位的RAM單元組成的,即每個計(jì)數(shù)器都是16位的計(jì)數(shù)器,最大的計(jì)數(shù)量是65535。計(jì)數(shù)器的容量2一般的下井電纜長度在7000m,根據(jù)井眼長度的不同還有更長或更短的電纜,可以依據(jù)需要選取。因此,計(jì)數(shù)器的容量就是由電纜長度決定的。計(jì)數(shù)與定時的關(guān)系8031中的計(jì)數(shù)器除了可以作為計(jì)數(shù)之用外,還可以用作時鐘,時鐘的用途當(dāng)然很大,如學(xué)校的打鈴器,電視機(jī)定時關(guān)機(jī),空調(diào)定時開關(guān)等等,那么計(jì)數(shù)器是如何作為定時器來用的呢?一個鬧鐘,將它定時在1個小時后鬧響,換言之,也可以說是秒針走了(3600)次后鬧響,所以時間就轉(zhuǎn)化為秒針走的次數(shù),也就是計(jì)數(shù)的次數(shù)了??梢姡?jì)數(shù)的次數(shù)和時間之間的確十分相關(guān)。那么它們的關(guān)系是什么呢?那就是秒針每一次走動的時間正好是1秒。因此只要計(jì)數(shù)脈沖的間隔相等,計(jì)數(shù)脈沖的周期已知,則計(jì)數(shù)值就代表了時間的流逝。溢出讓我們再來看水滴的例子,當(dāng)水不斷落下,盆中的水不斷變滿,最終有一滴水使得盆中的水滿了。這時如果再有一滴水落下,就會發(fā)生什么現(xiàn)象?水會漫出來,用個術(shù)語來講就是“溢出”。水溢出是流到地上,而計(jì)數(shù)器溢出后將使得TF0變?yōu)椤?”。至于TF0是什么我們稍后再談。一旦TF0由0變成1,就是產(chǎn)生了變化,產(chǎn)生了變化就會引發(fā)事件,就象定時的時間一到,鬧鐘就會響一樣。溢出2

如果電纜的最大長度為7000m,那么磁標(biāo)記計(jì)數(shù)器計(jì)滿700以后,就要產(chǎn)生一個溢出信號,這個溢出信號意味著電纜已經(jīng)放到頭了,需要地面的纜車立即停止工作,否則可能造成射孔槍落井的事故。計(jì)數(shù)器溢出后會引發(fā)什么事件,我們下面再介紹,現(xiàn)在我們來研究另一個問題:要有多少個計(jì)數(shù)脈沖才會使TF0由0變?yōu)??任意定時及計(jì)數(shù)的方法剛才已研究過,MCS-51計(jì)數(shù)器的容量是16位,也就是最大的計(jì)數(shù)值到65536,因此計(jì)數(shù)計(jì)到65536就會產(chǎn)生溢出。問題是在現(xiàn)實(shí)生活中,經(jīng)常會有少于65536個計(jì)數(shù)值的要求,如包裝線上,一打?yàn)?2瓶,一瓶藥片為100粒,怎么樣來滿足這個要求呢?提示:如果是一個空的盆要10000滴水滴進(jìn)去才會滿,如果在開始滴水之前就先放入一勺水,還需要10000滴嗎?我們采用預(yù)置數(shù)的方法,要計(jì)數(shù)100次,那就先放進(jìn)65436,再來100個脈沖,不就到了65536了嗎。定時也是如此,每個脈沖是1微秒,則計(jì)滿65536個脈沖需時65.536毫秒。如果現(xiàn)在只要10毫秒定時怎么辦?10個毫秒為10000個微秒,所以,只要在計(jì)數(shù)器里面放進(jìn)65536-10000=55536就可以了。5.1.2MCS-51定時/計(jì)數(shù)器的組成T1與定時/計(jì)數(shù)器相關(guān)的特殊功能寄存器

特殊功能寄存器:

TH0TH1存放計(jì)數(shù)初值的高8位

TL0TL1存放計(jì)數(shù)初值的低8位

TMOD(定時器工作模式寄存器)TCON(定時器控制寄存器)

T0和T1都是16位的可預(yù)置加1計(jì)數(shù)器

T0和T1都是16位的可編程定時/計(jì)數(shù)器

T0由兩個8位的寄存器TH0和TL0組成

T1由兩個8位的寄存器TH1和TL1組成5.1.3定時器/計(jì)數(shù)器的控制方法

定時器/計(jì)數(shù)器的工作由TCON和TMOD控制。由軟件把控制字寫入TCON和TMOD,用來設(shè)置T0和T1的工作方式和控制功能。當(dāng)8051系統(tǒng)復(fù)位時,TCON和TMOD所有位都被清0。一.工作模式控制寄存器—TMOD(89H)定時器工作模式寄存器TMODGATEC/TM10MGATEC/T1M0M控制T1控制T089H和T類同01M0M00011011方式方式0方式1方式2方式301定時器模式計(jì)數(shù)器模式01與INT無關(guān)00與INT有關(guān)二.定時器控制寄存器—TCON(88H)

定時器工作模式寄存器TCON

M1和M0工作方式選擇位這兩位可形成四種編碼,對應(yīng)四種工作方式:

M1M0方式功能描述

000為13位定時器/計(jì)數(shù)器,TL存放低5位,TH存高8位

011為16位定時器/計(jì)數(shù)器

102可自動再裝入的8位定時器/計(jì)數(shù)器

113僅適于T0,兩個8位定時器/計(jì)數(shù)器三.定時器/計(jì)數(shù)器的四種工作模式方式0

高8位和低5位的一個13位計(jì)數(shù)器的運(yùn)行方式,見下圖.

當(dāng)TL1的低5位溢出時,向TH1進(jìn)位,而TH1溢出(回零)時向TF1標(biāo)志進(jìn)位(硬件置位TF1),并申請中斷。還可以通過查詢TF1是否置位來判斷TH1是否回零溢出。啟動控制

B=TR1A=TR1(INT1+/GATE)

GATETRxINTx啟動情況

00X停止

01X啟動定時/計(jì)數(shù)

10X停止

11啟動定時/計(jì)數(shù)

11停止

其中:1表示高電平,0表示低電平,X表示任意狀態(tài)

方式1

方式1是一個16位定時器/計(jì)數(shù)器,見下圖。方式1的結(jié)構(gòu)幾乎與方式0完全一樣,唯一的差別是:方式1中的TH1(TH0)和TL1(TL0)均是8位的,構(gòu)成16位計(jì)數(shù)器。

方式2

在方式2時,T/C被拆成一個8位的寄存器TH1(TH0)和一個8位計(jì)數(shù)器TL1(TL0),兩者構(gòu)成可以自動重裝載的8位T/C,如圖所示。

每當(dāng)它計(jì)滿回零時1.將溢出標(biāo)志TF1置“1”,若中斷開放,向CPU發(fā)出溢出中斷請求;2.從TH1(或TH0)中重新獲得初值并啟動計(jì)數(shù);

也就是CPU自動將TH1(或TH0)中存放的初值重新裝回到TL1(或TL0),并在此初值的基礎(chǔ)上對TL1(或TL0)開始新一輪計(jì)數(shù),周而復(fù)始,直到下停止計(jì)數(shù)或更改工作方式命令為止。

方式3方式3只適合于定時器T0,

TH0和TL0按兩個獨(dú)立的8位計(jì)數(shù)器工作.5.1.4定時器、計(jì)數(shù)器的初始化1.初始化的步驟

MCS-51內(nèi)部的T/C是可編程的,其工作方式和模式通過程序進(jìn)行設(shè)定和控制,稱為對T/C的初始化。初始化的步驟是:

1)

確定工作方式,即根據(jù)題目要求先給TMOD送一個方式控制字。

2)計(jì)算計(jì)數(shù)初值/定時初值,并寫入TH0、TL0或TH1、TL1中。

3)根據(jù)需要,置位EA使CPU開放中斷,同時置位ETx允許T/C中斷。IP設(shè)定中斷優(yōu)先級。

4)給TCON送命令控制字,即置位TRx啟動T/C計(jì)數(shù)。

2.計(jì)數(shù)器初值的計(jì)算

T/C在計(jì)數(shù)模式下,計(jì)數(shù)之前必須給它的計(jì)數(shù)器TH0、TL0或TH1、TL1選送計(jì)數(shù)初值。T/C的計(jì)數(shù)器是在計(jì)數(shù)初值的基礎(chǔ)上加1計(jì)數(shù)的,當(dāng)計(jì)數(shù)器回“0”時自動產(chǎn)生溢出,置位TFx中斷標(biāo)志,向CPU提出中斷請求。設(shè)需要計(jì)數(shù)器計(jì)數(shù)的個數(shù)為X,計(jì)數(shù)初值為C,由此可得出如下計(jì)算計(jì)數(shù)初值的通式:計(jì)數(shù)初值:C=M-X(5—1)式中,M為計(jì)數(shù)器的模值,該值和計(jì)數(shù)器的工作方式有關(guān)。當(dāng)方式0時

M=當(dāng)方式1時(5—2)當(dāng)方式2、3時[例5-1]利用T0方式1產(chǎn)生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHZ。解:

(1)確定T0的工作方式要在P1.0輸出周期為2ms的方波,只要使P1.0每隔1ms 取反一次即可。

(2)確定T0的方式控制字若用方式1,設(shè)置TMOD=01H(3)計(jì)算定時初值

Tcy=12/fosc=12/(12×106

)S=1μs

計(jì)數(shù)個數(shù):X=1ms/1μs=1000

定時初值:若采用方式0,13位,則

C=(-X)=8192-1000=7192D

=1C18H=1110000011000B

高8位0E0H低5位18HTH0初值為0E0H,TL0初值為18H。若采用方式1,16位,則定時初值:C=65536-1000=64536=FC18HTH0初值為0FCH,TL0初值為18H

ORG 0000H SJMP 0030H ORG 0030H MOV TMOD,#01H SETB TR0LOOP:MOVTH0,#0FCH MOV TL0,#18H JNB TF0,$ CPL P1.0 CLR TF0 SJMP LOOP END查詢方式START設(shè)定工作方式啟動T0定時載入初值TF0=0?否是輸出方波軟件TF0=0END4)

查詢方式:可以使CPU采用查詢TF0的方式處理T/C0定時溢出,編程簡單,但效率較低。程序中查詢采用JNBTF0,$指令,目的是當(dāng)判到TF1=1后,必須用軟件復(fù)位TF1,為下次計(jì)數(shù)器回零溢出做好準(zhǔn)備,這條指令具有判TF1為1后清零的雙重功能。[例5-2]利用GATE門控位測量從INT1引腳輸入的正脈沖寬度。解:1.確定工作方式

(1)送方式控制字

(TMOD)=10010000B=90H;

T/C1定時,方式1,GATE=1。(2)計(jì)算初值

由于被測正脈沖寬度未知,假設(shè)寬度<=65.536ms,fosc=12MHz,則:計(jì)數(shù)個數(shù):X=65536(最大)定時初值:C=65536-X=65536-65536=0,(TH1)=00H,(TL1)=00H。

(3)編程方法

對P3.3(INT1)引腳輸入的脈沖采用查詢的方法。

P3.3

(INT1)

被測脈寬置1TR1 TH1TL1從0開始計(jì)數(shù)清0TR1,停止T/C1計(jì)數(shù)脈沖測試原理

ORG0000H

SJMP0030HORG0030HMAIN:MOVTMOD,#90H ;置T1方式控制字

MOVTL1,#00H ;

MOVTH1,#00H ;T1從0開始計(jì)數(shù)

JBP3.3,$

;等低電平

SETBTR1 ;T1允許計(jì)數(shù)

JNBP3.3,$

;等高電平

JBP3.3,$

;等低電平

CLRTR1 ;停止計(jì)數(shù)

程序清單:

5.1.6定時計(jì)數(shù)器總結(jié)在單片機(jī)實(shí)時應(yīng)用系統(tǒng)中,實(shí)現(xiàn)定時和對外部事件計(jì)數(shù)的功能。

定時:對周期已知的脈沖信號計(jì)數(shù)

計(jì)數(shù):對外部事件計(jì)數(shù),對周期未知的外來脈沖信號計(jì)數(shù)

采用軟件占用CPU的時間,降低了CPU的使用效率;

采用專門的硬件電路,參數(shù)調(diào)節(jié)不便;

采用可編程的定時器/計(jì)數(shù)器是較好的方法;

可以方便靈活地修改定時或計(jì)數(shù)的參數(shù)或方式;

與CPU并行工作,大大提高了CPU的工作效率

5.2MCS-51串行口5.2.1串行口概述

8051的通訊:即單片機(jī)與外界進(jìn)行信息交換。通訊方式:

并行通訊:數(shù)據(jù)的各位同時發(fā)送或接受

串行通訊:數(shù)據(jù)一位一位順序發(fā)送或接受

串行口通訊方式

單工通訊:通訊接口只能發(fā)送或接受的單向通訊方式

半雙工通訊:通訊接口既可發(fā)送又可接受,但不能同 時進(jìn)行

全雙工通訊:通訊接口能同時發(fā)送接受的通訊方式異步傳送方式與同步傳送

異步通訊:利用起始位表示字符的開始,用停止位 表示字符結(jié)束D0D1D2D3D4D5D6D7D010P0起始位數(shù)據(jù)位D0~D7校驗(yàn)位結(jié)束位第n個字符(幀)2.

同步通訊:在異步通訊中,每個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了時間;所以在數(shù)據(jù)塊傳遞時,為了提高速度,常去掉這些標(biāo)志,采用同步傳送。由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時要求由時鐘來實(shí)現(xiàn)發(fā)送端與接收端之間的同步,故硬件較復(fù)雜。串行通信的數(shù)據(jù)傳送率

傳送率:數(shù)據(jù)傳送速度

波特率(baudrate):異步通信中數(shù)據(jù)傳輸速率的單 位,其含義每秒傳送多少位二進(jìn)制數(shù)。例:數(shù)據(jù)傳送的速率為120個字符每秒,每個字符有1個起始位、8個數(shù)據(jù)位和一個停止位組成,則其傳送波特率為:

每一位的傳送時間為波特率的倒數(shù):5.2.2MCS-51串行口結(jié)構(gòu)發(fā)送控制器發(fā)送SBUF(99H)接受SBUF(99H)門接受控制器+串行口中斷串行控制寄存器(98H)輸入移位寄存器定時器T1內(nèi)部總線TIRITXD(P3.1)RXD(P3.0)888物理空間上各自獨(dú)立的發(fā)送寄存器和接收寄存器,有相同名字和地址空間,但不會出現(xiàn)沖突,因?yàn)榘l(fā)送寄存器只寫不讀,接受寄存器只讀不寫。串行口控制寄存器SCOND7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0SM1:串行口方式選擇位SM0SM1方式

功能說明0008位同步移位寄存器方式(用于I/O擴(kuò)展)01110位UART,波特率可變(T1溢出率/n)10211位UART,波特率fosc/64或fosc/3211311位UART,波特率可變(T1溢出率/n)SM2:允許方式2和方式3多機(jī)通訊位REN:接收允許控制位。由軟件置位以允許接收,又由軟件清 0來禁止接收。TB8:

是要發(fā)送數(shù)據(jù)的第9位。在方式2或方式3中,要發(fā)送的第 9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。例如,可約定作為 奇偶校驗(yàn)位,或在多機(jī)通訊中作為區(qū)別地址幀或數(shù)據(jù)幀 的標(biāo)志位。RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1 中,若(SM2)=0,RB8為接收到的停止位。在方式2或 方,式3中,RB8為接收到的第9位數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時,由硬件 置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置 位既表示一幀信息發(fā)送結(jié)束,同時也是申請中斷,也可 用軟件查詢的方法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中 斷的方式來發(fā)送下一個數(shù)據(jù)。TI必須用軟件清0。RI:

接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由 硬件置位。在其它方式中,在接收到停止位的中間時 刻由硬件置位(例外情況見于SM2的說明)。RI置位 表示一幀數(shù)據(jù)接收完畢,可用查詢的方法獲知或者用 中斷的方法獲知。RI也必須用軟件清0。特殊功能寄存器PCON:是為了在CHMOS的80C51單片機(jī)上實(shí)現(xiàn)電源控制而附加的。其中最高位是SMOD。5.2.3串行口工作方式一、方式0

方式0為移位寄存器輸入/輸出方式??赏饨右莆患拇嫫饕詳U(kuò)展I/O口,也可以外接同步輸入/輸出設(shè)備。8位串行數(shù)據(jù)者是從RXD(P3.0)輸入或輸出,TXD(P3.1)用來輸出同步脈沖。

1、方式0發(fā)送串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器時,立即啟動發(fā)送,將8位數(shù)據(jù)以fosc/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位。2、方式0接收當(dāng)串行口以方式0接收時,先置位允許接收控制位REN。此時,RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI)=0和(REN)=1同時滿足時,開始接收。當(dāng)接收到第8位數(shù)據(jù)時,將數(shù)據(jù)移入接收寄存器,并由硬件置位RI。二、方式1

方式1為波特率可變的10位異步通訊接口方式。發(fā)送或接收一幀信息,包括1個起始位0,8個數(shù)據(jù)位和1個停止位1。1.

方式1發(fā)送

當(dāng)CPU執(zhí)行一條指令將數(shù)據(jù)寫入發(fā)送緩沖SBUF時,就啟動發(fā)送。串行數(shù)據(jù)從TXD引腳輸出,發(fā)送完一幀數(shù)據(jù)后,就由硬件置位TI。2.

方式1接受

在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至0的跳變時,確認(rèn)是開始位0,就開始接收一幀數(shù)據(jù)。只有當(dāng)(RI)=0且停止位為1或者(SM2)=0時,停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時,應(yīng)先用軟件清零RI和SM2標(biāo)志。

在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。

方式0和方式2的波特率:

在方式0,每個及其周期發(fā)送或接受一位數(shù)據(jù),波特率的數(shù)值固定為時鐘頻率(fosc)的1/12,且不受SMOD的影響。在方式2中,波特率由PCON中的選擇位SMOD來決定,當(dāng)SMOD=0時,波特率為1/64fosc

當(dāng)SMOD=1時,波特率為1/32fosc,

方式1和方式3的波特率:

其中,T1的溢出率取決于計(jì)數(shù)速率和定時器的預(yù)制值。T1計(jì)數(shù)率取決于它工作在定時器狀態(tài)還是計(jì)數(shù)器狀態(tài),當(dāng)工作于定時器狀態(tài)時,T1計(jì)數(shù)脈沖為fosc/12;當(dāng)工作于計(jì)數(shù)器狀態(tài)時,T1計(jì)數(shù)脈沖取決于外部輸入時鐘頻率。

[例5_3]

應(yīng)用串行口方式0輸出,在串行口外接移位寄存器,構(gòu)成顯示器接口.如圖所示,三片(理論上可以為n片,為舉例方便而用三片)74LS164串接成24位并行輸出移位寄存器,每片74LS164接一個共陽極8段LED顯示器,構(gòu)成三維數(shù)據(jù)顯示,這里P1.0作串行輸出選擇信號(只有P1.0為高時,串行同步信號TXD才能輸出),這種顯示器稱為靜態(tài)顯示,CPU不必為顯示服務(wù)而頻繁執(zhí)行掃描任務(wù).

設(shè)顯示緩沖區(qū)設(shè)在DISBUF開始的區(qū)域中.解:1.確定工作方式

(1)送方式控制字

(SCON)=00000000B=00H;串行口以方式0輸出5.2.4串行口應(yīng)用P1.0RXDTXD8051e74LS16434g5f610d11c12b13aLED0e74LS16434g5f610d11c12b13aLED1e74LS16434g5f610d11c12b13aLED2&8989895V5V1.21.21.2DISPLY:MOVSCON,#00H ;選擇串行口為方式0發(fā)送

MOVR7,#3H ;字節(jié)計(jì)數(shù)

MOVR0,DISBUF ;R0指向顯示緩沖區(qū)

SETBP1.0 ;選通TXD同步移位時鐘L1:MOVA,@R0;取要顯示的數(shù)

MOVSBUF,A;開始發(fā)送

JNBTI,$;等待一幀發(fā)送完

CLRTI;清發(fā)送中斷標(biāo)志

INCR0;修改顯示緩沖區(qū)指針

DJNZR7,L1;三個LED實(shí)現(xiàn)完了否?CLRP1.0;關(guān)TXDRET;返回DISBUF:DB11H,D7H,18H,D8H

程序清單:

第5章MCS-51的中斷系統(tǒng)實(shí)時測控,單片機(jī)能及時地響應(yīng)和處理單片機(jī)外部事件或內(nèi)部事件所提出的中斷請求。5.1中斷的概念CPU正在執(zhí)行程序時,單片機(jī)外部或內(nèi)部發(fā)生的某一事件,請求CPU迅速去處理。CPU暫時中止當(dāng)前的工作,轉(zhuǎn)到中斷服務(wù)處理程序處理所發(fā)生的事件。處理完該事件后,再回到原來被中止的地方,繼續(xù)原來的工作,這稱為中斷。CPU處理事件的過程,稱為CPU的中斷響應(yīng)過程。圖5-1所示。對事件的整個處理過程,稱為中斷處理(或中斷服務(wù))。能夠?qū)崿F(xiàn)中斷處理功能的部件稱為中斷系統(tǒng);產(chǎn)生中斷的請求源稱為中斷請求源。中斷源向CPU提出的處理請求,稱為中斷請求(或中斷申請)。

進(jìn)入中斷→保護(hù)現(xiàn)場→中斷處理→恢復(fù)現(xiàn)場→中斷返回中斷方式優(yōu)點(diǎn):大大地提高了CPU的工作效率。5.2MCS-51中斷系統(tǒng)的結(jié)構(gòu)有5個中斷請求源,兩個中斷優(yōu)先級,可兩級嵌套。中斷系統(tǒng)結(jié)構(gòu)示意圖如下圖所示。

5.3中斷請求源五個中斷請求源:(1)INT0*—外部中斷請求0,由引腳INT0*輸入,中斷請求標(biāo)志為IE0。(2)INT1*—外部中斷請求1,由引腳INT1*輸入,中斷請求標(biāo)志為IE1。(3)定時器/計(jì)數(shù)器T0溢出中斷請求,中斷請求標(biāo)志為TF0。(4)定時器/計(jì)數(shù)器T1溢出中斷請求,中斷請求標(biāo)志為TF1。(5)串行口中斷請求,中斷請求標(biāo)志為TI或RI。由特殊功能寄存器TCON和SCON的相應(yīng)位鎖存。TCON為定時器/計(jì)數(shù)器的控制寄存器,字節(jié)地址為88H。包含:(1)T0和T1的溢出中斷請求標(biāo)志位TF1和TF0(2)外部中斷請求標(biāo)志位IE1與IE0。格式如下所示:各標(biāo)志位的功能:(1)IT0—選擇外部中斷請求0為跳沿觸發(fā)方式還是電平觸發(fā)方式:IT0=0,為電平觸發(fā)方式。

IT0=1,為邊沿觸發(fā)方式??捎绍浖谩?”或清“0”。(2)IE0—外部中斷請求0的中斷請求標(biāo)志位。IE0=0,無中斷請求。IE0=1,外部中斷0有中斷請求。當(dāng)CPU響應(yīng)該中斷,轉(zhuǎn)向中斷服務(wù)程序時,由硬件清“0”IE0。(3)IT1—外部中斷請求1為邊沿觸發(fā)方式還是電平觸發(fā)方式,意義與IT0類似。(4)IE1—外部中斷請求1的中斷請求標(biāo)志位,意義與IE0類似。(5)TF0—T0溢出中斷請求標(biāo)志位。T0計(jì)數(shù)后,溢出時,由硬件置“1”TF0,向CPU申請中斷,CPU響應(yīng)TF0中斷時,硬件自動清“0”TF0,TF0也可由軟件清0。(6)TF1—T1的溢出中斷請求標(biāo)志位,功能和TF0類似。TR1、TR02個位與中斷無關(guān)。

當(dāng)MCS-51復(fù)位后,TCON被清0,則CPU無中斷。SCON為串行口控制寄存器,字節(jié)地址為98H。串行口的發(fā)送中斷和接收中斷的中斷請求標(biāo)志TI和RI,格式如下:各標(biāo)志位的功能:(1)TI—發(fā)送中斷請求標(biāo)志位。串口每發(fā)送完一幀串行數(shù)據(jù)后,硬件自動置“1”TI。必須在中斷服務(wù)程序中用軟件對TI標(biāo)志清“0”。

(2)RI—接收中斷請求標(biāo)志位。串口接收完一個數(shù)據(jù)幀,硬件自動置“1”RI標(biāo)志。必須在中斷服務(wù)程序中用軟件對RI標(biāo)志清“0”。5.4中斷控制5.4.1中斷允許寄存器IECPU對中斷源的開放或屏蔽,由片內(nèi)的中斷允許寄存器IE控制。字節(jié)地址為A8H,可位尋址。格式如下:IE對中斷的開放和關(guān)閉為兩級控制

總的開關(guān)中斷控制位EA(IE.7位):EA=0,所有中斷請求被屏蔽。EA=1,CPU開放中斷,但五個中斷源的中斷請求是否允許,還要由IE中的5個中斷請求允許控制位決定。IE中各位的功能如下:(1)EA:中斷允許總控制位

0:CPU屏蔽所有的中斷請求(CPU關(guān)中斷);

1:CPU開放所有中斷(CPU開中斷)。(2)ES:串行口中斷允許位

0:禁止串行口中斷;

1:允許串行口中斷。

(3)ET1:定時器/計(jì)數(shù)器T1的溢出中斷允許位

0:禁止T1溢出中斷;

1:允許T1溢出中斷。(4)EX1:外部中斷1中斷允許位

0:禁止外部中斷1中斷;

1:允許外部中斷1中斷。(5)ET0:定時器/計(jì)數(shù)器T0的溢出中斷允許位

0:禁止T0溢出中斷;

1:允許T0溢出中斷。(6)EX0:外部中斷0中斷允許位。

0:禁止外部中斷0中斷;

1:允許外部中斷0中斷。MCS-51復(fù)位后,IE清0,所有中斷請求被禁止。若使某一個中斷源被允許中斷,除了IE相應(yīng)的位的被置“1”,還必須使EA位=1。改變IE的內(nèi)容,可由位操作指令來實(shí)現(xiàn),即:

SETBbit;CLRbit。例5-1若允許片內(nèi)2個定時器/計(jì)數(shù)器中斷,禁止其它中斷源的中斷請求。編寫設(shè)置IE的相應(yīng)程序段(1)用位操作指令來編寫如下程序段:

CLRES ;禁止串行口中斷 CLREX1 ;禁止外部中斷1中斷 CLREX0 ;禁止外部中斷0中斷

SETBET0;允許定時器/計(jì)數(shù)器T0中斷SETBET1;允許定時器/計(jì)數(shù)器T1中斷SETBEA;CPU開中斷(2)用字節(jié)操作指令來編寫:

MOVIE,#8AH或者用:

MOV0A8H,#8AH;A8H為IE寄存器字節(jié)地址5.4.2中斷優(yōu)先級寄存器IP兩個中斷優(yōu)先級,可實(shí)現(xiàn)兩級中斷嵌套。如圖5-6示。可歸納為下面兩條基本規(guī)則:(1)低優(yōu)先級可被高優(yōu)先級中斷,反之則不能。(2)同級中斷不會被它的同級中斷源所中斷。若CPU正在執(zhí)行高優(yōu)先級的中斷,則不能被任何中斷源所中斷。中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H。IP各個位的含義:(1)PS——串行口中斷優(yōu)先級控制位

1:高優(yōu)先級中斷;

0:低優(yōu)先級中斷。(2)PT1——定時器T1中斷優(yōu)先級控制位

1:高優(yōu)先級中斷;

0:低優(yōu)先級中斷。(3)PX1——外部中斷1中斷優(yōu)先級控制位

1:高優(yōu)先級中斷;

0:低優(yōu)先級中斷。(4)PT0——定時器T0中斷優(yōu)先級控制位

1:高優(yōu)先級中斷;

0:低優(yōu)先級中斷。(5)PX0——外部中斷0中斷優(yōu)先級控制位

1:高優(yōu)先級中斷;

0:低優(yōu)先級中斷。

由軟件可改變各中斷源的中斷優(yōu)先級。MCS-51的中斷系統(tǒng)有兩個不可尋址的“優(yōu)先級激活觸發(fā)器”:一個用來指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止。另一個用來指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。在同時收到幾個同一優(yōu)先級的中斷請求時,優(yōu)先響應(yīng)哪一個中斷,取決于內(nèi)部的查詢順序。查詢順序如下:

中斷源中斷級別

外部中斷0 最高 T0溢出中斷 外部中斷1 T1溢出中斷 串行口中斷 最低例5-2

設(shè)置IP寄存器的初始值,使2個外中斷請求為高優(yōu)先級,其它中斷請求為低優(yōu)先級。(1)用位操作指令

SETBPX0;2個外中斷為高優(yōu)先級 SETBPX1 CLRPS;串口為低優(yōu)先級中斷

CLRPT0;2個定時器/計(jì)數(shù)器低優(yōu)先級中斷 CLRPT1(2)用字節(jié)操作指令

MOVIP,#05H 或: MOV0B8H,#05H;B8H為IP寄存器的字節(jié)地址5.5響應(yīng)中斷請求的條件一個中斷請求被響應(yīng),需滿足以下必要條件:(1)IE寄存器中的中斷總允許位EA=1。(2)該中斷源發(fā)出中斷請求,即該中斷源對應(yīng)的中斷請求標(biāo)志為“1”。(3)該中斷源的中斷允許位=1,即該中斷沒有被屏蔽。(4)無同級或更高級中斷正在被服務(wù)。中斷響應(yīng)的主要過程:首先由硬件自動生成一條長調(diào)用指令:

LCALLaddr16接著就由CPU執(zhí)行該指令,將PC的內(nèi)容壓入堆棧以保護(hù)斷點(diǎn),再將中斷入口地址裝入PC。各中斷源服務(wù)程序的入口地址是固定的,如下所示:

中斷源 入口地址

外部中斷0 0003H定時器/計(jì)數(shù)器T0 000BH 外部中斷1 0013H

定時器/計(jì)數(shù)器T1 001BH 串行口中斷 0023H中斷響應(yīng)是有條件的,遇到下列三種情況之一時,中斷響應(yīng)被封鎖:

(1)CPU正在處理同級的或更高優(yōu)先級的中斷。(2)所查詢的機(jī)器周期不是所當(dāng)前正在執(zhí)行指令的最后一個機(jī)器周期。只有在當(dāng)前指令執(zhí)行完畢后,才能進(jìn)行中斷響應(yīng)。(3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令。需要再去執(zhí)行完一條指令,才能響應(yīng)新的中斷請求。如果存在上述三種情況之一,CPU將丟棄中斷查詢結(jié)果,不能對中斷進(jìn)行響應(yīng)。5.6中斷請求的撤消1.定時器/計(jì)數(shù)器中斷請求的撤消

中斷請求被響應(yīng)后。硬件會自動清TF0或TF1。2.外部中斷請求的撤消

(1)跳沿方式外部中斷請求的撤消是自動撤消的。(2)電平方式外部中斷請求的撤消:除了標(biāo)志位清“0”之外,還需在中斷響應(yīng)后把中斷請求信號引腳從低電平強(qiáng)制改變?yōu)楦唠娖健?.串行口中斷請求的撤消響應(yīng)串行口的中斷后,CPU無法知道是接收中斷還是發(fā)送中斷,還需測試這兩個中斷標(biāo)志位的狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行口中斷請求的撤消只能用軟件清除

CLRTI;清TI標(biāo)志位 CLRRI;清RI標(biāo)志位5.7中斷服務(wù)程序的設(shè)計(jì)一、中斷服務(wù)程序設(shè)計(jì)的任務(wù)

基本任務(wù):

(1)設(shè)置中斷允許控制寄存器IE。(2)設(shè)置中斷優(yōu)先級寄存器IP。(3)對外中斷源,是采用電平觸發(fā)還是跳沿觸發(fā)。(4)編寫中斷服務(wù)程序,處理中斷請求。前2條一般放在主程序的初始化程序段中。例5-3

假設(shè)允許外部中斷0中斷,并設(shè)定它為高級中斷,其它中斷源為低級中斷,采用跳沿觸發(fā)方式。在主程序中編寫如下程序段:

SETBEA;CPU開中斷SETBEx0;允許外中斷0產(chǎn)生中斷SETBPX0;外中斷0為高級中斷SETBIT0;外中斷0為跳沿觸發(fā)方式

二、采用中斷時的主程序結(jié)構(gòu)常用的主程序結(jié)構(gòu)如下:

ORG0000H LJMPMAIN

ORG中斷入口地址 LJM

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論