Formalny opis działania.
Zasada działania tego analizatora stanów logicznych opiera się na
wykorzystaniu sygnałów mikrokontrolera 8051 pracującego z zewnętrzną
pamięcią programu.
Mikrokontroler pracując w pętli składającej się z rozkazów ADD A,#5
(rys. 1 przedstawia schemat blokowy) , daje sygnał PSEN który oprócz
funkcji odczytywania z zewnętrznej pamięci programu jest wykorzystywany
do zapisu w pamięci RAM 8 bitowych próbek sygnałów wejściowych.
Wyżej wymieniona pętla programowa znajduje się w pamięci programu o
adresach powyżej 4kB i zawiera 508 rozkazów ADD A,#5 oraz jeden
rozkaz JMP do początku pętli. Fakt że pętla ta znajduje się powyżej 4kB
pozwala nam wykorzystać sygnał adresowy A12 do strobowania sygnału
PSEN zapisującego do pamięci RAM .
Sygnał PSEN pojawia się dwa razy w czasie cyklu maszynowego, a rozkaz
ADD A,#5 jest rozkazem 2 bajtowym realizowanym w jednym cyklu
maszynowym (2 kolejne adresy w pamięci programu) ,więc próbkując do
pamięci 1kB potrzebujemy 508 takich rozkazów plus jeden rozkaz JMP
który jest rozkazem 3 bajtowym ale realizowanym w 2 cyklach maszyno-
-wych (4 impuls PSEN pojawia się ale pobranie rozkazu jest jałowe). W
sumie jest 512 cykli maszynowych a tym samym 1024 kolejne adresy.
W programie wykorzystane jest przerwanie od timera T0 które pozwala
wyjść z pętli w której próbkujemy sygnał wejściowy. Przed wejściem w
tą pętlę ustawiamy przerwanie od timera T0 oraz wpisujemy wartość
początkową która jest obliczana w ten sposób że odejmujemy od wartości
maksymalnej ilość próbek jaką chcemy spróbkować po pojawieniu się
sygnału wyzwolenia.
Sygnał wyzwolenia jest wypracowany przez układ kombinacyjny oparty o
układ programowalny GAL 22V10. Sygnał wyjściowy jest kombinacją
7 bitów wejściowych ,7bitów ważności (czy dany bit bierze udział w
wypracowaniu sygnału wyzwolenia) zapisanego do rejestru a ustawianego
przez użytkownika, i 7 bitów które wskazują czy odpowiedni bit wejściowy
ma być 0 czy 1.
Sygnał wyzwalania bramkuje timer T0 poprzez wejście GATE(INT0) i gdy
stan tego wejścia jest aktywny czyli pojawił się sygnał wyzwolenia timer
T0 zlicza od stanu początkowego aż do przepełnienia. Zostaje ustawiona
flaga przepełnienia która jednocześnie jest sygnałem dla mikrokontrolera
o przerwaniu.
Po przyjęciu przerwania jest realizowany program od adresu 0BH. W tej
części programu blokowane jest przerwanie, zatrzymany timer oraz
zapamiętany jest adres ostatniej próbki (zdejmowany jest ze stosu) a na
miejsce tego adresu zapisywany jest adres podprogramu w którym
zostają wyświetlone wyniki i przez rozkaz RETI skaczemy do tego
podprogramu.
Wyświetlanie wyników (próbek sygnału wejściowego) realizowane jest na
wyświetlaczu LCD (4 wiersze po 20 znaków), i z tego względu że chcemy
wyświetlić 8 bitów na 4 wierszach musiałem zdefiniować własne znaki
które pozwoliły mi na jednym znaku zdekodować dwa bity.
Wyświetlacz ten umożliwia wpis do pamięci wyświetlacza 8 znaków użytko-
-wnika. Wpis do pamięci wyświetlacza 4 znaków (kombinacja na dwóch
bitach) znajduje się w procedurze inicjalizacyjnej w której wykonywana jest
inicjalizacja wyświetlacza. Procedura ta wykonywana jest tylko raz przy
uruchomieniu analizatora.
Wyświetlanie próbek przebiega w ten sposób że po przyjęciu przerwani
otrzymujemy adres najmłodszej próbki i możemy przesuwać się tylko
w prawo dopiero po odczytaniu jakiejś próbki możemy się wrócić
przesuwając w lewo. Przesuwając się w prawo lub lewo inkrementujemy
lub dekrementujemy DPTR jednocześnie sprawdzając czy jest przejście
przez adres 0 ponieważ wtedy musimy zrobić odpowiednie przejście.
N
N
T
T
N
T
N
T Rys.1A
Rys.1A
N
T
Rys.1B
START
JMP INICJAL
ORG 0BH
Blokada przerwania od T0
Stos DPTR
Wyswietl stos
RETI
INICJAL:
Inicjalizacja wyświetlacza
Ustawienie systemu przerwań
Ustawienie trybu pracy timera
PROCEDURA WYŚWIETLANIA
RIGHT-
KEY
DPTR DPTR+1
Pobieranie próbki z pamięci RAM
Przesunięcie wyświetlacza w prawo
Wyświetlenie bajtu
(procedura RIGHT)
LEFT-
KEY
DPTR DPTR-1
Pobranie próbki z pamięci RAM
Przesunięcie wyświetlacza w lewo
Wyświetlenie bajtu
(procedura LEFT)
START
-KEY
START
-KEY
Ustawiamy bity ważności
Ustawiamy czy dany bit jest1 czy 0
Odblokowujemy przerwania
Ustawiamy liczbę próbek po sygnale wyzwolenia
START
-KEY
Odblokowujemy timer T0
(ustawiamy TR0)
ORG 1000H
ADD A,#5
ADD A,#5
.
.
.
.
.
.
.
.
.
.
.
ADD A,#5
JMP 1000H