Sprawozdanie z zajęć laboratoryjnych
Technika mikroprocesorowa 2
Temat: System przerwań mikroprocesora Z80
Wykonujący ćwiczenie: Borowski Krzysztof
Szeszko Adam
Studia dzienne
Kierunek: Elektronika i Telekomunikacja
Specjalność: Telekomunikacja bezprzewodowa
Semestr V Grupa laboratoryjna: L01
Prowadzący ćwiczenie: dr inż. Ł. Sajewski
...........................
OCENA
16.11.2009
Data wykonania ćwiczenia
..............................................
Data i podpis prowadzącego
Cel ćwiczenia:
Zapoznanie się oraz z prostymi systemami przerwań oraz ich programowanie.
Opis stanowiska badawczego:
Ćwiczenie przeprowadzone zostało w dwuosobowej grupie przy stanowisku komputerowym. Wymagany był komputer klasy Pentium, z systemem operacyjnym Windows, wyposażony w kolorową kartę graficzną i takiż monitor. Na komputerze powinny być zainstalowane programy narzędziowe (program metaasemblera C32.EXE i symulatora ekranowego SYMULATOR.EXE). Wymienione oprogramowanie narzędziowe w całości jest umieszczone w kartotece D:\Z80.
Jako przykładowy, rzeczywisty system mikroprocesorowy wykorzystuje się modułowy system z mikroprocesorem Z80. Jest on połączony z komputerem typu PC łączem szeregowym, które służy do ładowania kodów programów do pamięci operacyjnej systemu mikroprocesorowego.
Przebieg ćwiczenia:
Ćwiczenie było zaplanowane jako 4-godzinne
Pierwszym zadaniem było zapoznanie się z pracą programu obsługującego przerwania, a następnie poprzez jego modyfikacje wyświetlanie na wyświetlaczu segmentowym liczb od 1 do 256 oraz dodatkowe wyświetlanie liczby w systemie binarnym na diodach.
Listing programu:
cpu "z80.tbl"
hof "int8"
incl "system.inc"
org 8000h
ld C,10 ;ustawienie początkowej prędkości wyświetlania jp begin
szybciej:
Ld c, 5 ;zmiana prędkości wyświetlania na szybszą
jp begin
wolniej:
ld c, 10
jp begin
begin: im 2 ; przerwania maskowalne typu drugiego
ld a,81h ; starszy bajt wektora przerwań
ld i,a ; wektor przerwań
ld a,00h ; młodszy bajt wektora przerwań
out (ctc1),a ; inicjalizacja CTC1 jako gen. przerwań systemowych
ld a,0b7h ; słowo sterujące, tryb czasowy
out (ctc1),a ; inicjalizacja CTC1 jako gen. przerwań systemowych
ld a,0f7h ; słowo sterujące, tryb licznikowy
out (ctc2),a
out (ctc3),a
out (ctc4),a
ld a,00h
out (ctc1),a ; wpisanie stałej czasowej do licznika CTC1 / 256 ld a,C
out (ctc2),a ;CTC2 co 5/8 sekundy
ld a,2
out (ctc3),a ;CTC3 co 5/4 sekundy
ld a,8
out (ctc4),a ;CTC4 co 10 sekund ;zlicza do 8
ei ;zezwolenie na przerwania INT
label1:call conin ;instrukcja wczytująca jaki przycisk został wciśnięty
cp 41h ;sprawdza czy to przycisk „A”
jp Z,szybciej ;jeśli został wciśniety przycisk „A” skocz do inst. szybciej
cp 42h ;sprawdza czy to przycisk „B”
jp Z, wolniej ;jeśli został wciśniety przycisk „B” skocz do inst. szybciej
; O B S L U G I P R Z E R W A N
int0:
ei
reti
int1: push af
in a,(ledy)
inc a
out (ledy),a
call A2HEXP
dfb 23h
pop af
ei
reti
int2:
ei
reti
int3:
ei
reti
org 8100h
tabint: dwl int0 ; tablica adresów obsług przerwań
dwl int1
dwl int2
dwl int3
end
W programie zostały dopisane komendy mające na celu wyświetlanie liczb na wyświetlaczy segmentowym jak i diodowym. Dodatkową funkcją programu jest możliwość zmieniania prędkości wyświetlania za pomocą przypisanych przycisków.
Drugim zadaniem było napisanie programu, który zapalał kolejne diody. Sekwencje zapalania diód odzwierciedla przedstawianie kolejnej potęgi liczby 2.
Listing programu:
cpu "z80.tbl"
hof "int8"
incl "system.inc"
org 8000h
ld C,10
jp begin
begin: im 2
ld a,81h
ld i,a ;wektor przerwań
ld a,00h
out (ctc1),a ;wektor przerwań
ld a,0b7h
out (ctc1),a ;inicjalizacja CTC1 jako gen. przerwań systemowych
ld a,0f7h
out (ctc2),a
out (ctc3),a
out (ctc4),a
ld a,00h
out (ctc1),a ;CTC1 / 256
ld a,C ;zlicza do 20
out (ctc2),a ;CTC2 co 5/8 sekundy
ld a,2 ;zlicza do 2
out (ctc3),a ;CTC3 co 5/4 sekundy
ld a,8 ;zlicza do 2
out (ctc4),a ;CTC4 co 10 sekund, zlicza do 8
ld a,10000000b ;początkowa wartość wyświetlana zapalona 1 dioda od lewej
ei ;zezwolenie na przerwania INT
;aktywuje system przerwań
label1: jr label1
; O B S L U G I P R Z E R W A N
int0: ei
reti
int1:
rlca ; przesunięcie liczby w prawo tak aby zapalila sie kolejna dioda
out (ledy),a
ei
reti
int2: ei
reti
int3: ei
reti
org 8100h
tabint: dwl int0 ; tablica adresow obslug przerwan
dwl int1
dwl int2
dwl int3
end
W programie została wykorzystana komenda przesunięcia w prawo co odpowiada dzieleniu przez dwa. Gdy zapalona jest 1 dioda od lewej wyświetlana jest niejako liczba 128. Po wykonaniu dzielenia jedynka przesuwa się w prawo wyświetlając kolejne wartości z dzielenia przez 2 aż dojdziemy do liczby 1. Proces powtarza się cyklicznie aż do zatrzymania systemu przerwań.
Kolejnym zadaniem było napisanie programu mającego na celu wyświetlanie sekwencji, które po złożeniu ułożą konkretny wzór lub obrazek. W naszym przypadku sekwencja wyświetlana na diodach wyświetlała choinkę.
Listing programu:
cpu "z80.tbl"
hof "int8"
incl "system.inc"
org 8000h
ld C,5
jp begin
begin: im 2
ld a,81h
ld i,a ; wektor przerwan
ld a,00h
out (ctc1),a
ld a,0b7h
out (ctc1),a ; inicjalizacja CTC1 jako gen. przerwań systemowych
ld a,0f7h
out (ctc2),a
out (ctc3),a
out (ctc4),a
ld a,00h
out (ctc1),a ; CTC1 / 256
ld a,C
out (ctc2),a ; CTC2 co 5/8 sekundy
ld a,2
out (ctc3),a ; CTC3 co 5/4 sekundy
ld a,8
out (ctc4),a
ld HL,8200h
ld B,6
ei
; O B S L U G I P R Z E R W A N
int0: ei
reti
int1: ld a,(HL)
inc HL
cp
out (ledy),a
call A2HEXP
dfb 23h
ei
reti
int2: ei
reti
int3: ei
reti
org 8100h
tabint: dwl int0 ; tablica adresow obslug przerwań
dwl int1
dwl int2
dwl int3
org 8200h
tab: dfb 00011000b
dfb 00111100b
dfb 01111110b
dfb 11111111b
dfb 01111110b
dfb 00111100b
dfb 00011000b
dfb 00000000b
dfb 00011000b
dfb 00111100b
dfb 01111110b
dfb 11111111b
dfb 01111110b
dfb 00111100b
dfb 00011000b
dfb 00000000b
end
W programie wykorzystaliśmy funkcję dzięki której sami przypisujemy stan poszczególnych wyświetlaczy. Program ten poprzez zapalanie odpowiednia sekwencje diod wyświetla nam obrazek przedstawiający choinkę.
Wnioski
Wszystkie programy jakie napisaliśmy podczas wykonywania ćwiczenia działały poprawnie i po ich skompilowaniu dawały się uruchomić na module mikroprocesorowym z systemem Z80. Przerwania mogą zostac wykorzystane w większości programów dzieki czemu upraszczaja one prace.