Sunteți pe pagina 1din 11

Sisteme cu microprocesoare

Interfee seriale. Circuitul INTEL 8251

Lucrarea 6

P.Lucrare.06.A
Interfete seriale. Circuitul INTEL 8251

Coninut
1. Introducere ......................................................................................................................2
1.1. Scop .........................................................................................................................2
2. INTERFEE SERIALE. Circuitul INTEL 8251.................................................................2
2.1. Cuvinte de control.....................................................................................................6
2.1.1. Cuvntul 1 de comand - mod asincron (OUTPUT, la portul OUS2) ...............6
2.1.2. Cuvntul 2 de comand - mod asincron (OUTPUT la portul OUS2) ................6
2.1.3. Cuvntul de stare (INPUT, de la portul IUS2)...................................................6
2.2. Cuvinte de date (porturile OUS1, IUS1) ...................................................................6
2.3. Porturile de Comunicaie Serial la calculatoarele IBM-PC Compatibile..................7
3. Aplicaii ............................................................................................................................9
3.1. Exemplu de programare a portului serial COM2 ......................................................9
3.2. ntrebri ..................................................................................................................10
3.3. Probleme ................................................................................................................11

Lista de figuri
Figura 6. 1 Transmisia paralela a datelor.................................................................................3
Figura 6. 2 Transmisia seriala a datelor ...................................................................................3
Figura 6. 3 Structura informaiei seriale transmise...................................................................4
Figura 6. 4 Legarea serial a dou echipamente.....................................................................7

1. Introducere
1.1. Scop
Transmisie i recepie de date utiliznd circuitul Intel 8251.

2. INTERFEE SERIALE. Circuitul INTEL 8251


n mod uzual la un sistem cu microprocesor apare necesitatea schimbului de informaii
ntre sistem i utilizator, sau chiar ntre dou sisteme distincte. n mod natural informaia
schimbat reprezint cuvinte de date. O soluie simpl ar putea-o constitui aa-numita
transmitere n paralel a datelor. De exemplu, la un sistem ce are cuvntul de date de 8 bii,
transmisia paralela a datelor nseamn transmiterea simultan a datelor prin intermediul unui
cablu format din 8 conductori, fiecare conductor purtnd un bit, ca n Figura 6. 1.

L.6 - 2/11
Interfete seriale. Circuitul INTEL 8251

Sistem emitator Sistem receptor

b0 b0
b1 b1
b2 b2
b3 b3
b4 b4
b5 b5
b6 b6
b7 b7
Linie de transmisie
paralela
Figura 6. 1 Transmisia paralela a datelor

Problema este c transmiterea datelor ntre dou calculatoare sau ntre un calculator
i o consol nu se poate face pe distane mai mari de civa metri n paralel. Motivele ar fi:
problemele deosebite legate de ecranarea acestor cabluri, preul de cost ridicat. Cu alte
cuvinte, nu se pot - sau nu este convenabil - realiza "magistrale" de date care s permit
transferul simultan al tuturor biilor cuvintelor de date ntre dou asemenea echipamente. Se
utilizeaz n mod frecvent interfee speciale care transform informaia paralel - cuvntul de
date - ntr-o succesiune de impulsuri, transmise pe un singur fir de legtur (vezi Figura 6. 2)
n mod serial.

Registru de deplasare Registru de deplasare


b0 b0
b1 b1
b2 b2
b3 b3
b4 b0 b1 b2 b3 b4 b5 b6 b7 b4
b5 b5
b6 b6
b7 Linie seriala b7

Figura 6. 2 Transmisia seriala a datelor

Evident, la celalalt echipament, un circuit similar, cu funcionare complementar va


recepiona informaia serial transformnd-o ntr-o reprezentare paralel. Deci transmisia n
acest mod se face cu viteza mai mic dect transmisia paralel, nu mai apar probleme de
zgomot, iar preul echipamentelor este mult mai sczut. Transmisia serial se va face prin
emiterea unor impulsuri de tensiune, cu doua nivele, corespunztoare valorilor logice "0" sau
"1" ale biilor ce se transmit. Deasemenea, durata acestor pulsuri este fix, fiind fixat de
semnalul de "ceas", care va impune viteza de serializare a datelor. Este evident ca pentru o
funcionare corect va fi necesar ca ambele circuite, att cel emitor (transmitor) ct i
receptorul, s funcioneze cu aceeai frecven a ceasului. De aceea aceste viteze de

L.6 - 3/11
Interfete seriale. Circuitul INTEL 8251

transmisie/recepie serial sunt standardizate. Ele se msoar n numrul de bii ce se


transmit/receptioneaz pe secund, unitate numit baud. Viteze standard tipice sunt: 110,
300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 de baud. Exist dou
moduri principale de transmisie a datelor: modul asincron (cel mai utilizat) i modul sincron.
Structura mai detaliat a informaiei seriale transmise la unitatea unui cuvnt de date
este prezentat n Figura 6. 3. Trebuie remarcat c semnalul de ieire serial se afl n
starea "1" cnd nu se transmite nimic.

d0 d1 d2 d3 d4 d5 d6 d7 biti de stop

bit bit
de de
start paritate
perioada semnalului
de ceas
Figura 6. 3 Structura informaiei seriale transmise

Deoarece momentul transmisiei este declanat n mod asincron, pentru a se putea


semnaliza nceperea transmisiei, ntotdeauna, primul bit transmis are valoarea logica "0" i
se numete bit de start (vezi Figura 6. 3). Acesta va declana la receptor, operaia de
recepie i deserializare a urmtorilor bii, ce reprezint informaia propriu-zis ce se
transmite (b0 pn la b7 n Figura 6. 3). Deasemeni, din raiuni ce in de viteza de lucru a
acestor echipamente, transmisia se va ncheia cu un numr precizat (cel puin 1) de bii de
stop (valoarea logica "1"). Abia apoi se va putea emite eventual un alt cuvnt de date, n
aceeai succesiune a operaiilor.

Observaii
1. In figura 5, cuvntul de date transmis corespunde valorii binare
1 0 0 0 1 0 1 1 sau hexazecimale 8BH
(bit7) (bit0)

2. Se observa ca informaia "util" este format din 8 bii (bo-b7), ceilali 4 bii (start,
paritate + 2 stop),"consumnd" din timpul de transmisie i fcnd ca acest protocol
(mod) s nu fie prea eficient. O posibilitate de mbuntire a acestuia ar putea s
par "lungirea" cuvntului de date. Trebuie spus ns ca la acest protocol, att
receptorul ct i emitorul au propriul lor cuvnt de ceas. Chiar daca ele sunt
programate s funcioneze la aceeai viteza, practic dup o anumit perioad de timp
ele se desincronizeaz fapt ce conduce la apariia erorilor de transmisie. S-a
demonstrat statistic ca o lungime de 8 bii a cuvntului de date este optima pentru
acest protocol.

3. Pentru o mai bun sincronizare a transmisiei/recepiei se utilizeaz uneori un semnal


de ceas al circuitului de serializare, cu o frecven mai mare dect cea de
transmisie/recepie, uzual de 16 sau 64 de ori, divizarea suplimentar fcndu-se n
circuitul de serializare.

L.6 - 4/11
Interfete seriale. Circuitul INTEL 8251

4. Intr-un mod oarecum diferit se efectueaz operaiile in aa numitul mod sincron de


lucru, posibil cu unele circuite de interfaa serial. Principial ns, lucrurile sunt
similare, doar protocolul dialogului ntre transmitor si receptor este mai complicat.
Principal diferena consta n apariia unei linii suplimentare care poarta informaia de
ceas, furnizata de obicei de transmitor. Aceasta face ca att receptorul cit si
transmitorul sa funcioneze cu acelai ceas, deci sa se reduc erorile de transmisie.
Natural apariia unei linii suplimentare creste probabilitatea de apariie a zgomotului
cit si costul ei.

5. Este frecvent utilizat, naintea bitului de stop, un "bit de paritate", care permite
verificarea corectitudinii transmiterii informaiei. Astfel, pentru "paritate para", suma
modulo 2 a tuturor biilor transmii (b0 pn la b7) si a bitului de paritate trebuie sa
dea "0". Similar, n cazul "paritii impare", aceasta suma trebuie s dea "1".
Neconcordantele se semnaleaz, uzual circuitul serializator inverseaz /bitul de
paritate/ analizeaz corectitudinea paritii la recepie.

6. Cuvintele de date vehiculate serial pot conine informaii binare interne ale
calculatoarelor. Totui, uzuala este vehicularea serial a informaiilor codificate n cod
ASCII (American Standard Code of Information Interchange), n care toate
caracterele alfanumerice uzuale, tipribile, ct i o serie de coduri standardizate de
control au un cod corespunztor. Utiliznd 7 bii n versiunea standard, codul ASCII
are deci 128 de componente; in versiunea extins, codul ASCII utilizeaz cuvinte de
8 bii, in numr de 256. n anexa 2 este prezentat codul ASCII standard.

7. Legtura serial se face la alte nivele de tensiune dect cele TTL. Uzual se folosesc:
(a) "bucle de tensiune" (0-12V) pentru legaturi pn la 200 m;
(b) "bucle de curent" (0-20mA) pentru legaturi pn la 2 km;
(c) Circuite "modem" pentru modulare a semnalelor, la transmisii pe distante mari (linii
telefonice).
(d) Standardul RS-232 prevede pentru nivelul logic "1", o tensiune de -12V cu un nivel
limita de -3V, iar pentru nivelul logic "0", o tensiune de +12V cu un nivel limita de +3V, pentru
distante de ordinul kilometrilor.

In familia circuitelor INTEL, se utilizeaz ca interfaa serial programabil, circuitul


INTEL 8251. Circuitul poate lucra att n mod sincron ct i asincron permind att
transmisia ct i recepia serial. (Denumirea sa, circuit USART=Universal Synchronous
Asynchronous Receiver Transmiter). Este un circuit LSI, cu multe faciliti.
Vom prezenta n continuare doar acele elemente necesare pentru utilizarea
circuitului, in mod asincron. Pentru detalii suplimentare, se va consulta catalogul firmei.
Circuitul conine 2 porturi de intrare si 2 porturi de ieire corespunztoare cuvintelor
de control/date, de intrare si ieire. Le vom denota cu IUS1, IUS2, respectiv OUS1, OUS2.

L.6 - 5/11
Interfete seriale. Circuitul INTEL 8251

2.1. Cuvinte de control


2.1.1. Cuvntul 1 de comand - mod asincron (OUTPUT, la portul OUS2)
b7 b6 b5 b4 b3 b2 b1 b0
------- ------- ------- -------
| | | |---00 - invalid
| | | 01 - rata x 1
| | | 10 - rata x 16
| | | 11 - rata x 64
| | |------------- 00 - car. 5 bii
| | 01 - car. 6 bii
| | 10 - car. 7 bii
| | 11 - car. 8 bii
| |-------------------------x0 - dezactivare
| 01 - paritate par
| 11 - paritate impar
|-----------------------------------00 - invalid
01 - 1 bit de stop
10 - 1 1/2 bit de stop
11 - 2 bii de stop
2.1.2. Cuvntul 2 de comand - mod asincron (OUTPUT la portul OUS2)
b7 b6 b5 b4 b3 b2 b1 b0
0 0 1 1 0 1 1 1
- iniializeaz circuitul
- pentru detalii vezi manual firm

2.1.3. Cuvntul de stare (INPUT, de la portul IUS2)


b7 b6 b5 b4 b3 b2 b1 b0
------------------------- | |----- TxRdy (transmisie gata)
| |---------------- RxRdy (recepie gata)
alte condiii (vezi catalogul)

2.2. Cuvinte de date (porturile OUS1, IUS1)


Dup programarea circuitului (printr-o instruciune de OUTPUT la portul OUS2), se
pot transmite serial caractere (output la portul OUS1), sau citi, dac s-au recepionat
caractere (input de la portul IUS1).
Orice operaie de transmisie se va face daca s-a terminat transmisia unui caracter
anterior. Pentru aceasta se va transmite circuitului 8251 data doar dup ce se testeaz
starea transmitorului (vezi cuvntul de stare, bitul 1). Astfel, se va atepta ncheierea

L.6 - 6/11
Interfete seriale. Circuitul INTEL 8251

acestei transmisii si doar apoi se va continua, cu un nou caracter (doar daca bitul 1 din
cuvntul de stare are valoarea 1 indicnd ncheierea transmisiei anterioare). Similar se
citete o data valida prin INPUT de la adresa IUS1 doar daca in cuvntul de stare (citit cu
INPUT de la adresa IUS2) bitul indicnd recepia unui caracter (bitul2), este setat la valoarea
1. Altfel se ateapt setarea acestui bit, dup care se face citirea datei convertite serial-
paralel.
Observaii
1. Dup cum s-a precizat este imperios necesar ca rata de transmisie a circuitului
emitor s fie egal cu rata de recepie a circuitului receptor. In caz contrar
informaia este eronat reconstituita la receptor.
2. Se recomanda alimentarea circuitului cu un semnal de ceas de 16 (sau 64) de ori mai
mare dect rata de transmisie dorita si setarea corespunztoare a cuvntului de
comanda. Astfel, de exemplu, pentru a obine o rat de transmisie de 300 de baud
este necesar:
- fr divizare suplimentara: ceasul trebuie s aib frecvena 300 Hz
- cu divizare x16: ceasul trebuie s aib frecvena 16x300=4.800 Hz
- cu divizare x64: ceasul trebuie s aib frecvena 64x300=19.800 Hz
3. Legarea serial standard a doua echipamente se va face uzual prin intermediul a 3
conductoare de legtura, ca n Figura 6. 4.

transmisie receptie

receptie transmisie

masa masa

Figura 6. 4 Legarea serial a dou echipamente

4. Se pot transmite cuvinte de date nu doar de 8 bii (tipic), ci i de 7, 6, 5 sau chiar 4


bii.

2.3. Porturile de Comunicaie Serial la calculatoarele IBM-PC Compatibile

Marea majoritate a calculatoarelor IBM-PC compatibile dispun de un sistem de


comunicaie serial construit in jurul unui circuit INTEL 8251, sau a unuia compatibil. Pentru
a simplifica programarea acestuia, o serie din logica de comand a fost scoas pe nite
registre accesibile prin operaii de intrare/ieire pe porturi de 8 bii. Numele i adresa de port
acestor registre sunt date n tabelul 1.

L.6 - 7/11
Interfete seriale. Circuitul INTEL 8251

Tabelul 1.
Adresa Registrul DLAB
XF8 Registrul tampon TX de transmisie date 0 (scriere)
XF8 Registrul tampon RX de recepie date 0 (citire)
XF8 Partea Low a Baud generator LBG 1
XF9 Partea High a Baud generator HBG 1
XF9 Registrul de activare a ntreruperilor 0
XFA Registrul de identificare a ntreruperilor
XFB Registrul de control linie RCL
XFC Registrul de control modem
XFD Registrul de stare linie RSL
XFE Registrul de stare modem

OBSERVATII:
1. Litera X din adresele registrelor va fi:
X=3 - in cazul in care ne referim la primul port serial ( COM1 )
X=2 - in cazul in care ne referim la primul port serial ( COM2 )
n cazul nostru se va lucra pe al doilea port serial, primul fiind deja utilizat pentru mouse.

2. Din tabelul de mai sus vor fi detaliate aici registrele cei mai utilizai. Pentru mai multe
informaii se va consulta catalogul firmei.

3. Aa cum se constat, exist situaii in care mai multe registre sunt plasate la aceeai
adres ( XF8, si XF9 ). Acest lucru este posibil prin faptul ca registrele n cauz nu
sunt folosite niciodat simultan. Controlul asupra accesului la aceste registre se face
prin intermediul bitului 7 (DLAB) din registrul de control linie i prin operaia ce se
execut asupra registrului. Astfel daca bitul DLAB este 0, atunci o citire a portului XF8
ne da valoarea registrului RX (de recepie), iar o scriere n acelai port, va scrie n
registrul TX (de transmisie). Daca bitul DLAB este 1, atunci la adresele XF* i XF9 se
vor scrie valori ce vor determina rata de transmisie/recepie n Baud.

Registrele TX i RX, sunt registre ce vor conine cuvntul transmis, respectiv ultimul cuvnt
de date recepionat.

Registrele LBG i HBG sunt folosii la programarea vitezei de transmisie. Ele vor fi scrise o
singur dat la iniializarea transmisiei i apoi nu vor mai fi accesai. Pentru accesul lor, se
va seta pe nivel logic "1" bitul 7 din registrul RCL. Pentru viteza de 9600 baud ei vor conine:
LGB = (0CH), iar HGB = (0H). Pentru mai multe informaii se va consulta catalogul firmei.

L.6 - 8/11
Interfete seriale. Circuitul INTEL 8251

Registrul RCL este registrul prin care comandm efectiv funcionarea portului serial.
Semnificaia biilor si este urmtoarea:
b7 b6 b5 b4 b3 b2 b1 b0
| | | | | | |-----|---> Lungimea cuvntului de date: 00 - 5 bii
| | | | | | 01 - 6 bii
| | | | | | 10 - 7 bii
| | | | | | 11 - 8 bii
| | | | | |-------------> Numrul de bii de stop: 0 - 1 bit de stop
| | | | | 1 - 2 bit de stop
| | | | |-----------------> Activeaz verificarea paritii
| | | |----------------------> Selecteaz paritatea par (uzual 0)
| | |----------------------------> Blocheaz paritatea (uzual 0) - neutilizat
| |---------------------------------> Foreaz 0 pe transmisie
|--------------------------------------> DLAB (controleaz accesul la setare Baud sau
registrele de transmisie/recepie (vezi obs. 3 de
mai sus)
Registrul de stare linie RSL, este registrul prin care se poate deduce starea portului serial.
Semnificaia biilor este urmtoarea:

b7 b6 b5 b4 b3 b2 b1 b0
| | | | | | | |----> 1 - Caracter recepionat
| | | | | | |---------> 1 - Eroare de sincronizare
| | | | | |--------------> 1 - Eroare de paritate
| | | | |-------------------> 1 - Eroare de ncadrare
| | | |------------------------> 1 - Forare n 0
| | |------------------------------> 1 - Cnd portul e gata sa accepte un caracter de
| | transmis
| |-----------------------------------> 1 - Cnd portul e complet liber pe transmisie
|----------------------------------------> ntotdeauna pe 0

Restul regitrilor sunt folosii pentru comunicaia prin modem (linie telefonic) i pentru lucrul
n ntreruperi al portului.

3. Aplicaii

3.1. Exemplu de programare a portului serial COM2


;===================================================
; Subrutina de initializare a portului pentru 9600 baud, cuvinte 8 biti, fara controlul paritatii,
; un bit de stop

L.6 - 9/11
Interfete seriale. Circuitul INTEL 8251

EQU COMD2 0x2f8 ; adresa portului de date com2


EQU COMC2 0x2fB ; adersa RCL
EQU COMS2 0x2fD ; adresa RSL
EQU COML2 0x2f8 ; adresa LBG
EQU COMH2 0x2f9 ; adresa HBG

MOV DX,COMC2
MOV AL,$80
OUT DX,AL ; aici facem DLAB=1 pentru programare Baud rate
MOV DX,COML2
MOV AL,$0C
OUT DX,AL
MOV DX,COMH2
MOV AL,0
OUT DX,AL ; Baud rate = 9600
MOV DX,COMC2
MOV AL,3 ; 8 biti, fara paritate, 1 bit de stop
OUT DX,AL
;aici s-a terminat initializarea

;======================================================
; Rutina de transmisie a unui caracter aflat in registrul AH
co:
MOV DX,COMS2
IN AL,DX ; citeste starea portului
AND AL,$20 ; este gata de transmisie? (bitul 5 e pe 1?)
JZ co ; daca nu continua sa incerci
MOV DX,COMD2 ; daca da
MOV AL,AH
OUT DX,AL ; transmite caracterul

; =====================================================

; Rutina de receptie a unui caracter. Se va primi caracterul in registrul AL


ci:
MOV DX,COMS2
IN AL,DX ; citeste starea portului
AND AL,1 ; a receptionat ceva?
JZ ci ; daca nu continua sa incerci
MOV DX,COMD2 ; daca da
IN AL,DX ; preia in AL caracterul receptionat
; =====================================================

3.2. ntrebri
1. Ce este un circuit USART? Principiul de funcionare.
2. Ce sunt biii de start si de stop? Ce rol au ei?
3. Ce este rata de transmisie a unei interfee seriale? Cu ce se msoar? Valori standard?
4. Descriei seria de operaii efectuate de ctre un microsistem, pentru a citi/tipri un caracter
de la/la consol?
5. Ce este codul ASCII?
6. Care este rolul bitului de paritate?

L.6 - 10/11
Interfete seriale. Circuitul INTEL 8251

3.3. Probleme
1. S se scrie un program care preia fr ecou un caracter de la tastatur i apoi l trimite la
portul serial COM2. n continuare, programul va prelua primul caracter recepionat pe portul
COM2 i l va afia.
2. S se scrie un program care va programa portul COM2 n modul recepie asincron i va
afia pe ecran primul caracter recepionat pe port.
3. S se scrie un program care va programa portul COM2 n modul transmisie asincron i
va transmite pe ecran primul caracter recepionat pe port.
4. S se scrie un program care tiprete n ecou caracterele citite de la tastatur, convertind
literele mici n litere mari.
5. S se scrie un program care citete un caracter hexazecimal (0 ... 9, A....F) i tiprete
codul sau zecimal.
Exemplu Citete Tiprete
7 7
A 10
F 15
6. S se scrie un program care citete un caracter hexazecimal (0 .... 9, A Exemplu.
Citete Tiprete
2 0010
A 1010
F 1111
7. S se scrie un program care citete un numr binar de 4 cifre i tiprete codul
hexazecimal (un caracter) corespunztor.
Exemplu Citete Tiprete
0010 2
1010 A
1111 F
8. S scrie un program care tiprete toate caracterele ASCII tipribile (Codurile ASCII de la
20H la 7FH)
9. S se scrie un program care tiprete codul binar al unui numr reprezentat pe un octet.
Exemplu: n memorie: numrul 24H
Tiprete: 00100100

L.6 - 11/11

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