上一節,稀里糊塗地照著demo測試了定時計數的效果,但對內部和引數的控制還是不解,準備從基礎原理學習定時計數器的工作原理和方式。
8051微控制器的結構是由一內部匯流排連線各功能模組,通過特殊功能暫存器(sfr)集中控制,不同型號引腳定義和sfr定義不同,因此乙個功能模組,可以從相關引腳功能和相關sfr功能學習了解該模組。
以8051為例,其定時計數模組的特點有
2個16位定時計數器,最大計數範圍:0h-ffffh;
相關的sfr:tmod、tcon、th0、tl0、th1、tl1;
相關引腳:t0、t1、int0、int1;
4種工作方式;
其中,t0、t1做為計數脈衝輸入,定時方式時不用,作i/o用,對應p3.4和p3.5;
int0、int1:與定時器執行控制有關,也可以無關,可程式設計設定;
gate選通門:gate=0時,只要trx=1,計數器就開始工作;gate=1時,只有intx腳和trx同時為1時,計數器才開始工作,主要用於測量intx腳上高電平脈衝的寬度。
c/t(計數/定時方式選擇位):c/t=1時,計數方式,即計數器的計數脈衝來自t0或t1引腳的外部事件,c/t=0時:定時方式,計數脈衝來自內部振盪頻率12分頻(1/12)。
m1、m0模式選擇:分別對應四種模式
m1mo=00,方式0:13位定時計數器;
m1m0=01,方式1:16位定時計數器;
m1m0=10,方式2:自動重裝入的8位定時計數器;
m1m0=11,方式3:t0成為兩個獨立的8位計數器;
模式 計數模 最大計數值 最大定時時間
模式0 2^13 8192 8.192ms
模式1 2^16 65536 65.536ms
模式2,3 2^8 256 0.256ms
根據上面的引數,可以得到乙個公式
定時時間=(最大計數值 - 計數初始值) * 脈衝週期
tf1,tf0定時器t1,t0的溢位標誌:計數器溢位時硬體自動置位,即tfx=1,進入中斷後再由硬體自動清除;
tr1,tr0計數器t1,t0的控制位:由軟體置位(計數器開始工作)或清零(計數器停止工作);
ie1,ie0外部中斷int1,int0的請求標誌:當微控制器檢測到intx引腳上有低電平或下降沿時,iex=1,申請中斷;
it1,it0外部中斷觸發型別控制:itx=1時,外部中斷訊號的下降沿觸發iex標誌,itx=0時,外部中斷訊號的低電平觸發iex標誌;
回到定時計數功能上,要搞清以下問題
1.何時控制啟動、停止計數;
2.如何控制定時還是計數;
3.如何控制定時/計數的長短;
4.如何用查詢或者中斷管理溢位事件;
定時/計數器執行控制方式
1.設定gate=0,則非gate=1,因此y=tr0,這樣:
tr0=1,啟動定時器t0執行
tr0=0,停止定時器t0執行
我們把這種控制定時器執行的方法叫軟觸發,最常用。
2.設定gate=1,則非gate=0,因此y=tr0*(非)int0電平,進上步令tr0=1,則y=非int0電平,這樣:
非int0為高電平,啟動定時器t0執行
非int0為低電平,停止定時器t0執行
我們把這種控制定時器執行的方法叫硬觸發,較少用,可以用來測量正脈衝的寬度。
定時器/計數器的初始化方式
1.根據要求給模式暫存器tmod送乙個模式控制字設定定時器的工作方式;(要考慮定時/計數範圍/重灌方式)
2.根據需要給c/t送初值以確定需要的定時時間或計數次數;(預設為0)
3.根據需要給中斷允許暫存器ie送中斷控制字,以開放相應的中斷和設定中斷優先順序;(可選)
4.給tcon送命令字以啟動或禁止c/t的執行
微控制器控制c/t的方式
1.採用查詢方式:程式一直檢測tf0(或tf1),若tf0=1(或tf1=1),說明定時時間到或計數滿,從而開始相應處理,如
while(tf0==0); //或while(!tf0)
tf0=0; //清除標誌位
...... //開始處理溢位事件
2.採用中斷方式:程式初始化時,設定定時器溢位中斷允許後,內部硬體自動檢測到tf0=1(或tf1=1)時,自動響應中斷,進入中斷服務程式。
下面通過幾個例子,來驗證一下上面的知識點。
定時計數器
1 工作方式0 當tmod中的m1,m2設定成0,0時,定時器 計數器就工作在方式0,工作方式0是一種13位定時器 計數器方式。可用來測量外訊號的脈衝寬度所持續的時間。2 工作方式1 工作方式1為16位定時器 計數其結構和操作與工作方式0基本相同,唯一的區別是工作方式1的計數器由tl0的8位和th0...
Linux驅動入門 定時計數
第四章 定時計數 4.1 定時器基本概念 系統定時器頻率 節拍率 是通過靜態預處理器定義的,也就是hz。連續兩次時鐘的間隔時間叫做節拍,它等於1 hz秒。全域性變數jiffies用來記錄自系統啟動以來產生的節拍的總數,jiffies在 一秒內增加的值就是hz,系統執行的時間以秒為單位計算,就等於ji...
實驗6 8254定時 計數器實驗
實驗內容 基礎部分 1 編寫程式,是8254的計數器1分別工作在方式0 1 2 3下,在示波器上觀察各工作方式下out1的輸出波形。拓展部分 2 使用單脈衝開關手動生成8254的輸入時鐘,觀察方式0的輸出波形。3 編寫程式,在示波器上顯示週期為1s的方波。4 利用8254方式2或方式3精確定時,控制...