1. 定時器的使用步驟
1)主函數(shù);
2)對中斷和定時器進行初始化=>先設(shè)置計數(shù)器的工作方式,設(shè)定TH0、TL0或TH1、TL0的初值,即:TH0=(8192-C)/32,TL0=(8192-C)%32,開啟中斷和定時器,即:TR=1;
3)設(shè)置中斷服務(wù)程序-》執(zhí)行對應(yīng)中斷需要做的內(nèi)容。
51單片機擁有兩個定時器,分別為T0,T1;52單片機比51單片機多一個定時器T2。
2. 寄存器TMOD
TMOD寄存器的值決定了定時器的工作方式。
工作方式0,13位定時器;工作方式1為16位定時器;工作方式方式2位8位自動重載定時器。
下述表格為此寄存器的數(shù)據(jù)格式:
定時器 |
定時器1 |
定時器0 |
||||||
位序號 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
位符號 |
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
GATE:門控制。
GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。
當INT0引腳為高電平時TR0置位,啟動定時器T0;
當INT1引腳為高電平時TR1置位,啟動定時器T1。
GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。
C/T:功能選擇位
C/T=0時為定時功能,C/T=1時為計數(shù)功能。
置位時選擇計數(shù)功能,清零時選擇定時功能。
M0和M1::決定使用定時器的工作方式及哪個定時器。
工作方式選擇:
00表示方式0 13位計數(shù)器 TMOD=0x00
01 表示方式1 16位計數(shù)器 TMOD=0x01
10表示 方式2 自動重裝8位計數(shù)器 TMOD=0x02
11表示方式3 T0分為2個8位獨立計數(shù)器,T1為無中斷重裝8位計數(shù)器
如:TMOD=0x03表示定時器0工作方式為方式三定時器功能。
3. 定時器的工作原理
定時器的工作原理:TH0為高八位,TL0為低八位,組成了16位的定時器,當?shù)臀籘L0計滿就向高位TH0移一個數(shù),然后清零。
例:以12Mhz的晶振來說,機器周期是1us,計滿TH0、TL0就需要216-1個數(shù),再來一個數(shù)就“溢出”產(chǎn)生中斷,一次溢出也就是65536us,約等于65.5ms,如果要定時50ms的話就要給他們裝一個預裝值(初值),總值-需要值=預裝值,
也就是65536-50000=15536,預裝后,定時器從預裝值開始加值,定時器溢出中斷后,會重新從預裝值開始加值加到50ms就再產(chǎn)生中斷,從而達到了定時的目的。如果要定時1s就可以讓定時器中斷1000ms/50ms=20次。
另外一點,TH0和TL0中應(yīng)該裝入的總數(shù)是15536,然后把15536對256求模:15536/256=60裝入TH0中,把15536對256求余:15536%256=176裝入TL0中,因為這是兩個八位28*28的容器。
所以就有了
TH0=(65535-50000)/256
TL0=(65535-50000)%256
4. 定時器的使用注意事項
定時器中斷需要:
總中斷EA:用來開啟全局中斷
ET0、1、2:各個定時器中斷位,使用中斷位只需將其置一即可。
開啟對應(yīng)的定時器只需將對應(yīng)的TR為置一即開啟了定時器。
5. TCON狀態(tài)寄存器
位序號 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
位符號 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
位地址 |
8FH |
8EH |
8DH |
8CH |
8BH |
8AH |
89H |
88H |
TCON為定時器/計數(shù)器控制寄存器
TF1/TF0:表示定時器1/定時器0的溢出標志位。
TF1/TF0=1表示定時器1/定時器0溢出
TF1/TF0=0表示定時器1/定時器0未溢出
TR1/TR0:表示定時器1/定時器0的中斷使能位
TR1/TR0=1表示定時器1/定時器0開啟中斷
TR1/TR0=0表示定時器1/定時器0關(guān)閉中斷
IE0/IE1:外中斷請求標志位
IE0/IE1=1:開啟定時器0/定時器1外部中斷
IE0/IE1=0:關(guān)閉定時器0/定時器1外部中斷
IT0/IT1:外中斷請求信號方式控制位
IT0/IT1=1:定時器0/定時器1觸發(fā)條件為下降沿觸發(fā)
IT0/IT1=0:定時器0/定時器1觸發(fā)條件為上升+下降沿觸發(fā)
6. 定時器工作方式的詳細介紹
定時器工作方式0:
方式0是13位的定時器,它的低位TL0是五位的,所以它的總值是28*25=8192。它能裝的值也不能那么多了,于是就裝入5ms:
TH0=(8192-5000)/32;
TL0=(8192-5000)%32;
32是5位寄存器的容量。
所以要中斷200次才能達到1s。
這個方式0可以用來做短時間中斷
定時器工作方式2:
如圖,其中低位TL0是8位定時器,而TH0是常數(shù)緩沖器,當?shù)臀?/span>TL0溢出時,在溢出標志位TF0置1的同時,自動將高位TH0的常數(shù)重新裝入TL0中,讓TL0從初值開始重新計數(shù),這樣就不用人為軟件重新裝入初值帶來的誤差,從而提高精度。
由于兩個是分開的,所以計算初值可以不用求余取模:
? ?? ?? ?? ???TL0=總值-要計數(shù)的個數(shù);
? ?? ?? ?? ???TH0=總值-要計數(shù)的個數(shù);
定時器工作方式3:
接下來介紹方式3,方式3不同于其他三個方式,它只能用于T0,也就是定時器0,和方式2差不多,也是把TL0、TH0分成兩個獨立的寄存器,但是TH0也參與計數(shù),也就是兩個獨立的8位定時器/計數(shù)器。
普通的使用一樣,TL0計數(shù)溢出后置位TF0,并申請中斷,之后重裝。但是由于TL0占用了TR0和TF0,所以TH0只能占用定時器? ?? ?? ?? ???T1的TR1和TF1。所以定時器T1一定不要用在有中斷的場合,當然,T1同樣可以正常工作在方式0、1、2下。通常這種情況,T1都被用來當做串行口的波特率發(fā)生器。
首先把T0、T1的中斷位和控制位打開:
52單片機的中斷級別
中斷源 |
默認中斷級別 |
序號(c語言) |
入口地址(匯編) |
INT0-外部中斷0 |
最高 |
0 |
0003H |
T0-定時器0中斷 |
第2 |
1 |
000BH |
INT1-外部中斷1 |
第3 |
2 |
0013H |
T1-定時器1中斷 |
第4 |
3 |
001BH |
T1/R1串行口中斷 |
第5 |
4 |
0023H |
T2-定時器2中斷 |
最低 |
5文章來源:http://www.zghlxwxcb.cn/news/detail-473192.html |
002BH文章來源地址http://www.zghlxwxcb.cn/news/detail-473192.html |
到了這里,關(guān)于單片機中定時器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!