51微控制器計數 定時器設定

2021-07-05 08:23:26 字數 1286 閱讀 9790

51微控制器內部一般有兩個計數/定時器,t0 t1,其框圖如下:

其中th1 tl1用來設定t1的計數初值,th0 tl0則用來設定t0的。

1、gate——門控位

gate = 0時,僅由執行控制位trx(x = 0,1) = 1 來啟動定時/計數器。

gate = 1時,由trx(x = 0 , 1) = 1 和 外中斷引腳(int0 或 int1)上的高電平共同來啟動

2、m1、m0——工作方式選擇位

0        0——方式0,為13位定時/計數器;

0        1——方式1,為16位定時/計數器;

1        0——方式2,8位初值自動重裝載,將th和tl分開,th自動重新裝入tl;

1        1——方式2,僅適用於t0,分成兩個8位計數器,t1停止工作。

3、c/-t——計數器模式和定時器模式選擇位

0——為定時器;1——為計數器,計數器對外部輸入引腳(p3.4和p3.5)的外部脈衝(負跳變)計數。

二、控制暫存器tcon,位址為88h~8fh

低四位與外部中斷有關。

1、tf1、tf0——t1、t0計數溢位標誌位

溢位時由硬體自動將其置1,可以由程式查詢,該位確定溢位。非中斷模式下,軟體清零;中斷方式時,此位為中斷源,

進入中斷服務函式後由硬體自動清零。

2、tr1、tr0——計數執行控制位

1——和gate位配合(看gate位設定),啟動計數定時器;

0——停止定時/計數器。該位有軟體置位或者清0。

工作方式1框圖:

三、初值計算

1、機器週期 = 具體晶振頻率 / 分頻數 的倒數

2、初值 = 溢位值 - 機器週期 * 定時時間

假設t0初值為5000,則應該這麼設定:

th0 = (65536 - 50000) / 256;

tl0 = (65536 - 50000) % 256;

乙個程式設計例子:

tmod = 0x01; //設定t0為16位(01)計時模式,以tr0來啟動計時器

//計算初值

th0 = (65536 - 50000) / 256;

tl0 = (65536 - 50000) % 256;

ea = 1; //開總中斷

et0 = 1;//開定時器0中斷

tr0 = 1; //啟動t0

while (1);

定時器中斷服務函式;

void timer0_service(void) interrupt 1 (t1 時這裡應為3)

}

51微控制器 定時器

定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...

51微控制器 定時器

標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...

搞懂51微控制器定時器 計數器

搞懂51定時器 計數器 步驟 1 第1步 先設定好定時器的時鐘源 如果需要的話 2 第2步 初始化時鐘相關暫存器 3 第3步 設定定時時間 計數個數 4 第4步 設定中斷處理程式 5 第5步 開啟定時器 5 執行時 定時器計數到後產生中斷,然後執行中斷isr 中斷服務處理,interrupt ser...