您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
作者:隨風(fēng)
鏈接:https://www.zhihu.com/question/20492284/answer/15279863
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
下面是我的答案:
先說代碼:
我們是用電腦的鍵盤來輸入的指令,每一個(gè)指令都對(duì)應(yīng)一個(gè)ASCII碼,而這里的ASCII碼就是有序的電壓的高低(或電流的有無,下面只提電壓的高低),即我們輸入的是電壓的高低,你所看到代碼是這些電壓的高低控制顯示器所顯示的圖像,其實(shí)電腦也不知道它是什么,只知道這樣顯示。
結(jié)論:代碼其實(shí)就是存儲(chǔ)在存儲(chǔ)器(內(nèi)存、硬盤或者閃存等等)中有序的電壓的高低。
再說編譯:
編譯是一個(gè)有序的電壓的高低向另一種有序的電壓高低的一種轉(zhuǎn)換過程,下面以52單片機(jī)為例,我們編譯是從表示ASCII碼的那種有序電壓高低轉(zhuǎn)換為52單片機(jī)能夠識(shí)別的另一種規(guī)定好的有序電壓高低,即表示HEX文件的電壓高低。
結(jié)論:編譯出的結(jié)果還是電腦中存儲(chǔ)的有序電壓高低。
到單片機(jī)燒錄:
接下倆就是燒錄,理解了上面兩點(diǎn)就很容易理解下面的內(nèi)容,燒錄就是電腦中的有序電壓高低通過數(shù)據(jù)線傳輸?shù)絾纹瑱C(jī)中的ROM中。
接下來ROM就可以釋放其中的電壓來控制外圍的電路。
總結(jié):從代碼的編輯到最后對(duì)電路的控制都是電壓在起作用,只是為了方面我們而給我們展現(xiàn)的形式不一樣而已,而其本質(zhì)都是電壓,這樣也就不存在轉(zhuǎn)換。
理解這句話:世界上沒有軟件,軟件只是對(duì)硬件的一種反映,就像意識(shí)是對(duì)世界的一種反映是一樣的!
相信這樣就很容易理解了。
既然樓主提到“低電平”,看來對(duì)數(shù)字電路是有一點(diǎn)了解的。
那么,翻開數(shù)字電路相關(guān)教材,最前面幾頁。
一般它都會(huì)告訴你,三極管/場效應(yīng)管類似繼電器(一種通過線圈產(chǎn)生磁場、然后用磁場控制物理開關(guān)的通斷與否的設(shè)備);在它一個(gè)管腳上輸入/切斷電壓信號(hào),另一個(gè)管腳就會(huì)出現(xiàn)高/低電平。
PS:繼電器是一種利用電磁鐵控制的開關(guān);當(dāng)向電磁鐵通電時(shí)就產(chǎn)生磁場,而這個(gè)磁場就會(huì)吸合或者分離開關(guān),從而實(shí)現(xiàn)“以微弱電流控制另一條電路的通斷”這個(gè)功能。
其中,平常觸點(diǎn)接觸使得被控制電路導(dǎo)通、給控制它的電磁鐵通電后就使得開關(guān)斷開的那種繼電器,就等效于非門。三極管拿來當(dāng)開關(guān)使用時(shí),和這種繼電器效果幾乎一樣。
以上,就是數(shù)字電路的基礎(chǔ)。
你敲入的任何東西,最終就是通過類似的東西/機(jī)制儲(chǔ)存的;所謂“指令”,其實(shí)就是“某個(gè)命令碼“(一般叫機(jī)器碼),這個(gè)”命令碼”會(huì)改變CPU內(nèi)部一堆“開關(guān)”的狀態(tài),以激活不同的電路;然后數(shù)據(jù)(前面提到過,它也是用三極管/場效應(yīng)管的導(dǎo)通與否“記憶”的)利用類似的機(jī)制,被送入這個(gè)被“指令”激活的電路——這些電路是工程師們利用最最基礎(chǔ)的三極管控制原理,用一大堆三極管組合出來的:當(dāng)數(shù)據(jù)(某種高低電平的組合)經(jīng)過這些電路后,就會(huì)變成另外一組高低電平的組合:這個(gè)組合剛好和“指令”代表的功能所應(yīng)該給出的結(jié)果一致。
這段話可能有點(diǎn)難以理解。那么,看下最簡單的與門吧:數(shù)據(jù)有兩個(gè),分別通過兩條不同的線路進(jìn)入與門;輸出只有一個(gè),必須給它輸入兩個(gè)高電平,它才會(huì)輸出高電平;否則就輸出低電平(這一般簡化表述為:只有輸入兩個(gè)1,它才輸出1,否則輸出0)。
——這就是所謂的“與”邏輯;一組這樣的“與”邏輯就與計(jì)算機(jī)指令/高級(jí)語言里的“按位與”直接對(duì)應(yīng)。
——而按位與這個(gè)指令,意思就是選擇一組線路,把數(shù)據(jù)導(dǎo)通到這組“與”邏輯電路之上;然后這組與邏輯電路就會(huì)輸出兩組數(shù)據(jù)的按位與的結(jié)果。
——類似的,二進(jìn)制加法,1+1=0(同時(shí)進(jìn)位);1+0=1;0+1=1;0+0=0:這可以用一個(gè)異或電路來模擬(因?yàn)楫惢螂娐返囊?guī)則就是1+1=0、1+0=1、0+1=1、0+0=0);但這樣(同時(shí)進(jìn)位)這個(gè)說明就會(huì)丟失了,所以需要同時(shí)用一個(gè)與門模擬高位進(jìn)位(前面說過,與門就是只有兩個(gè)1才會(huì)輸出1,其它輸出0;綜合異或的說明:這是不是就和二進(jìn)制加法的規(guī)則剛好一致了呢?)
然后更高一位就成了兩根輸入線上的數(shù)據(jù)相加、再加上進(jìn)位數(shù)據(jù)……依此類推:這就是用開關(guān)做加法的思路。
更多位數(shù)的數(shù)字的加法,只不過是對(duì)應(yīng)位的二進(jìn)制加法再加上前一位的進(jìn)位位罷了,沒什么特別的——這樣堆起來的一組開關(guān),就叫加法器。
——add指令呢,就是選中上面做的那一堆用來做加法的開關(guān)們;然后給它們輸入數(shù)據(jù)(不要忘了,兩組高低電平而已),這些數(shù)據(jù)就驅(qū)動(dòng)著構(gòu)成加法器的那些開關(guān)們,噼里啪啦一陣亂響之后(嗯,如果是老掉牙的繼電器計(jì)算機(jī)的話:還記得BUG的故事嗎?),電路就穩(wěn)定在某個(gè)狀態(tài)了:此時(shí),加法器的輸出,恰恰就是輸入數(shù)據(jù)的和(當(dāng)然是這樣了。前面講過,我們是刻意用異或門和與門精心組合,讓它們剛好和加法的效果一致)。
——其它種種指令,莫不大同小異(更復(fù)雜/高級(jí)的時(shí)鐘、流水線啥的……暫時(shí)就無視吧)
你可以翻翻課本。上面講過加法器的實(shí)現(xiàn)。
而加法器和另外一些邏輯電路加起來,就是所謂的ALU(算術(shù)邏輯單元,一下子就高大上了有木有)。(當(dāng)然了,實(shí)際上沒這么簡單。比如至少還要加上時(shí)鐘信號(hào)來打拍子協(xié)調(diào)開關(guān)們的動(dòng)作、加上鎖存器來暫存數(shù)據(jù)之類——前面提到過,給加法器輸入數(shù)據(jù),構(gòu)成加法器的一堆開關(guān)需要噼里啪啦一陣才能進(jìn)入穩(wěn)定態(tài),然后就可以讀出答案:時(shí)鐘信號(hào)就是用來協(xié)調(diào)這些開關(guān),保證它們都能得到足以達(dá)到穩(wěn)定態(tài)的時(shí)間用的)
簡而言之,代碼在計(jì)算機(jī)內(nèi)部,本身就是一組特定的高低電平組合;而計(jì)算機(jī)是精心設(shè)計(jì)的、海量的、用高低電平控制通斷的開關(guān)組;當(dāng)給這個(gè)開關(guān)組輸入不同的電平組合時(shí),就會(huì)導(dǎo)致它內(nèi)部出現(xiàn)復(fù)雜的開關(guān)動(dòng)作,最終產(chǎn)生另外一組高低電平的組合作為輸出;這些開關(guān)動(dòng)作經(jīng)過精心設(shè)計(jì),使得它的行為是可解釋、可預(yù)測的——解釋/預(yù)測的規(guī)則,就是CPU的指令集。
——換言之,在機(jī)器內(nèi)部,一切本來就是高低電平,不存在轉(zhuǎn)換問題。
——反而是鍵盤/鼠標(biāo)/mic的輸入要經(jīng)過機(jī)械過程到數(shù)字信號(hào)的轉(zhuǎn)換;而視頻、音頻之類的輸出,要經(jīng)過數(shù)模轉(zhuǎn)換再通過其它機(jī)制才能變成人可辨識(shí)的信息
————————————————————————————————
我知道,很多人困惑的,可能并不是開關(guān)的原理;而是:如果CPU不過是一堆開關(guān)的話,它為什么能“聽懂”類似“加法”“do...while”這類高大上的復(fù)雜指令、甚至做出office、photoshop甚至人工智能這樣神奇的東西呢?這些高大上的語義,是怎么被電路所理解的呢?
加法之類簡單指令,前面已經(jīng)介紹過了;而提到更復(fù)雜的東西……這就不得不說說圖靈的貢獻(xiàn)了。
還是從最小兒科的題目開始。假設(shè)你從來沒聽說過乘法表;那么,你怎么算8×9呢?
我們知道,A x B就是B個(gè)A相加或A個(gè)B相加的意思。那么,要算8×9,我們只要把8個(gè)9加起來就夠了:7次加法而已。
換句話說,這里有個(gè)很好的思想,即: 很多“高級(jí)”數(shù)學(xué)計(jì)算(如乘法),其實(shí)用“低級(jí)”方法(如加法)一樣是可以算的。
圖靈的貢獻(xiàn)就是,他證明了,如果一臺(tái)機(jī)器,可以接受一系列的輸入、并按輸入指示完成運(yùn)算;那么,當(dāng)這臺(tái)機(jī)器可支持的操作滿足“圖靈完備”的要求時(shí),它就可以模擬任何其它數(shù)學(xué)/邏輯運(yùn)算!
這實(shí)在是太關(guān)鍵了。要知道,人類早就想利用機(jī)械裝置代替一些腦力工作了。比如說,算盤,按照口訣機(jī)械的一陣擺弄,答案就出來了;還有老外的各種機(jī)械計(jì)算器,比如手搖計(jì)算機(jī)到炮兵用的彈道計(jì)算機(jī)、再到德軍的機(jī)械加/解密機(jī)等等,這種嘗試可以說是數(shù)不勝數(shù)。
但,再怎么的,這些東西也只能解決特定的問題。想做能解決全部問題的通用機(jī)?天哪,那得有多復(fù)雜。
而圖靈,就在這時(shí)候,為人類指出了一條通向機(jī)械智能的可行道路……
——一臺(tái)只會(huì)做加法的機(jī)器,只要能想辦法讓它實(shí)現(xiàn)“連續(xù)做指定次數(shù)加法”,那它就可以模擬一臺(tái)乘法機(jī)(模擬二進(jìn)制乘法會(huì)更容易一些)。而能夠模擬任何數(shù)學(xué)/邏輯運(yùn)算的機(jī)器,并不比加法機(jī)復(fù)雜太多。
換句話說,要搞出一臺(tái)“無所不能”的計(jì)算機(jī)器,并不需要窮盡一切可能,而是只要支持程序輸入、再支持少的令人發(fā)指的幾條指令,就可以辦到了。
比如說,CPU,它根本上其實(shí)只會(huì)三招:與、或、非。
與就是全為真,則輸出真;或是只要一個(gè)為真,則輸出真;非則是輸入真它就輸出假、輸入假就輸出真——所謂的真假,一般寫作1、0,在計(jì)算機(jī)內(nèi)部就是高低電平。
別看CPU只會(huì)這三板斧;可當(dāng)它們巧妙的組合起來后(構(gòu)造成計(jì)數(shù)器、指令寄存器等等等等再組合成CPU),就達(dá)到了圖靈完備的要求,產(chǎn)生了質(zhì)變——比如,前面提到過的加法器,就是“如何用這類基本邏輯模擬多位二進(jìn)制數(shù)的加法”的一個(gè)實(shí)例。
更具體是怎么做的,這就不是三言兩語能說清楚的了。還是仔細(xì)看看自己的數(shù)字電路這本書吧。
——數(shù)字電路研究的,就是如何用與或非這三板斧,來實(shí)現(xiàn)各種高級(jí)運(yùn)算甚至CPU指令集這么復(fù)雜的事物(甚至是直接實(shí)現(xiàn)某些算法,如加密、視頻編碼等等)
——而CPU指令集呢,則形成了另外一個(gè)強(qiáng)大得多的圖靈機(jī)(體現(xiàn)在能夠支持更多比原始的與或非更”高階“的操作上):這就是機(jī)器碼(和匯編指令幾乎一一對(duì)應(yīng))
——然后呢,諸如c/c++、java等高級(jí)語言,就是利用CPU指令集形成的、另一個(gè)更加強(qiáng)大的圖靈機(jī)(編譯器/解釋器負(fù)責(zé)兩種圖靈機(jī)之間的翻譯工作)。
——而程序員們研究的,就是如何用編程語言這樣一個(gè)強(qiáng)大的圖靈機(jī),去實(shí)現(xiàn)office、photoshop、wow甚至人工智能這樣復(fù)雜的事物。
這是一個(gè)層層模擬的過程。
————————————————————————————
總之,開關(guān)的通斷是基礎(chǔ);而各種神奇的功能是如何用這么簡單的東西組合出來的呢,那就必須理解“程序”原理(也就是圖靈機(jī)原理)了。
如果說,計(jì)算機(jī)是一個(gè)人,那么,軟件就是他掌握的知識(shí)。這個(gè)知識(shí)使得他不僅能掰著手指頭數(shù)數(shù)(相當(dāng)于硬件直接提供的基礎(chǔ)功能),甚至還可以去洞悉宇宙的奧秘(相當(dāng)于利用軟件“模擬”出來的、無窮無盡的擴(kuò)展功能)。
————————————————————————————————
具體一些,人是怎樣開車的呢?
首先,他要知道車的控制原理(知識(shí)/軟件);然后,基于這些知識(shí),大腦向他的四肢肌肉發(fā)出神經(jīng)沖動(dòng),驅(qū)使他完成轉(zhuǎn)方向盤、掛擋、踩離合器/油門等種種動(dòng)作,最終達(dá)到開車這個(gè)目的。
軟件控制硬件,也是類似的原理。
前面說過,程序本身就是高低電平的組合;它通過在CPU上執(zhí)行來模擬各種決策過程;同時(shí),計(jì)算機(jī)就是一堆開關(guān);那么,通過指令向某些地址寫出數(shù)據(jù)(訪問特定地址是通過各種尋址機(jī)制/指令完成的,歸根結(jié)底也可以說是通過開關(guān)切換,改變了電路拓?fù)洌偷扔陂_啟/關(guān)閉了對(duì)應(yīng)地址上的某個(gè)開關(guān);這個(gè)開關(guān)可以是類似CPU內(nèi)部那樣的一組三極管,也可以是通向另外一個(gè)繼電器的信號(hào)線——這個(gè)信號(hào)就促使繼電器閉合,于是電機(jī)導(dǎo)通……
就好象人開汽車一樣,神經(jīng)發(fā)出的微不足道的電脈沖經(jīng)過肌肉放大,影響了涉及數(shù)百甚至數(shù)千馬力的能量洪流的發(fā)動(dòng)機(jī)/變速箱的運(yùn)轉(zhuǎn),然后汽車就開走了。
計(jì)算機(jī)也一樣:它通過向控制特定地址上的開關(guān)輸出0/1(高低電平),就可以通過事先準(zhǔn)備的物理設(shè)施驅(qū)動(dòng)諸如航模電機(jī)、舵機(jī)等等機(jī)構(gòu),這就完成了航?刂。
完整的控制回路甚至可以是:
航模上的傳感器采集飛行姿態(tài)、地形、位置等等數(shù)據(jù)(最終轉(zhuǎn)換成高低電平構(gòu)成的信號(hào))----信號(hào)通過某些端口送到CPU-----CPU執(zhí)行程序,程序讀取傳感器發(fā)來的信號(hào),決定下一步的行動(dòng)-----經(jīng)過程序的智能判斷后,通過控制特定地址上的開關(guān)(前面提過,向這個(gè)地址發(fā)一組高低電平構(gòu)成的數(shù)據(jù)就行了),驅(qū)動(dòng)諸如航模電機(jī)、舵機(jī)等等機(jī)構(gòu),完成航模控制。
剛考完計(jì)算機(jī)組成原理
對(duì)單片機(jī)也略懂一二
所以在這里給大家展示一下我對(duì)題主疑惑的解答
首先,題主說寫0就會(huì)輸出低電平
那么我們就用代碼展示一下怎么會(huì)顯示低電平
我把題主的意思先用單片機(jī)C語言寫出來
可以在keil中運(yùn)行的
#include “reg52.h”
sbit p1.0 = P1^0
void main()
{
while(1)
{
p1.0 = 0;
}
}
好了,題主說在單片機(jī)控制里,寫0就會(huì)輸出低電平,是這樣的。
先看什么是單片機(jī):
如圖1
題主說的輸出低電平就是在其中的一個(gè)引腳上輸出低電平
我想看不懂代碼的人也能夠看到
代碼第七行里,p1.0這個(gè)變量被賦予了0值
那么咱們深入的看一下給他賦0值單片機(jī)內(nèi)部發(fā)生了什么變化
首先給大家展示一下單片機(jī)一個(gè)引腳內(nèi)部到底是什么東東
左邊的大家就不用看了
右邊給大家解釋一下,最右邊的就是引腳了
雖然引腳是一個(gè),但是大家可以看到
右邊是有兩個(gè)裝置的,上邊的裝置是用來保持內(nèi)部輸出到引腳的電平不會(huì)被外部的信號(hào)所干擾。下邊的裝置會(huì)把從外部收集來的信號(hào)臨時(shí)存儲(chǔ)起來,這里存的不是0就是1。怎么判斷?大于某一電壓就是1,小于某一電壓就是0。這兩個(gè)裝置互不干擾。
第七行的代碼就是將某一引腳輸出低電平并用上邊的保持元件將其維持到低電平。
那么,就有人想問了,為什么寫成這樣單片機(jī)就會(huì)認(rèn)識(shí)呢?還會(huì)奇怪為什么單片機(jī)認(rèn)識(shí)的語言和程序員認(rèn)識(shí)的語言一樣呢?
這里就牽扯到了計(jì)算機(jī)組成原理了。我就簡單的介紹一下:
首先,我寫的這段代碼會(huì)在一個(gè)軟件里運(yùn)行,這個(gè)軟件會(huì)編譯我的代碼形成枯燥難懂但是70年代時(shí)會(huì)被人認(rèn)為高大上的匯編語言,類似這樣的(除綠色字部分,解釋用的):
如圖3
這還不夠,形成這樣的語言會(huì)讓計(jì)算機(jī)中的低等編譯器認(rèn)識(shí),低等編譯器會(huì)將代碼翻譯成如下圖所示的東東
如圖4
注意,這是16進(jìn)制的數(shù),具體怎么轉(zhuǎn)化為二進(jìn)制我就不詳細(xì)展開了。為什么要編譯成圖3的語言再編譯呢?說白了我感覺就是跟水廠一樣,水廠把我制作的水放到一個(gè)通用的大水管里然后通到不同單片機(jī)的家里,單片機(jī)按照自己家的情況把水引到廚房等地。(就是這樣吧 - -)
那么,我們就可以讓單片機(jī)或者叫做計(jì)算機(jī)來執(zhí)行這段代碼了。
對(duì)不起,現(xiàn)在才進(jìn)入到計(jì)算機(jī)組成原理(對(duì)不起計(jì)組老師)
現(xiàn)如今,大家所用到的計(jì)算機(jī)都是馮諾依曼型計(jì)算機(jī)。
什么是馮諾依曼型計(jì)算機(jī)?書上解釋說:
采取存儲(chǔ)程序的方式讓控制器從存儲(chǔ)器中讀取二進(jìn)制并解釋然后讓運(yùn)算器去計(jì)算數(shù)值。
我來再解釋一下,首先讓我們了解運(yùn)算器是什么東東
如圖5
最下面的就是運(yùn)算器,運(yùn)算器能夠進(jìn)行加減乘除邏輯運(yùn)算,控制器會(huì)從存儲(chǔ)器中讀取數(shù)據(jù)放到上圖運(yùn)算器上邊的框框里,一個(gè)框框放一個(gè)數(shù)據(jù)。
怎么放?
看到左右的兩條道道了嗎?數(shù)據(jù)會(huì)在控制器的控制下被放到這些框框里,當(dāng)然控制器會(huì)控制最下面的運(yùn)算器做出各種運(yùn)算然后放回到上邊的框框里
那么數(shù)據(jù)是怎么回去的呢?
廢話,當(dāng)然是怎么來就怎么滾了,通過左右兩條道道啊親
讓我們來解釋一下最開始樓主說的輸出低電平,上邊的框框有一些是不能隨便放數(shù)據(jù)的,這些框框用來引出引腳,即有些框框里的數(shù)據(jù)連接著引腳啊親
講到這里,我想我已經(jīng)比較清楚的解釋了0是怎么控制低電平的了。
如果哪些地方?jīng)]講明白,大家可以交流一下,我會(huì)再詳細(xì)講講我理解的一些內(nèi)容。
首先看一下“低電平”是怎么形成的。
這個(gè)“控制信號(hào)”來自單片機(jī)的輸出寄存器(output control)。
那么這個(gè)信號(hào)的根源是怎么來的呢?
我們看到I/O的部分鏈接在APB(peripheral bus 外圍總線)上。
看來這個(gè)信號(hào)就是來自這個(gè)總線。
不難知道,所有數(shù)據(jù)的調(diào)度都來自STM32的核心--Cortex-M3.
我們就可以從微處理器如何執(zhí)行指令的角度去看。
實(shí)際上,每一段程序都被保存在ROM里,這個(gè)ROM里保存的就是我們軟件傳達(dá)下來所賦予的“信息”,微處理器通過總線在ROM里提取所需要的指令,然后再一定的時(shí)鐘調(diào)配下,最后執(zhí)行指令的。
而指令的實(shí)質(zhì)居然是
這樣我們知道了,其實(shí)在儲(chǔ)存器里保存的01序列,我們通過機(jī)器識(shí)別即取指令,可以了解到不同含義,進(jìn)而執(zhí)行不同的操作。
EEPROM存儲(chǔ)原理
EEPROM基本存儲(chǔ)單元電路的工作原理如下圖所示。與EPROM相似,它是在EPROM基本單元電路的浮空柵的上面再生成一個(gè)浮空柵,前者稱為第一級(jí)浮空柵,后者稱為第二級(jí)浮空柵?山o第二級(jí)浮空柵引出一個(gè)電極,使第二級(jí)浮空柵極接某一電壓VG。若VG為正電壓,第一浮空柵極與漏極之間產(chǎn)生隧道效應(yīng),使電子注入第一浮空柵極,即編程寫入。若使VG為負(fù)電壓,強(qiáng)使第一級(jí)浮空柵極的電子散失,即擦除。擦除后可重新寫入。
隧道效應(yīng): 量子力學(xué)則認(rèn)為,即使粒子能量小于閾值能量,很多粒子沖向勢(shì)壘,一部分粒子反彈,還會(huì)有一些粒子能過去,好象有一個(gè)隧道,稱作“量子隧道(quantum tunneling)”。
那這個(gè)有序的信息就是"0"和“1”的組合。
這個(gè)序列如何燒寫進(jìn)單片機(jī),當(dāng)然是有外圍電路啦,具體就是通過一定的時(shí)序打開單片機(jī)的儲(chǔ)存通路,然后把信息燒寫進(jìn)去。
如何燒寫呢?
JTAG(Joint Test Action Group;聯(lián)合測試工作組)是一種國際標(biāo)準(zhǔn)測試協(xié)議(IEEE 1149.1兼容),主要用于芯片內(nèi)部測試,F(xiàn)在多數(shù)的高級(jí)器件都支持JTAG協(xié)議,如DSP、FPGA器件等。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時(shí)鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。
接下來我們說軟件。
我們寫的軟件都是高級(jí)語言,離機(jī)器很遠(yuǎn),但是很容易被人的邏輯所理解,聰明的我們由一些翻譯官完成更繁雜的工作:
這些翻譯官就是編譯器,比如KEIL,就是把C語言翻譯成匯編語言,再通過匯編器,把匯編語言變成機(jī)器碼,然后把機(jī)器碼燒寫進(jìn)單片機(jī)的ROM,單片機(jī)上電之后,運(yùn)行程序,讀取指令也就是那些信息,然后執(zhí)行,控制IO口的寄存器,最后使IO口接地,哈哈,低電平就這樣完成了。
cpu內(nèi)部就是一堆門電路,門電路導(dǎo)通和閉合對(duì)應(yīng)著輸出為1或者0;
那怎么讓它導(dǎo)通呢?用電壓讓它導(dǎo)通,你可以認(rèn)為這個(gè)電壓是一個(gè)能量,用能量驅(qū)動(dòng)這個(gè)道理很通俗了吧;
那你可能又要說了,那電壓導(dǎo)通那它輸出是一個(gè)具體的電壓啊它也不是1呀,這個(gè)就是數(shù)電和模電之間的聯(lián)系和區(qū)別了:我們之所以制造數(shù)字電路,是要通過數(shù)字電路得到一種邏輯實(shí)現(xiàn),而模電才是想得到一個(gè)電壓輸出,這就是模電和數(shù)電的天壤之別。那什么又是邏輯實(shí)現(xiàn)?簡單的說其實(shí)也就是數(shù)學(xué)實(shí)現(xiàn),所謂編程就是把我們的需求變成數(shù)學(xué)問題,用編程語言編輯出來,給到cpu,讓它計(jì)算并驅(qū)動(dòng)終端,最終把我們的邏輯顯示出來。
至于數(shù)模之間的聯(lián)系,它們之間的聯(lián)系就是器件都是靠電壓驅(qū)動(dòng),那你又要問了,那么電壓為什么可以驅(qū)動(dòng)半導(dǎo)體器件?well,這個(gè)你要去看電磁場+半導(dǎo)體物理,可能還得看一點(diǎn)量子力學(xué),我也都沒看呢Orz;
說到這總結(jié)一下:我們制造數(shù)字電路,就是想得到一個(gè)能讓我們自由表達(dá)邏輯,并能讓我們眼睜睜看見我們的邏輯實(shí)現(xiàn)了的一個(gè)工具,至于這個(gè)工具是數(shù)字電路,還是量子路,還是光路,只要你低功耗性能好,是啥都無所謂,最好是真空才好呢,對(duì)人類來說,空氣都智能了才好呢。
接下來就要說說cpu架構(gòu)+指令集。
我們常常聽說,一種cpu架構(gòu)對(duì)應(yīng)著一種指令集,那這是為什么呢?
我們說所謂數(shù)字系統(tǒng),其實(shí)很簡單,你給我輸入,我就給你輸出;你想要什么樣的輸出,那你就要分析分析你要給到我什么樣的輸入我才能輸出你想要看到的輸出,編程也就是這個(gè)過程;可是問題來了,你隨隨便便給我什么輸入我都hold住嗎?很明顯是hold不住的,這個(gè)例子,我就不舉了。。。。
給這段下個(gè)結(jié)論就是:所謂指令集,其實(shí)就是給cpu這個(gè)數(shù)字系統(tǒng)一套驅(qū)動(dòng)編碼
轉(zhuǎn)自知乎各位大神 謝謝了
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08