單片機中程序存儲器與數據存儲器
EEPROM和FLASH基本都是非易失性存儲器。EEPROM應屬于數據存儲器,但是它制造工藝和FLASH更近似。FLASH是用于存儲程序代碼的,有些場(chǎng)合也可能用它來(lái)保存數據,當然前提是該單片機的FLASH工藝是可以自寫(xiě)的(運行中可擦寫(xiě)),但要注意FLASH的擦寫(xiě)次數通常小于一萬(wàn)次,而且通常FLASH只能按塊擦除。EEPROM不能用來(lái)存程序,通常單片機的指令尋址不能到這個(gè)區域。EEPROM的擦寫(xiě)次數應有百萬(wàn)次,而且可以按字節擦寫(xiě)。
2.因為程序存儲器和數據存儲器是獨立編址的,訪(fǎng)問(wèn)的時(shí)候可以采用不同的指令和不同的選通信號來(lái)區分。
第一,單片機采用三總線(xiàn)結構傳遞數據。地址總線(xiàn)、數據總線(xiàn)、控制總線(xiàn)。傳遞數據的過(guò)程是先尋址,再傳遞數據。即先送一個(gè)地址信息(由微處理器向總線(xiàn)寫(xiě)一個(gè)地址信息),由寄存器(也可能是程序存儲器,也可能是數據存儲器)根據這個(gè)地址,把微處理器要讀取的數據寫(xiě)到總線(xiàn)上,微處理器再讀取這個(gè)數據。整個(gè)過(guò)程由控制總線(xiàn)控制。所以每次讀的數據是針對那個(gè)地址對應的寄存器操作的,不會(huì )發(fā)生混亂。寫(xiě)數據時(shí)一樣,先尋址,再寫(xiě)數據,數據就寫(xiě)入剛才尋址時(shí)的地址對應的那個(gè)寄存器里去了。 第二、程序存儲器、數據存儲器有不同的選通信號,在一個(gè)指令周期里,是不同的時(shí)間選通的,所以不會(huì )混亂。 第三。選通的引腳不同。拿片外數據存儲器來(lái)說(shuō),是P3的第6和第7引腳做選通信號,程序存儲器是PSEN做選通信號,他們接在各自器件的選通引腳上,所以不會(huì )混亂。 第四,指令不同。拿匯編指令來(lái)說(shuō)。MOV是程序存儲器傳遞數據用,MOVX是數據存儲器傳遞數據用(對片外而言)。 總之,記住三總線(xiàn)傳遞的方式,先尋址,再傳數,由控制總線(xiàn)控制,這個(gè)模式,你就容易理解這個(gè)了。 單片機的p2和p0分別傳遞地址的高八位和低八位。同時(shí)p0還傳遞數據。在時(shí)序信號的ALE高電平期間,鎖定地址信息。/PSEN是選通程序存儲器的。在/PSEN低電平期間是向程序存儲器傳遞程序代碼,/WR和/RD是選通數據存儲器的,即在/WR和/RD(p3的六腳和七腳)低電平期間把數據傳遞給數據寄存器。而/PSEN和/WR及/RD是在不同時(shí)間變?yōu)榈碗娖降?,沒(méi)有重疊的部分。也就是說(shuō),當/WR及/RD變成低電平時(shí),/PSEN已經(jīng)恢復高電平了,由P0口傳出的數據信息當然只會(huì )傳到數據存儲器里,因為程序存儲器已經(jīng)不再處于選通狀態(tài)了??!從表面看,都是從p0口傳出的,但因為選通器件的時(shí)間不同而不會(huì )發(fā)生混亂。當然我說(shuō)的是片外程序存儲器和數據存儲器的的情況,其實(shí)對片內也一樣,還是三總線(xiàn)的這種控制方式,使它們在不同的時(shí)間被選通,而不至于發(fā)生沖突。 看看單片機的一個(gè)電路圖。你會(huì )發(fā)現p0既跟74LS373連,又跟8155或8255或鍵盤(pán)或數模轉換器等等連。而8155或8255或鍵盤(pán)或數模轉換器等等對單片機而言是當做數據存儲器處理的。74LS373連的多半是程序存儲器。那么p0送出的信號不是兩者都接受了嗎?注意看ALE接74LS373的G接口,鎖存地址用,PSEN有時(shí)用有時(shí)不用。WR和RD接數據存儲器的選通接口。因為WR和RD跟ALE的信號在時(shí)間上沒(méi)有重疊部分,所以p0的信號不會(huì )被程序存儲器和數據存儲器同時(shí)收到。
本文引用地址:http://dyxdggzs.com/article/201611/315859.htm
評論