24 4. Jak odczytywać i zapisywać dane
Wewnętrzna lub zewnętrzna pamięć programu zawiera oprócz kodu programu także stałe wykorzystywane w programie. Ze względu na swój charakter, pamięć ROM (EPROM, EEPROM, Flash ROM), możliwy jest jedynie odczyt danych.
Wyboru typu pamięci, wewnętrznej lub zewnętrznej, mikrokontroler dokonuje testując linię EA (External Access enable) w trakcie zerowania:
• EA = 0, zewnętrzna pamięć programu,
• EA= 1, wewnętrzna pamięć programu
Stan linii EA nie ma znaczenia jeśli licznik rozkazów PC zawiera adres większy niż adres wewnętrznej pamięci programu. Przykładowo jeśli mikrokontroler 8051 zawiera 4KB-ową wewnętrzną pamięć programu to dla stanu licznika rozkazów PC:
• PC = OOOOh .. OFFFh i EA = 0 mikrokontroler wykonuje program z
zewnętrznej pamięci programu,
• PC OOOOh .. OFFFh i EA = 1 - mikrokontroler wykonuje program z
wewnętrznej pamięci programu,
• PC = lOOOh OFFFFh - mikrokontroler wykonuje program z
zewnętrznej pamięci programu,
niezależnie od stanu linii EA
Pamięć program (wewnętrzna lub zewnętrzna) adresowana jest na trzy różne sposoby:
la. przez drugi lub przez trzeci bajt wykonywanej instrukcji. Sytuacja taka występuje przy pobieraniu 8-bitowych stałych z pamięci programu, np. przy inicjalizacji wartości początkowych rejestrów, komórek pamięci, np:
instrukcje: |
zapis binarny instrukcji: |
wykonywane operacje |
MOV A,#3Ch |
0111 OlOOb 0011 llOOb |
A <— 3Ch |
MOV R0,#6 |
0111 lOOOb 0000 011 Ob |
R0<-6 |
MOV 35,#4Bh |
0111 OlOlb 0010 001 lb 0100 1011 b |
(35) 4Bh |
Dwie pierwsze instrukcje są instrukcjami 2-bajtowymi. Pierwszy bajt zawiera kod wykonywanej instrukcji i informację, adres docelowego rejestru. Drugi bajt zawiera wartość stałej, która wpisywana jest do akumulatora A (MOV A,#3Ch) i rejestru RO (MOV R0,#6).
W trzeciej instrukcji (MOV 35,#4Bh) pierwszy bajt zawiera kod wykonywanej instrukcji, drugi adres komórki wewnętrznej pamięci RAM (35) zamienianej na liczbę szesnastkową (23h), a trzeci wartość stałej pobieranej z pamięci programu (4Bh).
W powyższej tabeli przedstawiono również zapis binarny wykonywanych instrukcji (zrozumiały dla mikrokontrolera) oraz wykonywane operacje. Strzałka <- oznacza kierunek przepływu danych, a wartość ujęta w okrągłe nawiasy (35) jest adresem komórki pamięci, w tym przypadku wewnętrznej pamięci RAM. Należy zwrócić uwagę na sposób zapisu stałych, które poprzedzone są zawsze znakiem #. Pominięcie tego znaku powoduje, że odwołujemy się do komórki pamięci RAM lub rejestrów specjalnych SFR. Ten sposób adresowania nazywany jest adresowaniem natychmiastowym.
Ib. przez drugi i trzeci bajt wykonywanej instrukcji. Sytuacja taka występuje przy inicjalizacji wartości początkowej 16-bitowego wskaźnikowego rejestru danych DPTR:
instrukcja: |
zapis binarny instrukcji: |
wykonywana operacja |
MOV DPTR,#2E59h |
1(X)1 OOOOb OOlOlllOb 0101 lOOlb |
DPTR 2E59h |
Przedstawiona 3-bajtowa instrukcja jest jedyną instrukcją, w której wpisywana jest do rejestru DPTR stała 16-bitowa. Pierwszy bajt zawiera kod operacji, bajt drugi i trzeci wpisywaną stałą. Ten sposób adresowania także nazywany jest adresowaniem natychmiastowym.
2. sumą zawartości 8-bitowego akumulatora A i 16-bitowego wskaźnikowego rejestru danych DPTR. Liczba zawarta w akumulatorze A traktowana jest jako liczba całkowita bez znaku, co oznacza, że jej zakres zmienności ograniczony jest do przedziału 0 .. 255.