定時器T2
reg52.h沒有T2MOD寄存器
regx55.h有T2MOD寄存器而且sbit已經定義
概述
定時器2是一個16位通用計數器,其具有兩種操作模式:16位自動重載模式和16位捕獲模式。
如果預分頻功能被禁止,定時器2工作時,16位通用加法計數器以12分頻的周期脈沖計數,每個周期16位通用加法計數器加1或減1。
定時器2由T2MOD寄存器、T2CON存器、功能存器TH2、TL2、RC2H、RC2L等電路構成。
TH2、TL2構成16位通用計數器。
RC2H、RC2L作為16位寄存器,在自動重載模式中RC2H、RC2L作為16位通用計數器的16位初值寄存器
捕捉模式中,當引腳T2EX上出現下降沿跳變時,把TH2、TL2的當前值捕捉到RC2H、RC2L中去。
1.控制寄存器T2CON
T2CON(T2的控制寄存器),字節地址0C8H:
位地址 0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H
符 號 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2
各位的定義如下:
TF2:定時/計數器2溢出標志,T2溢出時置位,並申請中斷。只能用軟件清除,但T2作為波特率發生器使用的時候,(即RCLK=1或TCLK=1),T2溢出時不對TF2置位。
EXF2:當EXEN2=1時,且T2EX引腳(P1.0)出現負跳變而造成T2的捕獲或重裝的時候,EXF2置位並申請中斷。EXF2也是只能通過軟件來清除的。
RCLK:串行接收時鍾標志,只能通過軟件的置位或清除;用來選擇T1(RCLK=0)還是T2(RCLK=1)來作為串行接收的波特率產生器
TCLK:串行發送時鍾標志,只能通過軟件的置位或清除;用來選擇T1(TCLK=0)還是T2(TCLK=1)來作為串行發送的波特率產生器
EXEN2:T2的外部允許標志,只能通過軟件的置位或清除;EXEN2=0:禁止外部時鍾觸發T2;EXEN2=1:當T2未用作串行波特率發生器時,允許外部時鍾觸發T2,當T2EX引腳輸入一個負跳變的時候,將引起T2的捕獲或重裝,並置位EXF2,申請中斷。
TR2:T2的啟動控制標志;TR2=0:停止T2;TR2=1:啟動T2
C/T2:T2的定時方式或計數方式選擇位。只能通過軟件的置位或清除;C/T2=0:選擇T2為定時器方式;C/T2=1:選擇T2為計數器方式,下降沿觸發。
CP/RT2:捕獲/重裝載標志,只能通過軟件的置位或清除。CP/RT2=0時,選擇重裝載方式,這時若T2溢出(EXEN2=0時)或者T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2重裝載;CP/RT2=1時,選擇捕獲方式,這時若T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2捕獲操作。但是如果RCLK=1或TCLK=1時,CP/RT2控制位不起作用的,被強制工作於定時器溢出自動重裝載模式。
2.模式寄存器T2MOD
寄存器T2MOD用來選擇定時器2的工作模式。其組成如圖8-8所示。
T2MOD(方式寄存器),字節地址0C9H:
D7 D6 D5 D4 D3 D2 D1 D0
-- -- -- -- -- -- T2OE DCEN
T2OE:T2輸出允許位,當T2OE=1的時候,允許時鍾輸出到P1.0。(僅對80C54/80C58有效)
DCEN:向下計數允許位。DCEN=1是允許T2向下計數,否則向上計數。
T2的數據寄存器TH2、TL2和T0、T1的用法一樣,而捕獲寄存器RCAP2H、RCAP2L只是在捕獲方式下,產生捕獲操作時自動保存TH2、TL2的值。
以上是T2的相關寄存器的描述,其實用法上跟T0、T1是差不多的,只是功能增強了,設置的東西多了而已。
定時/計數器2其實用到最多的就是T2CON這個寄存器啦,它設定的定時和計數的方式。有三種工作方式,捕獲,自動重裝,波特率發生器
定時器T2工作模式
波特率發生器:
當T2CON(表3)中的TCLK 和RCLK 置位時,定時/計數器2 作為波特率發生器使用。如果定時/計數器2 作為發送器或接收器,其發送和接收的波特率可以是不同的,定時器1 用於其它功能,如圖7 所示。若RCLK 和TCLK 置位,則定時器2工作於波特率發生器方式。
波特率發生器的方式與自動重裝載方式相仿,在此方式下,TH2 翻轉使定時器2 的寄存器用RCAP2H 和RCAP2L 中的16位數值重新裝載,該數值由軟件設置。
在方式1 和方式3 中,波特率由定時器2 的溢出速率根據下式確定:
方式1和3的波特率=定時器的溢出率/16
定時器既能工作於定時方式也能工作於計數方式,在大多數的應用中,是工作在定時方式(C/T2=0)。定時器2 作為波特率發生器時,與作為定時器的操作是不同的,通常作為定時器時,在每個機器周期(1/12 振盪頻率)寄存器的值加1,而作為波特率發生器使用時,在每個狀態時間(1/2 振盪頻率)寄存器的值加1。波特率的計算公式如下:
方式1和3的波特率=振盪頻率/{32*[65536-(RCP2H,RCP2L)]}式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16 位無符號數。
定時器2 作為波特率發生器使用的電路如圖7 所示。T2CON 中的RCLK 或TCLK=1 時,波特率工作方式才有效。在波特率發生器工作方式中,TH2 翻轉不能使TF2 置位,故而不產生中斷。但若EXEN2 置位,且T2EX 端產生由1 至0 的負跳變,則會使EXF2 置位,此時並不能將(RCAP2H,RCAP2L)的內容重新裝入TH2 和TL2 中。所以,當定時器2 作為波特率發生器使用時,T2EX 可作為附加的外部中斷源來使用。需要注意的是,當定時器2 工作於波特率器時,作為定時器運行(TR2=1)時,並不能訪問TH2 和TL2。因為此時每個狀態時間定時器都會加1,對其讀寫將得到一個不確定的數值。
然而,對RCAP2 則可讀而不可寫,因為寫入操作將是重新裝載,寫入操作可能令寫和/或重裝載出錯。在訪問定時器2或RCAP2 寄存器之前,應將定時器關閉(清除TR2)。
產生11.0592MHz, 9600bps
void Inituart(void)//11.0592MHz,9600bps
{TH2=RCAP2H=0Xff;
TL2=RCAP2L=0XDC;
T2MOD=0;//reg52沒有
T2CON=0X34;
}
2.自動重載模式
控制寄存器T2CON中的 置“0”時,定時器2被選擇為自動重載模式。
該模式下,定時器2計數至溢出時,將寄存器RC2H、RC2L中的16位初始值重新裝入定時器的TH2、TL2寄存器中,開始新一輪計數循環。
並置位寄存器T2CON的TF2位表示計數溢出,從而向CPU發送中斷請求信號。
溢出標志TF2必須由程序清零。根據控制寄存器T2MOD中DCEN控制位的設置,自動重載模式可進一步分為兩種類型。
1)禁止遞增/遞減計數模式
若DCEN = 0,則遞增/遞減計數選擇被禁止,此時定時器只能遞增計數。工作原理如圖8-10所示。
定時器2寄存器:寄存器T2CON和T2MOD包含定時器2的控制位和狀態位(如表2和表3所示),寄存器對RCAP2H和RCAP2L是定時器2的捕捉/自動重載寄存器。中斷寄存器:各中斷允許位在IE寄存器中,六個中斷源的兩個優先級也可在IE中設置。
若EXEN2 = 0,置位TR2定時器開始遞增計數,計數至最大值FFFFH后溢出並置位TF2,同時將寄存器RC2中的16位重載值重新裝入定時器寄存器。
重載值由軟件預先設置。新一輪計數循環開始,定時器同上一輪計數循環一樣,從重載值開始遞增計數。
若EXEN2 = 1,置位TR2定時器開始遞增計數至最大值FFFFH。計數溢出或輸入引腳T2EX的負/正跳變(由寄存器T2MOD的位EDGESEL選擇)均會引起16位重載,將寄存器RC2的內容重新裝入定時器寄存器。
中斷標志位:
若由溢出引起重載,溢出標志TF2置位。
若由引腳T2EX的負/正跳變引起重載,寄存器T2CON中的EXF2置位。
這兩種情況均產生中斷,定時器進入下一輪計數循環。EXF2標志和TF2一樣必須由軟件清零。
允許硬件啟動時(T2RHEN=1)
T2EX第一個上升沿/下降沿觸發TR2=1啟動T2;
上升沿/下降沿的選擇由T2REGS選擇;
如果使能外部控制(EXEN2=1),引腳T2EX的邊沿跳變完成兩個任務:(由T2REGS選擇上升沿/下降沿)
啟動T2
EXF2置位
2)以遞增或遞減計數。
引腳T2EX的邏輯電平為1時
定時器2遞增計數,因此定時器遞增計數,計數至最大值FFFFH后溢出並置位TF2,RC2寄存器的16位重載值重新裝入定時器寄存器。
引腳T2EX的邏輯電平為0時
定時器2遞減計數。定時器遞減計數並當THL2的值和寄存器RC2中的值相等時發生下溢。下溢后置位TF2,並將值FFFFH重新載入定時器寄存器THL2中
若允許硬件啟動T2(當T2RHEN=1)時,根據T2EX輸入的是上升沿/下降沿可將T2設置為遞增、遞減計數
T2由上升沿啟動,T2只能工作於遞增模式
T2由下降沿啟動,T2只能工作於遞減模式
定時250us產生2kHz方波
void Inittimer2 (void)//12MHz,2kHz
{TH2=RCAP2H=0Xff;
TL2=RCAP2L=0XDC;
T2MOD=0;//reg52沒有
IE=0XA0;
T2CON=0X04;
}
void timer2(void) interrupt 5 using 2
{ TF2=0;
P1_2=!P1_2;
}
main()
{ inittimer2();
while(1);
}
3.捕獲模式
控制寄存器T2CON中的 及EXEN2置位時,定時器進入16位捕獲模式。
此模式下,遞減計數功能必須禁止。16位計數器始終遞增計數,計數至最大值FFFFH后溢出,TF2置位並將0000H重新載入定時器寄存器TH2、TL2中。
溢出后TF2置位,則定時器向CPU發送中斷請求。
在引腳T2EX的下降沿/上升沿(由T2MOD.EDGESEL選擇),將定時器寄存器(THL2)的值捕獲到寄存器RC2中。如果在計數器加1時檢測到捕獲信號,計數器先加1然后執行捕獲操作,從而確保總能捕獲到定時計數器的最新值。執行完捕獲操作,EXF2置位、可用來產生中斷請求
若允許硬件啟動T2(當T2RHEN=1)時,引腳T2EX輸入的第一個下降沿/上升沿(由T2MOD.EDGESEL選擇)啟動T2
在啟動T2的同時,置位EXF2。
在下一個下降沿/上升沿到來時,將進行捕獲操
引腳號第二功能 P1.0 T2(定時器/計數器T2的外部計數輸入),時鍾輸出
P1.1 T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)
