對(duì)單片機(jī)有效地址的訪問(wèn)和禁止地址寫(xiě)入的后果
下面我們看看對(duì)有效地址的訪問(wèn)和對(duì)禁止地址寫(xiě)入時(shí)造成的后果
第一段程序的意圖是將兩個(gè)數(shù)據(jù)31H和11H分別存入外部數(shù)據(jù)存儲(chǔ)器的兩個(gè)單元中,但程序中卻使用了第一片存儲(chǔ)器物理空間00單元所對(duì)應(yīng)的兩個(gè)邏輯單元,其結(jié) 果是第二個(gè)數(shù)據(jù)11H覆蓋了第一片存儲(chǔ)器物理地址00單元中的第一個(gè)數(shù)據(jù)31H,這段程序說(shuō)明的問(wèn)題是外部存儲(chǔ)器的一個(gè)物理單元對(duì)應(yīng)兩個(gè)邏輯地址,但它仍舊只是一個(gè)存儲(chǔ)器,不能當(dāng)兩個(gè)存儲(chǔ)器使用。
第二段程序的意圖是將數(shù)據(jù)31H存入第二片外部數(shù)據(jù)存儲(chǔ)器物理單元00中,然后再分別使用該物理單元所對(duì)應(yīng)的兩個(gè)邏輯地址從該單元中取數(shù)據(jù),其效 果一樣,說(shuō)明對(duì)某一物理單元訪問(wèn)時(shí),使用該單元對(duì)應(yīng)的任一個(gè)邏輯地址都可以。
第三段程序的意圖是向禁止單元0000H寫(xiě)入一個(gè)數(shù)12H,其后果是將有效邏輯地址8000H和2000H中的數(shù)據(jù)覆蓋了,至使下次程序從8000H和2000H中取數(shù)據(jù)時(shí),取得數(shù)據(jù)都為12H而不是原來(lái)存入該兩單元中的正確數(shù)據(jù)。
下面是第一段程序的運(yùn)行過(guò)程:
第一條指令置累加器A的內(nèi)容為31H
第二條指令置DPTR的內(nèi)容為8000H
第三條指令將累加器A的內(nèi)容31H存入外部數(shù)據(jù)存儲(chǔ)器8000H單元
(注意:今后在未作說(shuō)明的情況下的地址都是指CPU的邏輯地址)
其結(jié)果是將31H存入了第一片存儲(chǔ)器的物理單元00中
第四條指令是將數(shù)據(jù)11H送入累加器A中
第五條指令是將0C000H送入DPRT中
第六條指令是將累加器A中的內(nèi)容11H存放外部數(shù)據(jù)存儲(chǔ)器0C000H中
其實(shí)質(zhì)是存入了第一片存儲(chǔ)器的物理單元00中,將上次存入該物理單元中的數(shù)據(jù)31H覆蓋掉了,從這段程序的運(yùn)行我們可以看出,企圖將一個(gè)物理存儲(chǔ)單元的兩個(gè)邏輯地址當(dāng)兩個(gè)存儲(chǔ)器來(lái)使用是錯(cuò)誤的。
下面我們來(lái)看第二段程序的運(yùn)行:
第一條指令將數(shù)據(jù)31H送入累加器A
第二條指令將2000H送入DPTR中
第三條指令將累加器中的數(shù)據(jù)31H存入外部數(shù)據(jù)存儲(chǔ)器2000H單元中,其實(shí)質(zhì)是存入第二片存儲(chǔ)器的物理單元00中
第四條指令將外部數(shù)據(jù)存儲(chǔ)器2000H單元中的數(shù)據(jù)取入累加器,其實(shí)質(zhì)是將第二片數(shù)據(jù)存儲(chǔ)器物理單元00中的數(shù)據(jù)取回累加器中
第五條指令是將數(shù)據(jù)6000H送入DPTR中
第六條指令將外部數(shù)據(jù)存儲(chǔ)器6000H單元中的數(shù)據(jù)取回累加器
可以看出其實(shí)質(zhì)也是從第二片存儲(chǔ)器物理單元00中取數(shù)據(jù),其結(jié)果當(dāng)然與上次從2000H單元中取數(shù)一樣,可見(jiàn),使用同一物理單元的不同邏輯地址訪問(wèn)存儲(chǔ)器時(shí),效果相同。
下面我們來(lái)看第三段程序的運(yùn)行過(guò)程:
第一條指令將數(shù)據(jù)000H送入DPTR
第二條指令將數(shù)據(jù)12H送入累加器A中
第三條指令將累加器中的數(shù)據(jù)12H存入外部數(shù)據(jù)存儲(chǔ)器0000H單元中
由于CPU發(fā)地址0000H使P2.5和P2.7同時(shí)為0,至使兩片存儲(chǔ)器的片選信號(hào)都有效,兩片存儲(chǔ)器的地址線A0-A12為低電平,所以在CPU發(fā)寫(xiě)信號(hào)后,其結(jié) 果當(dāng)然與上次從2000H單元中取數(shù)一樣。
可見(jiàn),使用同一物理單元的不同邏輯地址訪問(wèn)存儲(chǔ)器時(shí),效果相同,第二片存儲(chǔ)器物理單元00的有效邏輯地址為2000H和6000H,可見(jiàn),這條對(duì)禁止地址0000H的寫(xiě)入指令破壞了上述有效邏輯地址原有內(nèi)容,所以我們?cè)诔绦蛑星f(wàn)不能使用禁止地址和無(wú)效地址。