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