Interfaccia
Centronics
E’
una interfaccia parallela ad 8 bit di tipo asincrona usata
soprattutto per collegare un computer ad una stampante parallela. Il
flusso di dati è tipicamente monodirezionale e va, naturalmente, dal
computer alla stampante. Recentemente, grazie alla evoluzione della
interfaccia, è possibile anche inviare sulle stesse linee dati che
vanno dal dispositivo periferico al computer e ciò consente
l’utilizzo di tale interfaccia anche per il collegamento di
dispositivi di input come, ad esempio, lo scanner o la webcam. Il
connettore sul retro del computer è di tipo D a 25 poli femmina. Su un
PC possono prendere posto fino a 3 interfacce parallele denominate LPT1,
LPT2 e LPT3 (Line Printer Terminal). Ciascuna delle 3 LPT presenta 3
indirizzi contigui destinate alle periferiche di I/O.
L’indirizzo
base della LPT1 è 888 (in esadecimale: 378), gli altri due indirizzi
sono 889 e 890. L’indirizzo base della LPT2 è 632 (in esadecimale:
278), gli altri due indirizzi sono 633 e 634. L’indirizzo base della
LPT3 è 956 (in esadecimale: 3BC), gli altri due indirizzi sono 957 e
958. Si riassume la situazione nella seguente tabella 3.
Tabella 3
|
|
Ind.
base
|
Ind.base+1
|
Ind.base+2
|
|
LTP1
|
888
|
889
|
890
|
|
LPT2
|
632
|
633
|
634
|
|
LPT3
|
956
|
957
|
958
|
Alla
LPT1 viene riservato l’interrupt IRQ7. Il registro base di indirizzo
888, denominato registro dati,
contiene 8 bit di uscita dal PC.
Il
registro di indirizzo successivo 889, noto come registro di stato,
è accessibile solo dall’esterno e solamente per 5 dei suoi 8 bit. È
detto registro di stato perché ciascuna delle 5 linee individua un
particolare stato in cui si trova la stampante (occupata, carta
esaurita, errore, ecc.). Il registro di indirizzo 890 rende disponibili
solo 4 bit di uscita.
In
fig.4 si mostra il connettore a 25 poli posto sul retro del computer.
Fig. 4 – Interfaccia Centronics. Connettore a 25 poli
femmina posto sul retro del PC
In
tabella 4 si riporta la piedinatura, la denominazione, la direzione,
l’indirizzo e l’uso delle linee che l’interfaccia Centronics mette
a disposizione sul connettore D a 25 poli agli indirizzi 888, 889 e 890
della LPT1.
Tabella 4
|
PIN
|
NOME
|
DIREZIONE
|
INDIRIZZO
ED USO
|
|
1
|
_______
STROBE
|
USCITA
|
890
OUT 890,1 0V
890
OUT 890,0 5V
|
|
2
|
DATA1
|
USCITA
|
|
|
3
|
DATA2
|
USCITA
|
|
|
4
|
DATA3
|
USCITA
|
|
|
5
|
DATA4
|
USCITA
|
OUT
888,N
|
|
6
|
DATA5
|
USCITA
|
Per
|
|
7
|
DATA6
|
USCITA
|
0
£
N £
255
|
|
8
|
DATA7
|
USCITA
|
|
|
9
|
DATA8
|
USCITA
|
|
|
10
|
ACK
|
INGRESSO
|
B3
(64) SE ALTO
|
|
11
|
_____
BUSY
|
INGRESSO
|
B4
(128) SE BASSO
|
|
12
|
PAPER OUT
|
INGRESSO
|
B2
(32) SE ALTO
|
|
13
|
SELECTED
|
INGRESSO
|
B1
(16) SE ALTO
|
|
14
|
__________
AUTOFEED
|
USCITA
|
890
OUT 890,2 0V
|
|
15
|
ERROR
|
INGRESSO
|
B0
( 8 ) SE
ALTO
|
|
16
|
INIZIALIZE
PRINTER
|
USCITA
|
890 OUT 890,4 5V
|
|
17
|
_____________
SELECT INPUT
|
USCITA
|
890
OUT 890,8 0V
|
|
18…25
|
GND
|
|
|
INDIRIZZO 888
Le
linee di uscita DATA8...DATA1, di indirizzo 888 (378 esadecimale),
situate tra i pin 9....2, sono memorizzate
all’indirizzo
888 :
|
LINEE
|
DATA8
|
DATA7
|
DATA6
|
DATA5
|
DATA4
|
DATA3
|
DATA2
|
DATA1
|
|
PIN
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
INDIRIZZO
889
L’interfaccia
Centronics possiede 5 linee di ingresso all’indirizzo 889 (379
esadecimale) con i seguenti valori e logiche di funzionamento:
_____
BUSY
(pin 11)
vale 128 se è al livello basso
(logica negativa).
ACK
(pin 10)
vale 64 se è al livello alto
(logica positiva).
PAPER
OUT
(pin 12)
vale 32 se è al livello alto
(logica positiva).
SELECTED
(pin 13)
vale 16 se è al livello alto
(logica positiva).
ERROR
(pin 15)
vale 8 se è al livello alto
(logica positiva).
|
LINEE
|
_____
BUSY
|
ACK
|
PAPER OUT
|
SELECTED
|
ERROR
|
1
|
1
|
1
|
|
PIN
|
11
|
10
|
12
|
13
|
15
|
|
|
|
I rimanenti 3 bit meno significativi del byte di ingresso
non sono accessibili sul connettore e sono poste, internamente
all’interfaccia, al
livello alto (1112 = 710 ).
Avendo a disposizione 5 bit (32 combinazioni) è possibile
acquisire, nella variabile A valore compresi tra 0 e 31.
Ciò si realizza con i seguenti passaggi:
A = A XOR 128
(per complementare il bit applicato su BUSY);
A
= A - 7
(per azzerare i tre bit meno significativi : operazione,
comunque,
non necessaria);
A = A / 8
(per lo scorrimento a destra di 3 posizioni).
L'algoritmo di acquisizione in
linguaggio QBASIC risulta, pertanto:
A
= ((INP(889) XOR 128) - 7 ) / 8
In questo modo la parola di
ingresso A assume un valore compreso tra 0 e 31.
INDIRIZZO
890
L’indirizzo Centronics 890
(37A esadecimale) rende disponibile in uscita altri 4 bit di cui tre
attivi in logica negativa ed una in logica positiva :
___
_____
STB
= STROBE
(pin 1) vale 1
se è al livello basso (logica negativa).
__
__________
AF
= AUTOFEED
(pin 14) vale 2 se
è al livello basso (logica negativa).
IP
= INIZIALIZE PRINTER
(pin 16) vale 4 se è al livello
alto (logica positiva).
__
_____________
SI
= SELECT INPUT
(pin 17) vale 8 se
è al livello basso (logica negativa).
IRQE
= ABILITA INTERRUPT
vale 16 se è al
livello alto (logica positiva)
ma non è disponibile fisicamente.
|
indirizzo 890
|
bit 7
|
bit 6
|
bit 5
|
bit 4
|
bit 3
|
bit 2
|
bit 1
|
bit 0
|
|
LINEE
|
|
|
|
IRQE
|
__
SI
|
IP
|
__
AF
|
___
STB
|
|
PIN
|
|
|
|
|
17
|
16
|
14
|
1
|
Se si intende trasmettere una
parola a 4 bit con valore compreso tra 0 e 15 e con i bit attivi in
logica positiva, occorre commutare (XOR con 1 logico) i bit
e
lasciare inalterato (XOR con zero logico) il bit IP :
OUT(890), A XOR 11
|
A3
|
A2
|
A1
|
A0
|
A
nel PC
|
|
1
|
0
|
1
|
1
|
11
|
|
__
A3
|
A2
|
__
A1
|
__
A0
|
A
XOR 11
|
|
A3
|
A2
|
A1
|
A0
|
A
in uscita
|
Il bit 5 dell’indirizzo 890 è
accessibile solo via software e consente di impostare i dati
dell’indirizzo 888 come Input (bit 5 = 1) o come Output ) bit 5 = 0.
Procedura per dichiarare la porta all'indirizzo 888 di Input
o di Output
Se l'interfaccia Centronics è
impostata come EPP (Enhanced Parallel Port) è possibile effettuare
l'input di un byte all'indirizzo 888 purché
si imposti ad 1 il bit 5 dell'indirizzo 890.
Impostando a 0 il bit 5 dell'indirizzo 890, il byte
DATA8...DATA1 all'indirizzo 888 ritorna a funzionare come byte di
output.
Si riporta un semplice listato di test in QBASIC (facilmente
modificabile in un altro linguaggio di programmazione) per provare la
Centronics all'indirizzo 888 come canale di input a 8 bit.
Con un semplice spezzone di cavo telefonico (quello usato
per collegamenti su bread-board) si collega il pin 2 (DATA1) al pin 25 (GND)
del connettore (femmina) a 25 poli posto sul retro del PC e si prova il
programma ottenendo sul monitor la stampa continua del numero 254 fino
alla pressione di un tasto qualsiasi sulla tastiera. Portando il filo
sul pin 3, 4, ecc. tenendo l'altro capo del filo sempre a massa, si può
verificare che effettivamente il dato in lettura si modifica in funzione
del pin collegato a massa. È superfluo
dire che le linee DATA8 ... DATA1 posti sui pin 9...2 sono da ritenersi
allo stato 1 se tenute aperte.
Per impostare l'interfaccia Centronics come EPP, infine, si
va nel BIOS SETUP e si imposta
la stampante come EPP anziché come SPP.
Fig.5. – Programma e
collegamenti per provare la Centronics come porta di ingresso
all’indirizzo 888.
Se si utilizza come software di gestione della interfaccia
Centronics Visual Basic 6 e si opera in ambiente Windows ’98, 2000,
2000XP o NT è necessario utilizzare degli opportuni componenti che
consentono di gestire le istruzioni di Input e Output verso la
Centronics.
Ad esempio, sul sito Internet www.driverlinx.com è
disponibile gratuitamente un componete in grado di gestire la Centronics
con VB6. Attivando il download si può scaricare il file Windows
95NT PortI/O driver che consente di caricare il file port95nt.exe
che installa automaticamente diversi file tra cui:
·
DLPortIO.DLL
-- Win32 DLL hardware I/O functions
·
DLPortIO.BAS
-- Visual Basic interface to DLPortIO.DLL
·
DLPortIO.SYS -- Kernel mode driver for WinNT
(non necessaria per Win95)
In questo caso nel progetto VB si
deve inserire il modulo DLPortIO.BAS
e le istruzione di Input e Output devono avere il seguente
formato:
·
Value = DlPortReadPortUchar(Addr)
·
DlPortWritePortUchar
(Addr), Value
Dove Addr è l’indirizzo
della porta, ad esempio 888, e Value è il valore in decimale in
lettura o in scrittura.