1. Tryby adresowania:
- Omów tryb adresowania natychmiastowego dla procesora 6800/68HC05/8051, podaj przykład;
8051:
Adresowanie rejestrowe – operandem instrukcji jest jeden z rejestrów R0..R7 z aktywnego banku rejestrów, akumulator, rejestr B lub wskaźnik danych DPTR.
Przykład: MOV A,R0 ; przeniesienie zawartości rejestru R0 do akumulatora
Adresowanie bezpośrednie – operand jest jawnie podanym 8-bitowym adresem rejestru SFR, rejestru dolnego obszaru RAM lub bitu adresowalnego bezpośrednio.
Przykład: MOV A,032H ; przeniesienie zawartości komórki o adresie 032H do akumulatora
Adresowanie natychmiastowe – operand jest stałą (8 lub 16 bit.) umieszczoną w kodzie programu (pamięć ROM).
Przykład: ADD A,#32H ; dodanie do akumulatora liczby 32H
Adresowanie pośrednie – określenie adresu za pomocą zawartości R0 lub R1 (z aktywnego banku rejestrów) – odwołanie do przestrzeni 256 bajtów.
Przykład: MOV A,@R0 ; przeniesienie zawartości komórki o adresie zawartym w rejestrze R0 do akumulatora
Adresowanie sumą zawartości rejestru bazowego i indeksowego – służy do kopiowania bajtu z pamięci programu.
Przykład: MOVC A,@A+DPTR ; przeniesienie zawartości komórki pamięci programu o adresie zawartość A + DPTR do akumulatora
Przykład: MOVC A,@A+PC ; przeniesienie zawartości komórki pamięci programu o adresie zawartość A + PC do akumulatora
Motorola 86HC05:
IMM, immediate (natychmiastowe) – argument bezpośrednio w programie.
Przykład: LDA #$55 ; załadowanie liczby 55H do akumulatora
INH inherent (rejestrowe) – bez argumentów (dotyczy rejestrów CPU), źródło i przeznaczenie określone przez sam kod rozkazu.
Przykład: INCA ; zwiększenie akumulatora o 1
EXT extended (rozszerzone) – 16-bitowy adres argumentu.
Przykład: LDA $3FF ; załadowanie wartości komórki o adresie 03FFH do akumulatora
DIR direct page (bezpośrednie) – 8-bitowy adres argumentu.
Przykład: LDA $FF ; załadowanie wartości komórki o adresie 00FFH do akumulatora
IX IX1 IX2 indexed (0,1,2-byte offset) (indeksowe, z 0-, 1-, lub 2-bajtowym offset'em) – X jako wskaźnik argumentu.
Przykład: LDA 0,X ; załadowanie wartości komórki o adresie będącym zawartością X do akumulatora
Przykład: LDA 2,X ; załadowanie wartości komórki o adresie będącym zawartością X zwiększonym o 2 do akumulatora
Przykład: LDA $3E0,X ; załadowanie wartości komórki o adresie będącym zawartością X zwiększonym o 03E0H do akumulatora
REL relative (względne) – adres wynikowy liczony względem PC, 8-bitowy offset ze znakiem, używany tylko w instrukcjach typu branch.
Przykład: BRA $7F ; skok do instrukcji o adresie PC+2+$7F
1)a. omów adresowanie pośrednie w zewnętrznej pamięci danych dla Intel 8051, rejestry robocze, wskaźniki, ile bitów, podaj przykład.
Przykład adresowania zewnętrznego pośredniego:
MOVX @R2, A
Ta forma adresowania jest używana wyłącznie w małych programach, które wymagają niewiele zewnętrznej pamięci. Rozkaz powyższy skopiuje zawartość akumulatora do miejsca wskazywanego przez rejestr R2. Ponieważ wszystkie rejestry oprócz DPTR są ośmiobitowe, zatem polecenie to potrafi zaadresować wyłącznie 256 bajtów pamięci zewnętrznej.
2. Inter 8051 - omów organizację pamięci danych (budowa, podział wewnętrzny na użytkową i specjalną, podać że ma 128 bajtów)
Mikrokontroler 8051 ma dwie odrębne przestrzenie adresowe pamięci: 64kB pamięci programu i 64kB pamięci danych. Na wewnętrzną pamięć danych składają się dwa bloki: 128 bajtów ciągłego obszaru pamięci RAM oraz obszar 128 bajtów niespójnego bloku rejestrów specjalnych (SFR) mikrokontrolera. W wewnętrznej pamięci danych umieszczany jest stos programu. Może on być umieszczony w dowolnym miejscu przez zapis odpowiedniego adresu do rejestru SP będącego wskaźnikiem stosu, jednak po wyzerowaniu mikrokontrolera sygnałem RST wskaźnik stosu przyjmuje wartość 7. SP należy do bloku rejestrów specjalnych, a jego zawartość wskazuje na ostatnie zajęte słowo stosu. Wskaźnik stosu jest inkrementowany przed każdym zapisem na stos i dekrementowany po każdym odczycie. Oprócz pamięci wewnętrznej danych możliwe jest dołączenie do mikrokontrolera zewnętrznej pamięci danych o pojemności do 64kB. Ponieważ mikrokontroler nie posiada osobnych rozkazów do dostępu do urządzeń wejścia-wyjścia, to w obszarze adresowym
64kB zewnętrznej pamięci danych mogą być również umieszczane rejestry dołączanych do systemu urządzeń we/wy.
3. Organizacja pamięci programów i8051 (ciągły obszar 64 KB, zew. pamięć jest uzupełnieniem).
Standardowy mikrokontroler 8051 posiada 4KB pamięci programu typu ROM programowane maską.
Pamięć programu przechowuje kody operacji przeznaczonych do wykonania przez
mikroprocesor, może także służyć do przechowywania stałych używanych w programie.
Pamięć programu adresowana jest przez 16-bitowy licznik rozkazów (PC, ang. Program Counter). Mikrokontroler 8051 może także korzystać z zewnętrznej pamięci programu o pojemności do 64KB.
Jeśli pojemność wewnętrznej pamięci programu jest niewystarczająca, część programu może być umieszczona w pamięci zewnętrznej. Wówczas dopóki wartość licznika rozkazów nie przekracza rozmiaru wewnętrznej pamięci programu, rozkazy pobierane są z pamięci wewnętrznej.
PC zawiera adres aktualnego rozkazu przeznaczonego do wykonania. Rozkaz ten jest pobierany z pamięci do rejestru rozkazów (rejestr ten nie jest dostępny programowo). Na podstawie zawartości rejestru rozkazów, dekoder rozkazów steruje wyborem źródła argumentu, miejsca umieszczenia wyniku, funkcjami arytmometru itp. - w ten sposób mikroprocesor wykonuje zadaną operację.
Jeżeli nie jest wykonywany rozkaz skoku, to zawartość licznika rozkazów jest inkrementowana po odczycie każdego bajtu z pamięci programu.
4. Budowa i zastosowanie magistrali adresowej Motoroli 6800, Intelu 8051, danych sterujących.
8051:
Magistrala adresowa:
Na 16-bitowej magistrali adresowej procesor wystawia adresy komórek pamięci programu z której
pobiera rozkazy, a także adresy rejestrów układów peryferyjnych. Magistrala adresowa jest
jednokierunkowa, adres jest wystawiany zawsze przez procesor. Jest to wspólna magistrala dla
wszystkich zewnętrznych przestrzeni adresowych.
Magistrala danych:
8-bitowa magistrala danych jest dwukierunkowa. Przy operacji odczytu dane są transmitowane do
procesora, przy zapisie – z procesora. Jest to również wspólna magistrala dla wszystkich
zewnętrznych układów tworzących system mikrokomputerowy.
Magistrala sterująca:
Magistrala ta składa się z kilku sygnałów, które określają kierunek transmisji danych, wybierają
przestrzeń adresową oraz synchronizują pracę układów pamięciowych i peryferyjnych. Do
magistrali tej zaliczyć można także sygnały przerwań. W bardziej rozbudowanych systemach w
skład magistrali sterującej wchodzą także dodatkowe sygnały sterujące pracą procesora.
5. Budowa układu czasowo-licznikowego Intel 8051, Motorola 68HC05.
Intel 8051: Układ czasowo-licznikowy mikrokomputera 8051 zawiera dwa 16-bitowe liczniki T0 i T1. Licznik T0 składa się z dwóch rejestrów TH0 i TL0, licznik T1 składa się z dwóch rejestrów TH1 i TL1. Mogą one zliczać impulsy zewnętrzne, doprowadzone do wejść, odpowiednio, T0 lub Tl,
spełniając w ten sposób funkcję licznika. Mogą też zliczać wewnętrzne impulsy zegarowe, w celu
odmierzania opóźnień czy generowania przerwań zegarowych o żądanej częstotliwości. W tym przypadku spełniają funkcję czasomierza. Poza tym każdy z nich może pracować w jednym z czterech indywidualnie ustawionych trybów.
Motorola 68HC05 posiada jeden licznik 16-bitowy, w układzie timer'a.
6. Wymienić i omówić przeznaczenie rejestrów wewnętrznych 6800/68HC05/8051.
8051:
Cztery przełączane banki rejestrów roboczych (4 x R0...R7)
Rejestry te mają oznaczenia R0 do R7 i mogą być wykorzystywane do przechowywania danych
Wyjątek stanowią rejestry R0 i R1 każdego bloku, które mogą być wykorzystane do indeksowego adresowania wewnętrznej i zewnętrznej pamięci danych.
Akumulator (A) – miejsce przeznaczenia wyników wielu instrukcji. Jest również wykorzystywany do adresacji indeksowej jako offset dla rejestru DPTR bądź PC. Ponad połowa z 255 instrukcji używa akumulatora w jakiś sposób. Jest to rejestr 8-bitowy.
Rejestry Rn – osiem rejestrów ogólnego przeznaczenia, od R0 do R7. Zwykle wykorzystywane do tymczasowego przechowywania danych, umożliwiają łatwą obsługę większej ilości 'zmiennych'. R0 i R1 służą również do adresowania pośredniego. Są to rejestry 8-bitowe.
Rejestr B – rejestr pomocniczy, wykorzystywany do przechowywania wyników operacji MUL (starszy bajt) i DIV (reszta). Może również być wykorzystywany jak 'dziewiąty' rejestr Rn. Jest to rejestr 8-bitowy.
Wskaźnik danych (DPTR) – służy do wskazywania danych w pamięci zewnętrznej bądź pamięci programu. Może również być wykorzystywany do innych celów, zupełnie nie związanych z adresacją. Jest to jedyny dostępny użytkownikowi rejestr 16-bitowy.
Licznik rozkazów (PC) – rejestr mówiący procesorowi, którą instrukcję ma wykonać. Po resecie zawsze jest równy 0. Po wykonaniu instrukcji jest inkrementowany, ale nie zawsze o 1 – równie dobrze może być inkrementowany o 2 bądź 3, w zależności od rozkazu. Nie ma bezpośredniego sposobu na określenie obecnej wartości PC, a zapisywanie wartości odbywa się za pomocą instrukcji skoku, bądź przerwań. Jest to rejestr 16-bitowy.
Wskaźnik stosu (SP) – wskazuje obecny adres wierzchołka stosu. Kiedy jakaś wartość jest kładziona na stos, inkrementujemy wartość SP i zapisujemy wartość pod tym adresem. Kiedy wartość jest zdejmowana ze stosu, odczytujemy wartość spod adresu SP, a potem dekrementujemy SP. Kolejność tych operacji jest istotna. SP jest wykorzystywany do zapisywania adresu powrotnego podprogramów. Jest to rejestr 8-bitowy.
Motorola 68HC05
Akumulator (A) – jedyny rejestr, który może zawierać wynik operacji arytmetyczno-logicznych. Jest to rejestr 8-bitowy.
Rejestr indeksowy (X) – służy do adresowania indeksowego. Jest to rejestr 8-bitowy.
Wskaźnik stosu (SP) - wskazuje obecny adres wierzchołka stosu. Stos jest 64-bajtowy, od 00FFH do 00C0H. Kiedy jakaś wartość jest kładziona na stos, zapisujemy wartość pod tym adresem i dekrementujemy wartość SP. Kiedy wartość jest zdejmowana ze stosu, inkrementujemy SP, a potem odczytujemy wartość spod adresu SP. Kolejność tych operacji jest istotna. SP jest wykorzystywany do zapisywania adresu powrotnego podprogramów. Wywołania podprogramów zapisują dwubajtowy adres powrotny na stosie. Reset bądź instrukcja RSP ustawia SP na 00FFH. Jest to rejestr 16-bitowy, ale dziesięć najstarszych bitów jest na stałe ustawione jako 0000000011.
Licznik rozkazów (PC) - rejestr mówiący procesorowi, którą instrukcję ma wykonać. Po resecie zawsze jest równy 0. Po wykonaniu instrukcji jest inkrementowany, ale nie zawsze o 1 – równie dobrze może być inkrementowany o 2 bądź 3, w zależności od rozkazu. Nie ma bezpośredniego sposobu na określenie obecnej wartości PC, a zapisywanie wartości odbywa się za pomocą instrukcji skoku, bądź przerwań. Jest to rejestr 16-bitowy.
Rejestr kodu stanu (CCR) – rejestr 8-bitowy, ale tylko 5 jest używanych. Od najmłodszego do najstarszego zawiera flagi: C (przeniesienia), Z (zera), N (ujemności), I (przepełnienia), H (pół-przeniesienia).
PROGRAM:
- W akumulatorze A znajduje się liczba 8-bitowa, pomnóż ją przez 4 i dodaj 1. Wynik zapisz w B.
ADD A,# 0100 1001B;
MOV B,#4;
MUL AB;
INC A;
MOV B,A;
- W dwóch komórkach pamięci o adresach 1001 i 1002 znajdują się liczby 8-bitowe. Zapisz do akumulatora A większą z nich (na 5 rozkazach).
MOV 9h, #1
MOV 10h, #10
MOV A,9h;
MOV B,10h;
CJNE A, B, W1
W1:
JC W2 ;JEŚLI A WIĘKSZE OD B
JMP $
W2: MOV A,B ;JEŚLI A MNIEJSZE OD B
- Przy sumowaniu liczb BCD, musimy użyć operacje DA A (decimal adjust accumulator) po operacji dodania.
MOV R0,#014h
MOV R1,#028h
MOV A,R0
ADD A,R1
DA A
;Wynikiem będzie 042H.
Nie ma operacji dostosowania po odejmowaniu, a więc trzeba użyć dopełnienia do 10 dla liczby odejmowanej, dodać, a następnie zastosować DA A. Dopełnienie do 10 robi się poprzez dodanie 1 do dopełnienia do 9. Dopełnienie do 9 robi się poprze odjęcie od 99H dowolnej liczby dwucyfrowej BCD.
MOV R0,#028h
MOV R1,#014h
MOV A,#099h
SUBB A,R1 ; dopełnienie do 9
INC A ; dopełnienie do 10
ADD A,R0
DA A
;Wynikiem będzie 014H.
Motorola 68HC05
Tak jak wyżej, ale używamy DAA (bez spacji).