Politechnika Białostocka
Wydział Elektryczny
Technika Mikroprocesorowa 2
Ćwiczenie numer: 4
Temat: Modółowy system mikroprocesorowy na Z80
Wykonujący ćwiczenie: Wróblewski Łukasz
Niewierowski Paweł
Studia dzienne
Kierunek: Elektronika i Telekomunikacja
Semestr V Grupa laboratoryjna L05
Prowadzący ćwiczenie: dr inż. R. Kociszewski
...........................
OCENA
22.10.2010r.
Data wykonania ćwiczenia
.........................................
Data i podpis prowadzącego
Cel ćwiczenia
Poznanie konstrukcji i funkcjonowania przykładowego systemu
modułowego z Z80.
Poznanie zasad obsługi laboratoryjnego systemu mikroprocesorowego.
Przebieg ćwiczenia
Przed zajęciami powinniśmy zapoznanie się z funkcjami klawiaturowymi systemu PLUM.
Następnie odtworzyśmy program, zrealizowany na poprzednich zajęciach. Należalo go odpowiednio zmodyfikować by zadzialal na modulowym systemie mikroprocesorowym.
CPU "Z80.TBL"
HOF "INT8"
ORG 8000h ; pamiec moze zawierac adres: od 8000 do 8700h
znaki: equ 8060h ;zadeklarowanie zmiennej w 8060h, dopiero np w 60. Program zawiera się w pierwszych np. 48 komorkach pamieci.
tab1: equ 8080h ; zostawienie miejsca na zmienną ‘znaki’
tab2: equ 8100h ;
ld a,1 ;załadowanie do akumulatora 1
ld b,20 ;domyślnie b, jest długością
;np. zmiennej (adresu)
ld hl, znaki ;załadowanie adresu zmiennej ‘znaki’
czysc: ld (hl),a ;petla za pomocą której wypełnimy tablice ciągiem liczb (1;2;3, itd.)
add a,1
inc hl
djnz czysc
ld de,tab1 ;przypisanie do rejestru tab1.
ld hl,znaki ;analogicznie
ld b, 10
inc hl
parz: ;stworzenie oddzielnej tablicy,
;przepisujac liczby parzyste
ld a,(hl) ;przypisanie do a adresu hl
ld (de),a ;analogicznie
inc hl ;podwójna zmiana adresu
inc hl ;przepisujemy co druga liczbę
inc de
djnz parz
ld de,tab2 ;analogicznie, jak powyżej
ld hl,znaki
ld b, 10
nieparz:
ld a,(hl)
ld (de),a
inc hl ;ponownie co 2, jak dla parzystych
inc hl
inc de
djnz nieparz
ld de,tab1 ;
ld hl,znaki
ld b, 10
przepis1: ;przepisywanie tablicy 1.
ld a,(de)
ld (hl),a
inc hl
inc de
djnz przepis1
ld de,tab2
ld b, 10
przepis2: ;przepisywanie tablicy 2.
ld a,(de)
ld (hl),a
inc hl
inc de
djnz przepis2
ret ; właściwe zakończenie programu - gdy są przeznaczone do
uruchamiania jako procedury
end
Już po tak przygotowanym programie należalo go skompilowac, odnależć wygenerowany plik programu *.HEX
Kolejnie załadowaliśmy podany plik do pamięci systemu PLUM, poprzez:
-użycie programu RS_OWL.EXE
Należao wykonać odpowiednie instrukcje:
otworzyć wybrany port (COM1);
ustawić parametry transmisji (przycisk Zmień parametry) na wartości:
com1:, 2400bodów, bit parzystości (E), 7 bitów danych, 1 bit stopu
wybrania na klawiaturze PLUMa polecenie LOAD (klawisz 9);
rozpoczęcia transmisji przyciskiem Wyślij plik programu RS_OWL.
9 - polecenie LOAD do załadowania poprzez łącze szeregowe z komputera
nadrzędnego kodu programu użytkownika.
Na wyświetlaczu pojawia się napis Load, a w trakcie ładowania kodu
programu, z prawej strony wyświetlacza widoczne jest adres
Na wyświetlaczu systemu obserwujemy zmieniające się adresy ładowania kolejnych bajtów kodu programu testowego co świadczy o poprawnym przebiegu ladowania.
Uruchomilismy program, mogismy odczytać czy program poprawnie się wykonal odczyt wyników swej pracy w komórkach pamięci RAM, którą sprawdzamy z pomocą polecenia MEMORY.
Jako efekt naszej pracy mogliśmy zarejestrować co pojawio się na wyswietlaczu urzadzenia.
Program mial za zadanie przetworzyc ciag liczb: 1,2,3,4 itd. Na ciag nieparzyty 1,3,5.. po nim ciag parzysty 2,4,6....Zaczynając od liczb nieparzystych, odpowiednio odczytywaliśmy (zapisując) co drugą zmienną, analogicznie było z liczbami parzystymi. Na końcu przepisaliśmy nasze tablice, pierwszo tablica z liczbami nieparzystymi, po niej z parzystymi.
Już po zaadowaniu naszego programu do systemu mikroprocesorowego Z80, wpelnilismy naszą tablicę ciągiem znakow 1,2,3,4 ... itd.
W komórce pamięci 8100h wpisaliśmy wartość 1. Następnie wciskamy klawisz Enter, do potwierdzania poleceń, także do inkrementacji wybranego adresu.
Następnie zmieniliśmy adres, ustawisliśmy wartość 2
I tak kolejno na następnych liczb:
(...)
Już po wypenieniu takiej tablicy wartościami, możemy uruchomić nasz program (jako procedurę) i zauważyć przypisane wartości do innych komórek w pamięci.
By uruchomić program korzystamy z polecenia: klawisz 8 - polecenie CALL sużace do uruchamiania podprogramów kończących się rozkazem RET
Tzn. Że nasz program wykonal się
Zakończenie programu.
Program się wykona, więc w pamięci będą zapisane odpowiednie wartości. By móc je odczytać posugujemy się poleceniem 0 - polecenie MEMORY slużace do przeglądania i modyfikacji pamięci:
Następnie przyciskamy klawisz enter, do potwierdzenia polecenia.
Następnie wyświetla się nam:
Ponownie wciskając klawisz enter, zwiększamy inkrementację, przechodzimy do następnej komórki
Widzimy wartość większą o 2. Tzn. Że zostala przepisana co druga liczba.
Analogicznie w pozostaych komórkach pamięci (do zamkniecia pętli)
Wartość szestnastkowa co odpowiada liczbie 10.
Po sprawdzeniu naszej tablicy z liczbami parzystymi, wracamy do adresu gdzie powinny sie pojawić nadpisane wartości. Czyli nasz ciąg. Na początku ciąg nieparzyty.
Ciąg powinien zacząć się w komórce pamięci o adresie 8100h.
Jak widzimy program wykonal się poprawnie. Po ciągu liczb nieparzystych, kolejno zostal zapisany ciag z liczbami nieparzytymi.
Przeglądając komórki pamięci możemy również sprawdzić rejestry,
W tym celu przyciskamy klawisz A - polecenie REGISTERS slużace do podglądu i modyfikacji zestawu rejestrów programu.
Na wyświetlaczu widoczne są: po lewej symbole par rejestrów, a po prawej
ich 16-bitowe wartości. Możemy je modyfikować.
PC - licznik rozkazów
SP - wskaźnik stosu
AF - akumulator A i rejestr flag F
bC - para rejestrów BC
dE - para rejestrów DE
hL - para rejestrów HL
A.F. - alternatywne: akumulator A i rejestr flag F
b.C. - alternatywna para rejestrów BC- jak widać nie byly uzywane w programie.
d.E. - alternatywna para rejestrów DE
Wnioski
Zajęcia pozwoliły na bliższe zapoznanie się z językiem niskiego poziomu jakim jest asembler. Tym razem mieliśmy przyjemność pracowania również na modułowym systemie mikroprocesorowym na Z80. Po lekkiej modyfikacji programu, mogliśmy go zrealizować na tym systemie. Przeglądając pamięć RAM wiemy, że program dzialal poprawnie (w rzeczywistosci). W latwy sposob zapoznaliśmy się z obslugą tego urządzenia. Co jest niezbędne do tworzenia, bardziej zlozonych programow, zagadnień realizowanych na kolejnych zajęciach.