CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7...

110
CAP. 3 MICROCONTROLERE icrocontrolerele constituie în această periodă un domeniu deosebit de dinamic. Ele se impun din ce în ce mai mult în aplicaţiile industriale. M Există mai multe familii de microcontrolere care s-au dezvoltat: 8400. 3300, PIC 16CXX, 80C51 etc. Dintre acestea autorul acestei cărţi s-a oprit asupra familiei 80C51, pe care o consideră ca fiind cea mai răspândită. Familia 80C51 cuprinde mai multe microcontrolere prezentate în tab. 3.1. Tip Memorie fixă RAM [O] Frecven ţă tact[MH z] Caracteristici 80C31 80C51 87C51 0 4Ko ROM 4Ko EPROM 128 128 128 12 12 12 UART, 2numărătoare, 4 porturi 83(0)C51F A 87C51FA 8Ko ROM 8Ko EPROM 256 256 24 24 UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi 83L51FA 87L51FA 8Ko ROM 8Ko EPROM 256 256 20 20 UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi, 3V 83C51FB 87C51FB 16Ko ROM 16Ko EPROM 256 256 24 24 UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi 83L51FB 87L51FB 16Ko ROM 16Ko EPROM 256 256 20 20 UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi 83C51FC 87C51FC 32Ko ROM 32Ko EPROM 256 256 24 24 UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi 80C32 80C52 0 8Ko ROM 256 256 24 24 UART, 3 numărătoare, 4 porturi

Transcript of CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7...

Page 1: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

CAP. 3 MICROCONTROLERE

icrocontrolerele constituie în această periodă un domeniu deosebit de dinamic. Ele se impun din ce în ce mai mult în aplicaţiile industriale.M

Există mai multe familii de microcontrolere care s-au dezvoltat: 8400. 3300, PIC 16CXX, 80C51 etc. Dintre acestea autorul acestei cărţi s-a oprit asupra familiei 80C51, pe care o consideră ca fiind cea mai răspândită.Familia 80C51 cuprinde mai multe microcontrolere prezentate în tab. 3.1.

Tip Memoriefixă

RAM[O]

Frecvenţătact[MHz]

Caracteristici

80C3180C5187C51

04Ko ROM4Ko EPROM

128128128

121212

UART, 2numărătoare, 4 porturi

83(0)C51FA87C51FA

8Ko ROM8Ko EPROM

256256

2424

UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi

83L51FA87L51FA

8Ko ROM8Ko EPROM

256256

2020

UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi, 3V

83C51FB87C51FB

16Ko ROM16Ko EPROM

256256

2424

UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi

83L51FB87L51FB

16Ko ROM16Ko EPROM

256256

2020

UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi

83C51FC87C51FC

32Ko ROM32Ko EPROM

256256

2424

UART îmbunătăţit, PCA, 3 numărătoare, 4 porturi

80C3280C5287C52

08Ko ROM8Ko EPROM

256256256

242424

UART, 3 numărătoare, 4 porturi

80C5487C54

16Ko ROM16Ko EPROM

256256

2424

UART, 3 numărătoare, 4 porturi

80C5887C58

32Ko ROM32Ko EPROM

256256

2424

UART, 3 numărătoare, 4 porturi

80C45183C45187C451

04Ko ROM4Ko EPROM

128128128

161616

UART, 2 numărătoare, 6-7 porturi

83(0)C50487C504

16Ko ROM16Ko EPROM

256256

2424

UART, 2 numărătoare, 4 porturi

83C52487C524

16Ko ROM16Ko EPROM

512512

1220

UART, I2C, 3 numărătoare, 4 porturi, watchdog

Page 2: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

141 Microcontrolere - 3 83(0)C52887C528

32Ko ROM32Ko EPROM

512512

1620

UART, I2C, 3 numărătoare, 4 porturi, watchdog

80C55083C55087C550

04Ko ROM4Ko EPROM

128128128

161616

UART, 2 numărătoare, 4 porturi, watchdog, 8 canale A/D 8 biţi

80C55283C55287C552

08Ko ROM8Ko EPROM

256256256

242416

UART, I2C, 3 numărătoare, 6 porturi, watchdog, 2 PWM, 8 canale A/D 10 biţi, numărătoare captare/comp.

80CE55883CE55887CE558

032Ko ROM32Ko EPROM

1Ko1Ko1Ko

161616

UART, I2C, 3 numărătoare, 6 porturi, watchdog, 2 PWM, 8 canale A/D 8 biţi, numărătoare captare/comparare

80C56283C562

08Ko ROM

256256

1616

UART, 3 num., 6porturi, watchdog, 8 canale A/D 8biţi, num. captare/comp.

80C57583C57587C575

08Ko ROM8Ko EPROM

256256256

161616

UART, 3 numărăt., PCA, 4 porturi, 4 comparat. analogice,siguranţă mărită

83(0)C57687C576

8Ko ROM8Ko EPROM

256256

1616

idem 8xC575 + watchdog, convertor A/D 10 biţi

80C59283C59287C592

016Ko ROM16Ko EPROM

512512512

161616

idem cu 8xC552 + CAN

80CE59883CE59887CE598

032Ko ROM32Ko EPROM

512512512

161616

idem cu 8xC552 + CAN şi fără I2C

80C65283C65287C652

08Ko ROM8Ko EPROM

256256256

242424

UART, I2C, 2 numărătoare, 4 porturi

83C65487C654

16Ko ROM16Ko EPROM

256256

2420

idem cu 8xC652

83C75087C750

1Ko ROM1Ko EPROM

6464

4040

1 temporizor, 2 porturi

83C74887C748

2Ko ROM2Ko EPROM

6464

1616

1 temporizor, 2 porturi, I2C

83C74987C749

2Ko ROM2Ko EPROM

6464

1616

1temporizor, 2porturi, 1 PWM, 5 canale A/D 8 biţi

83C75187C751

2Ko ROM2Ko EPROM

6464

1616

1 temporizor, 2 porturi, I2C

Page 3: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 142

83C75287C752

2Ko ROM2Ko EPROM

6464

1616

idem cu 8xC749 + I2C

80C85183C851

04Ko ROM

128128

1616

UART,2 num., 4 porturi, 256 octeţi EEPROM

83C852 6Ko ROM 256 6 2 numărătoare, 2 porturi, 2Ko EEPROM, Smartcard Controller

83C05587C055

16Ko ROM16Ko EPROM

256256

1212

3,5 porturi, 2 numărătoare, on-screen display, 9 PWM, intrări A/D soft

Tab. 3.1 Microcontrolerele din familia 80C51

Toate microcontrolerele prezentate sunt în tehnologie CMOS. Există şi variante NMOS ale unora dintre ele care au aceeaşi structură internă şi aceleaşi trăsături ca şi corespondentele lor din tehnologia CMOS. Acestea sunt: 8031, 8032, 8051, 8052, 8031AH şi 8051AH.

Toate microcontrolerele din tabel sunt pe 8 biţi. Recent, firma Philips Semiconductors a dezvoltat arhitectura XA (" eXtended Architecture ") pentru microcontrolere pe 16 biţi compatibile cu familia 80C51. Microcontrolerele pe 16 biţi realizate sunt prezentate în tab. 3.2.

Tip Memoria fixă RAM Frecvenţătact[MHz]

Caracteristici

XA-G1 8Ko EPROM/ROM 512 30 2 UART, 3 numărătoare,watchdog

XA-G2 16Ko EPROM/ROM 512 30 idem

XA-G3 32Ko EPROM/ROM 512 30 idemTab. 3.2 Microcontrolerele pe 16 biţi ale firmei Philips

3.1 Microcontrolerul 80C513.1.1 Caracteristici

80C51 este un microcontroler foarte răspândit, fiind cel ce a pus bazele familiei de microcontrolere 80C51. Este realizat în tehnologie CMOS şi se prezintă într-o capsulă DIL40 sau LCC44 sau QFP44.Principalele caracteristici ale acestui microcontroler sunt:- include 4 Ko memorie ROM şi 128 octeţi memorie RAM,- include o unitate aritmetică şi logică,

Page 4: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

143 Microcontrolere - 3 - are 4 porturi de intrare/ ieşire care pot fi utilizate ca porturi de uz general dar au şi funcţiuni specifice,- poate adresa 64 Ko memorie externă de program şi 64 Ko memorie externă de date,- are 2 contoare/ temporizatoare, independente, pe 16 biţi,- include un port serial UART full duplex,- poate gestiona 5 surse de întreruperi, cu 2 nivele de priorităţi,- consum mic: 16 mA în modul normal, 3,7 mA în modul Idle şi 50 A în modul Power Down.

3.1.2 Configuraţia terminalelor

Fig. 3.1 prezintă configuraţia terminalelor la microcontrolerul 80C51, grupate din punct de vedere funcţional.

Fig. 3.1 Configuraţia terminalelor la microcontrolerul 80C51

Semnificaţiile lor sunt:P0.0-7/ AD0-7: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu drenă în gol; o ieşire suportă 8 sarcini TTL LS; rangurile care au înscrise 1 pot funcţiona ca intrări de mare impedanţă; în ciclurile în care se face acces la memorie este o magistrală multiplexată între jumătatea mai puţin semnificativă din magistrala de adrese şi magistrala de date; în acest ultim caz emite 1 pe linie utilizând rezistenţe interne la Vcc.P1.0-7: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la Vcc; pentru a funcţiona ca intrări, trebuie încărcat 1 în rangurile respective; o intrare comandată cu 0 va absorbi curent datorită rezistenţei interne la Vcc.P2.0-7/ A8-15: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la Vcc; în timpul acceselor la memoria externă generează jumătatea superioară din magistrala de adrese atunci când accesul memoriei externe se face cu adrese pe 16 biţi.P3.0-7/ XXX: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la Vcc; terminalele sale au şi funcţiuni specifice:

80C51

(11) P3.0 / RXD(13 P3.1 / TXD(14) P3.2 / INT0(15) P3.4 / INT1(16) P3.5 / T0(17) P3.6 / T1(18) P3.7 / /WR(19) P3.8 / /RD

(21) XTAL1(20) XTAL2(44) VCC

(22) VSS

1011121314151617

19184020

39-32

1-8

P0.0-7 / AD0-7 (43-36)

P1.0-7 (2-9)

P2.0-7 / A8-15 (24-31)

ALE (33)/PSEN (32)/EA (35)RST (10)

24-31

3029319

Page 5: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 144

P3.0: RxD: intrare serială,P3.1: TxD: ieşire serială,P3.2: /INT0: intrare pentru întreruperea externă 0,P3.3: /INT1: intrare pentru întreruperea externă 1,P3.4: T0: intrare externă pentru contorul 0,P3.5: T1: intrare externă pentru contorul 1,P3.6: /WR: semnal de comandă pentru scriere în memoria de date externă,P3.7: /RD: semnal de comandă pentru citire din memoria de date externă.RST (Reset): intrare pentru iniţializare.ALE ("Address Latch Enable"): ieşire folosită la demultiplexarea magistralei de adrese/ date; frecvenţa semnalului este egală cu 1/ 6 din frecvenţa tactului chiar dacă nu se fac accese la memoria externă; însă în timpul unui acces la memoria externă de date se pierde o activare./PSEN ("Program Store Enable"): este semnalul de comandă pentru citirea din memoria externă de program; în ciclurile de citire din memoria externă se activează de 2 ori/ ciclu; nu se activează atunci când se execută program din memoria internă de program şi nici în ciclurile în care se transferă date cu memoria externă de date./EA ("External Address"): este o intrare care selectează memoria de program; dacă este 0 atunci se va executa din memoria externă de program iar dacă este 1 atunci se va executa din memoria internă de program, până la valoarea 0FFFH din PC, după care se va executa din memoria externă de program indiferent de nivelul logic care comandă terminalul.XTAL1, XTAL2: terminale la care se conectează un cuarţ pentru a obţine tactul intern; frecvenţa acestuia trebuie să fie de 0,5 - 12 MHz; se poate comanda terminalul XTAL1 cu semnal de tact extern, cu factor de umplere 1/2, iar terminalul XTAL2 rămâne neconectat.Vcc: tensiune de alimentare, +5 V tensiune continuă.Vss: masă electrică.

3.1.3 Structura internă

Fig. 3.2 prezintă schema bloc a microcontrolerului 80C51. Resursele acestuia sunt:- memoria internă de program, de 4 Ko,- memoria internă RAM, de 128 octeţi, - registrele cu funcţiuni speciale, SFR ("Special Function Registers"),- 2 contoare/ temporizatoare, independente,- o interfaţă serială UART full duplex,- sistem de întreruperi.

3.1.3.1 Memoria internă

Memoria internă a microcontrolerului este de două tipuri: fixă şi RAM.

Page 6: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

145 Microcontrolere - 3

Fig. 3.2 Schema bloc a microcontrolerului 80C51

Sistem deîntreruperi

Întreruperi externe

CPU

Generatorde tact

Logică decontrol a

magistraleiPorturi de I/E

Portserial

Contor0

Contor1

1280RAM

4 koROM

Registre cufuncţiunispeciale

P0 P1 P2 P3 TxD RxD T0 T1

Page 7: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 146

Fig. 3.3 Organizarea memoriei RAM interne la microcontrolerul 80C51Zona 00 - 1FH este divizată în 4 blocuri de câte 8 octeţi, notate cu Blocul 0 - 3. Există un grup de registre, R0-7 care se suprapune, la un moment dat, peste un singur bloc din cele 4. Blocul care se suprapune peste registrele R0-7 este selectat de programator prin intermediul rangurilor RS1 şi RS0 din registrul de stare al programului, PSW ("Program Status Word"). După iniţializare, unitatea centrală, CPU, începe execuţia de la adresa 0000 iar registrele R0-7 se suprapun peste Blocul 0. Stiva va fi iniţializată la adresa 07H, adică în indicatorul de stivă, SP, se va încărca valoarea 07H. La depunerea în stivă, SP va fi incrementat, spre deosebire de microprocesoare unde la depunerea în stivă SP este decrementat. Se recomandă încărcarea în SP a unei valori care să corespundă unei locaţii din zona Data RAM.Zona 00 - 1FH poate fi accesată direct, prin intermediul unei adrese pe 8 biţi sau prin adresare de registru. De exemplu instrucţiunea DEC R5 va avea următorul efect: prin intermediul rangurilor RS1 şi RS0 se alege un bloc din 4, iar octetul din blocul astfel selectat care se suprapune peste registrul R5 va fi decrementat. Registrele R0 şi R1 pot fi folosite pentru adresare indirectă a memoriei de date. De exemplu instrucţiunea INC @R0 va avea următorul efect: prin intermediul rangurilor RS1 şi RS0 se alege un bloc iar octetul din blocul astfel selectat care se suprapune peste R0 va fi interpretat ca adresa unei locaţii din memoria RAM internă. Conţinutul locaţiei respective va fi incrementat.Avantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru sunt necesare doar 3 ranguri care se găsesc, împreună cu codul instrucţiunii, în primul octet al acesteia. La adresarea indirectă, prin intermediul registrelor R0 sau R1 este nevoie de un singur rang, aflat, de asemenea, în primul octet al instrucţiunii.

FF

30

Data RAM

2F

20Bit_RAM

1F18

Bloc 3

1710

Bloc 2

0F08

Bloc 1

0700

Bloc 0

Page 8: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

147 Microcontrolere - 3 Zona 20H - 2FH din RAM-ul intern este denumită Bit RAM, întrucât fiecare din cei 128 biţi poate fi adresat individual. Există 2 modalităţi de a adresa biţii din această zonă. Una foloseşte adresa lor: 00 - 7FH, cu 00 pentru bitul 0 de la locaţia 20H şi 7FH pentru bitul 7 de la locaţia 2FH. Cealaltă se referă la octeţii 20H - 2FH. Astfel biţii 00 - 07 pot fi adresaţi ca 20.0 - 20.7, biţii 08 - 0FH ca 21.0 - 21.7 etc. De exemplu instrucţiunea CLR 20.0 va avea în al doilea octet al ei un câmp de 5 ranguri care specifică octetul 20H şi un câmp de 3 ranguri care specifică bitul selectat. Fiecare octet din această zonă poate fi adresat şi ca octet distinct.Zona 30H - 7FH este denumită Data RAM şi este o zonă de memorie RAM de uz general. Se recomandă plasarea stivei în această zonă.

3.1.3.2 Registrele cu funcţiuni speciale, SFR

Microcontrolerul 80C51 conţine un grup de registre interne, cu funcţiuni speciale. Ele sunt adresabile în mod direct iar registrele ale căror adrese se termină în 0 sau 8 pot fi adresate şi la nivel de bit. Registrele şi adresele lor sunt prezentate în tab. 3.3.În continuare vor fi prezentate, pe scurt, registrele.ACC: este registrul acumulator. Denumirea folosită în cadrul instrucţiunilor este A.B: este un registru cu rol predeterminat în instrucţiunile de înmulţire şi împărţire. Pentru celelalte instrucţiuni, poate fi utilizat ca registru general.SP ("Stack Pointer"): este indicatorul de stivă. Este incrementat înaintea unei depuneri în stivă prin intermediul instrucţiunilor CALL sau PUSH. După iniţializare este încărcat cu valoarea 07H deci stiva începe de la adresa 08H. Poate fi încărcat, prin program, cu orice valoare.

Registru Adresă de bitb7 b6 b5 b4 b3 b2 b1 b0

Adresă de registru

BACCPSWIPP3IEP2SBUFSCONP1TH1TH0TL1TL0TMODTCONPCONDPH

F7E7D7BFB7AFA7

9F97

8F

F6E6D6BEB6AEA6

9E96

8E

F5E5D5BDB5ADA5

9D95

8D

F4E4D4BCB4ACA4

9C94

8C

F3E3D3BBB3ABA3

9B93

8B

F2E2D2BAB2AAA2

9A92

8A

F1E1D1B9B1A9A1

9991

89

F0E0D0B8B0A8A0

9890

88

F0HE0HD0HB8HB0HA8HA0H99H98H90H8DH8CH8BH8AH89H88H87H83H

Page 9: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 148

DPLSPP0 87 86 85 84 83 82 81 80

82H81H80H

Tab. 3.3 Registrele cu funcţiuni speciale ale microcontrolerului 80C51

PSW ("Program Status Word"): este registrul de stare al programului. Conţine indicatorii de condiţii. Rangurile sale au următoarele semnificaţii:PSW.0: P ("Parity"): indicator de paritate; va fi 1 dacă numărul de 1 din acumulator este impar. PSW.1: rezervat.PSW.2: OV ("Overflow"): indicator de depăşire; se foloseşte atunci când se lucrează cu operanzi cu semn şi indică apariţia unui transport/ împrumut în/ din rangul de semn ceea ce înseamnă depăşirea domeniului de valori care poate fi încărcat într-un registru pe 8 biţi.PSW.3-4: RS1, RS0: selectează blocul din memoria RAM internă care se suprapune peste grupul de registre R0-7, conform tab. 3.4.

RS1 RS0 R0-7 se suprapune peste

0 00 11 01 1

Blocul 0 (00H - 07H)Blocul 1 (08H - 0FH)Blocul 2 (10H - 17H)Blocul 3 (18H - 1FH)

Tab. 3.4 Selecţia blocului de memorie care se suprapune peste registrele RS1, RS0la microcontrolerul 80C51

PSW.5: F0: indicator la dispoziţia utilizatorului.PSW.6: AC ("Auxiliary Carry"): indicatorul de transport sau împrumut auxiliar; indică un transport sau un împrumut între cei doi digiţi ai rezultatului unei operaţii de adunare sau scădere între 2 operanzi în cod BCD.PSW.7: CY ("Carry"): indicatorul de transport sau împrumut; indică apariţia unui transport/ împrumut din/ în rangul cel mai semnificativ al acumulatorului ca urmare a unei operaţii de adunare/ scădere, ceea ce înseamnă depăşirea capacităţii registrului.DPH, DPL ("Data Pointer High, Low"): sunt două registre pe câte 8 biţi care alcătuiesc împreună DPTR ("Data Pointer Register"), DPH fiind jumătatea superioară din DPTR iar DPL fiind jumătatea inferioară din DPTR. DPTR este folosit la adresarea indirectă a unei locaţii din memoria externă şi poate fi accesat ca registru pe 16 biţi sau ca 2 registre pe 8 biţi.TH0, TL0 ("Timer 0 Counter"): sunt două numărătoare pe câte 8 biţi care alcătuiesc împreună un numărător pe 16 biţi pentru contorul/ temporizatorul 0.TH1, TL1 ("Timer 1 Counter"): sunt două numărătoare pe câte 8 biţi care alcătuiesc împreună un numărător pe 16 biţi pentru contorul/ temporizatorul 1.SBUF ("Serial Data Buffer"): este un tampon folosit la transferul serie şi este fizic alcătuit din 2 registre: un tampon pentru transmisie şi unul pentru recepţie. Transmisia este iniţiată prin scrierea unui octet în SBUF. La citire, se primeşte un octet de la tamponul pentru recepţie.

Page 10: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

149 Microcontrolere - 3 P0, P1, P2, P3: sunt registrele ce corespund porturilor P0, P1, P2 respectiv P3. Dacă un port este ieşire şi se scrie 1 sau 0 în un rang din registrele P0 - P3, terminalul corespunzător al portului va avea nivelul logic 1 sau 0. IP, IE, TMOD, TCON, SCON, PCON: sunt registre de control care vor fi prezentate pe măsură ce se descrie rolul lor.

Microcontrolerul 80C51 mai dispune de 2 registre, în CPU, care nu sunt cu funcţiuni speciale şi nu pot fi adresate de programator. Acestea sunt:PC ("Program Counter"): este un numărător pe 16 biţi care este incrementat la fiecare citire de octet din memoria de program; el conţine adresa locaţiei de memorie în care se află următorul octet din instrucţiune.IR ("Instruction Register"): este un registru pe 8 biţi în care se depune octetul din instrucţiune adus în vederea decodificării sale.

3.1.3.3 Contoarele/ temporizatoarele 0, 1

Microcontrolerul 80C51 dispune de 2 contoare/ temporizatoare implementate cu două numărătoare independente, pe 16 biţi, notate cu TIMER 0 şi TIMER 1. TIMER 0 este alcătuit din numărătoarele TH0 şi TL0 iar TIMER 1 este alcătuit din numărătoarele TH1 şi TL1. Există 2 surse de tact pentru fiecare din cele două contoare/ temporizatoare. Dacă funcţia îndeplinită este cea de temporizator atunci sursa este tactul microcontrolerului, fOSC divizat la 12 deci numărătorul va fi incrementat în fiecare ciclu maşină. Dacă funcţia îndeplinită este cea de contor atunci sursa este un semnal extern, T0, respectiv T1. Ti este testat în fiecare S5P2 (paragraful 3.1.3.9) a unui ciclu maşină şi un front căzător al acestui semnal va incrementa numărătorul. Frontul căzător este detectat dacă într-un ciclu maşină se citeşte valoarea 1 la terminalul Ti şi în ciclul următor se citeşte valoarea 0 la acelaşi terminal Ti. Numărătorul este decrementat în faza S3P1 a ciclului maşină următor celor două în care s-a detectat frontul căzător la terminalul Ti. Întrucât sunt necesare 2 cicluri maşină pentru o detectare, rezultă că frecvenţa maximă de numărare este de 1/ 24 din frecvenţa tactului.Funcţionarea contoarelor TIMER 0 şi TIMER 1 este controlată de 2 registre: TMOD ("Timer Mode Register"), fig. 3.4 şi TCON ("Timer Control Register"), fig. 3.5.

7 6 5 4 3 2 1 0

GATE C/ /T M1 M0 GATE C/ /T M1 M0TMOD.0-1: M0, M1: fixează modul de lucru pentru TIMER 0 conform tab. 3.5.

M1 M0 Mod

0 00 11 01 1

0123

Tab. 3.5 Modul de lucru la TIMER 0 sau 1 al microcontrolerului 80C51

Page 11: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 150

TMOD.2: C/ /T: stabileşte sursa tactului pentru numărare:0: sursa tactului este fOSC divizat la 12, 1: sursa tactului este T0.TMOD.3: GATE: controlează pornirea şi oprirea numărării:0: pornirea/ oprirea este controlată de rangul TR0, 1: numărarea este pornită dacă TR0 = /INT0 = 1 şi este oprită dacă TR0 = 0 sau /INT0 = 0.TMOD.4-5: idem cu TMOD.0-1 dar pentru TIMER 1.TMOD.6: idem cu TMOD.2 dar pentru TIMER 1.TMOD.7: idem cu TMOD.3 dar pentru TIMER 1.

Fig. 3.4 Structura registrului TMOD al microcontrolerului 80C51

7 6 5 4 3 2 1 0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TCON.0: IT0: stabileşte dacă întreruperea externă care soseşte pe intrarea /INTO va fi luată în considerare pe frontul căzător, 1 sau pe nivel, 0.TCON.1: IE0: indicator pentru întreruperea externă 0; este setat dacă s-a detectat întreruperea externă /INT0; este anulat dacă întreruperea este deservită, atunci când aceasta este luată în considerare pe front, adică IT0 = 1.TCON.2-3: idem cu TCON.0-1 dar pentru TIMER 1.TCON.4: TR0: rang de control pentru pornirea/ oprirea numărării la TIMER 0: 1 porneşte numărarea iar 0 o opreşte.TCON.5: TF0: indicator de depăşire a numărătorului; este poziţionat la depăşirea capacităţii numărătorului provocată de o incrementare din starea FFFFH în starea 0000 şi este o sursă pentru cererea de întrerupere de la TIMER 0; este anulat automat atunci când întreruperea este deservită.TCON.6-7: idem cu TCON.4-5 dar pentru TIMER 1.

Fig. 3.5 Structura registrului TCON al microcontrolerului 80C51

Controlul numărarii este realizat de rangurile TMOD.3 şi TMOD.7, GATE, pentru TIMER 0, respectiv TIMER 1. Dacă GATE = 0 atunci rangurile TCON.4, TRO, respectiv TCON.6, TR1, vor controla numărarea. Dacă TRi = 1, numărarea porneşte iar dacă TRi = 0, numărarea se opreşte. Dacă GATE = 1 atunci numărarea porneşte dacă TRi & /INTi = 1 şi se opreşte dacă TRi = 0 sau /INTi = 0. În acest caz controlul numărării poate fi realizat extern, prin /INTi. O aplicaţie este aceea că se pot astfel măsura durate de semnale externe.Selectarea tactului este realizată de TMOD.2, respectiv TMOD.6, C/ /T. Dacă C/ /T = 0 atunci sursa tactului este fOSC/ 12 iar dacă C/ /T = 1 atunci sursa tactului este un semnal extern aplicat la terminalele T0, respectiv T1.Schema care implementează controlul numărării şi selectarea tactului este prezentată în fig. 3.6. S5 este un semnal obţinut în timpul fiecărui ciclu maşină şi indică starea a 5-a dinciclu.

fOSC / 12

CLOCKpentru

TIMER 0 sau

TIMER1

T0 sau T1 Detector

C / /T

/INT0sau

/INT1S5

GATETR0 sau TR1

D Q

T

Page 12: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

151 Microcontrolere - 3

Fig. 3.6 Controlul numărării şi selectarea tactuluila contoarele/ temporizatoarele microcontrolerului 80C51

Există 4 moduri de lucru pentru TIMER 0 şi 1, selectabile prin rangurile corespunzătoare M1 şi M0.

Modul 0TIMER 0 şi 1 sunt configurate ca numărătoare pe 13 biţi. TL0 şi TL1 sunt numărătoare alcătuite din 5 ranguri, cele mai puţin semnificative iar TH0 şi TH1 sunt numărătoare pe 8 biţi. Indicatorii de depăşire TF0 şi TF1 sunt poziţionaţi atunci când numărătorul corespunzător conţine valoarea maximă şi este incrementat, anulându-se astfel conţinutul său. Semnalul care apare la ieşirea de depăşire a lui TIMER 1 este sursă pentru tactul serial. Fig. 3.7 prezintă pe TIMER 0 şi 1 în modul 0.

Fig. 3.7 TIMER 0 şi 1 în modul 0 la microcontrolerul 80C51

Modul 1

CLOCK TF0TL05 biţi

TH08 biţi

CLOCK TF1TL15 biţi

TH18 biţi

Tact serial

Page 13: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 152

Este identic cu modul 0, cu excepţia faptului că numărătoarele sunt pe 16 biţi. Fig. 3.8 prezintă pe TIMER 0 şi 1 în modul 1.

Fig. 3.8 TIMER 0 şi 1 în modul 1 la microcontrolerul 80C51

Modul 2TIMER 0 şi 1 sunt configurate ca numărătoare pe 8 biţi cu auto-âncărcare. TL0 şi TL1 sunt folosite ca numărătoare iar TH0 şi TH1 sunt folosite ca registre pentru păstrarea constantei care se va încărca. Semnalul de depăşire generat de TL0 sau TL1 va provoca preâncărcarea acestora şi numărarea va continua de la această valoare. TH0 şi TH1 sunt încărcate prin program. Indicatorii TF0 şi TF1 sunt poziţionaţi de semnalele de depăşire de la numărătoarele TL0, respectiv TL1. Semnalul de depăşire generat de numărătorul TL1 este sursă pentru tactul serial. Fig. 3.9 prezintă pe TIMER 0 şi 1 în modul 2.

Modul 3Acest mod poate fi cerut doar pentru TIMER 0. Dacă i se cere lui TIMER 1, acesta nu va număra (se obţine acelaşi efect ca şi când TR1 = 0). TIMER 0 în modul 3 lucrează ca două numărătoare independente pe 8 biţi. TL0 foloseşte rangurile de control ale lui

TIMER 0, adică C/ /T, GATE, TR0 şi /INT0 şi comandă pe TF0 iar TH0 foloseşte pe TR1 şi comandă pe TF1.Acest mod este util în aplicaţii în care se cere un numărător suplimentar. TIMER 0 furnizează 2 contoare pe 8 biţi iar TIMER 1 poate fi folosit în modurile 0, 1 sau 2 fără a putea, însă, să poziţioneze pe TF1 deci nu va putea să genereze cerere de întrerupere. Fig. 3.10 prezintă pe TIMER 0 în modul 3.

CLOCK TF0TL08 biţi

TH08 biţi

CLOCK TF1TL18 biţi

TH18 biţi

Tact serial

Page 14: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

153 Microcontrolere - 3 Fig. 3.9 TIMER 0 şi 1 în modul 2 la microcontrolerul 80C51

Fig. 3.10 TIMER 0 în modul 3 la microcontrolerul 80C51

3.1.3.4 Interfaţa serială

Microcontrolerul 80C51 posedă o interfaţă serială UART ("Universal Asynchronous Receiver/ Transmitter"), full duplex, ceea ce înseamnă că poate emite şi recepţiona simultan. Blocul de recepţie posedă un dublu tampon, alcătuit dintr-un registru de deplasare şi un registru tampon, ceea ce înseamnă că se realizează recepţia unui caracter simultan cu predarea caracterului recepţionat anterior către CPU, rezultând astfel câştig de timp. Totuşi, dacă un caracter nu este preluat de unitatea centrală în timp ce se încheie asamblarea caracterului următor, primul se va pierde. Interfaţa serie poate lucra în modul I/ E (intrare/ ieşire) extins sau în modul UART. În modul I/ E extins, transferul se face sincron cu tactul microcontrolerului. În modul UART se pot transfera caractere pe 10 sau 11 biţi. Caracterul pe 11 biţi este alcătuit dintr-un bit de START, 8 biţi de date, un al 9-lea bit programabil şi bitul de STOP.Schema bloc a interfeţei seriale este prezentată în fig. 3.11.

CLOCK TL0 TF0

TH0

CLOCK TL1 TF1

TH1 Tact serial

TR1fOSC / 12 TH0 TF1

TL0 TF0CLOCK

Logicăcontrol

transmisie

SBUF (T)SBUF (R)Registru deplasare

Logicăcontrolrecepţie

MUX

SCON SMOD

fTIM

fOSC / 2

ÎntrerupereMagistrală

internă MUX

TxD

RxD

Page 15: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 154

Fig. 3.11 Interfaţa serială la microcontrolerul 80C51

Aceasta cuprinde logica de control pentru transmisie şi recepţie, registrul de control SCON ("Serial Control Register"), registrele tampon SBUF ("Serial Buffer Register") şi rangul SMOD.Registrul SCON, fig. 3.12, conţine biţi de control pentru a specifica modurile de operare, activarea/ dezactivarea recepţiei de date, memorarea celui de-al 9-lea bit de date şi starea interfeţei seriale. Fiecare rang poate fi adresat individual.

7 6 5 4 3 2 1 0SM0 SM1 SM2 REN TB8 RB8 TI RI

SCON.0: RI: este un indicator activat de interfaţa serială atunci când a terminat de asamblat un caracter şi îl poate oferi unităţii centrale; împreuna cu rangul TI constituie intrări pentru o poartă SAU, a cărei ieşire poate fi folosită ca cerere de întrerupere; ştergerea indicatorului se face doar prin program.SCON.1: TI: indicator activat de interfaţa serială atunci când a terminat de transmis un caracter şi poate primi altul de la unitatea centrală; împreună cu rangul RI constituie

Page 16: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

155 Microcontrolere - 3 intrări pentru o poartă SAU a cărei ieşire poate fi folosită ca cerere de întrerupere; ştergerea indicatorului se face doar prin program.SCON.2: RB8: rang pentru memorarea celui de-al 9-lea bit recepţionat dintr-un caracter pe 11 biţi, folosit în modurile 2 şi 3; în modul 1 va reţine bitul STOP dacă rangul SM2 = 0 iar în modul 0 nu este folosit.SCON.3: TB8: rang pentru memorarea celui de-al 9-lea bit de date ce se va transmite într-un caracter pe 11 biţi, folosit în modurile 2 şi 3; este poziţionat prin program.SCON.4: REN: trebuie să fie setat pentru ca recepţia să fie activată.SCON.5: SM2: validează facilitatea de comunicare în sistem multiprocesor, în modurile 2 sau 3; dacă SM2 = 1, în modurile 2 sau 3 (cu 11 biţi/ caracter) şi al 9-lea bit de date este 1 atunci data recepţionată este acceptată şi este încărcată în SBUF şi RB8 şi indicatorul RI este activat; dacă al 9-lea bit de date este 0, data este ignorată şi SBUF, RB8 şi RI rămân nemodificate; dacă SM2 = 1 în modul 1 (cu 10 biţi/ caracter), se va încărca bitul de STOP în RB8, data este preluată şi indicatorul RI este activat; dacă SM2 = 0, data este acceptată indiferent de valoarea celui de=al 9-lea bit de date sau a bitului de STOP.SCON. 6-7: SM1, SM0: setează modul de lucru al interfeţei seriale, conform tab. 3.6.

SM0 SM1 Mod Descriere Rata de transfer

0 00 11 01 1

0123

I/ E extinsUART cu 10 biţiUART cu 11 biţiUART cu 11 biţi

fOSC/ 12VariabilăfOSC/ 32 sau fOSC/ 64Variabilă

Tab. 3.6 Modul de lucru al interfeţei seriale a microcontrolerului 80C51Fig. 3.12 Structura registrului SCON al microcontrolerului 80C51

Registrul SBUF este tamponul pentru date. Deşi îi corespunde o singură adresă, este alcătuit din 2 registre: unul pentru transmisie şi unul pentru recepţie. Corespunzător, SBUF poate fi specificat în instrucţiuni ca registru sursă sau ca registru destinaţie. Transmisia este anclanşată prin înscrierea datei în SBUF iar la recepţie, data este citită din SBUF.Rangul SMOD este rangul 7 din registrul PCON ("Power Control Register") şi are rolul să divizeze cu 2 ( SMOD = 1) sau nu (SMOD = 0), rata de transfer.În continuare vor fi descrise modurile de lucru ale interfeţei seriale.

Modul 0Este modul numit şi I/ E extins în care se transferă date pe 8 biţi, sincronizate cu tactul microcontrolerului. Terminalul TxD este folosit doar pentru a genera tactul iar terminalul RxD este folosit pentru a transfera date în ambele sensuri.Transmisia este iniţiată prin scrierea în registrul SBUF. După un ciclu maşină de la încheierea scrierii în SBUF, apare cel mai puţin semnificativ bit al datei la pinul RxD. După 2 stări de la apariţia acestui bit, este activat, la 0, tactul pe linia TxD. O periodă completă a tactului corespunde unui ciclu maşină (începe şi se termină în a 2-a fază a stării S3). După transferul bitului cel mai semnificativ al datei, logica de transmisie este activată şi este setat indicatorul TI.Recepţia este activată atunci când REN = 1 şi RI = 0. Aceasta se va realiza prin program. Tactul de pe linia TxD se va activa, la 0, după 9 stări după ce REN = 1 şi RI = 0. O

Page 17: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 156

perioadă a tactului de pe linia TxD corespunde unui ciclu maşină. Data este citită de pe linia RxD în registrul tampon de citire imediat înaintea tranziţiei 0 -> 1 a tactului. După ce preluarea caracterului s-a încheiat, el este transferat în SBUF, logica de recepţie este iniţializată şi se activează indicatorul RI.Rata de transfer în modul 0 este:R = fOSC/ 12.Fig. 3.13 prezintă diagrama transferului în modul 0.

Fig. 3.13 Transferul în modul 0 al interfeţei seriale a microcontrolerului 80C51

Modul 1Este un mod UART în care se transferă caractere pe 10 biţi: 1 bit de START, 8 biţi de date, primul fiind cel mai puţin semnificativ şi 1 bit de STOP. La recepţie, bitul de STOP se încarcă în RB8. Fig. 3.14 prezintă schema bloc a interfeţei seriale în modul 1 iar fig. 3.15 prezintă diagrama transferului în modul 1.Rata de transfer este determinată de frecvenţa semnalului de la ieşirea de depăşire a lui TIMER 1, fTIM. Dacă TIMER 1 lucrează în modul 0 sau 1 atunci rata de transfer este: 2SMOD

R = ------------ * fTIM. 32 Dacă TIMER 1 lucrează în modul 2 atunci rata de transfer este: 2SMOD fOSC

R = ------------- * --------------------------------; (TH1) este constanta de preâncărcare. 32 12 * (256 - (TH1))TIMER 1 poate lucra ca şi contor sau ca temporizator şi este necesară dezactivarea întreruperii generată de TF1.Transmisia se realizează pe terminalul TxD şi este anclanşată de o scriere în tamponul SBUF. Tactul fOSC sau fTIM divizat la 2 sau nu de SMOD, este divizat la 16 de un numărător. Transmisia începe prin plasarea bitului de START la începutul ciclului maşină care urmează după ce numărătorul a executat un ciclu complet, după încheierea scrierii în

CLK

TRANSMISIE

S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1

RxD(DATE)

TxD(Tact)

RECEPŢIE

TxD(Tact)

RxD(DATE)

Page 18: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

157 Microcontrolere - 3

Fig. 3.14 Schema bloc a interfeţei seriale în modul 1 la microcontrolerul 80C51

Magistrala internă

SBUF (T)/S

D Q/R

TB8Scrie înSBUF

Start Deplasare

Tact TI

Logică controltransmisie Date

Transfer

TxD

Numărător/ 16

Numărător/ 16

/2SMOD== 0

fTIM

Tact RITransfer

Start Deplasare

789

Logică controlrecepţie

Întreruperede la

interfaţaserie

Detectorbit

7 8 9

Detectortranziţie1 0

Registru deplasarerecepţie

RxD

SBUF (R)

CiteşteSBUF

Magistrala internă

SMOD== 1

Page 19: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 158

SBUF. În continuare, la fiecare ciclu complet al numărătorului se emite un bit de date. După ce se emite şi bitul de STOP, se activează indicatorul TI.Recepţia se realizează pe terminalul RxD şi este anclanşată de o tranziţie 1 -> 0 pe acest terminal. Această tranziţie corespunde bitului de START şi numărătorul mod 16 începe să numere. Un ciclu complet al numărătorului corespunde unui bit serie recepţionat. Înconsecinţă TIMER 1 trebuie să fie încărcat cu o astfel de valoare încât perioada

numărătorului mod 16 să fie egală cu rata de recepţie.

Fig. 3.15 Transferul în modul 1 al interfeţei seriale a microcontrolerului 80C51

După ce numărătorul începe să numere, în stările 7, 8 şi 9 ale acestuia, logica de recepţie citeşte linia RxD şi dacă găseşte cel puţin 2 valori 0, consideră bitul de START ca fiind

TRANSMISIE

Tact

Scrie înSBUF

/Transfer

Date

Deplasare

D0 D1 D2 D3 D4 D5 D6 D7 TB8TxD START STOP

TI

RECEPŢIE

Tact

RxD D0 D1 D2 D3 D4 D5 D6 D7 RB8START STOP

7, 8, 9

Deplasare

RI

Page 20: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

159 Microcontrolere - 3 valid, îl preia şi îl introduce în registrul de deplasare din tamponul de recepţie. În caz contrar consideră că a fost un impuls de START fals şi revine în starea iniţială în care aşteaptă o nouă tranziţie 1 -> 0 pe linia RxD.După preluarea bitului de START, sunt preluaţi în mod analog şi biţii de date ce sosesc de pe linia serială. Un bit este citit în stările 7, 8 şi 9 ale numărătorului şi valoarea preluată este cea care corespunde la cel puţin 2 din 3 citiri. În acest fel s-a implementat un mecanism de rejecţie a zgomotelor.În timpul bitului de STOP, în starea 10 a numărătorului, data din registrul de deplasare este încărcată în SBUF, bitul de STOP este încărcat în RB8, circuitele de recepţie sunt iniţializate şi se activează indicatorul RI.Încărcarea datei în SBUF, a bitului de STOP în RB8 şi activarea indicatorului RI se realizează doar dacă în momentul respectiv sunt îndeplinite condiţiile:- RI = 0 şi- SM2 = 0 sau SM2 = 1 şi bitul STOP = 1.Dacă vreuna din aceste condiţii nu este îndeplinită atunci data este ignorată şi SBUF, RB8 şi RI rămân nemodificate.

Modul 2Este un mod UART cu 11 biţi/ caracter: 1 bit de START, 8 biţi de date, 1 bit programabil şi 1 bit de STOP. La transmisie, bitul al 9-lea este TB8 şi poate fi programat iar la recepţie, bitul al 9-lea este încărcat în RB8. Rata de transfer este: 2SMOD

R = -------------- * fOSC 64 Transmisia şi recepţia se realizează întocmai ca şi în modul 1, utilizând aceleaşi resurse hardware şi acelaşi mecanism de rejecţie a zgomotelor. Apare o singură diferenţă, legată de al 9-lea bit de date. Astfel la transmisie, după bitul de START şi cei 8 biţi de date, emişi în aceeaşi ordine ca şi la modul 1, este emis al 9-lea bit, TB8, care poate fi bitul de paritate dacă în prealabil acesta a fost încărcat în TB8, apoi se emite bitul de STOP şi se activează indicatorul TI.La recepţie, după preluarea bitului de START şi a biţilor de date, este preluat al 9-lea bit, care se încarcă în RB8, apoi este preluat bitul de STOP şi se activează indicatorul RI. Preluarea datei, încărcarea celui de-al 9-lea bit în RB8 şi activarea indicatorului RI au loc dacă sunt îndeplinite, la momentul respectiv, condiţiile:- RI = 0 şi- SM2 = 0 sau SM2 = 1 şi bitul al 9-lea = 1.Dacă vreuna din aceste condiţii nu este îndeplinită atunci data este ignorată şi SBUF, RB8 şi RI rămân nemodificate.Modul 3Este un mod UART cu 11 biţi/ caracter care diferă de modul 2 doar prin rata de transfer care aici, depinde de fTIM. Astfel: 2SMOD

R = -------------- * fTIM, 32dacă TIMER 1 lucrează în modul 0 sau 1 şi 2SMOD fOSC

R = ------------- * ------------------------------, 32 12 * (256 - (TH1))

Page 21: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 160

dacă TIMER 1 lucrează în modul 2.TIMER 1 poate lucra ca şi contor sau temporizator şi este necesară dezactivarea întreruperii generată de TF1.În tab. 3.7 se prezintă ratele de transfer uzuale şi cum pot fi ele obţinute din TIMER 1.

Rata de transfer fOSC

[MHz]SMOD TIMER 1

C//T Mod Const. de preâncărcare

Mod O:max. 1,67 Mbiţi/sMod 2:max. 625 Kbiţi/sMod1,3:max.104,2 Kbiţi/s19,2 Kbiţi/s9,6 Kbiţi/s4,8 Kbiţi/s2,4 Kbiţi/s1,2 Kbiţi/s110 biţi/s110 biţi/s

20202011,05911,05911,05911,05911,059126

x111000000

x x x x x x 0 2 FFH 0 2 FDH 0 2 FDH 0 2 FAH 0 2 F4H 0 2 E8H 0 1 D4H 0 2 72H

Tab. 3.7 Ratele de transfer uzuale la microcontrolerul 80C51

În continuare se va descrie facilitatea de comunicare în sistem multiprocesor. Aceasta se bazează pe existenţa celui de-al 9-lea bit de date în modurile 2 sau 3. Dacă rangul SM2 = 1 şi bitul al 9-lea este 1 atunci data este preluată iar dacă bitul al 9-lea este 0 atunci data este neglijată.

Fie un sistem multiprocesor, fig. 3.16, cu un microcontroler master şi mai multe microcontrolere slave. Datele vor fi transmise doar de la master la slave.

Fig. 3.16 Sistem multumicroprocesorÎn faza iniţială, toate microcontrolerele slave au SM2 = 1 şi aşteaptă să fie selectate. Microcontrolerul master emite adresa microcontrolerului slave selectat. Adresa diferă de date prin aceea că are rangul al 9-lea, TB8, egal cu 1. Toate microcontrolerele slave vor prelua adresa, îşi vor genera întreruperi şi în rutinele de tratare vor verifica propria adresă cu cea sosită de la microcontrolerul master. Microcontrolerul slave selectat va modifica SM2 deci doar la acesta va exista SM2 = 0 iar la toate celelalte microcontrolere slave va exista SM2 = 1. În continuare, microcontrolerul master emite datele, cu TB8 = 0. Doar acel microcontroler slave care va avea SM2 = 0 va prelua datele iar toate celelalte microcontrolere slave le vor ignora întrucât la acestea SM2 = 1. După ce

TxD80C51

MASTER

RxD80C51

SLAVE

RxD80C51

SLAVE

RxD80C51

SLAVE. . .

. . .

Page 22: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

161 Microcontrolere - 3 microcontrolerul master a emis toate datele, el va emite un cod de final, predeterminat, care va avea caefect setarea lui SM2 de către microcontrolerul slave care a fost selectat. În acest fel s-a revenit în starea iniţială în care toate microcontrolerele slave au SM2 = 1 şi aşteaptă să fie selectate.

3.1.3.5 Sistemul de întreruperi

Microcontrolerul 80C51 posedă 5 surse pentru întreruperi: 2 întreruperi externe generate la intrările /INT0 şi /INT1 şi 3 întreruperi interne: 2 de la circuitele contoare/ temporizatoare şi una de la întreruperea serială.Cererile de întrerupere setează indicatori care sunt ranguri din registrele TCON şi SCON. Astfel întreruperile externe setează indicatorii IE0 (TCON.1) şi IE1 (TCON.3), întreruperile de la contoare setează rangurile TF0 (TCON.5) şi TF1 (TCON.7) iar întreruperea serială setează fie rangul RI (SCON.0) fie rangul TI (SCON.1). RI şi TI sunt intrări într-o poartă SAU a cărei ieşire este cererea de întrerupere de la interfaţa serială.Întreruperile sunt controlate de 2 registre: IE ("Interrupt Register"), fig. 3.17 şi IP ("Priority Register"), fig. 3.18.Rolul registrului IE este acela de a valida/ invalida întreruperile. Pentru a valida o întrerupere, bitul corespunzător trebuie să fie 1 iar pentru a o dezactiva, bitul corespunzător trebuie să fie 0.

7 6 5 4 3 2 1 0EA - - ES ET1 EX1 ET0 EX0

IE.0: EX0: bit de control pentru întreruperea externă 0.IE.1: ET0: bit de control pentru contorul/ temporizatorul 0.IE.2: EX1: bit de control pentru întreruperea externă 1.IE.3: ET1: bit de control pentru contorul/ temporizatorul 1.IE.4: ES: bit de control pentru întreruperea serială.IE.7: EA: bit de control general: dacă este 0 atunci o întrerupere nu poate fi tratată; dacă este 1 atunci o întrerupere poate fi tratată dacă bitul de control corespunzător este 1.

Fig. 3.17 Structura registrului IE al microcontrolerului 80C51

Rolul registrului IP este acela de a aloca priorităţi. Există 2 nivele de prioritate: scăzut şi ridicat. Fiecărei surse i se poate aloca , în mod independent, oricare nivel de prioritate. Fiecărei întreruperi îi corespunde un rang: 1 în rangul respectiv înseamnă prioritate ridicată iar 0 în rangul respectiv înseamnă prioritate scăzută. Dacă apar simultan 2 cereri de întrerupere, de priorităţi diferite, va fi tratată cererea de prioritate mare. Dacă apar simultan 2 sau mai multe cereri de aceeaşi prioritate, microcontrolerul le va lua în considerare într-o ordine prestabilită care este: IE0, TF0, IE1, TF1 şi, ultima, RI + TI. Rutina de tratare a unei întreruperi de prioritate scăzută poate fi întreruptă de o cerere de prioritate ridicată dar nu şi invers. Rutina de tratare a unei întreruperi nu poate fi întreruptă de o cerere de aceeaşi prioritate.

7 6 5 4 3 2 1 0

Page 23: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 162

- - - PS PT1 PX1 PT0 PX0IP.0: PX0: rang de prioritate pentru întreruperea externă 0.IP.1: PT0: rang de prioritate pentru întreruperea de la contorul/ temporizatorul 0.IP.2: PX1: rang de prioritate prntru întreruperea externă 1.IP.3: PT1: rang de prioritate pentru întreruperea de la contorul/ temporizatorul 1.IP.4: PS: rang de prioritate pentru întreruperea serială.

Fig. 3.18 Structura registrului IP al microcontrolerului 80C51

Întreruperile sunt citite în timpul lui S5P2 al fiecărui ciclu maşină. Apoi are loc o testare a ceea ce s-a citit în timpul următorului ciclu maşină. Dacă vreunul din indicatorii de întrerupere a fost găsit activ şi dacă întreruperea respectivă este validată atunci sistemul de întreruperi va genera o instrucţiune LCALL ("Long CALL") ADR, unde ADR depinde de tipul întreruperii, conform tab. 3.8.

Tip de întrerupere Adresă

IE0TF0IE1TF1RI + TI

0003H000BH0013H001BH0023H

Tab. 3.8 Adresele corespunzătoare întreruperilor la microcontrolerul 80C51

Instrucţiunea LCALL nu se va genera în una din următoarele situaţii:1. o întrerupere de prioritate egală sau mai mare este deja în tratare;2. ciclul curent de testare nu este ultimul ciclu al instrucţiunii curente sau3. instrucţiunea curentă este RETI sau o instrucţiune ce scrie în registrele IE sau IP.Condiţia 2. asigură luarea în considerare a unei cereri de întrerupere doar la sfirşitul unei instrucţiuni iar condiţia 3. asigură luarea în considerare a unei cereri de întrerupere doar după ce se execută încă o instrucţiune după RETI sau după cea care scrie în registrele IE sau IP.Ciclul de testare este repetat în fiecare ciclu maşină iar valorile testate sunt cele citite în S5P2 a ciclului anterior. Dacă o întrerupere este activă dar nu a fost considerată datorită uneia din condiţiile anterioare, ea nu este memorată. Ea va fi luată în considerare doar dacă mai rămâne activă după îndepărtarea condiţiei de blocare. Fig. 3.19 prezintă timpul de răspuns la o cerere de întrerupere.

C1 C2 C3 C4 C5S5P2 S6

.......... ... ... ... ...

Întreruperilesunt

activate

Citireaîntreruperilor

Întrerupe-rile sunttestate

LCALLRutina

de tratare

Page 24: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

163 Microcontrolere - 3 Fig. 3.19 Tratarea întreruperilor la microcontrolerul 80C51

În ciclul C1 se fac citirile, în ciclul C2 se fac testările, în ciclurile C3 şi C4 se generează instrucţiunea LCALL iar ciclul C5 corespunde primei instrucţiuni din rutina de tratare. Dacă o întrerupere de prioritate mai mare decât cea tratată se activează înainte de S5P2 a ciclului maşină C3 atunci în C4 va fi testată iar în C5 şi C6 se va genera instrucţiunea LCALL pentru ea, fără a mai începe execuţia rutinei de tratare a întreruperii de prioritate mai mică. Din fig. 3.19 rezultă că timpul minim de răspuns din momentul activării unei cereri de întrerupere şi până la tratarea ei este de 3 cicluri maşină. Valoarea maximă a acestui timp depinde de condiţiile care împiedică generarea instrucţiunii LCALL. Dacă este îndeplinită condiţia 1. atunci timpul depinde de durata rutinei de tratare în timpul căreia a apărut noua cerere. Dacă este îndeplinită condiţia 2. atunci timpul suplimentar nu poate fi mai mare decât 3 cicluri maşină deoarece cele mai lungi instrucţiuni (MUL şi DIV) au 4 cicluri maşină. Dacă este îndeplinită condiţia 3 atunci timpul suplimentar nu poate fi mai mare decât 5 cicluri maşină (1 eventual ciclu pentru încheierea instrucţiunii în curs şi 4 cicluri în cazul cel mai defavorabil când instrucţiunea ce urmează este MUL sau DIV). Deci dacă există o singură sursă de întrerupere atunci timpul de răspuns este între 3 şi 8 cicluri maşină.Instrucţiunea LCALL va depune conţinutul lui PC în stivă şi va încărca PC cu adresa de salt. De asemenea, în unele cazuri, are loc ştergerea, prin hardware, a indicatorului ce corespunde întreruperii tratate. Astfel sunt şterşi indicatorii TF0, TF1 şi IE0, IE1 dar numai dacă întreruperea externă este activă pe front. Indicatorul ce corespunde întreruperii seriale trebuie sa fie şters doar prin program.Execuţia rutinei de tratare a cererii de întrerupere se încheie la întâlnirea instrucţiunii RETI. Aceasta încarcă în PC adresa de revenire şi iniţializează sistemul de întreruperi. Rutina se poate încheia şi cu instrucţiunea RET dar aceasta nu va iniţializa sistemul de întreruperi.Întreruperile externe pot fi programate, prin rangurile IT0, respectiv IT1 din registrul TCON, să fie active pe nivel sau pe front. O tranziţie 1 -> 0 pe una din intrările /INT0 sau /INT1 va poziţiona indicatorul IE0 sau IE1, dacă întreruperea este validată, dacă cererea are o durată minimă de 12 perioade de tact pe nivel 1 şi 12 perioade de tact pe nivel 0. Această condiţie rezultă din faptul că terminalele /INT0 şi /INT1 sunt citite doar o singură dată în fiecare ciclu maşină.Dacă cererea externă este activă pe nivel, ea trebuie să rămână activă până la începerea execuţiei rutinei de tratare, după care trebuie dezactivată înainte de încheierea rutinei pentru a evita o nouă tratare a ei.

Ca o aplicaţie a tratării întreruperilor se va prezenta modalitatea de execuţie a unui program în mod pas cu pas. S-a arătat că o cerere de întrerupere nu va fi luată în considerare dacă apare în timpul tratării unei întreruperi de aceeaşi prioritate şi nici dacă apare în timpul instrucţiunii RETI, caz în care este necesară execuţia a încă unei instrucţiuni. Aceasta înseamnă că dacă s-a intrat în rutina de tratare a cererii de întrerupere, o nouă intrare în această rutină este posibilă doar dacă se execută o instrucţiune din programul principal. Pe această trăsătură se bazează tehnica de realizare a modului pas cu pas. Pentru aceasta se programează activarea unei întreruperi externe, de exemplu /INT0, pin P3.2, pe nivel iar rutina de tratare va trebui să se încheie cu secvenţa:JNB P3.2,$ - se aşteaptă până când /INT0 devine 1;

Page 25: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 164

JB P3.2,$ - se aşteaptă până când /INT0 devine 0;RETI - întoarcere în programul principal pentru execuţia a încă unei instrucţiuni.Dacă /INT0 este în starea 0, CPU va intra în rutina de tratare a întreruperii externe 0 şi va rămâne acolo până ce apare un impuls pe linia /INT0 (o trecere la 1 urmată de o nouă trecere la 0). Apoi va executa RETI, se va întoarce în programul principal unde va mai executa o instrucţiune şi va reintra în rutina de tratare după care totul se repetă.

3.1.3.6 Iniţializarea microcontrolerului

Microcontrolerul 80C51 este iniţializat prin aplicarea unui nivel 1 la intrarea RST, în timp ce oscilatorul funcţionează şi menţinerea acestui nivel cel puţin 24 perioade de tact.Semnalul extern RST este asincron în raport cu tactul microcontrolerului. El este testat în faza S5P2 a fiecărui ciclu maşină. După ce microcontrolerul sesizează activarea lui RST, terminalele îşi menţin activităţile timp de 19 perioade de tact, adică între 19 şi 31 perioade de tact după ce s-a aplicat semnalul extern RST.După dezactivarea lui RST, starea registrelor interne este prezentată în tab. 3.9.

Registru Conţinut

PC, DPTRACC,B, PSW, TMOD, TCON, TH0, TL0, TH1, TL1, SCONSPP0 - P3SBUFIPIEPCON

00000007FFH(intrări)nedeterminatxxx00000B0xx00000B0xxx0000B

Tab. 3.9 Conţinutul registrelor după iniţializarea microcontrolerului 80C51

Conţinutul memoriei RAM interne nu este afectat de RST. La cuplarea tensiunii de alimentare, conţinutul memoriei RAM este nedeterminat.

3.1.3.7 Modurile de lucru cu consum redus

Microcontrolerul 80C51 are 2 moduri de lucru cu consum redus: modul Idle şi modul Power - Down. Instalarea lor se face prin program, acţionând asupra a câte unui rang din registrul PCON ("Power Control Register"), fig. 3.20.7 6 5 4 3 2 1 0

SMOD - - - GF1 GF0 PD IDLPCON.0: IDL: 1 în acest rang instalează modul Idle.PCON.1: PD: 1 în acest rang instalează modul Power - Down.

Page 26: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

165 Microcontrolere - 3 PCON.2, 3: GF0, GF1: ranguri pentru uz general.PCON.7: SMOD: utilizat la interfaţa serială.

Fig. 3.20 Structura registrului PCON al microcontrolerului 80C51Modul IdleMicrocontrolerul intră în acest mod după activarea, de către o instrucţiune, a rangului IDL. Oscilatorul, interfaţa serială, contoarele/ temporizatoarele şi sistemul de întreruperi continuă să funcţioneze dar tactul nu mai ajunge la CPU. Întregul CPU îşi păstrează starea. Terminalele de la porturi păstrează nivelul logic avut la instalarea modului Idle iar ALE şi /PSEN vor avea nivel 1.Ieşirea din modul Idle se poate face pe 2 căi. Una constă într-o întrerupere validată. Ea va fi luată în considerare şi, după instrucţiunea RETI, microcontrolerul va executa instrucţiunea ce urmează după cea care a instalat modul Idle. Rangurile GF0 şi GF1 pot fi folosite pentru a indica dacă întreruperea a apărut în modul normal sau în modul Idle.O altă cale constă în activarea liniei RST cel puţin 24 perioade de tact. Rangul IDL va fi şters şi microcontrolerul va continua execuţia de la instrucţiunea următoare celeia care a instalat modul Idle. Întrucât algoritmul intern de iniţializare durează aproximativ 3 cicluri maşină, se recomandă inserarea de 3 instrucţiuni NOP după cea care a instalat modul Idle.

Modul Power - DownEste instalat de o instrucţiune ce activează rangul PD. Oscilatorul se opreşte, ca urmare starea întregului microcontroler rămâne nemodificată (microcontrolerul "îngheaţă"). Terminalele porturilor oglindesc starea rangurilor corespondente iar ALE şi /PSEN vor avea nivel 0. Singura ieşire din acest mod este prin activarea intrării RST.În acest mod Vcc poate fi redus la 2 V. Trebuie însă avut grijă ca reducerea să se facă după ce microcontrolerul a intrat în modul Power - Down iar activarea lui RST care provoacă ieşirea din modul Power - Down să se facă după ce Vcc a revenit la valoarea de lucru.

3.1.3.8 Porturile

Microcontrolerul 80C51 dispune de 4 porturi bidirectionale, pe 8 biţi, notate cu P0, P1, P2 şi P3. Fiecare port are un circuit de intrare, un registru intern notat tot cu P0, P1, P2 respectiv P3 şi un etaj de ieşire. Porturile sunt de uz general, fiecare rang poate fi programat independent ca intrare sau ieşire şi, în plus, porturile P0, P2 şi P3 au şi funcţiuni predeterminate.Astfel în ciclurile în care se face acces la memoria externă, liniile portului P0 constituie o magistrală multiplexată de adrese/ date, AD0 - 7, între jumătatea mai puţin semnificativă din magistrala de adrese şi cea de date iar liniile portului P2 vor transfera jumătatea mai semnificativă a magistralei de adrese. Atunci când se aduce un cod de instrucţiune din memoria de program externă, liniile porturilor P0 şi P2 vor fi comandate de PC iar atunci când se transferă o dată cu memoria de date externă liniile porturilor P0 şi P2 vor fi comandate de registrul DPTR. Dacă adresa datei externe este doar pe 8 biţi, atunci adresa se obţine pe liniile portului P0 care va fi comandat de registrul R0 sau R1.Rangurile portului P3 au funcţiuni specifice individuale conform tab. 3.10.

Page 27: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 166

Fig. 3.21 prezintă schema câte unui rang din fiecare port.

Fig. 3.21 Schema porturilor P0 - P3 ale microcontrolerului 80C51

D QP0.X

C /Q

Magistalăinternă

Scrieîn registru

Citiredin registru

Adrese / Date ControlpFET

nFET

P0.X

Terminal

Citireterminal

D QP1.X

C /Q

Magistalăinternă

Scrieîn registru

Citiredin registru

P1.X

Terminal

Citireterminal

D QP2.X

C /Q

Magistalăinternă

Scrieîn registru

Citiredin registru

Adrese Control

P2.X

Terminal

Citireterminal

D QP3.X

C /Q

Magistalăinternă

Scrieîn registru

Citiredin registru

P3.X

Terminal

Citireterminal

VCC

SAFuncţiunespecificăde ieşire

Funcţiune specifică de intrare

VCC

SA

VCC

SA

VCC

Page 28: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

167 Microcontrolere - 3

Fiecare rang este alcătuit dintr-un bistabil de tip D în care se înscrie informaţia, la sosirea comenzii de scriere şi al cărei conţinut poate fi citit prin intermediul unei porţi cu 3 stări. Restul circuitelor sunt specifice fiecărui port.

Rang Funcţia specifică

P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7

RxD: intrare serialăTxD: ieşire serială/INT0: întrerupere externă 0/INT1: întrerupere externă 1T0: intrare de numărare pentru contorul 0T1: intrare de numărare pentru contorul 1/WR: semnal de comandă pentru scrierea în memoria de date externă/RD: semnal de comandă pentru citirea din memoria de date externă

Tab. 3.10 Funcţiunile specifice ale rangurilor portului P3 al microcontrolerului 80C51

Portul 0Etajul de ieşire al portului 0 este alcătuit din 2 tranzistoare FET. Tranzistorul pFET va lucra doar atunci când rangul respectiv emite 1 în timpul acceselor la memoria externă iar în toate celelalte situaţii este blocat, ceea ce înseamnă că atunci când portul P0 este folosit ca port de ieşire, liniile sale sunt cu drenă în gol.În timpul acceselor la memoria externă, în registrul P0 se înscrie configuraţia FFH.Pentru a folosi rangurile portului P0 ca intrări, este necesară înscrierea în prealabil în rangurile corespunzătoare din registrul intern P0, a valorii 1. Aceasta va duce la blocarea tranzistorului nFET şi, întrucât şi tranzistorul pFET este blocat, terminalul respectiv va fi flotant şi poate fi comandat din exterior ca o intrare de mare impedanţă.

Portul 1Spre deosebire de portul 0 care este bidirecţional, portul 1 este un port cvasi-bidirecţional. Termenul cvasi-bidirecţional se referă la un port care prezintă pe fiecare rang câte o rezistenţă la tensiunea de alimentare atunci când este comandat ca intrare. P1 este un port de uz general, fără funcţii specifice.Sarcina activă, SA, din etajul de ieşire asigură o funcţionare performantă a portului. Astfel valoarea sa se modifică în funcţie de conţinutul rangului corespunzător. Fig. 3.22 prezintă schema sarcinii active pentru microcontrolerul 80C51 (varianta CMOS) iar fig. 3.23 prezintă o schemă echivalentă în care rezistenţa R1 corespunde tranzistorului pFET1, R2 corespunde lui pFET2 şi R3 corespunde lui pFET3. Schema echivalentă din fig. 3.23a corespunde rangului configurat ca ieşire, cu valoarea 1. Schema echivalentă din fig. 3.23b corespunde rangului configurat ca ieşire, cu valoarea 0. Schema echivalentă din fig. 3.23c corespunde tranziţiei 0 -> 1 a ieşirii în care se activează un circuit de accelerare. Acesta este tranzistorul pFET1 care se deschide timp de 2 perioade de tact după tranziţia 0 -> 1 de la ieşirea rangului din registrul intern şi va provoca generarea unui curent suplimentar care va determina creşterea vitezei de comutare 0 -> 1 la ieşirea corespunzătoare.

Page 29: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 168

Pentru utilizarea portului ca intrare este necesară înscrierea în prealabil a valorilor logice 1 în rangurile corespunzătoare. Dacă la intrare se aduce nivel 0 atunci rezistenţa R2 se deconectează de la Vcc iar rezistenţa internă va fi dată doar de R3, cu valoare mare, de 100 k, ceea ce va fixa un curent de intrare foarte mic. Dacă la intrare se aduce nivel 1

Fig. 3.22 Schema sarcinii active pentru microcontrolerul 80C51Fig. 3.23 Schema echivalentă a sarcinii active din porturile microcontrolerului 80C51

atunci rezistenţa R2 se reconectează la Vcc iar rezistenţa internă va fi fixată de valoarea de 10 k a acesteia.

Portul 2

Întîrziere2 perioade de tact

Ieşirearangului

VCC VCC VCC

pFET1 pFET2 pFET3

PX.Y

nFETTerminal

Citeşte terminalul

VCC R1=500

R2=10k

R3=100kIOH

VCC R1=500

R2=10k

R3=100k

IOL

VCC R1=500

R2=10k

R3=100k

a. b.a.

c.

Page 30: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

169 Microcontrolere - 3 Este de asemenea un port cvasi-bidirecţional. Sarcina activă are aceeaşi schemă ca la portul 1. În timpul acceselor la memoria externă, va transfera jumătatea mai semnificativă a magistralei de adrese. În acest timp, conţinutul registrului intern P2 nu este afectat, ceea ce înseamnă că dacă după un acces la memoria externă nu se execută un alt acces la memoria externă, pe terminalele portului P2 va apare conţinutul registrului intern P2. Dacă accesul la memoria externă de date se face doar pe 8 biţi, pe terminalele portului P2 va apare conţinutul registrului intern P2. În acest fel se poate realiza paginarea memoriei de date externe.În afara acceselor la memoria externă, portul P2 poate fi folosit ca port de uz general.

Portul P3Este de asemenea un port cvasi-bidirecţional. Este port de uz general dar are şi funcţiuni specifice. Atunci când funcţionează ca port de uz general are aceleaşi caracteristici ca portul P1. Pentru a utiliza funcţiunile sale specifice, este necesară programarea în prealabil a valorii logice 1 în rangurile corespunzătoare din registrul intern P3. În acest fel poarta ŞI-NU, fig. 3.21, va fi comandată de cealaltă intrare, corespunzătoare funcţiunii specifice. În cazul unei funcţiuni de ieşire (TxD, /RD, /WR), terminalul portului este comandat de linia "Funcţiune specifică de ieşire" iar în cazul unei funcţiuni de intrare (RxD, /INT0, /INT1, T0, T1), ieşirea porţii conectată la terminal, notată cu "Funcţiune specifică de intrare", este conectată în interiorul microcontrolerului în conformitate cu funcţiunea specifică realizată. În cazul rangurilor care sunt intrări este necesară blocarea tranzistorului nFET ceea ce se realizează înscriind în prealabil nivelul logic 1 în rangul corespunzător din registrul intern.

Scrierea într-un port se realizează în felul următor: noua valoare ajunge la registrul intern corespunzător în S6P2 a ciclului final al instrucţiunii care provoacă scrierea. Întrucât înscrierea în registru se face doar într-o fază P1, noile valori vor apare la ieşirile portului doar în S1P1 a ciclului maşină următor.Ieşirile portului P0 suportă o încărcare de 8 sarcini TTL LS iar ieşirile porturilor P1, P2 şi P3 suportă o încărcare de câte 4 sarcini TTL LS.La iniţializare toate porturile sunt configurate ca intrări, cu valorile FFH înscrise în registrele interne.După cum se observă din fig. 3.21, la fiecare port există facilitatea de a citi atât terminalul cât şi conţinutul rangului corespunzător din registrul intern. Instrucţiunile care citesc conţinutul rangului şi nu terminalul sunt cele care citesc o valoare, eventual o modifică şi apoi o rescriu în registrul intern. Ele sunt denumite instrucţiuni cu "citire - modificare - scriere". În continuare sunt prezentate aceste instrucţiuni, operandul destinaţie fiind un port sau un rang dintr-un port:ANL : ŞI logic, de exexmplu ANL P1, A,ORL : SAU logic, XRL : SAU - EXCLUSIV logic,JBC : salt dacă rangul specificat este 1 şi apoi anulare rang,CPL : complementare bit, de exemplu CPL P3.3,INC : incrementare,DEC : decrementare,DJNZ : decrementare şi salt dacă rezultatul nu este nul, de exemplu DJNZ P1, ETICH,MOV PX.Y,C : mută bitul Carry în rangul Y din portul X,CLR PX.Y : şterge rangul Y din portul X,

Page 31: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 170

SET PX.Y : setează rangul Y din portul X.Facilitatea de a citi conţinutul rangului din registrul intern în locul terminalului permite evitarea obţinerii de valori false datorate unei conectări greşite a terminalului. De exemplu, dacă s-ar putea citi doar terminalul atunci s-ar obţine o valoare falsă în următoarea situaţie: terminalul se conectează în baza unui tranzistor npn, cu emitorul legat la masă şi comandă funcţionarea acestuia; înscrierea unei valori 1 în rangul din registrul intern va provoca saturarea tranzistorului ceea ce înseamnă că nivelul de tensiune de pe terminal va fi fixat de tensiunea bază - emitor a tranzistorului care, însă, corespunde unui nivel logic 0.

3.1.3.9 Ciclurile maşină

Execuţia unei instrucţiuni se desfăşoară în cadrul unor cicluri maşină. Un ciclu maşină este divizat în 6 stări, notate cu S1 - S6, o stare fiind alcătuită din 2 faze, notate cu P1 şi P2. Deci un ciclu maşină începe în starea 1, faza 1, notată cu S1P1 şi se încheie în starea 6, faza 2, notată cu S6P2. Operaţiile aritmetice şi logice se desfăşoară în timpul fazei 1 iar transferurile între registre se desfăşoară în faza a 2-a.Considerând un tact cu frecvenţa de 12 MHz, rezultă că durata unui ciclu maşină este de

1 ms. Tactul se obţine fie prin conectarea externă a unui cuarţ, între terminalele XTAL1 şi XTAL2, fig. 3.24a, fie prin comanda din exterior cu semnal dreptunghiular, fig. 3.24b şi c.

Fig. 3.24 Generarea tactului la microcontrolerul 80C51

Execuţia unei instrucţiuni depinde de tipul acesteia. Astfel există mai multe cazuri:1. instrucţiune pe 1 octet şi 1 ciclu:Execuţia instrucţiunii începe în S1 când se aduce codul şi se memorează în registrul IR. Numărătorul de program, PC, este incrementat iar în S4 se mai execută o aducere de cod care, însă, este ignorat iar PC nu mai este incrementat.2. instrucţiune pe 2 octeţi si 1 ciclu:În S1 se aduce codul instrucţiunii, PC este incrementat iar în S4 se mai citeşte un octet şi PC este din nou incrementat.3. instrucţiune pe 1 octet şi 2 cicluri care nu face referire la RAM-ul extern:

22-35 pF

22-35 pF

XTAL2

XTAL1

a.

XTAL2

XTAL1

b.

XTAL2

XTAL1

c.

Semnalextern

Semnalextern

Page 32: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

171 Microcontrolere - 3 În S1 al primului ciclu se aduce codul instrucţiunii, PC este incrementat iar în S4 al aceluiaşi ciclu, S1 şi S4 ale ciclului următor se citesc octeţi care nu sunt luaţi în considerare de CPU iar PC nu se modifică.4. instrucţiune pe 1 octet şi 2 cicluri care se referă la RAM-ul extern:În S1 al primului ciclu se aduce codul instrucţiunii, PC este incrementat, în S4 se aduce un nou cod dar care nu este considerat de CPU, PC nu este incrementat iar în ciclul următor nu se mai execută aduceri de cod ci accesul la RAM-ul extern.Cele mai multe instrucţiuni se execută în 1 sau 2 cicluri maşină. Doar instrucţiunile MUL şi DIV necesită 4 cicluri maşină.

Semnalele microcontrolerului implicate în transferurile din cadrul ciclurilor maşină sunt următoarele:ALE: ieşire a microcontrolerului care se foloseşte la demultiplexarea magistralei de adrese/ date; semnalul va încărca adresa într-un registru extern (este garantată stabilitatea adresei pe frontul său posterior deci încărcarea trebuie să se facă de către acest front); se activează de 2 ori într-un ciclu, cu excepţia unui ciclu de acces la RAM-ul extern când lipseşte prima activare; deci dacă nu se execută accese la RAM-ul extern atunci ALE poate fi folosit ca semnal cu frecvenţa egală cu 1/ 6 din frecvenţa semnalului de tact./PSEN: este semnalul de comandă pentru citirile de cod din memoria de program externă; se activează de 2 ori într-un ciclu, cu excepţia cazului când ciclul se referă la RAM-ul extern când nu se activează; de asemenea nu se activează atunci când microcontrolerul execută programe din memoria de program internă./EA: intrare prin care i se comunică microcontrolerului unde se găseşte programul; dacă este 1 atunci microcontrolerul va executa din memoria de program internă (până când PC ajunge la valoarea 0FFFH, în continuare execuţia realizându-se din memoria de program externă); dacă este 0 atunci execuţia va avea loc din memoria de program externă./RD, /WR: sunt ieşiri de comandă pentru citire, respectiv scriere din/ în memoria de date externă.

Fig. 3.25 prezintă ciclurile maşină ale microcontrolerului 80C51. Se observă că într-un ciclu de aducere cod de instrucţiune pe liniile porturilor P0 şi P2 apare conţinutul numărătorului de program, PC. Într-un ciclu în care se face acces la memoria de date externă pe liniile portului P0 apare conţinutul registrului DPL sau Ri, i = 0, 1, iar pe liniile portului P2 apare conţinutul registrului DPH dacă adresa este pe 16 biţi sau conţinutul registrului intern P2 dacă adresa este pe 8 biţi.

3.1.3.10 Comanda memoriei externe

Din ciclurile maşină prezentate în paragraful anterior se observă că microcontrolerul activează semnale diferite funcţie de tipul memoriei externe implicate în transfer. Astfel dacă se citeşte din memoria externă de program se activează semnalul de comandă /PSEN iar dacă este implicată memoria externă de date se activează semnalele /RD sau /WR. Pe aceasta se bazează caracteristica microcontrolerului de a putea comanda 64 Ko memorie de program şi 64 Ko memorie de date deşi dispune doar de 16 linii de adresă: memoria de

Page 33: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 172

program va fi comandată cu semnalul /PSEN iar memoria de date va fi comandată cu semnalele /RD şi /WR. În timpul transferurilor cu memoria externă, liniile portului P2 vor constitui jumătatea superioară a magistralei de adrese iar liniile portului P0 vor constitui o magistrală multiplexată de adrese/ date. Pentru demultiplexarea ei este necesară memorarea

Page 34: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

173 Microcontrolere - 3

Fig. 3.25 Ciclurile maşină ale microcontrolerului 80C51

P2,P3

S3

P0,P1

CLK

S4 S5 S6 S1 S2 S4 S5 S6

Citireintrări

P0,P1

P2,P3

Data veche Data nouăIeşiri

Tact serial(mod 0) Citire

PxDCitireRxD

Ciclu de transfer de porturile

CLKp1 p2

ALE

S1 S2 S3 S4 S5 S6 S1 S2

/PSEN

P0

P2Ciclu de aducere cod de instrucţie

CLK

ALE

S4 S5 S6 S1 S2 S3 S4 S5

/PSEN

P0

P2Ciclu de scriere în memoria de date externă

S6

/WR

S4 S5 S6 S1 S2 S3 S4 S5 S6

CLK

ALE/PSEN

P0

P2Ciclu de citire din memoria de date externă

/RD PCL OUT

DATAIN

DPL sau RIOUT

CODIN

CODIN

PCL OUT

PCL OUT

DATAIN

CODIN

CODIN

PCL OUT

CODIN

PCL OUT

DPL sau RIOUT

PCHOUT

PCHOUT

PCHOUT

PCHOUT

PCHOUT

DPH sau P2OUT

PCHOUT

PCHOUT

DPH sau P2OUT

Page 35: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 174

informaţiei de adresă într-un registru extern, la comanda frontului posterior al semnalului ALE.Fig. 3.26 prezintă modalităţile de conectarea a memoriei externe de program şi de date,

fiecare de câte 64 Ko.

Fig. 3.26 Conectarea memoriei externe de program şi de date la microcontrolerul 80C51

Atunci când memoria externă implicată în transfer este cea de program, adresa ce apare pe liniile porturilor P0 şi P2 este generată de numărătorul de program, PC.Accesul la memoria externă de date se face prin intermediul registrului DPTR, de către instrucţiunile MOVX @DPTR,A şi MOVX A,@DPTR. Prima instrucţiune transferă conţinutul acumulatorului în memorie la adresa indicată de DPTR iar a doua instrucţiune transferă conţinutul locaţiei cu adresa indicată de DPTR în A. În timpul transferurilor cu

P0.0-7

/EA

ALE

P2.0-7

/PSEN

/RD/WR

80C51

D0-7

A0-7

A8-15

/OE /CE

Memoriade

programexternă(64 ko)

REG

STB

D0-7

A0-7

A8-15

/CS /WE /OE

Memoriade

dateexternă(64 ko)

Page 36: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

175 Microcontrolere - 3 memoria externă de date, adresa ce apare pe liniile porturilor P0 şi P2 este generată de DPTR.

Accesul la memoria externă de date se poate face şi prin intermediul registrelor R0 sau R1, cu instrucţiunea: MOVX @Ri,A sau MOVX A,@Ri. Conţinutul registrelor R0 sau R1 va fi adresa ce apare pe liniile portului P0. Această adresă este doar pe 8 biţi şi va permite accesul într-o pagină de 256 octeţi. Conţinutul registrului P2 va apare pe liniile portului P2 şi poate fi folosit pentru paginare, asigurând plasarea paginii de 256 octeţi în spaţiul de adresare de 64 Ko al microcontrolerului.În cazul aplicaţiilor ce necesită mai puţină memorie de program şi de date decât 64 Ko, nu mai este necesar ca cele 2 blocuri de memorie să se suprapună în spaţiul de adresare al microcontrolerului iar selecţia lor se va face utilizând şi linii mai semnificative din magistrala de adrese.

Dacă se doreşte rularea de programe din memoria externă de date atunci este necesară suprapunerea unui spatiu de memorie externă de program cu un spaţiu de memorie externă de date ceea ce se poate realiza cu o combinaţie a semnalelor /PSEN şi /RD, fig. 3.27. Întrucât semnalul /PSEN se activează mai repede decât semnalul /RD este necesar ca memoria externă de date din care se execută programe, să fie suficient de rapidă pentru a răspunde cerinţelor semnalului /PSEN. Memoria externă de date din care se doreşte execuţia de programe trebuie să fie plasată în spaţiul de adresare al microcontrolerului, într-o zonă diferită de cea care corespunde atât memoriei externe de program cât şi memoriei externe de date.

Dacă întregul program ce se execută se obţine din memoria externă, atunci intrarea /EA trebuie să fie conectată la 0.

P0.0-7

ALE

P2.0-7

/ PSEN/RD/WR

D0-7

A0-7

A8-15

/CS /OE /WE

REG

STB Memoriaexternă

80C51

Page 37: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 176

Fig. 3.27 Conectarea memoriei de date externedin care se poate executa program la microcontrolerul 80C51

3.1.3.11 Programarea microcontrolerului

Se va începe cu prezentarea celor 6 moduri de adresare.Adresarea directăUtilizând adresarea directă, operandul este specificat printr-o adresă pe 8 biţi în cadrul instrucţiunii. Se foloseşte doar pentru adresarea memoriei RAM interne şi a registrelor cu funcţiuni speciale. Exemplu: MOV A,09H.

Adresarea indirectăÎn cadrul instrucţiunii se specifică un registru care conţine adresa operandului. Dacă adresa este pe 16 biţi atunci registrul este DPTR iar dacă adresa este pe 8 biţi atunci registrul este R0, R1 sau SP. Exemplu: ADD A,@Ri

Adresarea de registruEste folosită pentru adresarea unui operand aflat în unul din registrele R0 - R7. Instrucţiunile care utilizează acest mod de adresare au un cod eficient întrucât pentru adresarea unui registru sunt necesari doar 3 biţi deci se elimină un octet de adresă.

Adresarea implicităEste folosită de instrucţiuni care au un operand într-un registru predeterminat, de exemplu acumulatorul sau registrul DPTR. În aceste cazuri nu mai este necesară specificarea operandului. Exemplu: ADD A,Rn.

Adresarea imediatăÎn cadrul instrucţiunii, după cod urmează un octet care reprezintă valoarea unei constante. Exemplu: ADD A,#64 care încarcă în acumulator valoarea zecimală 64 sau ADD A,#64H care încarcă în acumulator valoarea hexazecimală 64.

Adresarea indexatăAdresarea indexată poate fi folosită doar pentru citirea memoriei de program. Este foarte utilă la citirea tabelelor de căutare din memoria de program. Un registru de bază de 16 biţi, DPTR sau PC, indică baza tabelei iar acumulatorul indică intrarea în tabelă. Adresa intrării în tabelă se obţine adunând conţinutul acumulatorului cu cel al registrului de bază. Exemplu: MOVC A,@A + DPTR. Adresarea indexată se foloseşte şi la instrucţiunile de salt cu selecţie. Adresa destinaţie a unei instrucţiuni de salt se obţine adunând conţinutul registrului de bază cu cel al acumulatorului. Exemplu: JMP @A + DPTR.

În continuare vor fi prezentate în formă sintetică, în tab. 3.11, instrucţiunile microcontrolerului 80C51. Notaţiile folosite au urmatoarele semnificaţii:Rn: unul din registrele R0-7 din blocul selectat;@Ri: locaţie din memoria RAM specificată indirect prin intermediul registrului Ri,i= 0,1;

Page 38: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

177 Microcontrolere - 3 direct: adresă pe 8 biţi a unei locaţii din memoria RAM internă sau a unuia din registrele SFR;#data: constantă pe 8 biţi folosită în adresarea imediată;#data16: constantă pe 16 biţi inclusă în instrucţiune;adr16: adresă pe 16 biţi care specifică o locaţie care se află oriunde în spaţiul de 64 Ko al memoriei externe de program;adr11: adresă pe 11 biţi care specifică o locaţie care se află în aceeaşi pagină de 2 Ko ca şi primul octet al instrucţiunii următoare;rel: deplasament cu semn pe 8 biţi; acoperă domeniul de la -128 la +127 relativ la primul octet al instrucţiunii următoare celeia care foloseşte pe rel;bit: octet care indică bitul din memoria RAM internă sau din registrul SFR implicat în instrucţiune;(X): conţinutul unui registru, locaţie de memorie sau bit, specificate prin X;((X)): conţinutul locaţiei de memorie a cărei adresă se afla în registrul X;rrr: specifică, în binar, registrul Rn.<>: nu este egal

Mnemonică Descriere Cod maşină

Nr. cicluri

Instrucţiuni aritmeticeADD A,Rn Adună registrul la acumulator

(Rn) + (A) -> A00101rrr 1

ADD A,direct Adună octetul direct la acumulator(direct) + (A) -> A

00100101direct

1

ADD A,@Ri Adună octetul indirect la acumulator((Ri)) + (A) -> A

0010011i 1

ADD A,#data Adună octetul imediat la acumulatordata + (A) -> A

00100100data

1

ADDC A,Rn Adună registrul la acumulator şi Carry(Rn) + (A) + (Cy) -> A

00111rrr 1

ADDC A,direct Adună octetul direct la acum. şi Carry(direct) + (A) + (Cy) -> A

00110101direct

1

ADDC A,@Ri Adună octetul indirect la acum. şi Carry((Ri)) + (A) + (Cy) -> A

0011011i 1

ADDC A,#data Adună octetul imediat la acum. şi Carrydata + (A) + (Cy) -> A

00110100data

1

SUBB A,Rn Scade registrul din acum. cu împrumut(A) - (Rn) - (Cy) -> A

10011rrr 1

SUBB A,direct Scade oct. direct din acum. cu împrumut(A) - (direct) - (Cy) -> A

10010101direct

1

SUBB A,@Ri Scade oct. ind. din acum. cu împrumut(A) - ((Ri)) - (Cy) -> A

1001011i 1

SUBB A,#data Scade oct. imed. din acum. cu împrumut(A) - data - (Cy) -> A

10010100data

1

INC A Incrementează acumulatorul(A) + 1 -> A

00000100 1

Page 39: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 178

INC Rn Incrementează registrul(Rn) + 1 -> Rn

00001rrr 1

INC direct Incrementează octetul direct(direct) + 1 -> direct

00000101direct

1

INC @Ri Incrementează octetul indirect((Ri)) + 1 -> Ri

0000011i 1

DEC A Decrementează acumulatorul(A) - 1 -> A

00010100 1

DEC Rn Decrementează registrul(Rn) - 1 -> Rn

00011rrr 1

DEC direct Decrementează octetul direct(direct) - 1 -> direct

00010101direct

1

DEC @Ri Decrementează octetul indirect((Ri)) - 1 -> Ri

0001011i 1

INC DPTR Incrementează registrul DPTR(DPTR) + 1 -> DPTR

10100011 2

MUL AB Înmulţeşte A cu B(A) * (B) -> B;A,0 -> OV dacă (A) * (B) < 255

10100100 4

DIV AB Împarte A la B(A) : (B) -> A - cât; B - rest,împărţirea la 0 setează OV

10000100 4

DA A Ajustează acum. după o op. zecimală 11010100 1Instrucţiuni logiceANL A,Rn ŞI între acumulator şi registru

(A) & (Rn) -> A01011rrr 1

ANL A,direct ŞI între acumulator şi octet direct(A) & (direct) -> A

01010101direct

1

ANL direct,A idem 01010010 1ANL A,@Ri ŞI între acumulator şi octet indirect

(A) & ((Ri)) -> A0101011i 1

ANL A,#data ŞI între acumulator şi data imediată(A) & data -> A

01010100data

1

ANL direct,#data ŞI între octet direct şi data imediată(direct) & data -> direct

01010011directdata

2

ORL A,Rn SAU între acumulator şi registru(A) V (Rn) -> A

01001rrr 1

ORL A,direct SAU între acumulator şi octet direct(A) V (direct) -> A

01000101direct

1

ORL direct,A idem 01000010 1ORL A,@Ri SAU între acumulator şi octet indirect

(A) V ((Ri)) -> A0100011i 1

ORL A,#data SAU între acumulator şi data imediată(A) V data -> A

01000100data

1

ORL direct,#data SAU între octet direct şi data imediată(direct) V data -> direct

01000011direct

2

Page 40: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

179 Microcontrolere - 3 data

XRL A,Rn SAU-EXCL. între acumulator şi registru(A) (Rn) -> A

01101rrr 1

XRL A,direct SAU-EXCL. între acum. şi octet direct(A) (direct) -> A

01100101direct

1

XRL direct,A idem 01100010 1XRL A,@Ri SAU-EXCL.între acum. şi octet indirect

(A) ((Ri)) -> A0110011i 1

XRL A,#data SAU-EXCL. între acum. şi data imediată(A) data -> A

01100100data

1

XRL direct,#data SAU-EXCL. între oct. dir. şi data imed.(direct) data -> direct

01100011directdata

2

CLR A Şterge acumulatorul0 -> A

11100100 1

CPL A Complementează acumulatorul(/A) -> A

11110100 1

RL A Roteşte acumulatorul la stânga(A.i) -> A.i+1 ptr. i = 0 - 6, (A.7) -> A.0

00100011 1

RLC A Roteşte acum. la stânga prin Carry(A.i) -> A.i+1 ptr. i = 0 - 6, (Cy) -> A.0, (A.7) -> Cy

00110011 1

RR A Roteşte acumulatorul la dreapta(A.i+1) -> A.i ptr. i = 0 - 6, (A.0) -> A.7

00000011 1

RRC A Roteşte acum. la dreapta prin Carry(A.i+1) -> A.i ptr. i = 0 - 6, (Cy) -> A.7, (A.0) -> Cy

00010011 1

SWAP A Interschimbă acumulatorul(A.7 - 4) <-> (A.3 - 0)

11000100 1

Instrucţiuni de transferMOV A,Rn Transferă registrul în acumulator

(Rn) -> A11101rrr 1

MOV A,direct Transferă octetul direct în acumulator(direct) -> A

11100101direct

1

MOV A,@Ri Transferă octetul indirect în acumulator((Ri)) -> A

1110011i 1

MOV A,#data Transferă data imediată în acumulatordata -> A

01110100data

1

MOV Rn,A Transferă acumulatorul în registru(A) -> Rn

11111rrr 1

MOV Rn,direct Transferă octetul direct în registru(direct) -> Rn

10101rrrdirect

2

MOV Rn,#data Transferă data imediată în registrudata -> Rn

01111rrr 1

MOV direct,A Transferă acumulatorul în octet direct(A) -> direct

11110101direct

1

MOV direct,Rn Transferă registrul în octet direct 10001rrr 2

Page 41: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 180

(Rn) -> direct directMOV direct1,direct2 Transferă octet direct2 în octet direct1

(direct2) -> direct110000101direct2direct1

2

MOV direct,@Ri Transferă octetul indirect în octet direct((Ri)) -> direct

1000011idirect

2

MOV direct,#data Transferă data imediată în octet directdata -> direct

01110101directdata

2

MOV @Ri,A Transferă acumulatorul în octet indirect(A) -> (Ri)

1111011i 1

MOV @Ri,direct Transferă octetul direct în octet indirectdirect -> (Ri)

1010011idirect

2

MOV @Ri,#data Transferă data imediată în octet indirectdata -> (Ri)

0111011idata

1

MOV DPTR,#data16 Transferă data imediată în reg. DPTRdata16 -> DPTR

10010000data16 Hdata16 L

2

MOVC A,@A+DPTR Tr. octetul din mem. de pr. ext. în acum.((DPTR) + (A)) -> A

10010011 2

MOVC A,@A+PC Tr. octetul din mem. de pr. ext. în acum.((PC) + (A)) -> A

10000011 2

MOVX A,@Ri Transferă octet din RAM extern în acum.((Ri)) -> A

1110001i 2

MOVX A,DPTR Transferă octet din RAM extern în acum.((DPTR)) -> A

11100000 2

MOVX @Ri,A Transferă acumulatorul în RAM extern(A) -> (Ri)

1111001i 2

MOVX DPTR,A Transferă acumulatorul în RAM extern (A) -> ((DPTR))

11110000 2

PUSH direct Depune octetul direct în stivă(SP) + 1 -> SP,(direct) -> (SP)

11000000direct

2

POP direct Citeşte octetul direct din stivă((SP)) -> (direct),(SP) - 1-> (SP)

11010000direct

2

XCH A,Rn Interschimbă acumulatorul cu registrul(A) <-> (Rn)

11001rrr 1

XCH A,direct Interschimbă acumulatorul cu oct. direct(A) <-> (direct)

11000101direct

1

XCH A,@Ri Interschimbă acumulatorul cu octet ind.(A) <-> (Ri)

1100011i 1

XCHD A,@Ri Interschimbă acumulatorul cu octet ind.(A.3-0) <-> (Ri).3-0

1101011i 1

Instrucţiuni la nivel de bit

Page 42: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

181 Microcontrolere - 3 CLR C Şterge Carry

0 -> Cy11000011 1

CLR bit Şterge bit0 -> bit

11000010 1

SETB C Setează Carry1 -> Cy

11010011 1

SETB bit Setează bit1 -> bit

11010010 1

CPL C Complementează Carry(/Cy) -> Cy

10110011 1

CPL bit Complementează bit(/bit) -> bit

10110010bit

1

ANL C,bit ŞI între Carry şi bit(Cy) & (bit) -> Cy

10000010bit

2

ANL C,/bit ŞI între Carry şi bit negat(Cy) & (/bit) -> Cy

10110000bit

2

ORL C,bit SAU între Carry şi bit(Cy) V (bit) -> Cy

01110010bit

2

ORL C,/bit SAU între Carry şi bit negat(Cy) V (/bit) -> Cy

10100000bit

2

MOV C,bit Transferă bit în Carry(bit) -> Cy

10100010bit

2

MOV bit,C Transferă Carry în bit(Cy) -> bit

10010010bit

2

Instrucţiuni de saltAJMP adr11 Salt absolut în pagina curentă

(PC) + 2 -> PCadr11 -> PC.10-0

a10a9a800001a7a6 ... a0

2

LJMP adr16 Salt absolut lungadr16 -> PC

00000010a15 ... a8a7 .... a0

2

SJMP rel Salt relativ scurt(PC) + 2 + rel -> PC

10000000rel

2

JMP @A+DPTR Salt cu selecţie(DPTR) + (A) -> PC

01110011 2

JZ rel Salt dacă acumulatorul este 0dacă (A) = 0 atunci (PC) + 2 + rel -> PC

01100000rel

2

JNZ rel Salt dacă acumulatorul nu este 0dacă (A)<> 0 atunci (PC) + 2 + rel -> PC

01110000rel

2

JC rel Salt dacă Carry este 0dacă (Cy)= 0 atunci (PC) + 2 + rel -> PC

01000000rel

2

JNC rel Salt dacă Carry nu este 0dacă (Cy)<>0 atunci (PC)+ 2 + rel -> PC

01010000rel

2

JB bit,rel Salt dacă bitul direct este 1dacă (bit)= 1 atunci (PC) + 3 + rel -> PC

00100000bitrel

2

Page 43: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 182

JNB bit,rel Salt dacă bitul direct este 0dacă (bit) = 0 atunci (PC) + 2 + rel -> PC

00110000bitrel

2

JBC bit,rel Salt dacă bitul direct este 1 şi anul. bituldacă (bit) = 1 atunci(PC) + 3 + rel -> PC şi 0 -> bit

00010000bitrel

2

CJNE A,direct,rel Compară octetul direct cu acumulatorul şi salt dacă nu sunt egaledacă (A) <> (direct) atunci(PC) + 3 + rel -> PCdacă (A) < (direct) atunci 1 -> Cy,altfel 0 -> Cy

10110101directrel

2

CJNE A,#data,rel Compară data imediată cu acumulatorul şi salt dacă nu sunt egaledacă (A) <> data atunci(PC) + 3 + rel -> PCdacă (A) < data atunci 1 -> Cy,altfel 0 -> Cy

10110100directrel

2

CJNE Rn,#data,rel Compară data imediată cu registrul şi salt dacă nu sunt egaledacă (Rn) <> data atunci(PC) + 3 + rel -> PCdacă (Rn) < data atunci 1 -> Cy,altfel 0 -> Cy

10111rrrdirectrel

2

CJNE @Ri,#data,rel Compară data imediată cu octetul indirect şi salt dacă nu sunt egaledacă ((Ri)) <> data atunci(PC) + 3 + rel -> PCdacă ((Ri)) < data atunci 1 -> Cy,altfel 0 -> Cy

1011011idirectrel

2

DJNZ Rn,rel Decrementează reg. şi salt dacă nu este 0(Rn) - 1 -> Rndacă (Rn)<>0 atunci (PC)+ 2 + rel -> PC

11011rrr 2

DJNZ direct,rel Decr. octetul direct şi salt dacă nu este 0(direct) - 1 -> directdacă (direct)<>0 atunci (PC)+2+rel->PC

11010101directrel

2

Instrucţiuni de lucru cu subrutineleACALL adr11 Apel de subrutină în pagina curentă

(PC) + 2 -> PC, (SP) + 1 -> SP(PC.7-0) -> (SP), (SP) + 1 -> SP(PC.15-8) -> (SP), adr11 -> PC.10-0

a10a9a810001a7a6 ... a0

2

LCALL adr16 Apel lung de subrutină (PC) + 2 -> PC, (SP) + 1 -> SP(PC.7-0) -> (SP), (SP) + 1 -> SP(PC.15-8) -> (SP), adr16 -> PC

00010010a15 ... a8a7 ... a0

2

RET Revenire din subrutină 00100010 2

Page 44: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

183 Microcontrolere - 3 ((SP)) -> PC.15-8, (SP) - 1 -> SP,((SP)) -> PC.7-0, (SP) - 1 -> SP

RETI Revenire din subr. de tratare a unei într.((SP)) -> PC.15-8, (SP) - 1 -> SP,((SP)) -> PC.7-0, (SP) - 1 -> SP

00110010 2

NOP Nici o operaţie 00000000 1Tab. 3.11 Instrucţiunile microcontroelrului 80C51

În continuare vor fi prezentate, în tab. 3.12, instrucţiunile care afectează indicatorii de condiţii. S-a făcut referire doar la indicatorii CY, OV şi AC. Bitul de paritate este afectat la fiecare modificare a acumulatorului. Indicatorii mai pot fi modificaţi şi prin adresare directă asupra lui PSW şi prin instrucţiuni la nivel de bit.

Instrucţiuni CY OV AC

ADDADDCSUBBMULDIVDARRCRLCSETB CCLR CCPL CANL C,bitANL C,/bitORL C,bitORL C,/bitMOV C,bitCJNE

xxx00xxx10xxxxxxx

xxxxx

xxx

Tab. 3.12 Instrucţiunile microcontrolerului 80C51 care afectează indicatorii de condiţii

Page 45: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 184

3.2 Microcontrolerele 8xC5523.2.1 Caracteristici

Microcontrolerele 8xC552 sunt considerate ca făcând parte din familia microcontrolerului 80C51 întrucât păstrează toate trăsăturile acestuia, adăugând o serie de facilităţi utile în aplicaţii industriale în timp real.Microcontrolerele 8xC552 sunt:- 80C552: fără memorie de program internă,- 83C552: cu 8 Ko de memorie de program internă, de tip PROM,- 87C552: cu 8 Ko de memorie de program internă, de tip EPROM.Caracteristicile microcontrolerelor 8xC552 sunt:- CPU identic cu cel al microcontrolerului 80C51;- memorie internă de program de 8 Ko (0 la varianta 80C552);- 2 contoare/ temporizatoare, T0 şi T1, identice cu cele ale lui 80C51;- un contor/ temporizator suplimentar, T2, conectat la 4 registre de captare şi la 3 registre de comparare;- 256 octeţi memorie RAM internă, împărţită în 2 jumătăţi: prima jumătate este adresabilă direct sau indirect iar a doua jumătate care se suprapune peste registrele cu funcţiuni speciale, este adresabilă doar indirect;- registre cu funcţiuni speciale, SFR, situate în zona de adrese 80H - FFH, suprapusă peste a doua jumătate a memoriei RAM interne; registrele sunt adresabile doar direct;- port serial pentru magistrala I2C;- port serial UART, compatibil cu cel al lui 80C51;- contor cu funcţie de watchdog;- convertor analog/ digital pe 10 biţi, cu 8 intrări multiplexate;- 5 porturi de intrare/ ieşire pe 8 biţi plus un port de intrare pe 8 biţi;- capabil de a genera 2 ieşiri, independente, cu durate programabile;- dispune de acelaşi set de instrucţiuni ca şi 80C51;- frecvenţa maximă a tactului poate fi 16 sau 24 MHz;- se păstrează cele 2 moduri de lucru cu consum redus: modul Idle şi modul Power - Down, cu aceleaşi trasături ca şi la microcontrolerul 80C51.

3.2.2 Configuraţia terminalelor

Microcontrolerele 8xC552 se prezintă în capsulă de tip LCC cu 68 terminale sau, mai rar, în capsula de tip QFP cu 80 terminale. Fig. 3.28 prezintă configuraţia terminalelor.

Page 46: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

185 Microcontrolere - 3 Numărul din dreptul fiecărui semnal reprezintă terminalul la care se găseşte într-o capsulă de tip LCC.Semnificaţiile terminalelor sunt:P0.0-7/ AD0-7: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu drenă în gol; în timpul acceselor la memoria externă este magistrală multiplexată între jumătatea mai puţin semnificativă a magistralei de adrese şi magistrala de date; rangurile care au 1 înscris pot fi configurate ca intrări de mare impedanţă; primeşte datele în timpul programării memoriei de program interne şi generează datele în timpul verificării.

Fig. 3.28 Configuraţia terminalelor la microcontrolerele 8xC552

P1.0-7/ XXX: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la VDD

pentru rangurile 0 - 5 şi cu drenă în gol pentru rangurile 6 şi 7; are şi funcţia de a conecta octetul mai puţin semnificativ de adresă la programarea şi verificarea memoriei de program interne; terminalele sale au şi funcţiuni specifice:P1.0 -3: CT0I - CT3I: intrări pentru comanda captării la contorul T2; P1.4: T2: intrare externă pentru contorul T2;P1.5: RT2: intrare externă de iniţializare a contorului T2;P1.6: SCL: tact serial pentru magistrala I2C;P1.7: SDL: data serială pentru magistrala I2C.P2.0-7/ A8-15: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la VDD; în timpul acceselor la memoria externă precum şi la programarea şi verificarea memoriei interne de program, transferă jumătatea mai puţin semnificativă a adresei.P3.0-7/ XXX: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la VDD; terminalele sale au şi funcţiuni specifice, identice cu cele de la microcontrolerul 80C51.P4.0-7/ XXX: port bidirecţional de intrare/ ieşire, pe 8 biţi, cu rezistenţe interne la VDD; terminalele sale au şi funcţiuni specifice care sunt:

XTAL1 P0.0-7 / AD0-7XTAL2 P1.0 / CT0I

/EA / VPP P1.1 / CT1IALE / /PROG P1.2 / CT2I

/PSEN P1.3 / CT3ISTADC P1.4 / T2

AVSS 8 P1.5 / RT2AVDD x P1.6 / SCL

AVREF+ C P1.7 / SDLAVREF- 5

/PWM0 5 P2.0-7 / A8-15/PWM1 2 P3.0 / RxD

P5.0-7 / ADC0-7 P3.1 / TxDP4.0-7 / CMSR0-5

CMT0-1P3.2 / /INT0P3.3 / /INT1

RST P3.4 / T0/EW P3.5 / T1VDD P3.6 / /WRVSS P3.7 / /RD

35344948

60 347

6159

458

5 62-

15

2

7-14

6

36, 37

57-50

39-46

1617

1918

2021

2322

2425

2726

2928

3031

Page 47: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 186

P4.0-5: CMSR0-5: ieşiri setate/ resetate la operaţia de comparare atunci când se întâlneşte egalitate.P4.6-7: CMT0-1: ieşiri care îşi schimbă starea la operaţia de comparare atunci când se întâlneşte egalitate.P5.0-7/ ADC0-7: port de intrare pe 8 biţi; terminalele sale sunt şi cele 8 canale analogice, ADC0-7, pentru convertorul analog/ digital.STADC ("Start Analog Digital Conversion"): intrare pentru a comanda, din exterior, pornirea conversiei analog/ digitale; pornirea poate fi comandată şi prin program.

PWM0-1 ("Pulse Width Modulation"): ieşiri cu durate programabile./EW ("Enable Watchdog Timer"): validează sau nu funcţionarea contorului cu funcţie de watchdog./PSEN ("Program Store Enable"): ieşire care validează transferul cu memoria externă de program; are acelaşi rol şi aceeaşi variaţie ca şi la microcontrolerul 80C51.ALE/ /PROG ("Address Latch Enable"): ieşire cu dublu rol: semnificaţia de ALE este identică cu cea de la microcontrolerul 80C51, adică realizeză demultiplexarea magistralei de adrese/ date iar semnificaţia de /PROG se referă la programarea memoriei interne de program, pe acest terminal aplicându-se impulsurile de programare./EA/ Vpp: ieşire cu dublu rol: semnificaţia de /EA se referă la alegerea memoriei de program: dacă este 1 atunci CPU va folosi memoria de program internă până când în PC se ajunge la valoarea 1FFFH iar în continuare se va folosi memoria de program externă; dacă este 0 atunci CPU va folosi doar memoria de program externă; semnificaţia de Vpp se referă la programarea memoriei interne de program când pe acest terminal se va aplica tensiunea de programare de 12,75 V.RST: intrare pentru iniţializarea microcontrolerului; este, de asemenea, ieşire pentru un impuls de iniţializare pentru restul sistemului, generat de contorul cu funcţie de watchdog.XTAL1, XTAL2: terminale la care se conectează un cuarţ pentru a obţine tactul intern; frecvenţa acestuia trebuie sa fie de 1,2 - 16 MHz; dacă circuitul se comandă cu tact extern, acesta se leagă la XTAL1 iar terminalul XTAL2 trebuie să rămână neconectat.AVREF-: intrare pentru tensiunea de referinţă negativă.AVREF+: intrare pentru tensiunea de referinţă pozitivă.AVSS: masa analogică.AVDD: tensiunea de alimentare analogică.VDD: tensiunea de alimentare digitală.GND: masa.

3.2.3 Structura internă

În continuare se va folosi denumirea de microcontroler 8xC552 care se va referi la oricare din cele 3 variante, cu excepţia cazurilor unde se dau informaţii specifice.Structura internă a microcontrolerului 8xC552 este asemanătoare cu cea a microcontrolerului 80C51. Există însă câteva diferenţe asupra cărora se va insista în continuare.

Page 48: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

187 Microcontrolere - 3

Memoria internă de program are capacitatea de 8 Ko (0 la varianta 80C552), faţă de cei 4 Ko ai microcontrolerului 80C51.

Memoria internă RAM are capacitatea de 256 octeţi şi este împărţită în 2 blocuri: primul bloc de 128 octeţi ocupă zona 00 - 7FH, are aceeaşi structură ca şi la microcontrolerul 80C51 şi este adresabil direct sau indirect. Al doilea bloc de 128 octeţi ocupă zona 80H - FFH şi este adresabil doar indirect. El se suprapune peste zona de adrese alocate registrelor cu funcţiuni speciale care sunt adresabile doar direct.

Microcontrolerul 8xC552 dispune de 56 registre cu funcţiuni speciale, SFR, ele incluzând şi registrele cu funcţiuni speciale ale lui 80C51. Acestea şi-au păstrat adresele însă la unele au fost utilizate şi ranguri care nu aveau semnificaţie la 80C51.Tab. 3.13 prezintă registrele cu funcţiuni speciale ale microcontrolerului 8xC552. Au fost notate cu * registrele care au fost adăugate sau completate faţă de cele ale microcontrolerului 80C51. Se păstrează caracteristica de la 80C51 ca registrele ce au adrese ce se termină cu 0 sau 8 sunt adresabile şi la nivel de bit.

Registru Adresă de bit b7 b6 b5 b4 b3 b2 b1 b0

Adresă deregistru

ACCADCH*ADCON*BCTCON*CTH3*CTH2*CTH1*CTH0*CMH2*CMH1*CMH0*CTL3*CTL2*CTL1*CTL0*CML2*CML1*CML0*DPHDPLIEN0*IEN1*IP0*IP1*P5*P4*

E7

F7

AFEFBFFF

C7

E6

F6

AEEEBEFE

C6

E5

F5

ADEDBDFD

C5

E4

F4

ACECBCFC

C4

E3

F3

ABEBBBFB

C3

E2

F2

AAEABAFA

C2

E1

F1

A9E9B9F9

C1

E0

F0

A8E8B8F8

C0

E0HC6HC5HF0HEBHCFHCEHCDHCCHCBHCAHC9HAFHAEHADHACHABHAAHA9H83H82HA8HE8HB8HF8HC4HC0H

Page 49: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 188

P3P2P1P0PCONPSWPWMP*PWM1*PWM0*RTE*SPS0BUFS0CONS1ADR*S1DAT*S1STA*S1CON*STE*TH1TH0TL1TL0TMH2*TML2*TMODTCONTM2CON*TM2IR*T3*

B7A79787

D7

9F

DF

8F

CF

B6A69686

D6

9E

DE

8E

CE

B5A59585

D5

9D

DD

8D

CD

B4A49484

D4

9C

DC

8C

CC

B3A39383

D3

9B

DB

8B

CB

B2A29282

D2

9A

DA

8A

CA

B1A19181

D1

99

D9

89

C9

B0A09080

D0

98

D8

88

C8

B0HA0H90H80H87HD0HFEHFDHFCHEFH81H99H98HDBHDAHD9HD8HEEH8DH8CH8BH8AHEDHECH89H88HEAHC8HFFH

Tab. 3.13 Registrele cu funcţiuni speciale ale microcontrolerului 8xC552

Microcontrolerul 8xC552 cuprinde cele 2 contoare/ temporizatoare existente la microcontrolerul 80C51, păstrând în totalitate structura, rolul şi modul lor de comandă. În plus, dispune de încă 2 contoare/ temporizatoare:- contorul T2 care are facilităţi de captare şi comparare şi- contorul T3 care are funcţie de watchdog.Ele vor fi detaliate în paragrafele următoare.

Un alt bloc îl constituie un convertor analog/ digital înglobat, pe 10 biţi, cu 8 intrări analogice. Descrierea sa se va face într-un paragraf ulterior.

Pe lângă interfaţa serie de tip UART, existentă şi la microcontrolerul 80C51, 8xC552 dispune şi de o interfaţă serie pentru magistrala I2C care va fi detaliată într-un paragraf ulterior.

Page 50: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

189 Microcontrolere - 3 Microcontrolerul 8xC552 dispune şi de circuitele necesare generării a 2 ieşiri cu durate programabile, PWM0 şi PWM1. Ele vor fi descrise într-un paragraf ulterior.

3.2.3.1 Contorul/ temporizatorul T2

T2 este un contor/ temporizator pe 16 biţi alcătuit din 2 numărătoare pe 8 biţi: TMH2 ("High") şi TML2 ("Low"). Funcţionarea sa este controlată de registrul TM2CON ("T2 Control Register"), fig. 3.29.7 6 5 4 3 2 1 0

T2IS1 T2IS0 T2ER T2B0 T2P1 T2P0 T2MS1 T2MS0TM2CON.0-1: T2MS0-1: selectează modul conform tab. 3.14.

T2MS1 T2MS0 Mod

0 00 11 01 1

OpritSursa tactului este fOSC/ 12Mod de testSursa tactului este pinul T2

Tab. 3.14 Selecţia modului la registrul TM2CON al microcontrolerului 8xC552

TM2CON.2-3: T2P0-1: selectează factorul de prescalare conform tab. 3.15.

T2P1 T2P0 Factorul de prescalare

0 00 11 01 1

1248

Tab. 3.15 Selecţia factorului de prescalare la registrul TM2CONal microcontrolerului 8xC552

TM2CON.4: T2B0: indicator de întrerupere la depăşirea capacităţii numărătorului TML2.TM2CON.5: T2ER: validează resetul extern (front pozitiv la terminalul RT2 (P1.5)).TM2CON.6: T2IS0: validarea generării întreruperii la depăşirea capacităţii numărătorului TML2.TM2CON.7: T2IS1: validarea generării întreruperii la depaşirea capacităţii întregului contor.

Fig. 3.29 Structura registrului TM2CON al microcontrolerului 8xC552

Există 2 surse de tact pentru contorul/ temporizatorul T2: fie fOSC/ 12 atunci când lucrează ca temporizator fie un semnal extern primit la terminalul T2 (P1.4) atunci când lucrează ca şi contor. Numărătorul este incrementat la detectarea unui front pozitiv al semnalului T2, rata maximă rezultând astfel de o numărare/ ciclu adică dublă faţă de cea de la contoarele T0 şi T1. Terminalul T2 este citit de 2 ori/ ciclu, în S2P1 şi S5P1 şi un front

Page 51: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 190

ridicător este detectat atunci când T2 este 0 la prima citire şi 1 la a doua citire. Pentru aceasta se recomandă ca valorile 0 şi 1 să fie menţinute câte o jumătate de ciclu.Tactul este divizat cu un factor de prescalare care poate fi 1, 2, 4 sau 8.Numărătorul T2 poate fi citit "din mers". Nu există tampoane suplimentare pentru citire şi nu poate fi preâncărcat. Este iniţializat de semnalul RST sau de frontul ridicător al semnalului RT2, dacă acesta este validat prin rangul T2ER (TM2CON.5). Simultan cu iniţializarea numărătorului se iniţializează şi divizorul de prescalare. În modul Idle, contorul şi divizorul de prescalare sunt iniţializate şi oprite.Atunci când apare o depăşire din jumătatea mai puţin semnificativă a numărătorului, depăşire inferioară, sau când apare o depăşire din întregul numărător, depăşire superioară, se poate genera o cerere de întrerupere de către oricare sau amândouă din aceste depăşiri. Dacă apare o depăşire inferioară atunci se va seta indicatorul T2B0 (TM2CON.4) iar dacă apare o depăşire superioară atunci va fi setat indicatorul T20V (TM2IR.7). Registrul TM2IR conţine indicatorii de întrerupere activaţi de contorul/ temporizatorul T2. Dacă T20V este setat atunci va fi setat şi T2B0. Aceşti indicatori vor fi setaţi la un ciclu după apariţia depăşirii.Pentru a valida întreruperile, trebuiesc setaţi indicatorii:- ET2 (IEN1.7) care validează întreruperea de depăşire şi T2IS0 (TM2CON.6) pentru întreruperea la depăşirea inferioară şi- ET2 şi T2IS1 (TM2CON.7) pentru întreruperea la depăşirea superioară.Indicatorii T2B0 şi T20V sunt iniţializaţi prin program. Pentru validarea ambelor tipuri de întrerupere trebuiesc setate rangurile ET2, T2IS0 şi T2IS1. Prin citirea rangurilor T2IS0 şi T2IS1 se va determina sursa întreruperii.Durata contorizată de T2 depinde de frecvenţa tactului, fOSC şi de factorul de prescalare. Astfel la utilizarea unui tact fOSC = 12 MHz va apare o depăşire superioară la fiecare 65,5, 131, 262 sau 524 ms adică ciclul maxim este de aproximativ 0,5 s.

Facilitatea de captare şi comparare

Page 52: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

191 Microcontrolere - 3 Numărătorul T2 este conectat la 4 registre pentru captare şi 3 registre pentru comparare, fiecare pe câte 16 biţi, fig. 3.30.

Fig. 3.30 Circuitele de captare şi comparare conectate la contorul T2 al microcontrolerului 8xC552

Un registru de captare va capta conţinutul numărătorului T2 atunci când apare o tranziţie pe pinul de comandă a captării corespunzător. Un registru de comparare este folosit pentru a seta, reseta sau modifica ieşirile portului P4.Cele 4 registre de captare sunt CT0-3. Atunci când se generează una din intrările CT0I - CT3I, se încarcă T2 în registrul corespunzător CT0-3, se generează o întrerupere şi se setează un indicator. Indicatorii se află în registrul TM2IR ("T2 Interrupt Flag Register"), fig. 3.31.Dacă nu se foloseşte facilitatea de captare, cele 4 intrări pot fi folosite ca intrări suplimentare pentru întreruperi externe.7 6 5 4 3 2 1 0

T20V CMI2 CMI1 CMI0 CTI3 CTI2 CTI1 CTI0TM2IR.0: CTI0: indicator activat de captarea în registrul CT0.TM2IR.1: CTI1: indicator activat de captarea în registrul CT1.TM2IR.2: CTI2: indicator activat de captarea în registrul CT2.TM2IR.3: CTI3: indicator activat de captarea în registrul CT3.TM2IR.4: CMI0: indicator activat la compararea cu registrul CM0.TM2IR.5: CMI1: indicator activat la compararea cu registrul CM1.TM2IR.6: CMI2: indicator activat la compararea cu registrul CM2.TM2IR.7: T20V: indicator activat de depăşirea superioară.

Fig. 3.31 Structura registrului TM2IR al microcontrolerului 8xC552

Operaţia de captare este controlată de registrul CTCON ("Capture Control Register"), fig. 3.32.

CT0

CTI0

INTCT0I

CT1

CTI1

INTCT1I

CT2

CTI2

INTCT2I

CT3

CTI3

INTCT3I

CM0

=INT

CM1

=INT

CM2

=INT

T2 depăşire inferioarădepăşire superioară

Divizor deprescalare

off

T2

RST

RT2

T2ER

fOSC/12

Page 53: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 192

7 6 5 4 3 2 1 0

CTN3 CTP3 CTN2 CTP2 CTN1 CTP1 CTN0 CTP0CTCON.0: CTP0: captare în registrul CT0 comandată de frontul ridicător la intrarea CT0I.CTCON.1: CTN0: captare în registrul CT0 comandată de frontul coborâtor la intrarea CT0I.CTCON.2: CTP1: captare în registrul CT1 comandată de frontul ridicător la intrarea CT1I.CTCON.3: CTN1: captare în registrul CT1 comandată de frontul coborâtor la intrarea CT1I.CTCON.4: CTP2: captare în registrul CT2 comandată de frontul ridicător la intrarea CT2I.CTCON.5: CTN2: captare în registrul CT2 comandată de frontul coborâtor la intrarea CT2I.CTCON.6: CTP3: captare în registrul CT3 comandată de frontul ridicător la intrarea CT3I.CTCON.7: CTN3: captare în registrul CT3 comandată de frontul coborâtor la intrarea CT3I.

Fig. 3.32 Structura registrului CTCON al microcontrolerului 8xC552

Din structura registrului CTCON se observă că se poate realiza captare pe frontul ridicător, coborâtor sau ambele ale semnalului de comandă. Intrările sunt citite în S1P1 al fiecarui ciclu. La detectarea frontului selectat, conţinutul numărătorului T2 este captat la sfârşitul ciclului.Facilitatea de captare poate fi utilizată la măsurarea timpului, mai scurt decât 524 ms, între apariţiile a 2 evenimente: dacă apariţia evenimentului este anunţată de un semnal extern, acesta se va lega la intrarea CTjI, j = 0 - 3 şi va determina captarea şi generarea cererii de întrerupere corespunzătoare. Rutina de tratare va citi conţinutul registrului CTj corespunzător şi din diferenţă va rezulta timpul între cele două apariţii.Facilitatea de comparare este implementată cu registrele CM0-2. La fiecare incrementare a numărătorului T2, conţinutul acestuia este comparat cu cel al registrelor CM0-2. La întâlnirea egalităţii, este setat, la sfârşitul ciclului următor, indicatorul de întrerupere corespunzător din registrul TM2IR. Dacă apare egalitatea cu CM0 atunci biţii 0 - 5 ai portului P4 sunt setaţi dacă rangurile corespunzătoare din registrul STE ("Set Enable Register"), fig. 3.33, sunt setate. Dacă apare egalitatea cu CM1 atunci biţii 0 - 5 ai portului P4 sunt resetaţi dacă rangurile corespunzătoare din registru RTE ("Reset/ Toggle Register"), fig. 3.34, sunt setate. Dacă RTE.n = 0, n = 0 - 5, atunci P4.n nu este afectat de egalitatea între CM1 şi T2.7 6 5 4 3 2 1 0

TG47 TG46 SP45 SP44 SP43 SP42 SP41 SP40STE.0: SP40: 1 va provoca setarea terminalului P4.0 la egalitatea între registrul CM0 şi numărătorul T2.STE.1: SP41: 1 va provoca setarea terminalului P4.1 la egalitatea între registrul CM0 şi numărătorul T2.

Page 54: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

193 Microcontrolere - 3 STE.2: SP42: 1 va provoca setarea terminalului P4.2 la egalitatea între registrul CM0 şi numărătorul T2.STE.3: SP43: 1 va provoca setarea terminalului P4.3 la egalitatea între registrul CM0 şi numărătorul T2.STE.4: SP44: 1 va provoca setarea terminalului P4.4 la egalitatea între registrul CM0 şi numărătorul T2.STE.5: SP45: 1 va provoca setarea terminalului P4.5 la egalitatea între registrul CM0 şi numărătorul T2.STE.6: TG46: bistabil afectat de egalitatea între registrul CM2 şi numărătorul T2.STE.7: TG47: bistabil afectat de egalitatea între registrul CM2 şi numărătorul T2.

Fig. 3.33 Structura registrului STE al microcontrolerului 80C552

7 6 5 4 3 2 1 0

TP47 TP46 RP45 RP44 RP43 RP42 RP41 RP40RTE.0: RP40: 1 va provoca resetarea terminalului P4.0 la egalitatea între registrul CM1 şi numărătorul T2.RTE.1: RP41: 1 va provoca resetarea terminalului P4.1 la egalitatea între registrul CM1 şi numărătorul T2.RTE.2: RP42: 1 va provoca resetarea terminalului P4.2 la egalitatea între registrul CM1 şi numărătorul T2.RTE.3: RP43: 1 va provoca resetarea terminalului P4.3 la egalitatea între registrul CM1 şi numărătorul T2.RTE.4: RP44: 1 va provoca resetarea terminalului P4.4 la egalitatea între registrul CM1 şi numărătorul T2.RTE.5: RP45: 1 va provoca resetarea terminalului P4.5 la egalitatea între registrul CM1 şi numărătorul T2.RTE.6: TP46: 1 va provoca modificarea terminalului P4.6 la egalitatea între registrul CM2 şi numărătorul T2.RTE.7: TP47: 1 va provoca modificarea terminalului P4.7 la egalitatea între registrul CM2 şi numărătorul T2.

Fig. 3.34 Structura registrului RTE al microcontrolerului 80C552

Dacă apare egalitatea cu CM2 atunci sunt modificate rangurile P4.6 şi P4.7 dacă rangurile corespunzătoare din registrul RTE sunt setate. Rangurile interne 6 şi 7 ale registrului P4 nu sunt modificate. Există 2 bistabile suplimentare, suprapuse peste rangurile 6 şi 7 ale portului P4 şi aceste bistabile vor fi cele modificate. Conţinuturile acestor bistabile se pot citi prin intermediul rangurilor STE.6 şi STE.7. Registrele CM0-2 sunt iniţializate de semnalul RST.Noua informaţie din registrul portului apare la terminalele corespunzătoare la S5P1 a ciclului care urmează ciclului în care a apărut egalitatea. Dacă portul este modificat prin program, ieşirile se schimbă la S1P1 a următorului ciclu. Modificarea produsă de logica de comparare este prioritară asupra celeia produsă prin program în acelaşi ciclu. Când din logica de comparare rezultă o setare şi o resetare în acelaşi ciclu, resetarea este prioritară.

3.2.3.2 Contorul T3

Page 55: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 194

Contorul T3 a fost prevăzut cu o funcţie specială şi anume cea de watchdog. Rolul său este acela de a iniţializa microcontrolerul dacă acesta intră în stări eronate, din care nu poate ieşi altfel. T3 va genera un semnal de iniţializare intern care însă va apare şi la terminalul RST al microcontrolerului provocând iniţializarea sistemului, dacă nu va fi reâncărcat pe durata unei perioade de tact determinată, numită interval de watchdog.Contorul T3 este alcătuit dintr-un numărător pe 8 ranguri care este incrementat, comandat cu un tact care este ieşire dintr-un divizor de prescalare, pe 11 ranguri, comandat la rândul său cu tactul cu frecvenţa fOSC/ 12. Ca urmare, numărătorul va fi incrementat la fiecare s secunde, unde:s = 12 * 2048 * 1/ fOSC = 1 ms la 24 MHz sau 1,5 ms la 16 MHz sau 2 ms la 12 MHz.Atunci când numărătorul îşi depăşeşte capacitatea, trece din starea FFH în starea 00H, se va genera un semnal care va iniţializa microcontrolerul. Semnalul apare şi la terminalul RST, cu o durata de 3 cicluri maşină.Funcţia de watchdog este validată sau invalidată doar din exterior prin intermediul terminalului /EW: 0 validează funcţia iar 1 o invalidează.Numărătorul trebuie să fie reâncărcat cu o perioadă mai mică decât intervalul de watchdog. În caz contrar el va genera semnalul de iniţializare. Este sarcina programului utilizator să execute, periodic, aceste încărcări. Intervalul de watchdog poate fi programat şi este 1 - 255 ms la 24 MHz, 1,5 - 382 ms la 16 MHz sau 2 - 510 ms la 12 MHz. Pentru a determina durata intervalului de watchdog, pentru o anume aplicaţie, este necesară stabilirea de către programator a duratei maxime cât sistemul suportă o stare eronată. Intervalul de watchdog trebuie să fie mai mic decât această durată. Programatorul trebuie să prevadă apelarea periodică a unei subrutine care încarcă numărătorul T3. Pentru a stabili perioada de apelare, programatorul va trebui să cunoască timpii de execuţie ai tuturor secvenţelor, de asemenea va trebui să ia în considerare şi efectul întreruperilor, a salturilor, a apelurilor de subrutine şi a revenirilor din acestea.Pentru a preveni o încărcare eronată sau accidentală a numărătorului T3, încărcarea se realizează printr-o secvenţă alcătuită din 2 operaţii. La început se va seta rangul WLE (PCON.4). Apoi, se poate încărca numărătorul. La încărcarea lui T3, WLE va fi automat şters. Numărătorul T3 nu poate fi încărcat dacă rangul WLE nu este setat. Întrucât T3 este incrementat, valoarea 00 va da maximul intervalului de watchdog (510 ms la 12 MHz) iar FFH va da minimul (2 ms la 12 MHz).Facilitatea de watchdog ramâne activă şi în modul Idle. Dacă ea este validată atunci microcontrolerul nu poate intra în modul Power - Down chiar dacă se cere acest lucru prin o încercare de setare a lui PCON.1. PCON.1 va rămâne resetat.

3.2.3.3 Ieşirile cu durate programabile, PWM0-1

Page 56: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

195 Microcontrolere - 3 Microcontrolerul 8xC552 conţine 2 canale independente pentru generarea de impulsuri modulate, de durate şi perioade programabile, fig. 3.35.

Fig. 3.35 Circuitele de generare a ieşirilor cu durate programabilela microcontrolerul 8xC552

Divizorul de prescalare şi numărătorul sunt comune ambelor canale. Secvenţa de numărare este 0 - 254. Conţinutul numărătorului este comparat cu conţinutul a 2 registre, PWM0 şi PWM1. Dacă conţinutul registrelor este mai mare decât cel al numărătorului, ieşirea corespunzătoare va avea valoarea 0 iar în caz contrar va avea valoarea 1. Deci forma ieşirii este controlată de factorul de prescalare şi de conţinuturile registrelor.Factorul de prescalare este încărcat prin program în registrul PWMP. Valoarea sa va fi: (PWMP) + 1. Prin citirea registrului PWMP se obţine factorul de prescalare iniţial.

Magistrală internă

Divizor deprescalarefOSC / 2

Numărător

Comparator

PWM0Separator

PWM0

Comparator

PWM1Separator

PWM1

Page 57: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 196

Registrele PWM0 şi 1 pot fi încărcate şi citite prin program. Încărcarea unuia din registre cu valorile 00 şi FFH, alternativ, va provoca modificarea ieşirii corespunzătoare cu frecvenţa constantă: fOSC

fPWM = -------------------------------------. 2 * ((PWMP) + 1) * 255 Întrucât valoarea maximă a numărătorului este 254, el nu va egala niciodată conţinutul 255 (FFH) al registrului.Domeniul de frecvenţe va fi 123 Hz - 31,4 KHz la 16 MHz şi 184 Hz - 47,1 KHz la 24 MHz.Atunci când unul din registre este încărcat cu o nouă valoare, aceasta va apare la ieşire imediat, fără a aştepta încheierea ciclului curent.O aplicaţie tipică pentru aceste ieşiri este comanda motoarelor de curent continuu. Turaţia unui motor va fi proporţională cu durata semnalului care îl comandă, PWM0 sau 1, deci va fi dată de conţinutul registrului PWM0 sau 1.

3.2.3.4 Convertorul analog/ digital

Microcontrolerul 8xC552 dispune de un bloc de conversie analog/ digitală, alcătuit dintr-un multiplexor pentru 8 intrări analogice, care sunt şi terminalele portului P5 şi un convertor analog/ digital, pe 10 biţi, care realizează conversia prin aproximări succesive, fig. 3.36. Tensiunea de referinţă şi alimentările analogice se aplică la terminale specifice.

Conversia durează 50 cicluri maşină adică 25 ms la 24 MHz, 37,5 ms la 16 MHz sau 50 ms la 12 MHz. Tensiunea ce se va converti poate fi în domeniul 0 - +5 V.

Fig. 3.36 Blocul de conversie analog/ digitală a microcontrolerului 8xC552

MUX Convertor analog / digital

ADC0

ADC7

0 7 70

STDACAVREF+

AVREF-

AVDD

AVSS

Magistrală internă

ADCS ADCI ADEX ADCHADCON

Page 58: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

197 Microcontrolere - 3 Funcţionarea blocului de conversie este controlată de registrul ADCON ("Analog/ Digital Converter"), fig. 3.37.

7 6 5 4 3 2 1 0

ADC.1 ADC.0 ADEX ADCI ADCS AADR2 AADR1 AADR0

ADCON.0-2: AADR0-2: selectarea uneia din cele 8 intrări analogice.ADCON.3: ADCS: 1 va determina pornirea operaţiei de conversie; poate fi setat prin program sau din exterior, poate fi citit şi oferă valoarea 1 dacă operaţia de conversie este în curs; este şters la încheierea conversiei în acelaşi moment cu setarea indicatorului pentru întreruperi corespunzător; nu poate fi resetat prin program şi o nouă conversie nu poate începe dacă ADCS este 1. ADCON.4: ADCI: indicator de întrerupere activat de blocul de conversie analog/ digitală; este setat la încheierea conversiei şi poate genera o cerere de întrerupere dacă aceasta este validată; poate fi şters prin program dar nu poate fi setat prin program; nu se poate începe o nouă conversie dacă ADCI este 1; starea convertorului este dată de rangurile ADCS şi ADCI, conform tab. 3.16.

ADCI ADCS Starea convertorului

0 00 11 01 1

Convertor liber; conversia poate începeConvertor ocupat; nu poate începe o nouă conversieÎncheierea conversiei; nu poate începe o nouă conversieImposibil

Tab. 3.16 Starea convertorului la microcontrolerul 8xC552

ADCON.5: ADEX: stabileşte modul în care este pornită conversia; 0: conversia poate fi pornită doar prin program, prin setarea rangului ADCS, 1: conversia poate fi pornită prin program sau din exterior (semnalul STADC).ADCON.6: ADC0: bitul 0 al rezultatului conversiei.ADCON.7: ADC1: bitul 1 al rezultatului conversiei.

Fig. 3.37 Structura registrului ADCON al microcontrolerului 8xC552

Dacă rangul ADEX (ADCON.5) = 0 atunci conversia este pornită doar prin program, setând rangul ADCS (ADCON.3), la începutul ciclului maşină următor instrucţiunii care setează pe ADCS. Dacă ADEX = 1 atunci conversia poate fi pornită prin program, setând pe ADCS, sau din exterior, apicând un front ridicător la terminalul STADC. În acest caz este necesar ca semnalul de la intrarea STADC să aibă nivel 0 cel puţin pe durata unui ciclu maşină şi apoi nivel 1 cel puţin pe durata unui ciclu maşină. Tranziţia este detectată la sfârşitul unui ciclu maşină şi conversia începe în ciclul următor.În următoarele 2 cicluri maşină este iniţializat convertorul. La sfârşitul primului ciclu este setat indicatorul ADCS şi la citirea sa va oferi valoarea 1 indicând faptul că operaţia de conversie este în desfăşurare. Rangul ADCS este implementat cu 2 bistabile: unul pentru comandă şi unul pentru citire.Citirea intrării analogice selectate începe la sfârşitul celui de-al doilea ciclu. În următoarele 8 cicluri maşină are loc citirea intrării analogice selectate, timp în care

Page 59: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 198

tensiunea de la intrare trebuie să fie stabilă. Panta tensiunii de la intrare trebuie să fie mai mică decât 10V/ ms.Sfârşitul conversiei este indicat de rangul ADCI (ADCON.4). Cele 8 ranguri mai semnificative ale rezultatului sunt memorate în registrul ADCH iar cele 2 ranguri mai puţin semnificative în rangurile ADCON.6 şi 7. Citind doar ADCH se obţine rezultatul conversiei pe 8 biţi care durează însă la fel de mult ca şi conversia pe 10 biţi. Rangul ADCI este setat şi rangul ADCS este resetat la 50 cicluri maşină după ce bistabilul de comandă al rangului ADCS a fost setat.Rangurile ADCON.0-2 sunt folosite pentru selectarea intrării. O conversie în execuţie nu este afectată de pornirea unei noi conversii.Tensiunea de intrare, VIN, trebuie să fie în domeniul fixat de cele 2 tensiuni de referinţă, AVREF+ şi AVREF-. Rezultatul conversiei este dat de relaţia: VIN - AVREF-

R = 1024 * --------------------------. AVREF+ - AVREF-

AVREF+ şi AVREF- trebuie să se afle în domeniul AVDD + 0,2 V şi AVSS - 0,2 V unde AVDD

este alimentarea analogică iar AVSS este masa analogică.Pentru tensiuni de intrare între AVREF- şi AVREF- + 1/2 LSB, rezultatul conversiei va fi 000H iar pentru tensiuni de intrare între AVREF+ - 3/2 LSB şi AVREF+ rezultatul conversiei va fi 3FFH.

3.2.4 Interfeţele seriale

Microcontrolerul 8xC552 dispune de 2 interfeţe seriale independente:- SIO0, de tip UART, identică cu cea a microcontrolerului 80C51 şi- SIO1, pentru magistrala I2C.În continuare va fi descrisă doar interfaţa SIO1.Fig. 3.38 prezintă schema bloc a unui sistem bazat pe magistrala I2C. Magistrala I2C permite transferul sincron de informaţii între mai multe dispozitive, de tip master si slave, utilizând 2 linii: SDA, pentru date şi SCL, pentru tact. Câteva caracteristici ale magistralei I2C sunt:- transfer bidirecţional între dispozitive de tip master şi slave; - arbitrare între mai multe dispozitive master care transmit, fără afectarea datelor de pe magistrală;- sincronizare pe linia de tact între dispozitive cu viteze diferite ceea ce permite comunicarea între acestea pe o singură linie serială; de asemenea permite oprirea temporară şi reluarea transferului serial.Pentru a valida funcţionarea lui SIO1 este necesar ca în rangurile P1.6 şi P1.7 să fie înscris 1. Terminalele P1.6 şi P1.7 sunt utilizate pentru semnalele SCL, respectiv SDA.În funcţie de starea bitului de directie, R/ /W, sunt posibile 2 tipuri de transferuri de date:- transfer de date de la un master emiţător la un slave receptor: primul octet transferat de master este adresa dispozitivului slave, apoi urmează un număr de octeţi de date; receptorul răspunde cu un bit de acceptare după fiecare octet primit;

Page 60: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

199 Microcontrolere - 3 - transfer de date de la un slave emiţător la un master receptor: primul octet, adresa dispozitivului slave, este transferat de master, dispozitivul slave răspunde cu un bit deacceptare şi apoi urmează datele transferate de slave către master; după fiecare octet primit, dispozitivul master răspunde cu un bit de acceptare iar după ultimul octet răspunde cu un bit de neacceptare.Dispozitivul master generează tactul precum şi impulsurile de START şi STOP. În loc de STOP poate genera un nou impuls de START ceea ce înseamnă un nou transfer.Interfaţa SIO1 poate lucra în unul din următoarele 4 moduri:

Page 61: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 200

Fig. 3.38 Schema bloc a unui sistem bazat pe magistrala I2C

Mod master emiţătorDatele sunt transferate pe terminalul P1.7/ SDA iar tactul pe terminalul P1.6/ SCL.

Primul octet transferat este adresa dispozitivului slave, notată cu SLA, pe 7 biţi şi bitul de direcţie R/ /W. În acest caz R/ /W = 0 şi se notează cu W deci primul octet este SLA + W. După fiecare octet emis, dispozitivul master primeşte un bit de acceptare. Începutul şi sfârşitul unui transfer sunt indicate prin biţii de START şi STOP.

Mod master receptorSunt folosite aceleaşi terminale ca în cazul anterior.Primul octet transferat de master este adresa dispozitivului slave, SLA şi bitul de direcţie, R/ /W = 1, notat acum cu R, deci primul octet transferat este SLA + R. Dispozitivul master răspunde cu un bit de acceptare după primirea fiecărui octet de date. Dispozitivul master stabileşte începutul şi sfârşitul unui transfer serie prin biţii START şi STOP.

Mod slave receptorDatele şi tactul sunt primite pe terminalele P1.7/ SDA, respectiv P1.6/ SCL. După primirea fiecărui octet, dispozitivul slave va răspunde cu un bit de acceptare. Dispozitivul slave va trebui să recunoască biţii de START şi STOP precum şi propria adresă şi biţii de direcţie.

Mod slave emiţătorPrimul octet, adresa şi bitul de direcţie, este recepţionat, apoi răspunde cu un bit de acceptare şi apoi va emite datele pe terminalul P1.7/ SDA la momentele stabilite de tactul primit pe terminalul P1.6/ SCL. Dispozitivul slave va trebui să recunoască biţii de START şi STOP.

Interfaţa SIO1 poate lucra ca master şi ca slave în aceeaşi aplicaţie. Dacă este slave, va aştepta propria adresă sau adresa de apel general. Dacă primeşte una din aceste adrese, va genera o întrerupere. Dacă doreste să devină master, va aştepta ca magistrala să fie liberă

Dispozitivcu interfaţă

I2C. . .

Dispozitivcu interfaţă

I2C

VDD

P1.7/SDA P1.6/SLC

8xC552

SDA

SLC

MagistralaI2C

Page 62: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

201 Microcontrolere - 3 pentru a nu întrerupe o acţiune în curs, a unui slave. Dacă pierde arbitrarea, SIO1 devine slave.Pentru a realiza aceste operaţii, SIO1 dispune de următoarele blocuri:- un filtru de intrare care recunoaşte nivelele de tensiune specifice magistralei I2C: 0 logic pentru o tensiune mai mică decât 1,5 V şi 1 logic pentru o tensiune mai mare ca 3 V;- un etaj de ieşire care permite conectarea la liniile SDA şi SCL, astfel încât dacă microcontrolerul rămâne fără alimentare, el nu va afecta liniile SDA şi SCL;- un registru pentru adresă, S1ADR unde memorează adresa proprie atunci când este slave şi bitul GC, de validare a recunoaşterii apelului general;- un comparator pentru detectarea propriei adrese sau a adresei de apel general;- un registru de deplasare pentru date, S1DAT în care se află întotdeauna ultimul octet transferat cu magistrala;- o logică pentru arbitrare şi sincronizare: aceasta permite arbitrarea într-un sistem multimaster precum şi sincronizarea tactului cu cel emis de un alt dispozitiv; sincronizarea se realizează astfel încât durata tactului este fixată de acel dispozitiv care emite o durată mai mică iar spaţiul între impulsuri este fixat de acel dispozitiv care emite un spaţiu mai lung;- un generator de tact: emite tact doar în modurile master; factorul de umplere este 1/ 2 atunci când nu este modificat datorită sincronizării cu un alt dipozitiv master;- un registru de control S1CON care controlează funcţionarea interfeţei SIO1;- un registru de stare şi un decodificator de stare: interfaţa SIO1 poate fi în una din 26 stări pentru codificarea cărora fiind necesari 5 biţi de stare, poziţionaţi de decodificatorul de stare şi memoraţi în registru de stare, pe cele 5 ranguri mai semnificative, restul de 3 ranguri având valoarea 0; conţinutul registrului de stare poate fi utilizat ca vector de adresă la setarea indicatorului de întrerupere de la interfaţa SIO1; conţinutul registrului va rămâne nemodificat până când indicatorul de întrerupere este şters prin program; dacă conţinutul registrului de stare este folosit ca vector de adresă atunci rutinele de tratare a cererilor de întrerupere vor fi distanţate unele de altele cu 8 octeţi ceea ce este suficient pentru majoritatea aplicaţiilor.

În continuare vor fi detaliate registrele folosite de SIO1.Registrul de adresă, S1ADR, fig. 3.39, poate fi citit şi scris prin program şi nu este afectat de logica interfeţei seriale. În modurile slave, cei 7 biţi mai semnificativi reprezintă adresa dispozitivului iar bitul GC, dacă este setat, va valida recunoaşterea adresei de apel general (00H) iar în caz contrar va determina ignorarea acestei adrese. Bitul cel mai semnificativ din S1ADR este primul bit recepţionat după un bit de START.

7 6 5 4 3 2 1 0ADR S L A V E GC

Fig. 3.39 Structura registrului S1ADR al microcontrolerului 8xC552

Registrul de date, S1DAT, conţine octetul de date care va fi emis pe linie sau cel recepţionat de pe linie. CPU poate citi sau scrie din/ în acest registru atunci când acesta nu este în timpul unui transfer ceea ce poate fi detectat prin o anume stare a lui SIO1 şi prin faptul că indicatorul de întrerupere este setat. Datele în S1DAT rămân stabile cât timp indicatorul de întrerupere este setat. Primul bit care se transmite este cel mai semnificativ din S1DAT iar la recepţie primul bit primit este depus în rangul cel mai

Page 63: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 202

semnificativ. Atunci când este emisă o dată, ea este simultan recepţionată, astfel încât în S1DAT întotdeauna se află ultimul octet transferat pe magistrală. Aceasta va permite ca la pierderea arbitrării, trecerea de la modul master emiţător la cel slave emiţător să se facă având data corectă în S1DAT.S1DAT formează cu bistabilul pentru bitul de acceptare un registru de deplasare pe 9 biţi, astfel încât fiecare transfer de octet este însoţit de transferul unui bit de acceptare. Datele sunt primite în registrul S1DAT pe frontul ridicător al fiecarui impuls de tact şi sunt emise pe linie pe frontul căzător al fiecărui impuls de tact. Pentru transferul unui octet se folosesc 8 impulsuri de tact iar la al 9-lea se transferă bitul de acceptare.Registrul de control, S1CON, fig. 3.40, are rolul de a controla funcţionarea interfeţei SIO1.

7 6 5 4 3 2 1 0CR2 ENS1 STA ST0 SI AA CR1 CR0

Fig. 3.40 Structura registrului S1CON al microcontrolerului 8xC552

Semnificaţiile rangurilor sale sunt descrise în continuare.ENS1: bit de validare a interfeţei SIO1: dacă este 0, SDA şi SCL sunt în starea de înaltă impedanţă dacă sunt ieşiri iar dacă sunt intrări, vor fi ignorate; interfaţa SIO1 este dezactivată şi rangurile P1.6 şi P1.7 pot fi folosite în alte scopuri.Dacă ENS1 = 1 atunci interfaţa SIO1 este validată iar rangurile P1.6 şi P1.7 din registrul P1 trebuie să conţină 1.Dacă ENS1 este resetat atunci starea interfeţei se pierde ceea ce înseamnă că acest rang nu poate fi folosit pentru oprirea temporară a interfeţei.STA: bit de START: dacă STA este setat şi interfaţa doreşte intrarea într-un mod master, ea va verifica dacă magistrala este liberă şi, în caz afirmativ, va genera un impuls de START; în caz negativ va aştepta un bit de STOP care indică eliberarea magistralei şi apoi va genera un bit de START. Dacă STA este setat şi SIO1 este deja într-un mod master atunci SIO1 va trimite, la încheierea transferului unui caracter, în loc de un bit de STOP un alt bit de START, indicând astfel continuarea transferului. Dacă STA = 0 atunci nu se va genera bit de START.STO: bit de STOP: dacă STO este setat în timp ce SIO1 este într-un mod master, acesta va genera un bit de STOP pe magistrală, apoi îl va anula; dacă SIO1 este într-un mod slave, bitul STOP va determina ieşirea dintr-o stare eronată dar nu se va emite bit de STOP pe linie.Dacă biţii STA şi STO sunt simultan activaţi atunci se va transmite pe linie un bit de STOP urmat de unul de START. Dacă STO = 0 atunci nu se va genera bit de STOP.SI: indicator de întrerupere serială de la interfaţa SIO1: dacă este 1 şi dacă şi rangurile EA (IEN0.7) şi ES1 (IEN0.5) sunt setate atunci se va genera o cerere de întrerupere serială de la interfaţa SIO1. SI este setat de logica lui SIO1 dacă acesta se află în una din 25 stări din cele 26 posibile. Starea F8H este cea care nu activează pe SI şi semnifică lipsa unei informaţii de stare relevante.Dacă SI este setat, se opreşte generarea tactului pe linia SCL (aceasta rămâne la 0) şi transferul serial este oprit. SI trebuie resetat prin program.Dacă SI = 0 nu se va genera o cerere de întrerupere.

Page 64: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

203 Microcontrolere - 3 AA: bit de validare a acceptării: dacă AA = 1 atunci se va genera bit de acceptare (0 pe linia SDA) în una din următoarele situaţii:- s-a detectat adresa proprie de slave;- s-a detectat adresa de apel general iar rangul GC din S1ADR este setat;- s-a primit un octet de date atunci când SIO1 este în unul din modurile master sau slave receptor.Dacă AA = 0 atunci se va genera un bit de neacceptare (1 pe linia SDA) după primirea unui octet de date în timp ce SIO1 se află în unul din modurile master sau slave receptor.Dacă SIO1 este în modul slave emiţător, va intra în starea C8H după ultimul transfer serial. După ştergerea lui SI, SIO1 părăseşte starea C8H şi intră în modul slave emiţător neadresabil în care ignoră propria adresă şi adresa de apel general ceea ce este echivalent cu o decuplare temporară de la magistrală. În acestă stare interfaţa va recunoaşte biţii de START şi STOP şi va citi datele. Recunoaşterea adresei poate fi reluată oricând prin setarea rangului AA. Dacă AA este setat în timp ce adresa proprie sau cea de apel general au fost parţial transferate, ele vor fi recunoscute la sfârşitul octetului corespunzător.CR2-0: biţii pentru stabilirea frecvenţei tactului: determină frecvenţa tactului atunci când SIO1 este într-un mod master, conform tab. 3.17.

CR2 CR1 CR0 Frecvenţa tactului [KHz] la fOSC

12 MHz 24 MHzfOSC se divide la

0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1

47 6354 7163 8375 10012,5 17100 -- -0,5-62,5 0,67-62,5

25622419216096012060c

Tab. 3.17 Stabilirea frecvenţei tactului la SIO1 a microcontrolerului 8xC552

unde c = 96 * (256 - constanta de preâncărcare a contorului T1), constanta aflându-se în domeniul 0 - 254 pentru modul 2 al lui T1.Se observă că domeniul de frecvenţe este 12,5 - 100 KHz. Se poate obţine şi o frecvenţă variabilă utilizând ca sursă de tact ieşirea de depăşire a contorului T1.Dacă SIO1 este într-un mod slave atunci el se va sincroniza cu orice frecvenţă, până la 100 KHz.

Registrul de stare, S1STA, este un registru ce poate fi doar citit. El conţine pe cele 5 ranguri mai semnificative codul uneia din cele 26 stări în care se poate găsi SIO1 iar pe celelalte 3 ranguri, conţine valoarea 0. Starea este stabilită de logica interfeţei şi codul ei se află în S1STA la un ciclu maşină după ce s-a activat indicatorul de întrerupere SI şi mai rămâne în registru un ciclu maşină după ce indicatorul SI a fost anulat. Din cele 26 stări doar una, având codul F8H, nu determină activarea indicatorului de întrerupere, SI. Ea corespunde lipsei unei informaţii de stare relevante. Conţinutul registrului poate fi folosit ca vector de adresă pentru accesul la rutinele de tratare a cererilor de întrerupere

Page 65: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 204

ce corespund celor 25 stări.Fig. 3.41 prezintă câte un transfer realizat cu succes în fiecare din cele 4 moduri. Au fost folosite notaţiile:

Fig. 3.41 Transferuri realizate cu succes de interfaţa SIO1 a microcontrolerului 8xC552S: bit de START,SLA: adresă de dispozitiv slave, pe 7 biţi,R: bit de citire (1 pe linia SDA),W: bit de scriere (0 pe linia SDA),A: bit de

acceptare (0 pe linia SDA),/A: bit de neaaceptare (1 pe linia SDA),

S SLA, W A DATA A 0 Transfer de la unmaster emiţător

;

08H 18H 28H

S SLA, R A DATA A DATA /A 0

06H 40H 50H 58H

S SLA, W A DATA A DATA A 0 sau S

60H 80H 80H A0H

Recepţia adresei propri şi a unui octet de date de un slave receptor

S SLA, R A DATA A DATA /A 0 sau S

A8H 88H C0H

Recepţia adresei propri şi transmisia unui octet de date de un slave emiţător

transfer de la master la slave

transfer de la slave la master

Transfer de la un master

receptor

Page 66: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

205 Microcontrolere - 3 DATA: octet de date,O: bit de STOP.Au fost indicate, în cercuri, stările în care se afla interfaţa la diferite momente de timp.În continuare vor fi comentate cele 4 cazuri posibile.Modul master emiţător: în acest mod se transmite un număr de octeţi de date la un dispozitiv slave receptor. Înainte de a începe transferul, registrul S1CON trebuie să conţină configuraţia: CR2 1 0 0 0 x CR1 CR0.În continuare se va seta rangul STA, prin intermediul instrucţiunii SETB şi, dacă magistrala este liberă, va începe transferul. După emiterea bitului de START se va activa indicatorul SI iar codul stării va fi 06H. El poate fi folosit pentru a ajunge la o subrutină de tratare a întreruperii care va încărca în registrul S1DAT un octet alcătuit din adresa dispozitivului slave şi bitul de direcţie. Apoi rangul SI va fi anulat înainte ca transferul să înceapă. După transferul octetului SLA + R sau W şi după primirea bitului de acceptare, SI va fi setat din nou iar în registrul S1STA se va înscrie un cod în funcţie de modul în care a decurs transferul. Dacă se doreşte continuarea cu transferul datelor, în registrul S1STA va exista codul 18H şi se va realiza accesul la subrutina care încarcă în S1DAT, pe rând, octeţii de date. Transferul se încheie cu activarea rangului STO şi generarea bitului de STOP.Modul master receptor: în acest mod se primeşte un număr de octeţi de date de la un dispozitiv slave emiţător. Transferul este iniţializat ca în modul anterior. După transferul adresei şi a bitului de direcţie, stările în care intră interfaţa sunt diferite faţă de cele din cazul anterior. De exemplu dacă se doreşte recepţia datelor, în registrul S1STA va exista codul 40H care va determina accesul la subrutina care preia din registrul S1DAT, pe rând, octeţii de date.Modul slave receptor: în acest mod se primeşte un număr de octeţi de date de la un dispozitiv master emiţător. Pentru iniţierea modului, în registrul S1ADR trebuie să fie adresa dispozitivului slave iar în registrul S1CON trebuie să existe configuraţia:CR2 1 0 0 0 1 CR1 CR0.Dacă rangul GC din registrul S1ADR este setat atunci dispozitivul va recunoaşte şi adresa de apel general. CR2-0 nu contează în acest mod.După încărcarea celor 2 registre, SIO1 aşteaptă până ce îşi detectează propria adresă urmată de bitul de direcţie. Apoi setează indicatorul de întrerupere şi, în funcţie de starea din registrul S1STA, va realiza accesul la o rutină ce realizează operaţiile corespunzătoare.Dacă rangul AA este resetat în timpul unui transfer, SIO1 va răspunde cu un bit de neacceptare după următorul octet transferat şi, în continuare, se va decupla de la magistrală adică nu va încerca o recunoaştere a propriei adrese sau a celei de apel general dar va citi în continuare magistrala. Dacă AA va fi setat, operaţia de recunoaştere a propriei adrese sau a celei de apel general va fi reluată deci dispozitivul se va recupla la magistrală.Modul slave emiţător: în acest mod se transmite un număr de octeţi la un dispozitiv master receptor. Operaţiile sunt asemănătoare cu cele din modul anterior.Întrucât pentru realizarea tuturor operaţiilor este necesar accesul rapid la subrutine de tratare a cererilor de întrerupere care se află la adrese diferite, se va prezenta în continuare o secvenţă ce realizează acest acces rapid. Se presupune că:- în registrul S1STA se află un cod care reprezintă octetul mai puţin semnificativ al adresei de început a subrutinei;

Page 67: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 206

- în locaţia ADR din memoria RAM internă se află octetul mai semnificativ al adresei de început a subrutinei.Secvenţa este:PUSH PSWPUSH S1STAPUSH ADRRETPrima instrucţiune salvează starea registrului PSW. A doua şi a treia instrucţiune depun în stivă adresa subrutinei de tratare iar instrucţiunea RET extrage această adresă şi o depune în numărătorul de program, PC. Întrucât s-a folosit acelaşi octet superior al adresei, adresele subrutinelor se află în aceeaşi pagină de 256 octeţi din memorie. Pagina poate fi plasată oriunde în memorie, prin modificarea conţinutului locaţiei ADR.

3.2.5 Sistemul de întreruperi

Microcontrolerul 8xC552 are 15 surse de întreruperi generate de indicatori:- 5 sunt cele existente şi la microcontrolerul 80C51: cele 2 întreruperi externe, IE0 şi IE1, cele datorate contoarelor 0 şi 1, IT0 şi IT1 şi cea datorată interfeţei seriale UART care se numeşte SIO0 la 8xC552; funcţionarea lor este identică cu cele corespunzătoare de la microcontrolerul 80C51;- 8 sunt datorate contorului T2: ele sunt generate prin poziţionarea unor indicatori şi anume: CTI0 - CTI3 care sunt indicatorii poziţionaţi la captarea conţinutului contorului T2 comandată de semnalele externe CT0I - CT3I, CMI0 - CMI2 care sunt indicatorii poziţionaţi de logica de comparare între conţinutul contorului T2 şi registrele CM0, CM1 şi CM2 şi un indicator care rezultă în urma unei operaţii SAU între indicatorii T2B0 şi T20V poziţionaţi ca urmare a apariţiei unei depăşiri inferioare, respectiv superioare la contorul T2; toţi aceşti indicatori pot fi şterşi doar prin program;- una este datorată blocului de conversie şi este generată de indicatorul ADCI, indicând că rezultatul conversiei poate fi citit: ADCI poate fi anulat doar prin program;- una este datorată interfeţei seriale SIO1 şi este generată de indicatorul SI: acesta este setat atunci când registrul de stare S1STA se încarcă cu un cod de stare relevant şi poate fi anulat doar prin program.Cu excepţia indicatorului ADCI care este setat de logica blocului de conversie, toţi ceilalţi indicatori pot fi setaţi şi resetaţi şi prin program. În acest fel pot fi generate întreruperi şi prin program şi există şi facilitatea de a anula prin program întreruperi în aşteptare.La luarea în considerare a unor cereri de întrerupere sunt anulaţi, în mod automat, unii indicatori: IT0, IT1 şi IE0, IE1 dacă întreruperile externe au fost activate pe front. Toţi ceilalţi indicatori sunt anulaţi doar prin program. Este necesară anularea lor pentru a preveni luarea în considerare, în mod repetat, a unei întreruperi care tocmai a fost tratată.Fiecare sursă de întrerupere este validată sau nu de un rang din registrele de validare a întreruperilor IEN0, fig. 3.42 şi IEN1, fig.3.43. De asemenea există un rang pentru validarea sau invalidarea globală a surselor de întrerupere.7 6 5 4 3 2 1 0EA EAD ES1 ES0 ET1 EX1 ET0 EX0

Page 68: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

207 Microcontrolere - 3 IEN0.0: EX0: validează întreruperea externă 0IEN0.1: ET0: validează întreruperea de la contorul T0IEN0.2: EX1: validează întreruperea externă 1IEN0.3: ET1: validează întreruperea de la contorul T1IEN0.4: ES0: validează întreruperea de la interfaţa SIO0IEN0.5: ES1: validează întreruperea de la interfaţa SIO1IEN0.6: EAD: validează întreruperea de la blocul de conversieIEN0.7: EA: control global al sistemului de întreruperi: 1 - validare, 0 - invalidare.

Fig. 3.42 Structura registrului IEN0 al microcontrolerului 8xC552

7 6 5 4 3 2 1 0

ET2 ECM2 ECM1 ECM0 ECT3 ECT2 ECT1 ECT0IEN1.0: ECT0: validează întreruperea generată de captarea 0IEN1.1: ECT1: validează întreruperea generată de captarea 1IEN1.2: ECT2: validează întreruperea generată de captarea 2IEN1.3: ECT3: validează întreruperea generată de captarea 3IEN1.4: ECM0: validează întreruperea generată de compararea 0IEN1.5: ECM1: validează întreruperea generată de compararea 1IEN1.6: ECM2: validează întreruperea generată de compararea 2IEN1.7: ET2: validează întreruperea generată de depaşirile de la contorul T2.

Fig. 3.43 Structura registrului IEN1 al microcontrolerului 8xC552

Fiecarei surse i se poate aloca un nivel de prioritate scăzut sau ridicat, prin intermediul registrelor de priorităţi IP0, fig. 3.44 şi IP1, fig. 3.45. Toate considerentele de la microcontrolerul 80C51 legate de nivelele de priorităţi rămân valabile şi pentru microcontrolerul 8xC552.7 6 5 4 3 2 1 0- PAD PS1 PS0 PT1 PX1 PT0 PX0

IP0.0: PX0: prioritate pentru întreruperea externă 0IP0.1: PT0: prioritate pentru întreruperea de la contorul T0IP0.2: PX1: prioritate pentru întreruperea externă 1IP0.3: PT1: prioritate pentru întreruperea de la contorul T1IP0.4: PS0: prioritate pentru întreruperea de la SIO0IP0.5: PS1: prioritate pentru întreruperea de la SIO1IP0.6: PAD: prioritate pentru întreruperea de la blocul de conversie.

Fig. 3.44 Structura registrului IP0 al microcontrolerului 8xC552

7 6 5 4 3 2 1 0

PT2 PCM2 PCM1 PCM0 PCT3 PCT2 PCT1 PCT0IP1.0: PCT0: prioritate pentru întreruperea generată de captarea 0IP1.1: PCT1: prioritate pentru întreruperea generată de captarea 1IP1.2: PCT2: prioritate pentru întreruperea generată de captarea 2IP1.3: PCT3: prioritate pentru întreruperea generată de captarea 3IP1.4: PCM0: prioritate pentru întreruperea generată de compararea 0IP1.5: PCM1: prioritate pentru întreruperea generată de compararea 1IP1.6: PCM2: prioritate pentru întreruperea generată de compararea 2

Page 69: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 208

IP1.7: PT2: prioritate pentru întreruperea generată de depăşirile de la contorul T2.Fig. 3.45 Structura registrului IP1 al microcontrolerului 8xC552

În continuare este prezentată prioritatea implicită pe care o acordă microcontrolerul în cazul apariţiei simultane a 2 sau mai multe cereri de întrerupere de aceeaşi prioritate, în ordinea descrescătoare a acesteia:- întreruperea externă 0,- SIO1,- blocul de conversie,- depăşirea contorului T0,- captarea 0,- compararea 0,- întreruperea externă 1,- captarea 1,- compararea 1,- depăşirea contorului T1,- captarea 2,- compararea 2,- SIO0,- captarea 3,- depăşirile contorului T2.Toate considerentele prezentate la microcontrolerul 80C51 legate de tratarea unei cereri de întrerupere sunt valabile şi la microcontrolerul 8xC552, cu excepţia vectorilor de adresă care sunt prezentaţi în tab. 3.18.

Sursa Vectorul de adresă

Întreruperea externă 0Depăşirea contorului T0Întreruperea externă 1Depăşirea contorului T1SIO0SIO1Captarea 0Captarea 1Captarea 2Captarea 3Blocul de conversieCompararea 0Compararea 1Compararea 2Depăşirile contorului T2

0003H000BH0013H001BH0023H002BH0033H003BH0043H004BH0053H005BH0063H006BH0073H

Tab. 3.18 Adresele întreruperilor microcontrolerului 8xC5523.2.6 Iniţializarea microcontrolerului

Page 70: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

209 Microcontrolere - 3 Iniţializarea microcontrolerului se realizează prin activarea la 1 a intrării RST, timp de cel puţin 2 cicluri maşină. În timpul cât RST este activ, ieşirile ALE şi /PSEN au nivel 1 logic.Microcontrolerul mai poate fi iniţializat şi de contorul cu funcţie de watchdog care generează, la trecerea numărătorului din starea FFH în starea 00H, un impuls de iniţializare cu durata de 3 cicluri maşină, atât intern cât şi extern.

Fig. 3.46 prezintă un circuit pentru generarea automată a iniţializării la cuplarea alimentării.

Fig. 3.46 Circuit pentru iniţializarea microcontrolerului 8xC552 la cuplarea alimentării

Dacă într-o aplicaţie se doreşte generarea unui impuls de iniţializare extern, pe terminalul RST, de către contorul cu funcţie de watchdog, nu se recomandă folosirea circuitului de mai sus întrucât durata impulsului generat nu este suficientă pentru descărcarea condensatorului.

Secvenţa internă de iniţializare are loc în timpul celui de-al doilea ciclu maşină în care semnalul RST este activ şi se repetă în continuare în fiecare ciclu maşină în care semnalul RST este activ. La sfârşitul unei secvenţe interne de iniţializare, registrele interne au conţinuturile prezentate în tab. 3.19.

3.2.7 Porturile

Microcontrolerul 8xC552 dispune de 6 porturi pe 8 biţi, P0 - P5, primele 5 fiind bidirecţionale iar al 6-lea fiind doar de intrare. Ele sunt porturi de uz general, existând posibilitatea programării individuale a fiecărui rang şi, în plus, ele au şi funcţiuni alternative. Aceste funcţiuni au fost prezentate în paragraful 3.2.2. Porturile P0 - P4 dispun fiecare de circuite de intrare, un registru intern şi un etaj de ieşire iar portul P5 dispune doar de circuitele de intrare şi un registru intern.

VDD

8xC552

RST

VDD

4,7 µF

47 k

+-

Page 71: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 210

Registru Conţinut

ACC,B,CML0-2,CMH0-2,CTCON,DPL,DPH,IEN0,IEN1,IP1,PC,PSW,PWM0,PWM1,PWMP,STE,S0CON,S1ADR,S1CON,S1DAT,TCON,TH0,TH1,TMH2,TL0,TL1,TML2,TMOD,TM2CON,TM2IR,T3ADCONADCH,CTL0-3,CTH0-3,P5,S0BUFIP0P0-4S1STASPSTE

00H

xx000000BXXHx0000000BFFHF8H07HC0H

Tab. 3.19 Conţinuturile registrelor microcontrolerului 8xC552 după iniţializare

Porturile P0 - P3 sunt identice cu cele de la microcontrolerul 80C51 atât în ceea ce priveşte structura internă cât şi rolul lor şi funcţiunile alternative. Există o diferenţă la portul P1 care prezintă, pentru toate terminalele, funcţiuni alternative la microcontrolerul 8xC552. Rangurile P1.6 şi P1.7 sunt folosite pentru conectarea la magistrala I2C şi, ca urmare, sunt cu drena în gol. Ele diferă de rangurile P1.6 şi P1.7 ale microcontrolerului 80C51 care au rezistenţe interne la tensiunea de alimentare.Portul P4 asigură aceleaşi facilităţi de intrare/ ieşire ca şi porturile P0 - P3 şi, în plus, asigură funcţiunile alternative descrise în paragraful 3.2.2.Portul P5 este doar port de intrare iar terminalele sale sunt folosite şi ca intrări pentru cele 8 canale analogice.

3.2.8 Programarea memoriei EPROM interne

Microcontrolerul 87C552 conţine 8 Ko memorie EPROM internă. Pentru programarea ei se folosesc terminalele ALE/ /PROG pentru impulsurile de programare iar tensiunea de programare se conectează la intrarea /EA/ Vpp.Există mai multe operaţii ce pot fi realizate în cadrul programarii memoriei EPROM interne. Ele sunt selectabile prin configuraţii specifice pe terminalele P2.6, P2.7, P3.6 şi P3.7. Aceste operaţii, modul lor de selectare precum şi starea terminalelor care intervin în procesul de programare sunt prezentate în tab. 3.20.Fig. 3.47 prezintă configuraţia microcontrolerului 87C552 în scopul realizării programării. Frecvenţa tactului trebuie să fie doar de 4 - 6 MHz.Octeţii de programat sunt transmişi microcontrolerului prin intermediul portului P0 iar portul P1 şi liniile P2.0 - 4 ale portului P2 sunt utilizate pentru conectarea liniilor de adresă. Tensiunea de programare se conectează la terminalul /EA/ Vpp şi nu are voie să depăşească, nici măcar pentru o scurtă durată, valoarea maximă. În caz contrar este posibilă distrugerea circuitului. Impulsurile de programare se conectează la terminalul ALE/ /PROG şi trebuie să respecte cerinţele prezentate în fig. 3.48: 25 impulsuri, durata de minim 10 ms şi distanţa între 2 impulsuri de 100 ms +/- 10 %.

Page 72: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

211 Microcontrolere - 3 Operaţia RST /PSEN ALE/PROG /EA/Vpp P2.7 P2.6 P3.7

P3.6

Programare codVerificare codProgramare tabela de criptareProgramare bit 1 de blocareProgramare bit 2 de blocareCitire semnătură

1 0 * Vpp 1 0 1 11 0 1 1 0 0 1 11 0 * Vpp 1 0 1 0

1 0 * Vpp 1 1 1 1

1 0 * Vpp 1 1 0 0 1 0 1 1 0 0 0 0

Vpp = 12,75 V +/ - 0,25 VVDD = 5 V +/ - 0,5 V* = 25 impulsuri de programare conform fig. 3.48.

Tab. 3.20 Operaţiile ce pot fi realizate în procesul de programareal microcontrolerului 8xC552

Fig. 3.47 Comanda programării memoriei EPROM interne la microcontrolerul 8xC552

Fig. 3.49 prezintă configuraţia microcontrolerului în scopul realizării operaţiei de verificare a octeţilor programaţi. Portul P1 şi liniile P2.0 - 4 ale portului P2 sunt utilizate pentru conectarea liniilor de adresă iar octeţii se obţin la portul P0. Este necesară conectarea de rezistenţe externe între liniile portului P0 şi tensiunea de alimentare VDD.

4-6 MHz

1

0

1

0

1

1

12,75 V

impulsuri

+5 V

GND

RST

/PSEN

P2.7

P2.6

P3.7

P3.6

XTAL2

XTAL1

VDD

Octeţi deprogramat

A0-7

A8-12

P0.0-7

P1.0-7

P2.0-4

/EA / VPP

/ALE /PROG.

VDD

VSS

87C552

Page 73: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

3.1 - Microcontrolerul 80C51 212

Verificarea poate fi realizată doar dacă nu a fost programat bitul 2 de blocare. Dacă a fost programată tabela de criptare atunci datele obţinute sunt rezultatul unei operaţii de SAU-

NU EXCLUSIV (COINCIDENŢA) între datele programate şi cele din tabela de criptare.

Fig. 3.48 Impulsurile pentru programarea memoriei EPROM internela microcontrolerul 8xC552

Programarea tabelei de criptare este o facilitate care permite protecţia datelor programate contra citirii lor neautorizate. Programarea tabelei de criptare se realizează ca o programare obişnuită doar că se referă numai la locaţiile 00 - 1FH şi configuraţia de selectare de pe liniile P2.7, P2.6, P3.7 şi P3.6 diferă faţă de o programare normală. Datele care se vor obţine la operaţia de verificare vor fi criptate, ele vor fi rezultatul unei operaţii SAU-NU EXCLUSIV (COINCIDENŢA) între datele programate şi cele din tabela de criptare şi pentru decriptarea lor este necesară cunoaşterea datelor din tabela de criptare.

Tabela de criptare nu poate fi citită ceea ce înseamnă că doar cel care a programat tabela de criptare poate decripta datele obţinute la operaţia de verificare.

Fig. 3.49 Verificarea octeţilor programaţi la microcontrolerul 80C51

25 impulsuri

ALE / /PROG . . .

100 µs ± 10 %min 10 µs

ALE / /PROG

4-6 MHz

1

0

0

0

1

1

1

1

+5 V

GND

RST

/PSEN

P2.7

P2.6

P3.7

P3.6

XTAL2

XTAL1

VDD

Octeţiprogramaţi

A0-7

A8-12

P0.0-7

P1.0-7

P2.0-4

/EA / VPP

/ALE /PROG.

VDD

VSS

87C552

Page 74: CAP. 3 MICROCONTROLERE · Web viewAvantajul adresării memoriei prin intermediul registrelor R0-7 este acela că rezultă instrucţiuni scurte. Astfel pentru adresare de registru

213 Microcontrolere - 3

O altă facilitate constă în programarea biţilor 1 şi 2 de blocare. Procedura constă în aplicarea câte unei secvenţe de 25 impulsuri, conform fig. 3.48, în condiţiile respectării configuraţiilor de selectare de pe liniile P2.7, P2.6, P3.7 şi P3.6. Dacă este programat bitul 1 de blocare atunci sunt dezactivate programarea în continuare a octeţilor de cod şi a tabelei de criptare. Dacă este programat bitul 2 de blocare atunci este dezactivată verificarea în continuare a octeţilor programaţi.

Ştergerea memoriei EPROM interne se realizează prin expunerea circuitului la o sursă de lumină ultravioletă de 12000 mW/ cm2 pentru un timp de 20 - 39 minute. În urma operaţiei de ştergere, toate locaţiile din memoria EPROM vor conţine FFH.

Toate consideraţiile legate de: comanda memoriei externe, ciclurile maşină, modurile de lucru cu consum redus şi programarea, prezentate la microcontrolerul 80C51, rămân valabile şi la microcontrolerul 8xC552.