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

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