鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 5.3 單片機(jī)定時(shí)器的寄存器
2.1 單片機(jī)內(nèi)部資源(內(nèi)部結(jié)構(gòu))
5.1 單片機(jī)邏輯電路與邏輯運(yùn)算
6.1 C 語言數(shù)組
5.7 單片機(jī)數(shù)碼管的靜態(tài)顯示
4.8 單片機(jī) LED 流水燈程序[詳細(xì)]
6.7 單片機(jī)中斷的優(yōu)先級(jí)
5.2 單片機(jī)定時(shí)器介紹
1. 如何學(xué)習(xí)單片機(jī)
1.3 單片機(jī)學(xué)習(xí)的準(zhǔn)備工作
4.3 C 語言基本運(yùn)算符
5.5 單片機(jī)中 LED 數(shù)碼管的介紹
2.6 第一個(gè)單片機(jī)程序(C 語言編寫)
3.5 單片機(jī)中 74HC138 三八譯碼器的應(yīng)用
3.2 單片機(jī)中去耦電容的應(yīng)用
6.4 單片機(jī)數(shù)碼管動(dòng)態(tài)顯示程序[帶解釋]
1.5 Keil uVision4簡(jiǎn)單使用教程
第一章問題匯總
1.2 如何學(xué)習(xí)單片機(jī)
4.4 C 語言 for 循環(huán)語句
6.5 單片機(jī)數(shù)碼管顯示消隱
單片機(jī)上的發(fā)光二極管(LED 燈)
5. 單片機(jī)定時(shí)器與數(shù)碼管基礎(chǔ)
5.3 單片機(jī)定時(shí)器的寄存器
5.6 單片機(jī)數(shù)碼管的真值表
6.2 C 語言 if 語句
3.3 三極管的的概念及其工作原理
4. C 語言基礎(chǔ)及流水燈的實(shí)現(xiàn)
點(diǎn)亮你的 LED 燈
4.6 C 語言函數(shù)的簡(jiǎn)單介紹
2.4 51單片機(jī)特殊功能寄存器和位定義
6.6 單片機(jī)中斷系統(tǒng)
3.1 電磁干擾 EMI
4.1 二進(jìn)制、十進(jìn)制和十六進(jìn)制
4.5 C 語言 while 循環(huán)語句
3. 單片機(jī)硬件基礎(chǔ)知識(shí)學(xué)習(xí)
2.5 使用 Keil uVision 新建一個(gè)工程
1.4 單片機(jī)開發(fā)環(huán)境搭建--Keil uVision4安裝教程
4.7 單片機(jī)延時(shí)方法(Keil 軟件延時(shí))
6. 單片機(jī)的中斷與數(shù)碼管動(dòng)態(tài)顯示
3.6 單片機(jī) LED 燈閃爍程序
6.3 C 語言 switch 語句
1.1 學(xué)習(xí)什么單片機(jī)
4.2 C 語言變量類型和范圍
5.4 單片機(jī)中定時(shí)器的應(yīng)用
2.7 將程序下載到單片機(jī)
3.4 單片機(jī)中三極管的應(yīng)用
2.2 單片機(jī)最小系統(tǒng)[配圖][超詳細(xì)]

5.3 單片機(jī)定時(shí)器的寄存器

標(biāo)準(zhǔn)的51單片機(jī)內(nèi)部有 T0 和 T1 這兩個(gè)定時(shí)器,T 就是 Timer 的縮寫,現(xiàn)在很多51系列單片機(jī)還會(huì)增加額外的定時(shí)器,在這里我們先講定時(shí)器0和1。前邊提到過,對(duì)于單片機(jī)的每一個(gè)功能模塊,都是由它的 SFR,也就是特殊功能寄存器來控制。與定時(shí)器有關(guān)的特殊功能寄存器,有以下幾個(gè),大家不需要去記憶這些寄存器的名字和作用,你只要大概知道就行,用的時(shí)候,隨時(shí)可以查手冊(cè),找到每個(gè)寄存器的名字和每個(gè)寄存器所起到的作用。

表5-1的寄存器是存儲(chǔ)定時(shí)器的計(jì)數(shù)值的。TH0/TL0 用于 T0,TH1/TL1 用于 T1。

表5-1 定時(shí)值存儲(chǔ)寄存器

名稱 描述 SFR 地址 復(fù)位值
TH0 定時(shí)器0高字節(jié) 0x8C 0x00
TL0 定時(shí)器0低字節(jié) 0x8A 0x00
TH1 定時(shí)器1高字節(jié) 0x8D 0x00
TL1 定時(shí)器1低字節(jié) 0x8B 0x00

表5-2是定時(shí)器控制寄存器 TCON 的位分配,表5-3是則是對(duì)每一位的具體含義的描述。

表5-2 TCON——定時(shí)器控制寄存器的位分配(地址 0x88、可位尋址)

7 6 5 4 3 2 1 0
符號(hào) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
復(fù)位值 0 0 0 0 0 0 0 0

表 5-3 TCON——定時(shí)器控制寄存器的位描述

符號(hào) 描述
7 TF1 定時(shí)器1溢出標(biāo)志。一旦定時(shí)器1發(fā)生溢出時(shí)硬件置1。清零有兩種方式:軟件清零,或者進(jìn)入定時(shí)器中斷時(shí)硬件清零。
6 TR1 定時(shí)器1運(yùn)行控制位。軟件置位/清零來進(jìn)行啟動(dòng)/停止定時(shí)器。
5 TF0 定時(shí)器0溢出標(biāo)志。一旦定時(shí)器0發(fā)生溢出時(shí)硬件置1。清零有兩種方式:軟件清零,或者進(jìn)入定時(shí)器中斷時(shí)硬件清零。
4 TR0 定時(shí)器0運(yùn)行控制位。軟件置位/清零來進(jìn)行啟動(dòng)/停止定時(shí)器。
3 IE1 外部中斷部分,與定時(shí)器無關(guān),暫且不看。
2 IT1 外部中斷部分,與定時(shí)器無關(guān),暫且不看。
1 IE0 外部中斷部分,與定時(shí)器無關(guān),暫且不看。
0 IT0 外部中斷部分,與定時(shí)器無關(guān),暫且不看。

大家注意在表5-3中的描述中,只要寫到硬件置1或者清0的,就是指一旦符合條件,單片機(jī)將自動(dòng)完成的動(dòng)作,只要寫軟件置1或者清0的,是指我們必須用程序去完成這個(gè)動(dòng)作,后續(xù)遇到此類描述就不再另做說明了。

對(duì)于 TCON 這個(gè) SFR,其中有 TF1、TR1、TF0、TR0 這4位需要我們理解清楚,它們分別對(duì)應(yīng)于 T1 和 T0,我們以定時(shí)器1為例講解,那么定時(shí)器0同理。先看 TR1,當(dāng)我們程序中寫 TR1 = 1 以后,定時(shí)器值就會(huì)每經(jīng)過一個(gè)機(jī)器周期自動(dòng)加1,當(dāng)我們程序中寫 TR1 = 0 以后,定時(shí)器就會(huì)停止加1,其值會(huì)保持不變化。TF1,這個(gè)是一個(gè)標(biāo)志位,他的作用是告訴我們定時(shí)器溢出了。比如我們的定時(shí)器設(shè)置成16位的模式,那么每經(jīng)過一個(gè)機(jī)器周期,TL1 加1一次,當(dāng) TL1 加到255后,再加1,TL1 變成0,TH1 會(huì)加1一次,如此一直加到 TH1 和 TL1 都是255(即 TH1 和 TL1 組成的16位整型數(shù)為65535)以后,再加1一次,就會(huì)溢出了,TH1 和 TL1 同時(shí)都變?yōu)?,只要一溢出,TF1 馬上自動(dòng)變成1,告訴我們定時(shí)器溢出了,僅僅是提供給我們一個(gè)信號(hào),讓我們知道定時(shí)器溢出了,它不會(huì)對(duì)定時(shí)器是否繼續(xù)運(yùn)行產(chǎn)生任何影響。

本節(jié)開頭我們就提到了定時(shí)器有多種工作模式,工作模式的選擇就由 TMOD 來控制,TMOD 的位分配和描述見表5-4到5-6所示,TMOD 的位功能如表5-5所示。

表5-4 TMOD——定時(shí)器模式寄存器的位分配(地址 0x89、不可位尋址)

7 6 5 4 3 2 1 0
符號(hào) GATE(T1) C/T(T1) M1(T1) M0(T1) GATE(T0) C/T(T0) M1(T0) M0(T0)
復(fù)位值 0 0 0 0 0 0 0 0

表5-5 TMOD——定時(shí)器模式寄存器的位描述

符號(hào) 描述
T1/T0 在表5-5中,標(biāo) T1 的表示控制定時(shí)器1的位,標(biāo) T0 的表示控制定時(shí)器0的位。
GATE 該位被置1時(shí)為門控位。僅當(dāng)?INTx?腳為高并且?TRx?控制位被置1時(shí)使能定時(shí)器?x?,定時(shí)器開始計(jì)時(shí),當(dāng)該位被清0時(shí),只要?TRx?位被置1,定時(shí)器 x 就使能開始計(jì)時(shí),不受到單片機(jī)引腳?INTx?外部信號(hào)的干擾,常用來測(cè)量外部信號(hào)脈沖寬度。這是定時(shí)器一個(gè)額外功能,本節(jié)課暫不介紹。
C/T 定時(shí)器或計(jì)數(shù)器選擇位。該位被清零時(shí)用作定時(shí)器功能(內(nèi)部系統(tǒng)時(shí)鐘),被置1用作計(jì)數(shù)器功能。

表5-6 TMOD——定時(shí)器模式寄存器 M1/M0 工作模式

M1 M0 工作模式 描述
0 0 0 兼容 8048 單片機(jī)的13位定時(shí)器,THn 的8位和 TLn 的5位組成一個(gè)13位定時(shí)器。
0 1 1 THn 和 TLn 組成一個(gè)16位的定時(shí)器。
1 0 2 8位自動(dòng)重裝模式,定時(shí)器溢出后 THn 重裝到 TLn 中。
1 1 3 禁用定時(shí)器1,定時(shí)器0變成2個(gè)8位定時(shí)器。

可能你已經(jīng)注意到了,表5-2的 TCON 最后標(biāo)注了“可位尋址”,而表5-4的 TMOD 標(biāo)注的是“不可位尋址”。意思就是說:比如 TCON 有一個(gè)位叫 TR1,我們可以在程序中直接進(jìn)行 TR1 = 1 這樣的操作。但對(duì) TMOD 里的位比如(T1)M1 = 1這樣的操作就是錯(cuò)誤的。我們要操作就必須一次操作這整個(gè)字節(jié),也就是必須一次性對(duì) TMOD 所有位操作,不能對(duì)其中某一位單獨(dú)進(jìn)行操作,那么我們能不能只修改其中的一位而不影響其它位的值呢?當(dāng)然可以,在后續(xù)課程中你就會(huì)學(xué)到方法的,現(xiàn)在就先不關(guān)心它了。

表5-6列出的就是定時(shí)器的4中工作模式,其中模式0是為了兼容老的 8048 系列單片機(jī)而設(shè)計(jì)的,現(xiàn)在的51幾乎不會(huì)用到這種模式,而模式3根據(jù)我的應(yīng)用經(jīng)驗(yàn),它的功能用模式2完全可以取代,所以基本上也是不用的,那么我們就重點(diǎn)來學(xué)習(xí)模式1和模式2。

模式1,是 THn 和 TLn 組成了一個(gè)16位的定時(shí)器,計(jì)數(shù)范圍是0~65535,溢出后,只要不對(duì) THn 和 TLn 重新賦值,則從0開始計(jì)數(shù)。模式2,是8位自動(dòng)重裝載模式,只有 TLn 做加1計(jì)數(shù),計(jì)數(shù)范圍0~255,THn 的值并不發(fā)生變化,而是保持原值,TLn 溢出后,TFn就直接置1了,并且 THn 原先的值直接賦給 TLn,然后 TLn 從新賦值的這個(gè)數(shù)字開始計(jì)數(shù)。這個(gè)功能可以用來產(chǎn)生串口的通信波特率,我們講串口的時(shí)候要用到,本章節(jié)我們重點(diǎn)來學(xué)習(xí)模式1。為了加深大家理解定時(shí)器的原理,我們來看一下他的模式1的電路示意圖5-2。

http://wiki.jikexueyuan.com/project/mcu-tutorial-one/images/60.png" alt="" />

圖5-2 定時(shí)器/計(jì)數(shù)器模式1示意圖

我?guī)ьI(lǐng)大家一起來分析一遍這個(gè)示意圖,日后如果再遇到類似的圖,大家就可以自己研究了。OSC 框表示時(shí)鐘頻率,因?yàn)?個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,所以那個(gè) d 就等于12。下邊 GATE 右邊的那個(gè)門是一個(gè)非門電路,再右側(cè)是一個(gè)或門,再往右是一個(gè)與門電路,大家可以對(duì)照一下5-1節(jié)的內(nèi)容。

圖上可以看出來,下邊部分電路是控制了上邊部分,那我們先來看下邊是如何控制的,我們以定時(shí)器0為例。

1) TR0 和下邊或門電路的結(jié)果要進(jìn)行與運(yùn)算,TR0 如果是0的話,與運(yùn)算完了肯定是0,所以如果要讓定時(shí)器工作,那么 TR0 就必須置1。

2) 這里的與門結(jié)果要想得到1,那么前面的或門出來的結(jié)果必須也得是1才行。在 GATE 位為1的情況下,經(jīng)過一個(gè)非門變成0,或門電路結(jié)果要想是1的話,那 INT0 即 P3.2 引腳必須是1的情況下,這個(gè)時(shí)候定時(shí)器才會(huì)工作,而 INT0 引腳是0的情況下,定時(shí)器不工作,這就是 GATE 位的作用。

3) 當(dāng) GATE 位為0的時(shí)候,經(jīng)過一個(gè)非門會(huì)變成1,那么不管 INT0 引腳是什么電平,經(jīng)過或門電路后都肯定是1,定時(shí)器就會(huì)工作。

4) 要想讓定時(shí)器工作,就是自動(dòng)加1,從圖上看有兩種方式,第一種方式是那個(gè)開關(guān)打到上邊的箭頭,就是 C/T =0 的時(shí)候,一個(gè)機(jī)器周期 TL 就會(huì)加1一次,當(dāng)開關(guān)打到下邊的箭頭,即 C/T =1 的時(shí)候,T0 引腳即 P3.4 引腳來一個(gè)脈沖,TL 就加1一次,這也就是計(jì)數(shù)器功能。