1.1、基本數(shù)字邏輯門電路
不管是數(shù)字電路,還是C語(yǔ)言,我們都會(huì)經(jīng)常遇到邏輯運(yùn)算和邏輯電路,在這里我介紹一下,大家先簡(jiǎn)單了解一下,知道有這么回事,回頭遇到了,再詳細(xì)研究。
首先,在“邏輯”這個(gè)概念范疇內(nèi),存在真和假這兩個(gè)邏輯值,而將其對(duì)應(yīng)到數(shù)字電路或C語(yǔ)言中,就變成了“非0值”和“0值”這兩個(gè)值,即邏輯上的“假”就是數(shù)字電路或C語(yǔ)言中的“0”這個(gè)值,而邏輯“真”就是其它一切“非0值”。
然后,我們來(lái)具體分析一下幾個(gè)主要的邏輯運(yùn)算符。我們假定有2個(gè)字節(jié)變量:A和B,二者進(jìn)行某種邏輯運(yùn)算后的結(jié)果為F。
以下邏輯運(yùn)算符都是按照變量整體值進(jìn)行運(yùn)算的,通常就叫做邏輯運(yùn)算符:
&&:邏輯與,F(xiàn) = A && B,當(dāng)A、B的值都為真(即非0值,下同)時(shí),其運(yùn)算結(jié)果F為真(具體數(shù)值為1,下同);當(dāng)A、B值任意一個(gè)為假(即0,下同)時(shí),結(jié)果F為假(具體數(shù)值為0,下同)。
||:邏輯或,F(xiàn) = A || B,當(dāng)A、B值任意一個(gè)為真時(shí),其運(yùn)算結(jié)果F為真;當(dāng)A、B值都為假時(shí),結(jié)果F為假。
! :邏輯非,F(xiàn) = !A,當(dāng)A值為假時(shí),其運(yùn)算結(jié)果F為真;當(dāng)A值為真時(shí),結(jié)果F為假。
以下邏輯運(yùn)算符都是按照變量?jī)?nèi)的每一個(gè)位來(lái)進(jìn)行運(yùn)算的,通常就叫做位運(yùn)算符:
& :按位與,F(xiàn) = A & B,將A、B兩個(gè)字節(jié)中的每一位都進(jìn)行與運(yùn)算,再將得到的每一位結(jié)果組合為總結(jié)果F,例如A = 0b11001100,B = 0b11110000,則結(jié)果F就等于0b11000000。
| :按位或,F(xiàn) = A | B,將A、B兩個(gè)字節(jié)中的每一位都進(jìn)行或運(yùn)算,再將得到的每一位結(jié)果組合為總結(jié)果F,例如A = 0b11001100,B = 0b11110000,則結(jié)果F就等于0b11111100。
~ :按位取反,F(xiàn) = ~A,將A字節(jié)內(nèi)的每一位進(jìn)行非運(yùn)算(就是取反),再將得到的每一位結(jié)果組合為總結(jié)果F,例如,A = 0b11001100,則結(jié)果F就等于0b00110011;這個(gè)運(yùn)算符我們?cè)谇懊娴牧魉疅魧?shí)驗(yàn)里已經(jīng)用過(guò)了,現(xiàn)在再回頭看一眼,是不是清楚多了。
^ :按位異或,異或的意思是,如果運(yùn)算雙方的值不同(即相異)則結(jié)果為真,雙方值相同則結(jié)果為假。在C語(yǔ)言里沒(méi)有按變量整體值進(jìn)行的異或運(yùn)算,所以我們僅以按位異或?yàn)槔現(xiàn) = A ^ B,A = 0b11001100,B = 0b11110000,則結(jié)果F就等于0b00111100。
我們今后要看資料或芯片手冊(cè)的時(shí)候,會(huì)經(jīng)常遇到一些電路符號(hào),表5-1就是數(shù)字電路中的常用符號(hào),知道這些符號(hào)有利于我們理解器件的邏輯結(jié)構(gòu),尤其重點(diǎn)認(rèn)識(shí)以下表中的“國(guó)外流行圖形符號(hào)”。在這里我們先簡(jiǎn)單看一下,后邊遇到了知道到這里查閱就可以了。
1.2 定時(shí)器的學(xué)習(xí)
定時(shí)器是單片機(jī)的重點(diǎn)中的重點(diǎn),但不是難點(diǎn),大家一定要完全理解并且熟練掌握定時(shí)器的應(yīng)用。
1.2.1 定時(shí)器的初步認(rèn)識(shí)
時(shí)鐘周期:時(shí)鐘周期T是時(shí)序中最小的時(shí)間單位具體計(jì)算的方法就是1/時(shí)鐘源,我們KST-51單片機(jī)開(kāi)發(fā)板上用的晶振是11.0592M,那么對(duì)于我們這個(gè)單片機(jī)系統(tǒng)來(lái)說(shuō),時(shí)鐘周期=1/11059200秒。
機(jī)器周期:我們的單片機(jī)完成一個(gè)操作的最短時(shí)間。機(jī)器周期主要針對(duì)匯編語(yǔ)言而言,在匯編語(yǔ)言下程序的每一條語(yǔ)句執(zhí)行所使用的時(shí)間都是機(jī)器周期的整數(shù)倍,而且語(yǔ)句占用的時(shí)間是可以計(jì)算出來(lái)的,而C語(yǔ)言一條語(yǔ)句的時(shí)間是不可計(jì)算的。51單片機(jī)系列,在其標(biāo)準(zhǔn)架構(gòu)下一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,也就是12/11059200秒。現(xiàn)在有不少增強(qiáng)型的51單片機(jī),其速度都比較塊,有的1個(gè)機(jī)器周期等于4個(gè)時(shí)鐘周期,有的1個(gè)機(jī)器周期就等于1個(gè)時(shí)鐘周期,也就是說(shuō)大體上其速度可以達(dá)到標(biāo)準(zhǔn)51架構(gòu)的3倍或12倍。因?yàn)槲覀兪侵v標(biāo)準(zhǔn)的51單片機(jī),所以我們后邊的課程如果遇到這個(gè)概念,全部是指12個(gè)時(shí)鐘周期。
這兩個(gè)概念了解即可,下邊就來(lái)我們的重頭戲,定時(shí)器和計(jì)數(shù)器。定時(shí)器和計(jì)數(shù)器是單片機(jī)內(nèi)部的同一個(gè)模塊,通過(guò)配置SFR(特殊功能寄存器)可以實(shí)現(xiàn)兩種不同的功能,我們大多數(shù)情況下是使用定時(shí)器功能,因此我們的課程也是主要來(lái)講定時(shí)器功能,計(jì)數(shù)器功能大家自己了解下即可。
顧名思義,定時(shí)器就是用來(lái)進(jìn)行定時(shí)的。定時(shí)器內(nèi)部有一個(gè)寄存器,我們讓它開(kāi)始計(jì)數(shù)后,這個(gè)寄存器的值每經(jīng)過(guò)一個(gè)機(jī)器周期就會(huì)加1一次,因此,我們可以把機(jī)器周期理解為定時(shí)器的計(jì)數(shù)周期。我們的秒表,每經(jīng)過(guò)一秒,數(shù)字加1,而這個(gè)定時(shí)器就是每過(guò)一個(gè)機(jī)器周期的時(shí)間,也就是12/11059200秒,數(shù)字加1。還有一個(gè)特別注意的地方,就是秒表是加到60后,秒就自動(dòng)變成0了,這種情況在單片機(jī)和計(jì)算機(jī)里我們稱之為溢出。那定時(shí)器加到多少才會(huì)溢出呢?定時(shí)器有幾種模式,假如是16位的定時(shí)器,也就是2個(gè)字節(jié),最大值就是65535,那么加到65535后,再加1就算溢出,如果有其他位數(shù)的話,道理是一樣的,對(duì)于51單片機(jī)來(lái)說(shuō),溢出后,這個(gè)值會(huì)直接變成0。從某一個(gè)初值,經(jīng)過(guò)計(jì)算確定的時(shí)間后溢出,這個(gè)過(guò)程就是其定時(shí)的含義。
1.2.2 定時(shí)器的寄存器描述
標(biāo)準(zhǔn)的51里邊只有定時(shí)器0和定時(shí)器1這兩個(gè)定時(shí)器,現(xiàn)在很多單片機(jī)也有多個(gè)定時(shí)器的,在這里我們先講定時(shí)器0和1。那么我前邊提到過(guò),對(duì)于單片機(jī)的每一個(gè)功能模塊,都是由他的SFR,也就是特殊功能寄存器來(lái)控制。而和定時(shí)器有關(guān)的特殊功能寄存器,有以下幾個(gè),大家不需要去記憶這些寄存器的名字和作用,你只要大概知道就行,用的時(shí)候,隨時(shí)可以查手冊(cè),找到每個(gè)寄存器的名字和每個(gè)寄存器所起到的作用。
表5-2 定時(shí)值存儲(chǔ)寄存器
名稱 | 描述 | SFR地址 |
---|---|---|
TH0 | 定時(shí)器0高字節(jié) | 8CH |
TL0 | 定時(shí)器0低字節(jié) | 8AH |
TH1 | 定時(shí)器1高字節(jié) | 8DH |
TL1 | 定時(shí)器1低字節(jié) | 8BH |
表5-3 TCON--定時(shí)器/計(jì)數(shù)器控制寄存器的位分配(地址:88H)
可位尋址;復(fù)位值:0x00;復(fù)位源:任何復(fù)位
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符號(hào) | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
表5-4 TCON--定時(shí)器/計(jì)數(shù)器控制寄存器的位描述
位 | 符號(hào) | 描述 |
---|---|---|
7 | TF1 | 定時(shí)器1溢出標(biāo)志。一旦定時(shí)器1發(fā)生溢出時(shí)硬件置1。清零有兩種方式:軟件清零,或者進(jìn)入定時(shí)器中斷時(shí)硬件清零。 |
6 | TR1 | 定時(shí)1運(yùn)行控制位。軟件置位/清零來(lái)進(jìn)行啟動(dòng)/關(guān)閉定時(shí)器。 |
5 | TF0 | 定時(shí)器0溢出標(biāo)志。一旦定時(shí)器0發(fā)生溢出時(shí)硬件置1。清零有兩種方式:軟件清零,或者進(jìn)入定時(shí)器中斷時(shí)硬件清零。 |
4 | TR0 | 定時(shí)0運(yùn)行控制位。軟件置位/清零來(lái)進(jìn)行啟動(dòng)/關(guān)閉定時(shí)器。 |
3 | IE1 | 外部中斷部分,與定時(shí)器無(wú)關(guān),暫且不看 |
2 | IT1 | |
1 | IE0 | |
0 | IT0 |
大家注意在表5-4中的描述中,只要寫(xiě)到硬件置1或者清0的,就是指一旦符合條件,單片機(jī)自動(dòng)完成的動(dòng)作,只要寫(xiě)軟件置1或者清0的,是指我們用程序去完成這個(gè)動(dòng)作,后邊課程中不再做說(shuō)明。
表5-2中的寄存器,是存儲(chǔ)計(jì)數(shù)器的計(jì)數(shù)值的,兩個(gè)字節(jié)的用于定時(shí)器1,兩個(gè)字節(jié)用于定時(shí)器0。
表5-3中有TF1、TR1、TF0、TR0這4位需要我們理解清楚。兩位定時(shí)器1的,兩位定時(shí)器0的,我們只解釋定時(shí)器1的,定時(shí)器0的同理。先看TR1,當(dāng)我們程序中寫(xiě)TR1 = 1以后,定時(shí)器值就會(huì)每經(jīng)過(guò)一個(gè)機(jī)器周期加1,當(dāng)我們程序中寫(xiě)TR1 = 0以后,定時(shí)器值就會(huì)保持不變化。TF1,這個(gè)是一個(gè)標(biāo)志位,他的作用是告訴我們定時(shí)器溢出了。比如我們的定時(shí)器設(shè)置成16位的定時(shí)器,那么每經(jīng)過(guò)一個(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)生任何影響。
表5-5 TMOD--定時(shí)器方式控制寄存器的位分配(地址 89H)
不可位尋址;復(fù)位值:0x00;復(fù)位源:任何復(fù)位
位 | 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) |
細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),TCON那個(gè)地方標(biāo)注的是“可位尋址”,TMOD這里標(biāo)注的是“不可位尋址”。這個(gè)地方的意思就是比如TCON有一位TR1,我們可以在程序中直接進(jìn)行TR1 = 1;這樣操作。但是(T1)M1 = 1;這樣的操作就是錯(cuò)誤的。我們要操作就必須一次操作一個(gè)字節(jié),就是必須一次性對(duì)TMOD所有位操作,不能對(duì)其中某一位單獨(dú)進(jìn)行操作。
表5-6 TMOD--定時(shí)器/計(jì)數(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í)器開(kāi)始計(jì)時(shí),當(dāng)該位被清0時(shí),只要’TRx’位被置1,定時(shí)器x就使能開(kāi)始計(jì)時(shí),不受到單片機(jī)引腳’INTx’外部信號(hào)的干擾,常用來(lái)測(cè)量外部信號(hào)脈沖寬度。這是定時(shí)器一個(gè)額外功能,本節(jié)課暫不介紹。 |
C/T | 定時(shí)器或計(jì)數(shù)器選擇位。該位被清零時(shí)用作定時(shí)器功能(內(nèi)部系統(tǒng)時(shí)鐘),被置1用作計(jì)數(shù)器功能。 |
表5-7 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í)器 |
以上這4種模式的配置,其中模式0是為了兼容老的8048單片機(jī)而設(shè)的,現(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í)器,取值范圍是0到65535,溢出后,只要不對(duì)THn和TLn重新賦值,則從0開(kāi)始計(jì)數(shù)。模式2的功能是自動(dòng)裝載,就是TLn溢出后,TFn就直接置1了,并且THn的值直接賦給TLn,然后TLn從新賦值的這個(gè)數(shù)字開(kāi)始計(jì)數(shù)。這個(gè)功能可以用來(lái)產(chǎn)生串口的通信波特率,我們講串口的時(shí)候要用到,本章節(jié)我們重點(diǎn)來(lái)學(xué)習(xí)模式1。為了加深大家理解這個(gè)定時(shí)器原理,我們來(lái)看一下他的模式1的電路示意圖5-1。
圖5-1 定時(shí)器/計(jì)數(shù)器模式1示意圖
我?guī)е蠹襾?lái)分析一下這個(gè)示意圖,后邊如果手冊(cè)中遇到,大家也就會(huì)自己研究了。OSC框表示時(shí)鐘頻率,因?yàn)槲覀?個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,所以那個(gè)d就等于12。下邊GATA右邊的那個(gè)門是一個(gè)非門電路,再右側(cè)是一個(gè)或門,再往右是一個(gè)與門電路,大家可以對(duì)照一下5-1節(jié)的內(nèi)容。
圖上可以看出來(lái),下邊部分電路是控制了上邊部分,那我們先來(lái)看下邊是如何控制的,我們以定時(shí)器0為例。
1、TR0和下邊或門電路的結(jié)果要進(jìn)行與門運(yùn)算,TR0如果是0的話,與運(yùn)算完了肯定是0,所以確定如果要讓定時(shí)器工作,TR0 = 1。
2、與門結(jié)果要想是1,那或門出來(lái)的信號(hào)必須也得是1才行。在GATE位為1的情況下,經(jīng)過(guò)一個(gè)非門變成0,或門電路結(jié)果要想是1的話,那INT0即P3.2引腳必須是1的情況下,這個(gè)時(shí)候定時(shí)器才會(huì)工作,而INT0引腳是0的情況下,定時(shí)器不工作,這就是GATE位的作用。
3、當(dāng)GATE位為0的時(shí)候,經(jīng)過(guò)一個(gè)非門變成1,不管INT0引腳是什么電平,經(jīng)過(guò)或門電路后則肯定是1,定時(shí)器就會(huì)工作。
4、要想讓定時(shí)器工作,就是加1,從圖上看有兩種方式,第一種方式是那個(gè)開(kāi)關(guān)打到上邊的箭頭,就是C/T = 0的時(shí)候,一個(gè)機(jī)器周期TL就會(huì)加1一次,當(dāng)開(kāi)關(guān)打到下邊的箭頭,即C/T =1的時(shí)候,T0引腳即P3.4引腳來(lái)一個(gè)脈沖,TL就加1一次,這也就是計(jì)數(shù)器功能。
INT0引腳是P3.2,INT1引腳是P3.3,T0引腳是P3.4,T1引腳是P3.5,這個(gè)可以從我們KST-51開(kāi)發(fā)板原理圖上看出來(lái)。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140573 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3289瀏覽量
117366 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1637瀏覽量
81644
發(fā)布評(píng)論請(qǐng)先 登錄
基于單片機(jī)的綜合應(yīng)用程序數(shù)碼管【C語(yǔ)言】定時(shí)器控制數(shù)碼管
LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用
LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用
LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用
定時(shí)器掃描數(shù)碼管(不閃爍)
LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用
基于8051的Proteus仿真-定時(shí)器控制數(shù)碼管動(dòng)管顯示
基于SOPC的定時(shí)器控制數(shù)碼管顯示

定時(shí)器1秒計(jì)數(shù),數(shù)碼管顯示0-999程序代碼【下載】
數(shù)碼管顯示的原理靜態(tài)顯示及中斷概念單片機(jī)的定時(shí)器應(yīng)用視頻教程

使用定時(shí)器控制數(shù)碼管動(dòng)管顯示的程序和工程文件免費(fèi)下載

使用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的程序和工程文件免費(fèi)下載

STM32+Proteus仿真實(shí)現(xiàn)滴答定時(shí)器計(jì)時(shí)和數(shù)碼管實(shí)時(shí)顯示功能

定時(shí)器和數(shù)碼管解析(下)

使用定時(shí)器和數(shù)碼管實(shí)現(xiàn)簡(jiǎn)易秒計(jì)時(shí)器

評(píng)論