Home > Guide > Porta parallela

Porta parallela

Anche se i più recenti computer spesso non ne sono dotati, la porta parallela costituisce il metodo più semplice per interfacciare un dispositivo elettronico col PC. Ciò è dovuto al fatto che i suoi ingressi e le sue uscite sono compatibili con i circuiti TTL e CMOS più diffusi in commercio (nei quali il livello logico 1 è rappresentato da 5 V e lo 0 da 0 V).

Rispetto al primo modello, la porta parallela si è evoluta e supporta diverse modalità di funzionamento. Tuttavia faremo riferimento alla modalità originaria, la SPP (Standard Parallel Port). In questa modalità la porta presenta in totale 12 bit di uscita e 5 bit di ingresso. Per scrivere o leggere questi bit, basta scrivere o leggere nei relativi indirizzi di memoria associati alla porta parallela.

Nella modalità SPP, alla porta parallela sono associati 3 registri in memoria, a partire dall'indirizzo base che solitamente è 0x378 (378 esadecimale). In alcuni computer l'indirizzo può essere 0x278 oppure 0x3BC, spesso può essere cambiato dal BIOS.

Il modo in cui questi registri sono organizzati riflette il fatto che la porta parallela è stata originariamente concepita per pilotare la stampante.

Il registro 0x378 costituisce il registro dati, ad esso sono associati gli 8 bit di dati evidenziati in verde nella figura (il bit meno significativo corrisponde al pin 2 della porta, quello più significativo al pin 9).

Il registro 0x379 costituisce il registro di stato. Leggendo questo registro è possibile conoscere lo stato logico dei bit di ingresso, quelli in blu nella figura. Il valore di alcuni di questi bit è invertito nel registro.

BitNomePinInvertito
7Busy11
6Ack10No
5Paper Out12No
4Select In13No
3Error15No
2IRQ- 
1Riservato- 
0Riservato- 

Il registro 0x37A costituisce il registro di controllo. Quattro dei suoi bit sono associati agli altri quattro bit di uscita della porta parallela, quelli in rosso nella figura.

BitNomePinInvertito
7Riservato- 
6Riservato- 
5Bidirezionale- 
4Abilitazione interrupt- 
3Select-In17
2Initialize16No
1Linefeed14
0Strobe1

I pin da 18 a 25 (in grigio nella figura) sono tutti posti a massa.

Per scrivere e leggere nei registri in memoria, diversi linguaggi hanno istruzioni dedicate. Tuttavia, in Windows 2000 e XP è impedito l'accesso diretto dei programmi alle periferiche, ma è necessario utilizzare un driver. Per fortuna sono disponibili diverse librerie che permettono di aggirare questo ostacolo, fra cui inpout32.dll, che potete scaricare qui:

download.gif (383 byte)inpout32.dll.zip (268 kb)

Utilizzando questa libreria, si hanno a disposizione le due seguenti istruzioni:

Out32(address,data) scrive il valore data sull'indirizzo address;

Inp32(address) restituisce il valore contenuto nell'indirizzo address.

Ogni programma che utilizza la libreria avrà bisogno del file inpout32.dll (si trova nel file zip in binaries\dll) presente nella cartella del programma oppure nella cartella sistema di Windows (C:\Windows\System in Windows 9x, C:\Windows\System32 in Windows 2000/XP). Vediamo ora come importare la libreria in alcuni linguaggi:

Visual C++
Copiate il file inpout32.lib (si trova nel file zip in test applications\VC_test_app) nella cartella del progetto, quindi in Project->Settings->Link scrivete "inpout32.lib" nel box Object/library modules. Inserite quindi nel codice i prototipi delle funzioni:
short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);

Visual Basic
Dichiarate le seguenti funzioni in un modulo a parte (oppure in un form come Private):
Public Declare Function Inp32 Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out32 Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Visual C#
All'interno di una classe dichiarate i seguenti metodi:
[DllImport("inpout32.dll", EntryPoint="Out32")] public static extern void Out32(int address, int data);
[DllImport("inpout32.dll", EntryPoint="Inp32")] public static extern int Inp32(int address);


Applicazioni

La più semplice applicazione è pilotare una batteria di 8 led collegata agli 8 bit di dati. Eseguendo l'istruzione Out32(0x378,data), leggeremo sui led la rappresentazione binaria del numero data.

Un'altra semplice applicazione è il pilotaggio di un relè. In figura è mostrato un relè pilotato dal bit 0 del registro dati:

Notare la presenza di una alimentazione esterna Vs per pilotare il relè, in quanto la porta parallela non è capace di fornire la corrente necessaria.

E' possibile inoltre pilotare display a 7 segmenti o LCD, porte logiche TTL, etc.... Un'interessante applicazione è il collegamento di un convertitore analogico-digitale per l'acquisizione di dati analogici, ad esempio provenienti da sensori.

Home
Scrivimi

Torna su
Indietro

Visite dal 17 marzo 2004

Per visualizzare al meglio il sito si consiglia di utilizzare Mozilla Firefox oppure Internet Explorer versione 5 o sucessiva alla risoluzione di 800x600 con caratteri medi.