Introducere în comunicaţii seriale
Comunicaţiile seriale sunt utilizate pentru transferul de date la distanţe mari, pentru că o comunicare paralelă necesită prea multe fire. Datele seriale primite de la un modem sau de la alte dispozitive sunt convertite în format paralel pentru a putea fi transferate pe magistrala de date a PC-ului.
Echipamentul pentru comunicaţii seriale poate fi divizat în simplex, half-duplex şi full-duplex. Într-o comunicaţie serială simplex se transmit informaţii într-o singură direcţie (ex. staţie radio comercială). Half-duplex presupune faptul că datele pot fi transmise în orice direcţie între două sisteme, dar nu în acelaşi timp. Într-o transmisie full-duplex fiecare sistem poate transmite şi primi date în acelaşi timp.
Există două căi de transmitere a datelor seriale: sincron şi asincron. În transmisia sincronă datele sunt trimise în blocuri, transmiţătorul şi receptorul sunt sincronizate prin unul sau mai multe caractere speciale numite caractere sync.
Portul serial al PC-ului este un dispozitiv asincron, pe care îl vom descrie mai jos. Pentru transmisia asincronă, un bit de start identifică începutul caracterului ce se transmite şi unul sau doi biţi identifică finalul acestuia, nefiind necesară nici un fel de altă sincronizare. Biţii de date sunt trimişi către receptor după bitul de start. Bitul cel mai puţin semnificativ este transmis primul. Un caracter de dată constă de obicei din 7 sau 8 biţi. În concordanţă cu configuraţia transmisiei, un bit de paritate este transmis după fiecare caracter transmis. El este utilizat pentru a depista erorile din caracterele recepţionate. În final, sunt transmişi 1 sau 2 biţi de stop.
Descrierea portului
Portul serial al PC-ului este compatibil cu standardul RS-232C. Acest standard a fost proiectat în anul 1960 pentru a realiza comunicaţia dintre un echipament terminal de date sau DTE (PC-ul în acest caz) şi un echipament de comunicare de date ori DCE (în mod normal un modem).
Standardul presupune prezenţa a 25 de pini, conectorul DTE trebuind să fie tată, iar conectorul DCE mamă. Cei mai des utilizaţi conectori sunt DB-25 tată, dar nu sunt utilizaţi toţi cei 25 de pini. Din această cauză multe PC-uri moderne utilizează conector DB-9 tată. Se pot observa în spatele PC-ului mai mulţi conectori de acest fel. Nivelul tensiunilor pentru semnalele din conector sunt cuprinse între -3V şi +15V. Valorile de tensiune cel mai des folosite sunt +12V şi -12V.
Semnalele cele mai utilizate sunt listate în continuare.
/DTR (Data-Terminal-Ready): PC-ul comunică modemului că este în funcţiune şi este pregătit să transmită date.
/DSR (Data-Set-Ready): Modemul comunică PC-ului că este în funcţiune şi este pregătit să transmită sau să primească date.
/RTS (Request-To-Send): PC-ul setează acest semnal când are pregătit un caracter pentru a-l transmite.
/CD (Carrier-Detect): Modemul setează acest semnal când detectează computerul.
/CTS (Clear-To-Send): Modemul este pregătit pentru a transmite datele. Computerul va începe să transmită date spre modem.
TxD: Modemul primeşte date de la computer.
RxD: Modemul transmite date spre PC.
Circuitele integrate care convertesc date seriale în format paralel şi vice versa sunt denumite UART (Universal Asynchronous Receiver-Transmitter). Un astfel de circuit tipic pentru PC este Intel 8251A, ce poate fi programat să lucreze sincron sau asincron.
Opt biţi de date (D0-D7) conectează 8251A la magistrala de date a PC-ului. Intrarea (/CS) validează circuitul în momentele de comunicaîie cu procesorul.
Circuitul UART are două adrese interne, o adresă de control şi o adresă de date. Adresa de control este selectată când tensiunea la intrarea C-/D este “1” logic. Adresa de date este selectată când tensiunea la intrarea C-/D este “0” logic. Semnalul RESET resetează circuitul UART. Când semnalul /RD este în starea “0” logic, computerul citeşte un octet de control sau de date. Semnalul /WR permite computerului să scrie un octet. Ambele semnale sunt conectate la semnalele cu aceleaşi nume din magistrala de comenzi a sistemului.
Circuitul UART include patru regiştri interni:
THR: Registru temporar de ieşire.
TSR: Registru de ieşire.
RDR: Registru de intrare.
RSR: Registru temporar de intrare.
Fiecare caracter ce trebuie să fie transmis este stocat în registrul THR. Circuitul UART adaugă biţii de start şi stop. Apoi, se efectuează copierea tuturor biţilor (date, start şi stop) în registrul TRS. Pentru a încheia procesul, biţii sunt trimişi pe linie prin semnalul TD.
Fiecare caracter primit pe linia RD este stocat în registrul RSR. Biţii de start şi de stop sunt eliminaţi şi UART-ul scrie caracterul în registrul RDR. În final, caracterul este citit de PC.
Adresarea portului
Există două posibilităţi de adresare a portului serial, prin întreruperea 14H BIOS şi prin întreruperea 21H DOS.
Întreruperea 14H BIOS utilizează patru funcţii pentru programarea portului serial. Fiecare funcţie este selectată prin stabilirea unei valori în registrul AH al microprocesorului. Vom lista cele patru funcţii mai jos:
Funcţia 00H: Iniţializează portul serial şi setează viteza, numărul biţilor de date şi stop, precum şi parametrii de paritate.
Funcţia 01H: Trimite un caracter spre portul serial specificat.
Funcţia 02H: Citeşte un caracter de la portul serial specificat.
Funcţia 03H: Preia starea portului serial specificat.
Există trei funcţii în întreruperea 21H DOS legate de operaţiile portului serial:
Funcţia 03H: Citeşte un caracter de la portul serial COM1.
Funcţia 04H: Scrie un caracter la portul serial COM1.
Funcţia 40H: Este o funcţie obişnuită de ieşire pentru toate fişierele şi dispozitivele care utilizează handle access. Această funcţie trimite un număr de biţi de la buffer către dispozitivul specificat.
Programarea portului
Programul arată cum se efectuează comunicarea între două PC-uri prin portul serial. În pagina WEB a ziarului nostru puteţi găsi la rubrica Download programul privind programarea portului serial.