Documente Academic
Documente Profesional
Documente Cultură
Familia 80C51 are o magistral de date de 8 bii i este capabil s adreseze un spaiu de memorie
corespunztor pentru 2 x 64KO, adic adresare dubl pe 16 bii. Aceast adresare a fost conceput astfel
nct memoria de date (RAM) i memoria program (ROM) au adrese suprapuse. Pe de alt parte s-au
mprit cei 8 bii mai semnificativi ai magistralei de adrese (portul 2) i cei 8 bii mai puin semnificativi
(portul 0), multiplexnd n timp partea de adresare de la portul 0 cu datele (figura 4.23).
Va trebui utilizat deci un registru extern pe 8 bii pentru memorarea adresei de la portul 0. Pentru
aceast demultiplexare este nevoie de semnalul ALE (Address Lach Enable) i R/W (Read/Write) care fac
alegerea ntre memoria de date i memoria program.
Memoria de date este divizat n mai multe pri, fiecare parte cu particularitile ei. n cazul lui
80C552 avem 128 + 128 + 128 octei, plus o memorie extern de 64KO. n memoria RAM intern exist 4
grupri (bancuri) de regitri, fiecare coninnd cte 8 regitri, notai R0 - R7, cu adresele:
- grupul 1: 00 h - 07 h
- grupul 2: 08 h - 0F h
- grupul 3: 10 h - 17 h
- grupul 4: 18 h - 1F h.
Urmtoarea zon, ntre 20 h i 30 h este adresabil pe bit. De la 80 h i pn la FF h sunt plasai
regitrii speciali, SFR, care sunt fie adresabili pe octet fie adresabili pe bit (adrese care se termin n 00 sau
08). Exist mult spaiu liber pentru extensii ulterioare corespunztoare unor microcontrolere mai
performante.
n spaiul comun de suprapunere de adrese (de la 80 h la FF h), dup cum se face adresarea, se
ajunge fie n memoria de date normal, fie n zona SFR-urilor.
Figura 4.24. Adresarea n spaiul memoriei de date.
Exemple de adresare:
- direct
MOV 80H, #0AAH
nscrie valoarea AAH n Portul 0 (SFR)
- indirect
MOV R0, #80
MOV @R0, #0BBH
nscrie valoarea BBH n locaia aflat la adresa 80H din RAM.
4.5.2. Programe pentru comunicarea pe interfaa serial I2C pentru microcontrolere fr interfa
hardware I2C
Acest paragraf are drept scop descrierea implementrii unui program simplu care s permit
comunicarea conform protocolului pe I2C, uor de readaptat pentru un alt tip de microcontroler.
Programul este scris pentru un microcontroler din familia 80C51. Aspectele temporale pe care
trebuie s le asigurm au fost prezentate n figurile 4.18 i 4.19. Trebuie avut n vedere n special
generarea tactului, a crui durat HIGH este de minim 4 s, iar durata LOW este de minim 4,7 s.
Programul de emisie de date spre o component cu interfa I2C este constituit din mai multe
subrutine aflate la diferite adrese n memoria program. Parametrii iniiali ai programului sunt:
- adresa componentei I2C este coninut n locaia din memoria RAM avnd adresa 3000 h;
- numrul de octei de trimis se afl nscris la adresa 3001 h;
- datele de trimis sunt stocate ncepnd de la locaia 3002 h.
Pentru toate aceste date se folosete o memorie RAM extern.
Arhitectura global de organizare a memoriei program externe este prezentat n figura 4.25.
Programul pentru transmiterea datelor spre un circuit slave I2C trebuie s cuprind urmtoarele
funcii:
- iniializarea diferitelor valori (eticheta reset),
- ncrcarea n registrul DPTR a diferitelor adrese la care se afl octeii de transmis,
- ncrcarea acumulatorului cu coninutul adresei indicat de DPTR i aceasta doar dac circuitul
receptor nu impune ntreruperea transmisiei prin negenerarea acceptrii (ACK).
Legturile pentru liniile SDA i SCL vor fi cablate la dou dintre liniile portului P1 i anume:
INITIALIZARE
RECEPTIE ACK
DA
ACK = 1 ?? STOP RET
NU
INCARCA IN DPTR -- ACC -- R1
NR. DE OCTETI DE TRANSMIS
DA
ACK = 1 ?? STOP RET
DECREMENTEAZA R1
NU DA
R1 = 0 ?? STOP RET
Conform organizrii prezentate n figura 4.25, subrutina de emisie ncepe la adresa BD00. Schema
logic pentru aceast subrutin este prezentat n figura 4.26 i 4.26.bis. Utilizm urmtoarele iniializri:
0097 sda = 0x97
0096 scl = 0x96
0091 trig = 0x91
Programul care cuprinde:
- adresele locaiilor de memorie (ex. BD00),
- etichetele la care ncep diferite subrutine (ex. reset),
- instruciunile scrise n limbaj de asamblare (ex. setb trig),
- codurile instruciunilor scrise n hexazecimal,
se va prezenta n continuare.
Pentru o bun nelegere a instruciunilor din program i a amplasrii codurilor corespunztoare n
memorie, au fost prezentate att adresele la care se afl aceste comenzi n memorie ct i codurile lor n
format hexazecimal. Principalele funcii pe care trebuie s le ndeplineasc programul sunt urmtoarele:
- gestionarea datelor,
- trimiterea de octei (bit cu bit) pe linia desemnat a fi SDA,
- generarea tactului pe linia desemnat a fi SCL,
- recepionarea i interpretarea bitului de ACK,
- generarea condiiilor de start i stop.
Prima subrutin care ncepe la adresa BD00 este urmtoarea:
Gestionarea datelor se realizeaz prin stabilirea n prealabil a locaiilor de memorie la care pot fi gsite
datele:
- adresa componentei I2C este coninut n locaia din memoria RAM avnd adresa 3000 h;
- numrul de octei de trimis se afl nscris la adresa 3001 h;
- datele de trimis sunt stocate ncepnd de la locaia 3002 h.
Emisia biilor se realizeaz prin:
- ncrcarea octetului de transmis n acumulator,
- rotirea acumulatorului spre stnga prin bitul de Carry
- punerea coninutului bitului Carry pe linia SDA.
Generarea tactului se realizeaz prin:
- setarea pe 1 logic a liniei de port desemnat a fi SCL,
- temporizarea necesar pentru a realiza limea de minim 4 s care este durata minim a tactului n starea
HIGH i durata de 4,7 s care este durata minim a tactului n starea LOW,
- setarea pe 0 logic a liniei de port desemnat a fi SCL.
Recepionarea i interpretarea bitului de ACK se realizeaz prin intermediul bitului de Carry n care
se nscrie informaia primit pe linia SDA de la corespondentul de pe I2C.
Generarea condiiilor de start i stop se execut prin crearea fronturilor pe linia SDA cnd linia SCL
este pe 1 logic i a palierelor, de durat corespunztoare (prin utilizarea de nop uri), pentru ndeplinirea
condiiilor de temporizare mai sus menionate.
n figur sunt prezentate exemple de realizare a unor astfel de dispozitive conform tehnologiilor
utilizate la concepia circuitelor integrate (CMOS sau bipolare).
Panta fronturilor descendente este definit, n mare msur, prin valorile componentelor C1 i R1 i
mai puin prin Cb i Rp. n schimb acestea din urm vor avea o influen hotrtoare asupra timpului de
ridicare al semnalelor de pe bus.
Valoarea minim a lui Rp este determinat de tensiunea de alimentare V DD i de valoarea VOLmax
(valoarea maxim a tensiunii de ieire n starea LOW).
Ex: VDD = 5V10%, VOlmax = 0,4V la 3mA => R = (5,5V - 0,4V):3 10-3 = 1,7K.
Durata timpului de ridicare, tr = 1s.
Avnd o reea RC, tensiunea este dat de binecunoscuta relaie:
v = VO(1 e-t/ ).
0,1 VDD = VDD (1 - e-t1/) => e-t1/ = 0,1 => t1=ln 0,1
-t2/
0,9 VDD= VDD (1 e ) => e-t2/ = 0,9 => t2=ln 0,9
ntre 0,1VDD i 0,9VDD => tr = 2,2RC => 1s = 2,2 1,7K C =>
C = 300pF
n cazul n care avem o capacitate mai mare C b se poate utiliza o metod de comutare suplimentar a
unei rezistene Rp.
Rezistena suplimentar Rp2 va fi comutat funcie de nivelele existente pe liniile SDA i SCL.
Rezistenele Rs sunt opionale i sunt prevzute n scopul protejrii etajelor de ieire a bus-ului I 2C
mpotriva unor valori accidentale mai mari de tensiune (high votage spikes).
Avem repetoare pe emitor care au drept sarcin 75. n repaus pentru SDA i SCL , T 1 i T2 sunt
bolcate i avem +5V. Dac Echipamentul 1 este master, emitorul lui T 1 va urmri informaia la ieire a liniei
SDA. n acelai fel se va modifica i baza lui T2 datorit rezistenei de 820.
Din punct de vedere al nivelelor electrice, pentru nivelul LOW impus de 1,5V. (V Ilmax = 1,5V), n cel
mai ru caz avem:
VOLmax+Vbe max=0,4+0,8=1,2V.
Pentru nivelul HIGH nu apar modificri. Singurul dezavantaj este scderea imunitii la zgomot dar
care va fi compensat prin scderea impedanei liniei.*
Astfel impedanele tipice sunt n plaja 50-100 . Tranzistoarele montate n repetor pe emitor pot
furniza un curent de 100mA ceea ce impune rezistoare de 75 la fiecare capt al liniei.
Distana maxim este limitat astfel doar de timpul de propagare disponibil determinat la rndul lui
de timpul maxim pe care-l poate atepta emitorul pentru a recepiona semnalul de ACK de la receptor.
Timpul minim pentru starea HIGH a tactului este de 4,03s. Va trebui ca suma total a timpului de
propagare a semnalului de la C (al 9-lea tact) i a timpului de ntoarcere a semnalului ACK s fie inferioar
acestei valori.
Liniile de transmisie au de obicei un timp de propagare de ordinul
5 ns/m sau o vitez de 200m/s. Avem la o distan de 400m un timp dus-ntors de 2+2=4s. Dar n acest
caz sunt recomandate fire de legtur cu diametru mare pentru a reduce pierderile pe linie.
Pentru bufferizare exist i un circuit integrat dedicat P82B715. n cazul utilizrii lui rezistenele de
pull-up existente pe ieirile standard vor fi scoase pentru a fi amplasate direct pe ieirile buferului. Circuitul
P82B715 conine dou ci de semnal identice care au scopul de a amplifica (bufferiza) fr modificarea
nivelului bidirecionalitii pentru SDA i SCL (cu un curent de 30mA n loc de 3mA pentru fiecare iesire).
Pentru capaciti parazite mai mari de 400pF se mai utilizeaz i surse de curent n locul rezistenei de
pull-up.