簡介
定時器/計數器模式控制暫存器TMOD是一個逐位定義的8位暫存器,但只能使用位元組定址,其位元組地址為89H。
其格式為:
工作原理
其中低四位(即D0 ~ D3)定義定時器/計數器T0,高四位(即D4 ~ D7)定義定時器/計數器T1。
Ⅰ,GATE——門控制。
●GATE=1時,“與門”的輸出信號K由INTx輸入電平和TRx位的狀態一起決定(即此時K=TRx·INTx),若且唯若TRx=1,INTx=1(高電平)時,計數啟動;否則,計數停止。
當INT0引腳為高電平時且TR0置位,TR0=1;啟動定時器T0;
當INT1引腳為高電平時且TR1置位,TR1=1;啟動定時器T1。
●GATE=0時,“或門”輸出恆為1,“與門”的輸出信號K由TRx決定(即此時K=TRx),定時器不受INTx輸入電平的影響,由TRx直接控制定時器的啟動和停止。
當TR0=1,啟動定時器T0。
當TR1=1,啟動定時器T1。
Ⅱ,C/T——功能選擇位
C/T=0時為定時功能: 加1計數器對脈衝f進行計數,每來一個脈衝,計數器加1,直到計時器TFx滿溢出;
C/T=1時為計數功能: 加1計數器對來自輸入引腳T0(P3.4)和T1(P3.5)的外信號脈衝進行計數,每來一個脈衝,計數器加1,直到計時器TFx滿溢出;
Ⅲ,M0、M1——方式選擇功能
MCS-51的定時器T0有4種工作方式:方式0,方式1,方式2,方式3。
MCS-51的定時器T1有3種工作方式:方式0,方式1,方式2。
M1 | M0 | 工作方式 | 功能說明 |
0 | 0 | 方式0 | 13位定時器/計數器 |
0 | 1 | 方式1 | 16位定時器/計數器 |
1 | 0 | 方式2 | 自動重載8位定時器/計數器 |
1 | 1 | 方式3 | T0分為2個8位獨立計數器,T1無方式3 |
初始化
由於定時器/計數器的功能是由軟體編程確定的,所以一般在使用定時/計數器前都要對其進行初始化,使其按設定的功能工作。初始化的步驟一般如下:
1、確定工作方式(即對TMOD賦值);
2、預置定時或計數的初值(可直接將初值寫入TH0、TL0或TH1、TL1);
3、根據需要開放定時器/計數器的中斷(直接對IE位賦值);
4、啟動定時器/計數器(若已規定用軟體啟動,則可把TR0或TR1置“1”;若已規定由外中斷引腳電平啟動,則需給外引腳加啟動電平。當實現了啟動要求後,定時器即按規定的工作方式和初值開始計數或定時)。
下面介紹一下確定定時器/計數器初值的具體方法。
因為在不同工作方式下計數器位數不同,因而最大計數值也不同。
現假設最大計數值為M,那么各方式下的
最大值M值如下:
方式0:M=2 *13=8 192
方式1:M=2*16=65 536
方式2:M=2*8=256
方式3:定時器0分成兩個8位計數器,所以兩個M均為256。
因為定時器/計數器是作“加1”計數,並在計數滿溢出時產生中斷,因此初值X可以這樣計算:
在計數方式下:X=M-計數值
在定時方式下:X=(M-定時值)*機器周期
例子:
TMOD=0x01; //0000 0001
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
程式是採用定時器0工作方式1,TH0=(65536-45872)/256;TL0=(65536-45872)%256;這是定時的時間,定時時間一到就進入中斷程式執行。