定時器2的使用

前言

52單片機(jī)比51單片機(jī)不只是在容量上提升耸携,還多一個定時器2。定時器 T2的功能比 T1苞七、T0都強(qiáng)大藐守,但描述它的資料不多, 可能是使用得比較少的緣故吧蹂风。但好用的東西怎樣放過卢厂,下面來盤盤定時器2。

概述

定時器 T2是一個 16 位的具有自動重裝和捕獲能力的定時 / 計數(shù)器惠啄,它的計數(shù)時鐘源可以是內(nèi)部的機(jī)器周期慎恒,也可以是 P1.0 輸入的外部時鐘脈沖。它由兩個寄存器控制撵渡,他們是寄存器 T2CON,寄存器T2MOD融柬。內(nèi)部還有一個陷阱寄存器( RCAPXL,PXAPXH)與之相關(guān)。T2定時器有三種工作模式姥闭,分別是捕獲丹鸿,自動重裝和波特率發(fā)生器。

寄存器介紹

定時器2控制寄存器T2CON

定時器2控制寄存器T2CON是定時器2的設(shè)置寄存器棚品,用來設(shè)定與定時器2的一些相關(guān)操作靠欢。字節(jié)地址位C8H,可位尋址铜跑。

定時器2控制寄存器T2CON

TF2:定時/ 計數(shù)器 2 溢出標(biāo)志门怪,T2溢出時置位, 并申請中斷锅纺。 只能用軟件清除
但 T2 作為波特率發(fā)生器使用的時候掷空, ( 即 RCLK=1或 TCLK=1),T2溢出時不對 TF2置位。
EXF2:當(dāng) EXEN2=1時,且 T2EX引腳(P1.0)出現(xiàn)負(fù)跳變而造成 T2的捕獲或重裝
的時候坦弟, EXF2置位并申請中斷护锤。 EXF2也是只能通過軟件來清除的
RCLK:串行接收時鐘標(biāo)志酿傍, 只能通過軟件的置位或清除烙懦; 用來選擇 T1(RCLK=0 )還是 T2(RCLK=1 )來作為串行接收的波特率產(chǎn)生器
TCLK:串行發(fā)送時鐘標(biāo)志, 只能通過軟件的置位或清除赤炒; 用來選擇 T1(TCLK=0 )
還是 T2(TCLK=1 )來作為串行發(fā)送的波特率產(chǎn)生器
EXEN2 :T2的外部允許標(biāo)志氯析,只能通過軟件的置位或清除; EXEN2=0 :禁止外部
時鐘觸發(fā) T2莺褒;EXEN2=1 :當(dāng) T2未用作串行波特率發(fā)生器時掩缓,允許外部時鐘觸發(fā) T2,當(dāng) T2EX引腳輸入一個負(fù)跳變的時候遵岩,將引起 T2的捕獲或重裝你辣,并置位 EXF2,申請中斷旷余。
TR2:T2的啟動控制標(biāo)志绢记; TR2=0:停止 T2;TR2=1:啟動 T2
C/T2:T2 的定時方式或計數(shù)方式選擇位正卧。 只能通過軟件的置位或清除; C/T2=0 :
選擇 T2 為定時器方式跪解; C/T2=1 :選擇 T2 為計數(shù)器方式炉旷, 下降沿觸發(fā)。
CP/RT2 :捕獲/重裝載標(biāo)志叉讥,只能通過軟件的置位或清除窘行。 CP/RT2=0 時,選擇重裝載方式图仓,這時若 T2 溢出( EXEN2=0 時)或者 T2EX 引腳(P1.0)出現(xiàn)負(fù)跳變(EXEN2=1 時)罐盔,將會引起 T2 重裝載; CP/RT2=1 時救崔,選擇捕獲方式惶看,這時若 T2EX 引腳( P1.0)出現(xiàn)負(fù)跳變( EXEN2=1 時),將會引起 T2 捕獲操作六孵。但是如果 RCLK=1 或 TCLK=1 時纬黎,CP/RT2 控制位不起作用的,被強(qiáng)制工作于定時器溢出自動重裝載模式劫窒。

工作模式設(shè)置圖如下本今,x表示無效,無論高低電平。
工作模式設(shè)置

定時器2控制寄存器T2MOD

定時器2控制寄存器T2MOD用來設(shè)定定時器2自動重轉(zhuǎn)模式遞增或遞減模式冠息,字節(jié)地址為C9H, 不可位尋址挪凑,且可能在頭文件沒有定義,需要自行定義逛艰。--表示保留未使用岖赋。

定時器2控制寄存器T2MOD

T2OE :T2 輸出允許位,當(dāng) T2OE=1 的時候瓮孙,允許時鐘輸出到 P1.0唐断。(僅對
80C54/80C58 有效)
DCEN:向下計數(shù)允許位。 DCEN=1 是允許 T2 向下計數(shù)杭抠,否則向上計數(shù)脸甘。

自動重裝模式

這個工作模式與8位自動重裝一樣,只是定時器2是16位偏灿。還有功能更加強(qiáng)大丹诀。可以是正常的遞增計數(shù)翁垂,也可以是遞減計數(shù)铆遭。遞增遞減控制位位于寄存器T2MOD的DCEN位。下圖是自動重裝模式邏輯圖沿猜。

自動重裝模式

TH2,TL2構(gòu)成16位加1計數(shù)器
RCAP2H,RCAP2L構(gòu)成16位初值寄存器
T2EX引腳即P1.0引腳
當(dāng)定時器 2 工作于 16 位自動重裝載方式時枚荣,能對其編程為向上或向下計數(shù)方式, 這個功能可通過特殊功能寄存器 T2MOD的 DCEN 位(允許向下計數(shù))來選擇的啼肩。復(fù)位時橄妆, DCEN 位置“ 0”,定時器 2 默認(rèn)設(shè)置為向上計數(shù)祈坠。(遞增計數(shù))當(dāng) DCEN置位時害碾,定時器 2 既可向上計數(shù)也可向下計數(shù),這取決于 T2EX (P1.1)引腳的值赦拘。當(dāng) DCEN=0 時慌随,定時器 2 自動設(shè)置為向上計數(shù),在這種方式下躺同, T2CON 中的 EXEN2 控制位有兩種選擇阁猜,若 EXEN2=0,定時器 2 為向上計數(shù)至 0FFFFH (65535)溢出笋籽,置位 TF2 激活中斷蹦漠,同時把 16 位計數(shù)寄存器 RCAP2H 和 RCAP2L重裝載, RCAP2H 和 RCAP2L 的值軟件預(yù)置车海。若 EXEN2=1笛园,定時器 2 的 16 位重裝載由溢出或外部輸入端 T2EX 從 1 至0 的下降沿觸發(fā)隘击。這個脈沖使 EXF2 置位,如果中斷允許研铆,同樣產(chǎn)生中斷埋同。
當(dāng) DCEN=1 時,允許定時器 2 向上或向下計數(shù)棵红,這種方式下凶赁, T2EX 引腳控制計數(shù)器方向。 T2EX 引腳為邏輯“ 1”時逆甜,定時器向上計數(shù)虱肄,當(dāng)計數(shù) 0FFFFH 向上溢出時,置位 TF2交煞,同時把 16 位計數(shù)寄存器RCAP2H 和 RCAP2L重裝載到 TH2 和 TL2 中咏窿。 T2EX 引腳為邏輯“ 0”時,定時器 2 向下計數(shù)素征, 當(dāng) TH2 和 TL2 中的數(shù)值等于 RCAP2H 和RCAP2L中的值時集嵌,計數(shù)溢出,置位 TF2御毅,同時將 0FFFFH 數(shù)值重新裝入定時寄存器中根欧。
當(dāng)定時 / 計數(shù)器 2 向上溢出或向下溢出時,置位 EXF2 位端蛆。

寄存器凤粗,原理都說完,只差實戰(zhàn)欺税。

示例

#include<reg52.h>
sbit led=P1^1;      //位定義
sfr T2MOD=0XC9;     //寄存器T2MOD定義
main()
{
                     //50微秒@11.0592MHz
    T2MOD = 0;      //---- --00  初始化模式寄存器  默認(rèn)向上計數(shù)
    T2CON = 0;      //0000 0000  初始化控制寄存器 一個中斷源侈沪,16位自動重裝模式
    TL2 = 0x00;     //設(shè)置定時初值
    TH2 = 0x4C;     //設(shè)置定時初值
    RCAP2L = 0x00;      //設(shè)置定時重載值
    RCAP2H = 0x4C;      //設(shè)置定時重載值
    TR2 = 1;        //定時器2開始計時
    IE=0XA0;        //1010 0000 打開全局中斷,定時器2中斷
    while(1);
}
void timer_T2() interrupt 5    //中斷函數(shù)
{
    static unsigned char count;     //定義變量晚凿,記錄中斷次數(shù)
    TF2=0;              //軟件清零定時器2溢出標(biāo)志位
    count++;
    if(count==20)       //時間為1秒
    {
        count=0;         //清零
        led=~led;        //狀態(tài)取反
    }
}

本程序講解定時器2,16位自動重裝模式瘦馍,只是簡單示范如何操作歼秽,更多其他功能就不展示,希望能融會貫通情组,解鎖更多新技能燥筷。

捕獲模式

介紹捕獲模式前,先看一下捕獲的意思院崇。捕獲 肆氓,就是捕捉某一瞬間的值。這個模式通常是用來測量外部某個脈沖的的寬度或周期底瓣。使用捕獲功能可以非常準(zhǔn)確測量出脈沖寬度或周期谢揪。

捕獲模式

工作原理

在捕獲模式下,定時器計數(shù),當(dāng)與捕獲功能相關(guān)的引腳產(chǎn)生負(fù)跳變時(P1.1)拨扶,捕獲會會立即將計數(shù)器寄存器中的數(shù)值準(zhǔn)確的獲取凳鬓,并且存入陷阱寄存器(RCAPXH,RCAPXL),同時向CPU申請中斷患民,方便軟件記錄缩举。當(dāng)該引腳產(chǎn)生下一次負(fù)跳變,便會產(chǎn)生另一個捕獲匹颤,再次向CPU申請中斷仅孩,軟件記錄兩次數(shù)據(jù),便可得出脈沖周期印蓖。

使用

在捕獲方式下辽慕,通過 T2CON 控制位 EXEN2 來選擇兩種方式。如果EXEN2=0另伍,定時器 2 是一個 16 位定時器或計數(shù)器鼻百, 計數(shù)溢出時, 對 T2CON 的溢出標(biāo)志 TF2 置位摆尝,同時激活中斷温艇。如果 EXEN2=1,定時器 2 完成相同的操作堕汞,而當(dāng) T2EX(P1.1) 引腳外部輸入信號發(fā)生 1 至 0 負(fù)跳變時勺爱,也出現(xiàn) TH2 和TL2 中的值分別被捕獲到 RCAP2H 和 RCAP2L 中。另外讯检, T2EX 引腳信號的跳變使得 T2CON 中的 EXF2 置位琐鲁,與 TF2 相仿, EXF2 也會激活中斷人灼。

示例

#include<reg52.h>
#define uchar unsigned char 
#define uint unsigned int
uchar flag=0;
uint high,low,value;     //定義變量高位围段,低位,輸出值
main()
{
    uint temp_1,temp_2,result;
    T2CON=0X09;        // 0000 1001 設(shè)定捕獲模式
    IE=0XA0;          //1010 0000  打開總中斷投放,定時器2中斷
    TR2=1;           //啟動定時器2中斷
    while(1)
    {
        if(flag==1)
        {
            temp_1=value;     //記錄第一次值
        }
        if(flag==2) 
        {
            temp_2=value;      //記錄第二次直
            TR2=0;             //關(guān)閉定時器
            flag=0; 
        }
        result=temp_1+temp_2;   //最終脈沖周期
    }
}
void timer2_T2() interrupt 5
{
    EXF2=0;        //軟件置定時器外部標(biāo)志0
    flag++;
    high=RCAP2H;    //讀取寄存器值
    low=RCAP2L;
    value=high*256+low;    //轉(zhuǎn)化為16位
    RCAP2L=0x00;    //清零
    RCAP2H=0x00;
}

波特率發(fā)生器模式

波特率發(fā)生器模式邏輯結(jié)構(gòu)

當(dāng) T2CON 中的 TCLK 和 RCLK 置位時奈泪,定時 / 計數(shù)器 2 作為 波特率發(fā)生器使用。如果定時 / 計數(shù)器 2 作為發(fā)送器或接收器灸芳,其發(fā)送和接收的波特率可以是不同的涝桅。
TCLK 置位,則定時器 2 工作于 波特率發(fā)生器 方式烙样。波特率發(fā)生器的方式與自動重裝載方式相仿冯遂,在此方式下, TH2 翻轉(zhuǎn)使定時器 2 的寄存器用 RCAP2H 和 RCAP2L 中的 16 位數(shù)值重新裝載谒获,該數(shù)值由軟件設(shè)置蛤肌。
當(dāng)定時器配置為計數(shù)方式時壁却,外部時鐘信號由T2引腳進(jìn)入。在方式 1 和方式 3 中寻定,波特率由定時器 2 的溢出速率根據(jù)下式確定:
方式 1 和 3 的波特率 =定時器的溢出率 /16
波特率

定時器既能工作于定時方式也能工作于計數(shù)方式儒洛,在大多數(shù)的應(yīng)用中,是工作在定時方式( C/T2=0)狼速。定時器 2 作為波特率發(fā)生器時琅锻,與作為定時器的操作是不同的,通常作為定時器時向胡,在每個機(jī)器周期( 1/12 振蕩頻率)寄存器的值加 1恼蓬,而作為波特率發(fā)生器使用時, 在每個狀態(tài)時間 (1/2 振蕩頻率)寄存器的值加 1僵芹。波特率的計算公式如下:
方式 1 和 3 的波特率 =振蕩頻率 /{32[65536-(RCP2H,RCP2L)]}
波特率

式中(RCAP2H 处硬,RCAP2L)是 RCAP2H和 RCAP2L中的 16 位無符號數(shù)
T2CON 中的RCLK 或 TCLK=1 時拇派,波特率工作方式才有效荷辕。 在波特率發(fā)生器工作方式中,TH2 翻轉(zhuǎn)不能使 TF2 置位件豌,故而不產(chǎn)生中斷疮方。 但若 EXEN2 置位,且 T2EX 端產(chǎn)生由 1 至 0 的負(fù)跳變茧彤,則會使 EXF2 置位骡显,此時并不能將 (RCAP2H,RCAP2L)的內(nèi)容重新裝入 TH2 和 TL2 中曾掂。所以惫谤,當(dāng)定時器 2 作為波特率發(fā)生器使用時,T2EX 可作為附加的外部中斷源來使用珠洗。
需要注意的是溜歪,當(dāng)定時器 2 工作于波特率器時,作為定時器運(yùn)行( TR2=1)時许蓖,并不能訪問 TH2 和 TL2痹愚。因為此時每個狀態(tài) 時間定時器 都會加 1,對其讀寫將得到一個不確定的數(shù)值蛔糯。然而,對 RCAP2 則可讀而不可寫窖式,因為寫入操作將是重新裝載蚁飒,寫入操作可能令寫和 / 或重裝載出錯。在訪問定時器 2 或 RCAP2 寄存器之前萝喘,應(yīng)將
定時器關(guān)閉(清除 TR2)*淮逻。

示例

void UartInit(void)     //9600bps@11.0592MHz
{
    SCON = 0x50;        // 0000 0101  串行口方式一
    TL2 = 0xE8;     //設(shè)定定時初值
    TH2= 0xFF;      //設(shè)定定時初值
    TH2=RCAP2H;     //賦值陷阱寄存器
    TL2=RCAP2L;
    T2CON=0X34;     //0011 0100  波特率發(fā)生器模式    
                    //TH2溢出不產(chǎn)生中斷琼懊,不用設(shè)置中斷
}

貼出波特率發(fā)生器模式初始化代碼,需要什么功能自行添加爬早。

結(jié)束語

定時器2的講解結(jié)束哼丈,確實使用比定時器0,1稍微困難筛严,但它功能強(qiáng)大醉旦,能解決很多問題。在定時器不夠用的情況下桨啃,定時器2不失為一個好的備用方案车胡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市照瘾,隨后出現(xiàn)的幾起案子匈棘,更是在濱河造成了極大的恐慌,老刑警劉巖析命,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主卫,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃愤,警方通過查閱死者的電腦和手機(jī)簇搅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼浦,“玉大人馍资,你說我怎么就攤上這事」卦耄” “怎么了鸟蟹?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長使兔。 經(jīng)常有香客問我建钥,道長,這世上最難降的妖魔是什么虐沥? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任熊经,我火速辦了婚禮,結(jié)果婚禮上欲险,老公的妹妹穿的比我還像新娘镐依。我一直安慰自己,他們只是感情好天试,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布槐壳。 她就那樣靜靜地躺著,像睡著了一般喜每。 火紅的嫁衣襯著肌膚如雪务唐。 梳的紋絲不亂的頭發(fā)上雳攘,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音枫笛,去河邊找鬼吨灭。 笑死,一個胖子當(dāng)著我的面吹牛刑巧,可吹牛的內(nèi)容都是我干的喧兄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼海诲,長吁一口氣:“原來是場噩夢啊……” “哼繁莹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起特幔,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤咨演,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚯斯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄风,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年拍嵌,在試婚紗的時候發(fā)現(xiàn)自己被綠了遭赂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡横辆,死狀恐怖撇他,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狈蚤,我是刑警寧澤困肩,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站脆侮,受9級特大地震影響锌畸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一潭枣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幻捏,春花似錦盆犁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春翰铡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讽坏。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工锭魔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人路呜。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓迷捧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胀葱。 傳聞我的和親對象是個殘疾皇子漠秋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容