一、定時器 / 計數器簡介
設置等待時間,到達等待時間之后執行指定的硬件操作。
定時器最基本的功能就是定時,比如說定時發送串口數據,定時采集 AD 數據,如果將定時器和 IO 結合起來就可以實現非常豐富的功能,可以測量輸入信號的脈沖寬度,可以產生 PWM 方波,定時器產生 PWM 控制電機狀態是工業控制的普通。
二、定時器 / 計數器相關寄存器介紹
1、計數寄存器 TH 和 HL
T/C 是 16 位的,計數寄存器由 TH 高 8 位和 TL 低 8 位構成。
對應 T/C0 為 TH0 和 TL0, 對應 T/C1 為 TH1 和 TL1,定時器 / 計數器的初始值通過 TH0/TL0 和 TH1/TL1 設置。
2、定時器 / 計數器控制寄存器 TCON
3、T/C 的方式控制寄存器 TMOD
三、定時器的計數初始值計算
四、中斷源及中斷信號
五、參考代碼
/******************************************************
功能描述:LED 會循環點亮 1 秒,熄滅 1 秒。
使用單片機內部定時器可實現準確延時
******************************************************/
#include "reg52.h"
// 此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; // 對數據類型進行聲明定義
typedef unsigned char u8;
sbit led=P2^0; // 定義 P20 口是 led
void Timer0Init()
{
TMOD|=0X01; // 選擇為定時器 0 模式,工作方式 1(16 位),僅用 TR0 打開啟動
TH0=0XFC; // 給定時器賦初值,定時 1ms 高 8 位
TL0=0X18; // 低 8 位(可用軟件計算,公司參考上面)
ET0=1; // 允許定時器 0 中斷
EA=1; // 打開總中斷
TR0=1; // 打開定時器 0,啟動 T/C0 運行
}
void main()
{
Timer0Init();
while(1);
}
void Timer0() interrupt 1 //1 是中斷號
{
static u16 i;
TH0=0XFC; // 計數器寄存高 8 位重新載入
TL0=0X18; // 計數器寄存低 8 位重新載入
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
審核編輯 黃昊宇
-
寄存器
+關注
關注
31文章
5355瀏覽量
120517
發布評論請先 登錄
相關推薦
評論