Descrierea portului.
Portul paralel este proiectat pentru a conecta o imprimantă la computer. Este utilizat pentru CPU pentru a trimite date către imprimantă. În această interfaţă se regăsesc atât semnale de intrare cât şi de ieşire. Scopul acestor semnale este de a avertiza computerul asupra stării imprimantei şi de a o controla. Opt biţi de date transferă toate informaţiile trimise la fiecare impuls de ceas.
Hardware-ul acestui port este format din 8 biţi de date ieşiri, 5 biţi de control intrări şi 5 biţi de control ieşiri. Semnalele de control sunt listate mai jos:
Ieşiri:
STROBE/: Comunică imprimantei când cei opt biţi de date sunt gata pentru a fi citiţi. Este trecut pe nivelul logic “0” când datele sunt pregătite.
INIT/: Resetează imprimanta.
SLCT IN/: Selectează imprimanta când acest semnal ajunge la nivelul logic “0”.
AUTO FD/: Comunică imprimantei să imprime o linie goală urmată de revenirea pe poziţia de repaus a capului de printare.
D0-D7: Biţi de date.
Intrări:
ACK/: Comunică CPU-ului faptul că datele au fost corect recepţionate.
BUSY: Imprimanta setează acest semnal când buffer-ul de recepţie este plin. Computerul va înceta să mai transmită date.
SLCT: Comunică computerului prezenţa imprimantei.
ERROR/: A survenit o eroare. CPU nu mai transmite date.
PE: Imprimanta nu mai are hârtie.
Toate aceste semnale apar la un conector cu 25 pini. Toţi biţii prezintă nivele logice TTL.
Adresarea portului
(vezi Tabelul 1.1)
BIT FUNCTION PIN
D0 data 0 2
D1 data 1 3
D2 data 2 4
D3 data 3 5
D4 data 4 6
D5 data 5 7
D6 data 6 8
D7 data 7 9
Sub sistemul de operare MS-DOS se pot gestiona trei porturi paralele denumite LPT1, LPT2 şi LPT3. Deci, putem găsi trei adrese dedicate acestor porturi în memoria PC-ului. Vom studia pentru început adresele dedicate LPT1. Fiecare port paralel utilizează trei adrese ale listei I/O. Pentru LPT1 aceste adrese sunt 378H, 379H şi 37AH.
Portul 378H: La această adresă CPU scrie datele care urmează a fi transmise către imprimantă. Portul este unul de ieşire. Cei opt biţi de date (D0-D7) apar în conectorul de ieşire. În tabelul 1.1 putem observa care pini ai conectorului sunt utilizaţi.
Portul 379H: Acesta este un port de intrare. Semnalele conţinute sunt utilizate de către CPU pentru a afla starea imprimantei. Locaţia acestor biţi este listată în tabelul 1.2.
Data Bits Table
BIT FUNCTION PIN
D0 not used
D1 not used
D2 not used
D3 ERROR/ 15
D4 SLCT/ 17
D5 PE 12
D6 ACK/ 10
D7 BUSY/ 11
Portul 37AH: În acest port computerul scrie semnalele care controlează imprimanta. Prin urmare, acesta este un port de ieşire, vezi tabelul 1.3.
Data Bits Table
Control Bits Table
BIT FUNCTION PIN
D0 STROBE 1
D1 AUTO FD 14
D2 INIT/ 16
D3 SLCT IN/ 17
D4 Habilitation IRQ7
D5 not used
D6 not used
D7 not used
Computerul are trei porturi LPT. Adresele semnalelor de control şi de date pentru fiecare port LPTn sunt listate mai jos. Fiecare port lucrează în acelaşi fel ca şi LPT1.
După cum se poate observa, portul paralel este capabil să controleze canalul de întreruperi IRQ7l. Aceasta este o calitate de bază a portului. În continuare vom prezenta modul de utilizare a acestui semnal.
Adresses of LPTn Tabelul 1.4
PORT DATA STATUS CONTROL
LPT1 378H 379H 37AH
LPT2 278H 279H 27AH
LPT3 3BCH 2BDH 3BEH
Programarea portului
Programele de mai jos sunt exemple despre cum se poate programa portul paralel. Sunt toate compilate cu compilatorul Borland C++ 3.1.
Primul program arată cum să transmiţi un octet către adresele de ieşire ale portului paralel. Este o operaţie foarte uşoară. Funcţia outportb(); trimite un octet către un port I/O specificat. Primul parametru al funcţiei este adresa portului în care se scrie un bit. Al doilea parametru este valoarea octetului ce se transmite. Ambii parametri pot fi definiţi ca variabile. În acest caz primul parametru trebuie să fie de tip unsigned int, iar cel de-al doilea de tip unsigned char.
#include
#include
#include
/********************************************/
/*This program set the parallel port outputs*/
/********************************************/
void main (void)
{
clrscr();
outportb(0x378,0xff);
outportb(0x37a,0xff);
getch();}
Cel de-al doilea exemplu arată cum se poate efectua citirea unui octet de la adresa de intrare a portului paralel. Funcţia principală este utilizată pentru a arăta valoarea octetului pe ecran. Funcţia inportb(); citeşte un octet de la adresa I/O specificată de computer. Parametrul trebuie să fie de tip unsigned int.
#include
#include
#include
/***********************************/
/*This function read parallel port inputs*/
/***********************************/
int Read_Input()
{int Byte;
Byte=inportb(0x379);
return Byte;}
void main (void)
{int PP_Input;
clrscr();
PP_Input = Read_Input;
printf(“%d”,var);
getch();}