系統(tǒng)擴展—單片機ROM擴展
引腳功能說明:
A0-A12為地址線,總共13條,則該存儲器的物理存儲空間有2的13次方,即8K。
D0-D7為數(shù)據(jù)總線,共8條,即該存儲器的每個存儲單元有8位數(shù)據(jù),即通常所說的字節(jié)為8,又叫一個字節(jié)。
CS為片選信號,當(dāng)該信號為0時,存儲器才能正常讀寫,當(dāng)CS為1時,存儲器的輸出端D0-D7和地址總線A0-A12都為高阻狀態(tài),即相當(dāng)于存儲器芯片沒有接入電路 。片選信號常用與電路中有多片同類芯片時選擇哪一個芯片有效,即哪一片芯片被接入電路中。在本例中,由于只有一片程序存儲器,沒有選擇的必要,所以可把片選端接地,使其永遠(yuǎn)有效。
OE為程序存儲器輸出允許端,當(dāng)該信號有效時,由地址線決定的程序存儲器的某一個單元中的數(shù)據(jù)輸出到數(shù)據(jù)總線上 。當(dāng)信號為1時,存儲器與數(shù)據(jù)總線斷開,VCC為存儲器的電源輸入端,Vss為存儲器的電源接地輸入端,G為地址鎖存器74373的鎖存信號輸入端 。當(dāng)該信號為0時,74373的輸出端與輸入端斷開,輸出端保持上次輸入的數(shù)據(jù)不變,當(dāng)該信號為1時,74373的輸出端與輸入端接通,輸出信號隨輸入端的變化而變化。
對8051來說,P0輸出經(jīng)74373鎖存后為低8位地址總線,P2口為高8位地址總線,共16條地址線,所以8051能訪問的存儲器為2的16次方,即64K稱為8051的邏輯地址空間,地址從0000H-OFFFFH。
存儲器有13條地址線,所以對存儲器來說,實際的存儲單元只有2的13次方,即8K個,其地址從0000H-1FFFH,稱為存儲器的物理地址,在本例中,由于存儲器的片選接地,沒有占有CPU的地址線,所以CPU的64K邏輯單元地址平均分配給8K單元的物理存儲器,即每一位物理存儲器單元擁有8個邏輯地址。
比如要訪問物理存儲器的00單元,要求存儲器的地址引腳A0-A12上全為0,本系統(tǒng)中的CPU的地址線A0-A12恰好與存儲器的A0-A12對接,所以只要邏輯地址中的13位為0,就能選中存儲器的物理地址00單元,而CPU的地址線A13,A14,A15懸空,顯然,這三位懸空線的8種不同組合決定了該物理存儲器單元有8個邏輯單元,第一個邏輯單元為0000H,第二個邏輯單元為2000H,第三個邏輯單元為4000H,第四個邏輯單元為6000H,第五個邏輯單元為8000H,第六個邏輯單元為0A000H,第七個邏輯單元為0C000H,第八個邏輯單元為0E000H。下面我們舉例說明本系統(tǒng)中對外部程序存儲器的訪問過程,假定8051的EA引腳接低電平,即8051使用 片外程序存儲器。
下面是這個程序片斷每條指令的意義:
第一條指令對累加器清0,P2口的數(shù)據(jù)選擇開關(guān)倒向右第三條指令將外部程序存儲器0100H單元的內(nèi)容送入累加器A第四條指令將累加器清0第五條指令對寄存器DPTR賦初值2100H第六條指令將外部程序存儲器2100H單元的內(nèi)容送入累加器A請看這段程序片斷的運行過程,假定當(dāng)前PC的內(nèi)容為0050H,并假定外部程序存儲器0100單元的內(nèi)容為23H.
發(fā)控制信號使P0口,P2口的控制端為1,將PC內(nèi)容送內(nèi)部地址總線,低8位地址進入P0口,再經(jīng)數(shù)據(jù)選擇開關(guān)出現(xiàn)在P0口的8條引腳上,高8位地址到達(dá)P2口引腳上.
同時,CPU使ALE引腳為高電平,74373導(dǎo)通,低8位地址出現(xiàn)在74373的輸出端 .待地址穩(wěn)定后,使ALE變?yōu)榈碗娖?74373輸出端與輸入端斷開,即鎖存.
此后,74373的輸出端一直保持低8位地址不變,直到下次ALE引腳出現(xiàn)高 電平為止,CPU使P0口的地址/數(shù)據(jù)全部為1,則上拉場效應(yīng)管導(dǎo)通,下拉場效應(yīng)管截止,這樣,才能讀回外部數(shù)據(jù)總線上的數(shù)據(jù).
否則,若下拉場效應(yīng)管導(dǎo)通,P0口引腳被下拉場效應(yīng)管接地,則從外部數(shù)據(jù)總線上讀回的數(shù)據(jù)永遠(yuǎn)為0,CPU使PSEN引腳為低 電平.取完第一條指令,執(zhí)行第一條指令,結(jié)果為累加器A清0.緊接著取第二條指令,執(zhí)行第二條指令,結(jié)果為給寄存器DPTR賦初值0100H,然后是取第三條指令,執(zhí)行第三條指令下面我們看看第三條指令的執(zhí)行過程,CPU使P0口和P2口的控制端C為1,將DPTR與A之和,0100送內(nèi)部地址總線.
高8位地址01H出現(xiàn)在P0引腳上,低8位地址00H出現(xiàn)在P2口引腳上.
ALE變?yōu)楦唠娖?低8位地址出現(xiàn)在74373的輸出端.
ALE變?yōu)榈碗娖?低8位地址被鎖存,CPU使P0口的地址/數(shù)據(jù)全為1.
PSEN變?yōu)榈碗娖?存儲器送出物理單元0100H的內(nèi)容23H,該數(shù)據(jù)通過P0口進入內(nèi)部數(shù)據(jù)總線,PSEN送1,內(nèi)部數(shù)據(jù)總線上的數(shù)據(jù)總線上的數(shù)據(jù)送入累加器A中.
下一條指令的執(zhí)行結(jié)果為累加器清0,再下一條為寄存器DPTR賦初值2100H,下面我們來看這條指令的執(zhí)行過程.
CPU使P0口和P2口控制端C為1,將DPTR與A之和2100H送內(nèi)部地址總線.
高8位地址21H出現(xiàn)在P2口引腳上,低8位地址00H出現(xiàn)在P0口引腳上.
ALE變?yōu)楦唠娖?低8位地址出現(xiàn)在74373的輸出端,ALE變?yōu)榈碗娖?低8位地址被鎖存.
PSEN變?yōu)榈碗娖?存儲器送出物理單元0100H的內(nèi)容23H,該數(shù)據(jù)通過P0進入內(nèi)部數(shù)據(jù)總線.
PSEN送1,內(nèi)部數(shù)據(jù)總線上的數(shù)據(jù)累加器中.程序片段我們就運行到此從上運行過程我們看出,邏輯地址01OOH和2100H對應(yīng)的是同一物理存儲對單元,關(guān)于多個邏輯地址對應(yīng)一個物理單元的問題我們今后再講,單片程序存儲器的擴展就學(xué)到這里.