|
我開始看單片機(jī)的書籍比較早,只有C語言基礎(chǔ)而沒有數(shù)電基礎(chǔ)(不知道要學(xué)),所以我在很多地方概念都是模模糊糊的。尤其是什么控制位什么寄存器什么邏輯電路都不懂,只純粹的想寫C語言操作單片機(jī)就行了。現(xiàn)在有了一定的基礎(chǔ),發(fā)現(xiàn)了很多以前知其然不知其所以然的東西,所以在這里稍微的總結(jié)一下,同時我想可能對基礎(chǔ)不扎實(shí)的同學(xué)有一定的幫助(其實(shí)我基礎(chǔ)也不扎實(shí)~嘻嘻)。
對硬件(單片機(jī))的操作,從本質(zhì)上將就是對寄存器的操作。一個寄存器通常是1字節(jié),即8位。每一位(bit)可以聯(lián)想成一個開關(guān),打開這個開關(guān)就能做一件事,關(guān)閉這個開關(guān)就能停止做一件事。
8051系列的單片機(jī)中定時器由兩個寄存器控制,這兩個寄存器名稱分別是TMOD(Time Mode,工作方式寄存器)和TCON(Time Configuration,控制寄存器)。因?yàn)檫@些寄存器是操作單片機(jī)中定時器的,有特殊功能作用,所以屬于特殊功能寄存器而不是通用寄存器。另外想要記住這兩個寄存器的名稱也很簡單,用英文全稱來記憶。
下面先對兩個控制寄存器各個位進(jìn)行總結(jié):
2.1 工作方式寄存器(TMOD)TCOM | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
位名稱 | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 | ||
功能 | 門控位 | 定時/計(jì)數(shù)方式選擇 | 工作方式選擇 | 門控位 | 定時/計(jì)數(shù)方式選擇 | 工作方式選擇 | ||||
說明 | 高4位控制T1 | 低4位控制T0 |
51單片機(jī)有兩個定時器,其中TMOD的高四位控制定時器1,低四位控制定時器0。
2.1.1 門控位(GATE)我初學(xué)的時候沒有用到這個位,不過我還是簡單對它總結(jié)一下吧:
可以通過編程對這個位置1或清零。
當(dāng)GATE = 0時,只要使TCON中的TR0或TR1置1,就可以啟動定時器了。
當(dāng)GATE = 1時,除了使TCON中的TR0和TR1置1以外,還需要外部中斷INT0或INT1為高電平,才能啟動定時器。即比GATE = 0時多一個啟動條件。
2.1.2 定時/計(jì)數(shù)模式選擇位(C/T)其中C的英文全稱是Count,意思是計(jì)數(shù)器。T是Timer,定時器。置1為選擇計(jì)數(shù)器工作模式,置0為選擇定時器工作模式。(T上面應(yīng)該畫一橫的,表示低電平有效)。
當(dāng)C/T = 0時,為定時模式。此時定時器計(jì)數(shù)的時間是一個機(jī)器周期,一個機(jī)器周期的時間長度和晶振頻率有關(guān)。大家都知道周期T和頻率f是互為倒數(shù)的關(guān)系。而知道了晶振頻率fosc后,還要除以12(硬件內(nèi)部結(jié)構(gòu)12分頻的結(jié)果),它的倒數(shù)就是一個機(jī)器周期。即如果單片機(jī)采用12MHz的晶振,那么機(jī)器周期就是1微秒。
每經(jīng)過一個機(jī)器周期,定時器的數(shù)值就會加1,直到計(jì)數(shù)器產(chǎn)生溢出,最后產(chǎn)生中斷執(zhí)行自己寫的程序,這個程序就是你想讓單片機(jī)計(jì)數(shù)結(jié)束后做什么的程序。
當(dāng)C/T = 1時,為計(jì)數(shù)模式,這里不詳細(xì)總結(jié)了。
另外上電復(fù)位后,這里的控制位默認(rèn)是0,即定時模式。
2.1.3 工作方式選擇(M1和M2)M1M0 | 工作方式 | 說明 | ||||
00 | 方式0 | 13位定時器 | ||||
01 | 方式1 | 16位定時器 | ||||
10 | 方式2 | 8位自動重裝定時器 | ||||
11 | 方式3 | T0分成兩個獨(dú)立的8位定時器;T1停止使用 |
TMOD不能單獨(dú)對一個位置1或清零。只能一個字節(jié)的寫入TCOM設(shè)置定時器。
另外,CPU復(fù)位時TCOM所有的位都清零。
2.2 控制寄存器(TCON)TCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位名稱 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
功能 | T1中斷標(biāo)志 | T1運(yùn)行開關(guān) | T0中斷標(biāo)志位 | T0運(yùn)行開關(guān) | - | - | - | - |
這里主要關(guān)注TCON高四位,低四位是和外部中斷有關(guān)的控制位。
2.2.1 溢出中斷請求標(biāo)志位(TFn)標(biāo)題上的TFn中的n表示0或1,即溢出中斷請求標(biāo)志位分別有TF0和TF1。TF的英文全稱是Timer overflow Flag,即定時器溢出標(biāo)志位。
當(dāng)定時器Tn(n=0、1)計(jì)數(shù)溢出后,相應(yīng)的TFn由硬件自動置1,然后向CPU申請中斷,執(zhí)行中斷程序。
CPU響應(yīng)中斷后,硬件自動對TFn清零。
另外,TFn也可以在程序中置1或清零。
2.2.2 定時器運(yùn)行控制位(TRn)TR的英文全稱是Timer Run,即定時器運(yùn)行(控制位)。
當(dāng)TRn = 1時,定時器n運(yùn)行;
當(dāng)TRn = 0是,定時器n停止。
知道了如何控制定時器之后,現(xiàn)在再來看一下定時器的結(jié)構(gòu)。
定時器的實(shí)質(zhì)是加一計(jì)數(shù)器(16位),由高8位和低8位兩個寄存器組成(THn和TLn)。
不同工作方式(M1M0控制),THn和TLn也有不同的功能。我最常用的是使用工作方式1——16位定時器。所以也只是稍微總結(jié)一下,因?yàn)樽銐蛴昧耍茏龊芏嗍虑榱恕?/span>
在這個工作方式下,THn和TLn合起來作為16位計(jì)數(shù)器。由TLn作為低8位,THn作為高8位(因?yàn)長是low,H為High)。當(dāng)16位計(jì)數(shù)器溢出時,TFn置1。然后產(chǎn)生中斷,進(jìn)入并執(zhí)行中斷程序。
若使用12MHZ的晶振,定時器每加1則需要1微秒時間,如果把THn和THn都置為00H,當(dāng)定時器溢出并產(chǎn)生中斷的時候,就已經(jīng)過了65536微秒(2^13次方微秒)。
Powered by 單片機(jī)教程網(wǎng)