1.定義
定時器介紹: 51單片機的定時器屬于單片機的內部資源,其電路的連接和運轉均在單片機內部完成。
2.作用
定時器作用:
1.用于計數系統,可實現軟件計時,或者使程序每隔一固定時間完成一項操作
2.替代長時間的Delay,提高CPU的運行效率和處理速度
3.定時器資源
1.定時器個數三個(T0,T1,T2),T0和T1與傳統的51單片機兼容單片機定時器里寫程序,T2是此型號單片機增加的資源
注意:定時器的資源和單片機的型號是關聯在I起的,不同的型號可能會有不同的定時器個數和操作方式,但一般來說,T0和T1的操作方式是所有51單片機所共有的。
4.定時器工作模式
的T0和T1均由四種工作模式
模式0:13位定時器/計數器
模式1:16位定時器/計數器(常用)
模式2:8位自動重裝載模式
模式3:兩個8位計數器
定時器1的工作模式框圖:
—:系統時鐘選擇分頻模式
C/T= 0定時器模式 =1計數器模式
5.工作過程原理
定時器在單片機內部就像一個小鬧鐘一樣,根據時鐘的輸出信號每隔“一秒”,計數單元的數值就加以,當計數單元數值增加到“設定的鬧鐘提醒時候”時,計數單元就會向中斷系統發出中斷申請,產生“響鈴提醒”,使得程序跳轉到中斷服務程序。
說明:中斷系統
6.定時器相關寄存器
TCON位于特殊功能寄存器中(SFR),可進行位尋址
TF1/TF0--------定時器/計數器溢出標志位
當定時器計滿溢出時,由硬件使其置1,并且向CPU申請中斷,進入中斷服務程序后,由硬件自動清0。
TR1/TR0-------定時器運行控制位
當GATE=1,當相應的外部中斷引腳(INT1/INT0)為高電平時,TR1/TR0置1啟動定時器,當GATE=0,TR1/TR0置1啟動定時器
IE1/IE0--------外部中斷請求標志位
IT1/IT0---------外部中斷觸發方式選擇位
0為電平觸發模式
1為跳變沿觸發模式
GATE----門控制位
GATE=0單片機定時器里寫程序,定時器計數器啟動與停止僅受TCON寄存器中的TRX(X=0,1)控制
GATE=1,定時器計數器啟動與停止由外部中斷引腳(INT0或INT1)上的電平狀態來共同控制
C/T----定時器或者計數器模式選擇位
M1M0–工作方式選擇位
每個定時器都有4中工作方式,它們由M1M0來設定
說明
1.寄存器是連接軟硬件的媒介
2.在單片機中寄存器就是一段特殊的RAM存儲器,一方面,寄存器可以存儲和讀取數據,另一方面,每一個寄存器背后都連接了一根導線,控制著電路的連接方式。
3.寄存器相當于一個復雜機器的”操作按鈕”
7.定時器配置步驟
1.配置工作方式寄存器—TMOD
GATE=0,定時器僅受TCON寄存器中TRx(x=0,1)來控制
GATE=1,定時器TCON寄存器中TRx(x=0,1)和外部中斷引(INT0或INT1)上的電平狀態來共同控制。
C/T=1,為計數器模式;
C/T=0,為定時器模式。
M1M0一工作方式選擇位;一共有4種工作方式,通常選擇 方式1 和 方式2;即M1M0 = 0 1 或M1M0 = 1 0
2.選擇定時器數值—— THx、TLx
(1) 51單片機定時器常常方式1或者方式2
(2)方式1可以裝入的總數是65536
(3)方式2可以轉入的總數是256
方式如:
TH0 = (65536 - 1000) / 256
TL0 = (65536 - 1000) % 256
TH0 = 0xfc
TL0 = 0x18
3.配置控制寄存器——TCON
TF1一定時器1溢出標志位。
當定時器1計滿溢出時,由硬件使TF1置1,并且申請中斷。進入中斷服務程序后,由硬件自動清0。需要注意的是,如果使用定時器的中斷,那么該位完全不用人為去操作,但是如果使用軟件查詢方式的話,當查詢到該位置1后,就需要用軟件清0。
TR1-定時器1運行控制位。
由軟件清0關閉定時器1。當GATE=1,且INT1為高電平時,TR1置1啟動定時器1;當GATE=0時,TR1置1啟動定時器1。
TFO-定時器0溢出標志,其功能及操作方法同TF1。
TRO-定時器0運行控制位,其功能及操作方法同TR1.
IE1-外部中斷1請求標志。
當IT1=0時,為電平觸發方式,每個機器周期的S5P2采樣lNT1引腳,若INT1腳為低電平,則置1,否則IE1清0。
當IT1=1時,INT1為跳變沿觸發方式,當第一個機器周期采樣到INT1為低電平時,則IE1置1。IE1=1,表示外部中斷1正在向CPU申請中斷。當CPU響應中斷,轉向中斷服務程序時,該位由硬件清0。
IT1-外部中斷1觸發方式選擇位。
IT1=0,為電平觸發方式,引腳INT1.上低電平有效。
IT1=1,為跳變沿觸發方式,引腳INT1.上的電平從高到低的負跳變有效。
IE0一外部中斷0請求標志,其功能及操作方法同IE1。
IT0–外部中斷0觸發方式選擇位,其功能及操作方法同IT1。
4.打開總中斷——EA = 1
5.開啟定時器中斷ET0/1
6.配置中斷優先級PT0/1
7.編寫中斷服務函數
附上代碼
#include
sbit led=P1^0;
sbit shake=P1^1;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do

{
while (--k);
} while (--j);
} while (--i);
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x9C; //設置定時初值
TH0 = 0xFF; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
ET0 = 1;//打開定時器0中斷
EA = 1;//打開總中斷
PT0 = 1;//中斷優先級設置
}
//定時器中斷函數模板
void Timer0_Routine() interrupt 1

{
static unsigned int T0Count;
TL0 = 0x9C; //設置定時初值
TH0 = 0xFF; //設置定時初值 上面是多少這里就重置多少
T0Count++;
if(T0Count>=1000)
{
led=0;
Delay500ms();
led=1;
Delay500ms();
}
}
void main()
{
Timer0Init();
while(1)
{
}
}