單片機定時器2使用


定時器T2

reg52.h沒有T2MOD寄存器

regx55.hT2MOD寄存器而且sbit已經定義

概述

定時器2是一個16位通用計數器,其具有兩種操作模式:16位自動重載模式和16位捕獲模式。

如果預分頻功能被禁止,定時器2工作時,16位通用加法計數器以12分頻的周期脈沖計數,每個周期16位通用加法計數器加1或減1

定時器2T2MOD寄存器、T2CON存器、功能存器TH2TL2RC2HRC2L等電路構成。

TH2TL2構成16位通用計數器。

RC2HRC2L作為16位寄存器,在自動重載模式中RC2HRC2L作為16位通用計數器的16位初值寄存器

捕捉模式中,當引腳T2EX上出現下降沿跳變時,把TH2TL2的當前值捕捉到RC2HRC2L中去。

  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/T2T2的定時方式或計數方式選擇位。只能通過軟件的置位或清除;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=1TCLK=1時,CP/RT2控制位不起作用的,被強制工作於定時器溢出自動重裝載模式。

 2.模式寄存器T2MOD

寄存器T2MOD用來選擇定時器2的工作模式。其組成如圖8-8所示。

 

T2MOD(方式寄存器),字節地址0C9H

 

D7     D6     D5     D4     D3     D2     D1     D0

--      --      --      --       --      --      T2OE   DCEN

T2OET2輸出允許位,當T2OE=1的時候,允許時鍾輸出到P1.0。(僅對80C54/80C58有效)

DCEN:向下計數允許位。DCEN=1是允許T2向下計數,否則向上計數。

 

T2的數據寄存器TH2TL2T0T1的用法一樣,而捕獲寄存器RCAP2HRCAP2L只是在捕獲方式下,產生捕獲操作時自動保存TH2TL2的值。

    以上是T2的相關寄存器的描述,其實用法上跟T0T1是差不多的,只是功能增強了,設置的東西多了而已。

定時/計數器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計數至溢出時,將寄存器RC2HRC2L中的16位初始值重新裝入定時器的TH2TL2寄存器中,開始新一輪計數循環。

並置位寄存器T2CONTF2位表示計數溢出,從而向CPU發送中斷請求信號。

溢出標志TF2必須由程序清零。根據控制寄存器T2MODDCEN控制位的設置,自動重載模式可進一步分為兩種類型。

1)禁止遞增/遞減計數模式

DCEN = 0,則遞增/遞減計數選擇被禁止,此時定時器只能遞增計數。工作原理如圖8-10所示。

定時器2寄存器:寄存器T2CONT2MOD包含定時器2的控制位和狀態位(如表2和表3所示),寄存器對RCAP2HRCAP2L是定時器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后溢出並置位TF2RC2寄存器的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重新載入定時器寄存器TH2TL2中。

溢出后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的捕捉/重載觸發信號和方向控制)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM