14.定時器和計數器

CPU時序的有關知識:

振盪週期:爲單片機提供定時信號的振盪源的週期(晶振週期或外加振盪週期)該開發板外接12M(頻率)晶振提供震盪週期
狀態週期:2個振盪週期爲1個狀態週期,用S表示。振盪週期又稱S週期或時鐘週期。
機器週期:1個機器週期含6個狀態週期,12個振盪週期。
指令週期:完成1條指令所佔用的全部時間,它以機器週期爲單位。
外接晶振爲12MHz時,51單片機相關週期的具體值爲:
振盪週期=1/12us;
狀態週期=1/6us;
機器週期=1us;
指令週期=1~4us;
51單片機有兩組定時器/計數器,因爲既可以定時,又可以計數,故稱之爲定時器/計數器。
定時器/計數器和單片機的CPU是相互獨立的。定時器/計數器工作的過程是自動完成的,不需要CPU的參與。
51單片機中的定時器/計數器是根據機器內部的時鐘或者是外部的脈衝信號對寄存器中的數據加1。
有了定時器/計數器之後,可以增加單片機的效率,一些簡單的重複加1的工作可以交給定時器/計數器處理。CPU轉而處理一些複雜的事情。同時可以實現精確定時作用。
(之前講的delay函數不是精確的)

定時/計數器工作原理:

定時/計數器實質上是一個加1計數器。它隨着計數器的輸入脈衝進行自加1,也就是每來一個脈衝,計數器就自動加1,,當加到計數器爲全1時,再輸入一個脈衝就使計數器回零,且計數器的溢出使相應的中斷標誌位置1,向CPU發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作於定時模式,則表示定時時間已到;如果工作於計數模式,則表示計數值已滿。
可見,由溢出時計數器的值減去計數初值纔是加1計數器的計數值。
在這裏插入圖片描述
定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器THx和TLx組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啓動和停止及設置溢出標誌。

工作方式寄存器TMOD:

工作方式寄存器TMOD用於設置定時/計數器的工作方式,低四位用於T0,高四位用於T1。
在這裏插入圖片描述
GATE是門控位, GATE=0時,用於控制定時器的啓動是否受外部中斷源信號的影響。只要用軟件使TCON中的TR0或TR1爲1,就可以啓動定時/計數器工作;GATA=1時,要用軟件使TR0或TR1爲1,同時外部中斷引腳INT0/1也爲高電平時,才能啓動定時/計數器工作。即此時定時器的啓動條件,加上了INT0/1引腳爲高電平這一條件。(通常我們使GATE=0,不需要涉及到外部中斷的引腳)
C/T :定時/計數模式選擇位。C/T =0爲定時模式;C/T =1爲計數模式。
M1M0:工作方式設置位。定時/計數器有四種工作方式。
在這裏插入圖片描述
10:通常用來計算頻率以及串口通信使用
一般使用較多爲方式1和2

控制寄存器TCON:

TCON的低4位用於控制外部中斷,已在前面介紹。TCON的高4位用於控制定時/計數器的啓動和中斷申請。
在這裏插入圖片描述
TF1(TCON.7):T1溢出中斷請求標誌位。T1計數溢出時由硬件自動置TF1爲1。CPU響應中斷後TF1由硬件自動清0。T1工作時,CPU可隨時查詢TF1的狀態。所以,TF1可用作查詢測試的標誌。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。
TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時/計數器的啓動與停止。
TF0(TCON.5):T0溢出中斷請求標誌位,其功能與TF1類同。
TR0(TCON.4):T0運行控制位,其功能與TR1類同。

定時/計數器的工作方式:

方式0:
方式0爲13位計數,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標誌,向CPU發出中斷請求。(注意是TL0的高三位)
在這裏插入圖片描述
定時器模式時有:N=t/ Tcy
計數初值計算的公式爲:X=2^13-N。
定時器的初值還可以採用計數個數直接取補法獲得。
計數模式時,計數脈衝是T0或T1引腳上的外部脈衝。

門控位GATE具有特殊的作用。當GATE=0時,經反相後使或門輸出爲1,此時僅由TR0控制與門的開啓,與門輸出1時,控制開關接通,計數始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啓由外中斷引腳信號和TR0共同控制。當TR0=1時,外中斷引腳信號引腳的高電平啓動計數,外中斷引腳信號引腳的低電平停止計數。這種方式常用來測量外中斷引腳上正脈衝的寬度。
方式1:
方式1的計數位數是16位,由TL0作爲低8位,TH0作爲高8位,組成了16位加1計數器 。
在這裏插入圖片描述
計數個數與計數初值的關係爲:X=2^16-N
方式2:
方式2爲自動重裝初值的8位計數方式。 (不管是TH0還是TL0,一旦計滿了,便會重新裝載)
在這裏插入圖片描述
計數個數與計數初值的關係爲:X=2^8-N
工作方式2特別適合於用作較精確的脈衝信號發生器。
方式3:
方式3只適用於定時/計數器T0,定時器T1處於方式3時相當於TR1=0,停止計數。
在這裏插入圖片描述
工作方式3將T0分成爲兩個獨立的8位計數器TL0和TH0 。
初始化程序需要完成的工作:
1、對TMOD賦值,以確定T0和T1的工作方式。
2、計算初值,並將其寫入TH0、TL0或TH1、TL1。
3、中斷方式時,則對EA賦值,開放定時器中斷。(打開總中斷和定時器中斷)
4、使TR0或TR1置位,啓動定時/計數器定時或計數。
計數器初值的計算:
機器週期也就是CPU完成一個基本操作所需要的時間。
機器週期=1/單片機的時鐘頻率。
51單片機內部時鐘頻率是外部時鐘的12分頻。也就是說當外部晶振的頻率輸入到單片機裏面的時候要進行12分頻。比如說你用的是12MHZ的晶振,那麼單片機內部的時鐘頻率就是12/12MHZ,當你使用12MHZ的外部晶振的時候。機器週期=1/1M=1us。
而我們定時1ms的初值是多少呢,1ms/1us=1000。也就是要計數1000個數,初值=65535-1000+1=64536=FC18H(16進制)(因爲實際上計數器計數到66636才溢出)

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