Chapter4 定時器、中斷和串口_第1頁
Chapter4 定時器、中斷和串口_第2頁
Chapter4 定時器、中斷和串口_第3頁
Chapter4 定時器、中斷和串口_第4頁
Chapter4 定時器、中斷和串口_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章MCS-51單片機的定時器、中斷和串口主要內(nèi)容定時器/計數(shù)器的相關(guān)寄存器1定時器/計數(shù)器的四種工作方式2串口的四種工作方式5串口相關(guān)的寄存器4中斷系統(tǒng)的結(jié)構(gòu)和相關(guān)寄存器6中斷的響應過程7串行通信的一些概念3學習目標了解MCS-51單片機的定時器/計數(shù)器的工作模式1能夠根據(jù)指定的定時間隔,編寫MCS-51單片機定時程序2了解MCS-51單片機串口結(jié)構(gòu)和串口的使用方法3能夠搭建80C51單片機的多機串行通信電路,同時編寫相應的串行通信程序。4了解中斷系統(tǒng)的概念、結(jié)構(gòu)和相關(guān)寄存器5掌握80C51單片機中斷系統(tǒng)的響應過程,能夠設(shè)計一個中斷系統(tǒng)。6MCS-51單片機的定時器/計數(shù)器—基本情況2個16位的定時/計數(shù)器,有四種工作方式,簡稱定時器0、定時器1,分別用T0、T1表示。定時/計數(shù)器工作在定時模式時,計數(shù)脈沖信號來自單片機的內(nèi)部,計數(shù)速率是晶振頻率的1/12,當計數(shù)器啟動后,每個機器周期計數(shù)器自動加1。定時/計數(shù)器工作在計數(shù)模式時,計數(shù)器對外部脈沖進行計數(shù),計數(shù)器計P3.4(T0腳)P3.5(T1腳)負跳變次數(shù)。每產(chǎn)生一次負跳變,計數(shù)器自動加1。計數(shù)器最高計數(shù)頻率為振蕩頻率的1/24。定時器計數(shù)器定時/計數(shù)器

內(nèi)部計數(shù)器外部計數(shù)器CPU可以用軟件設(shè)定定時器/計數(shù)器的工作方式,定時器/計數(shù)器工作時,會按照設(shè)定的工作方式獨立運行,不占用CPU的操作時間,一旦定時器/計數(shù)器計滿溢出,將向CPU提出中斷申請,中斷CPU當前操作。還有2個8位的專用寄存器TMOD(88H)和TCON(89H)

。其中TMOD是定時器的工作方式和工作模式寄存器,TCON是控制寄存器,主要用于定時/計數(shù)器管理與控制。MCS-51單片機的定時器/計數(shù)器—基本情況定時器/計數(shù)器的核心部件是二進制加1計數(shù)器(TH0、TL0或TH1、TL1)。當加到計數(shù)器為全“1”時,再輸入一個脈沖,就使計數(shù)器回零,同時產(chǎn)生溢出脈沖使TCON中溢出中斷標志TF0或TF1置1,并可向CPU申請中斷。MCS-51單片機的定時器/計數(shù)器—基本情況MCS-51單片機的定時器/計數(shù)器—基本情況3bit計數(shù)器(a)原理圖.(b)時序圖MCS-51單片機的定時器/計數(shù)器—基本情況T0和T18051單片機有2個16位的定時/計數(shù)器,即定時器0(T0)和定時器1(T1)。T0由2個特殊功能寄存器TH0(高字節(jié),地址8CH)和TL0(低字節(jié),地址8AH)構(gòu)成,T1則由TH1(高字節(jié),地址8DH)和TL1(低字節(jié),地址8BH)構(gòu)成。MOVTL0,#9CHMCS-51單片機的定時器/計數(shù)器—寄存器定時器/計數(shù)器工作方式控制寄存器:TMOD8bit寄存器,地址89H工作模式寄存器TMOD每一位都定義了不同的功能,但只能字節(jié)尋址,即要配置其中某一位信息,必須對TMOD整體賦值。低四位用來設(shè)置T0的工作方式,高四位用來設(shè)置T1的工作方式。MCS-51單片機的定時器/計數(shù)器—寄存器GATEC/TM1M0GATEC/TM1M0Timer1Timer0(MSB)(LSB)工作模式寄存器TMOD的格式(1)GATE——門控位門控位用來確定定時器/計數(shù)器的啟動除了受TR0(TR1)的影響,是否還要受外部中斷輸入引腳()的信號控制。①GATE=1:當外部中斷輸入引腳()為高電平時,TR0(TR1)設(shè)置為1,啟動定時器/計數(shù)器T0(T1);當外部中斷輸入引腳()為低電平時,不能啟動T0(T1)。②GATE=0:只要將TR0(TR1)設(shè)置為1,即可啟動定時器/計數(shù)器T0(T1)。D7D6D5D4D3D2D1D0GATE

M1M0GATE

M1M0T1T0MCS-51單片機的定時器/計數(shù)器—寄存器(2)——定時器/計數(shù)器功能模式選擇位①C/T=1:T0(T1)用作計數(shù)器。②C/T=0:T0(T1)用作定時器。作計數(shù)器用時,對單片機引腳P3.4(T0)或P3.5(T1)上的輸入信號進行計數(shù)。在每個機器周期的S5P2期間,CPU采樣引腳的輸入電平。若前一周期采樣值為1,下一周期的采樣值為0,則計數(shù)單元加1,加滿后溢出引發(fā)定時器/計數(shù)器中斷。作定時器用時,對內(nèi)部時鐘脈沖信號計數(shù)。希望定時多長時間就給計數(shù)單元賦相應的初始值,啟動定時器后,每過一個機器周期計數(shù)單元加1,加滿后溢出引發(fā)定時器/計數(shù)器中斷。MCS-51單片機的定時器/計數(shù)器—寄存器(3)M1、M0——工作方式選擇位由M1、M0兩位的組合可以確定4種工作方式,如表4-2所示。這4種工作方式在定時時間長度、計數(shù)單元賦值等方面存在較大差異,下一節(jié)將舉例說明其應用特點。M1M0

工作方式

功能描述00方式013位定時/計數(shù)器01方式116位定時/計數(shù)器10方式28位定時/計數(shù)器,自動重裝初始值11方式3T0分為兩個8位計數(shù)器,T1無此項定時器/計數(shù)器工作方式MCS-51單片機的定時器/計數(shù)器—寄存器控制寄存器TCON控制寄存器TCON每一位都定義了不同的功能,既可以字節(jié)尋址,也可以位尋址,即,如果要配置其中某一位信息,可以對該位單獨賦值。TCON格式如表所示??刂萍拇嫫鳎裕茫希胃魑欢xTCON的高4位用來定義定時器/計數(shù)器中斷控制信息,低4位用來定義外部中斷控制信息。下面分別介紹關(guān)于定時器/計數(shù)器中斷控制的各位的具體含義。D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0T1T0外部中斷MCS-51單片機的定時器/計數(shù)器—寄存器TF1(TF0):中斷標志位。計數(shù)單元溢出時,硬件置位。若開啟了定時器/計數(shù)器中斷,則中斷響應后硬件自動清除該標志位;若沒有開啟中斷,則由軟件清零。TR1(TR0):定時器/計數(shù)器啟動控制位。若門控GATE=0,則軟件設(shè)置TR1(TR0)為1時,啟動定時器/計數(shù)器T1(T0)開始工作;軟件清除TR1(TR0)為0時,定時器/計數(shù)器T1(T0)停止工作。

復位后TCON中的所有位都清零,定時器/計數(shù)器T1(T0)均沒有工作。MCS-51單片機的定時器/計數(shù)器—寄存器單片機復位時,特殊功能寄存器TCON被清0TFx(x=0,1)和TRx(x=0,1)由軟件方法置1或清0。既可按單元操作的方式,也可以按位操作方式。如啟動定時/計數(shù)器T0和T1,清除溢出標志位TF0和TF1操作如下:

SETBTR0SETBTR1CLRTF0CLRTF1

或:MOVTCON,#01010000B定時/計數(shù)器控制寄存器(TCON)MCS-51單片機的定時器/計數(shù)器—寄存器注意:使用定時器/計數(shù)器時應注意以下幾個方面:(1)MCS-51的定時器/計數(shù)器為加1計數(shù)器。(2)定時器/計數(shù)器T1的工作方式?jīng)]有方式3,如果設(shè)置它為方式3(M1M0=11),定時器/計數(shù)器T1停止工作。(3)一般情況下,定時器/計數(shù)器T1溢出后,TF1自動置1,可以以此為判斷標志,檢測定時或計數(shù)是否完成,但在定時器/計數(shù)器T0設(shè)置為方式3時,TF1為1時意味著8位計數(shù)器TH0溢出,TF0為1表示8位計數(shù)器TL0溢出。(4)在計數(shù)器模式時,計數(shù)脈沖的頻率不高于振蕩器頻率的1/24.MCS-51單片機的定時器/計數(shù)器—寄存器方式0方式0:13位定時器/計數(shù)器。設(shè)置TMOD的M1=0、M0=0時,定時器/計數(shù)器以方式0工作,此時計數(shù)單元由13位組成,即TLx的低5位(D0~D4)和THx的8位,TLx的高3位沒有使用。這一方式主要是為了和早期4位單片機兼容,因此現(xiàn)在的單片機應用設(shè)計中很少將定時器/計數(shù)器設(shè)為方式0,大家對方式0的結(jié)構(gòu)和工作特點有基本了解就足夠了。MCS-51單片機的定時器/計數(shù)器—工作方式如圖所示,以定時器/計數(shù)器T0為例,當GATE=0時,TR0控制定時器/計數(shù)器工作狀態(tài),只要設(shè)置TR0=1,定時器/計數(shù)器就開始工作,TL0和TH0組成的13位計數(shù)單元開始計數(shù);當GATE=1時,TR0與引腳信號共同確定定時器/計數(shù)器工作狀態(tài)。MCS-51單片機的定時器/計數(shù)器—工作方式

當=0時,MUX開關(guān)接通內(nèi)部振蕩器的12分頻輸出,此時T0就是對機器周期進行計數(shù),即T0作為定時器使用,定時時間為:

t:定時時間。

TC:機器周期。

X:定時器/計數(shù)器初始值。

fOSC:晶體振蕩器頻率。

L:計數(shù)單元的長度。XXMCS-51單片機的定時器/計數(shù)器—工作方式

當=1時,MUX開關(guān)接通計數(shù)引腳(P3.4),此時T0對外部引腳P3.4上的脈沖信號進行計數(shù),即T0作為計數(shù)器使用,計數(shù)個數(shù)為:

S=2L-X

S:脈沖信號計數(shù)值。

L:計數(shù)單元的長度。

X:計數(shù)單元初始值。當TL0的低5位計滿溢出時,向TH0進位,當計數(shù)單元的值為全“1”時,再來一個有效信號將使計數(shù)單元溢出復位為全“0”,同時使中斷標志位TF0置位,申請中斷。如果程序中沒有開啟定時器/計數(shù)器中斷,則可以通過軟件查詢標志位TF0是否為“1”來判斷定時/計數(shù)是否結(jié)束。在方式0下,計數(shù)器計數(shù)范圍是1~8192(213)。定時時間范圍為1~8192個機器周期。MCS-51單片機的定時器/計數(shù)器—工作方式【例】設(shè)系統(tǒng)晶振為12MHz,試編程實現(xiàn)在P1.0管腳輸出周期為10ms的方波。分析:定時器/計數(shù)器應用要考慮選擇T0還是T1、工作在定時模式還是計數(shù)器模式、采用哪種工作方式、計數(shù)單元初始值計算等問題。因此對應程序設(shè)計中定時器初始化步驟通常有如下幾步:

①配置TMOD(寫入工作方式控制字);②計數(shù)單元THx、TLx賦初值;③啟動定時器/計數(shù)器(設(shè)置TRx);④開中斷(如采用查詢方式可省略這一步)。MCS-51單片機的定時器/計數(shù)器—工作方式

根據(jù)題意,定時器/計數(shù)器應工作在定時模式,且定時時間為周期的一半,即5ms,假設(shè)選擇T0,確定工作方式0,套用前面的公式計算計數(shù)單元初始值。

X=2L-t×fOSC/12=213-5×10-3×12×106/12=8192-5000=3192=0C78H=110001111000B

由于方式0的計數(shù)單元由TL0的低5位和TH0的8位共同組成,因此將上述計算結(jié)果拆分成低5位和高8位的組合,則初始值賦值為:

TL0=11000B=18H,TH0=1100011B=63H。MCS-51單片機的定時器/計數(shù)器—工作方式如果用查詢方式,程序代碼如下:

ORG0000H AJMPSTART ;跳轉(zhuǎn)到主程序開始處

ORG0030H START: MOVSP,#68H ;堆棧指針上移

SETBP1.0 ;初始化P1.0 MOVTMOD,#00H ;設(shè)置T0工作在定時模式,方式0 MOVTH0,#63H;定時器計數(shù)單元賦初值

MOVTL0,#18H SETBTR0 ;啟動定時器T0LED_LOOP: JNBTF0,$ ;定時時間沒有到,繼續(xù)等待

CLRTF0 ;手動清除中斷標志位

CPLP1.0 ;改變P1.0狀態(tài)使之輸出方波

MOVTH0,#63H ;重新賦初值

MOVTL0,#18H SJMPLED_LOOP ENDMCS-51單片機的定時器/計數(shù)器—工作方式如果用中斷方式,程序代碼如下:

ORG0000H AJMPSTART;跳轉(zhuǎn)到主程序開始處

ORG000BH ;定時器/計數(shù)器T0中斷入口

AJMPINT_T0;跳轉(zhuǎn)到T0中斷服務(wù)程序處

ORG0030HSTART: MOVSP,#68H;堆棧指針上移

SETBP1.0 ;初始化P1.0 MOVTMOD,#00H;設(shè)置T0工作在定時模式,方式0 MOVTH0,#63H;定時器計數(shù)單元賦初值

MOVTL0#18H SETBTR0;啟動定時器

SETBEA;開總中斷

SETBET0;開定時中斷T0 SJMP$;等待中斷MCS-51單片機的定時器/計數(shù)器—工作方式INT_T0: ;中斷服務(wù)程序

PUSHACC PUSHPSW MOVTH0,#63H

;重新賦初值

MOVTL0,#18H CPLP1.0 ;改變P1.0狀態(tài)使之輸出方波

POPPSW POPACC RETI ENDMCS-51單片機的定時器/計數(shù)器—工作方式

例:設(shè)定時器T0選擇工作模式0,定時時間為1ms,fOSC=6MHz。試確定T0初值,計算最大定時時間T。

解:當T0處于工作模式0時,加1計數(shù)器為13位。設(shè)T0的初值為X。則

X=7692

轉(zhuǎn)換為二進制數(shù)X=1111000001100B=1E0CHT0的低5位:01100B=0CHT0的高8位:11110000B=F0HT0最大定時時間對應于13位計數(shù)器T0的各位全為1,即(TH0)=FFH,(TL0)=1FH。則MCS-51單片機的定時器/計數(shù)器—工作方式

例:設(shè)T0工作在模式0,定時時間為1ms,fOSC=6MHz。編程實現(xiàn)其定時功能。

MCS-51單片機的定時器/計數(shù)器—工作方式解:

(1)計算T0初值X

結(jié)果為(TH0)=0F0H,(TL0)=0CH。(2)程序清單

ORG0000HRESET:AJMPMAIN;跳過中斷服務(wù)程序區(qū)

ORG000BH;中斷服務(wù)程序固定入口

AJMPITOP

主程序

ORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針

ACALLPTOMDHERE:AJMPHERE;等待時間到,轉(zhuǎn)入中斷PTOMD:MOVTL0,#0CH;裝入初值

MOVTH0,#0F0HSETBTR0;啟動定時

SETBET0;開中斷

SETBEARET;子程序返回中斷服務(wù)程序

ORG0120HITOP:MOVTL0,#0CH;重裝入初值

MOVTH0,#0F0HCPLP1.0;P1.0輸出取反

;產(chǎn)生周期2ms的方波

RETI;中斷返回MCS-51單片機的定時器/計數(shù)器—工作方式

例:利用T0的工作模式0產(chǎn)生1ms的定時,在P1.0引腳上輸出2ms的方波。設(shè)單片機晶振=12MHz。解:

(1)選擇工作模式要在P1.0引腳輸出周期為2ms方波,只要使P1.0每隔1ms取反一次即可。T0的模式字節(jié)TMOD=00H,即

TMOD.1~TMOD.0M1M0=00,T0為模式0;

TMOD.2C/T=0,T0為定時狀態(tài);

TMOD.3GATE=0,表示計數(shù)不受INT0控制;TMOD.4~TMOD.7可為任意值。因T1不用,這里取0

MCS-51單片機的定時器/計數(shù)器—工作方式(2)計算1ms定時時T0的初值機器周期

設(shè)T0的計數(shù)初值為X,則

=8192-1000=7192D=1110000011000BTH0初值為E0H,TL0初值為18H??刹樵僒F0的狀態(tài)來控制P1.0輸出。

7192÷32商為高8位,余數(shù)為低5位MCS-51單片機的定時器/計數(shù)器—工作方式

(3)查詢方式采用查詢方式的程序很簡單,但在定時器計數(shù)過程中,CPU要不斷查詢溢出標志位TF0的狀態(tài)。這就占用了很多CPU的工作時間,使CPU的效率下降。程序清單:

MOVTMOD,#00H;設(shè)置T0為模式0MOVTL0,#18H;送初值

MOVTH0,#0E0HSETBTR0;啟動T0

LOOP:JBCTF0,NEXT;查詢定時時間到否?

SJMPLOOPNEXT:MOVTL0,#18H;重裝計數(shù)初值

MOVTH0,#0E0HCPLP1.0;輸出取反

SJMPLOOP;重復循環(huán)MCS-51單片機的定時器/計數(shù)器—工作方式(4)定時器溢出中斷方式主程序

MAIN:MOVTMOD,#00H;設(shè)置T0為模式0MOVTL0,#18H;送初值

MOVTH0,#0E0HSETBEA;CPU開中斷

SETBET0;T0中斷允許

SETBTR0;啟動T0

HERE:SJMPHERE;等待中斷中斷服務(wù)程序

ORG000BH;T0入口

AJMPCTC0;轉(zhuǎn)中斷服務(wù)程序

CTC0:MOVTL0,#18H;重裝初值

MOVTH0,#0E0HCPLP1.0;輸出方波

RETI;中斷返回MCS-51單片機的定時器/計數(shù)器—工作方式方式1方式1:16位定時器/計數(shù)器。設(shè)置TMOD的M1=0、M0=1時,定時器/計數(shù)器以方式1工作,此時計數(shù)單元由兩個完整的8位寄存器TLx、THx共同組成。定時器/計數(shù)器對應方式1的結(jié)構(gòu)框圖如下所示。MCS-51單片機的定時器/計數(shù)器—工作方式啟動定時器/計數(shù)器后,計數(shù)單元開始計數(shù),TLx加滿后溢出向THx進位,THx加滿(全1)后再計一次后溢出,此時TLx、THx自動清零,同時系統(tǒng)將定時器/計數(shù)器中斷標志位TFx置位,表明定時時間到或外部信號計數(shù)達到目標。如果允許中斷,那么CPU自動響應中斷并轉(zhuǎn)入中斷處理程序,此時TLx、THx已經(jīng)恢復為全0,中斷處理程序中必須重新給TLx、THx賦初始值。中斷返回時系統(tǒng)自動將標志位TFx清零。方式1通常應用于需要實現(xiàn)較長時間定時的場合。下面我們通過一個簡單的例子來說明方式1的使用特點。MCS-51單片機的定時器/計數(shù)器—工作方式

【例】電路如圖所示。試編程實現(xiàn)單片機控制8盞燈循環(huán)點亮,每盞燈點亮時間為50ms,系統(tǒng)晶振為12MHz。

MCS-51單片機的定時器/計數(shù)器—工作方式分析:根據(jù)題意,確定定時時間為50ms,每次定時時間到,即控制相鄰的下一盞燈點亮,采用定時器T1,工作方式1,計數(shù)單元初始值計算如下:

X=2L-t×fOSC/12=216-50×10-3×12×106/12=15536=3CB0H

則TH1=3CH,TL1=B0H。MCS-51單片機的定時器/計數(shù)器—工作方式

ORG0000H AJMPSTART ;跳轉(zhuǎn)到程序開始處

ORG0030HSTART: MOVSP,#68H ;堆棧指針上移

MOVP2,#0FFH ;初始化,LED全滅

MOVA,#0FEH ;初始化,累加器A保存 ;LED控制位狀態(tài)信息

MOVTMOD,#10H ;設(shè)置T1工作在定時模式,方式1 MOVTH1,#3CH;定時器計數(shù)單元賦初值

MOVTL1,#0B0H SETBTR1 ;啟動定時器LED_LOOP:

JNBTF1,$

;定時時間沒有到,繼續(xù)等待

CLRTF1

;手動清除中斷標志位

MOVP2,A ;改變LED狀態(tài)

RLA ;循環(huán)左移一位

MOVTH1,#3CH MOVTL1,#0B0H SJMPLED_LOOP ENDMCS-51單片機的定時器/計數(shù)器—工作方式中斷方式、程序代碼如下:

ORG0000H AJMPSTART ;跳轉(zhuǎn)到程序開始處

ORG001BH AJMPINT_T1 ;跳轉(zhuǎn)到定時中斷1處理程序處

ORG0030HSTART: MOVSP,#68H ;堆棧指針上移

MOVP2,#0FFH ;初始化,LED全滅

MOVA,#0FEH ;初始化,累加器A保存LED狀態(tài)信息

MOVTMOD,#10H;設(shè)置T1工作在定時模式,方式1 MOVTH1,#3CH ;定時器計數(shù)單元賦初值

MOVTL1,#0B0H SETBTR1 ;啟動定時器

SETBEA ;開總中斷

SETBET1 ;開定時中斷T1 SJMP$ ;等待中斷MCS-51單片機的定時器/計數(shù)器—工作方式INT_T0: PUSHPSW ;本次需要利用累加器A傳遞LED狀態(tài),

;故不必將A的內(nèi)容壓入堆棧

MOVTH1,#3CH ;重新賦初值

MOVTL1,#0B0H MOVP2,A ;改變LED狀態(tài)

RLA ;循環(huán)左移一位

POPPSW RETI ENDMCS-51單片機的定時器/計數(shù)器—工作方式【例】系統(tǒng)晶振為12MHz,利用定時器T0的工作方式1實現(xiàn)P1.0管腳輸出周期為2s的方波。分析:在晶振為12MHz時,方式1最大能實現(xiàn)的定時時間為216×1μs=65536μs,要使P1.0輸出周期為2s的方波,定時時間為1s。對于類似的長時間定時要求,可以采用基準定時加循環(huán)的方法。比如要求定時1s,選擇T0的方式1,基準定時50ms,循環(huán)20次即為1s。程序流程圖如圖所示。MCS-51單片機的定時器/計數(shù)器—工作方式MCS-51單片機的定時器/計數(shù)器—工作方式程序代碼如下:

ORG0000H AJMPSTART ;跳轉(zhuǎn)到程序開始處

ORG000BH AJMPINT_T0;跳轉(zhuǎn)到定時中斷0處理程序處

ORG0030HSTART: MOVSP,#68H SETB P1.0

;初始化P10 MOVR7,#20

;循環(huán)次數(shù)賦初值

MOVTMOD,#01H;設(shè)置T0工作在定時模式,方式1 MOVTH0,#3CH;定時器計數(shù)單元賦初值

MOVTL0,#0B0H SETBTR0 ;啟動定時器

SETBEA ;開總中斷

SETBET0 ;開定時中斷T0 SJMP$MCS-51單片機的定時器/計數(shù)器—工作方式;***************中斷服務(wù)程序***************INT_T0:PUSHACC PUSHPSW MOVTH0,#3CH

;重新賦初值

MOVTL0,#0B0H DJNZR7,EXIT

;循環(huán)次數(shù)未到, ;即未到1s,退出中斷

MOVR7,#20 ;循環(huán)次數(shù)重新賦初值

CPLP1.0 ;1s定時時間到,改變P1.0狀態(tài)EXIT: POPPSW POPACC RETI ENDMCS-51單片機的定時器/計數(shù)器—工作方式方式2

方式2:8位自動重裝初始值的定時器/計數(shù)器。設(shè)置TMOD的M1=1、M0=0時,定時器/計數(shù)器以方式2工作,此時計數(shù)單元THx作為備分寄存器保存和TLx同樣的初始值。定時器/計數(shù)器對應方式2的結(jié)構(gòu)框圖如圖所示。MCS-51單片機的定時器/計數(shù)器—工作方式啟動定時器/計數(shù)器后,計數(shù)單元開始計數(shù),TLx加滿(全1)后再加1溢出,此時TLx自動清零,同時系統(tǒng)將定時器/計數(shù)器中斷標志位TFx置位,表明定時時間到或外部信號計數(shù)達到目標。如果允許中斷,CPU自動響應中斷并轉(zhuǎn)入中斷處理程序。在方式2中,系統(tǒng)會自動從備分寄存器THx取得初始值賦給TLx,因此不需要在中斷處理程序中重新給TLx、THx賦初始值。中斷返回時系統(tǒng)自動將標志位TFx清零。方式2通常應用于短時間定時的場合。MCS-51單片機的定時器/計數(shù)器—工作方式【例】電路如圖所示,系統(tǒng)晶振為12MHz,程序控制8盞燈輪流點亮,但要求看起來8盞燈同時點亮。分析:人眼的視覺停留時間大約為20ms,要想8盞燈輪流點亮而看起來一齊亮,則每盞燈第一次點亮和第二次點亮的時間間隔不能超過20ms。不妨設(shè)計為每盞燈點亮200μs。然后依次循環(huán),則每盞燈中途熄滅的時間間隔可以定為大約為14ms,遠遠小于人眼視覺停留時間,這樣人眼將不會分辨出燈曾經(jīng)熄滅過,從而達到看起來一齊亮的效果。這一設(shè)計思路在數(shù)碼管動態(tài)掃描顯示中常常用到。選擇定時器T1,短時間定時采用方式2,定時200μs,初始值計算如下:

X=2L-t×fOSC/12=28-200×10-6×12×106/12=56=38H

MCS-51單片機的定時器/計數(shù)器—工作方式 ORG0000H AJMPSTART ;跳轉(zhuǎn)到程序開始處

ORG001BH AJMPINT_T1 ;跳轉(zhuǎn)到定時中斷1處理程序處

ORG0030HSTART: MOVSP,#68H ;堆棧指針上移

MOVP2,#0FFH ;初始化,LED全滅

MOVA,#0FEH ;初始化,累加器A保存LED狀態(tài)信息

MOVTMOD,#20H ;設(shè)置T1工作在定時模式,方式2 MOVTH1,#38H ;定時器計數(shù)單元賦初值

MOVTL1,#38H SETBTR1 ;啟動定時器

SETBEA ;開總中斷

SETBET1 ;開定時中斷T1 SJMP$ ;等待中斷MCS-51單片機的定時器/計數(shù)器—工作方式INT_T0: PUSHPSW MOVP2,A;改變LED狀態(tài)

RLA;循環(huán)左移一位

POPPSW RETI ENDMCS-51單片機的定時器/計數(shù)器—工作方式方式3方式3:T0分解為2個獨立的8位定時器/計數(shù)器。設(shè)置TMOD的M1=1、M0=1時,定時器/計數(shù)器以方式3工作,只有T0可以設(shè)置為方式3,此時T0分解為2個獨立的8位定時器/計數(shù)器TL0和TH0。其中TL0占用原T0的相關(guān)資源,包括T0控制位、GATE、TR0、TF0,外部信號輸入引腳P3.4(T0)、P3.2(),T0中斷入口地址。除了計數(shù)單元只有8位寄存器TL0外,其余功能和用法與方式1完全相同,可用作8位定時器,也可用作8位計數(shù)器模式。此時TH0使用原T1的部分資源,包括T1控制位TR1、TF1,T1中斷入口地址。TH0只用作8位定時器模式。MCS-51單片機的定時器/計數(shù)器—工作方式MCS-51單片機的定時器/計數(shù)器—工作方式

當定時器/計數(shù)器T0用作方式3時,T1仍然可以設(shè)置為方式0~2。由于當前T1的控制位和中斷源都被TH0占用,此時T1一般用作不需要中斷的串口波特率發(fā)生器,定時控制串口數(shù)據(jù)傳輸速率,詳細說明可參見本章串口部分。前面列舉了很多定時器應用的例子,接下來看一個計數(shù)器應用的例子。MCS-51單片機的定時器/計數(shù)器—工作方式【例】假設(shè)某生產(chǎn)線的一個流程有5套工序,5套工序全部結(jié)束后工作人員應停止其他工作,來檢測5套工序后的產(chǎn)品。電路設(shè)計人員將5套工序?qū)獋鞲衅鞯妮敵鲂盘枺ǖ陀行В┫嗯c后接入到單片機引腳P3.4,蜂鳴器接P1.0(低電平有效),手動按鍵接P1.7,要求5套工序結(jié)束后蜂鳴器鳴叫提醒工作人員,直到工作人員按下按鍵(給P1.7一個低電平信號)為止。分析:根據(jù)題意,可以設(shè)置T0工作在方式3,利用TL0作8位計數(shù)器,P3.4管腳收到5次有效信號后引發(fā)T0中斷,則計數(shù)單元賦初值為TL0=28-5=250=FAH。MCS-51單片機的定時器/計數(shù)器—工作方式

ORG0000H AJMPSTART;跳轉(zhuǎn)到程序開始處

ORG000BH AJMPINT_T0;跳轉(zhuǎn)到定時中斷0處理程序處

ORG0030HSTART: MOVSP,#68H SETBP1.0 ;初始化蜂鳴器

SETBP1.7 ;初始化按鍵

MOVTMOD,#07H;設(shè)置T0工作在計數(shù)模式,方式3 MOVTL0,#0FAH;計數(shù)器計數(shù)單元賦初值

SETBTR0;啟動計數(shù)器

SETBEA;開總中斷

SETBET0;開中斷T0 SJMP$MCS-51單片機的定時器/計數(shù)器—工作方式INT_T0: PUSHACC PUSHPSW MOVTL0,#0FAH;重新賦初值

CLRP1.0 ;5套工序結(jié)束,控制蜂鳴器鳴叫

JBP1.7,$ ;工作人員沒有按鍵,蜂鳴器繼續(xù)鳴叫

SETBP1.0 ;工作人員按下停止鍵,蜂鳴器停止鳴叫

POPPSW POPACC RETI ENDMCS-51單片機的定時器/計數(shù)器—工作方式思考與練習1.定時器/計數(shù)器有幾種工作方式?各有何特點?2.與定時器/計數(shù)器相關(guān)的寄存器有哪些?3.定時器/計數(shù)器初始化包括哪些步驟?4.已知系統(tǒng)晶振為12MHz,編程實現(xiàn)P1.0輸出50ms的方波。5.設(shè)計一個8燈閃爍的控制電路,系統(tǒng)晶振為12MHz,編程實現(xiàn)8燈輪流閃爍,其中每盞燈點亮時間為3ms。6.設(shè)計一個8燈閃爍的控制電路,系統(tǒng)晶振為12MHz,編程實現(xiàn)8燈輪流閃爍,其中每盞燈點亮時間為2s。有條件的在硬件電路板上運行查看效果。7.設(shè)計一個流水燈控制電路,系統(tǒng)晶振為12MHz,編程實現(xiàn)第1min8燈從左至右輪流閃爍,每盞點亮時間為1s,第2min8燈從右至左閃爍,第3min再從左至右,周期交替。8.利用T0測量外部信號的正脈沖寬度,已知系統(tǒng)的晶振頻率為12MHz,將所測得值高位存入片內(nèi)71H,低位存入片內(nèi)70H。定時器/計數(shù)器初始化定時/計數(shù)器的初始化包括設(shè)置工作方式、計數(shù)器或定時器模式、計算計數(shù)初始值、啟動定時/計數(shù)器、設(shè)置中斷控制位等。定時和計數(shù)可以采用查詢方式和中斷方式實現(xiàn)。MCS-51單片機的定時器/計數(shù)器—使用總結(jié)(一)采用查詢方式實現(xiàn)定時和計數(shù)(1)確定工作方式、計數(shù)器或定時器模式及啟動控制方式,構(gòu)造方式控制碼并寫入特殊功能寄存器TMOD:MOVTMOD,#控制碼。(2)計算定時器或計數(shù)器的計數(shù)初始值,根據(jù)工作方式把初始值送人TH0、TL0或TH1、TL1。(3)啟動定時/計數(shù)器:SETBTRx,x=0,1。定時/計數(shù)器開始工作,通過查詢TFx是否為1來判斷定時或計數(shù)是否達到要求。定時器/計數(shù)器設(shè)置MCS-51單片機的定時器/計數(shù)器—使用總結(jié)(二)采用中斷方式實現(xiàn)定時和計數(shù)(1)確定工作方式、計數(shù)器或定時器模式及啟動控制方式,構(gòu)造控制碼并寫入特殊功能寄存器TMOD。(2)計算定時器或計數(shù)器的計數(shù)初始值,根據(jù)工作方式把初始值送人TH0、TL0或TH1、TL1。(3)開放CPU中斷,允許定時/計數(shù)器溢出中斷CPU的工作:對IE寄存器編程。(4)啟動定時/計數(shù)器:SETBTRx,x=0,1。當計數(shù)器溢出時,定時或計數(shù)達到要求,CPU響應中斷,程序轉(zhuǎn)移到相應的中斷處理程序入口處。MCS-51單片機的定時器/計數(shù)器—使用總結(jié)定時器/計數(shù)器設(shè)置定時/計數(shù)器有多種工作方式,每一種工作方式都能提供定時和計數(shù)功能,我們在應用中如何選擇合適的工作方式呢?(1)掌握每種工作方式下定時/計數(shù)器的工作原理和特點。(2)了解每種工作方式下定時/計數(shù)器的最大計數(shù)次數(shù)和最大定時時間。MCS-51單片機的定時器/計數(shù)器—使用總結(jié)定時器/計數(shù)器應用13位定時/計數(shù)器(方式0)最大計數(shù)次數(shù)為8192,當晶振頻率12MHz時,最大定時時間為8.192ms。16位定時/計數(shù)器(方式1)最大計數(shù)次數(shù)為65536,當晶振頻率12MHz時,最大定時時間為65.536ms。8位定時/計數(shù)器(方式2和方式3)最大計數(shù)次數(shù)為256,當晶振頻率12MHz時,最大定時時間為0.256ms。定時器/計數(shù)器應用MCS-51單片機的定時器/計數(shù)器—使用總結(jié)

前面幾節(jié)分別介紹了定時器/計數(shù)器的結(jié)構(gòu)、工作特點和幾種主要工作方式的簡單應用,下面通過一個綜合實例說明定時器/計數(shù)器的應用。工作原理【例】試設(shè)計一個不帶顯示的電子時鐘,要求根據(jù)系統(tǒng)預定初始值,每隔1sLED1閃亮一次,表明1s時間到;每隔1minLED2閃亮2次,表明1min時間到;每隔1h蜂鳴器鳴叫1次,表明整點報時。MCS-51單片機的定時器/計數(shù)器—綜合應用

分析:單片機應用系統(tǒng)設(shè)計包括兩部分內(nèi)容:一是硬件設(shè)計,二是軟件設(shè)計。首先要弄清楚系統(tǒng)功能要求,確定I/O口規(guī)劃、芯片選型、外圍器件選擇等,然后設(shè)計硬件電路。在此基礎(chǔ)上再著手軟件設(shè)計工作,也分為程序流程圖規(guī)劃設(shè)計和代碼編寫兩個步驟。最后是系統(tǒng)調(diào)試。當然這里只是關(guān)于單片機開發(fā)流程的簡要說明,具體內(nèi)容見第10章。根據(jù)題意,系統(tǒng)需要的硬件設(shè)備有單片機、2只LED、蜂鳴器,以及其他常用元件如晶振、電阻、電容、電源等。選擇12MHz晶振,分配P2.3接LED1,P2.2接LED2,P2.0接蜂鳴器。MCS-51單片機的定時器/計數(shù)器—綜合應用程序設(shè)計根據(jù)題目要求,選擇定時器T0工作在定時模式、方式1,基準定時50ms。為了提高程序運行效率和可靠性,盡可能減少中斷程序的程序量,大部分工作在主程序中完成。中斷服務(wù)程序判斷1s時間是否到并設(shè)置相應的標志位,主程序完成初始化后循環(huán)查看1s到標志位是否為1。為1則執(zhí)行對應的閃燈操作,然后依次判斷1min是否到、1h是否到等,并設(shè)置相應的標志位,根據(jù)標志位內(nèi)容執(zhí)行各自對應的操作。MCS-51單片機的定時器/計數(shù)器—綜合應用程序代碼如下:NUM_S EQU 30H;存放基準定時(50ms)的循環(huán)次數(shù)DATE_S EQU 31H;存放當前秒值DATE_M EQU 32H;存放當前分鐘值DATE_H EQU 33H;存放當前小時值LED1 BIT P2.3;定義發(fā)光二極管LE

溫馨提示

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

評論

0/150

提交評論