STC89C52單片機定時器2詳細整理

51單片機是我自學的第一款單片機,那時正好是過春節,想起那個寒假,外面下着大雪,有時還會傳來一兩聲爆竹的炸響,而我一個人在房間裏擺弄單片機開發板,反覆調試程序的時光,真是難忘!

我自認爲單片機所有的資源中最不好搞清楚的就是定時器2,尤其是對於那些以前從來沒有玩過單片機的新手。定時器2是新增資源,也是51單片機定時器裏面功能最強大的一個定時器。所以掌握好定時器2還是非常有必要的。以下是在我完全搞明白它的原理和用法的基礎上整理的一篇小文章。讀起來,好像Datasheet一樣!請原諒,希望沒有辜負你的點擊!

定時器2是一個16位定時器/計數器,通過設置特殊功能寄存器T2CON中的C/T2位可將其設置爲定時器或是計數器;通過設置T2CON中的工作模式選擇位可將定時器2設置爲三種工作模式,分別爲捕獲自動重新裝載(遞增或是遞減計數)和波特率發生器

知識點一定時器2的控制寄存器T2CON可按位尋址*

D7--TF2:定時器2溢出標誌位。用於請求中斷(必須由軟件清0

D6--EXF2:定時器外部標誌位。當外部信號使能時,發生外部負跳變時置位請求中斷(必須由軟件清0

D5--RCLK:接受時鐘標誌位。默認情況下串行口中模式1和模式3的時鐘是由定時器1的溢出率提供,若該位置位,則由定時器2提供。

D4--TCLK:發送時鐘標誌位。原理同上

D3--EXEN2:定時器2的外部使能標誌位。定時器2沒有作爲串行口時鐘時,若將該位置位時,將允許T2EX的負跳變產生捕獲或重裝

D2--TR2:定時器2啓動/停止控制位。

D1--C/T2:定時器2的定時器/計數器選擇位(reg52頭文件中定義爲了C_T2,請注意,下面相同

D0--CP/RL2:捕獲/重裝標誌位。

知識點二  定時器2的模式控制寄存器T2MOD(不可按位尋址)

該寄存器在單片機的頭文件reg2.h中可能沒有被定義,自己定義吧!

D1—T2OE:定時器2輸出使能位

D0—DCEN:向下計數使能位     

知識點三:定時器2的三種模式*

*1、捕獲模式*

"CP/RL2=1"&&"TR2=1"時進入捕獲模式。通過對控制寄存器T2CON的外部使能標誌位EXEN2的置位和清0,又可以有分爲如下兩種工作模式:

<1>EXEN2=0

     此時定時器2作爲一個16位的定時器/計數器(由定時器/計數器選擇位C/T2位選擇)使用,實驗已通過。

<2>EXEN2=1

    此時定時器在前者的基礎上,增加一個特性,即允許接受外部輸入T2CON的負跳變,此負跳變使定時器2中的TH2TL2中的值存入陷阱寄存器RCAP2HRCAP2L中,並將外部標誌位EXF2置位,引起中斷。該中斷與前者中的中斷同時存在並共用同一中斷程序(在中斷中可檢測TF2T2EX位確定是哪一個引起的中斷)。除此之外該模式下,當中斷是T2EX位引發的時,雖然引發了中斷,但是由於不是溢出,並且計數器沒有停止計數,因此,此時TH2TL2不用重新裝載值。

    實驗證明在此模式下可以實現:用溢出中斷輸出方波,用線接入T2EXP1^1,在T2EX的中斷中使蜂鳴器響起來,理論和實踐一樣,蜂鳴器響的頻率是方波的兩倍(因爲它只捕捉負跳變)

2、自動重裝模式(遞增/遞減計數器)*

      16位自動重裝模式中,定時器2可通過C/T2位配置爲定時器/計數器,根據外部使能標誌位EXEN2的置位和清0,可分爲兩種情況:

<1>EXEN2=0

      定時器216位自動重裝的普通定時器,由陷阱寄存器提供重裝的值,只需要預設一下即可,可用於定時精度要求高,定時時間長(16位)的情況。

<2>EXEN2=1時,根據遞減計數使能位DCEN的置位和清0可分爲兩種情況:

A1T2MOD=0x00(DCEN=0;默認情況);

與上一種情況相比,此時16位自動重新裝載可由外部T2EX的負跳變,和溢出任意一種觸發,並都能產生中斷。

A2T2MOD=0x01(DCEN=1);

      此時允許T2EX控制計數的方向;T2EX=0時,重裝的值爲0FF0FF,遞減計數與陷阱寄存器預存值相等時,置位TF2產生中斷。T2EX=1時;自動重裝值爲陷阱寄存器中的值,溢出時置位TF2產生中斷。

3、波特率發生器模式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

      T2CONTCLKRCLK位爲0(默認)時,串行口發送和接受的波特率由定時器1提供;置位爲1時,由定時器2提供。可以一個通過定時器1,一個通過定時器2,這樣可以獲得發送和接受時不同的波特率。

注意的地方: 定時器2作爲定時器時,遞增頻率爲晶振頻率的12分頻,而定時器2作爲波特率發生器時,它的遞增頻率爲晶振頻率的2分頻

模式1和模式3的波特率=(振盪器頻率/32  *  65535-N

定時器2爲計數模式時,外部時鐘信號由T2P1^0)引腳進入。

定時器2作爲波特率發生器的時候,TH2溢出並不會置位TF2,所以此時可以不用禁止定時器2中斷,若是EXEN2位被置位時,可以將T2EX作爲附加的外部中斷。

定時器2作爲波特率發生器的時候,不要對TH2TL2讀寫,可以讀陷阱寄存器,但是也不要寫。當對定時器2的陷阱寄存器進行訪問時,應關閉定時器TR20)。

4、可編程時鐘輸出

      52系列單片機,可設定定時器/計數器2通過T2(p1^0)引腳輸出時鐘。

P1^0除了可以作爲普通I/O口外,還可以作爲定時器2的外部計數輸入和時鐘信號輸出。

     C/T2=0並且T2MODT2OE位爲1時,可將定時器2選爲時鐘信號發生器,自動裝初值。設置公式:

      時鐘信號輸出頻率=(振盪器頻率/4* 65535-N

在時鐘輸出模式下,計數器溢出不會產生中斷請求。這種功能相當於定時器2可同時作爲波特率發生器和時鐘發生器。

**因爲此時外部中斷並沒有被暫用,若是在設置上不衝突的話可能同時還可以響應T2EX引入的外部信號,這個只是猜想,還沒有用實驗證明過哈哈***

知識點三,單片機對於外來脈衝信號具有計數功能,但是有要求:

計數脈衝的最高頻率=振盪器的頻率/24

並且爲了確保給定電平在電平變化之前能被採樣一次,則這個電平至少要維持一個機器週期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章