將“二進制”單獨拿出來作為一節(jié)來講,是因為它是一個極為基礎的概念。但是很多人對二進制并沒有形象的認識,甚至有一些已經(jīng)入門、稍有開發(fā)經(jīng)驗的人對它的理解仍然比較模糊。所以振南認為有必要將它以一種更為形象、通俗而又深刻的方式著重來進行闡述,以便給我們以后的學習打下堅實的基礎。
我們人類自古以來都在沿用一種被認為非常自然的計數(shù)方式,即十進制。它的原理非常簡單,即“滿十進一”(為什么是十進制,究其根源是因為我們有十根手指)。如果”XY”是一個十進制的2位數(shù)的話,那么它的每一個位上將可能出現(xiàn)0~9這十個數(shù)字。某一位當前是9,如果再+1便會歸0,同時向它的更高一位進1。這就是計數(shù)的基礎原理(不論進制如何都是如此)。
既然人類已經(jīng)習慣了使用了十進制,那為什么要在單片機中使用二進制呢?把它設計成十進制不好嗎?在計算機問世的初期,或是在一些技術狂熱分子中確實有人嘗試制造出其它進制的計算機。但不論使用何種進制,振南前面所介紹的CPU體系中的各種基本內容都是必須要遵循和實現(xiàn)的,比如尋指令與執(zhí)行、總線的操作等等。好,那振南就以總線操作中的一個環(huán)節(jié)—“CPU向地址總線給出要訪問的存儲器中的存儲單元的地址”為例,用十進制來進行實現(xiàn)。
假設要訪問的地址是(3456)10,請看圖1.20。
圖1.20 CPU以十進制方式向存儲器產(chǎn)生地址
很明顯,要以十進制方式傳輸3456這個數(shù)值,我們就需要用4條地址線,每一條地址線上分別傳輸3、4、5、6這四個數(shù)字。敢問大家,這該如何傳呢?一條線如何能表達0~9這十個數(shù)字呢?有人說:“可以??!我把5V等分為10份,0V~0.5V代表0,0.5V~1V代表1,依此類推,4.5V~5V代表9?!辈诲e,很聰明,這就是傳說中的“模擬計算機”的作法。它的信號線上傳輸?shù)氖悄M電壓信號,而非數(shù)字信號。
雖然上面所說的方法是可行的,但有很多因素決定了人們不會去這樣作:
電路的實現(xiàn)上難度比較大,模擬電路的設計比數(shù)據(jù)邏輯電路要復雜的多;
傳輸速度不高,模擬信號的產(chǎn)生與采集接收比數(shù)字信號要慢;
穩(wěn)定性和抗干擾能力比較弱,僅僅靠0.5V的壓差來確定傳輸?shù)臄?shù)值,極易出現(xiàn)錯誤;
功耗很難降低,模擬電路的復雜度和規(guī)模以及其它因素注定其功耗較大。
……
針對于第3條,有人曾經(jīng)提出過疑問:“我可以把電壓抬高啊,可以將5V定義為10V或20V,這樣壓差不就拉開了嗎?”聰明,不過你考慮過功耗的問題嗎?
我們還是用二進制的方式來進行實現(xiàn)吧。(3456)10轉化為二進制是(110110000000)2,請看圖1.21。
圖1.21 CPU以二進制方式向存儲器產(chǎn)生地址
二進制是滿二進一,將一個十進制的數(shù)值轉化為二進制其位數(shù)一定會變多,所以我們就需要更多的地址線。二進制數(shù)的每一位上只能表示0和1這兩個數(shù)字,這對應于地址線上使用兩個電平即可實現(xiàn),比如0V和5V(實際可能是0V~2.xV表示0,2.xV~5V表示1)。這樣作的好處是顯而易見的,電路設計的難度下降了很多,而且抗干擾能力也比較強。更重要的是,信號的傳輸速率可以作到比較高,最終實現(xiàn)計算機系統(tǒng)整體性能的提升。另外,二進制也使得芯片的功耗可以大幅度地降低,因為我們可以將高電平定義為3.3V、1.8V,甚至是1.2V。(高電平電壓定義得越低,單片機信號從低電平爬升到高電平的速度越快。因此,降低電平電壓將有利于時鐘頻率的提高。)
綜上所述,大家應該已經(jīng)比較深刻地認識到計算機系統(tǒng)中使用二進制的重要意義了。二進制是計算機的根基,是底層CPU硬件以及很多相關電路實現(xiàn)的基礎。所以,在我們所作的與單片機相關的很多開發(fā)和研究工作中,會大量涉及到二進制的概念和應用。





