一.定時/計數器的結構及工作原理
定時/計數器的核心部件是二進制加1計數器(TH0、TL0或TH1、TL1)
定時功能----計數輸入信號是內部時鐘脈沖,每個機器周期使寄存器的值加1。所以,計數頻率是振蕩頻率的1/12。
計數功能----計數脈沖來自相應的外部輸入引腳,對負跳變脈沖計數,計數溢出可申請中斷,標志位TFX,T0為P3.4,T1為P3.5。
在TMOD中,各有一個控制位(C/T),分別用于控制定時/計數器T0和T1是工作在定時器方式還是計數器方式。
單片機內部的定時/計數器是一種可編程器件,可設置為四種工作方式,
由兩個8位專用寄存器TMOD和TCON進行管理與控制。
二、定時/計數器計數初始化
1. 定時/計數器的初始化方法
初始化的主要內容是對TCON和TMOD編程,計算和裝載T0和T1的計數初值。
(1)初始化
1)分析定時器/計數器的工作方式,將方式字寫入TMOD寄存器;
( 定/計、內/外啟動、工作方式)
2)計算T0或T1中的計數初值,并將其寫入TH0、TL0或TH1、TL1;
3)根據需要開放CPU和定時/計數器的中斷,即對IE和IP寄存器編程;
4)啟動定時器/計數器工作:若要求用軟件啟動,編程時對TCON中的TR0或TR1置位即可啟動;若由外部中斷引腳電平啟動,則對TCON中的TR0或TR1置位后,還需給外引腳加啟動電平。
(2)計數器初值的計算
1)計數器模式時的計數初值
TC=2M-N (M為計數器位數,N為要求的計數值)
方式0:M=13,計數器的最大計數值213=8192。方式1:M=16,計數器的最大計數值216=65536;方式2:M=8,計數器的最大計數值28=256;方式3同方式2。
例如,設T0工作在計數器方式2,求計數10個脈沖的計數初值,
TC=28 -10=246=(11110101)B=0F5H
2)定時器模式時的計數初值
在定時器方式下,定時器T0(或T1)是對機器周期進行計數的。定時時間為:t=(2M-計數初值X)×機器周期
則計數初值X= 2M-(t/12*T osc )
在應用定時/計數器時,溢出標志TFx置位后既可由硬件向CPU申請中斷,也可通過用戶程序查詢TFx的狀態,因此對計數溢出信息的處理有以下兩種方法。
中斷法:在定時器初始化時要開放對應的源允許(ET0或ET1)和總允許,在啟動后等待中斷。當計數器溢出中斷,CPU將程序轉到中斷服務程序入口,因此應在中斷服務程序中安排相應的處理程序。
采用中斷方式時的一般編程模式:
ORG 0000H
SJMP MAIN
ORG 000BH (001BH)
LJMP T0S
ORG 0030H
MAIN: MOV TMOD,#——
MOV TH0,#——
MOV TL0,#——
SETB ET0;
SETB EA;
------------------;置其他初值
SETB TR0;
SJMP $
T0S: ------------- ; 重裝初值
-------------- ;處理程序
RETI
查詢法:既在定時器初始化并啟動后,在程序中安排指令查詢TFx的狀態。
LP:JBC TF0,NEXT;TF0為1,轉后面的處理程序,并將TF0復位
SJMP LP ;TF0為0,繼續查詢
NEXT:┋
采用查詢方式時的一般編程模式:
ORG 0030H
MAIN: MOV TMOD,#——
MOV TH0,#——
MOV TL0,#——
--------------
SETB TR0
WAIT: JBC TF0,NEXT;
SJMP WAIT;
NEXT:MOV TH0,#——;重裝
MOV TL0,#—— ;初值
- --------- ;處理程序
SJMP WAIT
注意問題:
1)方式0、1、3溢出后要重裝初值,方式2可自動重裝初值。
2)方式 0時TH為8位,TL為5位。
|