Documente Academic
Documente Profesional
Documente Cultură
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.
L.6 - 2/11
Interfete seriale. Circuitul INTEL 8251
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.
L.6 - 3/11
Interfete seriale. Circuitul INTEL 8251
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
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.
L.6 - 4/11
Interfete seriale. Circuitul INTEL 8251
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.
L.6 - 5/11
Interfete seriale. Circuitul INTEL 8251
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
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
L.6 - 9/11
Interfete seriale. Circuitul INTEL 8251
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
; =====================================================
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