30 4. Jak odczytywać i zapisywać dane ...
Odczytywanie danych zapisanych w pamięci programu ROM oraz zapisywanie i odczytywanie danych z zewnętrznej pamięci danych RAM wiąże się z pewnymi ograniczeniami:
• zawsze jednym z argumentów wykonywanych instrukcji jest akumulator A, co powoduje, że akumulator A staje się jednym z najbardziej zapracowanych rejestrów mikrokontrolera,
• do odczytu danych z pamięci programu ROM mamy tylko 2 instrukcje; w ich mnemoniku występuje zawsze litera C (MOVC), będąca pierwszą literą symbolu Codę oznaczającego pamięć programu (Codę memory),
• do zapisu i odczytu danych do/z zewnętrznej pamięci danych RAM dostępne są po dwie instrukcje, których mnemoniki zawierają zawsze literę X (MOVX); x pochodzi od symbolicznej nazwy tej pamięci XData (eXternal Data memory),
• nie należy zapominać, że przy adresowaniu zewnętrznej pamięci danych RAM za pośrednictwem rejestru RO lub R1 brakującą część adresu należy wpisać do portu P2 (8 bardziej znaczących bitów adresu).
Dążąc do uzyskania dużej szybkości działania mikrokontrolerów rodziny '51 należy unikać przechowywania często używanych danych w zewnętrznej pamięci RAM mikrokontrolera. Do tego powinna wystarczyć wewnętrzna pamięć RAM.
jeśli mikrokontroler rodziny '51 ma współpracować z zewnętrznymi pamięciami, np. kodu programu (ROM, EPROM lub EEPROM, np. 2764) i danych (RAM, np. 6264), to oprócz samych pamięci konieczny jest jeszcze 8-bitowy bufor (np. 74HCT573). Zadaniem tego bufora jest zapamiętanie 8-mniej znaczących bitów adresu, co jest wynikiem multipleksowania magistrali danych i magistrali adresowej (ośmiu mniej znaczących linii tej magistrali). Rolę tej magistrali pełni port PO. Pozostałe bity adresu, 8-bąrdziej znaczących bitów przesyłane są za pośrednictwem portu P2. Bardziej szczegółowo przedstawiono ten problem w rozdziale 5 i 7.
Sposób dołączenia zewnętrznych pamięci programu i danych JO mikrokontrolera przedstawiono na rysunku 4-5. Mikrokontroler generuj* następujące sygnały sterujące przepływem adresów lub danych w zależności o<
• ALE (Address Latch Enable) - przepisanie 8-mniej znaczących
bitów adresu z portu PO do pomocniczego 8-bitowego bufora,
• I^SEN (Program Storę ENable) - uaktywnienie zewnętrznej pamięci
programu, pobranie kodu instrukcji,
• RD (ReaD) - uaktywnienie zewnętrznej pamięci danych RAM,
odczyt danej z pamięci,
• WR (WRite) - uaktywnienie zewnętrznej pamięci danych RAM,
wpis danej do pamięci.
Port PO:
P0.7/AD7.. PO.O/ADOfy
8-bitowy bufor np. 74573
dane
zewnętrzna pamięć programu
ALE
Port P2:
P2.7/A15 .. P2.0/A8
PSEN
Mikrokontroler ł51
EA
Port P3: P3.6/WR P3.7/RD
_
adres
D7.. DO
A7.. AO A12.. A8
WE
OE
zewnętrzna pamięć danych RAM
Rys. 4-5 Połączenie mikrokontrolera z zewnętrznymi pamięciami.
Przy zewnętrznej pamięci programu linia EA musi mieć poziom zera logicznego, aby po sprzętowym zerowaniu procesora, kody rozkazów' były pobierane z pamięci zewnętrznej, a nie wewnętrznej.