Sebastian Jankowski
Mgr uzupełniające
RA I sem. II
Gr. 13 A
„MIKROPROGRAMOWANIE”
Temat: Sterowanie drukarką (tryb tekstowy)Schemat połączenia układu sterującego US z innymi elementami drukarki
Opis poszczególnych sygnałów i szyn
~STR - niski poziom logiczny tego sygnału oznacza, że zaraz na liniach danych D0-D7
będzie przesłany bajt zawierający kod znaku ASCII.
D0-D7 - magistrala danych
~ACK - niski poziom logiczny na tej linii oznacza wiadomość dla komputera, że odebrano
znak ASCII.
BSY - wysoki poziom logiczny na tej linii oznacza wiadomość dla komputera, że zaszło
jedno z następujących zdarzeń:
bufor drukarki jest pełny
nastąpił wewnętrzny błąd
drukarka nie jest podłączona do komputera
trwa odbieranie znaku
PAP - wysoki poziom logiczny na tej linii oznacza wiadomość dla komputera, że zabrakło
papieru
ER - sygnał błędu z układu drukującego - brak papieru lub wystąpił błąd wewnętrzny (ER=1)
FL - sygnał błędu z bufora drukarki - przepełnienie bufora (FL=1)
D - dwukierunkowa szyna danych, 8-bitowa
A - szyna adresowa, 16-bitowa
Algorytm działania
Przesyłanie znaku z komputera do drukarki odbywa się w następujących krokach:
komputer wpisuje kod znaku na magistralę danych D0-D7
komputer sprawdza stan linii BSY; gdy jest wysoki to dane na magistrali danych przepadają i komputer musi ponownie wykonać krok pierwszy; w przeciwnym wypadku ustawia stan niski na linii ~STR
drukarka wpisuje zawartość linii D0-D7 do rejestru wewnętrznego, ustawia linię ~ACK i przetwarzanie odbywa się od początku; znak może być drukowany natychmiast (tzw. tryb konsoli tekstowej) lub zapisywany do bufora.
Opis zadań (Z) oraz warunków (XC)
przy liście mikroinstrukcji
Lista mikroinstrukcji:
Schemat ideowy układu sterującego
|
Mikroinstrukcja |
Zadania i warunki |
Ai |
Z1, A':=Ai+1 |
Z1: odczytaj stan linii ~STR do komórki pamięci A |
Ai |
if XC1 then A':=Ai+1 else A':=Ai-1 |
XC1: A=0 - jeśli prawda to będzie wysyłany bajt danych z komputera |
Ai |
Z2, A':=Ai+1 |
Z2: załaduj komórki B i C odpowiednio stanami z linii FL i ER |
Ai |
if XC2 then A':=Ai+2 else A':=Ai+1 |
XC2: B=0 - jeśli prawda to bufor drukarki nie jest pełny |
Ai |
Z3, A':=Ai-4 |
Z3: bufor drukarki jest zapełniony więc na linii BSY ustawiamy wysoki stan logiczny; BSY:=1 |
Ai |
if XC3 then A':=Ai+2 else A':=Ai+1 |
XC3: C=0 - jeśli prawda to jest papier w drukarce |
Ai |
Z4, A':=Ai-6 |
Z4: brakuje papieru, ustaw linię PAP; PAP := 1 |
Ai |
Z5, A':=Ai+1 |
Z5: przygotowanie do odebrania bajtu; ustaw linię BSY:=1 |
Ai |
Z6, A':=Ai+1 |
Z6: ładujemy 8-bitową komórkę DATA bitami z linii D0-D7 |
Ai |
Z7, A':=Ai-9 |
Z7: potwierdzamy otrzymanie bajtu: ~ACK:=0, BSY:=0; czekanie na następny znak |
S0 |
S1 |
S2 |
S3 |
XC |
a |
b |
c |
d |
e |
f |
g |
0 |
0 |
0 |
0 |
- |
0 |
- |
- |
- |
- |
- |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
- |
- |
- |
0 |
0 |
- |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
- |
0 |
0 |
1 |
0 |
- |
0 |
- |
- |
- |
- |
- |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
- |
0 |
0 |
1 |
1 |
0 |
0 |
- |
- |
- |
0 |
1 |
- |
0 |
1 |
0 |
0 |
- |
1 |
0 |
1 |
1 |
- |
- |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
- |
0 |
1 |
0 |
1 |
0 |
0 |
- |
- |
- |
1 |
0 |
- |
0 |
1 |
1 |
0 |
- |
1 |
0 |
1 |
0 |
- |
- |
1 |
0 |
1 |
1 |
1 |
- |
0 |
- |
- |
- |
- |
- |
1 |
1 |
0 |
0 |
0 |
- |
0 |
- |
- |
- |
- |
- |
1 |
1 |
0 |
0 |
1 |
- |
1 |
0 |
0 |
1 |
- |
- |
1 |
Schemat z wykorzystaniem układów AM2910 i AM2903
Opis układu
Adresy urządzeń:
0 - układ drukujący
1 - bufor drukarki
Adresy zmiennych:
2 - stan linii FL, komórka B
3 - stan linii ER, komórka C
4 - kod znaku do drukowania, komórka DATA
Rejestr urządzenia (RU)
We |
|
001b |
FL |
010b |
ER |
011b |
RA |
100b |
RDI |
101b |
RDO |
gdzie:
- odczyt linii zapełnienia bufora drukarki
- odczyt linii błędu wewnętrznego
- zapis do rejestru adresowego
- zapis do rejestru danych wejściowych
- zapis do rejestru danych wyjściowych
Rejestr adresowy RA, danych wejściowych RDI, danych wyjściowych RDO służą do przechowywania danych na szynach A i D (adresowej i danych) i zapamiętywania ich.
W pamięci ROM układu znajduje się program układu sterującego i mikroprogram sekwencera.
Komunikacja pomiędzy urządzeniami (np. wysyłanie danej z US do urządzenia) przebiega według następującego algorytmu:
Wybieramy adres urządzenia (wpis jego kodu do Y)
Wystawiamy jego adres na szynę adresową A (RU=100b)
Wybieramy określony kod komunikatu (Y=kod_komunikatu)
Wysyłamy komunikat czyli wystawiamy go na szynę danych D (RU=110b)
Przykład: Sprawdzanie statusu linii FL (część zadania Z2)
Polecenie |
Rozkaz |
Zadanie |
Z2.0, A':=Ai+1 |
Y=01b |
wybierz bufor drukarki |
Z2.1, A':=Ai+1 |
RU=100b |
wystaw adres na szynę adresową |
Z2.2, A':=Ai+1 |
Y=1b |
kod=1 - zwróć status bufora |
Z2.3, A':=Ai+1 |
RU=110b |
wystawienie na szynę danych |
Złącze
równoległe
Centronics
1
13
14
25
~STR
D0
D1
D2
D3
D4
D5
D6
D7
~ACK
PAP
BSY
US
ER
Bufor
drukarki
D
A
Układ
drukujący
FL
linie
standardowego
trybu
równoległego
START
Z1
XC1
Z2
XC2
Z3
XC3
Z4
Z5
Z6
Z7
Tablica dekodera mikroinstrukcji:
d
c
a = 0 inc
a = 1 load
g = 1 hold
g = 0 blok
g
UO
f
e
d
c
b
a
XC
S
DMI
XC
+2
10
01
00
XC1
XC2
XC3
e f
a
100
011
010
001
b
-9
-6
-4
ROM
S | C | Z
Licznik
-1
000
g
TAK
TAK
TAK
NIE
NIE
NIE
OE Rejestr
Mux warunku
wr RDO
Rejestr Urządzenia
wr RDI
wr RA
Zegar
ROM
I[0-8] B A Cin I Ccen D BA RU Rld C
AM2910 Sekwencer D[0-11]
Rld Cp
CC
Pl Ccen I[0-3] Y[0-11]
Cin 2x AM2903
A
B N
I[0-8]
Clk
D[0-15] Y[0-15]
NRG
D[0-7]
A[0-15]
ER FL