Programarea Portului Paralel
|
|
Programarea acestei interfete se
face de o manevra foarte simpla:doar trei registrii sunt necesari pentru a
controla toate semnalele.De fapt daca in sistem sunt instalate mai multe porturi
paralele,este nevoie de atatea grupe de cate trei registrii cate porturi
paralele sunt instalate. De exemplu daca avem 2 porturi paralele
(corespunzatoare LPT1 si LPT2) vom avea nevoie de 2x3 registrii.
|
|
Semnalele de date
(378h-LPT1,278h-LPT2)
|
Daca interfata paralela este
clasica acest registru este accesibil doar la scriere. Scrierea unui octet in
acest registru trece imediat liniile de date D0 la D7 la nivelurile cerute.
Scrierea se face cu o instructiune de tip "OUT" (ex i asembler out ax,xx in ax
gasindu-se adresa portului de baza (P+0) ex.378, iar xx fiind o variabila pe un
byte sau in pascal port[port_de_baza]:=xx).
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
x |
|
|
|
|
|
|
|
d7 |
|
x |
|
|
|
|
|
|
d6 |
|
|
x |
|
|
|
|
|
d5 |
|
|
|
x |
|
|
|
|
d4 |
|
|
|
|
x |
|
|
|
d3 |
|
|
|
|
|
x |
|
|
d2 |
|
|
|
|
|
|
x |
|
d1 |
|
|
|
|
|
|
|
x |
d0 |
|
Pentru a putea folosi acest
registru ca registru de intrare,la porturile care suporta transfer bidirectional
trebuie sa-l setam.Aceasta se face setand bitul 5 al portului P+2 (ex 37ah).
apoi putem prelua datele de pe magistrala D0-D7 cu o instructiune de tip IN din
registrul de baza ( ex temp:=port[port_de_baza] in pascal)
Starea imprimantei (379h-LPT1,279h-LPT2)
|
Acest registru accesibil doar la
citire,este imaginea starii semnalelor ERROR,SELECT,PE,ACK si BUSY. Trebuie
remarcat ca bitul 7 al registrului (corespondent al semnalului BUSY- vezi
asteriscul *) este inversat in raportcu intrarea,intre cupla si registru fiind
prezent un inversor.
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
x |
|
|
|
|
|
|
|
/BUSY(*) |
|
x |
|
|
|
|
|
|
/ACK |
|
|
x |
|
|
|
|
|
PE |
|
|
|
x |
|
|
|
|
SELECT |
|
|
|
|
x |
|
|
|
/ERROR |
|
|
|
|
|
x |
x |
x |
Nedefinite |
|
(*) logica inversa
|
|
Comanda imprimantei (37ah-LPT1,27ah-LPT2)
|
Acest ultim registru este accesibil
pe rand la citire si la scriere. Primii patru biti sunt imaginea semnalelor
STROBE,AUTOFEED,INIT si SELECT IN ( si aici sunt inversoare montate intre cupla
si registru notat in tabel cu (*)) Bitul 4 (IRQ ENABLE) autorizeaza sau nu
declansarea unei intreruperi cand ACK trece in starea jos (deci cand imprimanta
valideaza receptia unui caracter). Aceasta intrerupere este INT 7 (0fh) pt LPT1
sau INT5 (0dh) pentru LPT2. Nota: putem redirecta aceste intreruperi astfel
incat la un front negativ al semnalului ACK sa se ruleze programul nostru
rezident care sa trateze aceaste intreruperi ( vezi in pascal getintvec si
setintvec). Bitul BIT CTRL nu are sens decat pentru porturile
bidirectionale(EPP sau ECP). Facand acest bit 1 logic,portul este accesibil la
scriere.
|