版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第5章MCS-51單片機(jī)的
定時(shí)器/計(jì)數(shù)器122第5章目錄5.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)
5.1.1工作方式控制寄存器TMOD
5.1.2定時(shí)器/計(jì)數(shù)器控制寄存器TCON5.2定時(shí)器/計(jì)數(shù)器的4種工作方式
5.2.1方式0
5.2.2方式1
5.2.3方式2
5.2.4方式35.3對外部輸入的計(jì)數(shù)信號的要求35.4定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用
5.4.1方式1的應(yīng)用
5.4.2方式2的應(yīng)用
5.4.3方式3的應(yīng)用
5.4.4門控制位GATEx的應(yīng)用—測量脈沖寬度
5.4.5實(shí)時(shí)時(shí)鐘的設(shè)計(jì)4內(nèi)容概要工業(yè)檢測與控制,許多場合都要用到計(jì)數(shù)或定時(shí)功能。例如,對外部脈沖進(jìn)行計(jì)數(shù),產(chǎn)生精確的定時(shí)時(shí)間等。Mcs-51片內(nèi)有兩個(gè)可編程的定時(shí)器/計(jì)數(shù)器T1、T0,可滿足需要。本章介紹定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)與功能,2種工作模式和4種工作方式,以及相關(guān)的2個(gè)特殊功能寄存器TMOD和TCON各位的定義及其編程,最后介紹定時(shí)器/計(jì)數(shù)器的編程及應(yīng)用實(shí)例。55.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)75.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)如圖5-1所示,定時(shí)器/計(jì)數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,定時(shí)器/計(jì)數(shù)器T1由特殊功能寄存器TH1、TL1構(gòu)成。
7圖5-1AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖8910具有定時(shí)器和計(jì)數(shù)器2種工作模式,4種工作方式(方式0、方式1、方式2和方式3)。屬于增計(jì)數(shù)器。TMOD用于選擇定時(shí)器/計(jì)數(shù)器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了T0、T1的狀態(tài)。T0、T1不論是工作在定時(shí)器模式還是計(jì)數(shù)器模式,都是對脈沖信號進(jìn)行計(jì)數(shù),只是計(jì)數(shù)信號的來源不同。計(jì)數(shù)器模式是對加在T0(P3.4)和T1(P3.5)兩個(gè)引腳上的外部脈沖進(jìn)行計(jì)數(shù)(見圖5-1)。定時(shí)器工作模式是對單片機(jī)的時(shí)鐘振蕩器信號經(jīng)片內(nèi)101112分頻后的內(nèi)部脈沖信號計(jì)數(shù)。由于時(shí)鐘頻率是定值,所以可根據(jù)計(jì)數(shù)值可計(jì)算出定時(shí)時(shí)間。計(jì)數(shù)器的起始計(jì)數(shù)都是從計(jì)數(shù)器初值開始的。單片機(jī)復(fù)位時(shí)計(jì)數(shù)器的初值為0,也可用指令給計(jì)數(shù)器裝入一個(gè)新的初值。AT89S51的定時(shí)器/計(jì)數(shù)器屬于增1計(jì)數(shù)器。5.1.1工作方式控制寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器的工作模式和工作方式,字節(jié)地址為89H,不能位尋址,格式如圖5-2所示。12
圖5-2
TMOD格式8位分為兩組,高4位控制T1,低4位控制T0。TMOD各位的功能。(1)GATE———門控位。
0:僅由運(yùn)行控制位TRx(x
=
0,1)來控制定時(shí)器/計(jì)數(shù)器運(yùn)行。
1:用外中斷引腳(
或
)上的電平與運(yùn)行控制位TRx共同來控制定時(shí)器/計(jì)數(shù)器運(yùn)行。1213(2)M1、M0——工作方式選擇位M1、M0共有4種編碼,對應(yīng)于4種工作方式的選擇,如表5-1所示。
(3)C/—計(jì)數(shù)器模式和定時(shí)器模式選擇位13145.1.2定時(shí)器/計(jì)數(shù)器的工作方式15
0:為定時(shí)器工作模式,對單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計(jì)數(shù)。 1:為計(jì)數(shù)器工作模式,計(jì)數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。5.1.2定時(shí)器/計(jì)數(shù)器控制寄存器TCON字節(jié)地址為88H,可位尋址,位地址為88H~8FH。格式如圖5-3所示。圖5-3TCON格式1617在第5章已介紹與外部中斷有關(guān)的低4位。這里僅介紹與定時(shí)器/計(jì)數(shù)器相關(guān)的高4位功能。(1)TF1、TF0——計(jì)數(shù)溢出標(biāo)志位。當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置“1”。使用查詢方式時(shí),此位作為狀態(tài)位供CPU查詢,但應(yīng)注意查詢有效后,應(yīng)使用軟件及時(shí)將該位清“0”。使用中斷方式時(shí),此位作為中斷請求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。(2)TR1、TR0——計(jì)數(shù)運(yùn)行控制位。TR1位(或TR0位)=
1,啟動(dòng)定時(shí)器/計(jì)數(shù)器工作的必要條件。1718TR1位(或TR0位)
=
0,停止定時(shí)器/計(jì)數(shù)器工作。該位可由軟件置“1”或清“0”。5.2定時(shí)器/計(jì)數(shù)器的4種工作方式4種工作方式分別介紹如下。5.2.1方式0M1、M0=00時(shí),被設(shè)置為工作方式0,等效邏輯結(jié)構(gòu)框圖如圖5-4所示(以定時(shí)器/計(jì)數(shù)器T1為例,TMOD.5、TMOD.4
=
00)。1819
圖5-4
定時(shí)器/計(jì)數(shù)器方式0邏輯結(jié)構(gòu)框圖13位計(jì)數(shù)器,由TLx(x
=
0,1)低5位和THx高8位構(gòu)成。TLx低5位溢出則向THx進(jìn)位,THx計(jì)數(shù)溢出則把TCON中的溢出標(biāo)志位TFx置“1”。1920圖5-2的C/位控制的電子開關(guān)決定了定時(shí)器/計(jì)數(shù)器的兩種工作模式。(1)C/=0,電子開關(guān)打在上面位置,T1(或T0)為定時(shí)器工作模式,把時(shí)鐘振蕩器12分頻后的脈沖作為計(jì)數(shù)信號。(2)C/=1,電子開關(guān)打在下面位置,T1(或T0)為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1。GATE位狀態(tài)決定定時(shí)器/計(jì)數(shù)器的運(yùn)行控制取決TRx一個(gè)條件還是TRx和
x(x
=
0,1)引腳狀態(tài)兩個(gè)條件。2021(1)GATE
=
0,A點(diǎn)(見圖5-4)電位恒為1,B點(diǎn)電位僅取決于TRx狀態(tài)。TRx
=
1,B點(diǎn)為高電平,控制端控制電子開關(guān)閉合,允許T1(或T0)對脈沖計(jì)數(shù)。TRx
=
0,B點(diǎn)為低電平,電子開關(guān)斷開,禁止T1(或T0)計(jì)數(shù)。(2)GATE
=
1,B點(diǎn)電位由(x
=
0,1)的輸入電平和TRx的狀態(tài)這兩個(gè)條件來確定。當(dāng)TRx
=
1,且=1時(shí),B點(diǎn)才為1,控制端控制電子開關(guān)閉合,允許T1(或T0)計(jì)數(shù)。故這種情況下計(jì)數(shù)器是否計(jì)數(shù)是由TRx和兩個(gè)條件來共同控制的。235.2.2方式1當(dāng)M1、M0=01時(shí),定時(shí)器/計(jì)數(shù)器工作于方式1,這時(shí)定時(shí)器/計(jì)數(shù)器的等效電路邏輯結(jié)構(gòu)如圖5-5所示。方式1和方式0的差別僅僅在于計(jì)數(shù)器的位數(shù)不同,方式1為16位計(jì)數(shù)器,由THx高8位和TLx低8位構(gòu)成(x
=
0,1),方式0則為13位計(jì)數(shù)器,有關(guān)控制狀態(tài)位的含義(GATE、C/、TFx、TRx)與方式0相同。24
24圖5-5
定時(shí)器/計(jì)數(shù)器方式1邏輯結(jié)構(gòu)框圖265.2.3方式2由于方式0和方式1的最大特點(diǎn)是計(jì)數(shù)溢出后,計(jì)數(shù)器為全0。因此在循環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在用指令反復(fù)裝入計(jì)數(shù)初值的問題。這不僅影響定時(shí)精度,也給程序設(shè)計(jì)帶來麻煩。方式2就是針對此問題而設(shè)置的。當(dāng)M1、M0為10時(shí),定時(shí)器/計(jì)數(shù)器處于工作方式2,這時(shí)定時(shí)器/計(jì)數(shù)器的等效邏輯結(jié)構(gòu)如圖5-6所示(以定時(shí)器T1為例,x=
1)。27定時(shí)器/計(jì)數(shù)器的方式2為自動(dòng)恢復(fù)初值(初值自動(dòng)裝入)的8位定時(shí)器/計(jì)數(shù)器。TLx(x
=
0,1)作為常數(shù)緩沖器,當(dāng)TLx計(jì)數(shù)溢出時(shí),在溢出標(biāo)志TFx置“1”的同時(shí),還自動(dòng)將THx中的初值送至TLx,使TLx從初值開始重新計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器的方式2工作過程如圖5-7所示。2828圖5-6
定時(shí)器/計(jì)數(shù)器方式2邏輯結(jié)構(gòu)框圖29
圖5-7
方式2工作過程該方式可省去用戶軟件中重裝初值的指令執(zhí)行時(shí)間,簡化定時(shí)初值的計(jì)算方法,可以相當(dāng)精確地確定定時(shí)時(shí)間。29345.2.4方式3是為增加一個(gè)8位定時(shí)器/計(jì)數(shù)器而設(shè),使AT89S51單片機(jī)具有3個(gè)定時(shí)器/計(jì)數(shù)器。方式3只適用于T0,T1不能工作在方式3。T1處于方式3時(shí)相當(dāng)于TR1=
0,停止計(jì)數(shù)(此時(shí)T1可用來作為串行口波特率產(chǎn)生器)。1.工作方式3下的T0TMOD的低2位為11時(shí),T0的工作方式被選為方式3,各引腳與T0的邏輯關(guān)系如圖5-8所示。定時(shí)器/計(jì)數(shù)器T0分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/、GATE、TR0、3435TF0,而TH0被固定為一個(gè)8位定時(shí)器(不能作為外部計(jì)數(shù)模式),并使用定時(shí)器T1的狀態(tài)控制位TR1和TF1,同時(shí)占用定時(shí)器T1的中斷請求源TF1。2.T0工作在方式3時(shí)T1的各種工作方式一般情況下,當(dāng)T1用作串行口的波特率發(fā)生器時(shí),T0才工作在方式3。T0處于工作方式3時(shí),T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。37
37圖5-8
定時(shí)器/計(jì)數(shù)器T0方式3的邏輯結(jié)構(gòu)框圖40(1)T1工作在方式0T1的控制字中M1、M0
=
00時(shí),T1工作在方式0,工作示意圖如圖5-9所示。
40圖5-9T0工作在方式3時(shí)T1為方式0的工作示意圖41(2)T1工作在方式1當(dāng)T1的控制字中M1、M0
=
01時(shí),T1工作在方式1,工作示意圖如圖5-10所示。
41圖5-10T0工作在方式3時(shí)T1為方式1的工作示意圖42(3)T1工作在方式2當(dāng)T1的控制字中M1、M0
=
10時(shí),T1的工作方式為方式2,工作示意圖如圖5-11所示。
42圖5-11
T0工作在方式3時(shí)T1為方式2的工作示意圖43(4)T1設(shè)置在方式3當(dāng)T0設(shè)置在方式3,再把T1也設(shè)成方式3,此時(shí)T1停止計(jì)數(shù)。5.3對外部輸入的計(jì)數(shù)信號的要求當(dāng)定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來自外部輸入引腳T0或T1。當(dāng)輸入信號產(chǎn)生負(fù)跳變時(shí),計(jì)數(shù)器的值增1。每個(gè)機(jī)器周期的S5P2期間,都對外部輸入引腳T0或T1進(jìn)行采樣。如在第一個(gè)機(jī)器周期中采得的值為1,而在下一個(gè)機(jī)器周期中采得的值為0,則在緊跟著的再下一個(gè)機(jī)器周期S3P144期間,計(jì)數(shù)器加1。由于確認(rèn)一次負(fù)跳變要花2個(gè)機(jī)器周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。對于外部輸入信號的占空比并沒有什么限制,但為了確保某一給定電平在變化之前能被采樣一次,則這一電平至少要保持一個(gè)機(jī)器周期。45故對外部輸入信號的要求如圖5-12所示,圖中,Tcy為機(jī)器周期。
45圖5-12
對外部計(jì)數(shù)輸入信號的要求465.4定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用4種方式,方式0與方式1基本相同,只是計(jì)數(shù)位數(shù)不同。5.4.1方式1的應(yīng)用【例5-1】假設(shè)系統(tǒng)時(shí)鐘頻率采用6MHz,在P1.0引腳上輸出一個(gè)周期為2ms的方波,如圖5-13所示。46圖5-13P1.0引腳上輸出周期為2ms的方波47基本思想:方波周期T0確定,T0每隔1ms計(jì)數(shù)溢出1次,即T0每隔1ms產(chǎn)生一次中斷,CPU響應(yīng)中斷后,在中斷服務(wù)子程序中對P1.0取反,如圖5-13所示。為此要做如下幾步工作。(1)計(jì)算計(jì)數(shù)初值X
機(jī)器周期
=
2s
=
2
10?6s設(shè)需要裝入T0的初值為X,則有(216?X)210?6=1
10?3,216?X=500,X=65036。X化為十六進(jìn)制數(shù),即:
65036
=
FE0CH
。T0的初值為TH0=FEH,TL0=
0CH。4748(2)初始化程序設(shè)計(jì)采用定時(shí)器中斷方式工作。包括定時(shí)器初始化和中斷系統(tǒng)初始化,主要是對寄存器IP、IE、TCON、TMOD的相應(yīng)位進(jìn)行正確的設(shè)置,并將計(jì)數(shù)初值送入定時(shí)器中。(3)程序設(shè)計(jì)中斷服務(wù)子程序除了完成所要求的產(chǎn)生方波的工作之外,還要注意將計(jì)數(shù)初值重新裝入定時(shí)器,為下一次產(chǎn)生中斷做準(zhǔn)備。本例,主程序用一條轉(zhuǎn)至自身的短跳轉(zhuǎn)指令來代替。4849參考程序如下:
ORG 0000H
;程序入口RESET: AJMPMAIN ;轉(zhuǎn)主程序 ORG 000BH ;T0中斷入口 AJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P
ORG0100H
;主程序入口
MAIN: MOVSP,#60H ;設(shè)堆棧指針 MOVTMOD,#01H ;設(shè)置T0為方式1定時(shí) ACALLPT0M0 ;調(diào)用初始化子程序PT0M0HERE:
AJMPHERE ;原地循環(huán),等待中斷4950PT0M0:MOVTL0,#0CH ;T0初始化,裝初值的低8位 MOVTH0,#0FEH ;裝初值的高8位 SETBET0 ;允許T0中斷 SETBEA ;總中斷允許 SETBTR0 ;啟動(dòng)T0 RETIT0P:
MOVTL0,#0CH ;中斷子程序,T0重裝初值 MOVTH0,#0FEH CPL P1.0 ;P1.0的狀態(tài)取反 RETI程序說明:當(dāng)單片機(jī)復(fù)位時(shí),從程序入口0000H跳向主程序MAIN處執(zhí)行。其中調(diào)用了T0初始化子程序PT0M0。5051子程序返回后,程序執(zhí)行“AJMPHERE”指令,則循環(huán)等待。當(dāng)響應(yīng)T0定時(shí)中斷時(shí),則跳向T0中斷入口,再從T0中斷入口跳向IT0P標(biāo)號處執(zhí)行T0中斷服務(wù)子程序。當(dāng)執(zhí)行完中斷返回的指令“RETI”后,又返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行循環(huán)指令“AJMPHERE”。在實(shí)際的程序中,“AJMPHERE”實(shí)際上是一段主程序。當(dāng)下一次定時(shí)器T0的1ms定時(shí)中斷發(fā)生時(shí),再跳向T0中斷入口,從而重復(fù)執(zhí)行上述過程。如CPU不做其他工作,也可用查詢方式進(jìn)行控制,程序要簡單得多。5152查詢方式參考程序:
MOV TMOD,#01H ;設(shè)置T0為方式1LOOP: MOV TH0,#0FEH ;T0置初值 MOV TL0,#0CH SETB TR0 ;接通T0LOOP1:JNB TF0,LOOP1;查TF0,TF0
=0,T0未溢出;
;TF0
=1,T0溢出, CLR TR0 ;T0溢出,關(guān)斷T0 CPL P1.0 ;P1.0的狀態(tài)求反 SJMP LOOP查詢程序雖簡單,但CPU必須要不斷查詢TF0標(biāo)志,工作效率低。5253【例5-2】系統(tǒng)時(shí)鐘為6MHz,編寫定時(shí)器T0產(chǎn)生1s定時(shí)的程序?;舅枷耄翰捎枚〞r(shí)器模式。因定時(shí)時(shí)間較長,首先確定采用哪一種工作方式。時(shí)鐘為6MHz的條件下,定時(shí)器各種工作方式最長可定時(shí)時(shí)間:方式0最長可定時(shí)15.384ms;方式1最長可定時(shí)131.072ms;方式2最長可定時(shí)512s。由上可見,可選方式1,每隔100ms中斷一次,中斷10次為1s。5354(1)計(jì)算計(jì)數(shù)初值X因?yàn)?216
?
X)
2
10?6
=
10?1,所以X
=
15536
=
3CB0H。因此TH0
=
3CH,TL0
=
B0H。(2)10次計(jì)數(shù)的實(shí)現(xiàn)對于中斷10次的計(jì)數(shù),采用B寄存器作為中斷次數(shù)計(jì)數(shù)器。(3)程序設(shè)計(jì)參考程序如下:
ORG 0000H
;程序運(yùn)行入口RESET:LJMPMAIN ;跳向主程序入口MAIN
ORG 000BH
;T0的中斷入口 LJMP IT0P ;轉(zhuǎn)T0中斷處理子程序IT0P
ORG 1000H
;主程序入口5455MAIN:
MOV SP,#60H ;設(shè)堆棧指針 MOV B,#0AH ;設(shè)循環(huán)次數(shù)10次 MOV TMOD,#01H ;設(shè)置T0工作在方式1定時(shí) MOV TL0,#0B0H ;給T0設(shè)初值 MOV TH0,#3CH SETB ET0 ;允許T0中斷 SETB EA ;總中斷允許 SETB TR0 ;啟動(dòng)T0HERE: SJMP HERE ;原地循環(huán),等待中斷5556IT0P:
MOV TL0,#0B0H ;T0中斷子程序,T0重裝初值 MOV TH0,#3CH DJNZ B,RTURN ;B中斷次數(shù)計(jì)數(shù),減1非0則 ;中斷返回
CLR TR0 ;1s定時(shí)時(shí)間到,停止T0工作 SETB F0 ;1s定時(shí)時(shí)間到標(biāo)志F0置1RTURN:RETI程序說明:不論1s定時(shí)時(shí)間是否已到,都返回到“SJMPHERE”指令處?!癝JMPHERE”指令實(shí)際是一段主程序。在這段主程序中再通過對F0標(biāo)志的判定,可知1s定時(shí)是否到,再進(jìn)行具體處理。56575.4.2方式2的應(yīng)用方式2是一個(gè)可以自動(dòng)重新裝載初值的8位計(jì)數(shù)器/定時(shí)器??墒∪ブ匮b初值指令。當(dāng)某個(gè)定時(shí)器/計(jì)數(shù)器不使用時(shí),可擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外中斷源。【例5-3】擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器/計(jì)數(shù)器T0腳作為外部中斷請求輸入端,溢出標(biāo)志TF0作為外中斷請求標(biāo)志?;舅枷耄涸O(shè)為方式2(自動(dòng)裝入常數(shù)方式)計(jì)數(shù)模式,TH0、TL0初值均為0FFH。當(dāng)T0腳發(fā)生負(fù)跳變時(shí),T0計(jì)數(shù)溢出,TF0置“1”,單片機(jī)發(fā)出中斷請求。5758初始化程序:
ORG 0000H AJMP IINI ;跳到初始化程序
ORG 000BH AJMP IT0P ;跳到外中斷處理程序IINI:
MOV TMOD,#06H ;設(shè)置T0為方式2 MOVTL0,#0FFH ;設(shè)T0初值 MOVTH0,#0FFH SETBET0 ;允許T0中斷 SETBEA ;總中斷允許 SETB TR0 ;啟動(dòng)T0
……IT0P:
外中斷處理程序段
……5859程序說明:當(dāng)連接在P3.4(T0腳)的外部中斷請求輸入腳電平發(fā)生負(fù)跳變時(shí),TL0加1,產(chǎn)生溢出,TF0置“1”,向單片機(jī)發(fā)出中斷請求,同時(shí)TH0的內(nèi)容0FFH送TL0,即TL0恢復(fù)初值0FFH。P3.4腳相當(dāng)于一個(gè)負(fù)跳沿觸發(fā)的外中斷請求源輸入。對P3.5也可做類似的處理。【例5-4】當(dāng)T0(P3.4)引腳上發(fā)生負(fù)跳變時(shí),作為P1.0引腳產(chǎn)生方波的啟動(dòng)信號。開始從P1.0腳上輸出一個(gè)周期為1ms的方波,如圖5-14所示(系統(tǒng)時(shí)鐘6MHz)。5960基本思想:T0設(shè)為方式1計(jì)數(shù),初值為FFFFH。當(dāng)外部計(jì)數(shù)輸入端T0(P3.4)發(fā)生一次負(fù)跳變時(shí),T0加1且溢出,溢出標(biāo)志TF0置“1”,向CPU發(fā)出中斷請求,此時(shí)T0相當(dāng)于一個(gè)負(fù)跳沿觸發(fā)的外部中斷源。進(jìn)入T0中斷程序后,F(xiàn)0標(biāo)志置“1”,說明T0引腳上已接收過負(fù)跳變信號。T1定義為方式2定時(shí)。在T0引腳產(chǎn)生一次負(fù)跳變后,啟動(dòng)T1每500s產(chǎn)生一次中斷,在中斷服務(wù)子程序中對P1.0求反,使P1.0產(chǎn)生周期1ms的方波。由于省去重新裝初值指令,所以可產(chǎn)生精確的定時(shí)時(shí)間。6061
61圖5-14負(fù)跳變觸發(fā)輸出一個(gè)周期為1ms的方波62(2)計(jì)算T1的初值設(shè)T1的初值為x,則 (28
?
x)
2
10?6
=
5
10?4 x
=
28
?
250
=
6
=
06H(3)程序設(shè)計(jì)參考程序:
ORG0000H ;程序入口RESET:LJMPMAIN ;跳向主程序MAIN
ORG 000BH ;T0的中斷入口 LJMPIT0P ;轉(zhuǎn)T0中斷服務(wù)程序
ORG001BH
;T1的中斷入口
6263 LJMPIT1P ;轉(zhuǎn)T1中斷服務(wù)程序
ORG0100H
;主程序入口MAIN: MOVSP,#60H ;設(shè)堆棧指針 ACALLPT0M2 ;調(diào)用對T0,T1初始化子程序LOOP:
MOVC,F(xiàn)0 ;T0是否產(chǎn)生過中斷,若產(chǎn)生 ;過,F(xiàn)0置1 JNC LOOP ;T0未產(chǎn)生中斷,C=0,則跳 ;到LOOP,等待T0中斷 SETBET1 ;允許T1產(chǎn)生定時(shí)中斷 SETBTR1 ;啟動(dòng)T1HERE: AJMPHERE6364PT0M2:MOVTMOD,#26H ;對T0,T1初始化,T0方式1 ;計(jì)數(shù),T1方式2定時(shí) MOVTL0,#0FFH ;T0置初值 MOVTH0,#0FFH SETBET0 ;允許T0中斷 MOVTL1,#06H ;T1置初值 MOVTH1,#06H CLR F0 ;把T0已發(fā)生中斷標(biāo)志F0清0 SETBEA ;總中斷允許 SETBTR0 ;啟動(dòng)T0 RET6465IT0P:
CLR TR0 ;T0中斷服務(wù)程序,停止T0計(jì)數(shù) SETB F0;把T0引腳接收過負(fù)脈沖標(biāo)志F0置1, ;即接收過負(fù)跳變 RETIIT1P:
CPL P1.0 ;T1中斷服務(wù)程序,P1.0位取反 RETI程序說明:當(dāng)單片機(jī)復(fù)位時(shí),從0000H跳向主程序MAIN處執(zhí)行程序。其中調(diào)用了對T0,T1初始化子程序PT0M2。子程序返回后執(zhí)行標(biāo)號LOOP處指令,循環(huán)等待T0引腳上負(fù)脈沖的到來。由于負(fù)脈沖到來的標(biāo)志位F0的復(fù)位初始值為0,所以程序就在標(biāo)號LOOP處循環(huán)等待。6566當(dāng)T0(P3.4)腳發(fā)生負(fù)跳變時(shí),由于T0計(jì)數(shù)溢出,則跳向T0中斷服務(wù)子程序。此時(shí)停止T0計(jì)數(shù),并把T0引腳接收過負(fù)脈沖的標(biāo)志F0置1。當(dāng)中斷返回時(shí),由于F0已被置1,則程序跳出LOOP處的循環(huán)等待。此時(shí)執(zhí)行指令來允許T1中斷,并啟動(dòng)T1定時(shí),然后執(zhí)行“AJMPHERE”指令,循環(huán)等待,等待T1的500s定時(shí)中斷到來。當(dāng)T1的500s定時(shí)中斷產(chǎn)生時(shí),則進(jìn)入T1的中斷服務(wù)子程序IT1P,把P1.0腳電平取反。由于是自動(dòng)裝初值,省去對T1重裝初值指令。中斷返回后,到“AJMPHERE”處等待T1的500s定時(shí)中斷。如此重復(fù),即得到圖5-14波形。6667【例5-5】
利用定時(shí)器T1的方式2計(jì)數(shù),每計(jì)滿100個(gè)數(shù),將P1.0取反。本例是方式2計(jì)數(shù)模式的應(yīng)用舉例。(1)選擇工作方式外部信號由T1(P3.5)引腳輸入,每發(fā)生一次負(fù)跳變計(jì)數(shù)器便加1,每輸入100個(gè)脈沖,計(jì)數(shù)器將產(chǎn)生溢出中斷,在中斷服務(wù)程序中將P1.0取反一次。T1工作在方式2的控制字TMOD
=
60H。不使用T0時(shí),TMOD低4位任取,但不能使T0為方式3,這里取全0。(2)計(jì)算T1的初值
X
=
28
?
100
=
156
=
9CHTL1的初值為9CH,重裝初值寄存器TH1
=
9CH。6768(3)參考程序:
ORG 0000H
;程序運(yùn)行入口 LJMP MAIN ;跳向主程序MAIN
ORG 001BH
;T1中斷服務(wù)程序入口 CPL P1.0 ;P1.0位取反 RETI
ORG 0100H
;主程序入口MAIN: MOV TMOD,#60H ;設(shè)置T1為方式2計(jì)數(shù) MOV TL0,#9CH ;T0置初值 MOV TH0,#9CH SETB TR1 ;啟動(dòng)T1HERE: AJMP HERE END6869程序說明:由于T1的中斷服務(wù)子程序只有兩條指令,不超過8個(gè)字節(jié),所以進(jìn)入T1中斷服務(wù)程序入口后,沒有選擇再跳轉(zhuǎn)。5.4.3方式3的應(yīng)用方式3下的T0和T1大不相同。T0工作在方式3,TL0和TH0被分成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器。其中,TL0可作為8位的定時(shí)器/計(jì)數(shù)器,而TH0只能作為8位的定時(shí)器。此時(shí)T1只能工作在方式0、1或2。一般情況下,當(dāng)T1用作串行口波特率發(fā)生器時(shí),T0才設(shè)置為方式3。此時(shí),常把定時(shí)器T1設(shè)置為方式2,用作波特率發(fā)生器。6970【例5-6】假設(shè)某MCS-51單片機(jī)應(yīng)用系統(tǒng)的兩個(gè)外部中斷源已被占用,設(shè)置T1工作在方式2,用作波特率發(fā)生器。現(xiàn)要求增加一個(gè)外部中斷源,并控制P1.0引腳輸出一個(gè)5kHz(周期為200s)的方波。設(shè)時(shí)鐘為12MHz?;舅枷耄涸O(shè)置TL0工作在方式3計(jì)數(shù)模式,TL0的初值設(shè)為0FFH,當(dāng)檢測到T0腳信號出現(xiàn)負(fù)跳變時(shí),TL0溢出,同時(shí)向CPU申請中斷,這里T0腳作為一個(gè)負(fù)跳沿觸發(fā)的外部中斷請求輸入端。在中斷處理子程序中,啟動(dòng)TH0,TH0事先被設(shè)置為方式3的100s定時(shí),從而控制P1.0輸出周期為200s的方波信號,如圖5-15所示。7071
71圖5-15定時(shí)器P1.0輸出的方波信號72(1)初值X計(jì)算TL0的初值設(shè)為0FFH。5kHz方波的周期為200s,因此TH0的定時(shí)時(shí)間為100s。初值X計(jì)算:(28
?
X)
1
10?6
=
1
10?4 X
=
28
?
100
=
156
=
9CH(2)程序設(shè)計(jì)
ORG 0000HLJMP MAIN
ORG 000BH ;TL0中斷入口,TL0使用T0的中斷LJMPTL0INT ;跳向TL0中斷服務(wù)程序,
TL0占用T0中斷
7273
ORG001BH ;TH0中斷入口,T1為方式3時(shí),TH0 ;使用了T1的中斷 LJMPTH0INT ;跳向TH0中斷服務(wù)程序
ORG0100H ;主程序入口MAIN:
MOV TMOD,#27H ;T0方式3,T1方式2定時(shí)作串 ;行口波特率發(fā)生器 MOV TL0,#0FFH ;置TL0初值 MOV TH0,#9CH ;置TH0初值 MOV TL1,#datal ;TL1裝入串口波特率常數(shù) MOV TH1,#datah ;TH1裝入串口波特率常數(shù) MOV TCON,#55H ;允許T0中斷
7374 MOV IE,#9FH ;設(shè)置中斷允許,總中斷允許,
;TH0、TL0中斷允許HERE:
AJMPHERE
;循環(huán)等待TL0INT:MOVTL0,#0FFH ;TL0中斷服務(wù)處理子程序,TL0
;重新裝入初值 SETBTR1 ;開始啟動(dòng)TH0定時(shí) RETITH0INT:MOVTH0,#9CH ;TH0中斷服務(wù)程序,TH0重新 ;裝入初值 CPL P1.0 ;P1.0位取反輸出 RETI 74755.4.4門控制位GATEx的應(yīng)用—測量脈沖寬度介紹門控制位GATE的具體應(yīng)用,測量
(P3.3)引腳上正脈沖的寬度?!纠?-7】門控位GATE1可使T1的啟動(dòng)計(jì)數(shù)受的控制,當(dāng)GATE1
=
1,TR1=1時(shí),只有
INT1*引腳輸入高電平時(shí),T1才被允許計(jì)數(shù)。可測量
引腳(P3.3)上正脈沖的寬度。其方法如圖5-16所示。
75圖5-16利用GATE位測量正脈沖的寬度76參考程序:
ORG 0000HRESET:AJMPMAIN ;復(fù)位入口轉(zhuǎn)主程序
ORG0100H
;主程序入口MAIN:
MOV SP,#60H MOV TMOD,#90H ;向TMOD寫控制字,T1為方 ;式1定時(shí),GATE1
=
1 MOV TL1,#00H MOV TH1,#00HLOOP0:JB P3.3,LOOP0 ;等待
低
SETBTR1 ;如
為低,啟動(dòng)T17677LOOP1:JNBP3.3,LOOP1;等待
升高LOOP2:JBP3.3,LOOP2;為高,此時(shí)計(jì)數(shù)器計(jì)數(shù), ;等待
降低
CLRTR1;停止T1計(jì)數(shù) MOV A,TL1;T1計(jì)數(shù)值送A ;將T1計(jì)數(shù)值送顯示器
…… END執(zhí)行以上程序,使
引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式顯示在顯示器上。77將A中的T1計(jì)數(shù)值送到顯示器顯示785.4.5實(shí)時(shí)時(shí)鐘的設(shè)計(jì)介紹使用定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)時(shí)鐘。1.實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘的基本思想最小計(jì)時(shí)單位是秒,如何獲得1s的定時(shí)時(shí)間呢?從前面介紹知,定時(shí)器方式1,最大定時(shí)時(shí)間也只能131ms??蓪⒍〞r(shí)器的定時(shí)時(shí)間定為100ms,中斷方式進(jìn)行溢出次數(shù)的累計(jì),計(jì)滿10次,即得秒計(jì)時(shí)。而計(jì)數(shù)10次可用循環(huán)程序的方法實(shí)現(xiàn)。初值的計(jì)算如例5-2。片內(nèi)RAM規(guī)定3個(gè)單元為秒、分、時(shí)單元:42H:“秒”單元;41H:“分”單元;40H:“時(shí)”單元7879從秒到分,從分到時(shí)是通過軟件累加并比較來實(shí)現(xiàn)。要求每滿1秒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 15MW農(nóng)光互補(bǔ)發(fā)電項(xiàng)目-接入系統(tǒng)設(shè)計(jì)報(bào)告
- 2024年二級造價(jià)師考試題庫4
- 第05課 網(wǎng)絡(luò)協(xié)議分層設(shè) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年人教版(2024)初中信息技術(shù)七年級全一冊
- 商貿(mào)公司進(jìn)貨合同范例
- 鄭州餐飲連鎖加盟合同范例
- 寫字樓商鋪招租合同范例
- 電瓶定采購合同范例
- 以店面入股合同范例
- 園林購樹合同范例
- 土地合作建設(shè)合同范例
- 氯氫處理裝置工藝
- 生物工程論文 年產(chǎn)6萬噸11°P啤酒廠發(fā)酵車間工藝設(shè)計(jì)
- 通力電梯KCE電氣系統(tǒng)學(xué)習(xí)指南
- windows7 操作系統(tǒng)
- 門窗施工組織設(shè)計(jì)與方案
- 鋼筋統(tǒng)計(jì)表(插圖有尺寸)
- 食品安全管理體系培訓(xùn)系列教材(共44頁).ppt
- 世界各地的新年習(xí)俗(課堂PPT)
- 生物礦化與仿生材料的研究現(xiàn)狀及展望
- JJF 1827-2020水泥細(xì)度負(fù)壓篩析儀校準(zhǔn)規(guī)范
- 物業(yè)項(xiàng)目月度績效考核表格
評論
0/150
提交評論