uc inst03


POLITECHNIKA KRAKOWSKA  INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Ćw. 3. Symulacja działania mikrokontrolerów 8051.
Operacje na stosie.
Opracowanie: mgr inż. Michał Lankosz
1. Wprowadzenie
Celem ćwiczenia jest zapoznanie się z działaniem stosu w mikrokontrolerach rodziny 8051.
2. Niezbędne wiadomości
Architektura i lista rozkazów 8051, w szczególności:
- mapa pamięci wewnętrznej RAM
- organizacja stosu
- rejestr wskaznika stosu
- instrukcje skoku ze śladem
3. Podstawy
Stos jest bardzo przydatnym mechanizmem w systemach mikroprocesorowych. Wykorzystuje się
go do zapamiętywania i odtwarzania danych. Cechą charakterystyczną jest to, że dane odczytywane
mogą być jedynie w odwrotnej kolejności niż zostały one zapisane na stosie (struktura LIFO).
Stos jest adresowany przez 8 bitowy wskaznik stosu SP. Wskazuje on wierzchołek stosu. Stos może
być umiejscowiony w dowolnym obszarze pamięci wewnętrznej RAM. Zawartość rejestru SP jest
przed każdym zapisaniem bajtu na stos zwiększana o 1, a po każdym odczytaniu ze stosu bajtu
zmniejszana o 1.
Stos jest wykorzystywany automatycznie podczas wykonywania instrukcji ACALL, LCALL, RET
(skok do podprogramu i powrót) oraz przy przyjęciu przerwania i zakończeniu obsługi przerwania
instrukcją RETI.
Obsługę stosu w sposób jawny zapewniają instrukcje PUSH i POP. Za pomocą instrukcji PUSH
(z adresowaniem bezpośrednim) można zapisać na stosie zawartość dowolnej wewnętrznej komórki
pamięci danych (również rejestrów specjalnych). Do zdejmowania danych ze stosu używana jest
instrukcja POP.
Przykładowy program operujący bezpośrednio na stosie.
reset:
.
. program główny
.
PUSH ACC zapisanie zawartości akumulatora A na stosie
. instrukcje, które mogą zmienić zawartość akumulatora
POP ACC odtworzenie zawartości akumulatora ze stosu
.
.
AJMP start główna pętla programu
END
1
POLITECHNIKA KRAKOWSKA  INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
Przykład użycia stosu przy wywołaniu procedury:
reset:
.
. program główny
.
ACALL proc wywołanie procedury
.
. dalsza część programu głównego
.
AJMP start główna pętla programu
proc: procedura
.
. instrukcje procedury 'proc'
.
RET zakończenie procedury
END
.
4. Zadanie do wykonania
Należy przeanalizować pracę mikrokontrolera poprzez wykonanie symulacji krokowej instrukcja po
instrukcji na podstawie programów cw3p1, cw3p2 oraz cw3p3.
4.1. Program cw3p1.asm
reset:
MOV A,#'G' ; wpisz do akumulatora kod litery G
PUSH ACC ; odłóż zawartość akumulatora na stos
MOV A,#'U' ; wpisz do akumulatora kod litery U
PUSH ACC ; odłóż zawartość akumulatora na stos
CLR A ; dowolna operacja modyfikująca A
POP ACC ; pobierz wartość ze stosu do A
MOV 30h,A ; zapisz do komórki pamięci akumulator
POP ACC ; pobierz wartość ze stosu do A
MOV 31h,A ; zapisz do komórki pamięci akumulator
SJMP $ ; pozostań tutaj (pętla nieskończona)
END
a) Podczas symulacji zaobserwuj zmiany zachodzące w akumulatorze, rejestrze wskaznika
stosu SP, pamięci IRAM od adresów 08h i 30h
b) Przed użyciem stosu wstaw instrukcję (najlepiej na początku programu tuż po etykiecie
reset), która zmodyfikuje rejestr SP tak, aby wskazywał na adres 3Fh. Zaobserwuj teraz
umiejscowienie stosu.
c) Jaki będzie skutek, jeśli ze stosu będziemy chcieli odczytać więcej danych niż zostało na
nim zapisanych (np. dopisując kolejne instrukcje POP).
2
POLITECHNIKA KRAKOWSKA  INSTYTUT TELEINFORMATYKI
Mikroprocesory i mikrokontrolery
4.2. Program cw3p2.asm
reset:
MOV B,#'G' ; załaduj do rejestru B kod znaku G
PUSH B ; ?
POP ACC ; ?
MOV 30h,A ; zapisz do komórki pamięci akumulator
SJMP $ ; pozostań tutaj
END
a) Podczas symulacji zaobserwuj zmiany zachodzące w rejestrach A, B, SP oraz pamięci
IRAM od adresu 08h i 30h
b) Jaki efekt dają zastosowane w tym programie instrukcje PUSH i POP ?
c) Czy można taką sekwencję operacji zastosować do dowolnych rejestrów np. portu P1?
4.3. Program cw3p3.asm
reset:
MOV DPTR,#outdata
CLR A
loop:
PUSH ACC ; przepisanie zawartości akumulatora na stos
MOVC A,@A+DPTR ; pobranie stałej z pamięci programu
ACALL delay ; wywołanie podprogramu
MOV P2,A
POP ACC ; odtworzenie zawartości akumulatora
INC A
ANL A,#03h
AJMP loop
delay: ; procedura opóznienia
PUSH ACC ; operująca na akumulatorze
MOV A,#100
DJNZ ACC,$
POP ACC
RET
outdata:
DB 11100111b
DB 11000011b
DB 10000001b
DB 00000000b
END
a) Podczas symulacji zaobserwuj zmiany zachodzące w rejestrach A, P2, SP, PC oraz pamięci
IRAM począwszy od adresu 08h.
b) Przeanalizuj, co jest zapisywane na stosie podczas wykonywania instrukcji ACALL.
c) W pętli delay dodaj wewnętrzną pętlę opózniającą, która będzie również wykorzystywała
akumulator jako licznik pętli.
3


Wyszukiwarka

Podobne podstrony:
ex uc prtadrpt1
ex uc subsc1
uc
uc inst04
Hughes, Susanna The Chaste Legacy [UC]
Warsztaty AVR Programowanie uC
Henry Kuttner Exit the Professor UC
Ashe, Aran The Forest Of Bondage [UC]
test UC
anon Devils Advocate [UC]
Clement, Hal Half Life UC
Vale, Rena The Day after Doomsday [UC]
ex uc sndpg2
Holmes UC System
anon The New Story of O [UC]
Gilchrist, Rupert 03 [UC]
uc
ex uc sndpg1
toc and intro UC

więcej podobnych podstron