Sunteți pe pagina 1din 69

CAP.

3 MICROCONTROLERE

M
Tip

icrocontrolerele constituie n aceast period un domeniu deosebit de dinamic. Ele se impun din ce n ce mai mult n aplicaiile industriale. Exist mai multe familii de microcontrolere care s-au dezvoltat: 8400. 3300, PIC 16CXX, 80C51 etc. Dintre acestea autorul acestei cri s-a oprit asupra familiei 80C51, pe care o consider ca fiind cea mai rspndit. Familia 80C51 cuprinde mai multe microcontrolere prezentate n tab. 3.1. Memorie fix 0 4Ko ROM 4Ko EPROM 8Ko ROM 8Ko EPROM 8Ko ROM 8Ko EPROM 16Ko ROM 16Ko EPROM 16Ko ROM 16Ko EPROM 32Ko ROM 32Ko EPROM 0 8Ko ROM 8Ko EPROM 16Ko ROM 16Ko EPROM 32Ko ROM 32Ko EPROM 0 4Ko ROM 4Ko EPROM 16Ko ROM 16Ko EPROM 16Ko ROM 16Ko EPROM 32Ko ROM 32Ko EPROM RAM [O] 128 128 128 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 128 128 128 256 256 512 512 512 512 Frecven tact[MHz] 12 12 12 24 24 20 20 24 24 20 20 24 24 24 24 24 24 24 24 24 16 16 16 24 24 12 20 16 20 Caracteristici UART, 2numrtoare, 4 porturi

80C31 80C51 87C51 83(0)C51FA 87C51FA 83L51FA 87L51FA 83C51FB 87C51FB 83L51FB 87L51FB 83C51FC 87C51FC 80C32 80C52 87C52 80C54 87C54 80C58 87C58 80C451 83C451 87C451 83(0)C504 87C504 83C524 87C524 83(0)C528 87C528

UART mbuntit, PCA, 3 numrtoare, 4 porturi UART mbuntit, PCA, 3 numrtoare, 4 porturi, 3V UART mbuntit, PCA, 3 numrtoare, 4 porturi UART mbuntit, PCA, 3 numrtoare, 4 porturi UART mbuntit, PCA, 3 numrtoare, 4 porturi UART, 3 numrtoare, 4 porturi

UART, 3 numrtoare, 4 porturi UART, 3 numrtoare, 4 porturi UART, 2 numrtoare, 6-7 porturi UART, 2 numrtoare, 4 porturi UART, I2C, 3 numrtoare, 4 porturi, watchdog UART, I2C, 3 numrtoare, 4 porturi, watchdog

141 Microcontrolere - 3 80C550 0 83C550 4Ko ROM 87C550 4Ko EPROM 80C552 83C552 87C552 80CE558 83CE558 87CE558 80C562 83C562 80C575 83C575 87C575 83(0)C576 87C576 80C592 83C592 87C592 80CE598 83CE598 87CE598 80C652 83C652 87C652 83C654 87C654 83C750 87C750 83C748 87C748 83C749 87C749 83C751 87C751 83C752 87C752 80C851 83C851 0 8Ko ROM 8Ko EPROM 0 32Ko ROM 32Ko EPROM 0 8Ko ROM 0 8Ko ROM 8Ko EPROM 8Ko ROM 8Ko EPROM 0 16Ko ROM 16Ko EPROM 0 32Ko ROM 32Ko EPROM 0 8Ko ROM 8Ko EPROM 16Ko ROM 16Ko EPROM 1Ko ROM 1Ko EPROM 2Ko ROM 2Ko EPROM 2Ko ROM 2Ko EPROM 2Ko ROM 2Ko EPROM 2Ko ROM 2Ko EPROM 0 4Ko ROM

128 128 128 256 256 256 1Ko 1Ko 1Ko 256 256 256 256 256 256 256 512 512 512 512 512 512 256 256 256 256 256 64 64 64 64 64 64 64 64 64 64 128 128

16 16 16 24 24 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 24 24 24 24 20 40 40 16 16 16 16 16 16 16 16 16 16

UART, 2 numrtoare, 4 porturi, watchdog, 8 canale A/D 8 bii UART, I2C, 3 numrtoare, 6 porturi, watchdog, 2 PWM, 8 canale A/D 10 bii, numrtoare captare/comp. UART, I2C, 3 numrtoare, 6 porturi, watchdog, 2 PWM, 8 canale A/D 8 bii, numrtoare captare/comparare UART, 3 num., 6porturi, watchdog, 8 canale A/D 8 bii, num. captare/comp. UART, 3 numrt., PCA, 4 porturi, 4 comparat. analogice, siguran mrit idem 8xC575 + watchdog, convertor A/D 10 bii idem cu 8xC552 + CAN idem cu 8xC552 + CAN i fr I2C UART, I2C, 2 numrtoare, 4 porturi idem cu 8xC652 1 temporizor, 2 porturi 1 temporizor, 2 porturi, I2C 1temporizor, 2porturi, 1 PWM, 5 canale A/D 8 bii 1 temporizor, 2 porturi, I2C idem cu 8xC749 + I2C UART,2 num., 4 porturi, 256 octei EEPROM

83C852 83C055 87C055

3.1 - Microcontrolerul 80C51 142 2 numrtoare, 2 porturi, 2Ko 6Ko ROM 256 6 EEPROM, Smartcard Controller 3,5 porturi, 2 numrtoare, on16Ko ROM 256 12 screen display, 9 PWM, intrri 16Ko EPROM 256 12 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 aceeai structur intern i aceleai trsturi ca i corespondentele lor din tehnologia CMOS. Acestea sunt: 8031, 8032, 8051, 8052, 8031AH i 8051AH. Toate microcontrolerele din tabel sunt pe 8 bii. Recent, firma Philips Semiconductors a dezvoltat arhitectura XA (" eXtended Architecture ") pentru microcontrolere pe 16 bii compatibile cu familia 80C51. Microcontrolerele pe 16 bii realizate sunt prezentate n tab. 3.2. Tip XA-G1 XA-G2 XA-G3 Memoria fix 8Ko EPROM/ROM 16Ko EPROM/ROM RAM 512 512 Frecven tact[MHz] 30 30 Caracteristici 2 UART, 3 numrtoare, watchdog idem

32Ko EPROM/ROM 512 30 idem Tab. 3.2 Microcontrolerele pe 16 bii ale firmei Philips

3.1 Microcontrolerul 80C51 3.1.1 Caracteristici


80C51 este un microcontroler foarte rspndit, 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 octei memorie RAM, - include o unitate aritmetic i logic, - are 4 porturi de intrare/ ieire care pot fi utilizate ca porturi de uz general dar au i funciuni specifice, - poate adresa 64 Ko memorie extern de program i 64 Ko memorie extern de date, - are 2 contoare/ temporizatoare, independente, pe 16 bii, - include un port serial UART full duplex, - poate gestiona 5 surse de ntreruperi, cu 2 nivele de prioriti, - consum mic: 16 mA n modul normal, 3,7 mA n modul Idle i 50 A n modul Power Down.

143 Microcontrolere - 3

3.1.2 Configuraia terminalelor


Fig. 3.1 prezint configuraia terminalelor la microcontrolerul 80C51, grupate din punct de vedere funcional. 39-32 10 (11) P3.0 / RXD P0.0-7 / AD0-7 (43-36) 11 (13 P3.1 / TXD 12 (14) P3.2 / INT0 13 (15) P3.4 / INT1 1-8 14 8 (16) P3.5 / T0 P1.0-7 (2-9) 15 0 (17) P3.6 / T1 16 C (18) P3.7 / /WR 5 17 24-31 (19) P3.8 / /RD 1 P2.0-7 / A8-15 (24-31) 19 (21) XTAL1 30 18 ALE (33) (20) XTAL2 29 40 /PSEN (32) (44) V CC 31 /EA (35) 20 9 (22) V SS RST (10) Fig. 3.1 Configuraia terminalelor la microcontrolerul 80C51 Semnificaiile lor sunt: P0.0-7/ AD0-7: port bidirecional de intrare/ ieire, pe 8 bii, cu dren n gol; o ieire suport 8 sarcini TTL LS; rangurile care au nscrise 1 pot funciona ca intrri de mare impedan; n ciclurile n care se face acces la memorie este o magistral multiplexat ntre jumtatea mai puin semnificativ din magistrala de adrese i magistrala de date; n acest ultim caz emite 1 pe linie utiliznd rezistene interne la Vcc. P1.0-7: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; pentru a funciona ca intrri, trebuie ncrcat 1 n rangurile respective; o intrare comandat cu 0 va absorbi curent datorit rezistenei interne la Vcc. P2.0-7/ A8-15: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; n timpul acceselor la memoria extern genereaz jumtatea superioar din magistrala de adrese atunci cnd accesul memoriei externe se face cu adrese pe 16 bii. P3.0-7/ XXX: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; terminalele sale au i funciuni specifice: P3.0: RxD: intrare serial, P3.1: TxD: ieire 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 iniializare. ALE ("Address Latch Enable"): ieire folosit la demultiplexarea magistralei de adrese/

3.1 - Microcontrolerul 80C51 144 date; frecvena semnalului este egal cu 1/ 6 din frecvena 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 cnd 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, pn 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 obine tactul intern; frecvena 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 rmne 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 octei, - registrele cu funciuni 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. Memoria intern fix a fost implementat cu memorie ROM, are 4 Ko i ocup zona 0000 - 0FFFH din spaiul de adresare pentru memoria de program. Ea este adresat dac intrarea /EA = 1. Tot n aceast zon poate fi suprapus i memorie fix extern care va fi adresat dac /EA = 0. Pentru adrese superioare lui 0FFFH, va fi adresat memoria fix extern, indiferent de nivelul logic de la intrarea /EA. Memoria fix este folosit ca memorie de program. Memoria RAM intern are capacitatea de 128 octei i ocup zona 0000 - 00FFH din spaiul de adresare pentru memoria de date. Organizarea memoriei este dat n fig. 3.3.

145 Microcontrolere - 3 ntreruperi externe

Sistem de ntreruperi

4 ko ROM

1280 RAM

Registre cu funciuni speciale

CPU

Generator de tact

Logic de control a m agistralei

Porturi de I/E

Port serial

Contor Contor 0 1

P0 P1 P2 P3 T0 TxD RxD Fig. 3.2 Schema bloc a microcontrolerului 80C51 Fig. 3.3 Organizarea memoriei RAM interne la microcontrolerul 80C51 FF

T1

Data RAM

30 2F Bit_RAM 20 1F Bloc 3 18 17 Bloc 2 10 0F Bloc 1 08 07 Bloc 0 00 Zona 00 - 1FH este divizat n 4 blocuri de cte 8 octei, 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

3.1 - Microcontrolerul 80C51 146 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 iniializare, unitatea central, CPU, ncepe execuia de la adresa 0000 iar registrele R0-7 se suprapun peste Blocul 0. Stiva va fi iniializat la adresa 07H, adic n indicatorul de stiv, SP, se va ncrca valoarea 07H. La depunerea n stiv, SP va fi incrementat, spre deosebire de microprocesoare unde la depunerea n stiv SP este decrementat. Se recomand ncrcarea n SP a unei valori care s corespund unei locaii din zona Data RAM. Zona 00 - 1FH poate fi accesat direct, prin intermediul unei adrese pe 8 bii sau prin adresare de registru. De exemplu instruciunea DEC R5 va avea urmtorul 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 instruciunea INC @R0 va avea urmtorul 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 locaii din memoria RAM intern. Coninutul locaiei respective va fi incrementat. Avantajul adresrii memoriei prin intermediul registrelor R0-7 este acela c rezult instruciuni scurte. Astfel pentru adresare de registru sunt necesare doar 3 ranguri care se gsesc, mpreun cu codul instruciunii, 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 instruciunii. Zona 20H - 2FH din RAM-ul intern este denumit Bit RAM, ntruct fiecare din cei 128 bii poate fi adresat individual. Exist 2 modaliti de a adresa biii din aceast zon. Una folosete adresa lor: 00 - 7FH, cu 00 pentru bitul 0 de la locaia 20H i 7FH pentru bitul 7 de la locaia 2FH. Cealalt se refer la octeii 20H - 2FH. Astfel biii 00 - 07 pot fi adresai ca 20.0 - 20.7, biii 08 - 0FH ca 21.0 - 21.7 etc. De exemplu instruciunea CLR 20.0 va avea n al doilea octet al ei un cmp de 5 ranguri care specific octetul 20H i un cmp 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 funciuni speciale, SFR


Microcontrolerul 80C51 conine un grup de registre interne, cu funciuni speciale. Ele sunt adresabile n mod direct iar registrele ale cror 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 instruciunilor este A. B: este un registru cu rol predeterminat n instruciunile de nmulire i mprire. Pentru celelalte instruciuni, poate fi utilizat ca registru general. SP ("Stack Pointer"): este indicatorul de stiv. Este incrementat naintea unei depuneri n stiv prin intermediul instruciunilor CALL sau PUSH. Dup iniializare este ncrcat cu valoarea 07H deci stiva ncepe de la adresa 08H. Poate fi ncrcat, prin program, cu orice valoare.

147 Microcontrolere - 3 Registru Adres de bit Adres de b7 b6 b5 b4 b3 b2 b1 b0 registru B F7 F6 F5 F4 F3 F2 F1 F0 F0H ACC E7 E6 E5 E4 E3 E2 E1 E0 E0H PSW D7 D6 D5 D4 D3 D2 D1 D0 D0H IP BF BE BD BC BB BA B9 B8 B8H P3 B7 B6 B5 B4 B3 B2 B1 B0 B0H IE AF AE AD AC AB AA A9 A8 A8H P2 A7 A6 A5 A4 A3 A2 A1 A0 A0H SBUF 99H SCON 9F 9E 9D 9C 9B 9A 99 98 98H P1 97 96 95 94 93 92 91 90 90H TH1 8DH TH0 8CH TL1 8BH TL0 8AH TMOD 89H TCON 8F 8E 8D 8C 8B 8A 89 88 88H PCON 87H DPH 83H DPL 82H SP 81H P0 87 86 85 84 83 82 81 80 80H Tab. 3.3 Registrele cu funciuni speciale ale microcontrolerului 80C51 PSW ("Program Status Word"): este registrul de stare al programului. Conine indicatorii de condiii. Rangurile sale au urmtoarele semnificaii: PSW.0: P ("Parity"): indicator de paritate; va fi 1 dac numrul de 1 din acumulator este impar. PSW.1: rezervat. PSW.2: OV ("Overflow"): indicator de depire; se folosete atunci cnd se lucreaz cu operanzi cu semn i indic apariia unui transport/ mprumut n/ din rangul de semn ceea ce nseamn depirea domeniului de valori care poate fi ncrcat ntr-un registru pe 8 bii. 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 0 0 1 1 RS0 R0-7 se suprapune peste

0 Blocul 0 (00H - 07H) 1 Blocul 1 (08H - 0FH) 0 Blocul 2 (10H - 17H) 1 Blocul 3 (18H - 1FH) Tab. 3.4 Selecia blocului de memorie care se suprapune peste registrele RS1, RS0 la microcontrolerul 80C51 PSW.5: F0: indicator la dispoziia utilizatorului. PSW.6: AC ("Auxiliary Carry"): indicatorul de transport sau mprumut auxiliar; indic un transport sau un mprumut ntre cei doi digii ai rezultatului unei operaii de adunare sau scdere ntre 2 operanzi n cod BCD. PSW.7: CY ("Carry"): indicatorul de transport sau mprumut; indic apariia unui

3.1 - Microcontrolerul 80C51 148 transport/ mprumut din/ n rangul cel mai semnificativ al acumulatorului ca urmare a unei operaii de adunare/ scdere, ceea ce nseamn depirea capacitii registrului. DPH, DPL ("Data Pointer High, Low"): sunt dou registre pe cte 8 bii care alctuiesc mpreun DPTR ("Data Pointer Register"), DPH fiind jumtatea superioar din DPTR iar DPL fiind jumtatea inferioar din DPTR. DPTR este folosit la adresarea indirect a unei locaii din memoria extern i poate fi accesat ca registru pe 16 bii sau ca 2 registre pe 8 bii. TH0, TL0 ("Timer 0 Counter"): sunt dou numrtoare pe cte 8 bii care alctuiesc mpreun un numrtor pe 16 bii pentru contorul/ temporizatorul 0. TH1, TL1 ("Timer 1 Counter"): sunt dou numrtoare pe cte 8 bii care alctuiesc mpreun un numrtor pe 16 bii pentru contorul/ temporizatorul 1. SBUF ("Serial Data Buffer"): este un tampon folosit la transferul serie i este fizic alctuit din 2 registre: un tampon pentru transmisie i unul pentru recepie. Transmisia este iniiat prin scrierea unui octet n SBUF. La citire, se primete un octet de la tamponul pentru recepie. P0, P1, P2, P3: sunt registrele ce corespund porturilor P0, P1, P2 respectiv P3. Dac un port este ieire i se scrie 1 sau 0 n un rang din registrele P0 - P3, terminalul corespunztor al portului va avea nivelul logic 1 sau 0. IP, IE, TMOD, TCON, SCON, PCON: sunt registre de control care vor fi prezentate pe msur ce se descrie rolul lor. Microcontrolerul 80C51 mai dispune de 2 registre, n CPU, care nu sunt cu funciuni speciale i nu pot fi adresate de programator. Acestea sunt: PC ("Program Counter"): este un numrtor pe 16 bii care este incrementat la fiecare citire de octet din memoria de program; el conine adresa locaiei de memorie n care se afl urmtorul octet din instruciune. IR ("Instruction Register"): este un registru pe 8 bii n care se depune octetul din instruciune adus n vederea decodificrii sale.

3.1.3.3 Contoarele/ temporizatoarele 0, 1


Microcontrolerul 80C51 dispune de 2 contoare/ temporizatoare implementate cu dou numrtoare independente, pe 16 bii, notate cu TIMER 0 i TIMER 1. TIMER 0 este alctuit din numrtoarele TH0 i TL0 iar TIMER 1 este alctuit din numrtoarele TH1 i TL1. Exist 2 surse de tact pentru fiecare din cele dou contoare/ temporizatoare. Dac funcia ndeplinit este cea de temporizator atunci sursa este tactul microcontrolerului, f OSC divizat la 12 deci numrtorul va fi incrementat n fiecare ciclu main. Dac funcia 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 main i un front cztor al acestui semnal va incrementa numrtorul. Frontul cztor este detectat dac ntr-un ciclu main se citete valoarea 1 la terminalul Ti i n ciclul urmtor se citete valoarea 0 la acelai terminal Ti. Numrtorul este decrementat n faza S3P1 a ciclului main urmtor celor dou n care s-a detectat frontul cztor la terminalul Ti. ntruct sunt necesare 2 cicluri main pentru o detectare, rezult c frecvena maxim de numrare este de 1/ 24 din frecvena tactului. Funcionarea contoarelor TIMER 0 i TIMER 1 este controlat de 2 registre: TMOD

149 Microcontrolere - 3 ("Timer Mode Register"), fig. 3.4 i TCON ("Timer Control Register"), fig. 3.5. 7
GATE

6
C/ /T

5
M1

4
M0

3
GATE

2
C/ /T

1
M1

0
M0

TMOD.0-1: M0, M1: fixeaz modul de lucru pentru TIMER 0 conform tab. 3.5. M1 0 0 1 1 M0 0 1 0 1 Mod

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

TMOD.2: C/ /T: stabilete sursa tactului pentru numrare: 0: sursa tactului este fOSC divizat la 12, 1: sursa tactului este T0. TMOD.3: GATE: controleaz pornirea i oprirea numrrii: 0: pornirea/ oprirea este controlat de rangul TR0, 1: numrarea 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 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON.0: IT0: stabilete dac ntreruperea extern care sosete pe intrarea /INTO va fi luat n considerare pe frontul cztor, 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 cnd 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 numrrii la TIMER 0: 1 pornete numrarea iar 0 o oprete. TCON.5: TF0: indicator de depire a numrtorului; este poziionat la depirea capacitii numrtorului 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 cnd 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 numrarii 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 numrarea. Dac TRi = 1, numrarea pornete iar dac TRi = 0, numrarea se oprete. Dac GATE = 1 atunci numrarea pornete dac TRi & /INTi = 1 i se oprete dac TRi = 0 sau /INTi = 0. n acest caz controlul numrrii poate fi realizat extern, prin /INTi. O aplicaie este aceea c se pot astfel msura durate de semnale externe. Selectarea tactului este realizat de TMOD.2, respectiv TMOD.6, C/ /T. Dac C/ /T = 0

3.1 - Microcontrolerul 80C51 150 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 numrrii i selectarea tactului este prezentat n fig. 3.6. S5 este un semnal obinut n timpul fiecrui ciclu main i indic starea a 5-a din ciclu. fOSC / 12

T0 sau T1

Detector

CLOCK pentru TIMER 0 sau TIMER1

C / /T /INT0 sau /INT1 S5 D T Q

GATE TR0 sau TR1

Fig. 3.6 Controlul numrrii i selectarea tactului la contoarele/ temporizatoarele microcontrolerului 80C51

Exist 4 moduri de lucru pentru TIMER 0 i 1, selectabile prin rangurile corespunztoare M1 i M0. Modul 0 TIMER 0 i 1 sunt configurate ca numrtoare pe 13 bii. TL0 i TL1 sunt numrtoare alctuite din 5 ranguri, cele mai puin semnificative iar TH0 i TH1 sunt numrtoare pe 8 bii. Indicatorii de depire TF0 i TF1 sunt poziionai atunci cnd numrtorul corespunztor conine valoarea maxim i este incrementat, anulndu-se astfel coninutul su. Semnalul care apare la ieirea de depire a lui TIMER 1 este surs pentru tactul serial. Fig. 3.7 prezint pe TIMER 0 i 1 n modul 0.

151 Microcontrolere - 3 Fig. 3.7 TIMER 0 i 1 n modul 0 la microcontrolerul 80C51 TL0 5 bii TH0 8 bii

CLOCK

TF0

CLOCK

TL1 5 bii

TH1 8 bii

TF1

Tact serial Modul 1 Este identic cu modul 0, cu excepia faptului c numrtoarele sunt pe 16 bii. 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

CLOCK

TL0 8 bii

TH0 8 bii

TF0

CLOCK

TL1 8 bii

TH1 8 bii

TF1

Tact serial Modul 2 TIMER 0 i 1 sunt configurate ca numrtoare pe 8 bii cu auto-ncrcare. TL0 i TL1 sunt folosite ca numrtoare iar TH0 i TH1 sunt folosite ca registre pentru pstrarea constantei care se va ncrca. Semnalul de depire generat de TL0 sau TL1 va provoca prencrcarea acestora i numrarea va continua de la aceast valoare. TH0 i TH1 sunt ncrcate prin program. Indicatorii TF0 i TF1 sunt poziionai de semnalele de depire de la numrtoarele TL0, respectiv TL1. Semnalul de depire generat de numrtorul TL1 este surs pentru tactul serial. Fig. 3.9 prezint pe TIMER 0 i 1 n modul 2. Modul 3 Acest mod poate fi cerut doar pentru TIMER 0. Dac i se cere lui TIMER 1, acesta nu va numra (se obine acelai efect ca i cnd TR1 = 0). TIMER 0 n modul 3 lucreaz ca dou numrtoare independente pe 8 bii. TL0 folosete rangurile de control ale lui TIMER 0, adic C/ /T, GATE, TR0 i /INT0 i comand pe TF0 iar TH0 folosete pe TR1 i comand pe TF1. Acest mod este util n aplicaii n care se cere un numrtor suplimentar. TIMER 0 furnizeaz 2 contoare pe 8 bii iar TIMER 1 poate fi folosit n modurile 0, 1 sau 2 fr a putea, ns, s poziioneze pe TF1 deci nu va putea s genereze cerere de ntrerupere. Fig. 3.10 prezint pe TIMER 0 n modul 3.

3.1 - Microcontrolerul 80C51 152 Fig. 3.9 TIMER 0 i 1 n modul 2 la microcontrolerul 80C51 CLOCK TL0 TF0

TH0

CLOCK

TL1

TF1

TH1

Tact serial

Fig. 3.10 TIMER 0 n modul 3 la microcontrolerul 80C51 CLOCK TL0 TF0

fOSC / 12 TR1

TH0

TF1

3.1.3.4 Interfaa serial


Microcontrolerul 80C51 posed o interfa serial UART ("Universal Asynchronous Receiver/ Transmitter"), full duplex, ceea ce nseamn c poate emite i recepiona simultan. Blocul de recepie posed un dublu tampon, alctuit dintr-un registru de deplasare i un registru tampon, ceea ce nseamn c se realizeaz recepia unui caracter simultan cu predarea caracterului recepionat anterior ctre CPU, rezultnd astfel ctig de timp. Totui, dac un caracter nu este preluat de unitatea central n timp ce se ncheie asamblarea caracterului urmtor, primul se va pierde. Interfaa serie poate lucra n modul I/ E (intrare/ ieire) 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 bii. Caracterul pe 11 bii este alctuit dintr-un bit de START, 8 bii de date, un al 9-lea bit programabil i bitul de STOP. Schema bloc a interfeei seriale este prezentat n fig. 3.11. fTIM fOSC / 2 Magistral ntrerupere intern Logic control transmisie Logic control Registru recepie SBUF SBUF ( (R) T) deplasare

MUX MUX SCON

TxD SMOD RxD

153 Microcontrolere - 3

Fig. 3.11 Interfaa serial la microcontrolerul 80C51 Aceasta cuprinde logica de control pentru transmisie i recepie, registrul de control SCON ("Serial Control Register"), registrele tampon SBUF ("Serial Buffer Register") i rangul SMOD. Registrul SCON, fig. 3.12, conine bii de control pentru a specifica modurile de operare, activarea/ dezactivarea recepiei de date, memorarea celui de-al 9-lea bit de date i starea interfeei seriale. Fiecare rang poate fi adresat individual. 7 6 5 4 3 2 1 0 SM0 SM1 SM2 REN TB8 RB8 TI RI SCON.0: RI: este un indicator activat de interfaa serial atunci cnd a terminat de asamblat un caracter i l poate oferi unitii centrale; mpreuna cu rangul TI constituie intrri pentru o poart SAU, a crei ieire poate fi folosit ca cerere de ntrerupere; tergerea indicatorului se face doar prin program. SCON.1: TI: indicator activat de interfaa serial atunci cnd a terminat de transmis un caracter i poate primi altul de la unitatea central; mpreun cu rangul RI constituie intrri pentru o poart SAU a crei ieire 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 recepionat dintr-un caracter pe 11 bii, folosit n modurile 2 i 3; n modul 1 va reine bitul STOP dac rangul SM2 = 0

3.1 - Microcontrolerul 80C51 154 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 ntrun caracter pe 11 bii, folosit n modurile 2 i 3; este poziionat prin program. SCON.4: REN: trebuie s fie setat pentru ca recepia 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 bii/ caracter) i al 9-lea bit de date este 1 atunci data recepionat este acceptat i este ncrcat 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 rmn nemodificate; dac SM2 = 1 n modul 1 (cu 10 bii/ caracter), se va ncrca 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 interfeei seriale, conform tab. 3.6. SM0 SM1 0 0 1 1 0 1 0 1 Mod Descriere Rata de transfer

0 I/ E extins fOSC/ 12 1 UART cu 10 bii Variabil 2 UART cu 11 bii fOSC/ 32 sau fOSC/ 64 3 UART cu 11 bii Variabil Tab. 3.6 Modul de lucru al interfeei seriale a microcontrolerului 80C51 Fig. 3.12 Structura registrului SCON al microcontrolerului 80C51

Registrul SBUF este tamponul pentru date. Dei i corespunde o singur adres, este alctuit din 2 registre: unul pentru transmisie i unul pentru recepie. Corespunztor, SBUF poate fi specificat n instruciuni ca registru surs sau ca registru destinaie. Transmisia este anclanat prin nscrierea datei n SBUF iar la recepie, 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 interfeei seriale. Modul 0 Este modul numit i I/ E extins n care se transfer date pe 8 bii, 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 iniiat prin scrierea n registrul SBUF. Dup un ciclu main de la ncheierea scrierii n SBUF, apare cel mai puin semnificativ bit al datei la pinul RxD. Dup 2 stri de la apariia acestui bit, este activat, la 0, tactul pe linia TxD. O period complet a tactului corespunde unui ciclu main (ncepe i se termin n a 2-a faz a strii S3). Dup transferul bitului cel mai semnificativ al datei, logica de transmisie este activat i este setat indicatorul TI. Recepia este activat atunci cnd REN = 1 i RI = 0. Aceasta se va realiza prin program. Tactul de pe linia TxD se va activa, la 0, dup 9 stri dup ce REN = 1 i RI = 0. O perioad a tactului de pe linia TxD corespunde unui ciclu main. Data este citit de pe linia RxD n registrul tampon de citire imediat naintea tranziiei 0 -> 1 a tactului. Dup ce preluarea caracterului s-a ncheiat, el este transferat n SBUF, logica de recepie este iniializat i se activeaz indicatorul RI. Rata de transfer n modul 0 este: R = fOSC/ 12.

155 Microcontrolere - 3 Fig. 3.13 prezint diagrama transferului n modul 0. Fig. 3.13 Transferul n modul 0 al interfeei seriale a microcontrolerului 80C51 Modul 1 Este un mod UART n care se transfer caractere pe 10 bii: 1 bit de START, 8 bii de date, primul fiind cel mai puin semnificativ i 1 bit de STOP. La recepie, bitul de STOP se ncarc n RB8. Fig. 3.14 prezint schema bloc a interfeei seriale n modul 1 iar fig. 3.15 prezint diagrama transferului n modul 1. Rata de transfer este determinat de frecvena semnalului de la ieirea de depire a lui TIMER 1, fTIM. Dac TIMER 1 lucreaz n modul 0 sau 1 atunci rata de transfer este: S1 CLK TRANSMISIE RxD (DATE) TxD (Tact) RxD (DATE) TxD (Tact) 2SMOD R = ------------ * fTIM. 32 Dac TIMER 1 lucreaz n modul 2 atunci rata de transfer este: 2SMOD fOSC R = ------------- * --------------------------------; (TH1) este constanta de prencrcare. 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 anclanat de o scriere n tamponul SBUF. Tactul fOSC sau fTIM divizat la 2 sau nu de SMOD, este divizat la 16 de un numrtor. Transmisia ncepe prin plasarea bitului de START la nceputul ciclului main care urmeaz dup ce numrtorul a executat un ciclu complet, dup ncheierea scrierii n RECEPIE S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1

3.1 - Microcontrolerul 80C51 156 Magistrala intern TB8 fTIM Scrie n SBUF D SMOD= =1 Start Deplasare Logic control transm isie Date Tact TI Transfer ntrerupere de la interfaa serie /S /R Q SBUF (T) TxD

SMOD= /2 =0

Num rtor / 16 Num rtor / 16

Tact 7 8 9 Start

RI

Transfer Logic control recepie Deplasare

Detector tranziie 1 0

789 Detector bit RxD Registru deplasare recepie

SBUF (R) Citete SBUF Magistrala intern Fig. 3.14 Schema bloc a interfeei seriale n modul 1 la microcontrolerul 80C51

157 Microcontrolere - 3 SBUF. n continuare, la fiecare ciclu complet al numrtorului se emite un bit de date. Dup ce se emite i bitul de STOP, se activeaz indicatorul TI. Recepia se realizeaz pe terminalul RxD i este anclanat de o tranziie 1 -> 0 pe acest terminal. Aceast tranziie corespunde bitului de START i numrtorul mod 16 ncepe s numere. Un ciclu complet al numrtorului corespunde unui bit serie recepionat. n consecin TIMER 1 trebuie s fie ncrcat cu o astfel de valoare nct perioada numrtorului mod 16 s fie egal cu rata de recepie.
TRANSMISIE Tact Scrie n SBUF /Transfer Date Deplasare TxD TI RECEPIE Tact RxD 7, 8, 9 Deplasare RI
START START

D0 D1 D2

D3

D4

D5 D6

D7 TB8 STOP

D0 D1 D2

D3

D4

D5 D6

D7 RB8 STOP

Fig. 3.15 Transferul n modul 1 al interfeei seriale a microcontrolerului 80C51 Dup ce numrtorul ncepe s numere, n strile 7, 8 i 9 ale acestuia, logica de recepie citete linia RxD i dac gsete cel puin 2 valori 0, consider bitul de START ca fiind valid, l preia i l introduce n registrul de deplasare din tamponul de recepie. n caz

3.1 - Microcontrolerul 80C51 158 contrar consider c a fost un impuls de START fals i revine n starea iniial n care ateapt o nou tranziie 1 -> 0 pe linia RxD. Dup preluarea bitului de START, sunt preluai n mod analog i biii de date ce sosesc de pe linia serial. Un bit este citit n strile 7, 8 i 9 ale numrtorului i valoarea preluat este cea care corespunde la cel puin 2 din 3 citiri. n acest fel s-a implementat un mecanism de rejecie a zgomotelor. n timpul bitului de STOP, n starea 10 a numrtorului, data din registrul de deplasare este ncrcat n SBUF, bitul de STOP este ncrcat n RB8, circuitele de recepie sunt iniializate i se activeaz indicatorul RI. ncrcarea datei n SBUF, a bitului de STOP n RB8 i activarea indicatorului RI se realizeaz doar dac n momentul respectiv sunt ndeplinite condiiile: - RI = 0 i - SM2 = 0 sau SM2 = 1 i bitul STOP = 1. Dac vreuna din aceste condiii nu este ndeplinit atunci data este ignorat i SBUF, RB8 i RI rmn nemodificate. Modul 2 Este un mod UART cu 11 bii/ caracter: 1 bit de START, 8 bii de date, 1 bit programabil i 1 bit de STOP. La transmisie, bitul al 9-lea este TB8 i poate fi programat iar la recepie, bitul al 9-lea este ncrcat n RB8. Rata de transfer este: 2SMOD R = -------------- * fOSC 64 Transmisia i recepia se realizeaz ntocmai ca i n modul 1, utiliznd aceleai resurse hardware i acelai mecanism de rejecie a zgomotelor. Apare o singur diferen, legat de al 9-lea bit de date. Astfel la transmisie, dup bitul de START i cei 8 bii de date, emii n aceeai 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 ncrcat n TB8, apoi se emite bitul de STOP i se activeaz indicatorul TI. La recepie, dup preluarea bitului de START i a biilor 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, ncrcarea celui de-al 9-lea bit n RB8 i activarea indicatorului RI au loc dac sunt ndeplinite, la momentul respectiv, condiiile: - RI = 0 i - SM2 = 0 sau SM2 = 1 i bitul al 9-lea = 1. Dac vreuna din aceste condiii nu este ndeplinit atunci data este ignorat i SBUF, RB8 i RI rmn nemodificate. Modul 3 Este un mod UART cu 11 bii/ caracter care difer de modul 2 doar prin rata de transfer care aici, depinde de fTIM. Astfel: 2SMOD R = -------------- * fTIM, 32 dac TIMER 1 lucreaz n modul 0 sau 1 i 2SMOD fOSC R = ------------- * ------------------------------, 32 12 * (256 - (TH1)) dac TIMER 1 lucreaz n modul 2.

159 Microcontrolere - 3 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 obinute din TIMER 1. Rata de transfer fOSC [MHz] SMOD TIMER 1 C//T Mod Const. de prencrcare

Mod O:max. 1,67 Mbii/s 20 x x x x Mod 2:max. 625 Kbii/s 20 1 x x x Mod1,3:max.104,2 Kbii/s 20 1 0 2 FFH 19,2 Kbii/s 11,059 1 0 2 FDH 9,6 Kbii/s 11,059 0 0 2 FDH 4,8 Kbii/s 11,059 0 0 2 FAH 2,4 Kbii/s 11,059 0 0 2 F4H 1,2 Kbii/s 11,059 0 0 2 E8H 110 bii/s 12 0 0 1 D4H 110 bii/s 6 0 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 existena 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 ...

TxD 80C51 MASTER

RxD 80C51 SLAVE

RxD 80C51 SLAVE

...

RxD 80C51 SLAVE

n faza iniial, toate microcontrolerele slave au SM2 = 1 i ateapt 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 ntruct la acestea SM2 = 1. Dup ce microcontrolerul master a emis toate datele, el va emite un cod de final, predeterminat, care va avea ca efect setarea lui SM2 de ctre microcontrolerul slave care a fost selectat. n acest fel s-a revenit n starea iniial n care toate microcontrolerele slave au SM2 = 1 i ateapt s fie selectate.

3.1 - Microcontrolerul 80C51 160

3.1.3.5 Sistemul de ntreruperi


Microcontrolerul 80C51 posed 5 surse pentru ntreruperi: 2 ntreruperi externe generate la intrrile /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 intrri ntr-o poart SAU a crei ieire este cererea de ntrerupere de la interfaa 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 corespunztor trebuie s fie 1 iar pentru a o dezactiva, bitul corespunztor trebuie s fie 0. 7 6 5 4 3 2 1 0 EA 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 corespunztor este 1. Fig. 3.17 Structura registrului IE al microcontrolerului 80C51 Rolul registrului IP este acela de a aloca prioriti. Exist 2 nivele de prioritate: sczut i ridicat. Fiecrei surse i se poate aloca , n mod independent, oricare nivel de prioritate. Fiecrei ntreruperi i corespunde un rang: 1 n rangul respectiv nseamn prioritate ridicat iar 0 n rangul respectiv nseamn prioritate sczut. Dac apar simultan 2 cereri de ntrerupere, de prioriti diferite, va fi tratat cererea de prioritate mare. Dac apar simultan 2 sau mai multe cereri de aceeai 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 sczut 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 aceeai prioritate. 7 6 5 4 3 2 1 0 PS PT1 PX1 PT0 PX0 IP.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

161 Microcontrolere - 3 ntreruperile sunt citite n timpul lui S5P2 al fiecrui ciclu main. Apoi are loc o testare a ceea ce s-a citit n timpul urmtorului ciclu main. Dac vreunul din indicatorii de ntrerupere a fost gsit activ i dac ntreruperea respectiv este validat atunci sistemul de ntreruperi va genera o instruciune LCALL ("Long CALL") ADR, unde ADR depinde de tipul ntreruperii, conform tab. 3.8. Tip de ntrerupere Adres

IE0 0003H TF0 000BH IE1 0013H TF1 001BH RI + TI 0023H Tab. 3.8 Adresele corespunztoare ntreruperilor la microcontrolerul 80C51 Instruciunea LCALL nu se va genera n una din urmtoarele situaii: 1. o ntrerupere de prioritate egal sau mai mare este deja n tratare; 2. ciclul curent de testare nu este ultimul ciclu al instruciunii curente sau 3. instruciunea curent este RETI sau o instruciune ce scrie n registrele IE sau IP. Condiia 2. asigur luarea n considerare a unei cereri de ntrerupere doar la sfiritul unei instruciuni iar condiia 3. asigur luarea n considerare a unei cereri de ntrerupere doar dup ce se execut nc o instruciune dup RETI sau dup cea care scrie n registrele IE sau IP. Ciclul de testare este repetat n fiecare ciclu main iar valorile testate sunt cele citite n S5P2 a ciclului anterior. Dac o ntrerupere este activ dar nu a fost considerat datorit uneia din condiiile anterioare, ea nu este memorat. Ea va fi luat n considerare doar dac mai rmne activ dup ndeprtarea condiiei de blocare. Fig. 3.19 prezint timpul de rspuns la o cerere de ntrerupere.
S5 P2

C1 S6

C2 ...

C3 ...

C4 ...

C5 ...

..........

ntreruperile sunt activate

Citirea ntreruperilor

ntreruperile sunt testate

LCALL

Rutina de tratare

Fig. 3.19 Tratarea ntreruperilor la microcontrolerul 80C51 n ciclul C1 se fac citirile, n ciclul C2 se fac testrile, n ciclurile C3 i C4 se genereaz instruciunea LCALL iar ciclul C5 corespunde primei instruciuni din rutina de tratare. Dac o ntrerupere de prioritate mai mare dect cea tratat se activeaz nainte de S5P2 a ciclului main C3 atunci n C4 va fi testat iar n C5 i C6 se va genera instruciunea LCALL pentru ea, fr a mai ncepe execuia rutinei de tratare a ntreruperii de prioritate mai mic. Din fig. 3.19 rezult c timpul minim de rspuns din momentul activrii unei cereri de ntrerupere i pn la tratarea ei este de 3 cicluri main. Valoarea maxim a acestui timp

3.1 - Microcontrolerul 80C51 162 depinde de condiiile care mpiedic generarea instruciunii LCALL. Dac este ndeplinit condiia 1. atunci timpul depinde de durata rutinei de tratare n timpul creia a aprut noua cerere. Dac este ndeplinit condiia 2. atunci timpul suplimentar nu poate fi mai mare dect 3 cicluri main deoarece cele mai lungi instruciuni (MUL i DIV) au 4 cicluri main. Dac este ndeplinit condiia 3 atunci timpul suplimentar nu poate fi mai mare dect 5 cicluri main (1 eventual ciclu pentru ncheierea instruciunii n curs i 4 cicluri n cazul cel mai defavorabil cnd instruciunea ce urmeaz este MUL sau DIV). Deci dac exist o singur surs de ntrerupere atunci timpul de rspuns este ntre 3 i 8 cicluri main. Instruciunea LCALL va depune coninutul lui PC n stiv i va ncrca PC cu adresa de salt. De asemenea, n unele cazuri, are loc tergerea, prin hardware, a indicatorului ce corespunde ntreruperii tratate. Astfel sunt teri 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. Execuia rutinei de tratare a cererii de ntrerupere se ncheie la ntlnirea instruciunii RETI. Aceasta ncarc n PC adresa de revenire i iniializeaz sistemul de ntreruperi. Rutina se poate ncheia i cu instruciunea RET dar aceasta nu va iniializa 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 tranziie 1 -> 0 pe una din intrrile /INT0 sau /INT1 va poziiona 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 condiie rezult din faptul c terminalele /INT0 i /INT1 sunt citite doar o singur dat n fiecare ciclu main. Dac cererea extern este activ pe nivel, ea trebuie s rmn activ pn la nceperea execuiei rutinei de tratare, dup care trebuie dezactivat nainte de ncheierea rutinei pentru a evita o nou tratare a ei. Ca o aplicaie a tratrii ntreruperilor se va prezenta modalitatea de execuie a unui program n mod pas cu pas. S-a artat c o cerere de ntrerupere nu va fi luat n considerare dac apare n timpul tratrii unei ntreruperi de aceeai prioritate i nici dac apare n timpul instruciunii RETI, caz n care este necesar execuia a nc unei instruciuni. 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 instruciune din programul principal. Pe aceast trstur 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 secvena: JNB P3.2,$ - se ateapt pn cnd /INT0 devine 1; JB P3.2,$ - se ateapt pn cnd /INT0 devine 0; RETI - ntoarcere n programul principal pentru execuia a nc unei instruciuni. Dac /INT0 este n starea 0, CPU va intra n rutina de tratare a ntreruperii externe 0 i va rmne acolo pn 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 instruciune i va reintra n rutina de tratare dup care totul se repet.

3.1.3.6 Iniializarea microcontrolerului

163 Microcontrolere - 3 Microcontrolerul 80C51 este iniializat prin aplicarea unui nivel 1 la intrarea RST, n timp ce oscilatorul funcioneaz i meninerea acestui nivel cel puin 24 perioade de tact. Semnalul extern RST este asincron n raport cu tactul microcontrolerului. El este testat n faza S5P2 a fiecrui ciclu main. Dup ce microcontrolerul sesizeaz activarea lui RST, terminalele i menin activitile 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 Coninut

PC, DPTR 0000 ACC,B, PSW, TMOD, TCON, TH0, TL0, TH1, TL1, SCON 00 SP 07 P0 - P3 FFH(intrri) SBUF nedeterminat IP xxx00000B IE 0xx00000B PCON 0xxx0000B Tab. 3.9 Coninutul registrelor dup iniializarea microcontrolerului 80C51 Coninutul memoriei RAM interne nu este afectat de RST. La cuplarea tensiunii de alimentare, coninutul 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, acionnd asupra a cte unui rang din registrul PCON ("Power Control Register"), fig. 3.20. 7 6 5 4 3 2 1 0
SMOD GF1 GF0 PD IDL

PCON.0: IDL: 1 n acest rang instaleaz modul Idle. PCON.1: PD: 1 n acest rang instaleaz modul Power - Down. PCON.2, 3: GF0, GF1: ranguri pentru uz general. PCON.7: SMOD: utilizat la interfaa serial. Fig. 3.20 Structura registrului PCON al microcontrolerului 80C51 Modul Idle Microcontrolerul intr n acest mod dup activarea, de ctre o instruciune, a rangului IDL. Oscilatorul, interfaa serial, contoarele/ temporizatoarele i sistemul de ntreruperi continu s funcioneze dar tactul nu mai ajunge la CPU. ntregul CPU i pstreaz starea. Terminalele de la porturi pstreaz nivelul logic avut la instalarea modului Idle iar ALE i /PSEN vor avea nivel 1. Ieirea din modul Idle se poate face pe 2 ci. Una const ntr-o ntrerupere validat. Ea va fi luat n considerare i, dup instruciunea RETI, microcontrolerul va executa instruciunea ce urmeaz dup cea care a instalat modul Idle. Rangurile GF0 i GF1 pot fi folosite pentru a indica dac ntreruperea a aprut n modul normal sau n modul Idle. O alt cale const n activarea liniei RST cel puin 24 perioade de tact. Rangul IDL va fi ters i microcontrolerul va continua execuia de la instruciunea urmtoare celeia care a

3.1 - Microcontrolerul 80C51 164 instalat modul Idle. ntruct algoritmul intern de iniializare dureaz aproximativ 3 cicluri main, se recomand inserarea de 3 instruciuni NOP dup cea care a instalat modul Idle. Modul Power - Down Este instalat de o instruciune ce activeaz rangul PD. Oscilatorul se oprete, ca urmare starea ntregului microcontroler rmne nemodificat (microcontrolerul "nghea"). Terminalele porturilor oglindesc starea rangurilor corespondente iar ALE i /PSEN vor avea nivel 0. Singura ieire din acest mod este prin activarea intrrii 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 ieirea 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 bii, 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 ieire. Porturile sunt de uz general, fiecare rang poate fi programat independent ca intrare sau ieire i, n plus, porturile P0, P2 i P3 au i funciuni 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 jumtatea mai puin semnificativ din magistrala de adrese i cea de date iar liniile portului P2 vor transfera jumtatea mai semnificativ a magistralei de adrese. Atunci cnd se aduce un cod de instruciune din memoria de program extern, liniile porturilor P0 i P2 vor fi comandate de PC iar atunci cnd 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 bii, atunci adresa se obine pe liniile portului P0 care va fi comandat de registrul R0 sau R1. Rangurile portului P3 au funciuni specifice individuale conform tab. 3.10. Fig. 3.21 prezint schema cte unui rang din fiecare port.

165 Microcontrolere - 3 V CC Citire din registru Magistal intern Scrie n registru D Q P0.X C /Q Citire term inal Citire din registru Magistal intern Scrie n registru D Q P1.X C /Q Citire term inal Citire din registru Magistal intern Scrie n registru D Q P2.X C /Q Citire term inal Citire din registru Magistal intern Scrie n registru D Q P3.X C /Q Funciune specific de ieire Adrese Adrese / Date Control pFET P0.X nFET Term inal

V CC SA P1.X Term inal

Control

V CC SA P2.X Term inal

V CC SA P3.X Term inal

Citire Funciune specific de intrare term inal Fig. 3.21 Schema porturilor P0 - P3 ale microcontrolerului 80C51 Fiecare rang este alctuit dintr-un bistabil de tip D n care se nscrie informaia, la sosirea

3.1 - Microcontrolerul 80C51 166 comenzii de scriere i al crei coninut poate fi citit prin intermediul unei pori cu 3 stri. Restul circuitelor sunt specifice fiecrui port. Rang Funcia specific

P3.0 RxD: intrare serial P3.1 TxD: ieire serial P3.2 /INT0: ntrerupere extern 0 P3.3 /INT1: ntrerupere extern 1 P3.4 T0: intrare de numrare pentru contorul 0 P3.5 T1: intrare de numrare pentru contorul 1 P3.6 /WR: semnal de comand pentru scrierea n memoria de date extern P3.7 /RD: semnal de comand pentru citirea din memoria de date extern Tab. 3.10 Funciunile specifice ale rangurilor portului P3 al microcontrolerului 80C51 Portul 0 Etajul de ieire al portului 0 este alctuit din 2 tranzistoare FET. Tranzistorul pFET va lucra doar atunci cnd rangul respectiv emite 1 n timpul acceselor la memoria extern iar n toate celelalte situaii este blocat, ceea ce nseamn c atunci cnd portul P0 este folosit ca port de ieire, liniile sale sunt cu dren n gol. n timpul acceselor la memoria extern, n registrul P0 se nscrie configuraia FFH. Pentru a folosi rangurile portului P0 ca intrri, este necesar nscrierea n prealabil n rangurile corespunztoare din registrul intern P0, a valorii 1. Aceasta va duce la blocarea tranzistorului nFET i, ntruct i tranzistorul pFET este blocat, terminalul respectiv va fi flotant i poate fi comandat din exterior ca o intrare de mare impedan. Portul 1 Spre deosebire de portul 0 care este bidirecional, portul 1 este un port cvasi-bidirecional. Termenul cvasi-bidirecional se refer la un port care prezint pe fiecare rang cte o rezisten la tensiunea de alimentare atunci cnd este comandat ca intrare. P1 este un port de uz general, fr funcii specifice. Sarcina activ, SA, din etajul de ieire asigur o funcionare performant a portului. Astfel valoarea sa se modific n funcie de coninutul rangului corespunztor. Fig. 3.22 prezint schema sarcinii active pentru microcontrolerul 80C51 (varianta CMOS) iar fig. 3.23 prezint o schem echivalent n care rezistena R1 corespunde tranzistorului pFET1, R2 corespunde lui pFET2 i R3 corespunde lui pFET3. Schema echivalent din fig. 3.23a corespunde rangului configurat ca ieire, cu valoarea 1. Schema echivalent din fig. 3.23b corespunde rangului configurat ca ieire, cu valoarea 0. Schema echivalent din fig. 3.23c corespunde tranziiei 0 -> 1 a ieirii n care se activeaz un circuit de accelerare. Acesta este tranzistorul pFET1 care se deschide timp de 2 perioade de tact dup tranziia 0 -> 1 de la ieirea rangului din registrul intern i va provoca generarea unui curent suplimentar care va determina creterea vitezei de comutare 0 -> 1 la ieirea corespunztoare. Pentru utilizarea portului ca intrare este necesar nscrierea n prealabil a valorilor logice 1 n rangurile corespunztoare. Dac la intrare se aduce nivel 0 atunci rezistena R2 se deconecteaz de la Vcc iar rezistena 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

167 Microcontrolere - 3
ntrziere 2 perioade de tact V CC V CC V CC

pFET1

pFET2

pFET3 PX.Y Terminal

Ieirea rangului

nFET

Citete terminalul

Fig. 3.22 Schema sarcinii active pentru microcontrolerul 80C51


V CC R1= 500 R2= 10k R3= 100k IOH 500 V CC R1= R2= 10k R3= 100k

IOL a. a. V CC R1= 500 R2= 10k R3= 100k b.

c.

Fig. 3.23 Schema echivalent a sarcinii active din porturile microcontrolerului 80C51 atunci rezistena R2 se reconecteaz la Vcc iar rezistena intern va fi fixat de valoarea de 10 k a acesteia. Portul 2 Este de asemenea un port cvasi-bidirecional. Sarcina activ are aceeai schem ca la portul 1. n timpul acceselor la memoria extern, va transfera jumtatea mai semnificativ

3.1 - Microcontrolerul 80C51 168 a magistralei de adrese. n acest timp, coninutul 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 coninutul registrului intern P2. Dac accesul la memoria extern de date se face doar pe 8 bii, pe terminalele portului P2 va apare coninutul 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 P3 Este de asemenea un port cvasi-bidirecional. Este port de uz general dar are i funciuni specifice. Atunci cnd funcioneaz ca port de uz general are aceleai caracteristici ca portul P1. Pentru a utiliza funciunile sale specifice, este necesar programarea n prealabil a valorii logice 1 n rangurile corespunztoare din registrul intern P3. n acest fel poarta I-NU, fig. 3.21, va fi comandat de cealalt intrare, corespunztoare funciunii specifice. n cazul unei funciuni de ieire (TxD, /RD, /WR), terminalul portului este comandat de linia "Funciune specific de ieire" iar n cazul unei funciuni de intrare (RxD, /INT0, /INT1, T0, T1), ieirea porii conectat la terminal, notat cu "Funciune specific de intrare", este conectat n interiorul microcontrolerului n conformitate cu funciunea specific realizat. n cazul rangurilor care sunt intrri este necesar blocarea tranzistorului nFET ceea ce se realizeaz nscriind n prealabil nivelul logic 1 n rangul corespunztor din registrul intern. Scrierea ntr-un port se realizeaz n felul urmtor: noua valoare ajunge la registrul intern corespunztor n S6P2 a ciclului final al instruciunii care provoac scrierea. ntruct nscrierea n registru se face doar ntr-o faz P1, noile valori vor apare la ieirile portului doar n S1P1 a ciclului main urmtor. Ieirile portului P0 suport o ncrcare de 8 sarcini TTL LS iar ieirile porturilor P1, P2 i P3 suport o ncrcare de cte 4 sarcini TTL LS. La iniializare toate porturile sunt configurate ca intrri, cu valorile FFH nscrise n registrele interne. Dup cum se observ din fig. 3.21, la fiecare port exist facilitatea de a citi att terminalul ct i coninutul rangului corespunztor din registrul intern. Instruciunile care citesc coninutul rangului i nu terminalul sunt cele care citesc o valoare, eventual o modific i apoi o rescriu n registrul intern. Ele sunt denumite instruciuni cu "citire - modificare scriere". n continuare sunt prezentate aceste instruciuni, operandul destinaie 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, SET PX.Y : seteaz rangul Y din portul X. Facilitatea de a citi coninutul rangului din registrul intern n locul terminalului permite

169 Microcontrolere - 3 evitarea obinerii de valori false datorate unei conectri greite a terminalului. De exemplu, dac s-ar putea citi doar terminalul atunci s-ar obine o valoare fals n urmtoarea situaie: terminalul se conecteaz n baza unui tranzistor npn, cu emitorul legat la mas i comand funcionarea 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 main


Execuia unei instruciuni se desfoar n cadrul unor cicluri main. Un ciclu main este divizat n 6 stri, notate cu S1 - S6, o stare fiind alctuit din 2 faze, notate cu P1 i P2. Deci un ciclu main ncepe n starea 1, faza 1, notat cu S1P1 i se ncheie n starea 6, faza 2, notat cu S6P2. Operaiile aritmetice i logice se desfoar n timpul fazei 1 iar transferurile ntre registre se desfoar n faza a 2-a. Considernd un tact cu frecvena de 12 MHz, rezult c durata unui ciclu main este de 1 ms. Tactul se obine 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 Execuia unei instruciuni depinde de tipul acesteia. Astfel exist mai multe cazuri: 22-35 pF

XTAL2 XTAL1

XTAL2 XTAL1

XTAL2 XTAL1

22-35 pF

Sem nal extern

Sem nal extern

a.

b.

c.

1. instruciune pe 1 octet i 1 ciclu: Execuia instruciunii ncepe n S1 cnd se aduce codul i se memoreaz n registrul IR. Numrtorul 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. instruciune pe 2 octei si 1 ciclu: n S1 se aduce codul instruciunii, PC este incrementat iar n S4 se mai citete un octet i PC este din nou incrementat. 3. instruciune pe 1 octet i 2 cicluri care nu face referire la RAM-ul extern: n S1 al primului ciclu se aduce codul instruciunii, PC este incrementat iar n S4 al aceluiai ciclu, S1 i S4 ale ciclului urmtor se citesc octei care nu sunt luai n considerare de CPU iar PC nu se modific. 4. instruciune pe 1 octet i 2 cicluri care se refer la RAM-ul extern: n S1 al primului ciclu se aduce codul instruciunii, PC este incrementat, n S4 se aduce un nou cod dar care nu este considerat de CPU, PC nu este incrementat iar n ciclul urmtor nu se mai execut aduceri de cod ci accesul la RAM-ul extern.

3.1 - Microcontrolerul 80C51 170 Cele mai multe instruciuni se execut n 1 sau 2 cicluri main. Doar instruciunile MUL i DIV necesit 4 cicluri main. Semnalele microcontrolerului implicate n transferurile din cadrul ciclurilor main sunt urmtoarele: ALE: ieire a microcontrolerului care se folosete la demultiplexarea magistralei de adrese/ date; semnalul va ncrca adresa ntr-un registru extern (este garantat stabilitatea adresei pe frontul su posterior deci ncrcarea trebuie s se fac de ctre acest front); se activeaz de 2 ori ntr-un ciclu, cu excepia unui ciclu de acces la RAM-ul extern cnd lipsete prima activare; deci dac nu se execut accese la RAM-ul extern atunci ALE poate fi folosit ca semnal cu frecvena egal cu 1/ 6 din frecvena 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 excepia cazului cnd ciclul se refer la RAM-ul extern cnd nu se activeaz; de asemenea nu se activeaz atunci cnd microcontrolerul execut programe din memoria de program intern. /EA: intrare prin care i se comunic microcontrolerului unde se gsete programul; dac este 1 atunci microcontrolerul va executa din memoria de program intern (pn cnd PC ajunge la valoarea 0FFFH, n continuare execuia realizndu-se din memoria de program extern); dac este 0 atunci execuia va avea loc din memoria de program extern. /RD, /WR: sunt ieiri de comand pentru citire, respectiv scriere din/ n memoria de date extern. Fig. 3.25 prezint ciclurile main ale microcontrolerului 80C51. Se observ c ntr-un ciclu de aducere cod de instruciune pe liniile porturilor P0 i P2 apare coninutul numrtorului de program, PC. ntr-un ciclu n care se face acces la memoria de date extern pe liniile portului P0 apare coninutul registrului DPL sau Ri, i = 0, 1, iar pe liniile portului P2 apare coninutul registrului DPH dac adresa este pe 16 bii sau coninutul registrului intern P2 dac adresa este pe 8 bii.

3.1.3.10 Comanda memoriei externe


Din ciclurile main prezentate n paragraful anterior se observ c microcontrolerul activeaz semnale diferite funcie de tipul memoriei externe implicate n transfer. Astfel dac se citete 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 dei dispune doar de 16 linii de adres: memoria de 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 jumtatea superioar a magistralei de adrese iar liniile portului P0 vor constitui o magistral multiplexat de adrese/ date. Pentru demultiplexarea ei este necesar memorarea

171 Microcontrolere - 3
p1

S1

p2

S2

S3

S4

S5

S6

S1

S2

CLK ALE /PSEN P0 P2


COD IN PCH OUT PCL OUT COD IN PCH OUT PCL OUT COD IN PCH OUT PCL OUT

Ciclu deaduce recod deinstrucie S4 CLK ALE /PSEN /RD P0 P2


COD IN PCH OUT DPL sau RI OUT DPH sau P2 OUT DATA IN PCL OUT PCH OUT

S5

S6

S1

S2

S3

S4

S5

S6

Ciclu decitiredin m e m oria dedatee xte rn S4 CLK ALE /PSEN /WR P0 P2


COD IN PCH OUT DPL sau RI OUT DPH sau P2 OUT DATA IN PCL OUT PCH OUT

S5

S6

S1

S2

S3

S4

S5

S6

Ciclu descrie ren m e m oria dedatee xte rn S4 S5


P0, P1 P2, P3

S6

S1

S2

S3

S4

S5
P0, P1 P2, P3

S6

CLK Citire intrri Ieiri Tact serial (m od 0)

Data veche

Data nou Citire PxD

Citire RxD Ciclu detransfe r de porturile

Fig. 3.25 Ciclurile main ale microcontrolerului 80C51

3.1 - Microcontrolerul 80C51 172 informaiei de adres ntr-un registru extern, la comanda frontului posterior al semnalului ALE. Fig. 3.26 prezint modalitile de conectarea a memoriei externe de program i de date, P0.0-7 /EA 8 0 C 5 1 R E G STB A8-15 /OE /CE D0-7 A0-7

ALE P2.0-7 /PSEN

Mem oria de program extern (64 ko)

/RD /WR

D0-7

Mem oria de date extern A8-15 (64 ko) A0-7

/CS /WE /OE fiecare de cte 64 Ko. Fig. 3.26 Conectarea memoriei externe de program i de date la microcontrolerul 80C51 Atunci cnd memoria extern implicat n transfer este cea de program, adresa ce apare pe liniile porturilor P0 i P2 este generat de numrtorul de program, PC. Accesul la memoria extern de date se face prin intermediul registrului DPTR, de ctre instruciunile MOVX @DPTR,A i MOVX A,@DPTR. Prima instruciune transfer coninutul acumulatorului n memorie la adresa indicat de DPTR iar a doua instruciune transfer coninutul locaiei cu adresa indicat de DPTR n A. n timpul transferurilor cu

173 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 instruciunea: MOVX @Ri,A sau MOVX A,@Ri. Coninutul registrelor R0 sau R1 va fi adresa ce apare pe liniile portului P0. Aceast adres este doar pe 8 bii i va permite accesul ntr-o pagin de 256 octei. Coninutul registrului P2 va apare pe liniile portului P2 i poate fi folosit pentru paginare, asigurnd plasarea paginii de 256 octei n spaiul de adresare de 64 Ko al microcontrolerului. n cazul aplicaiilor ce necesit mai puin memorie de program i de date dect 64 Ko, nu mai este necesar ca cele 2 blocuri de memorie s se suprapun n spaiul de adresare al microcontrolerului iar selecia lor se va face utiliznd i linii mai semnificative din magistrala de adrese. Dac se dorete rularea de programe din memoria extern de date atunci este necesar suprapunerea unui spatiu de memorie extern de program cu un spaiu de memorie extern de date ceea ce se poate realiza cu o combinaie a semnalelor /PSEN i /RD, fig. 3.27. ntruct semnalul /PSEN se activeaz mai repede dect semnalul /RD este necesar ca memoria extern de date din care se execut programe, s fie suficient de rapid pentru a rspunde cerinelor semnalului /PSEN. Memoria extern de date din care se dorete execuia de programe trebuie s fie plasat n spaiul de adresare al microcontrolerului, ntr-o zon diferit de cea care corespunde att memoriei externe de program ct i memoriei externe de date. Dac ntregul program ce se execut se obine din memoria extern, atunci intrarea /EA trebuie s fie conectat la 0.

P0.0-7 R E G ALE STB

D0-7

8 0 C 5 1

A0-7 Memoria extern

P2.0-7 / PSEN /RD /WR

A8-15 /CS /OE /WE

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

3.1.3.11 Programarea microcontrolerului

3.1 - Microcontrolerul 80C51 174 Se va ncepe cu prezentarea celor 6 moduri de adresare. Adresarea direct Utiliznd adresarea direct, operandul este specificat printr-o adres pe 8 bii n cadrul instruciunii. Se folosete doar pentru adresarea memoriei RAM interne i a registrelor cu funciuni speciale. Exemplu: MOV A,09H. Adresarea indirect n cadrul instruciunii se specific un registru care conine adresa operandului. Dac adresa este pe 16 bii atunci registrul este DPTR iar dac adresa este pe 8 bii atunci registrul este R0, R1 sau SP. Exemplu: ADD A,@Ri Adresarea de registru Este folosit pentru adresarea unui operand aflat n unul din registrele R0 - R7. Instruciunile care utilizeaz acest mod de adresare au un cod eficient ntruct pentru adresarea unui registru sunt necesari doar 3 bii deci se elimin un octet de adres. Adresarea implicit Este folosit de instruciuni 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 instruciunii, 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 cutare din memoria de program. Un registru de baz de 16 bii, DPTR sau PC, indic baza tabelei iar acumulatorul indic intrarea n tabel. Adresa intrrii n tabel se obine adunnd coninutul acumulatorului cu cel al registrului de baz. Exemplu: MOVC A,@A + DPTR. Adresarea indexat se folosete i la instruciunile de salt cu selecie. Adresa destinaie a unei instruciuni de salt se obine adunnd coninutul registrului de baz cu cel al acumulatorului. Exemplu: JMP @A + DPTR. n continuare vor fi prezentate n form sintetic, n tab. 3.11, instruciunile microcontrolerului 80C51. Notaiile folosite au urmatoarele semnificaii: Rn: unul din registrele R0-7 din blocul selectat; @Ri: locaie din memoria RAM specificat indirect prin intermediul registrului Ri,i= 0,1; direct: adres pe 8 bii a unei locaii din memoria RAM intern sau a unuia din registrele SFR; #data: constant pe 8 bii folosit n adresarea imediat; #data16: constant pe 16 bii inclus n instruciune; adr16: adres pe 16 bii care specific o locaie care se afl oriunde n spaiul de 64 Ko al memoriei externe de program;

175 Microcontrolere - 3 adr11: adres pe 11 bii care specific o locaie care se afl n aceeai pagin de 2 Ko ca i primul octet al instruciunii urmtoare; rel: deplasament cu semn pe 8 bii; acoper domeniul de la -128 la +127 relativ la primul octet al instruciunii urmtoare celeia care folosete pe rel; bit: octet care indic bitul din memoria RAM intern sau din registrul SFR implicat n instruciune; (X): coninutul unui registru, locaie de memorie sau bit, specificate prin X; ((X)): coninutul locaiei de memorie a crei adres se afla n registrul X; rrr: specific, n binar, registrul Rn. <>: nu este egal Mnemonic Instruciuni aritmetice ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data INC A INC Rn INC direct INC @Ri DEC A DEC Rn Descriere Adun registrul la acumulator (Rn) + (A) -> A Adun octetul direct la acumulator (direct) + (A) -> A Adun octetul indirect la acumulator ((Ri)) + (A) -> A Adun octetul imediat la acumulator data + (A) -> A Adun registrul la acumulator i Carry (Rn) + (A) + (Cy) -> A Adun octetul direct la acum. i Carry (direct) + (A) + (Cy) -> A Adun octetul indirect la acum. i Carry ((Ri)) + (A) + (Cy) -> A Adun octetul imediat la acum. i Carry data + (A) + (Cy) -> A Scade registrul din acum. cu mprumut (A) - (Rn) - (Cy) -> A Scade oct. direct din acum. cu mprumut (A) - (direct) - (Cy) -> A Scade oct. ind. din acum. cu mprumut (A) - ((Ri)) - (Cy) -> A Scade oct. imed. din acum. cu mprumut (A) - data - (Cy) -> A Incrementeaz acumulatorul (A) + 1 -> A Incrementeaz registrul (Rn) + 1 -> Rn Incrementeaz octetul direct (direct) + 1 -> direct Incrementeaz octetul indirect ((Ri)) + 1 -> Ri Decrementeaz acumulatorul (A) - 1 -> A Decrementeaz registrul Cod main 00101rrr 00100101 direct 0010011i 00100100 data 00111rrr 00110101 direct 0011011i 00110100 data 10011rrr 10010101 direct 1001011i 10010100 data 00000100 00001rrr 00000101 direct 0000011i 00010100 00011rrr Nr. cicluri 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

3.1 - Microcontrolerul 80C51 176 DEC direct DEC @Ri INC DPTR MUL AB DIV AB DA A Instruciuni logice ANL A,Rn ANL A,direct ANL direct,A ANL A,@Ri ANL A,#data ANL direct,#data ORL A,Rn ORL A,direct ORL direct,A ORL A,@Ri ORL A,#data ORL direct,#data XRL A,Rn XRL A,direct XRL direct,A XRL A,@Ri XRL A,#data (Rn) - 1 -> Rn Decrementeaz octetul direct (direct) - 1 -> direct Decrementeaz octetul indirect ((Ri)) - 1 -> Ri Incrementeaz registrul DPTR (DPTR) + 1 -> DPTR nmulete A cu B (A) * (B) -> B;A, 0 -> OV dac (A) * (B) < 255 mparte A la B (A) : (B) -> A - ct; B - rest, mprirea la 0 seteaz OV Ajusteaz acum. dup o op. zecimal I ntre acumulator i registru (A) & (Rn) -> A I ntre acumulator i octet direct (A) & (direct) -> A idem I ntre acumulator i octet indirect (A) & ((Ri)) -> A I ntre acumulator i data imediat (A) & data -> A I ntre octet direct i data imediat (direct) & data -> direct SAU ntre acumulator i registru (A) V (Rn) -> A SAU ntre acumulator i octet direct (A) V (direct) -> A idem SAU ntre acumulator i octet indirect (A) V ((Ri)) -> A SAU ntre acumulator i data imediat (A) V data -> A SAU ntre octet direct i data imediat (direct) V data -> direct SAU-EXCL. ntre acumulator i registru (A) (Rn) -> A SAU-EXCL. ntre acum. i octet direct (A) (direct) -> A idem SAU-EXCL.ntre acum. i octet indirect (A) ((Ri)) -> A SAU-EXCL. ntre acum. i data imediat (A) data -> A 00010101 direct 0001011i 10100011 10100100 10000100 11010100 01011rrr 01010101 direct 01010010 0101011i 01010100 data 01010011 direct data 01001rrr 01000101 direct 01000010 0100011i 01000100 data 01000011 direct data 01101rrr 01100101 direct 01100010 0110011i 01100100 data 1 1 2 4 4 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1

177 Microcontrolere - 3 XRL direct,#data SAU-EXCL. ntre oct. dir. i data imed. (direct) data -> direct CLR A CPL A RL A RLC A RR A RRC A SWAP A Instruciuni MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,@Ri MOV direct,#data MOV @Ri,A MOV @Ri,direct de terge acumulatorul 0 -> A Complementeaz acumulatorul (/A) -> A Rotete acumulatorul la stnga (A.i) -> A.i+1 ptr. i = 0 - 6, (A.7) -> A.0 Rotete acum. la stnga prin Carry (A.i) -> A.i+1 ptr. i = 0 - 6, (Cy) -> A.0, (A.7) -> Cy Rotete acumulatorul la dreapta (A.i+1) -> A.i ptr. i = 0 - 6, (A.0) -> A.7 Rotete acum. la dreapta prin Carry (A.i+1) -> A.i ptr. i = 0 - 6, (Cy) -> A.7, (A.0) -> Cy Interschimb acumulatorul (A.7 - 4) <-> (A.3 - 0) transfer Transfer registrul n acumulator (Rn) -> A Transfer octetul direct n acumulator (direct) -> A Transfer octetul indirect n acumulator ((Ri)) -> A Transfer data imediat n acumulator data -> A Transfer acumulatorul n registru (A) -> Rn Transfer octetul direct n registru (direct) -> Rn Transfer data imediat n registru data -> Rn Transfer acumulatorul n octet direct (A) -> direct Transfer registrul n octet direct (Rn) -> direct Transfer octet direct2 n octet direct1 (direct2) -> direct1 Transfer octetul indirect n octet direct ((Ri)) -> direct Transfer data imediat n octet direct data -> direct Transfer acumulatorul n octet indirect (A) -> (Ri) Transfer octetul direct n octet indirect

01100011 direct data 11100100 11110100 00100011 00110011 00000011 00010011 11000100 11101rrr 11100101 direct 1110011i 01110100 data 11111rrr 10101rrr direct 01111rrr 11110101 direct 10001rrr direct 10000101 direct2 direct1 1000011i direct 01110101 direct data 1111011i 1010011i

2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 2 1 2

MOV @Ri,#data MOV DPTR,#data16


MOVC A,@A+DPTR

MOVC A,@A+PC MOVX A,@Ri MOVX A,DPTR MOVX @Ri,A MOVX DPTR,A PUSH direct POP direct XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri Instruciuni la nivel CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C,bit ANL C,/bit

3.1 - Microcontrolerul 80C51 178 direct -> (Ri) direct Transfer data imediat n octet indirect 0111011i 1 data -> (Ri) data Transfer data imediat n reg. DPTR 10010000 2 data16 -> DPTR data16 H data16 L Tr. octetul din mem. de pr. ext. n acum. 10010011 2 ((DPTR) + (A)) -> A Tr. octetul din mem. de pr. ext. n acum. 10000011 2 ((PC) + (A)) -> A Transfer octet din RAM extern n acum. 1110001i 2 ((Ri)) -> A Transfer octet din RAM extern n acum. 11100000 2 ((DPTR)) -> A Transfer acumulatorul n RAM extern 1111001i 2 (A) -> (Ri) Transfer acumulatorul n RAM extern 11110000 2 (A) -> ((DPTR)) Depune octetul direct n stiv 11000000 2 (SP) + 1 -> SP, direct (direct) -> (SP) Citete octetul direct din stiv 11010000 2 ((SP)) -> (direct), direct (SP) - 1-> (SP) Interschimb acumulatorul cu registrul 11001rrr 1 (A) <-> (Rn) Interschimb acumulatorul cu oct. direct 11000101 1 (A) <-> (direct) direct Interschimb acumulatorul cu octet ind. 1100011i 1 (A) <-> (Ri) Interschimb acumulatorul cu octet ind. 1101011i 1 (A.3-0) <-> (Ri).3-0 de bit terge Carry 11000011 1 0 -> Cy terge bit 11000010 1 0 -> bit Seteaz Carry 11010011 1 1 -> Cy Seteaz bit 11010010 1 1 -> bit Complementeaz Carry 10110011 1 (/Cy) -> Cy Complementeaz bit 10110010 1 (/bit) -> bit bit I ntre Carry i bit 10000010 2 (Cy) & (bit) -> Cy bit I ntre Carry i bit negat 10110000 2

179 Microcontrolere - 3 ORL C,bit ORL C,/bit MOV C,bit MOV bit,C Instruciuni de salt AJMP adr11 LJMP adr16 SJMP rel JMP @A+DPTR JZ rel JNZ rel JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel CJNE A,direct,rel (Cy) & (/bit) -> Cy SAU ntre Carry i bit (Cy) V (bit) -> Cy SAU ntre Carry i bit negat (Cy) V (/bit) -> Cy Transfer bit n Carry (bit) -> Cy Transfer Carry n bit (Cy) -> bit Salt absolut n pagina curent (PC) + 2 -> PC adr11 -> PC.10-0 Salt absolut lung adr16 -> PC Salt relativ scurt (PC) + 2 + rel -> PC Salt cu selecie (DPTR) + (A) -> PC Salt dac acumulatorul este 0 dac (A) = 0 atunci (PC) + 2 + rel -> PC Salt dac acumulatorul nu este 0 dac (A)<> 0 atunci (PC) + 2 + rel -> PC Salt dac Carry este 0 dac (Cy)= 0 atunci (PC) + 2 + rel -> PC Salt dac Carry nu este 0 dac (Cy)<>0 atunci (PC)+ 2 + rel -> PC Salt dac bitul direct este 1 dac (bit)= 1 atunci (PC) + 3 + rel -> PC bit 01110010 bit 10100000 bit 10100010 bit 10010010 bit
a10a9a80000 1 a7a6 ... a0

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

00000010 a15 ... a8 a7 .... a0 10000000 rel 01110011 01100000 rel 01110000 rel

CJNE A,#data,rel

01000000 rel 01010000 rel 00100000 bit rel Salt dac bitul direct este 0 00110000 dac (bit) = 0 atunci (PC) + 2 + rel -> bit PC rel Salt dac bitul direct este 1 i anul. bitul 00010000 dac (bit) = 1 atunci bit (PC) + 3 + rel -> PC i 0 -> bit rel Compar octetul direct cu acumulatorul 10110101 i salt dac nu sunt egale direct dac (A) <> (direct) atunci rel (PC) + 3 + rel -> PC dac (A) < (direct) atunci 1 -> Cy, altfel 0 -> Cy Compar data imediat cu acumulatorul 10110100 i salt dac nu sunt egale direct dac (A) <> data atunci rel (PC) + 3 + rel -> PC dac (A) < data atunci 1 -> Cy,

3.1 - Microcontrolerul 80C51 180 altfel 0 -> Cy Compar data imediat cu registrul i salt 10111rrr dac nu sunt egale direct dac (Rn) <> data atunci rel (PC) + 3 + rel -> PC dac (Rn) < data atunci 1 -> Cy, altfel 0 -> Cy CJNE @Ri,#data,rel Compar data imediat cu octetul 1011011i indirect i salt dac nu sunt egale direct dac ((Ri)) <> data atunci rel (PC) + 3 + rel -> PC dac ((Ri)) < data atunci 1 -> Cy, altfel 0 -> Cy DJNZ Rn,rel Decrementeaz reg. i salt dac nu este 0 11011rrr (Rn) - 1 -> Rn dac (Rn)<>0 atunci (PC)+ 2 + rel -> PC DJNZ direct,rel Decr. octetul direct i salt dac nu este 0 11010101 (direct) - 1 -> direct direct dac (direct)<>0 atunci (PC)+2+rel->PC rel Instruciuni de lucru cu subrutinele a10a9a81000 ACALL adr11 Apel de subrutin n pagina curent 1 (PC) + 2 -> PC, (SP) + 1 -> SP a7a6 ... a0 (PC.7-0) -> (SP), (SP) + 1 -> SP (PC.15-8) -> (SP), adr11 -> PC.10-0 LCALL adr16 Apel lung de subrutin 00010010 (PC) + 2 -> PC, (SP) + 1 -> SP a15 ... a8 (PC.7-0) -> (SP), (SP) + 1 -> SP a7 ... a0 (PC.15-8) -> (SP), adr16 -> PC RET Revenire din subrutin 00100010 ((SP)) -> PC.15-8, (SP) - 1 -> SP, ((SP)) -> PC.7-0, (SP) - 1 -> SP RETI Revenire din subr. de tratare a unei ntr. 00110010 ((SP)) -> PC.15-8, (SP) - 1 -> SP, ((SP)) -> PC.7-0, (SP) - 1 -> SP NOP Nici o operaie 00000000 Tab. 3.11 Instruciunile microcontroelrului 80C51 CJNE Rn,#data,rel 2

2 2

2 2 1

n continuare vor fi prezentate, n tab. 3.12, instruciunile care afecteaz indicatorii de condiii. S-a fcut referire doar la indicatorii CY, OV i AC. Bitul de paritate este afectat la fiecare modificare a acumulatorului. Indicatorii mai pot fi modificai i prin adresare direct asupra lui PSW i prin instruciuni la nivel de bit. Instruciuni ADD ADDC SUBB MUL CY x x x 0 OV x x x x AC x x x

181 Microcontrolere - 3 DIV 0 x DA x RRC x RLC x SETB C 1 CLR C 0 CPL C x ANL C,bit x ANL C,/bit x ORL C,bit x ORL C,/bit x MOV C,bit x CJNE x Tab. 3.12 Instruciunile microcontrolerului 80C51 care afecteaz indicatorii de condiii

3.2 Microcontrolerele 8xC552 3.2.1 Caracteristici


Microcontrolerele 8xC552 sunt considerate ca fcnd parte din familia microcontrolerului 80C51 ntruct pstreaz toate trsturile acestuia, adugnd o serie de faciliti utile n aplicaii industriale n timp real. Microcontrolerele 8xC552 sunt: - 80C552: fr 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;

3.1 - Microcontrolerul 80C51 182 - 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 octei memorie RAM intern, mprit n 2 jumti: prima jumtate este adresabil direct sau indirect iar a doua jumtate care se suprapune peste registrele cu funciuni speciale, este adresabil doar indirect; - registre cu funciuni speciale, SFR, situate n zona de adrese 80H - FFH, suprapus peste a doua jumtate 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 funcie de watchdog; - convertor analog/ digital pe 10 bii, cu 8 intrri multiplexate; - 5 porturi de intrare/ ieire pe 8 bii plus un port de intrare pe 8 bii; - capabil de a genera 2 ieiri, independente, cu durate programabile; - dispune de acelai set de instruciuni ca i 80C51; - frecvena maxim a tactului poate fi 16 sau 24 MHz; - se pstreaz cele 2 moduri de lucru cu consum redus: modul Idle i modul Power Down, cu aceleai trasturi ca i la microcontrolerul 80C51.

3.2.2 Configuraia 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 configuraia terminalelor. Numrul din dreptul fiecrui semnal reprezint terminalul la care se gsete ntr-o capsul de tip LCC. Semnificaiile terminalelor sunt: P0.0-7/ AD0-7: port bidirecional de intrare/ ieire, pe 8 bii, cu dren n gol; n timpul acceselor la memoria extern este magistral multiplexat ntre jumtatea mai puin semnificativ a magistralei de adrese i magistrala de date; rangurile care au 1 nscris pot fi configurate ca intrri de mare impedan; primete datele n timpul programrii memoriei de program interne i genereaz datele n timpul verificrii.

183 Microcontrolere - 3 35 XTAL1 34 XTAL2 49 /EA / VPP 48 ALE / /PROG 47 /PSEN 3 STADC 60 AVSS 61 AVDD 59 AVREF+ 58 AVREF4 /PWM0 5 /PWM1 62-68,1 P5.0-7 / ADC0-7 P4.0-7 / CMSR0-5 7-14 CMT0-1 15 RST 6 /EW 2 VDD 36, 37 VSS

57-50 16 17 18 19 20 21 22 23 39-46 24 25 26 27 28 29 30 31 P0.0-7 / AD0-7 P1.0 / CT0I P1.1 / CT1I P1.2 / CT2I P1.3 / CT3I P1.4 / T2 P1.5 / RT2 P1.6 / SCL P1.7 / SDL P2.0-7 / A8-15 P3.0 / RxD P3.1 / TxD P3.2 / /INT0 P3.3 / /INT1 P3.4 / T0 P3.5 / T1 P3.6 / /WR P3.7 / /RD

8 x C 5 5 2

Fig. 3.28 Configuraia terminalelor la microcontrolerele 8xC552 P1.0-7/ XXX: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la V DD pentru rangurile 0 - 5 i cu dren n gol pentru rangurile 6 i 7; are i funcia de a conecta octetul mai puin semnificativ de adres la programarea i verificarea memoriei de program interne; terminalele sale au i funciuni specifice: P1.0 -3: CT0I - CT3I: intrri pentru comanda captrii la contorul T2; P1.4: T2: intrare extern pentru contorul T2; P1.5: RT2: intrare extern de iniializare a contorului T2; P1.6: SCL: tact serial pentru magistrala I2C; P1.7: SDL: data serial pentru magistrala I 2C. P2.0-7/ A8-15: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la VDD; n timpul acceselor la memoria extern precum i la programarea i verificarea memoriei interne de program, transfer jumtatea mai puin semnificativ a adresei. P3.0-7/ XXX: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la VDD; terminalele sale au i funciuni specifice, identice cu cele de la microcontrolerul 80C51. P4.0-7/ XXX: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la VDD; terminalele sale au i funciuni specifice care sunt: P4.0-5: CMSR0-5: ieiri setate/ resetate la operaia de comparare atunci cnd se ntlnete egalitate. P4.6-7: CMT0-1: ieiri care i schimb starea la operaia de comparare atunci cnd se ntlnete egalitate. P5.0-7/ ADC0-7: port de intrare pe 8 bii; 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"): ieiri cu durate programabile. /EW ("Enable Watchdog Timer"): valideaz sau nu funcionarea contorului cu funcie de

3.1 - Microcontrolerul 80C51 184 watchdog. /PSEN ("Program Store Enable"): ieire care valideaz transferul cu memoria extern de program; are acelai rol i aceeai variaie ca i la microcontrolerul 80C51. ALE/ /PROG ("Address Latch Enable"): ieire cu dublu rol: semnificaia de ALE este identic cu cea de la microcontrolerul 80C51, adic realizez demultiplexarea magistralei de adrese/ date iar semnificaia de /PROG se refer la programarea memoriei interne de program, pe acest terminal aplicndu-se impulsurile de programare. /EA/ Vpp: ieire cu dublu rol: semnificaia de /EA se refer la alegerea memoriei de program: dac este 1 atunci CPU va folosi memoria de program intern pn cnd 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; semnificaia de Vpp se refer la programarea memoriei interne de program cnd pe acest terminal se va aplica tensiunea de programare de 12,75 V. RST: intrare pentru iniializarea microcontrolerului; este, de asemenea, ieire pentru un impuls de iniializare pentru restul sistemului, generat de contorul cu funcie de watchdog. XTAL1, XTAL2: terminale la care se conecteaz un cuar pentru a obine tactul intern; frecvena 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 rmn 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 excepia cazurilor unde se dau informaii specifice. Structura intern a microcontrolerului 8xC552 este asemantoare cu cea a microcontrolerului 80C51. Exist ns cteva diferene asupra crora se va insista n continuare. 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 octei i este mprit n 2 blocuri: primul bloc de 128 octei ocup zona 00 - 7FH, are aceeai structur ca i la microcontrolerul 80C51 i este adresabil direct sau indirect. Al doilea bloc de 128 octei ocup zona 80H FFH i este adresabil doar indirect. El se suprapune peste zona de adrese alocate registrelor cu funciuni speciale care sunt adresabile doar direct. Microcontrolerul 8xC552 dispune de 56 registre cu funciuni speciale, SFR, ele incluznd i registrele cu funciuni speciale ale lui 80C51. Acestea i-au pstrat adresele ns la unele au fost utilizate i ranguri care nu aveau semnificaie la 80C51. Tab. 3.13 prezint registrele cu funciuni speciale ale microcontrolerului 8xC552. Au fost

185 Microcontrolere - 3 notate cu * registrele care au fost adugate sau completate fa de cele ale microcontrolerului 80C51. Se pstreaz caracteristica de la 80C51 ca registrele ce au adrese ce se termin cu 0 sau 8 sunt adresabile i la nivel de bit. Registru ACC ADCH* ADCON* B CTCON* CTH3* CTH2* CTH1* CTH0* CMH2* CMH1* CMH0* CTL3* CTL2* CTL1* CTL0* CML2* CML1* CML0* DPH DPL IEN0* IEN1* IP0* IP1* P5* P4* P3 P2 P1 P0 PCON PSW PWMP* PWM1* PWM0* RTE* SP S0BUF S0CON S1ADR* S1DAT* S1STA* Adres de bit b7 b6 b5 E7 E6 E5 F7 F6 F5 b4 E4 F4 b3 E3 F3 b2 E2 F2 b1 E1 F1 b0 E0 F0 Adres de registru E0H C6H C5H F0H EBH CFH CEH CDH CCH CBH CAH C9H AFH AEH ADH ACH ABH AAH A9H 83H 82H A8H E8H B8H F8H C4H C0H B0H A0H 90H 80H 87H D0H FEH FDH FCH EFH 81H 99H 98H DBH DAH D9H

AF EF BF FF C7 B7 A7 97 87 D7

AE EE BE FE C6 B6 A6 96 86 D6

AD ED BD FD C5 B5 A5 95 85 D5

AC EC BC FC C4 B4 A4 94 84 D4

AB EB BB FB C3 B3 A3 93 83 D3

AA EA BA FA C2 B2 A2 92 82 D2

A9 E9 B9 F9 C1 B1 A1 91 81 D1

A8 E8 B8 F8 C0 B0 A0 90 80 D0

9F

9E

9D

9C

9B

9A

99

98

3.1 - Microcontrolerul 80C51 186 S1CON* DF DE DD DC DB DA D9 D8 D8H STE* EEH TH1 8DH TH0 8CH TL1 8BH TL0 8AH TMH2* EDH TML2* ECH TMOD 89H TCON 8F 8E 8D 8C 8B 8A 89 88 88H TM2CON* EAH TM2IR* CF CE CD CC CB CA C9 C8 C8H T3* FFH Tab. 3.13 Registrele cu funciuni speciale ale microcontrolerului 8xC552 Microcontrolerul 8xC552 cuprinde cele 2 contoare/ temporizatoare existente la microcontrolerul 80C51, pstrnd n totalitate structura, rolul i modul lor de comand. n plus, dispune de nc 2 contoare/ temporizatoare: - contorul T2 care are faciliti de captare i comparare i - contorul T3 care are funcie de watchdog. Ele vor fi detaliate n paragrafele urmtoare. Un alt bloc l constituie un convertor analog/ digital nglobat, pe 10 bii, cu 8 intrri analogice. Descrierea sa se va face ntr-un paragraf ulterior. Pe lng interfaa serie de tip UART, existent i la microcontrolerul 80C51, 8xC552 dispune i de o interfa serie pentru magistrala I 2C care va fi detaliat ntr-un paragraf ulterior. Microcontrolerul 8xC552 dispune i de circuitele necesare generrii a 2 ieiri 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 bii alctuit din 2 numrtoare pe 8 bii: TMH2 ("High") i TML2 ("Low"). Funcionarea 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 T2MS0

TM2CON.0-1: T2MS0-1: selecteaz modul conform tab. 3.14. T2MS1 0 0 1 T2MS0 0 1 0 Mod Oprit Sursa tactului este fOSC/ 12 Mod de test

187 Microcontrolere - 3 1 1 Sursa tactului este pinul T2 Tab. 3.14 Selecia modului la registrul TM2CON al microcontrolerului 8xC552 TM2CON.2-3: T2P0-1: selecteaz factorul de prescalare conform tab. 3.15. T2P1 0 0 1 1 T2P0 0 1 0 1 Factorul de prescalare

1 2 4 8 Tab. 3.15 Selecia factorului de prescalare la registrul TM2CON al microcontrolerului 8xC552

TM2CON.4: T2B0: indicator de ntrerupere la depirea capacitii numrtorului TML2. TM2CON.5: T2ER: valideaz resetul extern (front pozitiv la terminalul RT2 (P1.5)). TM2CON.6: T2IS0: validarea generrii ntreruperii la depirea capacitii numrtorului TML2. TM2CON.7: T2IS1: validarea generrii ntreruperii la depairea capacitii ntregului contor. Fig. 3.29 Structura registrului TM2CON al microcontrolerului 8xC552 Exist 2 surse de tact pentru contorul/ temporizatorul T2: fie fOSC/ 12 atunci cnd lucreaz ca temporizator fie un semnal extern primit la terminalul T2 (P1.4) atunci cnd lucreaz ca i contor. Numrtorul este incrementat la detectarea unui front pozitiv al semnalului T2, rata maxim rezultnd astfel de o numrare/ 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 ridictor este detectat atunci cnd T2 este 0 la prima citire i 1 la a doua citire. Pentru aceasta se recomand ca valorile 0 i 1 s fie meninute cte o jumtate de ciclu. Tactul este divizat cu un factor de prescalare care poate fi 1, 2, 4 sau 8. Numrtorul T2 poate fi citit "din mers". Nu exist tampoane suplimentare pentru citire i nu poate fi prencrcat. Este iniializat de semnalul RST sau de frontul ridictor al semnalului RT2, dac acesta este validat prin rangul T2ER (TM2CON.5). Simultan cu iniializarea numrtorului se iniializeaz i divizorul de prescalare. n modul Idle, contorul i divizorul de prescalare sunt iniializate i oprite. Atunci cnd apare o depire din jumtatea mai puin semnificativ a numrtorului, depire inferioar, sau cnd apare o depire din ntregul numrtor, depire superioar, se poate genera o cerere de ntrerupere de ctre oricare sau amndou din aceste depiri. Dac apare o depire inferioar atunci se va seta indicatorul T2B0 (TM2CON.4) iar dac apare o depire superioar atunci va fi setat indicatorul T20V (TM2IR.7). Registrul TM2IR conine indicatorii de ntrerupere activai de contorul/ temporizatorul T2. Dac T20V este setat atunci va fi setat i T2B0. Aceti indicatori vor fi setai la un ciclu dup apariia depirii. Pentru a valida ntreruperile, trebuiesc setai indicatorii: - ET2 (IEN1.7) care valideaz ntreruperea de depire i T2IS0 (TM2CON.6) pentru ntreruperea la depirea inferioar i - ET2 i T2IS1 (TM2CON.7) pentru ntreruperea la depirea superioar. Indicatorii T2B0 i T20V sunt iniializai prin program. Pentru validarea ambelor tipuri de ntrerupere trebuiesc setate rangurile ET2, T2IS0 i T2IS1. Prin citirea rangurilor T2IS0 i

3.1 - Microcontrolerul 80C51 188 T2IS1 se va determina sursa ntreruperii. Durata contorizat de T2 depinde de frecvena tactului, fOSC i de factorul de prescalare. Astfel la utilizarea unui tact fOSC = 12 MHz va apare o depire superioar la fiecare 65,5, 131, 262 sau 524 ms adic ciclul maxim este de aproximativ 0,5 s. Facilitatea de captare i comparare Numrtorul T2 este conectat la 4 registre pentru captare i 3 registre pentru comparare, fiecare pe cte 16 bii, fig. 3.30. Fig. 3.30 Circuitele de captare i comparare conectate la contorul T2 al microcontrolerului 8xC552 Un registru de captare va capta coninutul numrtorului T2 atunci cnd apare o tranziie pe pinul de comand a captrii corespunztor. Un registru de comparare este folosit pentru a seta, reseta sau modifica ieirile portului P4. Cele 4 registre de captare sunt CT0-3. Atunci cnd se genereaz una din intrrile CT0I CT0I INT CT1I INT CT2I INT CT3I INT CTI0 CT0 CTI1 CT1 CTI2 CT2 CTI3 CT3 CM0 = off fOSC/12 T2 RT2 T2ER RST Divizor de prescalare T2 CM1 = CM2 =

INT

INT

INT

depire inferioar depire superioar

CT3I, se ncarc T2 n registrul corespunztor 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 folosete facilitatea de captare, cele 4 intrri pot fi folosite ca intrri suplimentare pentru ntreruperi externe. 7 6 5 4 3 2 1 0
T20V CMI2 CMI1 CMI0 CTI3 CTI2 CTI1 CTI0

TM2IR.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.

189 Microcontrolere - 3 TM2IR.7: T20V: indicator activat de depirea superioar. Fig. 3.31 Structura registrului TM2IR al microcontrolerului 8xC552 Operaia de captare este controlat de registrul CTCON ("Capture Control Register"), fig. 3.32. 7
CTN3

6
CTP3

5
CTN2

4
CTP2

3
CTN1

2
CTP1

1
CTN0

0
CTP0

CTCON.0: CTP0: captare n registrul CT0 comandat de frontul ridictor la CT0I. CTCON.1: CTN0: captare n registrul CT0 comandat de frontul cobortor la CT0I. CTCON.2: CTP1: captare n registrul CT1 comandat de frontul ridictor la CT1I. CTCON.3: CTN1: captare n registrul CT1 comandat de frontul cobortor la CT1I. CTCON.4: CTP2: captare n registrul CT2 comandat de frontul ridictor la CT2I. CTCON.5: CTN2: captare n registrul CT2 comandat de frontul cobortor la CT2I. CTCON.6: CTP3: captare n registrul CT3 comandat de frontul ridictor la CT3I. CTCON.7: CTN3: captare n registrul CT3 comandat de frontul cobortor la CT3I. Fig. 3.32 Structura registrului CTCON al microcontrolerului 8xC552

intrarea intrarea intrarea intrarea intrarea intrarea intrarea intrarea

Din structura registrului CTCON se observ c se poate realiza captare pe frontul ridictor, cobortor sau ambele ale semnalului de comand. Intrrile sunt citite n S1P1 al fiecarui ciclu. La detectarea frontului selectat, coninutul numrtorului T2 este captat la sfritul ciclului. Facilitatea de captare poate fi utilizat la msurarea timpului, mai scurt dect 524 ms, ntre apariiile a 2 evenimente: dac apariia evenimentului este anunat de un semnal extern, acesta se va lega la intrarea CTjI, j = 0 - 3 i va determina captarea i generarea cererii de ntrerupere corespunztoare. Rutina de tratare va citi coninutul registrului CTj corespunztor i din diferen va rezulta timpul ntre cele dou apariii. Facilitatea de comparare este implementat cu registrele CM0-2. La fiecare incrementare a numrtorului T2, coninutul acestuia este comparat cu cel al registrelor CM0-2. La ntlnirea egalitii, este setat, la sfritul ciclului urmtor, indicatorul de ntrerupere corespunztor din registrul TM2IR. Dac apare egalitatea cu CM0 atunci biii 0 - 5 ai portului P4 sunt setai dac rangurile corespunztoare din registrul STE ("Set Enable Register"), fig. 3.33, sunt setate. Dac apare egalitatea cu CM1 atunci biii 0 - 5 ai portului P4 sunt resetai dac rangurile corespunztoare 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 SP40

STE.0: SP40: 1 va provoca setarea terminalului P4.0 la egalitatea ntre registrul CM0 i numrtorul T2. STE.1: SP41: 1 va provoca setarea terminalului P4.1 la egalitatea ntre registrul CM0 i numrtorul T2.

3.1 - Microcontrolerul 80C51 190 STE.2: SP42: 1 va provoca setarea terminalului P4.2 la egalitatea ntre registrul CM0 i numrtorul T2. STE.3: SP43: 1 va provoca setarea terminalului P4.3 la egalitatea ntre registrul CM0 i numrtorul T2. STE.4: SP44: 1 va provoca setarea terminalului P4.4 la egalitatea ntre registrul CM0 i numrtorul T2. STE.5: SP45: 1 va provoca setarea terminalului P4.5 la egalitatea ntre registrul CM0 i numrtorul T2. STE.6: TG46: bistabil afectat de egalitatea ntre registrul CM2 i numrtorul T2. STE.7: TG47: bistabil afectat de egalitatea ntre registrul CM2 i numrtorul T2. Fig. 3.33 Structura registrului STE al microcontrolerului 80C552 7
TP47

6
TP46

5
RP45

4
RP44

3
RP43

2
RP42

1
RP41

0
RP40

RTE.0: RP40: 1 va provoca resetarea terminalului P4.0 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.1: RP41: 1 va provoca resetarea terminalului P4.1 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.2: RP42: 1 va provoca resetarea terminalului P4.2 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.3: RP43: 1 va provoca resetarea terminalului P4.3 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.4: RP44: 1 va provoca resetarea terminalului P4.4 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.5: RP45: 1 va provoca resetarea terminalului P4.5 la egalitatea ntre registrul CM1 i numrtorul T2. RTE.6: TP46: 1 va provoca modificarea terminalului P4.6 la egalitatea ntre registrul CM2 i numrtorul T2. RTE.7: TP47: 1 va provoca modificarea terminalului P4.7 la egalitatea ntre registrul CM2 i numrtorul 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 corespunztoare 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. Coninuturile acestor bistabile se pot citi prin intermediul rangurilor STE.6 i STE.7. Registrele CM0-2 sunt iniializate de semnalul RST. Noua informaie din registrul portului apare la terminalele corespunztoare la S5P1 a ciclului care urmeaz ciclului n care a aprut egalitatea. Dac portul este modificat prin program, ieirile se schimb la S1P1 a urmtorului ciclu. Modificarea produs de logica de comparare este prioritar asupra celeia produs prin program n acelai ciclu. Cnd din logica de comparare rezult o setare i o resetare n acelai ciclu, resetarea este prioritar.

3.2.3.2 Contorul T3

191 Microcontrolere - 3 Contorul T3 a fost prevzut cu o funcie special i anume cea de watchdog. Rolul su este acela de a iniializa microcontrolerul dac acesta intr n stri eronate, din care nu poate iei altfel. T3 va genera un semnal de iniializare intern care ns va apare i la terminalul RST al microcontrolerului provocnd iniializarea sistemului, dac nu va fi rencrcat pe durata unei perioade de tact determinat, numit interval de watchdog. Contorul T3 este alctuit dintr-un numrtor pe 8 ranguri care este incrementat, comandat cu un tact care este ieire dintr-un divizor de prescalare, pe 11 ranguri, comandat la rndul su cu tactul cu frecvena fOSC/ 12. Ca urmare, numrtorul 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 cnd numrtorul i depete capacitatea, trece din starea FFH n starea 00H, se va genera un semnal care va iniializa microcontrolerul. Semnalul apare i la terminalul RST, cu o durata de 3 cicluri main. Funcia de watchdog este validat sau invalidat doar din exterior prin intermediul terminalului /EW: 0 valideaz funcia iar 1 o invalideaz. Numrtorul trebuie s fie rencrcat cu o perioad mai mic dect intervalul de watchdog. n caz contrar el va genera semnalul de iniializare. Este sarcina programului utilizator s execute, periodic, aceste ncrcri. 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 aplicaie, este necesar stabilirea de ctre programator a duratei maxime ct sistemul suport o stare eronat. Intervalul de watchdog trebuie s fie mai mic dect aceast durat. Programatorul trebuie s prevad apelarea periodic a unei subrutine care ncarc numrtorul T3. Pentru a stabili perioada de apelare, programatorul va trebui s cunoasc timpii de execuie ai tuturor secvenelor, 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 ncrcare eronat sau accidental a numrtorului T3, ncrcarea se realizeaz printr-o secven alctuit din 2 operaii. La nceput se va seta rangul WLE (PCON.4). Apoi, se poate ncrca numrtorul. La ncrcarea lui T3, WLE va fi automat ters. Numrtorul T3 nu poate fi ncrcat dac rangul WLE nu este setat. ntruct 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 ramne 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 rmne resetat.

3.2.3.3 Ieirile cu durate programabile, PWM0-1

3.1 - Microcontrolerul 80C51 192 Microcontrolerul 8xC552 conine 2 canale independente pentru generarea de impulsuri modulate, de durate i perioade programabile, fig. 3.35. Fig. 3.35 Circuitele de generare a ieirilor cu durate programabile la microcontrolerul 8xC552 Divizorul de prescalare i numrtorul sunt comune ambelor canale. Secvena de numrare este 0 - 254. Coninutul numrtorului este comparat cu coninutul a 2 registre, PWM0 i PWM1. Dac coninutul registrelor este mai mare dect cel al numrtorului, ieirea corespunztoare va avea valoarea 0 iar n caz contrar va avea valoarea 1. Deci forma ieirii
Magistral intern

fOSC / 2

Divizor de prescalare

Num rtor

Comparator

Comparator

PWM0 Separator PWM0

PWM1 Separator PWM1

este controlat de factorul de prescalare i de coninuturile registrelor. Factorul de prescalare este ncrcat prin program n registrul PWMP. Valoarea sa va fi: (PWMP) + 1. Prin citirea registrului PWMP se obine factorul de prescalare iniial. Registrele PWM0 i 1 pot fi ncrcate i citite prin program. ncrcarea unuia din registre cu valorile 00 i FFH, alternativ, va provoca modificarea ieirii corespunztoare cu frecvena constant: fOSC fPWM = -------------------------------------. 2 * ((PWMP) + 1) * 255 ntruct valoarea maxim a numrtorului este 254, el nu va egala niciodat coninutul 255 (FFH) al registrului. Domeniul de frecvene va fi 123 Hz - 31,4 KHz la 16 MHz i 184 Hz - 47,1 KHz la 24 MHz.

193 Microcontrolere - 3 Atunci cnd unul din registre este ncrcat cu o nou valoare, aceasta va apare la ieire imediat, fr a atepta ncheierea ciclului curent. O aplicaie tipic pentru aceste ieiri este comanda motoarelor de curent continuu. Turaia unui motor va fi proporional cu durata semnalului care l comand, PWM0 sau 1, deci va fi dat de coninutul registrului PWM0 sau 1.

3.2.3.4 Convertorul analog/ digital


Microcontrolerul 8xC552 dispune de un bloc de conversie analog/ digital, alctuit dintrun multiplexor pentru 8 intrri analogice, care sunt i terminalele portului P5 i un convertor analog/ digital, pe 10 bii, care realizeaz conversia prin aproximri succesive, fig. 3.36. Tensiunea de referin i alimentrile analogice se aplic la terminale specifice. Conversia dureaz 50 cicluri main 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 Funcionarea blocului de conversie este controlat de registrul ADCON ("Analog/ Digital Converter"), fig. 3.37. 7
ADC.1

6
ADC.0

5
ADEX

4
ADCI

3
ADCS

2
AADR2

1
AADR1

0
AADR0

ADCON.0-2: AADR0-2: selectarea uneia din cele 8 intrri analogice. ADCON.3: ADCS: 1 va determina pornirea operaiei de conversie; poate fi setat prin program sau din exterior, poate fi citit i ofer valoarea 1 dac operaia de conversie este ADC0 MUX ADC7 Convertor analog / digital STDAC AV REF+ AV REFAV DD AV SS

0 ADCON
ADCS ADCI ADEX

7 ADCH

Magistral intern n curs; este ters la ncheierea conversiei n acelai moment cu setarea indicatorului pentru ntreruperi corespunztor; 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

3.1 - Microcontrolerul 80C51 194 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 0 0 1 1 0 1 0 1 Starea convertorului Convertor liber; conversia poate ncepe Convertor ocupat; nu poate ncepe o nou conversie ncheierea conversiei; nu poate ncepe o nou conversie Imposibil Tab. 3.16 Starea convertorului la microcontrolerul 8xC552

ADCON.5: ADEX: stabilete 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, setnd rangul ADCS (ADCON.3), la nceputul ciclului main urmtor instruciunii care seteaz pe ADCS. Dac ADEX = 1 atunci conversia poate fi pornit prin program, setnd pe ADCS, sau din exterior, apicnd un front ridictor la terminalul STADC. n acest caz este necesar ca semnalul de la intrarea STADC s aib nivel 0 cel puin pe durata unui ciclu main i apoi nivel 1 cel puin pe durata unui ciclu main. Tranziia este detectat la sfritul unui ciclu main i conversia ncepe n ciclul urmtor. n urmtoarele 2 cicluri main este iniializat convertorul. La sfritul primului ciclu este setat indicatorul ADCS i la citirea sa va oferi valoarea 1 indicnd faptul c operaia de conversie este n desfurare. Rangul ADCS este implementat cu 2 bistabile: unul pentru comand i unul pentru citire. Citirea intrrii analogice selectate ncepe la sfritul celui de-al doilea ciclu. n urmtoarele 8 cicluri main are loc citirea intrrii analogice selectate, timp n care tensiunea de la intrare trebuie s fie stabil. Panta tensiunii de la intrare trebuie s fie mai mic dect 10V/ ms. Sfritul 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 puin semnificative n rangurile ADCON.6 i 7. Citind doar ADCH se obine rezultatul conversiei pe 8 bii care dureaz ns la fel de mult ca i conversia pe 10 bii. Rangul ADCI este setat i rangul ADCS este resetat la 50 cicluri main dup ce bistabilul de comand al rangului ADCS a fost setat. Rangurile ADCON.0-2 sunt folosite pentru selectarea intrrii. O conversie n execuie 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 relaia: VIN - AVREFR = 1024 * --------------------------. AVREF+ - AVREFAVREF+ i AVREF- trebuie s se afle n domeniul AVDD + 0,2 V i AVSS - 0,2 V unde AVDD este

195 Microcontrolere - 3 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 Interfeele seriale


Microcontrolerul 8xC552 dispune de 2 interfee seriale independente: - SIO0, de tip UART, identic cu cea a microcontrolerului 80C51 i - SIO1, pentru magistrala I2C. n continuare va fi descris doar interfaa SIO1. Fig. 3.38 prezint schema bloc a unui sistem bazat pe magistrala I 2C. Magistrala I2C permite transferul sincron de informaii ntre mai multe dispozitive, de tip master si slave, utiliznd 2 linii: SDA, pentru date i SCL, pentru tact. Cteva caracteristici ale magistralei I2C sunt: - transfer bidirecional ntre dispozitive de tip master i slave; - arbitrare ntre mai multe dispozitive master care transmit, fr 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 funcionarea 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 funcie de starea bitului de directie, R/ /W, sunt posibile 2 tipuri de transferuri de date: - transfer de date de la un master emitor la un slave receptor: primul octet transferat de master este adresa dispozitivului slave, apoi urmeaz un numr de octei de date; receptorul rspunde cu un bit de acceptare dup fiecare octet primit; - transfer de date de la un slave emitor la un master receptor: primul octet, adresa dispozitivului slave, este transferat de master, dispozitivul slave rspunde cu un bit de acceptare i apoi urmeaz datele transferate de slave ctre master; dup fiecare octet primit, dispozitivul master rspunde cu un bit de acceptare iar dup ultimul octet rspunde 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. Interfaa SIO1 poate lucra n unul din urmtoarele 4 moduri:

3.1 - Microcontrolerul 80C51 196 Fig. 3.38 Schema bloc a unui sistem bazat pe magistrala I2C Mod master emitor Datele sunt transferate pe terminalul P1.7/ SDA iar tactul pe terminalul P1.6/ SCL. Primul V DD

SDA SLC

Magistrala I2C

P1.7/SDA

P1.6/SLC

8xC552

Dispozitiv cu interfa I2C

...

Dispozitiv cu interfa I2C

octet transferat este adresa dispozitivului slave, notat cu SLA, pe 7 bii i bitul de direcie 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 primete un bit de acceptare. nceputul i sfritul unui transfer sunt indicate prin biii de START i STOP. Mod master receptor Sunt folosite aceleai terminale ca n cazul anterior. Primul octet transferat de master este adresa dispozitivului slave, SLA i bitul de direcie, R/ /W = 1, notat acum cu R, deci primul octet transferat este SLA + R. Dispozitivul master rspunde cu un bit de acceptare dup primirea fiecrui octet de date. Dispozitivul master stabilete nceputul i sfritul unui transfer serie prin biii START i STOP. Mod slave receptor Datele i tactul sunt primite pe terminalele P1.7/ SDA, respectiv P1.6/ SCL. Dup primirea fiecrui octet, dispozitivul slave va rspunde cu un bit de acceptare. Dispozitivul slave va trebui s recunoasc biii de START i STOP precum i propria adres i biii de direcie. Mod slave emitor Primul octet, adresa i bitul de direcie, este recepionat, apoi rspunde 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 biii de START i STOP. Interfaa SIO1 poate lucra ca master i ca slave n aceeai aplicaie. Dac este slave, va atepta propria adres sau adresa de apel general. Dac primete una din aceste adrese, va genera o ntrerupere. Dac doreste s devin master, va atepta ca magistrala s fie liber pentru a nu ntrerupe o aciune n curs, a unui slave. Dac pierde arbitrarea, SIO1 devine slave. Pentru a realiza aceste operaii, SIO1 dispune de urmtoarele blocuri:

197 Microcontrolere - 3 - un filtru de intrare care recunoate nivelele de tensiune specifice magistralei I 2C: 0 logic pentru o tensiune mai mic dect 1,5 V i 1 logic pentru o tensiune mai mare ca 3 V; - un etaj de ieire care permite conectarea la liniile SDA i SCL, astfel nct dac microcontrolerul rmne fr alimentare, el nu va afecta liniile SDA i SCL; - un registru pentru adres, S1ADR unde memoreaz adresa proprie atunci cnd este slave i bitul GC, de validare a recunoaterii 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 nct durata tactului este fixat de acel dispozitiv care emite o durat mai mic iar spaiul ntre impulsuri este fixat de acel dispozitiv care emite un spaiu mai lung; - un generator de tact: emite tact doar n modurile master; factorul de umplere este 1/ 2 atunci cnd nu este modificat datorit sincronizrii cu un alt dipozitiv master; - un registru de control S1CON care controleaz funcionarea interfeei SIO1; - un registru de stare i un decodificator de stare: interfaa SIO1 poate fi n una din 26 stri pentru codificarea crora fiind necesari 5 bii de stare, poziionai de decodificatorul de stare i memorai n registru de stare, pe cele 5 ranguri mai semnificative, restul de 3 ranguri avnd valoarea 0; coninutul registrului de stare poate fi utilizat ca vector de adres la setarea indicatorului de ntrerupere de la interfaa SIO1; coninutul registrului va rmne nemodificat pn cnd indicatorul de ntrerupere este ters prin program; dac coninutul registrului de stare este folosit ca vector de adres atunci rutinele de tratare a cererilor de ntrerupere vor fi distanate unele de altele cu 8 octei ceea ce este suficient pentru majoritatea aplicaiilor. 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 interfeei seriale. n modurile slave, cei 7 bii mai semnificativi reprezint adresa dispozitivului iar bitul GC, dac este setat, va valida recunoaterea adresei de apel general (00H) iar n caz contrar va determina ignorarea acestei adrese. Bitul cel mai semnificativ din S1ADR este primul bit recepionat dup un bit de START. 7 ADR 6 5 4 3 2 1 0 S L A V E GC Fig. 3.39 Structura registrului S1ADR al microcontrolerului 8xC552

Registrul de date, S1DAT, conine octetul de date care va fi emis pe linie sau cel recepionat de pe linie. CPU poate citi sau scrie din/ n acest registru atunci cnd 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 rmn stabile ct timp indicatorul de ntrerupere este setat. Primul bit care se transmite este cel mai semnificativ din S1DAT iar la recepie primul bit primit este depus n rangul cel mai semnificativ. Atunci cnd este emis o dat, ea este simultan recepionat, astfel nct n S1DAT ntotdeauna se afl ultimul octet transferat pe magistral. Aceasta va permite ca la pierderea arbitrrii, trecerea de la modul master emitor la cel slave emitor s se fac avnd data corect n S1DAT. S1DAT formeaz cu bistabilul pentru bitul de acceptare un registru de deplasare pe 9 bii,

3.1 - Microcontrolerul 80C51 198 astfel nct fiecare transfer de octet este nsoit de transferul unui bit de acceptare. Datele sunt primite n registrul S1DAT pe frontul ridictor al fiecarui impuls de tact i sunt emise pe linie pe frontul cztor al fiecrui 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 funcionarea interfeei SIO1. 7 CR2 6 5 4 3 2 1 0 ENS1 STA ST0 SI AA CR1 CR0 Fig. 3.40 Structura registrului S1CON al microcontrolerului 8xC552

Semnificaiile rangurilor sale sunt descrise n continuare. ENS1: bit de validare a interfeei SIO1: dac este 0, SDA i SCL sunt n starea de nalt impedan dac sunt ieiri iar dac sunt intrri, vor fi ignorate; interfaa SIO1 este dezactivat i rangurile P1.6 i P1.7 pot fi folosite n alte scopuri. Dac ENS1 = 1 atunci interfaa SIO1 este validat iar rangurile P1.6 i P1.7 din registrul P1 trebuie s conin 1. Dac ENS1 este resetat atunci starea interfeei se pierde ceea ce nseamn c acest rang nu poate fi folosit pentru oprirea temporar a interfeei. STA: bit de START: dac STA este setat i interfaa dorete 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 atepta 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, indicnd 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 ieirea dintr-o stare eronat dar nu se va emite bit de STOP pe linie. Dac biii STA i STO sunt simultan activai 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 interfaa 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 interfaa SIO1. SI este setat de logica lui SIO1 dac acesta se afl n una din 25 stri din cele 26 posibile. Starea F8H este cea care nu activeaz pe SI i semnific lipsa unei informaii de stare relevante. Dac SI este setat, se oprete generarea tactului pe linia SCL (aceasta rmne la 0) i transferul serial este oprit. SI trebuie resetat prin program. Dac SI = 0 nu se va genera o cerere de ntrerupere. AA: bit de validare a acceptrii: dac AA = 1 atunci se va genera bit de acceptare (0 pe linia SDA) n una din urmtoarele situaii: - 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 cnd 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.

199 Microcontrolere - 3 Dac SIO1 este n modul slave emitor, va intra n starea C8H dup ultimul transfer serial. Dup tergerea lui SI, SIO1 prsete starea C8H i intr n modul slave emitor 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 interfaa va recunoate biii de START i STOP i va citi datele. Recunoaterea adresei poate fi reluat oricnd prin setarea rangului AA. Dac AA este setat n timp ce adresa proprie sau cea de apel general au fost parial transferate, ele vor fi recunoscute la sfritul octetului corespunztor. CR2-0: biii pentru stabilirea frecvenei tactului: determin frecvena tactului atunci cnd SIO1 este ntr-un mod master, conform tab. 3.17. CR2 CR1 CR0 0 0 0 0 1 1 1 1 Frecvena tactului [KHz] la fOSC 12 MHz 24 MHz fOSC se divide la

0 0 47 63 256 0 1 54 71 224 1 0 63 83 192 1 1 75 100 160 0 0 12,5 17 960 0 1 100 120 1 0 60 1 1 0,5-62,5 0,67-62,5 c Tab. 3.17 Stabilirea frecvenei tactului la SIO1 a microcontrolerului 8xC552

unde c = 96 * (256 - constanta de prencrcare a contorului T1), constanta aflndu-se n domeniul 0 - 254 pentru modul 2 al lui T1. Se observ c domeniul de frecvene este 12,5 - 100 KHz. Se poate obine i o frecven variabil utiliznd ca surs de tact ieirea de depire a contorului T1. Dac SIO1 este ntr-un mod slave atunci el se va sincroniza cu orice frecven, pn la 100 KHz. Registrul de stare, S1STA, este un registru ce poate fi doar citit. El conine pe cele 5 ranguri mai semnificative codul uneia din cele 26 stri n care se poate gsi SIO1 iar pe celelalte 3 ranguri, conine valoarea 0. Starea este stabilit de logica interfeei i codul ei se afl n S1STA la un ciclu main dup ce s-a activat indicatorul de ntrerupere SI i mai rmne n registru un ciclu main dup ce indicatorul SI a fost anulat. Din cele 26 stri doar una, avnd codul F8H, nu determin activarea indicatorului de ntrerupere, SI. Ea corespunde lipsei unei informaii de stare relevante. Coninutul registrului poate fi folosit ca vector de adres pentru accesul la rutinele de tratare a cererilor de ntrerupere ce corespund celor 25 stri.Fig. 3.41 prezint cte un transfer realizat cu succes n fiecare din cele 4 moduri. Au fost folosite notaiile:

3.1 - Microcontrolerul 80C51 200 Fig. 3.41 Transferuri realizate cu succes de interfaa SIO1 a microcontrolerului 8xC552 S: bit de START, SLA: adres de dispozitiv slave, pe 7 bii, R: bit de citire (1 pe linia SDA), W: bit de scriere (0 pe linia SDA), S ; 08H 18H 28H SLA, W A DATA A 0 Transfer de la un master emitor

SLA, R

DATA

DATA

06H

40H

50H

/A Transfer 0 de la un master receptor 58H

SLA, W

DATA

DATA

0 sau S

60H

80H

80H

A0H

Recepia adresei propri i a unui octet de date de un slave receptor

SLA, R

DATA

DATA

/A

0 sau S

A8H

88H

C0H

Recepia adresei propri i transmisia unui octet de date de un slave emitor transfer de la master la slave transfer de la slave la master A: bit de acceptare (0 pe linia SDA), /A: bit de neaaceptare (1 pe linia SDA), DATA: octet de date,

201 Microcontrolere - 3 O: bit de STOP. Au fost indicate, n cercuri, strile n care se afla interfaa la diferite momente de timp. n continuare vor fi comentate cele 4 cazuri posibile. Modul master emitor: n acest mod se transmite un numr de octei de date la un dispozitiv slave receptor. nainte de a ncepe transferul, registrul S1CON trebuie s conin configuraia: CR2 1 0 0 0 x CR1 CR0. n continuare se va seta rangul STA, prin intermediul instruciunii SETB i, dac magistrala este liber, va ncepe transferul. Dup emiterea bitului de START se va activa indicatorul SI iar codul strii va fi 06H. El poate fi folosit pentru a ajunge la o subrutin de tratare a ntreruperii care va ncrca n registrul S1DAT un octet alctuit din adresa dispozitivului slave i bitul de direcie. 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 funcie de modul n care a decurs transferul. Dac se dorete continuarea cu transferul datelor, n registrul S1STA va exista codul 18H i se va realiza accesul la subrutina care ncarc n S1DAT, pe rnd, octeii de date. Transferul se ncheie cu activarea rangului STO i generarea bitului de STOP. Modul master receptor: n acest mod se primete un numr de octei de date de la un dispozitiv slave emitor. Transferul este iniializat ca n modul anterior. Dup transferul adresei i a bitului de direcie, strile n care intr interfaa sunt diferite fa de cele din cazul anterior. De exemplu dac se dorete recepia datelor, n registrul S1STA va exista codul 40H care va determina accesul la subrutina care preia din registrul S1DAT, pe rnd, octeii de date. Modul slave receptor: n acest mod se primete un numr de octei de date de la un dispozitiv master emitor. Pentru iniierea modului, n registrul S1ADR trebuie s fie adresa dispozitivului slave iar n registrul S1CON trebuie s existe configuraia: CR2 1 0 0 0 1 CR1 CR0. Dac rangul GC din registrul S1ADR este setat atunci dispozitivul va recunoate i adresa de apel general. CR2-0 nu conteaz n acest mod. Dup ncrcarea celor 2 registre, SIO1 ateapt pn ce i detecteaz propria adres urmat de bitul de direcie. Apoi seteaz indicatorul de ntrerupere i, n funcie de starea din registrul S1STA, va realiza accesul la o rutin ce realizeaz operaiile corespunztoare. Dac rangul AA este resetat n timpul unui transfer, SIO1 va rspunde cu un bit de neacceptare dup urmtorul octet transferat i, n continuare, se va decupla de la magistral adic nu va ncerca o recunoatere a propriei adrese sau a celei de apel general dar va citi n continuare magistrala. Dac AA va fi setat, operaia de recunoatere a propriei adrese sau a celei de apel general va fi reluat deci dispozitivul se va recupla la magistral. Modul slave emitor: n acest mod se transmite un numr de octei la un dispozitiv master receptor. Operaiile sunt asemntoare cu cele din modul anterior. ntruct pentru realizarea tuturor operaiilor 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 puin semnificativ al adresei de nceput a subrutinei; - n locaia ADR din memoria RAM intern se afl octetul mai semnificativ al adresei de nceput a subrutinei. Secvena este:

3.1 - Microcontrolerul 80C51 202 PUSH PSW PUSH S1STA PUSH ADR RET Prima instruciune salveaz starea registrului PSW. A doua i a treia instruciune depun n stiv adresa subrutinei de tratare iar instruciunea RET extrage aceast adres i o depune n numrtorul de program, PC. ntruct s-a folosit acelai octet superior al adresei, adresele subrutinelor se afl n aceeai pagin de 256 octei din memorie. Pagina poate fi plasat oriunde n memorie, prin modificarea coninutului locaiei 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 interfeei seriale UART care se numete SIO0 la 8xC552; funcionarea lor este identic cu cele corespunztoare de la microcontrolerul 80C51; - 8 sunt datorate contorului T2: ele sunt generate prin poziionarea unor indicatori i anume: CTI0 - CTI3 care sunt indicatorii poziionai la captarea coninutului contorului T2 comandat de semnalele externe CT0I - CT3I, CMI0 - CMI2 care sunt indicatorii poziionai de logica de comparare ntre coninutul contorului T2 i registrele CM0, CM1 i CM2 i un indicator care rezult n urma unei operaii SAU ntre indicatorii T2B0 i T20V poziionai ca urmare a apariiei unei depiri inferioare, respectiv superioare la contorul T2; toi aceti indicatori pot fi teri doar prin program; - una este datorat blocului de conversie i este generat de indicatorul ADCI, indicnd c rezultatul conversiei poate fi citit: ADCI poate fi anulat doar prin program; - una este datorat interfeei seriale SIO1 i este generat de indicatorul SI: acesta este setat atunci cnd registrul de stare S1STA se ncarc cu un cod de stare relevant i poate fi anulat doar prin program. Cu excepia indicatorului ADCI care este setat de logica blocului de conversie, toi ceilali indicatori pot fi setai i resetai i prin program. n acest fel pot fi generate ntreruperi i prin program i exist i facilitatea de a anula prin program ntreruperi n ateptare. La luarea n considerare a unor cereri de ntrerupere sunt anulai, n mod automat, unii indicatori: IT0, IT1 i IE0, IE1 dac ntreruperile externe au fost activate pe front. Toi ceilali indicatori sunt anulai 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 0 EA EAD ES1 ES0 ET1 EX1 ET0 EX0 IEN0.0: EX0: valideaz ntreruperea extern 0 IEN0.1: ET0: valideaz ntreruperea de la contorul T0 IEN0.2: EX1: valideaz ntreruperea extern 1 IEN0.3: ET1: valideaz ntreruperea de la contorul T1 IEN0.4: ES0: valideaz ntreruperea de la interfaa SIO0

203 Microcontrolere - 3 IEN0.5: ES1: valideaz ntreruperea de la interfaa SIO1 IEN0.6: EAD: valideaz ntreruperea de la blocul de conversie IEN0.7: EA: control global al sistemului de ntreruperi: 1 - validare, 0 - invalidare. Fig. 3.42 Structura registrului IEN0 al microcontrolerului 8xC552 7
ET2

6
ECM2

5
ECM1

4
ECM0

3
ECT3

2
ECT2

1
ECT1

0
ECT0

IEN1.0: ECT0: valideaz ntreruperea generat de captarea 0 IEN1.1: ECT1: valideaz ntreruperea generat de captarea 1 IEN1.2: ECT2: valideaz ntreruperea generat de captarea 2 IEN1.3: ECT3: valideaz ntreruperea generat de captarea 3 IEN1.4: ECM0: valideaz ntreruperea generat de compararea 0 IEN1.5: ECM1: valideaz ntreruperea generat de compararea 1 IEN1.6: ECM2: valideaz ntreruperea generat de compararea 2 IEN1.7: ET2: valideaz ntreruperea generat de depairile de la contorul T2. Fig. 3.43 Structura registrului IEN1 al microcontrolerului 8xC552 Fiecarei surse i se poate aloca un nivel de prioritate sczut sau ridicat, prin intermediul registrelor de prioriti IP0, fig. 3.44 i IP1, fig. 3.45. Toate considerentele de la microcontrolerul 80C51 legate de nivelele de prioriti rmn 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 0 IP0.1: PT0: prioritate pentru ntreruperea de la contorul T0 IP0.2: PX1: prioritate pentru ntreruperea extern 1 IP0.3: PT1: prioritate pentru ntreruperea de la contorul T1 IP0.4: PS0: prioritate pentru ntreruperea de la SIO0 IP0.5: PS1: prioritate pentru ntreruperea de la SIO1 IP0.6: PAD: prioritate pentru ntreruperea de la blocul de conversie. Fig. 3.44 Structura registrului IP0 al microcontrolerului 8xC552 7
PT2

6
PCM2

5
PCM1

4
PCM0

3
PCT3

2
PCT2

1
PCT1

0
PCT0

IP1.0: PCT0: prioritate pentru ntreruperea generat de captarea 0 IP1.1: PCT1: prioritate pentru ntreruperea generat de captarea 1 IP1.2: PCT2: prioritate pentru ntreruperea generat de captarea 2 IP1.3: PCT3: prioritate pentru ntreruperea generat de captarea 3 IP1.4: PCM0: prioritate pentru ntreruperea generat de compararea 0 IP1.5: PCM1: prioritate pentru ntreruperea generat de compararea 1 IP1.6: PCM2: prioritate pentru ntreruperea generat de compararea 2 IP1.7: PT2: prioritate pentru ntreruperea generat de depirile 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 apariiei simultane a 2 sau mai multe cereri de ntrerupere de aceeai prioritate, n ordinea descresctoare a acesteia: - ntreruperea extern 0, - SIO1, - blocul de conversie,

3.1 - Microcontrolerul 80C51 204 - depirea contorului T0, - captarea 0, - compararea 0, - ntreruperea extern 1, - captarea 1, - compararea 1, - depirea contorului T1, - captarea 2, - compararea 2, - SIO0, - captarea 3, - depirile contorului T2. Toate considerentele prezentate la microcontrolerul 80C51 legate de tratarea unei cereri de ntrerupere sunt valabile i la microcontrolerul 8xC552, cu excepia vectorilor de adres care sunt prezentai n tab. 3.18. Sursa Vectorul de adres ntreruperea extern 0 0003H Depirea contorului T0 000BH ntreruperea extern 1 0013H Depirea contorului T1 001BH SIO0 0023H SIO1 002BH Captarea 0 0033H Captarea 1 003BH Captarea 2 0043H Captarea 3 004BH Blocul de conversie 0053H Compararea 0 005BH Compararea 1 0063H Compararea 2 006BH Depirile contorului T2 0073H Tab. 3.18 Adresele ntreruperilor microcontrolerului 8xC552

3.2.6 Iniializarea microcontrolerului


Iniializarea microcontrolerului se realizeaz prin activarea la 1 a intrrii RST, timp de cel puin 2 cicluri main. n timpul ct RST este activ, ieirile ALE i /PSEN au nivel 1 logic. Microcontrolerul mai poate fi iniializat i de contorul cu funcie de watchdog care genereaz, la trecerea numrtorului din starea FFH n starea 00H, un impuls de iniializare cu durata de 3 cicluri main, att intern ct i extern. Fig. 3.46 prezint un circuit pentru generarea automat a iniializrii la cuplarea alimentrii.

205 Microcontrolere - 3 Fig. 3.46 Circuit pentru iniializarea microcontrolerului 8xC552 la cuplarea alimentrii Dac ntr-o aplicaie se dorete generarea unui impuls de iniializare extern, pe terminalul RST, de ctre contorul cu funcie de watchdog, nu se recomand folosirea circuitului de mai sus ntruct durata impulsului generat nu este suficient pentru descrcarea condensatorului. Secvena intern de iniializare are loc n timpul celui de-al doilea ciclu main n care semnalul RST este activ i se repet n continuare n fiecare ciclu main n care semnalul RST este activ. La sfritul unei secvene interne de iniializare, registrele interne au coninuturile prezentate n tab. 3.19. V DD

4,7 F

+ -

V DD 8xC552 RST

47 k

3.2.7 Porturile
Microcontrolerul 8xC552 dispune de 6 porturi pe 8 bii, P0 - P5, primele 5 fiind bidirecionale iar al 6-lea fiind doar de intrare. Ele sunt porturi de uz general, existnd posibilitatea programrii individuale a fiecrui rang i, n plus, ele au i funciuni alternative. Aceste funciuni au fost prezentate n paragraful 3.2.2. Porturile P0 - P4 dispun fiecare de circuite de intrare, un registru intern i un etaj de ieire iar portul P5 dispune doar de circuitele de intrare i un registru intern. Registru 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,T3 ADCON ADCH,CTL0-3,CTH0-3,P5,S0BUF IP0 P0-4 S1STA Coninut 00H xx000000B XXH x0000000B FFH F8H

3.1 - Microcontrolerul 80C51 206 SP 07H STE C0H Tab. 3.19 Coninuturile registrelor microcontrolerului 8xC552 dup iniializare Porturile P0 - P3 sunt identice cu cele de la microcontrolerul 80C51 att n ceea ce privete structura intern ct i rolul lor i funciunile alternative. Exist o diferen la portul P1 care prezint, pentru toate terminalele, funciuni alternative la microcontrolerul 8xC552. Rangurile P1.6 i P1.7 sunt folosite pentru conectarea la magistrala I 2C i, ca urmare, sunt cu drena n gol. Ele difer de rangurile P1.6 i P1.7 ale microcontrolerului 80C51 care au rezistene interne la tensiunea de alimentare. Portul P4 asigur aceleai faciliti de intrare/ ieire ca i porturile P0 - P3 i, n plus, asigur funciunile alternative descrise n paragraful 3.2.2. Portul P5 este doar port de intrare iar terminalele sale sunt folosite i ca intrri pentru cele 8 canale analogice.

3.2.8 Programarea memoriei EPROM interne


Microcontrolerul 87C552 conine 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 operaii ce pot fi realizate n cadrul programarii memoriei EPROM interne. Ele sunt selectabile prin configuraii specifice pe terminalele P2.6, P2.7, P3.6 i P3.7. Aceste operaii, modul lor de selectare precum i starea terminalelor care intervin n procesul de programare sunt prezentate n tab. 3.20. Fig. 3.47 prezint configuraia microcontrolerului 87C552 n scopul realizrii programrii. Frecvena tactului trebuie s fie doar de 4 - 6 MHz. Octeii de programat sunt transmii 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 depeasc, nici mcar 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 cerinele prezentate n fig. 3.48: 25 impulsuri, durata de minim 10 ms i distana ntre 2 impulsuri de 100 ms +/- 10 %. Operaia Programare cod Verificare cod Programare tabela de criptare Programare bit 1 de blocare Programare bit 2 de blocare Citire semntur Vpp = 12,75 V +/ - 0,25 V RST /PSEN ALE/PROG /EA/Vpp P2.7 P2.6 P3.7 P3.6 1 1 1 1 1 1 0 0 0 0 0 0 * 1 * * * 1 Vpp 1 Vpp Vpp Vpp 1 1 0 1 1 1 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0

207 Microcontrolere - 3 VDD = 5 V +/ - 0,5 V * = 25 impulsuri de programare conform fig. 3.48. Tab. 3.20 Operaiile ce pot fi realizate n procesul de programare 25 impulsuri ALE / /PROG

... 100 s 10 % min 10 s

ALE / /PROG al microcontrolerului 8xC552 Fig. 3.47 Comanda programrii memoriei EPROM interne la microcontrolerul 8xC552 Fig. 3.49 prezint configuraia microcontrolerului n scopul realizrii operaiei de verificare a octeilor programai. Portul P1 i liniile P2.0 - 4 ale portului P2 sunt utilizate pentru conectarea liniilor de adres iar octeii se obin la portul P0. Este necesar conectarea de rezistene externe ntre liniile portului P0 i tensiunea de alimentare VDD. V DD 1 0 1 0 1 1 4-6 MHz RST /PSEN P2.7 P2.6 P3.7 P3.6 XTAL2 XTAL1 8 P1.0-7 7 C 5 P2.0-4 5 2 /EA / VPP /ALE / PROG. V DD V SS A0-7 A8-12 12,75 V impulsuri + 5V GND Octei de programat

P0.0-7

Verificarea poate fi realizat doar dac nu a fost programat bitul 2 de blocare. Dac a fost programat tabela de criptare atunci datele obinute sunt rezultatul unei operaii de SAUNU EXCLUSIV (COINCIDENA) ntre datele programate i cele din tabela de criptare. Fig. 3.48 Impulsurile pentru programarea memoriei EPROM interne la microcontrolerul 8xC552

3.1 - Microcontrolerul 80C51 208 Programarea tabelei de criptare este o facilitate care permite protecia datelor programate contra citirii lor neautorizate. Programarea tabelei de criptare se realizeaz ca o programare obinuit doar c se refer numai la locaiile 00 - 1FH i configuraia de selectare de pe liniile P2.7, P2.6, P3.7 i P3.6 difer fa de o programare normal. Datele care se vor obine la operaia de verificare vor fi criptate, ele vor fi rezultatul unei operaii SAU-NU EXCLUSIV (COINCIDENA) ntre datele programate i cele din tabela de criptare i pentru decriptarea lor este necesar cunoaterea 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 obinute la operaia de verificare. Fig. 3.49 Verificarea octeilor programai la microcontrolerul 80C51 O alt facilitate const n programarea biilor 1 i 2 de blocare. Procedura const n aplicarea cte unei secvene de 25 impulsuri, conform fig. 3.48, n condiiile respectrii configuraiilor 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 octeilor de cod i a tabelei de criptare. Dac este programat bitul 2 de blocare atunci este dezactivat verificarea n continuare a octeilor programai. 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 operaiei de tergere, toate locaiile din memoria EPROM vor conine FFH. Toate consideraiile legate de: comanda memoriei externe, ciclurile main, modurile de V DD 1 0 0 0 1 1 4-6 MHz RST /PSEN P2.7 P2.6 P3.7 P3.6 XTAL2 XTAL1 8 P1.0-7 7 C P2.0-4 5 5 2 /EA / VPP /ALE / PROG. V DD V SS A0-7 A8-12 1 1 + 5V GND Octei programai

P0.0-7

lucru cu consum redus i programarea, prezentate la microcontrolerul 80C51, rmn valabile i la microcontrolerul 8xC552.

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