定時 計數器雖然只有5個字,其實也就這點東西

2021-10-03 19:53:56 字數 1638 閱讀 1680

51微控制器有2個16位定時器/計數器:定時器0(t0為p3.4)和定時器1(t1為p3.5)

工作在定時模式時最高單次定時時間為

65535*1.085 us = 71105.475 us = 71.105 ms, 大於71.105ms的要拆分。

當工作在計數器模式時,t0(p3.4引腳),t1(p3.5引腳)每來乙個脈衝計數暫存器加1。

使用定時/計數器的步驟:

啟動定時/計數器(通過tcon控制器)

設定定時/計數器工作模式(通過tmod控制器)

查詢定時/計數器是否溢位(讀tcon內tf位)

tf1(t1溢位標誌位):當定時/計數器t1溢位時由硬體置「1」tf1,向cpu發出中斷請求,一直保持到cpu響應時,才由硬體清「0」(tf1也可以由程式查詢清「0」)

tr1(定時器t1執行控制位):該位由軟體置「1」或清零。tr1= 1就允許t1開始計數,tr1=0時禁止t1計數。

tf0(t0溢位標誌位)tr0(定時器t0執行控制位),配置方法與t1相同。

ie1、it1、ie0、it0與定時/計數器無關,是控制外部中斷的。

tmod3~0位設定t0定時器的,和t1設定相同(除工作模式3)

51微控制器乙個機器週期大約是1.085μs。

微控制器最多單次計時71ms。

利用定時器1,20秒定時器,20秒到了的時候點亮led1。

65535-(50000/1.085)=19452,也就是說從19452開始計時,到65535正好是0.5ms

以下程式使用的是t1。

#include

#define uint unsigned int

void

main()

if(i==20)

if(b==20)

}}

程式設計使定時器1做計數器,工作模式2,使用定時器0讓led1小燈100毫秒閃爍一次,定時器1記錄led1閃爍次數,並且用數碼管實時顯示計數數值。

#include

#define uint unsigned int

sbit we = p2^7;

sbit du = p2^6;

sbit led1 = p1^0;

uchar code leddata=

;void

delay

(uint z)

void

display

(uchar i)

void

main()

if(i==2)

}}

定時計數器

1 工作方式0 當tmod中的m1,m2設定成0,0時,定時器 計數器就工作在方式0,工作方式0是一種13位定時器 計數器方式。可用來測量外訊號的脈衝寬度所持續的時間。2 工作方式1 工作方式1為16位定時器 計數其結構和操作與工作方式0基本相同,唯一的區別是工作方式1的計數器由tl0的8位和th0...

實驗6 8254定時 計數器實驗

實驗內容 基礎部分 1 編寫程式,是8254的計數器1分別工作在方式0 1 2 3下,在示波器上觀察各工作方式下out1的輸出波形。拓展部分 2 使用單脈衝開關手動生成8254的輸入時鐘,觀察方式0的輸出波形。3 編寫程式,在示波器上顯示週期為1s的方波。4 利用8254方式2或方式3精確定時,控制...

STM8 定時計數器2

硬體平台 stm8s103 編譯環境 iar for stm8 include include 設定系統時鐘使用內部振盪器為16mhz執行。void initialisesystemclock 定時器2溢位中斷 pragma vector tim2 ovr uif vector interrupt ...