目錄
定時器/計數(shù)器的結(jié)構(gòu)
工作方式控制寄存器TMOD和TCON
定時器/計數(shù)器T1、T0的4種工作方式
1.方式0
2.方式1
3.方式2
4.方式3
定時器/計數(shù)器T2的結(jié)構(gòu)與工作方式
1.T2的特殊功能寄存器T2MOD和T2CON
2.特殊功能寄存器T2CON
3.T2的三種工作模式
1. 捕捉方式
2.重新裝載方式
3.波特率發(fā)生器方式及可編程時鐘輸出
對外部輸入的計數(shù)信號的要求
定時器/計數(shù)器的編程和應用
T1、T0的方式1應用
T1、T0的方式2的應用
T1、T0的方式3的應用
門控制位GATEx的應用----測量脈沖寬度
實時時鐘的設計
T2實現(xiàn)1s定時
AT89S52單片機片內(nèi)有3個可編程的定時器/計數(shù)器T0、T1和T2。
定時器/計數(shù)器的結(jié)構(gòu)
定時器/計數(shù)器T1、T0結(jié)構(gòu)如圖5-1所示,T0由特殊功能寄存器TH0,TL0構(gòu)成,T1由特殊功能寄存器TH1、TL1構(gòu)成。具有定時器和計數(shù)器2種工作模式,4種工作方式 (方式0、方式1、方式2和方式3)。屬于增1計數(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ù)。
定時器工作模式是對單片機的時鐘振蕩器信號經(jīng)片內(nèi)12分頻的內(nèi)部脈沖信號計數(shù)。由于時鐘頻率是定值,所以可根據(jù)計數(shù)值計算出定時時間。
工作方式控制寄存器TMOD和TCON
TMOD用于選擇定時器/計數(shù)器的工作模式和工作方式,字節(jié)地址為89H,不能位尋址。
TCON字節(jié)地址為88H,可位尋址,位地址為88H~8FH。
8位分為兩組,高4位控制T1,低4位控制T0。
TMOD各位的功能:
(1) GATE-門控位
0:僅由運行控制位TRx(x=0,1)來控制定時器/計數(shù)器運行。
1:用外中斷引腳(INT0*或INT1*)上的電平與運行控制位TRx共同來控制定時器/計數(shù)器運行。
(2) M1、M0----工作方式選擇位
M1、M0共有4種編碼,對應于4種工作方式的選擇,如表所示:
(3) C/T*-----計數(shù)器模式和定時器模式選擇位
0:為定時器工作模式,對單片機的晶體振蕩器12分頻后的脈沖進行計數(shù)。
1:為計數(shù)器工作模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1 (P3.5)的外部脈沖(負跳變)計數(shù)。
?
(1) TF1、TF0一一計數(shù)溢出標志位
當計數(shù)器計數(shù)溢出時,該位置“1”。使用查詢方式時,此位作為狀態(tài)位供CPU查詢,但應注意查詢有效后,應使用軟件及時將該位清“0”。使用中斷方式時,此位作為中斷請求標志位,進入中斷服務程序后由硬件自動清“0”。
(2) TR1、TR0一一計數(shù)運行控制位
TR1位(或TR0位)=1,啟動定時器/計數(shù)器工作的必要條件。TR1位(或TR0位)=0,停止定時器/計數(shù)器工作。 該位可由軟件置“1”或清“0”
(3)IE0、IE1----外部中斷標志位
IE0是外中斷0的中斷請求標志位,IE1是外中斷1的中斷請求標志位。
(4)IT0、IT1----控制外部中斷的觸發(fā)方式
IT1控制外部中斷1的觸發(fā)方式,控制外部中斷0的觸發(fā)方式。這兩個位字段的取值為:
?00:低電平觸發(fā)(Low-Level Trigger)
?01:下降沿觸發(fā)(Falling Edge Trigger)
?10:上升沿觸發(fā)(Rising Edge Trigger)
?11:雙邊沿觸發(fā)(Dual Edge Trigger)
定時器/計數(shù)器T1、T0的4種工作方式
1.方式0
M1、M0=00時,被設置為工作方式0,邏輯結(jié)構(gòu)框圖見圖(以T1為例,TMOD.5、TMOD.4=00)
為13位計數(shù)器,由TLx (x=0,1) 低5位和THx高8位構(gòu)成。TLX低5位溢出則向THx進位,THx計數(shù)溢出則把TCON中的溢出標志位TFx置“1”
C/T的兩種工作模式,在上面都有體現(xiàn):
(1) C/T*=0,電子開關打在上面位置,T1(或T0)為定時器工作模式把時鐘振蕩器12分頻后的脈沖作為計數(shù)信號。
(2) C/T*=1,電子開關打在下面位置,T1(或T0)為計數(shù)器工作模式計數(shù)脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當引腳上發(fā)生負跳變時計數(shù)器加1。
GATE位狀態(tài)決定定時器/計數(shù)器的運行控制取決TRx一個條件還是TRx和INTx*(x=0,1)引腳狀態(tài)兩個條件。
對于左下方的GATE位:
(1)GATE=0,A點?電位恒為1,B點電位僅取決于TRx狀態(tài)。
TRx=1,B點為高電平,控制端控制電子開關閉合,允許T1(或T0)對脈沖計數(shù)。TRx=0,B點為低電平,電子開關斷開,禁止T1(或T0)計數(shù)。
(2) GATE=1,B點電位由INT* (x=0,1)的輸入電平和TRx的狀態(tài)這兩個條件來確定。當TRx=1,且INT* =1時,B點才為1,控制端控制電子開關閉合,允許T1(或T0)計數(shù)。故這種情況下計數(shù)器是否計數(shù)是由TRx和INTX* 兩個條件來共同控制的。
2.方式1
當M1、M0=01時,定時器/計數(shù)器工作于方式1,這時定時器/計數(shù)器的等效電路邏輯結(jié)構(gòu)如圖所示。
方式1和方式0的差別僅僅在于計數(shù)器的位數(shù)不同,方式1為16位計數(shù)器由THx高8位和TLx低8位構(gòu)成 (x=0,1),方式0則為13位計數(shù)器,有關控制狀態(tài)位的含義(GATE、C/T*、TFX、TRx)與方式0相同。
工作原理圖如下:
注:方式0和方式1的最大特點是計數(shù)溢出后,計數(shù)器為全0。因此在循環(huán)定時或循環(huán)計數(shù)應用時就存在用指令反復裝入計數(shù)初值的問題。這不僅影響定時精度,也給程序設計帶來麻煩。假設TL1與TH1分別代表地址00,0FH,從000FH開始計數(shù)后溢出,若想返回000FH繼續(xù)計數(shù),那么需要通過軟件編程控制將00分配給TL,將0F分配給TH,而軟件編程是需要耗費機器周期的,這樣裝初值,會使計時不準確。但是方式2不會出現(xiàn)這一問題。
3.方式2
當M1、M0為10時,定時器/計數(shù)器處于工作方式2,這時定時器/計數(shù)器的邏輯結(jié)構(gòu)如圖所示(以定時器T1為例,x=1)
方式2為自動恢復初值 (初值自動裝入)的8位定時器/計數(shù)器
TLx(x=0,1)作為常數(shù)緩沖器,當TLx計數(shù)溢出時,在溢出標志TFx置"1"的同時,還自動將THx中的初值送至TLx,使TLx從初值開始重新計數(shù)。
定時器/計數(shù)器的方式2工作過程如圖所示,TL=0(因為方式2最大就是8位),表示溢出,TF=1表示中斷請求標志位申請中斷,再將TH的初值賦值給TL
該方式可省去用戶軟件中重裝初值的指令執(zhí)行時間,簡化定時初值的計算方法,可以相當精確地確定定時時間。
4.方式3
是為增加一個8位定時器/計數(shù)器而設,使AT89S51單片機具有3個定時器/計數(shù)器。
方式3只適用于T0,T1不能工作在方式3。T1處于方式3時相當于TR1=0,停止計數(shù)(此時T1可用來作為串行口波特率產(chǎn)生器)
1.工作方式3下的T0
TMOD的低2位為11時,T0的工作方式被選為方式3,各引腳與T0的邏輯關系如圖所示:
定時器/計數(shù)器T0分為兩個獨立的8位計數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/T*、GATE、TR0、TF0,而TH0被固定為一個8位定時器(不能作為外部計數(shù)模式,因為外部引腳被TL使用),并使用定時器T1的狀態(tài)控制位TR1和TF1,同時占用定時器T1的中斷請求源TF1。
2.T0工作在方式3時T1的各種工作方式
一般情況下,當T1用作串行口的波特率發(fā)生器時,TO才工作在方式3.TO處于工作方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。
當T0工作在方式3時,T1的工作方式:
(1)T1工作在方式0
T1的控制字中M1,M0=0,0時,T1工作在方式0:
(2)T1工作在方式1:
當T1的控制字中M1、M0= 0,1時,T1工作在方式1,工作示意圖如圖所示:
(3)T1工作在方式2(最常使用)
當T1的控制字中M1、M0=1,0時,T1的工作方式為方式2,工作示意圖如圖所示。
(4)T1設置在方式3
當T0設置在方式3,再把T1也設為方式3,此時T1停止計數(shù)。
定時器/計數(shù)器T2的結(jié)構(gòu)與工作方式
AT89S52單片機與AT89S51單片機相比,新增加了一個16位的定時器/計數(shù)器T2。
T2有3種工作方式: 捕捉、重新裝載(遞增或遞減計數(shù)) 和波特率發(fā)生器(若沒有T2,需要使用T1作為波特率發(fā)生器)。
這3種模式由特殊功能寄存器中的控制寄存器T2CON中的相關位進行選擇。
1.T2的特殊功能寄存器T2MOD和T2CON
?特殊功能寄存器T2MOD
特殊功能寄存器T2MOD的字節(jié)地址為C9H,8位中只有2位有效,其格式見圖。
T2MOD寄存器的各位:
T20E (D1) :輸出允許位。T20E=1,允許定時時鐘從P1.0輸出;T20E=0,禁止定時時鐘從P1.0輸出。
DCEN (D0):計數(shù)方式選擇。DCEN=1,T2的計數(shù)方式由P1.引腳狀態(tài)決定。P1.1=1,T2減計數(shù),P1.1=0,T2加計數(shù);DCEN=0,計數(shù)方式與P1.1無關,同T1和T0一樣,采用增1計數(shù)。
2.特殊功能寄存器T2CON
T2的功能選擇由特殊功能控制寄存器T2CON來設定,T2CON字節(jié)地址為C8H,可位尋址,位地址C8H~CFH。
T2CON的格式見圖:
T2CON寄存器各位的定義:
TF2(D7) :T2計數(shù)計滿溢出回0中斷請求標志位。當T2計數(shù)計滿溢出回0時,由內(nèi)部硬件置“1”TF2,向CPU發(fā)出中斷請求。但是當RCLK位或TCLK位為1時將不予置位。本標志位必須由軟件清0。
EXF2 (D6):T2外部中斷請求標志位。當由引腳T2EX上的負跳變引起“捕捉”或“重新裝載”且EXEN2位(外部采樣允許位)為1,則置“1”EXF2標志位,向CPU發(fā)出中斷請求。本標志位必須由軟件清0。
RCLK (D5):串行口接收時鐘標志位。
?當RC LK位為1時,串行通信端使用定時器/計數(shù)器T2的溢出回0信號作為串行通信方式1和方式3的接收時鐘;
?當RCLK位為0時,使用定時器/計數(shù)器1的溢出回0信號作為串行通信方式1和方式3的接收時鐘。
TCLK (D4):串行發(fā)送時鐘標志位。當TCLK位為1時,串行通信端使用定時器/計數(shù)器2的溢出回0信號作為串行通信方式1和方式3的發(fā)送時鐘當TCLK位為0時,串行通信端使用定時器/計數(shù)器1的溢出回0信號作為串行通信方式1和方式3的發(fā)送時鐘;
EXEN2 (D3):T2外部采樣允許標志位。當EXEN2位為1時,如果T2不是正工作在串行口的時鐘,則在T2EX引腳 (P11)的負跳變將觸發(fā)“捕捉”或“重新裝載”操作;當EXEN2位為0時,在T2EX引腳(P1.1)上的負跳變對T2不起作用。
TR2 (D2) :T2啟動/停止控制位。當軟件置“1”TR2時,即TR2=1,則啟動T2開始計數(shù),當軟件清“0”TR2時,即TR2=0,軟件置“1”TR2時則停止計數(shù)。
C/T2* (D1) :T2的定時或計數(shù)模式選擇位,當設置C/T2* =1時,選擇對外部事件計數(shù)模式;C/=0時,則選擇內(nèi)部定時模式。
CP/RL2 (D0):T2捕捉/重新裝載選擇位。
?當設置為1時,如果EXEN2為1,則在T2EX引腳(P1.1)上的負跳變將觸發(fā)“捕捉”操作;
?當設置為0時,如果EXEN2為1,則T2計數(shù)計滿回0溢出或T2EX引腳上的負跳變都將引起重新裝載操作;
當RCLK位為1或TCLK位為1,CP/RL2標志位不起作用。T2的計滿回0溢出時,將迫使T2進行重新裝載操作。
計滿回0時,將迫使T2進行重新裝載操作
計時器T2總結(jié):
3.T2的三種工作模式
定時器T2有3種工作方式:捕捉、重新裝載(增計數(shù)或減計數(shù))和波特率發(fā)生器3種工作方式,可對寄存器T2CON中的相關位進行軟件設置來選擇,具體見表。
1. 捕捉方式
捕捉方式就是及時“捕捉”住輸入信號發(fā)生的跳變及有關信息。常用于精確測量輸入信號的變化如脈寬等等。捕捉方式的工作示意見圖。
根據(jù)EXEN2位的不同設置,“捕捉”方式有兩種選擇。
注:RCAP2L和RCAP2H代表陷阱寄存器,暫存數(shù)據(jù)
(1)當EXEN2位=0,T2為16位的定時器/計數(shù)器。當設C/T2*位為1時選擇外部計數(shù)方式,對T2引腳(P1.0)上的負跳變信號進行計數(shù)。計數(shù)器計滿回0溢出置“1”中斷請求標志TF2,發(fā)出中斷請求信號。CPU響應中斷進入該中斷服務程序后,必須用軟件將標志位TF2清0。其他操作均與T0和T1的方式1相同。
(2)當EXEN2位=1,T2除上述功能外,還可增加“捕捉”功能。當外部T2EX引腳(P1.1)上的信號發(fā)生負跳變,將選通三態(tài)門制端 ,將計數(shù)器TL2和TH2中的當前計數(shù)值被分別“捕捉”進RCAP2L和RCAP2H中同時T2EX引腳(P11)上的信號負跳變將置“1”TCON寄存器的EXF2標志位,向CPU請求中斷。
圖中RCAP2L為陷阱寄存器低字節(jié),字節(jié)地址為CAH,RCAP2H為陷阱寄存器高字節(jié),字節(jié)地址為CBH。T2引腳為P1.0,T2EX引腳為P1.1,因此當選用T2時,P1.0和P1.1就不能作I/O口用了。另外這兩個中斷請求,通過一個“或門輸出。因此當CPU響應中斷后,在中斷服務程序中應該用軟件識別是哪個中斷請求,分別進行處理,該中斷請求標志位必須用軟件清“0”
2.重新裝載方式
T2的重新再裝入方式根據(jù)寄存器TCON中的EXEN2的兩種狀態(tài)來進行選擇。另外根據(jù)寄存器T2MOD中的DCEN位是“0”還是“1”來選擇加1還是減1計數(shù)方式。
當單片機復位時,T2MOD中的DCEN=0,則默認T2為增1計數(shù)方式;當把DCEN置“1”時,將由T2EX引腳(P1.1)上的邏輯電平?jīng)Q定是增1/減1計數(shù)方式
(1)當設置T2MOD寄存器的DCEN 位為0(或上電復位為0)時,T2為增1型重新裝載方式,此時根據(jù)T2CON寄存器中的EXEN2位的狀態(tài),可選擇兩種操作方式:
?當EXEN2標志位為0時,T2計滿回0溢出,一方面使中斷請求標志位TF2置“1”,同時又將陷阱寄存器RCAP2L、RCAP2H中預置的16位計數(shù)初值重新再裝入計數(shù)器TL2、TH2中,自動進行下一輪的計數(shù)操作,其功能與T0T1的方式2(自動裝載)相同,只是本方式是16位的,計數(shù)范圍大。RCAP2L、RCAP2H寄存器的計數(shù)初值由軟件預置。T2的重新裝載方式見圖。
?當設置EXEN2標志位為1時,T2仍具有上述操作方式的功能,并增加了新的特性。當外部輸入引腳T2EX(P1.1)產(chǎn)生負跳變時,能觸發(fā)三態(tài)門將RCAP2L、RCAP2H陷阱寄存器中的計數(shù)初值自動裝載到TH2和TL2中,重新開始計數(shù),并置“1”EXF2位,發(fā)出中斷請求。
(2)當T2MOD的DCEN位設置為1時,可以使T2既能實現(xiàn)增1計數(shù),也可實現(xiàn)減1計數(shù),它取決于T2EX引腳上的邏輯電平,由圖可見,當設置DCEN 位為1時,可以使T2具有增1/減1計數(shù)功能
當T2EX(P1.1)引腳為“1”時,T2執(zhí)行增1計數(shù)功能。當不斷加1計滿回0溢出時,一方面置位TF2為1,發(fā)出中斷請求,另一方面,溢出信號觸發(fā)三態(tài)門,將存放在陷阱寄存器RCAP2L、RCAP2H中的計數(shù)初值自動裝載到TL2和TH2計數(shù)器中繼續(xù)進行加1計數(shù)。
當T2EX (P1.1)引腳為“0”時,T2執(zhí)行減1計數(shù)功能。當TL2和TH2計數(shù)器中的值等于陷阱寄存器RCAP2L、RCAP2H中的值時,產(chǎn)生向下溢出,一方面置位TF2為1,發(fā)出中斷請求,另一方面,下溢信號觸發(fā)三態(tài)門,將OFFFFH裝入TL2和TH2計數(shù)器中,繼續(xù)進行減1計數(shù)。
中斷請求標志位TF2和EXF2位必須用軟件清“0”
3.波特率發(fā)生器方式及可編程時鐘輸出
當特殊功能寄存器T2CON中的RCLK和TCLK位均置成1或者其中某位為1時,串行口進行接收1發(fā)送工作,T2可工作于波特率發(fā)生器方式,還可作為可編程時鐘輸出。
對外部輸入的計數(shù)信號的要求
當定時器/計數(shù)器工作在計數(shù)器模式時,計數(shù)脈沖來自外部輸入引腳TO或T1。當輸入信號產(chǎn)生負跳變時,計數(shù)器的值增1。
每個機器周期的S5P2期間,都對外部輸入引腳TO或T1進行采樣。如在第個機器周期中采得的值為1,而在下一個機器周期中采得的值為0,則在緊跟著的再下一個機器周期S3P1期間,計數(shù)器加1。由于確認一次負跳變要花2個機器周期,因此外部輸入的計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。
例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。
對于外部輸入信號的占空比并沒有什么限制,但為了確保某一給定電平在變化之前能被采樣一次,則這一電平至少要保持一個機器周期。故對外部輸入信號的要求如圖所示,圖中,為機器周期
定時器/計數(shù)器的編程和應用
4種方式,方式0與方式1基本相同,只是計數(shù)位數(shù)不同。方式0初值計算復雜,一般不用方式0,而用方式1。
T1、T0的方式1應用
基本思想:方波周期用T0確定,T0每隔1ms計數(shù)溢出1次,即T0每隔1ms產(chǎn)生一次中斷,CPU響應中斷后,在中斷服務子程序中對P1.0取反如圖所示。
當單片機復位時,從程序入口0000H跳向主程序MAIN處執(zhí)行。其中調(diào)用了TO初始化子程序PTOMO。
子程序返回后,程序執(zhí)行“AJMP HERE”指令,則循環(huán)等待
當響應T0定時中斷時,則跳向T0中斷入口,再從T0中斷入口跳向IT0P標號處執(zhí)行T0中斷服務子程序。
當執(zhí)行完中斷返回的指令“RET1”后,又返回斷點處繼續(xù)執(zhí)行循環(huán)指令“AJMP HERE”。在實際的程序中,“AJMP HERE”實際上是一段主程序。當下一次定時器TO的1ms定時中斷發(fā)生時,再跳向TO中斷入口,從而重復執(zhí)行上述過程。
如CPU不做其他工作,也可用查詢方式進行控制,程序要簡單得多:
查詢程序雖簡單,但CPU必須要不斷查詢TF0標志,工作效率低。
基本思想:采用定時器模式。因定時時間較長,首先確定采用哪一種工作方式。時鐘為6MHz的條件下,定時器各種工作方式最長可定時時間:
方式0最長可定時16.384ms;
方式1最長可定時131.072ms;
方式2最長可定時512us。
由上可見,可選方式1,每隔100ms中斷一次,中斷10次為1s。
T1、T0的方式2的應用
基本思想: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引腳產(chǎn)生一次負跳變后,啟動T1每500us產(chǎn)生一次中斷,在中斷服務子程序中對P1.0求反,使P1.0產(chǎn)生周期1ms的方波。由于省去重新裝初值指令,所以可產(chǎn)生精確的定時時間。
程序說明:當單片機復位時,從0000H跳向主程序MAIN處執(zhí)行程序。其中調(diào)用了對T0,T1初始化子程序PTOM2。子程序返回后執(zhí)行標號LOOP處指令,循環(huán)等待T0引腳上負脈沖的到來。由于負脈沖到來的標志位FO的復位初始值為0,所以程序就在標號LOOP處循環(huán)等待。
程序說明:由于T1的中斷服務子程序只有兩條指令,不超過8個字節(jié),所以進入T1中斷服務程序入口后,沒有選擇再跳轉(zhuǎn)。
T1、T0的方式3的應用
方式3下的TO和T1大不相同。TO工作在方式3,TLO和THO被分成兩個獨立的8位定時器/計數(shù)器。其中,TLO可作為8位的定時器/計數(shù)器,而THO只能作為8位的定時器。此時T1只能工作在方式0、1或2。
一般情況下,當T1用作串行口波特率發(fā)生器時,T0才設置為方式3。此時常把定時器T1設置為方式2,用作波特率發(fā)生器。
基本思想:設置TL0為方式3計數(shù),TLO初值設為OFFH,當檢測到T0腳信號出現(xiàn)負跳變時,TL0溢出,同時向CPU申請中斷,這里T0腳作為一個負跳沿觸發(fā)的外部中斷請求輸入端。在中斷處理子程序中,啟動TH-,TH0事先被設置為方式3的100us定時,從而控制P1.0輸出周期為200us的方波信號,如圖所示
門控制位GATEx的應用----測量脈沖寬度
介紹門控制位GATE的具體應用,測量INT1* (P3.3)引腳上正脈沖的寬度
執(zhí)行以上程序,使INT1*引腳上出現(xiàn)的正脈沖寬度以機器周期數(shù)的形式顯示在顯示器上。
實時時鐘的設計
[例5-7]實時時鐘最小計時單位是“秒”,關鍵是如何獲得“秒”的定時時間。
基本思想
最小計時單位是秒,如何獲得1s的定時時間呢?定時器方式1,最大定時時間也只能131ms。可將定時器的定時時間定為100ms,中斷方式進行溢出次數(shù)的累計,計滿10次,即得秒計時。而計數(shù)10次可用循環(huán)程序的方法實現(xiàn)。初值的計算如例5-2。
片內(nèi)RAM規(guī)定3個單元為秒、分、時單元:
42H:“秒”單元;????????41H:“分”單元;????????40H:”時“單元
從秒到分,從分到時是通過軟件累加并比較來實現(xiàn)。要求每滿1秒,則“秒”單元42H中的內(nèi)容加1;“秒”單元滿60,則“分”單元41H中的內(nèi)容加1;“分”單元滿60,則“時”單元40H中的內(nèi)容加1;“時”單元滿24,則將42H、41H、40H的內(nèi)容全部清“0”
程序設計
(1) 主程序設計
進行定時器T0初始化,并啟動T0,然后反復調(diào)用顯示子程序,等待100ms中斷到來。
(2) 中斷服務程序的設計實現(xiàn)秒、分、時的計時處理。流程如圖所示。
參考程序:
T2實現(xiàn)1s定時
下面的的例子,是利用T2的16位自動重新裝載方式實現(xiàn)1秒定時。
單片機的P1.0腳接一個發(fā)光二極管LED,進入T2中斷服務子程序后,對P1.0求反從而控制LED閃爍。晶振采用12MHz,因此計數(shù)器增1的定時時間為1us。
1秒定時時間與計數(shù)初值計算如下:
1秒時間采用16次中斷來實現(xiàn),每次的中斷時間所需的計數(shù)為1s/16=62500
因此計數(shù)初值的十進制數(shù)為:216-62500=3036,3036轉(zhuǎn)換為16進制數(shù)為OBDCH。
由本例可見,定時器T2的16位自動重新裝載方式,其功能與T0T1的方式2(8位計數(shù)初值自動裝載)相同,只是該方式是16位的,計數(shù)范圍大。當T2計數(shù)溢出時,又將陷阱寄存器RCAP2L、RCAP2H中預置的16位計數(shù)初值重新再裝入計數(shù)器TL2、TH2中,自動進行下一輪的計數(shù)操作。
文章來源:http://www.zghlxwxcb.cn/news/detail-827428.html
注意,由于引起T2中斷的可能是EXF2,也可能是TF2,所以要在中斷服務程序進行判斷,對TF2的中斷不處理,只處理EXF2引起的中斷。文章來源地址http://www.zghlxwxcb.cn/news/detail-827428.html
到了這里,關于AT89S52單片機的定時器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!