第6章 定時器計數(shù)器_第1頁
第6章 定時器計數(shù)器_第2頁
第6章 定時器計數(shù)器_第3頁
第6章 定時器計數(shù)器_第4頁
第6章 定時器計數(shù)器_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章AT89S51單片機的

定時器/計數(shù)器12第6章目錄6.1定時器/計數(shù)器的結構

6.1.1工作方式控制寄存器TMOD

6.1.2定時器/計數(shù)器控制寄存器TCON6.2定時器/計數(shù)器的4種工作方式

6.2.1方式0

6.2.2方式1

6.2.3方式2

6.2.4方式36.3對外部輸入的計數(shù)信號的要求6.4定時器/計數(shù)器的編程和應用

6.4.1方式1的應用

6.4.2方式2的應用

6.4.3方式3的應用

6.4.4門控制位GATEx的應用—測量脈沖寬度

6.4.5實時時鐘的設計36.1定時器/計數(shù)器的結構定時器/計數(shù)器結構如圖6-1所示,定時器/計數(shù)器T0由特殊功能寄存器TH0、TL0構成,定時器/計數(shù)器T1由特殊功能寄存器TH1、TL1構成。

4圖6-1AT89S51單片機的定時器/計數(shù)器結構框圖具有定時器和計數(shù)器2種工作模式,4種工作方式(方式0、方式1、方式2和方式3)。屬于增計數(shù)器。TMOD用于選擇定時器/計數(shù)器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的啟動和停止計數(shù),同時包含了T0、T1的狀態(tài)。T0、T1不論是工作在定時器模式還是計數(shù)器模式,都是對脈沖信號進行計數(shù),只是計數(shù)信號的來源不同。計數(shù)器模式是對加在T0(P3.4)和T1(P3.5)兩個引腳上的外部脈沖進行計數(shù)(見圖6-1)。定時器工作模式是對單片機的時鐘振蕩器信號經(jīng)片內512分頻后的內部脈沖信號計數(shù)。由于時鐘頻率是定值,所以可根據(jù)計數(shù)值計算出定時時間。計數(shù)器的起始計數(shù)都是從計數(shù)器初值開始的。單片機復位時計數(shù)器的初值為0,也可用指令給計數(shù)器裝入一個新的初值。6.1.1工作方式控制寄存器TMOD用于選擇定時器/計數(shù)器的工作模式和工作方式,字節(jié)地址為89H,不能位尋址,格式如圖6-2所示。67(1)GATE———門控位。

0:僅由運行控制位TRx(x

=

0,1)來控制定時器/計數(shù)器運行。

1:用外中斷引腳(

)上的電平與運行控制位TRx共同來控制定時器/計數(shù)器運行。(2)M1、M0——工作方式選擇位M1、M0共有4種編碼,對應于4種工作方式的選擇,如表6-1所示。8

GATE=1時,只有INT0(INT1)引腳為高電平時,且由軟件使TR0(TR1)置1時才能啟動定時器工作,即以外部中斷啟動定時器;當GATE=0時,只要用軟件使TR0(或TR1)置位就可以啟動定時器工作,不需要參考INT0或INT1的狀態(tài)。

中斷

(3)C/—計數(shù)器模式和定時器模式選擇位

0:為定時器工作模式,對單片機的晶體振蕩器12分頻后的脈沖進行計數(shù)。 1:為計數(shù)器工作模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負跳變)計數(shù)。106.1.2定時器/計數(shù)器控制寄存器TCON字節(jié)地址為88H,可位尋址,位地址為88H~8FH。

①TF1——定時器/計數(shù)器T1的溢出中斷請求標志位。當CPU

響應中斷時,硬件將自動對TF1清0。

②TF0——定時器/計數(shù)器T0的溢出中斷請求標志位。含義與

TF1相同。

③IE1——外部中斷1的中斷請求標志。當CPU響應該中斷請求

時,由硬件使IE1清0。

④IT1——外部中斷1的中斷觸發(fā)方式控制位。

⑤IE0——外部中斷0的中斷請求標志。其含義與IE1相同。

⑥IT0——外部中斷0的中斷觸發(fā)方式控制位。其含義與IT1類同。116.2定時器/計數(shù)器的4種工作方式4種工作方式分別介紹如下。6.2.1方式0M1、M0=00時,被設置為工作方式0,等效邏輯結構框圖如圖6-4所示(以定時器/計數(shù)器T1為例,TMOD.5、TMOD.4

=

00)。121、模式0及應用

模式0是選擇定時器(T0或T1)的高8位和低5位組成的一個13位定時器/計數(shù)器。下圖是在T1模式0時的邏輯電路結構。13

C/T=0時,控制開關接通振蕩器12分頻輸出端,T1對機器周期計數(shù)。這就是定時工作方式。其定時時間為

t=(213–T初值)×振蕩周期×12

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

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

該模式對應的是一個16位的定時器/計數(shù)器,見下圖。其結構與操作幾乎與模式0完全相同,唯一的差別是:在模式1中,寄存器TH0和TL0是以全部16位參與操作。用于定時工作方式時,定時時間為

t=(216–T0初值)×振蕩周期×12

用于計數(shù)工作方式時,計數(shù)長度為216=65536(個外部脈沖)。如果fOSC=6MHz,則最大定時時間為:

T0(或T1)模式1結構——16位計數(shù)器176.2.3方式2模式2把TL0(或TL1)配置成一個可以自動重裝載的8位定時器/計數(shù)器,如圖所示。

T0(或T1)模式2結構——8位計數(shù)器

TL0計數(shù)溢出時,不僅使溢出中斷標志位TF0置1,而且還自動把TH0中的內容重新裝載到TL0中。這里,16位計數(shù)器被拆成二個,TL0用作8位計數(shù)器,TH0用以保護初值。在程序初始化時,TL0和TH0由軟件賦予相同的初值。一旦TL0計數(shù)溢出,便置位TF0,并將TH0中的初值再自動裝入TL0,繼續(xù)計數(shù),循環(huán)重復。用于定時工作模式時,其定時時間(TF0溢出周期)為

t=(28-TH0初值)×振蕩周期×12

用于計數(shù)工作方式時,最大計數(shù)長度(TH0初值=0)為28=256(個外部脈沖)。這種工作模式可省去用戶軟件中重裝常數(shù)的語句,并可產生相當精確的定時時間,特別適于串行口波特率發(fā)生器。19

例:利用定時器T1的模式2對外部信號計數(shù)。要求每計滿100次,將P1.0端取反。

解:(1)選擇模式外部信號由T1(P3.5)引腳輸入,每發(fā)生一次負跳變計數(shù)器加1,每輸入100個脈沖,計數(shù)器發(fā)生溢出中斷,中斷服務器將P1.0取反一次。

T1計數(shù)工作方式模式2的模式字為TMOD=60H。T0不用時,TMOD的低4位可任取,但不能使T0進入模式3,一般取0。

(2)計算T1的計數(shù)初值

X=28-100=156D=9CH因此,TL1的初值為9CH,重裝初值寄存器TH1=9CH。20

(3)程序清單

MAIN:MOVTMOD,#60H;置T1為模式2計數(shù)工作方式

MOVTL1,#9CH;賦初值

MOVTH1,#9CHSETBEASETBET1;定時器T1開中斷

SETBTR1;啟動計數(shù)器

HERE:SJMPHERE;等待中斷

ORG001BH;中斷服務程序入口

CPLP1.0RETI216.2.4方式3

工作模式3對T0和T1大不相同。若將T0設置為模式3,是將T0分為一個8位定時/計數(shù)器和一個8位定時器,其中TL0是8位定時器/計數(shù)器,TH0只是8位定時器。221、TH0計數(shù)脈沖來自內部fosc,所以它只能處于”定時”方式;2、TH0分別借用了定時器T1的TR1和TF1為自己服務,使TH0能象TL0那樣用TR1啟動定時,并用TF1來作為TH0的溢出中斷的標志;3、此時,由于T1缺少了啟動控制信號TR1和溢出中斷標志TR1,那么在模式3時,T1是如何啟動和工作?沒有溢出中斷標志TF1,則T1就不用中斷方式工作(實際上連查詢也不行);沒有啟動控制信號TR1,可以讓它在模式3之前就開始工作,并且讓它事先設定為自動重裝模式.4、模式3就是將單片機原有的T0,T1兩個計數(shù)器變成三個獨立的計數(shù)器,其中T1要事先設定為模式2(串行口的波特率發(fā)生器)并啟動起來。23模式3時T0,T1的電路結構定時/計數(shù)器4種模式比較6.3對外部輸入的計數(shù)信號的要求當定時器/計數(shù)器工作在計數(shù)器模式時,計數(shù)脈沖來自外部輸入引腳T0或T1。當輸入信號產生負跳變時,計數(shù)器的值增1。每個機器周期的S5P2期間,都對外部輸入引腳T0或T1進行采樣。如在第一個機器周期中采得的值為1,而在下一個機器周期中采得的值為0,則在緊跟著的再下一個機器周期S3P126期間,計數(shù)器加1。由于確認一次負跳變要花2個機器周期,因此外部輸入的計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。對于外部輸入信號的占空比并沒有什么限制,但為了確保某一給定電平在變化之前能被采樣一次,則這一電平至少要保持一個機器周期。27故對外部輸入信號的要求如圖6-12所示,圖中,Tcy為機器周期。

28圖6-12

對外部計數(shù)輸入信號的要求6.4定時器/計數(shù)器的編程和應用4種方式,方式0與方式1基本相同,只是計數(shù)位數(shù)不同。方式0初值計算復雜,一般不用方式0,而用方式1。6.4.1方式1的應用【例6-1】假設系統(tǒng)時鐘頻率采用6MHz,在P1.0引腳上輸出一個周期為2ms的方波,如圖6-13所示。29圖6-13P1.0引腳上輸出周期為2ms的方波基本思想:方波周期T0確定,T0每隔1ms計數(shù)溢出1次,即T0每隔1ms產生一次中斷,CPU響應中斷后,在中斷服務子程序中對P1.0取反,如圖6-13所示。為此要做如下幾步工作。(1)計算計數(shù)初值X

機器周期

=

2s

=

2

10?6s設需要裝入T0的初值為X,則有(216?X)210?6=1

10?3,216?X=500,X=65036。X化為十六進制數(shù),即:

65036

=

FE0CH

。T0的初值為TH0=FEH,TL0=

0CH。30(2)初始化程序設計采用定時器中斷方式工作。包括定時器初始化和中斷系統(tǒng)初始化,主要是對寄存器IP、IE、TCON、TMOD的相應位進行正確的設置,并將計數(shù)初值送入定時器中。(3)程序設計中斷服務子程序除了完成所要求的產生方波的工作之外,還要注意將計數(shù)初值重新裝入定時器,為下一次產生中斷做準備。本例,主程序用一條轉至自身的短跳轉指令來代替。31參考程序如下:

ORG 0000H

;程序入口RESET: AJMPMAIN ;轉主程序 ORG 000BH ;T0中斷入口 AJMPIT0P ;轉T0中斷處理程序IT0P

ORG0100H

;主程序入口

MAIN: MOVSP,#60H ;設堆棧指針 MOVTMOD,#01H ;設置T0為方式1定時 ACALLPT0M0 ;調用初始化子程序PT0M0HERE:

AJMPHERE ;原地循環(huán),等待中斷32PT0M0:MOVTL0,#0CH ;T0初始化,裝初值的低8位 MOVTH0,#0FEH ;裝初值的高8位 SETBET0 ;允許T0中斷 SETBEA ;總中斷允許 SETBTR0 ;啟動T0 RETIT0P:

MOVTL0,#0CH ;中斷子程序,T0重裝初值 MOVTH0,#0FEH CPL P1.0 ;P1.0的狀態(tài)取反 RETI程序說明:當單片機復位時,從程序入口0000H跳向主程序MAIN處執(zhí)行。其中調用了T0初始化子程序PT0M0。33子程序返回后,程序執(zhí)行“AJMPHERE”指令,則循環(huán)等待。當響應T0定時中斷時,則跳向T0中斷入口,再從T0中斷入口跳向IT0P標號處執(zhí)行T0中斷服務子程序。當執(zhí)行完中斷返回的指令“RETI”后,又返回斷點處繼續(xù)執(zhí)行循環(huán)指令“AJMPHERE”。在實際的程序中,“AJMPHERE”實際上是一段主程序。當下一次定時器T0的1ms定時中斷發(fā)生時,再跳向T0中斷入口,從而重復執(zhí)行上述過程。如CPU不做其他工作,也可用查詢方式進行控制,程序要簡單得多。34查詢方式參考程序:

MOV TMOD,#01H ;設置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溢出,關斷T0 CPL P1.0 ;P1.0的狀態(tài)求反 SJMP LOOP查詢程序雖簡單,但CPU必須要不斷查詢TF0標志,工作效率低。35【例6-2】系統(tǒng)時鐘為6MHz,編寫定時器T0產生1s定時的程序?;舅枷耄翰捎枚〞r器模式。因定時時間較長,首先確定采用哪一種工作方式。時鐘為6MHz的條件下,定時器各種工作方式最長可定時時間:方式0最長可定時16.384ms;方式1最長可定時131.072ms;方式2最長可定時512s。由上可見,可選方式1,每隔100ms中斷一次,中斷10次為1s。36(1)計算計數(shù)初值X因為(216

?

X)

2

10?6

=

10?1,所以X

=

15536

=

3CB0H。因此TH0

=

3CH,TL0

=

B0H。(2)10次計數(shù)的實現(xiàn)對于中斷10次的計數(shù),采用B寄存器作為中斷次數(shù)計數(shù)器。(3)程序設計參考程序如下:

ORG 0000H

;程序運行入口RESET:LJMPMAIN ;跳向主程序入口MAIN

ORG 000BH

;T0的中斷入口 LJMP IT0P ;轉T0中斷處理子程序IT0P

ORG 1000H

;主程序入口37MAIN:

MOV SP,#60H ;設堆棧指針 MOV B,#0AH ;設循環(huán)次數(shù)10次 MOV TMOD,#01H ;設置T0工作在方式1定時 MOV TL0,#0B0H ;給T0設初值 MOV TH0,#3CH SETB ET0 ;允許T0中斷 SETB EA ;總中斷允許 SETB TR0 ;啟動T0HERE: SJMP HERE ;原地循環(huán),等待中斷38IT0P:

MOV TL0,#0B0H ;T0中斷子程序,T0重裝初值 MOV TH0,#3CH DJNZ B,RTURN ;B中斷次數(shù)計數(shù),減1非0則 ;中斷返回

CLR TR0 ;1s定時時間到,停止T0工作 SETB F0 ;1s定時時間到標志F0置1RTURN:RETI程序說明:不論1s定時時間是否已到,都返回到“SJMPHERE”指令處。“SJMPHERE”指令實際是一段主程序。在這段主程序中再通過對F0標志的判定,可知1s定時是否到,再進行具體處理。396.4.2方式2的應用方式2是一個可以自動重新裝載初值的8位計數(shù)器/定時器。可省去重裝初值指令。當某個定時器/計數(shù)器不使用時,可擴展一個負跳沿觸發(fā)的外中斷源?!纠?-3】擴展一個負跳沿觸發(fā)的外部中斷源,把定時器/計數(shù)器T0腳作為外部中斷請求輸入端,溢出標志TF0作為外中斷請求標志。基本思想:設為方式2(自動裝入常數(shù)方式)計數(shù)模式,TH0、TL0初值均為0FFH。當T0腳發(fā)生負跳變時,T0計數(shù)溢出,TF0置“1”,單片機發(fā)出中斷請求。40初始化程序:

ORG 0000H AJMP IINI ;跳到初始化程序

ORG 000BH AJMP IT0P ;跳到外中斷處理程序IINI:

MOV TMOD,#06H ;設置T0為方式2 MOVTL0,#0FFH ;設T0初值 MOVTH0,#0FFH SETBET0 ;允許T0中斷 SETBEA ;總中斷允許 SETB TR0 ;啟動T0

……IT0P:

外中斷處理程序段

……41程序說明:當連接在P3.4(T0腳)的外部中斷請求輸入腳電平發(fā)生負跳變時,TL0加1,產生溢出,TF0置“1”,向單片機發(fā)出中斷請求,同時TH0的內容0FFH送TL0,即TL0恢復初值0FFH。P3.4腳相當于一個負跳沿觸發(fā)的外中斷請求源輸入。對P3.5也可做類似的處理?!纠?-4】當T0(P3.4)引腳上發(fā)生負跳變時,作為P1.0引腳產生方波的啟動信號。開始從P1.0腳上輸出一個周期為1ms的方波,如圖6-14所示(系統(tǒng)時鐘6MHz)。42基本思想:T0設為方式1計數(shù),初值為FFFFH。當外部計數(shù)輸入端T0(P3.4)發(fā)生一次負跳變時,T0加1且溢出,溢出標志TF0置“1”,向CPU發(fā)出中斷請求,此時T0相當于一個負跳沿觸發(fā)的外部中斷源。進入T0中斷程序后,F(xiàn)0標志置“1”,說明T0引腳上已接收過負跳變信號。T1定義為方式2定時。在T0引腳產生一次負跳變后,啟動T1每500s產生一次中斷,在中斷服務子程序中對P1.0求反,使P1.0產生周期1ms的方波。由于省去重新裝初值指令,所以可產生精確的定時時間。43

44圖6-14負跳變觸發(fā)輸出一個周期為1ms的方波(1)計算T1的初值設T1的初值為x,則 (28

?

x)

2

10?6

=

5

10?4 x

=

28

?

250

=

6

=

06H(2)程序設計參考程序:

ORG0000H ;程序入口RESET:LJMPMAIN ;跳向主程序MAIN

ORG 000BH ;T0的中斷入口 LJMPIT0P ;轉T0中斷服務程序

ORG001BH

;T1的中斷入口

45

LJMPIT1P ;轉T1中斷服務程序

ORG0100H

;主程序入口MAIN: MOVSP,#60H ;設堆棧指針 ACALLPT0M2 ;調用對T0,T1初始化子程序LOOP:

MOVC,F(xiàn)0 ;T0是否產生過中斷,若產生 ;過,F(xiàn)0置1 JNC LOOP ;T0未產生中斷,C=0,則跳 ;到LOOP,等待T0中斷 SETBET1 ;允許T1產生定時中斷 SETBTR1 ;啟動T1HERE: AJMPHERE46PT0M2:MOVTMOD,#26H ;對T0,T1初始化,T0方式1 ;計數(shù),T1方式2定時 MOVTL0,#0FFH ;T0置初值 MOVTH0,#0FFH SETBET0 ;允許T0中斷 MOVTL1,#06H ;T1置初值 MOVTH1,#06H CLR F0 ;把T0已發(fā)生中斷標志F0清0 SETBEA ;總中斷允許 SETBTR0 ;啟動T0 RET47IT0P:

CLR TR0 ;T0中斷服務程序,停止T0計數(shù) SETB F0;把T0引腳接收過負脈沖標志F0置1, ;即接收過負跳變 RETIIT1P:

CPL P1.0 ;T1中斷服務程序,P1.0位取反 RETI程序說明:當單片機復位時,從0000H跳向主程序MAIN處執(zhí)行程序。其中調用了對T0,T1初始化子程序PT0M2。子程序返回后執(zhí)行標號LOOP處指令,循環(huán)等待T0引腳上負脈沖的到來。由于負脈沖到來的標志位F0的復位初始值為0,所以程序就在標號LOOP處循環(huán)等待。48當T0(P3.4)腳發(fā)生負跳變時,由于T0計數(shù)溢出,則跳向T0中斷服務子程序。此時停止T0計數(shù),并把T0引腳接收過負脈沖的標志F0置1。當中斷返回時,由于F0已被置1,則程序跳出LOOP處的循環(huán)等待。此時執(zhí)行指令來允許T1中斷,并啟動T1定時,然后執(zhí)行“AJMPHERE”指令,循環(huán)等待,等待T1的500s定時中斷到來。當T1的500s定時中斷產生時,則進入T1的中斷服務子程序IT1P,把P1.0腳電平取反。由于是自動裝初值,省去對T1重裝初值指令。中斷返回后,到“AJMPHERE”處等待T1的500s定時中斷。如此重復,即得到圖6-14波形。49【例6-5】

利用定時器T1的方式2計數(shù),每計滿100個數(shù),將P1.0取反。本例是方式2計數(shù)模式的應用舉例。(1)選擇工作方式外部信號由T1(P3.5)引腳輸入,每發(fā)生一次負跳變計數(shù)器便加1,每輸入100個脈沖,計數(shù)器將產生溢出中斷,在中斷服務程序中將P1.0取反一次。T1工作在方式2的控制字TMOD

=

60H。不使用T0時,TMOD低4位任取,但不能使T0為方式3,這里取全0。(2)計算T1的初值

X

=

28

?

100

=

156

=

9CHTL1的初值為9CH,重裝初值寄存器TH1

=

9CH。50(3)參考程序:

ORG 0000H

;程序運行入口 LJMP MAIN ;跳向主程序MAIN

ORG 001BH

;T1中斷服務程序入口 CPL P1.0 ;P1.0位取反 RETI

ORG 0100H

;主程序入口MAIN: MOV TMOD,#60H ;設置T1為方式2計數(shù) MOV TL0,#9CH ;T0置初值 MOV TH0,#9CH SETB TR1 ;啟動T1HERE: AJMP HERE END51程序說明:由于T1的中斷服務子程序只有兩條指令,不超過8個字節(jié),所以進入T1中斷服務程序入口后,沒有選擇再跳轉。6.4.3方式3的應用方式3下的T0和T1大不相同。T0工作在方式3,TL0和TH0被分成兩個獨立的8位定時器/計數(shù)器。其中,TL0可作為8位的定時器/計數(shù)器,而TH0只能作為8位的定時器。此時T1只能工作在方式0、1或2。一般情況下,當T1用作串行口波特率發(fā)生器時,T0才設置為方式3。此時,常把定時器T1設置為方式2,用作波特率發(fā)生器。52【例6-6】假設某AT89S51單片機應用系統(tǒng)的兩個外部中斷源已被占用,設置T1工作在方式2,用作波特率發(fā)生器。現(xiàn)要求增加一個外部中斷源,并控制P1.0引腳輸出一個5kHz(周期為200s)的方波。設時鐘為12MHz?;舅枷耄涸O置TL0工作在方式3計數(shù)模式,TL0的初值設為0FFH,當檢測到T0腳信號出現(xiàn)負跳變時,TL0溢出,同時向CPU申請中斷,這里T0腳作為一個負跳沿觸發(fā)的外部中斷請求輸入端。在中斷處理子程序中,啟動TH0,TH0事先被設置為方式3的100s定時,從而控制P1.0輸出周期為200s的方波信號,如圖6-15所示。53

54圖6-15定時器P1.0輸出的方波信號(1)初值X計算TL0的初值設為0FFH。5kHz方波的周期為200s,因此TH0的定時時間為100s。初值X計算:(28

?

X)

1

10?6

=

1

10?4 X

=

28

?

100

=

156

=

9CH(2)程序設計

ORG 0000HLJMP MAIN

ORG 000BH ;TL0中斷入口,TL0使用T0的中斷LJMPTL0INT ;跳向TL0中斷服務程序,

TL0占用T0中斷

55

ORG001BH ;TH0中斷入口,T1為方式3時,TH0 ;使用了T1的中斷 LJMPTH0INT ;跳向TH0中斷服務程序

ORG0100H ;主程序入口MAIN:

MOV TMOD,#27H ;T0方式3,T1方式2定時作串 ;行口波特率發(fā)生器 MOV TL0,#0FFH ;置TL0初值 MOV TH0,#9CH ;置TH0初值 MOV TL1,#datal ;TL1裝入串口波特率常數(shù) MOV TH1,#datah ;TH1裝入串口波特率常數(shù) MOV TCON,#15H ;允許T0中斷

56

MOV IE,#9FH ;設置中斷允許,總中斷允許,

;TH0、TL0中斷允許HERE:

AJMPHERE

;循環(huán)等待TL0INT:MOVTL0,#0FFH ;TL0中斷服務處理子程序,TL0

;重新裝入初值 SETBTR1 ;開始啟動TH0定時 RETITH0INT:MOVTH0,#9CH ;TH0中斷服務程序,TH0重新 ;裝入初值 CPL P1.0 ;P1.0位取反輸出 RETI 576.4.4門控制位GATEx的應用—測量脈沖寬度介紹門控制位GATE的具體應用,測量

(P3.3)引腳上正脈沖的寬度?!纠?-7】門控位GATE1可使T1的啟動計數(shù)受的控制,當GATE1

=

1,TR1=1時,只有

INT1*引腳輸入高電平時,T1才被允許計數(shù)??蓽y量

引腳(P3.3)上正脈沖的寬度。其方法如圖6-16所示。

58圖6-16利用GATE位測量正脈沖的寬度參考程序:

ORG 0000HRESET:AJMPMAIN ;復位入口轉主程序

ORG0100H

;主程序入口MAIN:

MOV SP,#60H MOV TMOD,#90H ;向TMOD寫控制字,T1為方 ;式1定時,GATE1

=

1 MOV TL1,#00H MOV TH1,#00HLOOP0:JB P3.3,LOOP0 ;等待

SETBTR1 ;如

為低,啟動T159LOOP1:JNBP3.3,LOOP1;等待

升高LOOP2:JBP3.3,LOOP2;為高,此時計數(shù)器計數(shù), ;等待

降低

CLRTR1;停止T1計數(shù) MOV A,TL1;T1計數(shù)值送A ;將T1計數(shù)值送顯示器

…… END執(zhí)行以上程序,使

引腳上出現(xiàn)的正脈沖寬度以機器周期數(shù)的形式顯示在顯示器上。60將A中的T1計數(shù)值送到顯示器顯示6.4.5實時時鐘的設計介紹使用定時器/計數(shù)器實現(xiàn)時鐘。1.實現(xiàn)實時時鐘的基本思想最小計時單位是秒,如何獲得1s的定時時間呢?從前面介紹知,定時器方式1,最大定時時間也只能131ms。可將定時器的定時時間定為100ms,中斷方式進行溢出次數(shù)的累計,計滿10次,即得秒計時。而計數(shù)10次可用循環(huán)程序的方法實現(xiàn)。初值的計算如例6-2。片內RAM規(guī)定3個單元為秒、分、時單元:42H:“秒”單元;41H:“分”單元;40H:“時”單元61從秒到分,從分到時是通過軟件累加并比較來實現(xiàn)。要求每滿1秒,則“秒”單元42H中的內容加1;“秒”單元滿6

溫馨提示

  • 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

提交評論