1.訪問程序存儲器的控制信號
AT89S51單片機訪問片外擴展的程序存儲器時,所用的控制信號有以下3種。
(1) ALE——用于低8位地址鎖存控制。
(2) PSEN(的反)——片外程序存儲器“讀選通”控制信號。它接外擴EPROM的OE(的反)引腳。
(3) EA(的反)——片內(nèi)、片外程序存儲器訪問的控制信號。當(dāng)EA(的反)=1時,在單片機發(fā)出的地址小于片內(nèi)程序存儲器最大地址時,訪問片內(nèi)程序存儲器;當(dāng)EA(的反)=0時,只訪問片外程序存儲器。
如果指令是從片外EPROM中讀取的,除了ALE用于低8位地址鎖存信號之外,控制信號還有PSEN(的反),PSEN(的反)接外擴EPROM的OE(的反)腳。此外,還要用到PO口和P2口,PO口分時用作低8位地址總線和數(shù)據(jù)總線,P2口用作高8位地址線。
2.操作時序
AT89S51單片機對片外ROM的操作時序分兩種,即執(zhí)行非MOVX指令的時序和執(zhí)行MOVX指令的時序,如下圖所示。
(1)應(yīng)用系統(tǒng)中無片外RAM 硬件系統(tǒng)中無片外RAM(或I/O)時,則不用執(zhí)行MOVX指令。在執(zhí)行非MOVX指令時,操作時序如下圖(a)所示。PO口作為地址/數(shù)據(jù)復(fù)用的雙向總線,用于輸入指令或輸出程序存儲器的低8位地址PCL。P2口專門用于輸出程序存儲器的高8位地址PCH。P2口具有輸出鎖存功能。由于PO口是分時復(fù)用,故首先要用ALE將PO口輸出的低8位地址PCL鎖存在鎖存器中,然后PO口再作為數(shù)據(jù)口。在每個機器周期中,允許地址鎖存兩次有效,ALE在下降沿時,將PO口上的低8位地址PCL鎖存在鎖存器中。同時,PSEN(的反)也是每個機器周期中兩次有效,用于選通片外程序存儲器,將指令讀入片內(nèi)。
系統(tǒng)無片外RAM(或I/O)時,此ALE有效信號以振蕩器頻率的1/6出現(xiàn)在引腳上,它可以用作外部時鐘或定時脈沖信號。
(2)應(yīng)用系統(tǒng)中接有片外RAM 在執(zhí)行訪問片外RAM(或I/O)的MOVX指令時,程序存儲器的操作時序有所變化。其主要原因在于,執(zhí)行MOVX指令時,16位地址應(yīng)轉(zhuǎn)而指向數(shù)據(jù)存儲器,操作時序如下圖(b)所示。在指令輸入以前,P2口輸出的地址PCH、PCL指向程序存儲器;在指令輸入并判定是MOVX指令后,ALE在該機器周期S5狀態(tài)鎖存的是PO口發(fā)出的片外RAM(或I/O)低8位地址。若執(zhí)行的是“MOVX A,@DPTR”或是“MOVX @DPTR,A”指令,則此地址就是DPL(數(shù)據(jù)指針低8位);同時,在P2口上出現(xiàn)的是DPH(數(shù)據(jù)指針的高8位)。若執(zhí)行的是“MOVX A,@R/”或“MOVX @R/,A”指令,則R/的內(nèi)容為低8位地址,而P2口線上將是P2口鎖存器的內(nèi)容。在同一機器周期中將不再出現(xiàn)PSEN有效取指信號,下一個機器周期中ALE的有效鎖存信號也不再出現(xiàn);而當(dāng)RD/WR有效時,PO口將讀/寫數(shù)據(jù)存儲器中的數(shù)據(jù)。
由上圖(b)可以看出:
(1)將ALE用作定時脈沖輸出時,執(zhí)行一次MOVX指令就會丟失一個ALE脈沖。
(2)只有在執(zhí)行MOVX指令時的第二個機器周期中,才對數(shù)據(jù)存儲器(或I/O)進行讀/寫,地址總線才由數(shù)據(jù)存儲器使用。