POLITECHNIKA BIAŁOSTOCKA
WYDZIAŁ ELEKTRYCZNY
KATEDRA AUTOMATYKI I ELEKTRONIKI
Sprawozdanie z zajęć laboratoryjnych:
Technika Mikroprocesorowa 2
Kod: TS1A520312
Ćwiczenie numer: 6
Temat: System przerwań mikroprocesora Z80.
Wykonujący ćwiczenie:
Rafał Siemieniuk
Patryk Siwerski
Studia dzienne
Kierunek: Elektronika i Telekomunikacja
Specjalność: Aparatura Elektroniczna
Semestr: V Grupa: L02
Prowadzący ćwiczenie: dr inż. Kociszewski Rafał
……………...……..
Ocena
7.12.2009
Data wykonania ćwiczenia
……………………………………
Data i podpis prowadzącego
I. Cel i zakres ćwiczenia
Celem ćwiczenia było nabycie umiejętności programowania prostych systemów obsługi przerwań.
II. Opis stanowiska laboratoryjnego
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
III. Przebieg ćwiczenia
Na początku naszym celem było zapoznanie się z budową i działaniem przykładowego programu
CWICZINT.ASM, który wykorzystuje przerwania wektorowe od wszystkich liczników układu Z80CTC, a następnie jego modyfikacja.
W kolejnym etapie 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:
Zmodyfikowany program z opisem 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
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 przerwan, młodszy bajt
ld a,0b7h słowo sterujące
out (ctc1),a wyższy priorytet portu 1, inicjalizacja CTC1 jako genera tora przerwan systemowych
ld a,0f7h słowo sterujące, tryb licznikowy;
out (ctc2),a
out (ctc2),a
out (ctc3),a
out (ctc4),a
ld a,00h dzieli przez 256
out (ctc1),a CTC1 / 256 - czas przerwania 26,7ms
ld a,20
out (ctc2),a CTC2 co 0,53s
ld a,15
out (ctc3),a CTC3 co 8s
ld a,10
out (ctc4),a
ld bc,8500h
ei zezwolenie na przerwania INT
label1: call inopnd
;ld hl,(oprnd1)
;ld de,(oprnd2)
;or a ; CY := 0
;sbc hl,de
; call hl4hp
; dfb 42h
;call conin reakcja na klawisz
;call clsp kasowanie wyświetlacza
;dfb 80h od 0 pozycji 8 miejsc
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: push af odlozenie zawartosci akumulatora na stos
call ifkey
ld d,46h
cp d
jp nz,skok
in a,(ctc3)
inc a
jp begin
skok: ld a,0
pop af
ei odblokowanie przerwań
reti powrót z procedury obsługi przerwań maskowalnych
int1: push af
ld a,(bc)
inc bc
out (ledy),a przesłanie zawartości akumulatora na wyjście tzn. na diody
pop af
ld a,16
cp c
jp nz, skok2
ld bc,8500h
skok2: ei odblokowanie przerwań
reti powrót z procedury obsługi przerwań maskowalnych
org 8100h
tabint: dwl int0 ; tablica adresow obslug przerwan
dwl int1
org 8500h
tab: dfb 80h, 0c0h, 0e0h,0f0h,0f8h,0fch,0feh,0ffh,0h kolejne wzory wyświetlacza;
end
Niestety nie udało nam się stworzyć pętli, dzięki której program działałby poprawnie. Program poprawnie wyświetla wzór jedynie do połowy. Po zapaleniu się wszystkich diod program kończy swoje działanie, zamiast wrócić do pozycji wyjściowej.
Po kompilacji programu wcisnęliśmy klawisz 9 ( oraz enter w celu zatwierdzenia- analogicznie w pozostałej części ćwiczenia) na klawiaturze systemu PLUM w celu załadowania kodu programu z komputera. W trakcie ładowania na wyświetlaczu pojawił się napis LOAD. Za pomocą programu RS_OWL przesłaliśmy dany program z rozszerzeniem .hex i wciskamy klawisz 8. Za pomocą klawiatury systemu PLUM wpisaliśmy adres początkowy naszego programu (8000). . Po wciśnięciu klawisza enter diody LED pod wyświetlaczem zaczęły migać w kolejności jak na rysunku.
IV. Wnioski
Podczas realizacji tego ćwiczenia poznaliśmy zasadę działania systemu przerwań mikroprocesora Z80, oraz tworzyliśmy program, który na wyświetlaczu systemu PLUM miał generować zadany efekt. Niestety stworzony program działa tylko połowicznie, brak w nim pętli, przez co generowanie efektów świetlnych kończy się już po zapaleniu się wszystkich diod.