(1)工作方式0
c/t -定時 / 計數(shù)功能選擇位。
c/t =“0” ,對片內(nèi)機器周期進行計數(shù),作定時器用;
c/t =““1” ,對片外從 t0 ( p3.4 )、 t1 ( p3.5 )引腳輸入 的外部脈沖信號進行計數(shù) , 作計數(shù)器用。
gate -門控位。
gate=0 ,允許軟件控制位 tr0 或 tr1 啟動定時器;
gate=1 ,允許外中斷引腳 int0( 或 int1) 為高電電平,且由軟件使 tr0( 或 tr1) 置 1 時,才能啟動定時器工作。
當(dāng) gate=0 時,封鎖或門輸出恒為 1 ,使外部中斷輸入引腳 int0 信號失效,同時又打開與門,由 tr0 控制定時器 t0 的開啟和關(guān)斷。若 tr0=1 ,接通控制開關(guān),啟動定時器 t0 工作,計數(shù)器被控制為允許計數(shù)。若 tr0=0 ,則斷開控制開關(guān),停止計數(shù)。
當(dāng) gate=1 時,與門的輸出由 int0 的輸入電平和 tr0 位的狀態(tài)來確定。若 tr0=1 ,則打開與門,外部信號電平通過 int0 引腳直接開啟或關(guān)斷定時器 t0 。 當(dāng) int0 為高電平時,允許計數(shù),否則停止計數(shù)。這種工作方式可用來測量外部信號的脈沖寬度等。
當(dāng) c/t=0 時, 控制開關(guān)接通振蕩器 12 分頻輸出端, t0 對機器周期計數(shù)。 即定時器工作方式。
當(dāng) c/t=1 控制開關(guān)與引腳 t0 ( p3.4 )接通,計數(shù)器 t0 對來自外部引腳 t0 的輸入脈沖計數(shù),當(dāng)外部信號電平發(fā)生由 1 到 0 跳變時,計數(shù)器加 1 ,這時, t0 成為外部事件計數(shù)器。
注意:定時計數(shù)器的計數(shù)范圍與初值 x 的計算
① 定時器的計數(shù)規(guī)律:
t0 從某初值 x ,對脈沖計數(shù)到 1111111111111b(2 13 d=8192d) 溢出
計數(shù)個數(shù): 2 13 - x
② 最大計數(shù)范圍: 從初值 x = 0d ,計數(shù)到 1111111111111b(2 13 d)
③ 定時時間:
定時值 = 計數(shù)個數(shù)×機器周期
=( 2 13 - x )×機器周期
= ( 2 13 - x )×晶振周期× 12
最大定時值 =( 2 13 - 0 ) ×機器周期
例 1 如要求計數(shù)值為 1000 ,試計算定時計數(shù)器 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 的方波。設(shè)單片機 晶振頻率 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 表示計數(shù)不受 int0 控制;
tmod.4 tmod.7 因 t1 不用,可取任意值,這里取為 0 。
故 tmod=00h
② 計算 250us 定時 t0 的初值: 設(shè) t0 的計數(shù)初值為 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 ;送計數(shù)初值
mov tl0 , #03h
setb tr0 ;啟動 t0
loop : jbc tf0 , next ;查詢定時時間到否 ?
sjmp loop
next : clr tf0 ; 對溢出標(biāo)志位清 0
mov th0 , #0fch ;重賦計數(shù)初值
mov tl0 , #03h
cpl p1.0 ;輸出取反
sjmp loop ; 重復(fù)循環(huán)
采用查詢方式的程序很簡單,但在定時器整個計數(shù)過程中, cpu 要不斷查詢溢出時標(biāo)志 tf0 的狀態(tài) , 這就占用了 cpu 工作時間 , 以致 cpu 的效率不高。采用定時溢出中斷方式,可以提高 cpu 的效率。
(2)工作方式1
m1 m0=01 th0 高 8 位和 tl0 低 8 位組成一個 16 位定時器 / 計數(shù)器
定時器工作于方式1下,其結(jié)構(gòu)與操作幾乎與方式 0 完全相同,差別僅在于計數(shù)器的位數(shù)不同。
注意:定時計數(shù)器的計數(shù)范圍與初值 x 的計算
① 定時器的計數(shù)規(guī)律:
t0 從初值 x ,一直對脈沖計數(shù)到 1111111111111b(216d) 溢出
計數(shù)個數(shù): 216 - x = 65536 - x
② 最大計數(shù)范圍 :從初值 x = 0d ,計數(shù)到 1111111111111111b(216d)
計數(shù)個數(shù)為 216 - 0 = 65536d
③ 定時時間: 定時值 =( 216 - x ) ×機器周期
=( 216 - x ) ×晶振周期× 12
最大定時定時值 =( 216 - 0 ) ×機器周期
例如 . 若單片機晶振為 6mhz ,則 1 個機器周期為 2us
最大定時定時值 =( 216 - 0 ) ×機器周期
?。?65536 × 2us = 131ms