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