單片機定時器/計數器工作方式
。1)工作方式0 C/T -定時 / 計數功能選擇位。
C/T =“0” ,對片內機器周期進行計數,作定時器用;
C/T =““1” ,對片外從 T0 ( P3.4 )、 T1 ( P3.5 )引腳輸入 的外部脈沖信號進行計數 , 作計數器用。
GATE -門控位。
GATE=0 ,允許軟件控制位 TR0 或 TR1 啟動定時器;
GATE=1 ,允許外中斷引腳 INT0( 或 INT1) 為高電電平,且由軟件使 TR0( 或 TR1) 置 1 時,才能啟動定時器工作。
當 GATE=0 時,封鎖或門輸出恒為 1 ,使外部中斷輸入引腳 INT0 信號失效,同時又打開與門,由 TR0 控制定時器 T0 的開啟和關斷。若 TR0=1 ,接通控制開關,啟動定時器 T0 工作,計數器被控制為允許計數。若 TR0=0 ,則斷開控制開關,停止計數。
當 GATE=1 時,與門的輸出由 INT0 的輸入電平和 TR0 位的狀態(tài)來確定。若 TR0=1 ,則打開與門,外部信號電平通過 INT0 引腳直接開啟或關斷定時器 T0 。 當 INT0 為高電平時,允許計數,否則停止計數。這種工作方式可用來測量外部信號的脈沖寬度等。
當 C/T=0 時, 控制開關接通振蕩器 12 分頻輸出端, T0 對機器周期計數。 即定時器工作方式。
當 C/T=1 控制開關與引腳 T0 ( P3.4 )接通,計數器 T0 對來自外部引腳 T0 的輸入脈沖計數,當外部信號電平發(fā)生由 1 到 0 跳變時,計數器加 1 ,這時, T0 成為外部事件計數器。
注意:定時計數器的計數范圍與初值 X 的計算
、 定時器的計數規(guī)律:
T0 從某初值 X ,對脈沖計數到 1111111111111B(2 13 D=8192D) 溢出
計數個數: 2 13 - X
、 最大計數范圍: 從初值 X = 0D ,計數到 1111111111111B(2 13 D)
、 定時時間:
定時值 = 計數個數×機器周期
=( 2 13 - X )×機器周期
。 ( 2 13 - X )×晶振周期× 12
最大定時值 =( 2 13 - 0 ) ×機器周期
例 1 如要求計數值為 1000 ,試計算定時計數器 T0 的初值
分析:由 213 - X = 1000
得 X = 213 - 1000 = 8192 - 1000
。 1C18H = 0001 1100 0001 1000B
故 TH0 = 1 1100 000 = 0E0H
TL0 = 1 1000B = 000 1 1000B = 18H 。
例 2 利用 T0 方式 0 在 P1.0 引腳上輸出周期 500us 的方波。設單片機 晶振頻率 6MHz 。
分析: 要在 P1.0 輸出周期為 500us 的方波,只要 P1.0 每隔 250us 取反一次即可,即定時時間為 250us :
、 TMOD 寄存器初始化:
TMOD.1 TMOD.0 M1M0=00 , T0 為方式 0 ;
TMOD.2 C/T=0 T0 為定時狀態(tài);
TMOD.3 GATE=0 表示計數不受 INT0 控制;
TMOD.4 TMOD.7 因 T1 不用,可取任意值,這里取為 0 。
故 TMOD=00H
、 計算 250us 定時 T0 的初值: 設 T0 的計數初值為 X ,則
X=8067D=1F83H=0001 1111 1000 0011B
故 TH0= 1 1111 100 高 8 位 =FCH
TL0=0000 0011B 低 5 位 =03H
③ 編寫程序。采用查詢 TF0 的狀態(tài)來控制 P1.0 輸出
MOV TMOD , #00H ;置 T0 為方式 0
MOV TH0 , #0FCH ;送計數初值
MOV TL0 , #03H
SETB TR0 ;啟動 T0
LOOP : JBC TF0 , NEXT ;查詢定時時間到否 ?
SJMP LOOP
NEXT : CLR TF0 ; 對溢出標志位清 0
MOV TH0 , #0FCH ;重賦計數初值
MOV TL0 , #03H
CPL P1.0 ;輸出取反
SJMP LOOP ; 重復循環(huán)
采用查詢方式的程序很簡單,但在定時器整個計數過程中, CPU 要不斷查詢溢出時標志 TF0 的狀態(tài) , 這就占用了 CPU 工作時間 , 以致 CPU 的效率不高。采用定時溢出中斷方式,可以提高 CPU 的效率。
。2)工作方式1
M1 M0=01 TH0 高 8 位和 TL0 低 8 位組成一個 16 位定時器 / 計數器
定時器工作于方式1下,其結構與操作幾乎與方式 0 完全相同,差別僅在于計數器的位數不同。
注意:定時計數器的計數范圍與初值 X 的計算
、 定時器的計數規(guī)律:
T0 從初值 X ,一直對脈沖計數到 1111111111111B(216D) 溢出
計數個數: 216 - X = 65536 - X
、 最大計數范圍 :從初值 X = 0D ,計數到 1111111111111111B(216D)
計數個數為 216 - 0 = 65536D
、 定時時間: 定時值 =( 216 - X ) ×機器周期
。剑 216 - X ) ×晶振周期× 12
最大定時定時值 =( 216 - 0 ) ×機器周期
例如 . 若單片機晶振為 6MHZ ,則 1 個機器周期為 2us
最大定時定時值 =( 216 - 0 ) ×機器周期
。 65536 × 2us = 131ms
編輯:admin 最后修改時間:2018-05-08