單片機(jī)是將中央處理單元(CPU)、儲存器、輸入輸出集成在一片芯片上,可以說單片機(jī)就是一臺微型計算機(jī),只是和我們平常使用的計算機(jī)相比它的功能有所不同,也沒有我們用的計算機(jī)那樣強(qiáng)大。
計算機(jī)可以運(yùn)行一個個應(yīng)用,單片機(jī)可以按照工程師的編寫可執(zhí)行文件,實現(xiàn)各種各樣的功能。那么,單片機(jī)是怎么知道要執(zhí)行什么指令,做什么動作呢,我們的指令又是怎么被單片機(jī)識別呢?了解這個過程,可以加深對單片機(jī)的理解。
CPU
首先要從CPU的組成說起,CPU是由晶體管組成的,這些晶體管是一種半導(dǎo)體器件,比如二極管就是最為常見的半導(dǎo)體器件。電流只能從正極流向負(fù)極,反向則截止。
晶體管通過各種組合方式構(gòu)成門電路:與門,或門,非門,異或門等。門電路又稱為邏輯門,是數(shù)字電路的基礎(chǔ),常見門電路,及其真值表:
我們了解下與門電路:
與門電路可以想象為兩個串聯(lián)開關(guān)控制一個燈泡,只有同時閉合兩個開關(guān),燈泡才會被點亮。開關(guān)表示晶體管的導(dǎo)通與截止,燈泡的點亮與熄滅表示電路輸出的高低電平。
其他門電路也是由各種晶體管構(gòu)成,不同的輸入,有不同的輸出,構(gòu)成各種功能。各種門電路通過復(fù)雜的組合就成了CPU了。然后用CPU完成各種復(fù)雜計算的。
加法器
有了CPU,我們用它來算一道小學(xué)生算術(shù)題1+1=2,看看它是怎么計算的,從一個簡單加法器開始,加法器由半加器組成。
半加器
半加器由一個與門和異或門構(gòu)成。不考慮低位進(jìn)位來的進(jìn)位值,只有兩個輸入,兩個輸出。
1+1=2,2在二進(jìn)制中表示為0010。在半加器中:異或門輸入不同的電平(不是同時高或低),輸出為高,也就是1+0或0+1,輸出1,當(dāng)兩個都輸入為1輸出為0,與門則輸出為1,也就是進(jìn)位??梢园阉橄蟪梢粋€黑盒子:
全加器
用兩個半加器可以組成一個全加器:
當(dāng)多位數(shù)相加時,半加器可用于最低位求和,并給出進(jìn)位數(shù)。第二位的相加有兩個待加數(shù)(B和進(jìn)位CO),還有一個來自前面低位送來的進(jìn)位數(shù) (A)。這三個數(shù)相加,得出本位和數(shù)(全加和數(shù))和進(jìn)位數(shù)。同樣可以把它抽象出來:
這個黑盒子就是一個函數(shù),輸入兩個加數(shù),相加運(yùn)算,輸出和數(shù)。
如果要計算多位數(shù)的相加,則需要多個全加器以及其他門電路,組合出更復(fù)雜的加法器。減法的運(yùn)算可以用加法來分解:
減法:10 - 5 = 10 +(-5),須通過反碼,補(bǔ)碼等操作。
其他運(yùn)算器也有相關(guān)的門電路來組成,有關(guān)知識這里不展開。
從加法器我們不難得出,CPU的運(yùn)算是各種門電路的高低電平的輸入和輸出,高電平為1,低電平為0,把我們平常的十進(jìn)制數(shù)字轉(zhuǎn)成二進(jìn)制數(shù)輸入,輸出二進(jìn)制數(shù)。
兩個數(shù)字相加用全加器的組合來完成,如果是多個數(shù)字的相加呢?比如1+2+3+4+5+……+100,該怎么完成呢?
按照我們的計算過程來看這個問題,我們先把前兩個數(shù)拿出來相加,得到的和再和第三個數(shù)相加,依次累加到100,轉(zhuǎn)換到單片機(jī)來完成,那就要把所有的相加數(shù)放到一個存儲器中,以便在每次的相加中取出,還要把每次相加的和數(shù)保存起來用到下一次的相加,這就用到了寄存器了。
寄存器-1保存1-100的數(shù)字,寄存器-2保存每次的相加結(jié)果。計算1-100的相加,寄存器-2的初始值為0,依次取出寄存器-1的數(shù)字和寄存器-2的結(jié)果相加:
1+0=1,
2+1=3,
3+3=6,
4+6=10……
鎖存器
但是寄存器是怎么幫我們保存數(shù)據(jù)的呢?這就要鎖存器(Latch)來幫助了,兩個或非門組成了一個最簡單的鎖存器。
簡單的說,這個單元記住了之前S端的輸入1,直到我們把R端設(shè)為1,輸出端Q才變回0。
然后在這個簡單鎖存器加上控制端G和一個輸入端D就變成了D鎖存器:
它有兩個輸入端,分別是一個信號控制G,一個輸入數(shù)據(jù)信號D,一個輸出Q。它的功能就是在G有效的時候把D的值傳給Q,也就是鎖存的過程。
觸發(fā)器
把兩個D鎖存器結(jié)合到一起就成了D觸發(fā)器(DATA flip-flop)。觸發(fā)器也叫雙穩(wěn)態(tài)門,又稱雙穩(wěn)態(tài)觸發(fā)器,是一種可以在兩種狀態(tài)下運(yùn)行的數(shù)字邏輯電路。
觸發(fā)器一直保持它們的狀態(tài),直到它們收到輸入脈沖,又稱為觸發(fā)。常見的觸發(fā)器包括:RS 觸發(fā)器、D 觸發(fā)器和 JK觸發(fā)器等,其中D觸發(fā)器最為常用。
當(dāng)鎖存器-1控制G為有效信號時,D的輸入傳到到鎖存器-2的輸入,但是此時鎖存器-2的控制信號不是有效的,所以鎖存器-2的輸出Q沒有改變;當(dāng)鎖存器-1的控制G變?yōu)闊o效,鎖存器-2的控制信號變?yōu)橛行?,鎖存器-2的輸出Q就改變了,也就是觸發(fā)器的D輸入傳到了Q,并且D沒有輸入就一直不變。
時序電路
我們再來看看1—100的累加過程,如果寄存器-1和寄存器-2的存儲速度不一樣,或者運(yùn)算單元取數(shù)不協(xié)調(diào),也就是寄存器-2沒來得及存儲,或者寄存器-1還沒取出下一個參與運(yùn)算的數(shù)字,則此次的運(yùn)算就會就會出錯,又會影響到下一次的運(yùn)算,這個影響會無限放大到之后的結(jié)果,并且單片機(jī)還有很多外設(shè)需要同步運(yùn)行,這時就需要一個統(tǒng)一指揮來同步各個部分的行動,什么時候該做什么,做到哪一步了。
這個指揮就是時鐘。時鐘電路產(chǎn)生脈沖信號給電路,可以認(rèn)為給一次脈沖信號,單片機(jī)各個部位就動一下,電路就刷新一下,這就做到了行動統(tǒng)一。前面的D鎖存器,D觸發(fā)器G輸入端就是時鐘脈沖信號輸入,控制G輸入信號,進(jìn)而控制Q的輸出,或者記住Q值。這是內(nèi)存最初的樣子。
到此,我們知道了寄存器就是一種時序邏輯電路,但這種時序邏輯電路只包含存儲電路。寄存器的存儲電路是由鎖存器或觸發(fā)器構(gòu)成的,用來暫時存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果。
一個鎖存器或觸發(fā)器能存儲1位二進(jìn)制數(shù),所以由N個鎖存器或觸發(fā)器可以構(gòu)成N位寄存器,一般有8位寄存器、16位寄存器等。它被廣泛的用于各類數(shù)字系統(tǒng)和計算機(jī)中。
運(yùn)行程序
有了前面的鋪墊,我們來分析一下,代碼從是怎么被單片機(jī)識別的,并轉(zhuǎn)換成功能輸出的。
首先工程師把代碼邏輯寫好,再編譯成單片機(jī)的可執(zhí)行程序,這個可執(zhí)行程序?qū)嶋H上就是變成由0,1組成的按一定規(guī)律排列好的二進(jìn)制數(shù),再用燒錄器寫進(jìn)單片機(jī)。
單片機(jī)內(nèi)部就是由我們前面學(xué)的門電路的各種組合,門電路也由半導(dǎo)體器件構(gòu)成,這些半導(dǎo)體PN結(jié)是一種特殊的熔絲??瞻椎膯纹瑱C(jī)內(nèi)部是矩陣排列的熔絲,在燒錄過程,程序中0的地方就熔斷,1的地方就導(dǎo)通。燒錄好之后,單片機(jī)就有了邏輯功能。
執(zhí)行程序過程:從程序存儲區(qū)讀取程序指令——分析指令——執(zhí)行指令。
讀取指令:就是根據(jù)程序計算器(PC)的地址取出相應(yīng)的指令,送到指令寄存器。
分析指令:將指令寄存器中的指令操作碼取出后進(jìn)行譯碼,分析其指令性質(zhì)。如指令是我們之前的加法運(yùn)算中的取加數(shù),則尋找加數(shù)的地址。
執(zhí)行指令:無非是把一條二進(jìn)制代碼,轉(zhuǎn)換成數(shù)字信號(高低電平),操作邏輯門電路,就像我們的加法器一樣輸入輸出。把經(jīng)過邏輯門運(yùn)算的結(jié)果輸出,把單片機(jī)的相關(guān)引腳電平輸出高或低。
也就是單片機(jī)上電開機(jī),單片機(jī)處于初始狀態(tài),可以認(rèn)為初始狀態(tài)中程序計算器(PC)就有了第一個指令地址,在時序電路作用下,送到指令寄存器,分析指令,執(zhí)行指令,輸出功能,如此循環(huán)。單片機(jī)就這樣自動進(jìn)入執(zhí)行程序過程。
當(dāng)然單片機(jī)運(yùn)行的過程是很復(fù)雜的,這里只是個人簡單的理解,總結(jié)。
從晶體管組合成邏輯電路,邏輯電路組合成單片機(jī),再從單片機(jī)在到現(xiàn)在的計算機(jī),超級計算機(jī),是一個不斷積累,不停進(jìn)步的過程。想要你的人生也是這樣的精彩過程嗎,找我領(lǐng)取資料,開啟與導(dǎo)師的一對一互動,進(jìn)入高階學(xué)習(xí),成就精彩人生。
評論
查看更多