Sunteți pe pagina 1din 13

1.

PORTUL PARALEL STANDARD

Aceast lucrare prezint portul paralel standard al calculatoarelor compatibile IBM PC i


urmrete familiarizarea cu diferite metode de conectare ale echipamentelor externe la portul paralel al
acestor calculatoare. Sunt prezentate registrele i semnalele portului paralel, porturile bidirecionale,
utilizarea ntreruperilor i metode de transfer a datelor ntre dou calculatoare utiliznd portul paralel
standard.

1.1. Introducere
ncepnd cu calculatorul IBM PC original (introdus n anul 1981), firma IBM a definit un port
paralel standard pentru imprimant. Acest port reprezenta o alternativ la portul serial mai lent, fiind
utilizat mai ales pentru conectarea imprimantelor matriciale mai rapide. Definiia iniial s-a regsit n
adaptorul pentru imprimant (IBM Printer Adapter) i adaptorul pentru monitor monocrom i
imprimant (IBM Monochrome Display and Printer Adapter).
Ulterior, portul paralel a devenit mijlocul prin care se puteau conecta la calculator periferice cu
performane mai ridicate, ca uniti de partajare a imprimantelor, uniti portabile de discuri, uniti
ncasetate de band i uniti CD-ROM. Pentru aceste periferice se utilizau porturile paralele mbuntite
(EPP, ECP). n prezent, portul paralel este utilizat doar ntr-o msur redus pentru conectarea unor
periferice, fiind nlocuit de alte interfee, cum este interfaa USB. Totui, portul paralel permite conectarea
la calculator a unor periferice mai vechi sau a unor echipamente simple care nu dispun de controlerele
complexe necesare pentru interfee cum sunt USB sau FireWire.
n aceast lucrare se prezint portul paralel standard SPP (Standard Parallel Port). Porturile
paralele mbuntite vor fi prezentate n lucrarea urmtoare.

1.2. Conectori i cabluri


Portul paralel al calculatorului utilizeaz un conector mam DB-25S cu 25 de contacte sub form
de pini, aflat pe panoul din spate al calculatorului. Din cele 25 de contacte, 17 sunt utilizate pentru liniile
de semnal, iar 8 ca linii de mas. Liniile de semnal sunt mprite n trei grupe:
Control (4 linii)
Stare (5 linii)
Date (8 linii)
Acest conector a fost standardizat ulterior de organizaia IEEE, cu denumirea de conector IEEE
1284-A. Figura 1.1 ilustreaz acest conector.

Figura 1.1. Conectorul cu 25 de pini DB-25S (IEEE 1284-A) utilizat pentru porturile paralele ale calculatoarelor
IBM PC.
2 Sisteme de intrare/ieire

Imprimantele conectate la portul paralel al calculatorului utilizeaz un conector cu 36 de contacte,


cunoscut sub numele de Centronics, dup numele firmei Centronics Data Computer Corporation care a
utilizat pentru prima dat acest conector pentru imprimantele produse de aceasta n anii 1970. Contactele
acestui conector sunt sub form de lamele. Asignarea semnalelor pentru acest conector a fost modificat
de mai multe ori. Prima variant a fost cea definit de firma Centronics. n anul 1981, IBM a modificat
cteva din conexiunile conectorului. n final, n anul 1994 IEEE a efectuat unele modificri ale asignrii
semnalelor i a standardizat conectorul cu denumirea de conector IEEE 1284-B. Acest conector este
ilustrat n figura 1.2.

Figura 1.2. Conectorul cu 36 de contacte Centronics (IEEE 1284-B) utilizat pentru interfeele paralele ale
imprimantelor.

Pentru conectarea imprimantelor la portul paralel, trebuie utilizat un cablu cu un conector tat
DB-25P la un capt i un conector tat Centronics cu 36 de contacte la cellalt capt. Acesta este, deci, un
cablu adaptor ntre cele dou tipuri de conectori. Conexiunile necesare pentru acest cablu sunt indicate n
tabelul 1.3. Calitatea cablului este important mai ales pentru modurile de transfer cu vitez ridicat.
Pentru aceste moduri, este important s se conecteze n mod corespunztor toate firele de mas, i nu doar
un singur fir, n modul ntlnit la numeroase cabluri comerciale de calitate redus. Fiecare fir de semnal
trebuie s fie rsucit cu firul su de mas. Dei conectorii standard nu prevd pini separai pentru fiecare
fir de mas, toate aceste fire de mas trebuie s fie prezente pe ntreaga lungime a cablului.

1.3. Registrele portului paralel


Semnalele de date, de stare i de control sunt asignate biilor din registrele care constituie interfaa
cu portul paralel. Adresele registrelor sunt mapate n spaiul de I/E al procesorului. Pentru fiecare port
paralel, exist un numr de trei registre cu adrese consecutive, ncepnd cu adresa de baz a portului.
Adresele de baz obinuite ale portului paralel sunt 378h i 278h. Adresa 3BCh a fost utilizat n trecut de
adaptoarele pentru monitor monocrom i imprimant. Implementrile mai noi ale portului paralel, care
permit funcionarea n modurile avansate definite de standardul IEEE 1284, utilizeaz ntre 8 i 16
registre, cu adresele de baz 378h sau 278h. Uneori adresele acestora pot fi relocate, ca n cazul
adaptoarelor de tip Plug and Play.
Registrele portului paralel sunt de 8 bii. Aceste registre sunt accesibile prin instruciunile IN i
OUT n limbajul de asamblare sau prin funcii cum sunt inportb i outportb, care sunt puse la
dispoziie de unele medii de programare sau biblioteci pentru limbajul C.
Registrele portului paralel standard sunt prezentate n tabelul 1.1.

Tabelul 1.1. Registrele portului paralel standard.

Nume registru Offset R/W Funcie


Registru de date 0 W 8 ieiri LS TTL
Registru de stare 1 R 5 intrri LS TTL
Registru de control 2 W 4 ieiri TTL cu colector deschis

Observaii
Offset indic deplasamentul fa de adresa de baz a portului paralel.
Registrul de date poate fi citit n cazul tuturor porturilor, dar se poate utiliza pentru o operaie de
intrare numai n cazul porturilor bidirecionale.
Registrul de control poate fi citit n scopuri de testare. Valoarea citit trebuie s fie egal cu
valoarea nscris anterior n acest registru.
1. Portul paralel standard 3

ROM BIOS rezerv n memoria RAM patru cuvinte de 16 bii pentru adresa de baz a patru
porturi paralele, ncepnd de la adresa 0000:0408h. La pornirea sistemului, BIOS testeaz existena
porturilor paralele cu adresele de baz 3BCh, 378h i 278h (n aceast ordine), memornd adresele de
baz ale porturilor gsite n cuvinte consecutive din aceast tabel. Un port este detectat prin nscrierea
valorii AAh n registrul de date i citirea aceluiai registru; n cazul n care portul exist, este citit aceeai
valoare care a fost nscris. Pot exista confuzii n cazul n care una sau mai multe linii sunt inute n starea
logic 1 sau 0 de un echipament extern (sau dac portul se afl iniial n starea de nalt impedan). ROM
BIOS memoreaz numrul porturilor paralele gsite n cei doi bii superiori ai octetului de la adresa
0000:0411h (ca o valoare ntre 0 i 3).
Funciile BIOS pentru imprimant (accesate prin instruciunea int 17h) realizeaz asignarea
adreselor de baz la porturile paralele LPTn. Prima valoare din tabel este adresa de baz pentru portul
LPT1, a doua pentru LPT2, iar a treia pentru LPT3. Nu exist o adres standard pentru al patrulea port.
Prin schimbarea ordinii intrrilor n tabela BIOS se pot schimba adresele fizice care sunt asignate
porturilor LPT.
Asignarea tipic a adreselor de baz la porturile paralele LPT este indicat n tabelul 1.2.

Tabelul 1.2. Asignarea adreselor de baz la porturile paralele LPT.

Port paralel Adresa de baz


LPT1 378h
LPT2 278h

1.4. Semnalele portului paralel


Pentru prezentarea semnalelor portului paralel se utilizeaz urmtoarele convenii:
Litera n naintea numelui unui semnal indic un semnal activ n starea logic 0. Semnalele al
cror nume nu ncepe cu aceast liter sunt active n starea logic 1.
Conexiunea dintre bitul unui registru i pinul corespunztor este direct dac valoarea 1 a bitului
este asociat cu un semnal electric avnd valoarea logic 1 i inversat dac valoarea 1 a bitului
este asociat cu un semnal electric avnd valoarea logic 0. Inversarea se realizeaz prin hardware
de ctre logica portului.
Biii registrului de date sunt notai cu D0..D7, iar cei ai registrului de stare cu S3..S7, n funcie de
poziia lor. Biii registrului de control care sunt conectai la pini sunt notai cu C0..C3. Semnul
+, respectiv - ataat ca sufix unui bit indic faptul c bitul este direct, respectiv inversat
comparativ cu pinul de ieire sau de intrare cu care este asociat.
Semnalele portului paralel sunt prezentate n tabelul 1.3. Funcia se refer la semnalul aflat n
starea activ. Sunt indicate conexiunile la pinii conectorului DB-25 al calculatorului i la pinii conectorului
Centronics al imprimantei (n varianta care a fost standardizat de IEEE).

Tabelul 1.3. Semnalele portului paralel standard.

Pin Pin Nume Bit In


Funcie
DB-25 Centronics semnal registru Out
Activat de calculator pentru a indica prezena
1 1 nStrobe C0-
datelor valide pe liniile de date
2 2 Data0 D0+ Linia 0 de date
3 3 Data1 D1+ Linia 1 de date
4 4 Data2 D2+ Linia 2 de date
5 5 Data3 D3+ Linia 3 de date
6 6 Data4 D4+ Linia 4 de date
4 Sisteme de intrare/ieire

Pin Pin Nume Bit In


DB-25 Centronics semnal registru Funcie
Out
7 7 Data5 D5+ Linia 5 de date
8 8 Data6 D6+ Linia 6 de date
9 9 Data7 D7+ Linia 7 de date
Impuls negativ care indic recepia ultimului
10 10 nAck S6+
caracter de ctre imprimant
Activat de imprimant atunci cnd nu poate primi
11 11 Busy S7-
date (buffer plin, eroare)
12 12 PError S5+ Indic lipsa hrtiei
13 13 Select S4+ Indic starea operaional a imprimantei
Activat de calculator pentru ca imprimanta s
14 14 nAutoFd C1-
insereze automat caracterul LF dup CR
15 32 nFault S3+ Indic o condiie de eroare a imprimantei
16 31 nInit C2+ Activat pentru iniializarea imprimantei
17 36 nSelectIn C3- Activat pentru selectarea imprimantei
18 19 Masa pentru semnalul nStrobe
19 20, 21 Masa pentru semnalele D0, D1
20 22, 23 Masa pentru semnalele D2, D3
21 24, 25 Masa pentru semnalele D4, D5
22 26, 27 Masa pentru semnalele D6, D7
23 29 Masa pentru semnalele Busy, nFault
24 28 Masa pentru semnalele nAck, PError, Select
25 30 Masa pentru semnalele nAutoFd, nInit, nSelectIn
16 Masa electric (neconectat)
17 Masa mecanic (se conecteaz la carcasa DB-25)
15, 18, 33,
Pini neconectai
34, 35

Observaie
Direcia semnalelor (In, Out) este definit din punctul de vedere al calculatorului, cu excepia
semnalelor Select i nSelectIn, a cror direcie este definit din punctul de vedere al imprimantei.

1.5. Configuraia registrelor


Se prezint n continuare configuraia registrelor portului paralel standard.

Registrul de date (378h, 278h)

D7 D6 D5 D4 D3 D2 D1 D0
Data7 Data6 Data5 Data4 Data3 Data2 Data1 Data0

Scrierea unui octet n acest registru determin transmiterea valorii nscrise la pinii 2..9 (cu
excepia cazului n care portul este bidirecional i este setat n modul de intrare). Valoarea nscris va fi
memorat i va rmne stabil pn la nscrierea unei noi valori. Citirea acestui registru returneaz
valoarea care a fost nscris n prealabil n registru, dac bitul 5 al registrului de control (C5) este 0.
Atunci cnd bitul C5 este 1, valoarea citit reprezint starea pinilor 2..9 (numai la porturile bidirecionale).
1. Portul paralel standard 5

Registrul de stare (379h, 279h)

Acest registru poate fi doar citit (scrierea este ignorat).

S7 S6 S5 S4 S3 S2 S1 S0
Busy nAck PError Select nFault X X X

Bitul 7 (Busy): Conine valoarea inversat a semnalului Busy. Dac bitul Busy este 0, tiprirea la
imprimant este n curs sau bufferul imprimantei este plin (inversat).
Bitul 6 (nAck): Conine valoarea semnalului nAck. Imprimanta indic preluarea ultimului caracter
printr-un impuls negativ al acestui semnal, cu durata de aproximativ 10 s.
Bitul 5 (PError): Conine valoarea semnalului PError. Dac acest semnal este 1 logic, imprimanta
nu are hrtie.
Bitul 4 (Select): Conine valoarea semnalului Select. Dac acest semnal este 1 logic, imprimanta
este operaional.
Bitul 3 (nFault): Conine valoarea semnalului nFault. Dac acest semnal este 0 logic, a aprut o
eroare la tiprire sau imprimanta nu este operaional.
Biii 2..0 nu sunt utilizai (sunt nedefinii).

Registrul de control (37Ah, 27Ah)

C7 C6 C5 C4 C3 C2 C1 C0
X X Dir IRQEn nSelectIn nInit nAutoFd nStrobe

Biii 7..6 nu sunt utilizai (ignorai la scriere, nedefinii la citire).


Bitul 5 (Dir): La porturile bidirecionale (PS/2), acest bit indic direcia liniilor de date: 0 ieire;
1 intrare (nu exist un semnal extern asociat acestui bit).
Bitul 4 (IRQEn): Dac este setat la 1, un front cresctor al semnalului nAck va genera o cerere de
ntrerupere (nu exist un semnal extern asociat acestui bit).
Bitul 3 (nSelectIn): Este inversat, iar valoarea rezultat genereaz semnalul nSelectIn. Dac acest
semnal este setat la 1 logic, caracterele de control DC1 (11h) i DC3 (13h) pot activa i dezactiva
imprimanta (inversat).
Bitul 2 (nInit): Genereaz semnalul nInit. Prin setarea acestui semnal la 0 logic pentru cel puin 50
s, imprimanta va fi iniializat.
Bitul 1 (nAutoFd): Este inversat, iar valoarea rezultat genereaz semnalul nAutoFd. Dac acest
semnal este setat la 1 logic, imprimanta va trece la o linie nou dup recepionarea unui caracter
CR (inversat).
Bitul 0 (nStrobe): Este inversat, iar valoarea rezultat genereaz semnalul nStrobe. Prin setarea
acestui semnal la 1 logic pentru cel puin 1 s, se indic imprimantei c exist o nou dat valid
pe liniile de date (inversat).

1.6. Porturi bidirecionale


Seria de calculatoare IBM PS/2 a adugat posibilitatea utilizrii porturilor paralele n mod
bidirecional. Prin setarea bitului de direcie al registrului de control (C5 = 1), ieirile registrului de date
pot fi trecute n starea de nalt impedan, aceste ieiri fiind deconectate electric de la pinii conectorului.
Aceasta permite citirea n registrul de date a semnalelor TTL externe aplicate la pinii corespunztori.
6 Sisteme de intrare/ieire

Valorile nscrise n registrul de date sunt memorate, dar nu sunt transmise la pini. Porturile paralele care
funcioneaz n acest mod sunt numite porturi bidirecionale sau PS/2.
Calculatoarele de birou actuale dispun de porturi paralele integrate pe placa de baz, avnd mai
multe moduri de funcionare. De obicei, exist i un mod bidirecional compatibil PS/2. Selecia modului
se realizeaz printr-o setare pus la dispoziie de BIOS. Portul ECP, descris n lucrarea Nr. 2, permite mai
multe moduri de funcionare, printre care i modul PS/2, fiind posibil selectarea modului prin program.
Observaii
nainte de a ncerca utilizarea transferurilor bidirecionale prin setarea bitului de direcie al
registrului de control, se recomand verificarea faptului c ieirile registrului de date au trecut n
starea de nalt impedan. Aceast verificare se poate realiza prin nscrierea unor valori n
registrul de date i citirea coninutului acestui registru. Dac setarea bitului de direcie a avut
efect, valoarea citit din registru va fi diferit de cea nscris anterior, ceea ce confirm faptul c
portul este bidirecional.
Porturile paralele mbuntite (EPP, ECP) permit comunicaia bidirecional, dar nu prin
controlul direciei utiliznd bitul C5 al registrului de control. Deci, dac portul paralel este
ntr-unul din aceste moduri, este posibil ca setarea acestui bit s nu aib efect.
n cazul n care nu se dispune de un port paralel bidirecional, este totui posibil utilizarea
portului paralel unidirecional ca port de intrare. Prin nscrierea valorii FFh n registrul de date, orice
semnal TTL extern cu valoarea logic 0 va fi citit, probabil, ca 0 n registrul de date. Un semnal TTL
extern cu valoarea logic 1, sau lipsa unui semnal, va permite pinului s rmn la valoarea logic 1 i va
fi citit ca 1 n registrul de date. O asemenea utilizare a portului nu este ns recomandat, deoarece
foreaz circuitul utilizat pentru implementarea portului paralel i poate cauza deteriorarea acestuia. De
notat c, spre deosebire de porturile IBM originale, realizate cu circuite MSI TTL, cum este circuitul
74LS374, porturile paralele mai recente sunt implementate prin controlere aflate n setul de circuite de pe
placa de baz, cu caracteristici electrice i costuri de nlocuire diferite.
Metoda recomandat pentru utilizarea portului paralel unidirecional pentru intrare este folosirea
liniilor de stare ale portului. Exist un numr de 5 linii de stare, care permit transferul datelor de la un
echipament extern conectat la portul paralel. Starea acestor linii poate fi citit din registrul de stare, n
poziiile S7, S6, S5, S4 i S3. De notat c bitul S7 este inversat. Aceast metod nu permite ns
transferul simultan a 8 bii de date de la un echipament extern.

Figura 1.3. Utilizarea unui multiplexor 74LS157 pentru transferul datelor de la un echipament extern

O soluie la aceast problem const n transferul celor 8 bii de date n dou etape, liniile de date
ale echipamentului extern fiind conectate la liniile de stare ale portului paralel prin intermediul unui
multiplexor 2:1 cu 4 ci. Se poate utiliza, de exemplu, circuitul 74LS157; conectarea acestui circuit este
ilustrat n figura 1.3. Atunci cnd intrarea A / B a circuitului este 0 logic, sunt selectate liniile de intrare
1A, 2A, 3A i 4A, iar atunci cnd intrarea A / B este 1 logic, sunt selectate liniile de intrare 1B, 2B, 3B i
1. Portul paralel standard 7

4B. Selecia intrrilor se realizeaz cu unul din semnalele de control, de exemplu, cu semnalul nStrobe.
Ieirile Y ale circuitului sunt conectate la 4 din liniile de stare ale portului paralel. Cele dou valori de cte
4 bii sunt combinate apoi ntr-un octet prin program. Dezavantajul acestei soluii const n viteza redus.
O alt soluie de utilizare a portului paralel unidirecional pentru intrare const n folosirea a 4
linii ale registrului de control, i anume, a liniilor nStrobe, nAutoFd, nInit i nSelectIn. Aceste linii sunt
conectate la poziiile C0, C1, C2, respectiv C3, ale registrului de control. De obicei, pentru ieirile C0..C3
ale acestui registru se utilizeaz un buffer inversor cu colector deschis, iar ieirile sunt conectate la +5 V
prin rezistene (n mod obinuit, de 4,7 K). Aceste ieiri au dou stri posibile, 0 logic i starea de nalt
impedan. De aceea, un echipament extern poate fora aceste linii n starea logic 0, fr suprasolicitarea
circuitelor interfeei. Pentru utilizarea biilor C0..C3 ai registrului de control ca intrri, mai nti se vor seta
ieirile corespunztoare la 1 logic prin nscrierea valorii binare xxxx0100 n acest registru (aceasta se
datoreaz inversrii biilor C0, C1 i C3). Dup aceea, se va putea citi starea semnalelor externe aplicate la
pinii respectivi prin citirea registrului de control. Trebuie s se in cont de inversarea biilor C0, C1 i C3.
n cazul alegerii acestei soluii, poate apare o problem dac echipamentul extern este conectat la
portul paralel naintea iniializrii registrului de control prin program. De exemplu, dac echipamentul
dispune de ieiri cu tranzistoare n contratimp (totem-pole), va apare un conflict n cazul n care intrarea
este n starea 1 logic i portul ncearc trecerea acesteia n starea 0 logic. Pentru evitarea acestei probleme,
se pot insera drivere sau inversoare cu colector deschis pe liniile conectate la registrul de control.
Observaie
La unele porturi paralele, nu se utilizeaz circuite cu colector deschis pentru biii C0..C3 ai
registrului de control. n asemenea cazuri, pot apare conflicte ntre echipamentul extern i portul
paralel. Acelai lucru se poate ntmpla dac portul este trecut n modul EPP sau ECP, ieirile
registrului de control devenind atunci de tip totem-pole. De aceea, din motive de
compatibilitate, este preferabil utilizarea doar a liniilor de stare pentru intrare.
Utilizarea liniilor de control ale portului paralel poate fi combinat cu folosirea liniilor de stare ale
portului. Patru din liniile de date ale echipamentului extern sunt conectate la patru linii ale registrului de
stare, iar celelalte patru linii de date sunt conectate la liniile menionate anterior ale registrului de control.
Soluia este prezentat n figura 1.4, care ilustreaz i conectarea unor inversoare cu colector deschis pe
liniile de control.

Figura 1.4. Utilizarea liniilor de stare i de control pentru transferul datelor de la un echipament extern.

n cazul utilizrii oricrui port paralel bidirecional pentru intrare, se recomand trecerea ieirilor
n starea de nalt impedan de fiecare dat cnd portul este conectat la echipamente externe. Se pot
utiliza i rezistene pentru limitarea curentului. Anumite circuite utilizate pentru implementarea porturilor
paralele blocheaz bitul de control al direciei C5, pentru a preveni schimbarea accidental a direciei
(deblocarea poate fi realizat prin nscrierea unei valori ntr-un alt registru).
8 Sisteme de intrare/ieire

1.7. ntreruperi
Portul paralel standard poate genera o cerere de ntrerupere prin setarea bitului IRQEn din
registrul de control. Setarea acestui bit valideaz un buffer cu trei stri al liniei de ntrerupere IRQ, fiind
generat o ntrerupere la fiecare front cresctor al semnalului nAck. Pentru generarea ntreruperii trebuie
ca nivelul respectiv de ntrerupere s fie validat prin resetarea bitului corespunztor din registrul mtilor
de ntrerupere (cu adresa 21h) al controlerului de ntreruperi i8259.
n cazul imprimantelor conectate la portul paralel standard, BIOS i sistemele de operare
Microsoft Windows nu utilizeaz ntreruperi. Versiunile sistemului de operare OS/2 anterioare versiunii
3.0 (Warp) utilizau ntreruperi pentru tiprire, dar la versiunile urmtoare ntreruperile nu sunt necesare
(dei ele pot fi utilizate).
Primul port paralel (cu adresa de baz 378h) utilizeaz, de obicei, ntreruperea hardware de nivel
7 (IRQ 7), corespunztoare INT 0Fh. Aceast ntrerupere este utilizat i de unele plci de sunet, dar, de
obicei, nu apar conflicte ntre aceste plci i portul paralel. Al doilea port paralel (cu adresa de baz 278h)
utilizeaz n mod normal ntreruperea hardware de nivel 5 (IRQ 5), corespunztoare INT 0Dh. Acest
ntrerupere este utilizat i de unele plci de sunet sau plci de reea.

1.8. Protocolul Centronics


Majoritatea imprimantelor conectate la portul paralel standard utilizeaz protocolul de
comunicaie Centronics, elaborat de ctre firma cu acelai nume. n mod obinuit, acest protocol este
implementat pe calculator prin program. Diagrama de timp simplificat a protocolului Centronics este
ilustrat n figura 1.5.

Figura 1.5. Protocolul de comunicaie Centronics.

Mai nti, programul depune un octet pe liniile de date Data7..Data0. n continuare, programul
activeaz semnalul nStrobe prin trecerea acestuia n 0 logic, ateapt un timp de minimum 1 s, iar apoi
dezactiveaz semnalul nStrobe. De obicei, octetul de date este memorat de imprimant pe frontul
cresctor al semnalului nStrobe. Imprimanta semnaleaz starea sa ocupat pentru preluarea datelor prin
activarea semnalului Busy. Memorarea octetului este confirmat de imprimant prin dezactivarea
semnalului Busy i printr-un impuls negativ pe linia nAck, cu durata n jur de 5 s. Programul testeaz
starea imprimantei prin citirea semnalului Busy din registrul de stare i ateapt pn cnd semnalul Busy
devine inactiv. De multe ori, pentru simplitate, starea liniei nAck nu este testat de program. Impulsul
generat pe linia nAck de ctre imprimant poate fi utilizat pentru generarea unei cereri de ntrerupere.
Exist un alt mod de transfer denumit Fast Centronics, n care protocolul Centronics este
implementat prin hardware. Programul va trebui doar s nscrie octetul de date n registrul de date, iar
celelalte operaii vor fi efectuate n mod automat de ctre logica portului paralel.

1.9. Transferul datelor ntre calculatoare prin portul paralel


Exist trei moduri principale de conexiune ntre dou porturi paralele pentru transferul datelor
ntre dou calculatoare. Cel mai utilizat mod este Modul 1, n care datele sunt transferate pe 4 bii,
1. Portul paralel standard 9

conectnd biii D0..D4 (sau D3..D7) ai registrului de date din primul port cu biii S3..S7 ai registrului de
stare din cel de-al doilea port, i invers. Cei 4 bii de date (de exemplu, D0..D3) transmii de la un port
sunt citii de al doilea port (de exemplu, S3..S6); cellalt bit (D4/S7) poate fi utilizat pentru sincronizare
(Data Ready ca strob de date ntr-un sens sau Acknowledge n cellalt sens). Acest mod de conectare
funcioneaz cu oricare port standard. Este necesar implementarea unui protocol pentru controlul
direciei de transfer.
n tabelul 1.4 se prezint lista de conexiuni pentru un cablu care se poate utiliza pentru transferul
datelor n Modul 1 (exist i alte variante de conexiuni pentru acest mod). Varianta prezentat poate fi
utilizat i cu diferite programe pentru transferul datelor, ca INTERLNK, LapLink, FastLynx, Total
Commander (funcia Net PORT Connection to Other PC) sau Direct Cable Connection (din sistemele
de operare Microsoft Windows).

Tabelul 1.4. Lista de conexiuni pentru transferul n Modul 1.


Port 1 Pin Direcie Pin Port 2 Conexiune
D0+ 2 15 S3+ direct
D1+ 3 13 S4+ direct
D2+ 4 12 S5+ direct
D3+ 5 10 S6+ direct
D4+ 6 11 S7- inversat
S7- 11 6 D4+ inversat
S6+ 10 5 D3+ direct
S5+ 12 4 D2+ direct
S4+ 13 3 D1+ direct
S3+ 15 2 D0+ direct
Gnd 18..25 -- 18..25 Gnd (mas)

Modul 2 poate fi utilizat numai cu porturile bidirecionale, permind transferuri pe 8 bii. Portul
receptor trebuie s treac registrul de date n starea de nalt impedan (prin setarea bitului C5 la 1)
pentru a utiliza registrul de date ca registru de intrare.
n Modul 3 se utilizeaz pentru intrare 4 bii ai registrului de control i 4 bii ai registrului de stare.
Acest mod permite transferuri bidirecionale pe 8 bii cu oricare port standard. Biii registrului de control
utilizai ca intrri trebuie setai la 1: C0 = C1 = C3 = 0 (deoarece acetia sunt inversai) i C2 = 1. Exist i
posibilitatea utilizrii pentru intrare a 5 bii ai registrului de stare i a 3 bii ai registrului de control. Ieirea
rmas a registrului de control va fi conectat cu ieirea corespunztoare a registrului de control din al
doilea port. Dac aceast ieire este implicit n starea 1 logic, fiecare port o poate trece n starea 0 logic.

1.10. Accesul la porturi sub sistemele de operare Windows

1.10.1. Problema accesului la porturile de I/E

Spre deosebire de sistemele de operare Windows 95/98/Me, sistemele de operare Windows


NT/2000/XP/Vista vor genera o excepie de instruciune privilegiat n cazul n care se ncearc accesul la
un port de I/E dintr-un program care ruleaz n modul utilizator. Aceasta se datoreaz restriciilor impuse
de procesorul care funcioneaz n modul protejat.
n modul protejat, accesul la porturile de I/E este controlat de nivelul privilegiilor de I/E (IOPL
I/O Privilege Level) din registrul indicatorilor de condiii (EFLAGS) i de harta drepturilor de I/E din
segmentul de stare al procesului TSS (Task State Segment).
Procesorul recunoate patru nivele de privilegiu ale programelor, de la 0 la 3, 0 fiind nivelul cel
mai privilegiat. Cei doi bii IOPL indic nivelul de privilegiu pe care trebuie s l aib un proces pentru a
putea executa instruciunile privilegiate; asemenea instruciuni sunt i cele de I/E IN i OUT. De exemplu,
10 Sisteme de intrare/ieire

dac ambii bii IOPL sunt 1, instruciunile privilegiate pot fi executate numai de procesele cu nivelele de
privilegiu 0 i 1.
n sistemele de operare Windows NT/2000/XP/Vista, se utilizeaz numai dou nivele de
privilegiu din cele patru ale procesorului. Programele n mod utilizator ruleaz cu nivelul de privilegiu 3,
n timp ce nucleul sistemului de operare i driverele de dispozitive ruleaz cu nivelul de privilegiu 0. De
aceea, instruciunile privilegiate pot fi executate de programele utilizator doar prin intermediul sistemului
de operare sau al driverelor de dispozitiv.
Harta drepturilor de I/E conine cte un bit pentru fiecare adres de I/E. Dac bitul corespunztor
unei adrese de I/E este setat, o instruciune de I/E cu acea adres va genera o excepie, iar n caz contrar
operaia de I/E va fi permis. Aceast hart poate fi utilizat pentru a permite anumitor programe utilizator
accesul la anumite porturi de I/E. Procesorul testeaz harta drepturilor de I/E atunci cnd se execut o
instruciune de I/E ntr-un proces, iar procesul respectiv nu are un nivel de privilegiu suficient pentru
execuia instruciunii.
Pe lng restriciile impuse de ctre sistemele de operare asupra accesului la porturi, o alt
problem este c cele mai multe medii de programare actuale pentru limbajele de nivel nalt nu mai pun la
dispoziie funcii pentru accesul direct la porturile de I/E, funcii existente n versiunile anterioare ale
acestor medii de programare.
Exist dou soluii la problema accesului la porturile de I/E sub sistemele de operare Windows
NT/2000/XP/Vista. Prima soluie este de a se utiliza un driver de dispozitiv care ruleaz cu nivelul de
privilegiu 0 i care realizeaz accesul la porturi. Datele sunt transferate ntre un program utilizator i
driverul de dispozitiv prin intermediul apelurilor funciei sistem DeviceIoControl; operaia care trebuie
executat de driver este specificat printr-un cod de control IOCTL (I/O Control). Pentru simplificarea
programelor utilizator, driverul poate pune la dispoziie i unele funcii de I/E similare cu funciile
inportb i outportb puse la dispoziie de versiunile anterioare ale mediilor de programare pentru
limbajul C. De exemplu, aceste funcii pot fi furnizate sub forma unor biblioteci DLL (Dynamic Link
Library). Astfel, nu va mai fi necesar apelul direct al funciei sistem DeviceIoControl.
Aceast soluie este cea recomandat pentru accesul la porturile de I/E. Totui, dezavantajul
utilizrii unui asemenea driver de dispozitiv este c eficiena transferurilor de date va fi redus. La fiecare
apel al unei funcii pentru citirea sau scrierea unui octet sau cuvnt, procesorul trebuie s comute de la
nivelul de privilegiu 3 la nivelul 0, iar dup execuia operaiei s se realizeze comutarea invers. ns,
driverul poate pune la dispoziie i funcii pentru citirea i scrierea unui bloc de date, n locul citirii i
scrierii unui singur octet.
A doua soluie pentru accesul la porturile de I/E const n modificarea hrii drepturilor de I/E
pentru a permite unui anumit proces s acceseze unele porturi. Dei aceast metod nu este recomandat,
ea permite rularea unor aplicaii existente sub sistemele de operare Windows NT/2000/XP/Vista.

1.10.2. Driverul PortTalk


Exist mai multe drivere disponibile pentru accesul la porturile de I/E sub sistemele de operare
Windows NT/2000/XP/Vista. Pentru aplicaiile de laborator se va utiliza driverul PortTalk dezvoltat de
firma Beyond Logic. Versiunea curent a driverului este 2.2, care este disponibil la urmtoarea adres:
http://www.beyondlogic.org/porttalk/porttalk22.zip
Acest driver pune la dispoziie funcii n limbajul C sau C++ pentru citirea unui octet de la un port
de intrare i scrierea unui octet la un port de ieire. n varianta sa actual, driverul nu permite operaii de
I/E cu porturi de 16 bii. Pe lng aceste funcii, driverul mai conine funcii pentru modificarea hrii
drepturilor de I/E a unui proces. n plus, pachetul de instalare mai conine programul AllowIo.exe, care
permite unei aplicaii existente accesul la porturile ale cror adrese sunt specificate ca parametri n linia de
comand.
n mod obinuit, driverul PortTalk nu necesit o instalare explicit. Atunci cnd este rulat un
program utilizator care apeleaz funcia OpenPortTalk() a driverului, dac driverul nu poate fi
accesat, se va ncerca instalarea i lansarea acestuia n mod automat. Pentru ca aceast operaie s se
realizeze corect, este necesar ca fiierul porttalk.sys s se afle n acelai director cu programul
1. Portul paralel standard 11

utilizator rulat, iar utilizatorul trebuie s aib drepturi de administrator. Dup instalarea driverului,
acesta va fi accesibil pentru orice utilizator i nu vor fi necesare drepturi de administrator.
Se recomand ns instalarea prealabil a driverului prin executarea urmtoarelor operaii:
Se copiaz fiierul porttalk.sys din pachetul de instalare n directorul care conine driverele
sistemului. Acest director poate fi, de exemplu, C:\WINDOWS\system32\drivers\.
Se execut un clic dublu pe fiierul porttalk.reg din pachetul de instalare pentru adugarea
cheilor necesare n baza de date a sistemului de operare (Registry).
Se repornete sistemul, iar driverul va fi ncrcat i lansat n execuie n mod automat.
Pe pagina laboratorului exist un exemplu de utilizare a funciilor inportb i outportb ale
driverului PortTalk ntr-o aplicaie Windows scris n limbajul C. Aplicaia TestPort, disponibil n
arhiva TestPort.zip, testeaz porturile paralele cu adresele de baz 378h i 278h, afind dac aceste
porturi exist i dac ele funcioneaz corect.
Presupunnd c driverul PortTalk este instalat, pentru utilizarea funciilor inportb i
outportb ntr-o aplicaie Windows sunt necesare urmtoarele operaii:
1. Dup ce se creeaz proiectul aplicaiei utiliznd un mediu de programare ca Microsoft Visual
Studio, se copiaz fiierele PortTalk_IOCTL.c i PortTalk_IOCTL.h n directorul proiectului
aplicaiei. Aceste fiiere sunt disponibile n arhiva TestPort.zip.
2. Se insereaz linia urmtoare n fiierul surs n care se vor utiliza funciile PortTalk:
#include "PortTalk_IOCTL.c"
3. nainte de utilizarea funciilor de I/E se apeleaz funcia OpenPortTalk ():
OpenPortTalk ();
4. La sfritul aplicaiei se apeleaz funcia ClosePortTalk ():
ClosePortTalk ();

n fiierul PortTalk_IOCTL.c, funciile inportb i outportb sunt definite astfel:


void outportb (unsigned short PortAddress, unsigned char byte);
unsigned char inportb (unsigned short PortAddress);

Observaii
Fiierele PortTalk_IOCTL.c i PortTalk_IOCTL.h nu trebuie incluse n proiectul aplicaiei, ci doar
copiate n directorul proiectului.
Pentru o aplicaie Windows obinuit (cu meniuri), nu se va utiliza fiierul pt_ioctl.c din
pachetul de instalare PortTalk. Acest fiier poate fi utilizat doar n aplicaii de tip consol.
Fiierul modificat pentru aplicaiile Windows este PortTalk_IOCTL.c.
Programul AllowIo.exe, care permite modificarea hrii drepturilor de I/E pentru programe
existente, poate fi lansat n execuie dintr-o linie de comand. Parametrii si sunt numele programului
executabil pentru care se solicit accesul la porturi i lista porturilor de I/E la care se dorete accesul.
Prin specificarea unei adrese de I/E, se va acorda accesul la 8 porturi consecutive ncepnd de la acea
adres. De exemplu, pentru a solicita accesul programului Port.exe la toate registrele portului paralel
LPT1 se va introduce comanda:
allowio Port.exe 0x378
Pentru a solicita accesul la toate porturile de I/E se poate specifica opiunea /a:
allowio Port.exe /a
12 Sisteme de intrare/ieire

1.11. Aplicaii
1.11.1. Rspundei la urmtoarele ntrebri:
a. Cum se poate detecta existena unui port paralel standard?
b. Cum se poate verifica dac un port paralel este bidirecional (de tip PS/2)?
c. Care sunt posibilitile de utilizare ale portului paralel standard pentru intrare?
1.11.2. Studiai aplicaia TestPort, care este disponibil pe pagina laboratorului n arhiva
TestPort.zip. Aceast aplicaie testeaz existena porturilor paralele cu adresele de baz 378h i 278h.
Utiliznd mediul de programare Microsoft Visual Studio 2008, creai un nou proiect n directorul de
lucru, adugai n proiect fiierele surs ale aplicaiei TestPort, iar apoi construii aplicaia i verificai
funcionarea acesteia. Pentru aceasta, executai urmtoarele operaii:
n fereastra mediului de programare Microsoft Visual Studio 2008, selectai File New
Project. n panoul Project types selectai General, iar n panoul Templates selectai Empty
Project. n cmpul Name introducei numele proiectului, iar n cmpul Location selectai
calea ctre directorul n care se va crea proiectul (un subdirector al directorului D:\Student\).
Selectai apoi butonul OK.
Copiai n directorul proiectului fiierele cu urmtoarele extensii ale aplicaiei TestPort:
.cpp, .c, .h, .rc, .ico.
Revenii n fereastra Microsoft Visual Studio 2008 i selectai Project Add Existing Item.
Selectai fiierele copiate anterior pentru a fi adugate n proiect, iar apoi selectai butonul
Add.
Selectai Build Build Solution i urmrii ca aplicaia s fie construit fr erori, iar apoi
verificai funcionarea aplicaiei.
1.11.3. Completai aplicaia anterioar cu testarea tipului porturilor paralele i afiarea acestui
tip: port unidirecional (sau setat n modul standard), respectiv port bidirecional (PS/2). Verificai
funcionarea aplicaiei pentru ambele setri ale tipului portului paralel (setri care se pot realiza din
BIOS).
1.11.4. Scriei o aplicaie pentru transferul datelor ntre dou calculatoare folosind un cablu cu
lista de conexiuni specificat n tabelul 1.4 (Modul 1). Concepei un protocol pentru sincronizarea ntre
surs i destinaie. Pentru unul din calculatoare, scriei un program de transmisie care preia textul dintr-o
fereastr de editare i l transmite la portul paralel. Utilizai fiierul de definiii pentru portul paralel
LptDef.h i programul exemplu GetText pentru preluarea textului dintr-o fereastr de editare, ambele
disponibile pe pagina laboratorului n arhivele LptDef.zip, respectiv GetText.zip. Pentru al doilea
calculator, scriei un program de recepie care citete cte un caracter de la portul paralel, memoreaz
caracterele ntr-un buffer, iar atunci cnd recepioneaz o linie complet de text, indicat prin caracterul
LF (0Ah), afieaz linia n fereastra aplicaiei. Pentru testarea acestor programe, efectuai urmtoarele
operaii.
Oprii ambele calculatoare care vor fi utilizate pentru transferul de date.
Conectai un cablu care conine conexiunile specificate n tabelul 1.4 la porturile paralele ale
celor dou calculatoare. Important: Nu conectai calculatoarele printr-un cablu paralel
obinuit, pentru c se pot distruge porturile paralele ale acestora.
Pornii calculatoarele care vor fi utilizate pentru transferul de date.
Pe calculatorul care va fi utilizat ca destinaie, lansai programul de recepie i selectai
operaia de recepie din meniu.
Pe calculatorul care va fi utilizat ca surs, lansai programul de transmisie, deschidei un fiier
text, dup care selectai operaia de transmisie din meniu.
1. Portul paralel standard 13

1.11.5. ntocmii lista de conexiuni a unui cablu care se poate utiliza pentru transferuri de date n
Modul 3. Scriei o aplicaie pentru transferul datelor ntre dou calculatoare utiliznd acest mod.
1.11.6. Scriei un program care citete de la portul paralel o combinaie de patru cifre binare i
scrie la portul paralel de ieire codul pentru afiajul cu apte segmente corespunztor cifrei hexazecimale
citite, conform urmtoarelor specificaii:
Se citete registrul de stare cu adresa 379h;
Dac semnalul nFault este activ, atunci cei patru bii se citesc serial la fiecare impuls negativ
al semnalului nAck, folosind bitul 7 al registrului de date cu adresa 378h ca bit de date;
n caz contrar, cei patru bii se citesc n paralel pe liniile Busy, nAck, PError i Select (se va
ine cont de semnalele inversate).

Bibliografie
[1] Baruch, Z., Sisteme de intrare/ieire, ndrumtor de lucrri de laborator, Editura U.T.PRES,
Cluj-Napoca, 1998.
[2] Peacock, C., PortTalk A Windows NT I/O Port Device Driver, Beyond Logic, 2005,
http://beyondlogic.org/porttalk/porttalk.htm.
[3] Peacock, C., Interfacing the Standard Parallel Port, Beyond Logic, 2005,
http://beyondlogic.org/spp/parallel.htm.
[4] Rosch, W. L., Hardware Bible, Sixth Edition, Que Publishing, 2003.

S-ar putea să vă placă și