2021-11-19
單片機執(zhí)行指令?? 讓我們考慮一個問題。當(dāng)我們在編程器中將指令寫入單片機,然后取出單片機時,單片機可以執(zhí)行該指令。
因此該指令必須保存在單片機的某個位置,在單片機斷電后,這個地方仍然可以防止這個指令丟失。這個地方是什么?這個地方是單片機內(nèi)部的只讀存儲器,即ROM(只讀存儲器)為什么叫只讀存儲器?我們剛才不是寫了兩個數(shù)字嗎?初,89C51中的ROM是電可擦除ROM,稱為閃存ROM。剛才,我們使用了編程器。在特殊情況下,ROM由外部設(shè)備寫入。在單片機的正常工作條件下,我們只能從該側(cè)讀取數(shù)據(jù),不能將數(shù)據(jù)寫入。因此,我們?nèi)匀环Q之為ROM,因為我們知道計算機可以執(zhí)行數(shù)學(xué)運算,這對我們來說很難理解。它們只是一些電子元件。他們?nèi)绾芜M行數(shù)學(xué)運算?我們?nèi)祟愖鰯?shù)學(xué)題,比如37+45。首先在紙上寫37,然后在[敏感詞]寫45,然后大腦計算,后寫出結(jié)果。操作的原材料為37和45,結(jié)果為82。兩者都寫在紙上。計算機放在哪里為了解決這個問題,讓我們做一個實驗:這里有一盞燈。我們知道燈不是開著就是關(guān)著。有兩個州。我們可以使用“0”和“1”替換這兩種狀態(tài):指定燈光為“1”,關(guān)閉為“0”。
現(xiàn)在打開三個燈光,有多少狀態(tài)?讓我們看一下列表:000/001/010/011/100/101/110/111。讓我想想,這不是我們學(xué)過的二進制數(shù)嗎?起初,燈光的打開和關(guān)閉只是物理現(xiàn)象,但是當(dāng)我們按照一定的順序排列它們時,燈光的打開和關(guān)閉表示數(shù)字,讓我們再進行一個抽象的步驟。燈為什么亮著?因為輸出電路輸出高電平并使燈通電。因此,無論電路的輸出是高電平還是低電平,都可以代替燈的打開和關(guān)閉。通過上述實驗,我們知道光或線的能級可以表示兩種狀態(tài):0和1。實際上,這是一個二進制位。
因此,我們稱一行為“位??。
一行表示0和1,兩行表示00/01/10/11四種狀態(tài),即0~3,三行表示0~7。在計算機中,八行通常放在一起同時計數(shù),可以表示0~255,總共256個狀態(tài)。
這8行或8位稱為字節(jié)。
單片機的結(jié)構(gòu)存儲器是用來存儲數(shù)據(jù)的地方。它使用級別來存儲數(shù)據(jù),也就是說,它實際上存儲了高級別和低級別,而不是我們通常認(rèn)為的數(shù)字1234。這樣,我們的一個謎團就解開了。記憶就像一個小抽屜。一個小抽屜里有八個小房間。每個電池用于存儲“電荷”,電荷通過與其相連的電線傳輸或釋放。至于電荷如何儲存在小電網(wǎng)中,我們不必?fù)?dān)心。你可以把電線想象成水管。小電網(wǎng)中的電荷就像水,很容易理解。內(nèi)存中的每個小抽屜都是存放數(shù)據(jù)的地方,我們稱之為“單元”。
有了這樣的結(jié)構(gòu),我們就可以開始存儲數(shù)據(jù)了。如果我們想放一個數(shù)據(jù)12,即000011100,我們只需要用電荷填充第二個和第三個小單元,然后釋放其他小單元中的電荷,但問題就出來了。內(nèi)存有許多單元。這些線路是并聯(lián)的。當(dāng)電荷被注入時,電荷將被注入所有電池,當(dāng)電荷被釋放時,每個電池中的電荷將被釋放。在這種情況下,無論有多少內(nèi)存單元,我們只能輸入相同的數(shù)字,這肯定不是我們想要的。因此,應(yīng)在結(jié)構(gòu)上稍作改動。
每個單元上都需要一條控制線。如果您想將數(shù)據(jù)輸入哪個單元,您可以向單元的控制線發(fā)送信號,控制線將打開開關(guān),以便電荷可以自由流動。其他單元的控制線上沒有信號,因此開關(guān)不會打開,也不會受到影響。
這樣,只要控制不同單元的控制線上,就可以向每個單元寫入不同的數(shù)據(jù)。類似地,如果您想從單元中獲取數(shù)據(jù),只需打開相應(yīng)的控制開關(guān)。
解碼MCU內(nèi)存即可??。
124? 這并不簡單。把每個單元的控制線引到集成電路的外面不是很好嗎?沒那么簡單。27512內(nèi)存中有65536個單元。如果您引出每條線路,集成電路必須有60000多個引腳?不,我該怎么辦?盡量減少行數(shù)。
有叫做解碼的方法。讓我們簡單介紹一下:一行可以表示兩種狀態(tài),兩行可以表示四種狀態(tài),三行可以表示八種狀態(tài),需要多少行來表示256種狀態(tài)?8線,所以我們只需要16線來表示65536個狀態(tài)。
到目前為止,解碼問題已經(jīng)解決。讓我們多注意另一個問題。每個單元的八根電線從哪里來?它與計算機相連。通常,這八根導(dǎo)線不僅連接到內(nèi)存,還連接到其他設(shè)備。
這樣,問題就出現(xiàn)了。由于這八條線不是內(nèi)存和計算機之間的專用線,如果某個單元始終連接到這八條線,則會出現(xiàn)一個問題:例如,如果此內(nèi)存單元中的值為0ffh,而另一個內(nèi)存單元的值為00h,那么這條線是高電平還是低電平?如何區(qū)分?
這個方法很簡單。當(dāng)外部線路連接到集成電路的引腳時,它不會直接連接到每個單元。只需在中間添加一組開關(guān)。通常我們把開關(guān)開著。如果我們真的想向內(nèi)存寫入數(shù)據(jù)或從內(nèi)存讀取數(shù)據(jù),只需打開開關(guān)。
這組開關(guān)由三根引線選擇:讀控制端、寫控制端和芯片選擇端。要將數(shù)據(jù)寫入芯片,首先選擇芯片,然后發(fā)送寫入信號,關(guān)閉開關(guān),并將傳輸?shù)臄?shù)據(jù)(電荷)寫入芯片。如果要讀取,請先選擇芯片,然后發(fā)送讀取信號。當(dāng)開關(guān)閉合時,數(shù)據(jù)將被發(fā)送出去。
讀寫信號也同時連接到另一個存儲器,但由于芯片選擇端不同。