Politechnika Białostocka
Wydział Elektryczny
Sprawozdanie z zajęć laboratoryjnych
Technika Mikroprocesorowa 2
Ćwiczenie numer: 6
Temat: System przerwań mikroprocesora Z80
Kod przedmiotu TS1A520312
Skład grupy laboratoryjnej:
1. Ossowski Piotr
2. Romańczuk Paweł
Studia: dzienne
Kierunek: Elektronika i Telekomunikacja
Specjalność: Aparatura Elektroniczna - Telekomunikacja Bezprzewodowa
Semestr V Grupa laboratoryjna L02
Prowadzący ćwiczenie: dr inż. Rafał Kociszewski
...........................
OCENA
7.12.2009
Data wykonania ćwiczenia
.............................................
Data i podpis prowadzącego
1. Cel i zakres ćwiczenia
Celem ćwiczenia było nabycie umiejętności programowania prostych systemów obsługi przerwań.
2. Opis stanowiska badawczego
Stanowisko laboratoryjne składało się z:
- komputera klasy Pentium z systemem operacyjnym Windows;
- programów narzędziowych ( program metaasemblera C.32.EXE oraz symulator ekranowy SYMULATOR.EXE).
- modułowego systemu z mikroprocesorem Z80
3. Przebieg ćwiczenia
Pierwszym etapem wykonania tego ćwiczenia było zapoznanie się z budową i działaniem przykładowego programu
‘CWICZINT.ASM’ wykorzystującego przerwania wektorowe od wszystkich liczników układu Z80CTC.
Po przeanalizowaniu i zidentyfikowaniu wszystkich rozkazów użytych w tym programie przystąpiliśmy do modyfikacji tego programu.
W dalszej części ćwiczenia naszym zadaniem było napisanie programu, który wykorzystując przerwania o częstotliwości 1..2Hz będzie generował na linijce diód LED pod wyświetlaczem podany niżej wzór:
Rys. 1. Wzór przedstawiający kolejność zapalania się diod.
Poniżej zamieszczę zmodyfikowany program ‘CWICZINT.ASM’ z opisem poszczególnych rozkazów:
cpu "z80.tbl" ; wskazuje plik zawierający opis listy rozkazów wybranego procesora;
hof "int8" ; określa format pliku wyjściowego .HEX;
incl "system.inc"
org 8000h
; porty ukladu CTC na plycie CPU (zdefiniowane w pliku SYSTEM.INC):
;ctc1 equ 74h
;ctc2 equ 75h
;ctc3 equ 76h
;ctc4 equ 77h
; port LED'ow na plycie PKW
;ledy equ 0c1h
ld hl,tab ; przesłanie do rejestru HL zawartości tablicy kolejnych wzorów wyświetlacza;
ld b,13 ; określenie licznika pętli;
begin: im 2 ; wybór 2 trybu obsługi przerwań maskowalnych;
ld a,81h
ld i,a ; wektor przerwań, starszy bajt tablicy przerwań;
ld a,00h
out (ctc1),a ; wektor przerwań, młodszy bajt;
ld a,0b7h ; słowo sterujące, tryb czasowy;
out (ctc1),a ; inicjalizacja CTC1 jako generatora przerwań systemowych;
ld a,0f7h ; słowo sterujące, tryb licznikowy;
out (ctc2),a
ld a,00h ;dzieli przez 256
out (ctc1),a ; CTC1 / 256 - czas przerwania 26ms;
ld a,40
out (ctc2),a ; CTC2 co jedną sekundę;
ei ; zezwolenie na przerwania INT;
label1:
nop ; pusta instrukcja mająca za zadanie wywołać następne;
jr label1
; O B S L U G I P R Z E R W A N
int0:
ei ; odblokowanie przerwań;
reti ; powrót z procedury obsługi przerwań maskowalnych;
int2:
ei ; odblokowanie przerwań
reti ; powrót z procedury obsługi przerwań maskowalnych;
ld hl, tab ; przesłanie do rejestru HL zawartości tablicy kolejnych wzorów wyświetlacza;
ld b,13 ; określenie licznika pętli;
int1: push af ;odłożenie zawartości akumulatora na stos
ld a,(hl) ; zapis do akumulatora zawartości komórki pamięci z pierwszym
elementem tablicy zawierającej wzory wyświetlacza;
out (ledy),a ; przesłanie zawartości akumulatora na wyjście tzn. na diody;
inc hl ; inkrementacja, zwiększenie zawartości rejestru HL o 1
(przeskok do następnej komórki pamięci);
dec b ; dekrementacja, zmniejszenie zawartości rejestru B o 1;
jp nz,next
next: pop af
ei
reti
org 8100h
tabint: dwl int0 ; tablica adresów obsługi przerwań;
dwl int1
dwl int2
org 8200h
tab: dfb 03h, 06h, 0ch, 18h, 30h, 60h, 0c0h, 60h, 30h, 18h, 0ch, 06h, 03h
; tablica kolejnych wzorów wyświetlacza;
end
Po kompilacji programu na początku zresetowaliśmy µp system (poprzez wciśnięcie i krótkie przytrzymanie przycisku po prawej stronie modułu ) następnie wcisnęliśmy klawisz nr 9 w celu zapoczątkowania ładowania programu
(na wyświetlaczu µp pojawił się napis LOAD), przy użyciu programu RS_OWL v1.7 przesyłaliśmy wykonany program w pliku HEX, następnie wcisnęliśmy klawisz nr 8 i zadeklarowaliśmy na klawiaturze µp systemu adres komórki od której rozpoczynał się kod naszego programu (w tym przypadku komórka o adresie 8000H) nasz wybór potwierdziliśmy klawiszem enter. Po wciśnięciu klawisza enter diody LED pod wyświetlaczem zaczęły migać w taki sam sposób jaki przedstawiony jest na rysunku 1 tzn. począwszy od lewej strony zapalały się kolejne pary diod w odstępie czasowym ok. 1 sekundy.
4. Wnioski
Podczas realizacji tego ćwiczenia poznaliśmy zasadę działania systemu przerwań mikroprocesora Z80. Jednak głównym celem tego ćwiczenia było stworzenie programu realizującego odpowiednie efekty świetlne. W naszym przypadku wykonaliśmy wzór z zadania Z5-23 zamieszczonego w instrukcji poprzez stablicowanie kolejnych wzorów i cykliczne przesyłanie elementów tej tablicy na port wyświetlacza. Zrealizowany przez nas program zadziałał poprawnie, ponadto jego niewielkie modyfikacje umożliwiają wyświetlanie dowolnych efektów świetlnych.