Se consider ă anul 1971, când INTEL a anun țat producerea primului [621042]

PREFA ȚĂ
Se consider ă anul 1971, când INTEL a anun țat producerea primului
microprocesor, ca momentul trecerii de la electronica implementat ă cablat la
electronica realizat ă programat. Primul microprocesor 4004 a fost conceput de M.
E. Hoff ca un procesor pu țin simplificat pentru a putea fi implementat, la vremea
aceea, pe un singur chip în siliciu. Ini țial, microprocesorul nu a fost un computer-
on-a-chip , deși în timp a ajuns la acest stadiu; conceptul de microprocesor s-a
dezvoltat și spre alte implement ări specifice: microcontroller, microcalculator,
procesor de semnale (DSP). Oricare din aceste circuite, pentru a deveni parte aunui sistem, impune un proces de proiectare care se bazeaz ă în egal ă măsură atât
pe componenta hardware cât și pe componenta software.
Microprocesorul, sau celelalte variante ale sale, integrat într-un sistem
aduc acestuia acea performan ță, care atunci când este realizat ă de fiin ța uman ă este
referit ă ca inteligen ță. În general, microprocesorul este integrat ca unitate central ă
de procesare în sistemele digitale de calcul. Actual, aproape toate sistemele au o
arhitectur ă de sistem digital particularizându-se în func ție de aplicare/utilizare.
Aplica țiile care nu sunt, în sensul clasic, sisteme digitale de calcul sunt în general
implementate pe baz ă de microprocesor sau DSP. Implement ările sistemelor pe
bază de microcontroller ori DSP devin simple și ieftine -–pentru c ă utilizeaz ă deja
o component ă de serie, devin performante – pentru c ă utilizeaz ă o component ă care
poate asigura suport pentru inteligen ță, devin flexibile – pentru c ă utilizeaz ă o
component ă ce poate fi programat ă.
Forța care a impus sistemele pe baz ă de microcontroller const ă în
programabilitatea unei componente de serie. Pentru sistemele la care o component ă
de serie, chiar programabil ă în software, nu duce la rezultatele cele mai bune au
apărut implement ările pe baz ă d e c i r c u i t e A S I C ( Application Specific Integrated
Circuits ). Spre deosebire de sistemele pe baz ă de microcontroller, unde
func ționarea dorit ă se ob ține, în software, printr-un anumit program, la sistemele
pe baz ă de circuite ASIC func ționarea dorit ă se ob ține prin structurarea hardware-
ului cu un anumit program. Alegerea între o implementare pe baz ă de
microcontroller, o implementare pe baz ă de circuit ASIC sau una combinat ă
depinde de aplica ția respectiv ă și de cerin țele impuse.
Prezenta carte constituie un material, dar f ără a absolutiza, pentru
abordarea sistemelor pe baz ă de microcontroller. Materialul prezentat și CD-ul

VI MICROCONTROLLERE
alăturat asigur ă un traseu de la descrierea func ționării unui microcontroller generic,
dar și cu exemplific ări comerciale, pân ă la analiza, sinteza implementarea și
testarea unui sistem. Deoarece oferta pe pia ță pentru microcontrollere este vast ă și
variat ă, pe acest traseu s-a accentuat prezentarea comparativ ă și critic ă încercând s ă
se imprime cititorului analiza lucid ă în fa ța avalan șei agresive a ofertelor de pia ță.
Cartea a fost elaborat ă în cadrul programului Tempus RESUME (REtraining
SUpport for small and Medium Enterprises) de la Universitatea TRANSILVANIAdin Bra șov, program care a avut printre obiective și sprijinul dezvolt ării de sisteme
pe baz ă de microcontrollere în/ și pentru întreprinderi mici și mijlocii. Ținând cont
de aceast ă adres ă cartea nu este destinat ă numai inginerilor în specialitatea de
electronic ă și ingineria calculatoarelor ci și inginerilor de alte specialit ăți care au o
practic ă sau doresc s ă abordeze acest domeniu al sistemelor pe baz ă de
microcontroller. Nu exist ă actual produse de HiTech care s ă nu se bazeze direct sau
indirect pe microprocesor sau microcontroller. În consecin ță, într-o economie de
tranzi ție, cum este a noastr ă, care dore ște să se impun ă, formarea de personal care
să știe s ă proiecteze/implementeze/exploateze sisteme pe baz ă de microcontroller
este o necesitate prioritar ă.
Mulțumim tuturor celor care ne-au sprijinit, colegilor Catedrei de
Electronic ă și Calculatoare, d-l asist. ing. R ăzvan Br ătucu și mai ales domnilor
profesori Marcian Cîrstea de la DMU Leicester – Marea Britanie, Josef Hoffmann
de la Fachhochschule Karlsruhe – Germania, Dr. Peter Corcoran – National
University of Ireland, MSC Eng.Petronel Bigioi, doctorand la UniversitateaTransilvania Bra șov precum și studen ților aceleia și universit ăți.
Brașov, Ianuarie 200 1

CUPRINS
DESCRIERE GENERAL Ă________________________________________________ 1
1.1 ISTORIC __________________________________________________________ 1
1.2 SCHEMA BLOC GENERAL Ă____________________________________________ 3
1.3 A RHITECTURA MC__________________________________________________ 5
1.3.1 Unitatea central ă de prelucrare ____________________________________ 6
1.3.2 Memoria _____________________________________________________ 8
1.3.3 Dispozitive I/O _______________________________________________ 10
1.4 SISTEMUL DE ÎNTRERUPERI ___________________________________________ 28
1.5 MANAGEMENTUL PUTERII ____________________________________________ 34
1.6 SCHEMA BLOC A UNUI MC ____________________________________________ 35
1.7 F AMILII DE MC ___________________________________________________ 37
1.8 C LASIFICAREA MC ________________________________________________ 41
PROGRAMAREA SISTEMELOR CU MC _________________________________ 43
2.1 P ROIECTAREA PROGRAMELOR DE APLICA ȚIE_____________________________ 43
2.1.1 Generalit ăți __________________________________________________ 43
2.1.2 Instruc țiuni ale MC____________________________________________ 50
2.1.3 Instrumente software de proiectare: MC 8051 _______________________ 56
2.1.4 Instrumente software de proiectare: MC PIC ________________________ 67
MICROCONTROLLERE MOTOROLA ___________________________________ 71
3.1 MC M68HC05____________________________________________________ 72
3.1.1 Memoria intern ă______________________________________________ 72
3.1.2 Unitatea central ă______________________________________________ 73
3.1.3 Moduri de adresare ____________________________________________ 75
3.1.4 Setul de instruc țiuni ___________________________________________ 76
3.1.5 Sistemul de întreruperi _________________________________________ 773.1.6 Interfe țe și periferice on-chip ____________________________________ 78
3.1.7 Managementul puterii__________________________________________ 873.1.8 Autoverificarea _______________________________________________ 88
3.1.9 Programarea EPROM __________________________________________ 88
3.2 MC M68HC08____________________________________________________ 89
3.2.1 Unitatea central ă 6808 _________________________________________ 90
3.2.2 Interfe țe și periferice on-chip ____________________________________ 91
3.2.3 Programarea memoriei EEPROM ________________________________ 96
3.3 MC
PE 16 BIȚI – 6816_______________________________________________ 97
3.3.1 Modulul de integrare (SIM, System Integration Module) ______________ 98
3.3.2 Interfe țe_____________________________________________________ 98
3.4 MC PE 32 DE BI ȚI – 68300 ___________________________________________ 99
3.5 D ATE COMPARATIVE PENTRU MC M OTOROLA –CISC_____________________ 100

VIII MICROCONTROLLERE
FAMILIA MCS-5 1_____________________________________________________ 101
4.1 STRUCTURA ȘI FUNC ȚIONAREA _______________________________________ 102
4.1.1 Gestionarea memoriei_________________________________________ 104
4.1.2 Circuitele timer______________________________________________ 104
4.1.3 Interfa ța serial ă UART ________________________________________ 106
4.1.4 Sistemul de întreruperi ________________________________________ 1064.1.5 Operarea cu economie de energie________________________________ 108
4.2 P
ROGRAMAREA MC DIN FAMILIA MCS-51 _____________________________ 108
4.2.1 Setul de instruc țiuni 8051 ______________________________________ 108
4.2.2 Modurile de adresare _________________________________________ 110
4.3 ALTE I NTERFE ȚE ȘI PERIFERICE ON -CHIP ______________________________ 111
4.3.1 Interfa ța I2C (Siemens P80CL580)_______________________________ 111
4.3.2 Aria de num ărătoare programabil ă (PCA) _________________________ 113
4.3.3 MC cu interfa ță pentru RAM nevolatil – NVRAM (Dallas DS5000FP) __ 115
4.3.4 MC specializat pentru TV și video (PHILIPS 83C145) _______________ 115
4.3.5 MC cu arie configurabil ă (TRISCEND E5) ________________________ 116
4.4 S ISTEM MINIMAL CU 8051 __________________________________________ 118
4.5 D ATE COMPARATIVE PENTRU MC DIN FAMILIA MCS-51___________________ 119
MICROCONTROLLERE RISC _________________________________________ 121
5.1 M ICROCONTROLLER PIC ___________________________________________ 121
5.1.1 PIC12 _____________________________________________________ 121
5.1.2 PIC16 _____________________________________________________ 1255.1.3 PIC17 _____________________________________________________ 127
5.2 MC ATMEL ____________________________________________________ 129
5.2.1 Familia AVR________________________________________________ 1295.2.2 Familia ARM _______________________________________________ 138
CRITERII DE PROIECTARE ___________________________________________ 141
6.1 C
RITERIILE PENTRU ALEGEREA UNUI MC_______________________________ 141
6.2 ALGORITMUL PROIECT ĂRII SISTEMELOR CU MC __________________________ 143
6.3 P ROIECTAREA SISTEMELOR CU MC ÎN VEDEREA SIGURAN ȚEI ÎN EXPLOATARE __ 145
6.3.1 Cablajul imprimat ____________________________________________ 146
6.3.2 Ceasul de gard ă______________________________________________ 147
6.3.3 Programarea defensiv ă________________________________________ 147
APLICA ȚII___________________________________________________________ 149
7.1 IMPLEMENTAREA UNEI APLICA ȚII SIMPLE DE COMAND Ă ȘI CONTROL
DIGITAL _______________________________________________________ 149
7.1.1 Varianta de implementare cu microcontroller CISC__________________ 151
7.1.2 Varianta de implementare cu microcontroller RISC. _________________ 163
7.2 IMPLEMENTAREA INTERFE ȚELOR LA PROCES ___________________ 181
7.2.1 Convertoare A/D controlabile serial______________________________ 1827.2.2 Interfa țarea paralel ă a convertoarelor A/D _________________________ 189
7.2.3 Convertoare A/D complexe ____________________________________ 1957.2.4 Convertor D/A controlabil serial ________________________________ 201
7.2.5 Programarea unui sistem de dozare gravimetric ă dotat cu MC _________ 205
BIBLIOGRAFIE_______________________________________________________ 219

1
DESCRIERE GENERAL Ă
1.1 ISTORIC
Privind evolu ția istoric ă a opera ției de comand ă a unui proces putem
contura imaginea unui microcontroller (MC – se va folosi în continuare aceast ă
prescurtare pentru a numi un microcontroller). Un controller este un sistem folosit
pentru a comanda și a prelua st ări de la un proces sau un aspect al mediului
înconjur ător. La început un controller era un echipament de mari dimensiuni. Dup ă
apari ția microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de
miniaturizare a continuat, toate componentele necesare unui controller au fost
integrate pe acela și chip. S-a n ăscut astfel calculatorul pe un singur chip specializat
pentru implementarea opera țiilor de control; acesta este microcontroller-ul. Un
microcontroller este un circuit realizat pe un singur chip care con ține tipic:
• unitatea central ă;
• generatorul de tact (la care trebuie ad ăugat din exterior un cristal de cuar ț
sau în aplica ții mai pu țin preten țioase, un circuit RC);
• memoria volatil ă (RAM);
• memoria nevolatil ă (ROM/PROM/EPROM/EEPROM);
• dispozitive I/O seriale și paralele;
• controller de întreruperi, controller DMA, num ărătoare/temporizatoare
(timers ), covertoare A/D și D/A, etc.;
• periferice.
Prețul unui MC este redus din cauza cantit ăților mari în care se fabric ă.
Prețul mic al MC aduce cu sine și mic șorarea pre țului sistemelor de control (se
micșoreaz ă inclusiv costul proiect ării).
Diferen țele dintre microprocesor și unitatea central ă a MC se atenueaz ă în
timp. Astfel, marii constructori de procesoare au realizat ni ște circuite care s-ar
putea numi super-microcontroller-e, a șa cum sunt Motorola 68EC300, INTEL
386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.

2 MICROCONTROLLERE
Cu un MC se poate realiza un controller integrat ( Embedded Controller,
EC). Un controller integrat face parte dintr-un sistem construit cu un anumit scop,
altul decât calcule generale. Pe lâng ă MC, un controller integrat are nevoie de
hardware suplimentar pentru a- și îndeplini func ția.
Importan ța MC este dovedit ă incontestabil de pia ța care este în continu ă
creștere. Astfel, evolu ția vânz ărilor de MC în lume se reflrct ă în tabelele 1.1 și 1.2.
Tabelul 1.1
Evolu ția vânz ărilor MC în lume (în milioane dolari)
MC '90 '92 '94 '96 '97 '98 '99
(estimat)'00
(estimat)
4-bit 1393 1596 17611 849 18811 856 1816 1757
8-bit 2077 2862 4689 6553 7529 8423 92 199 7 15
16-bit 192 340 8 10 1628 2 191 2969 3678 4405
Tabelul 1.2
Evolu ția vânz ărilor MC în lume (în milioane buc ăți)
MC '90 '92 '94 '96 '97 '98 '99
(estimat)'00
(estimat)
4-bit 778 979 1063 1100 1096 1064 1025 970
8-bit 588 843 1449 2 123 2374 2556 268 1 2700
16-bit 22 45 106 227 3 134 195 0 1 585
Principalii produc ători de microprocesoare au realizat în 1994 și 1995
următoarele cifre de afaceri (tabelul 1.3).
Tabelul 1.3
Cifre de afaceri realizate în anii 1994, 1995 din vânzarea de microprocesoare
(în milioane dolari)
Produc ător 1994 1995
Intel 10800 8036
AMD 88 1 992
Motorola 78 1 827
IBM 468 297
TI 2 19 202
Cyrix 2 10 240
Hitachi 188 66
NEC 100 82
LSI Logic 58 5 1
IDT 45 25

1. Descriere general ă 3
În prezent datele arat ă modific ări de structur ă; de exemplu cifra de afaceri
a AMD se apropie de cea a lui INTEL. Cifra de afaceri, ca ordin de m ărime, era
deja în anii 1994, 1995 apropiat ă de cea realizat ă din vânz ări de microprocesoare
(tabelul 1.4).
Tabelul 1.4
Cifre de afaceri realizate în anii 1994, 1995 din vânzarea de microcontrollere
(în milioane dolari)
Produc ător 1994 1995
Motorola 17811 511
NEC 14211 208
Mitsubishi 945 708
Hitachi 899 782
Intel 835 605
TI 807 534
Philips 524 345
Matsushita 500 4 13
Lucent (AT&T) 492 275
Toshiba 400 328
1.2 SCHEMA BLOC GENERAL Ă
Vom defini un microcontroller pornind de la o reprezentare simplificat ă a
sa în interac țiune cu mediul (figura 1.1).
Memoria
Unitatea
central ă
de
prelucrare
Generator de
tactIntrăriIeșiriPrograme
Figura 1.1 Schema simplificat ă a unui microcontoller

4 MICROCONTROLLERE
Ca intr ări se folosesc de regul ă semnale provenind de la comutatoarele
individuale sau de la traductoare (de temperatur ă, de presiune, foto, traductoare
specializate). Intr ările pot fi digitale sau analogice. Intr ările digitale vehiculeaz ă
semnale discrete, informa ția "citit ă" fiind informa ția ce se e șantioneaz ă la
momentul citirii liniei respective. Intr ările analogice vehiculeaz ă informa ții
exprimabile prin func ții continue de timp. "Citirea" acestora de c ătre
microcontroller presupune prezen ța unor circuite capabile s ă prelucreze aceste
informa ții, fie comparatoare analogice, fie convertoare analog-numerice, ale c ăror
ieșiri sunt citite de c ătre MC.
Ieșirile sunt fie analogice, caz în care reprezint ă de fapt ie șiri ale
convertoarelor numeric-analogice, fie sunt digitale, caz în care informa ția este în
general memorat ă pe acestea pân ă la o nou ă scriere operat ă de c ătre UC la un port
al MC. Ie șirile pot comanda dispozitive de afi șare, relee, motoare, difuzoare, etc.
O structur ă mai detaliat ă, care include blocurile principale, este
reprezentat ă în figura 1.2.
Memorie pentru
programe
Memorie pentru
date
Dispozitive I/O
Unitatea centrala de prelucrare
(UCP)
OscilatorIntrări
digitaleIeșiri
digitaleBus dedate Bus deadrese
Reset
Figura 1.2 Schema bloc a unui microcontroller

1. Descriere general ă 5
Se poate distinge o prim ă diferen ță față de calculatoarele personale, unde
intrările se fac de regul ă de la tastatur ă și ieșirile pe monitorul TV sau la
imprimant ă. Dac ă un calculator personal este folosit pentru a prelucra informa ții și
a afișa rezultatele pe monitor sau hârtie, un MC comand ă un proces.
Un element important, f ără de care un MC nu poate func ționa, este
programul (sau programele), care se stocheaz ă în memoria proprie MC.
Un MC poate fi definit ca un sistem de calcul complet pe un singur chip.
Acesta include o unitate central ă, memorie, oscilator pentru tact și dispozitive I/O.
Un MC poate fi privit ca un microprocesor care pe acela și chip mai con ține
memorie și o serie de interfe țe. Natura și complexitatea aplica ției în care este
folosit MC determin ă performan țele unit ății centrale, capacitatea de memorie și
tipul interfe țelor ce compun structura intern ă a MC.
1.3 ARHITECTURA MC
Arhitectura unui MC define ște atributele sistemului a șa cum sunt ele
văzute de un programator în limbaj de asamblare. Deoarece un microcontroller este
un caz particular de calculator, (calculator specializat pentru opera ții I/O, realizat
pe un singur chip), acesta este compus din cele cinci elemente de baz ă: unitate de
intrare, unitate de memorie, unitate aritmetic ă și logic ă, unitate de control și unitate
de ie șire. Unitatea de control împreun ă cu unitatea aritmetic ă și logic ă compun
împreun ă unitatea central ă de prelucrare pe care o vom referi în continuare
prescurtat cu UCP. Unit ățile de intrare și ieșire vor fi tratate împreun ă și vor fi
referite prescurtat ca sistem I/O.
Blocurile componente ale MC sunt legate între ele printr-o magistral ă
intern ă (bus). Magistrala vehiculeaz ă semnale de adres ă, de date și semnale de
control. M ărimea acestor magistrale constituie una dintre caracteristicile cele mai
importante ale unui MC. Prin magistrala de adrese unitatea central ă de prelucrare
(UCP) selecteaz ă o loca ție de memorie sau un dispozitiv I/O, iar pe magistrala de
date se face schimbul de informa ție între UCP și memorie sau dispozitivele I/O.
Între UCP și memorie sunt transferate atât date cât și instruc țiuni. Acestea se pot
transfera pe o singur ă magistral ă de date sau pe magistrale de date diferite.
Arhitectura von Neumann prevede existen ța unui bus unic folosit pentru
circula ția datelor și a instruc țiunilor. Când un controller cu o astfel de arhitectur ă
adreseaz ă memoria, bus-ul de date este folosit pentru a transfera întîi codul
instruc țiunii, apoi pentru a transfera date. Accesul fiind realizat în 2 pa și, este
destul de lent.
Arhitectura Harvard prevede un bus separat pentru date și instruc țiuni.
Când codul instruc țiunii se afl ă pe bus-ul de instruc țiuni, pe bus-ul de date se afl ă

6 MICROCONTROLLERE
datele instruc țiunii anterioare. Structura MC este mai complex ă, dar performan țele
de vitez ă sunt mai bune.
Magistralele interne, dup ă numele lor, nu sunt accesibile în exterior la
nivel de pin. Aceast ă stare caracterizeaz ă regimul normal de func ționare. În
regimuri speciale de func ționare, numite diferit la diferitele tipuri de MC,
semnalele magistralelor de adrese și de date sunt accesibile la nivel de pin
sacrificând func țiile ini țiale ale pin-ilor respectivi. Totodat ă este necesar s ă fie
livrate în exterior și semnale de comand ă (cel pu țin comand ă de scriere – WR și
comand ă de citire – RD). Aceast ă facilitate este util ă pentru extensii de memorie
sau pentru a ata șa sistemului interfe țe suplimentare. Ea nu este posibil ă în mod
normal de func ționare deoarece aceasta ar presupune existen ța unui num ăr foarte
mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese și de date pot fi
aduse la pin multiplexat sau nemultiplexat. Familia MCS-5 1 este un exemplu
pentru acces multiplexat la magistrale. Accesul se face în doi pa și; în primul pas se
conecteaz ă liniile de adres ă la pinii portului “sacrificat”, iar în al doilea pas se
conecteaz ă datele la aceia și pini. Pentru a putea utiliza informa ția de adresare,
adresa se memoreaz ă într-un latch, de asemenea exterior microcontroller-ului.
Complicarea accesului la magistralele interne prin multiplexare este justificat ă de
asemenea din ra țiunea men ținerii unui num ăr cât mai mic de pini la capsul ă. MC
mai pu țin performante (ex. – MC low cost) nu au magistralele interne accesibile la
nivel de pin.
Ca urmare a celor prezentate se poate aprecia performan ța unui MC din
punct de vedere al magistralei interne dup ă urm ătoarele criterii:
• dimensiunea magistralei de date;
• dimensiunea magistralei de adrese;
• accesibilitatea în exterior la magistrale;
• magistrale accesibile multiplexat sau nemultiplexat.
1.3.1 Unitatea central ă de prelucrare
Unitatea central ă de prelucrare este compus ă din unitatea aritmetic ă și
logic ă (UAL) și din unitatea de control.
Unitatea aritmetic ă și logic ă este sec țiunea responsabil ă cu efectuarea
opera țiilor aritmetice și logice asupra operanzilor ce îi sunt furniza ți. Modul de
implementare a opera țiilor este transparent pentru utilizator; important pentru
utilizatorul de MC este repertoriul opera țiilor implementate pentru a aprecia
posibilitatea implement ării optime a aplica ției particulare de control. De asemenea
este important timpul de execu ție al fiec ărei opera ții pentru a aprecia dac ă timpul
necesar proces ării complete satisface cerin țele de timp ale aplica ției.
Unitatea ce control este responsabil ă cu decodificarea codului opera ției
conținut de codul unei instruc țiuni. Pe baza decodific ării unitatea de control

1. Descriere general ă 7
elaboreaz ă semnale pentru comanda celorlalte blocuri func ționale pentru a finaliza
executarea unei instruc țiuni. Modul de implementare al acestui bloc este de
asemenea transparent utilizatorului.
Unitatea central ă de prelucrare con ține un set de registre interne, similare
unor loca ții de memorie, folosite pentru memorarea unor date des apelate sau
pentru programarea unor anumite func ții. Diferitele familii de MC folosesc seturi
diferite de registre. Exist ă însă câteva registre comune.
A (Accumulator ) – registrul acumulator – este folosit deseori pentru a stoca
un operand și rezultatul opera ției aritmetice sau logice.
PC ( Program Counter ) – registru num ărător de program – este registrul
care stocheaz ă adresa urm ătoarei instruc țiuni de executat. Dup ă un RESET
(inițializarea MC), registrul PC se încarc ă dintr-o loca ție de memorie numit ă vector
de reset. Aceast ă loca ție con ține adresa primei instruc țiuni de executat. PC este
incrementat automat la execu ția unei instruc țiuni.
SP (Stack Pointer ) – registrul indicator de stiv ă – con ținutul acestui registru
indic ă adresa curent ă a stivei. Stiva reprezint ă o zon ă de memorie accesibil ă rapid
în care se depun temporar informa ții importante în desf ășurarea programului. Stiva
este definit ă de obicei în RAM. Implementarea accesului presupune existen ța unui
registru de adresare (SP) și a mecanismului de memorare declan șat de instruc țiuni
specifice (instruc țiunile PUSH/POP).
Un aspect important ce se reflect ă în arhitectura unui MC este modul de
programare. Prin arhitectur ă înțelegem felul în care sunt dispuse "resursele" unui
MC. Cu cât structura, func ționalitatea și accesul la acestea sunt mai profund
standardizate și simetrizate, cu atât num ărul de instruc țiuni de care dispune MC
este mai redus și viteza de execu ție a programelor cre ște.
Conceptul CISC (Complex Instruction Set Computer) pe baza c ăruia sunt
construite majoritatea MC, prevede existen ța unui num ăr mare de instruc țiuni (tipic
>80), ceea ce face mai u șoară munca programatorului. Multe din instruc țiuni sunt
specializate, adic ă se pot folosi doar în anumite moduri de adresare sau cu anumite
registre.
Evolu ția MC este spre arhitectura RISC (Reduced Instruction Set
Computer), în cadrul c ăreia un MC are un num ăr mic de instruc țiuni. Avantajele
sunt un chip mai mic, cu un num ăr de pini mai mic, cu un consum mai redus și cu
o vitez ă mai mare. Instruc țiunile sunt simetrice, adic ă pot fi folosite la fel în orice
mod de adresare sau cu orice registru, nu au excep ții sau restric ții.
În prezent un MC este cu mai mult decât o arhitectur ă RISC, el este cu o
arhitectur ă SISC (Specific ISC). Instruc țiunile sunt specifice pentru a lucra optim
cu dispozitivele I/O, permit manipularea la nivel de bit și sunt mai pu ține
instruc țiuni de uz general, a șa cum întâlnim la microprocesoarele 8086, 68000 etc.
În general MC cu arhitectur ă CISC dispun de un num ăr redus de registre.
Acestea au func ții determinate (acumulator, registru index,etc), iar MC cu
arhitectur ă RISC dispun de un num ăr mai mare de registre cu un mare grad de
ortogonalitate ceea ce înseamn ă că pot fi folosite simetric în orice mod de adresare
(ATMEL AVR are 32 de registre)

8 MICROCONTROLLERE
Registrele interne pot avea diferite dimensiuni, astfel registrele acumulator
au dimensiunea egal ă cu cea a magistralei de date (8, 16 sau 32 bi ți). Registrul
numărător de program are dimensiunea egal ă cu cea a magistralei de adrese.
Registrul indicator de stiv ă poate avea dimensiunea mai mic ă decât a magistralei
de adrese permi țând localizarea stivei într-o zon ă restrâns ă a memoriei RAM.
Exist ă și MC cu stiv ă automat ă, acestea nu au nevoie de indicator de stiv ă dar au
dezavantajul c ă nu se pot folosi mai mult de 2-4 nivele de stiv ă (MC din familia
PIC).
1.3.2 Memoria
MC folosesc diferite tipuri de informa ții, care sunt stocate în diferite tipuri
de memorii. Instruc țiunile care controleaz ă func ționarea MC trebuie stocate într-o
memorie nevolatil ă, unde informa țiile se p ăstreaz ă și dup ă oprirea și repornirea
sursei de alimentare. Rezultatele intermediare și variabilele pot fi înscrise într-o
memorie volatil ă, la acestea este important s ă se poat ă face scrierea /citirea rapid și
simplu în timpul func ționării.
Memoria RAM ( Random Access Memory ) este o memorie volatil ă care
poate fi citit ă sau scris ă de unitatea central ă. Loca țiile din RAM sunt accesibile în
orice ordine. Pe chip, memoria RAM ocup ă mult loc și implicit costurile de
implementare sunt mari. De aceea un MC include de obicei pu țin RAM. Memorie
RAM static alimentat ă de la baterie se folose ște pentru stocarea nevolatil ă a
cantit ăților mari de date, la o vitez ă de acces mare și cu un num ăr nelimitat de
ștergeri și reînscrieri.
Memoria ROM ( Read Only Memory ) este cea mai ieftin ă și cea mai simpl ă
memorie și se folose ște la stocarea programelor în faza de fabrica ție. Unitatea
central ă poate citi informa țiile, dar nu le poate modifica.
Memoria PROM ( Programmable Read Only Memory ) este similar ă cu
memoria ROM, dar ea poate fi programat ă de c ătre utilizator. Dup ă posibilit ățile de
ștergere, aceast ă memorie poate fi de mai multe feluri:
Memoria EPROM ( Erasable PROM ) care se poate șterge prin expunere la
raze ultraviolete. MC cu EPROM au un mic geam de cuar ț care permite ca chip-ul
să fie expus la radia ția ultraviolet ă. Ștergerea este neselectiv ă, adic ă se poate șterge
doar întreaga informa ție și nu numai fragmente. Memoria poate fi ștears ă și
reînscris ă de un num ăr finit de ori. Programarea EPROM-ului necesit ă o procedur ă
special ă, iar MC cu EPROM au nevoie de regul ă pentru înscrierea EPROM-ului de
o tensiune auxiliar ă, de 12 V de exemplu. Unele MC au incluse circuite de
programare a memoriei EPROM, cu ajutorul c ărora unitatea central ă poate
programa memoria EPROM. În timpul program ării memoria EPROM nu este
conectat ă la magistrala de date și adrese. Unele MC sunt prev ăzute cu mod special
de lucru, în care sunt v ăzute din exterior ca ni ște memorii EPROM obi șnuite și pot
fi astfel programate cu orice programator.

1. Descriere general ă 9
OTP ( One Time Programmable PROM ) se folose ște pentru multe serii de
MC. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat
într-o capsul ă de material plastic f ără fereastr ă, care este mult mai ieftin ă. Memoria
nu se poate șterge sau reprograma. Pre țul unui MC cu OTP este mic, viteza este
bună, dar aplica țiile sunt lipsite de flexibilitate.
Memoria EEPROM ( Electrically Erasable Programmable Read Only
Memory ) poate fi ștears ă electric de c ătre unitatea central ă, în timpul func ționării.
Ștergerea este selectiv ă, iar pentru reînscriere trebuie parcur și mai mul ți pași.
Memoria EEPROM echipeaz ă multe MC, fiind ieftin ă. În memoria EEPROM se
memoreaz ă un mic num ăr de parametri care se schimb ă din timp în timp. Memoria
este lent ă și num ărul de ștergeri/scrieri este limitat (tipic 10 000).
Memoria FLASH este o memorie asem ănătoare EPROM și EEPROM în
sensul c ă poate fi ștears ă și reprogramat ă în sistemul în care este folosit ă (fără a fi
necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesit ă fereastr ă
pentru ștergere. Ca și EEPROM, memoria FLASH poate fi ștears ă și programat ă
electric. Memoria FLASH nu permite ștergerea individual ă de loca ții, utilizatorul
poate s ă ștearg ă doar întregul con ținut.
Din punct de vedere al locului și modului de programare a memoriilor de
tip PROM exist ă două concepte:
• ICP ( In Circuit Programming ) – programarea memoriei când MC se
află pe placa de cablaj imprimat a aplica ției;
• ISP ( In System Programming ) – presupune posibilitatea de
reprogramare în func ționare a sistemului. De exemplu la
autovehiculele comandate de MC, schimbarea tipului benzinei sauschimbarea unei legi privitoare la poluare pot fi actualizate în
programul MC f ără ca acesta s ă fie scos din autovehicul.
În func ție de num ărul aplica țiilor în care urmeaz ă să fie folosit MC se
recomand ă folosirea MC cu ROM pentru volum mare de produc ție (ROM se
înscrie cu masc ă la fabricant), OTP pentru volum mic de produc ție și EPROM
pentru prototipuri.
Tipul de memorie și capacitatea memoriei din echiparea unui MC sunt
caracteristici particulare fiec ărui tip de circuit. Printre alte diferen țe, ace ști
parametri sunt diferi ți pentru membrii unei aceleia și familii de MC. Se vor
prezenta date concrete pentru exemplificare într-un tabel recapitulativ la sfâr șitul
capitolului (tabelul 1.6).
Pentru a aprecia un MC sub aspectul componentei memorie este necesar s ă
se considere urm ătoarele caracteristici:
• varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM
/EEPROM /FLASH;
• capacitatea memoriei aflat ă pe chip;
• ușurința cu care se poate programa (programare în circuit sau nu,
necesitatea unor tensiuni de programare suplimentare).

10 MICROCONTROLLERE
1.3.3 Dispozitive I/O
Dispozitivele I/O reprezint ă un aspect de mare interes atunci când este
vorba de microcontroller-e, interes rezultat din îns ăși particularitatea unui MC:
aceea de a interac ționa cu mediul în procesul de control pe care îl conduce.
Dispozitivele I/O implementeaz ă func ții speciale degrevând unitatea
central ă de toate aspectele specifice de comand ă și control în func ția respectiv ă.
Exist ă o varietate mare de dispozitive I/O; dispozitivele I/O conduc opera ții
generale de comunica ție (transfer serial sau paralel de date), func ții generale de
timp (num ărare de evenimente, generare de impulsuri), opera ții de conversie
analog/numeric ă, func ții de protec ție, func ții speciale de comand ă, și enumerarea
poate continua. Parte din resurse acoper ă func țiile de control propriu-zis, iar o parte
asigur ă func țiile necesare aplica țiilor în timp real (sistemul de întreruperi, timer).
Din aceast ă mare varietate, parte din dispozitive se g ăsesc în configura ția
tuturor MC sau sunt foarte des întâlnite, iar o alt ă parte de dispozitive o reg ăsim
doar în MC construite pentru a optimiza aplica ții cu un grad mare de
particularitate. În acest capitol, în continuare, vor fi prezentate dispozitive des
întâlnite în echiparea MC. În capitolele urm ătoare, pe m ăsură ce vor fi prezentate
exemple de MC, vor fi descrise și o serie de dispozitive I/O speciale ce intr ă în
componen ța acestora.
Dispozitivele I/O sunt “v ăzute” de unitatea central ă ca porturi. Exist ă două
filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de c ătre unitatea
central ă. Porturile sunt mapate fie în spa țiul de memorie, fie într-un spa țiu propriu.
Cele dou ă metode sunt exemplificate la MC produse de Motorola și MC produse
de Intel. La MC Motorola dispozitivele I/O ocup ă adrese într-un spa țiu comun cu
memoria, ceea ce atrage dup ă sine reducerea num ărului de loca ții de memorie. MC
de la Intel folosesc un semnal care indic ă dacă la adresa curent ă se apeleaz ă o
locație de memorie sau un dispozitiv I/O.
Avantajele map ării în spa ții separate:
• Metoda nu este susceptibil ă de a provoca erori soft deoarece se
folosesc instruc țiuni diferite pentru a accesa memoria și dispozitivele
I/O;
• Dispozitivele I/O nu ocup ă spațiu de memorie;
• Decodificatorul de adrese pentru dispozitivele I/O este mai simplu
deoarece spa țiul de adresare al dispozitivelor I/O este mai mic.
Dezavantaje ale map ării în spa ții separate:
• instruc țiunile I/O sunt mai pu țin flexibile în compara ție cu
instruc țiunile de lucru cu memoria;
• instruc țiunile I/O nu permit folosirea modurilor de adresare folosite în
lucrul cu memoria.
Avantajul map ării în spa țiu comun:

1. Descriere general ă 11
• toate instruc țiunile de lucru cu memoria și toate modurile de adresare
sunt utilizabile și în tratarea dispozitivelo I/O (programarea opera țiilor
I/O este foarte flexibil ă);
Dezavantajele map ării în acela și spa țiu:
• este susceptibil la erori software;
• spațiul de adresare disponibil pentru memorie este mai mic.
Avantajul map ării într-un spa țiu comun este acela c ă se poate opera cu
porturile la fel ca și cu o loca ție de memorie; multe opera ții aritmetice și logice
folosesc operanzi direct de la port, datele pot fi mutate între porturi cu o singur ă
instruc țiune, con ținutul unui port poate fi citit, incrementat și rezultatul scris din
nou la port de asemenea cu o singur ă instruc țiune.
Se contureaz ă trei direc ții de evolu ție a MC din punct de vedere al
resurselor disponibile pe chip. O direc ție este dezvoltarea de MC de uz general care
sunt puse la dispozi ția utilizatorului pentru a realiza aplica ții “de la A la Z”. O a
doua direc ție o reprezint ă dezvoltarea de MC specializate care dispun de resurse
specifice unui anume gen de aplica ții (automobile, telecomunica ții, Internet,
acționări electrice, etc). Pentru aceste MC specializate atât structura hardware cât și
instruc țiunile sunt specifice și sunt calate pe un gen particular de aplica ții. Exist ă o
a treia tendin ță de dezvoltare de MC care dispun de resurse hardware configurabile
la utilizator. Între resursele configurabile se afl ă memoria, elemente de logic ă
programat ă, module specializate, gen convertoare A/D și convertoare D/A, și
module de procesare avansat ă a datelor.
Porturi paralele
Porturile paralele I/O faciliteaz ă transferul simultan al mai multor bi ți între
MC și mediu. Num ărul de bi ți transfera ți ca urmare a execut ării unei instruc țiuni
depinde de organizarea particular ă a porturilor în cadrul MC; unele porturi sunt
organizate pe 8 bi ți, altele pe un num ăr mai mare de bi ți. Sensul transferului, I
(input ) sau O ( output ) este programabil și se stabile ște de obicei într-un registru de
sens. Pentru a veni în întâmpinarea cerin țelor specifice de interac țiune cu mediul
sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilorparalele I/O. Mecanismul presupune o structur ă hardware corespunz ătoare și
instruc țiuni pentru manipularea informa ției la nivel de bit (un operand este un bit).
Astfel, la execu ția unei instruc țiuni orientat ă pe bit, exist ă posibilitatea de a
transfera un singur bit, de a masca bi ți care nu sunt folosi ți într-o opera ție
particular ă și de a efectua opera ții logice pe un singur bit al unui port paralel I/O.
Datorit ă capabilit ății de manipulare la nivel de bit la descrierea caracteristicilor
sistemului paralel I/O se specific ă num ărul total de linii I/O.
MC68HC705C8 dispune de 3 1 de linii I/O digitale de uz general grupate în patru
porturi (A, B, C și D). Porturile A, B, și C sunt porturi de câte opt bi ți fiecare și pun

12 MICROCONTROLLERE
la dispozi ție în total 24 de linii care pot fi folosite fie ca intr ări, fie ca ie șiri. Portul D
dispune de 7 linii care pot fi folosite doar ca int ări.
Circuitul de interfa ță al portului paralel este responsabil de corectitudinea
transferului cu dispozitivul I/O. În acest scop se foloseste una din urm ătoarele
metode de sincronizare:
• Transfer direct ( brute-force method ) – în cadrul acestei metode interfa ța are
doar rolul de a transfera semnalele de la unitatea central ă spre dispozitivul I/O
(dacă este o opera ție de ie șire) sau de la dispozitivul I/O la unitatea central ă
(dacă este o opera ție de intrare). Se folose ște acest tip de transfer dac ă se
citește nivelul unui poten țial, dac ă se comand ă la ie șire un nivel logic (pentru
comanda unor LED-uri, de exemplu).
• Transfer strobat ( strobe method ) – aceast ă metod ă folose ște semnale de
strobare pentru a indica starea stabil ă a semnalelor la porturile de intrare sau de
ieșire. Într-o opera ție de intrare, dispozitivul de intrare genereaz ă semnalul de
strobare când datele sunt stabile la pinii portului de intrare al interfe ței.
Stocarea informa ției în registrul de date al interfe ței se face cu semnalul de
strobe. Daca este vorba de o opera ție de ie șire, când semnalele de date sunt
stabile, interfa ța elaboreaz ă semnal de strobare cu care dispozitivul I/O preia
efectiv datele. Aceat ă metod ă poate fi folosit ă dacă interfa ța și dispozitivul I/O
lucreaz ă la viteze comparabile.
• Transfer cu protocol ( handshake method ) – exist ă cazuri în care vitezele de
lucru ale celor dou ă părți implicate în transfer sunt mult diferite și metodele
mai sus amintite nu ofer ă cadrul potrivit pentru transferul datelor. Solu ția este
ca interfa ța și dispozitivul I/O s ă poarte un dialog numit handshake. Sunt
necesare dou ă semnale de protocol; unul din ele este elaborat de circuitul de
interfa ță iar cel ălalt de dispozitivul I/O. Tranzac țiile de protocol difer ă pentru
opera ții de intrare și de ie șire.
În figura 1.3 este ilustrat ă organizarea portului A al unui circuit particular
(MC68HC705C8).
Bit 7 6 5 4 3 2 1 Bit 0
DDRA7 DDRA6 DDRA5 DDRA4 DDRA3 DDRA2 DDRA 1 DDRA0
0 0 0 0 0 0 0 0
Starea registrelor de ie șire nu este influen țată de Reset PA7 PA6 PA5 PA4 PA3 PA2 PA 1 PA0
Figura 1. 3 Organizarea portului paralel A (MC68HC705C8)

1. Descriere general ă 13
Registrul DDRA ( Data Direction Register port A ) este un registru de 8 bi ți
ca și registrul de date PA al portului A . Sub fiecare din registre este reprezentat ă
starea ini țială a registrelor (dup ă reset). În cazul particular considerat, portului PA
este implicit port de intrare.
O structur ă posibil ă de circuit pentru o linie bidirec țional ă de scriere/citire
la porturi este redat ă în figura 1.4. Se poate constata modul în care ac ționeaz ă bitul
din registrul de sens asupra circuitului driver de ie șire.
În partea stâng ă a diagramei sunt reprezentate leg ăturile spre magistrala
intern ă de date a MC. În func ție de natura opera ției efectuate (citire sau scriere) și
de valoarea bitului din registrul de direc ție sunt posibile opera țiile exprimate în
tabelul 1.5.
Tabelul 1.5
Func țiile unui pin I/O
Opera ție Bit DDR Func ție pin I/O
scriere 0 Pinul I/O este în mod intrare;
datele pentru scriere vor fi înscrise în latch-ul de ie șire
scriere 1 Datele pentru scriere sunt înscrise în latch-ul de ie șire
și transferate de buffer-ul [ 1] pinului I/O
citire 0 Este citit ă starea pinului I/O
citire 1 Pinul I/O este în mod ie șire; este citit ă informa ția din
latch-ul de ie șire.
Se poate observa c ă o linie de ie șire a unui port paralel este mai mult decât
un latch simplu; totodat ă, informa ția înscris ă în latch-ul de ie șire nu se schimb ă
decât dac ă se efectueaz ă o nou ă opera ție de scriere la port.
Unele porturi paralele sunt considerate cvasi-bidirec ționale, ceea ce
înseamn ă că o linie poate fi folosit ă în acela și timp ca ie șire și ca intrare. Aceast ă
flexibilitate este considerat ă de interes în aplica ții și este posibil ă printr-un “truc”.Bit
DDR
Bit port ie șire
(latch)[1]
[2][3]pin
I/O
[1] Buffer de ie șire
[2] Buffer de intrare
(activ pentru DDR=0)
[3]Buffer de intrare
(activ pentru DDR= 1)
Figura 1.4 Circuit bidirec țional de scriere/citire la portul paralel

14 MICROCONTROLLERE
Figura 1.5 reprezint ă structura unei linii cvasi-bidirec ționale. Trucul const ă în
exploatarea facilit ăților unui etaj de ie șire cu drena în gol ( open-drain ) care în acest
exemplu este pev ăzut cu o rezisten ță conectat ă intern la sursa de alimentare.
Fiecare linie poate fi folosit ă independent ca intrare sau ca ie șire. Pentru a
fi folosit ă ca intrare este necesar ca latch-ul s ă fie înscris cu unu logic (nQ va fi în
acest caz zero) pentru ca tranzistorul n 1 să fie blocat. Dac ă nu este ata șat nimic la
pin, rezisten ța intern ă de pull-up va determina citirea unui unu logic la pin. Dac ă
linia este for țată exterior în zero logic, etajul va genera curent prin rezisten ța de
pull-up, iar informa ția citit ă va fi un zero logic. Exist ă structuri mai complicate
care în unele situa ții necesit ă conectarea în exterior a unei rezisten țe de pull-up.
Pentru a interac ționa cu mediul unui MC îi sunt necesare multe conexiuni
la nivel de pin, ceea ce înseamn ă un circuit cu un num ăr mare de pini. Din
considerente de fiabilitate și economice se caut ă reducerea num ărului de pini ai
unui circuit integrat. În aceast ă situa ție a fost necesar un compromis în urma c ăruia
s-a ajuns la solu ția prin care se atribuie unui pin func ții multiple (dou ă sau mai
multe). Pinii astfel sacrifica ți sunt pinii portului paralel. La pinii porturilor paralele
sunt accesibile celelalte resurse ale circuitului; pot fi amintite conexiunile
interfe țelor seriale, conexiunile cu exteriorul ale modulelor timer, canalele de
intrare ale convertoarelor A/D, liniile pentru generarea întreruperilor externe.
În mod normal de operare magistralele interne ale unui MC nu sunt
accesibile în exterior, la nivel de pin. Exist ă situa ții în care este necesar ă extensia
resurselor (extensia memoriei, spre exemplu) caz în care este necesar accesul la
magistralele interne. Pentru rezolvarea acestei probleme sunt folosi ți tot pinii
porturilor paralele. Din nou, pentru economie de pini “sacrifica ți“, aceia și pini sunt
folosi ți consecutiv pentru a vehicula adrese și apoi date. Deoarece adresele folosesc
liniile doar ca ie șiri, adresa este disponibil ă la pinii portului paralel în timpul
primului ciclu de ceas al execu ției unei instruc țiuni. Adresa este memorat ă în
circuite exterioare (în latch-uri). În al doilea ciclu de ceas se vehiculeaz ă pe acestepin
I/OD
CLKQ
Q n1Pull-up
internVCCCitire latch
Citire pinScriere latchBus intern
Figura 1.5 Structura unei linii cvasi-bidirec ționale

1. Descriere general ă 15
linii datele. Modul de lucru în care magistralele interne sunt disponibile la pini este
numit mod expandat de lucru.
Pentru a evalua capabilitatea porturilor paralele se recomand ă considerarea
următoarelor însu șiri:
• Num ărul de linii I/O;
• Posibilitatea de a programa sensul liniilor I/O;
• Alte resurse accesibile prin func ții multiple la liniile I/O;
• Posibilitatea accesului la magistralele interne
• Aspecte electrice de interfa țare.
Module de comunica ții seriale
Comunica ția serial ă este o metod ă bine agreat ă și în contextul MC
deoarece ofer ă compatibilitate cu o gam ă extins ă de dispozitive și necesit ă un
număr minim de fire, implicit un num ăr minim de conexiuni (pini pu țini).
În transferul serial de date este necesar s ă se cunoasc ă începutul și sfâr șitul
informa ției transferate. Pentru a identifica cele dou ă coordonate emi țătorul și
receptorul trebuie s ă fie sincroniza ți. Sincronizarea se poate realiza prin trei
metode, dintre care numai dou ă sunt folosite în MC, urmând s ă le consider ăm doar
pe acestea în continuare. Oricare din metode presupune c ă durata unui bit este
aceea și atât la emi țător cât și la receptor (este folosit acela și semnal de ceas pentru
serializarea informa ției). Num ărul de bi ți transmi și într-o secund ă reprezint ă rata
de transfer numit ă baud rate; aceasta se m ăsoară în bi ți/secund ă (bps). Durata unui
bit este 1/(baud rate).
Modulul serial asincron
Prima metod ă considerat ă este transferul serial asincron. Modulul serial
asincron este referit ca UART ( Universal Asynchronous Receiver Transmiter ).
Într-un transfer serial asincron începutul fiec ărui byte este marcat de o tranzi ție a
liniei men ținută pe durata corespunz ătoare unui bit. Sfâr șitul este marcat de
asemenea de un bit de stop; bitul de stop const ă în men ținerea liniei pe durata unui
bit într-o stare predefinit ă. Între bitul de start și bitul de stop sunt transfera ți biții de
informa ție. O secven ță complet ă este compus ă dintr-un bit de start, opt sau nou ă
biți de date și un bit de stop, în total 10 sau 11 unit ăți de cod. Interfa ța serial ă
asincron ă poate fi implementat ă în dou ă moduri într-un MC.
Cea mai pu țin costisitoare solu ție din punct de vedere al cheltuielilor de
resurse hardware este un program care s ă genereze secven ța de transfer ca și
componen ță și ca durat ă a fiec ărui bit. Programul trebuie s ă măsoare durata
fiecărui bit. Solu ția este costisitoare din punct de vedere al timpului consumat în
rularea programului.

16 MICROCONTROLLERE
A doua solu ție de implementare a interfe ței seriale este și cea mai des
întâlnit ă în MC. Interfa ța este realizat cu un modul hardware specializat. Unitatea
central ă înscrie informa ția de transferat într-un registru al interfe ței dup ă care
sarcina serializ ării și a gener ării secven ței este finalizat ă de c ătre hardware-ul
interfe ței. În cazul recep ției interfa ța preia secven ța recep ționat ă, extrage
elementele de sincronizare și înscrie datele efective într-un registru. Datele
recep ționate sunt accesibile unit ății centrale în acest registru al interfe ței. În cazul
în care registrul de transmisie este gol sau registrul de recep ție este plin interfa ța
semnalizeaz ă starea și poate chiar suspenda temporar execu ția programului
principal prin întreruperi hardware. O schem ă bloc simplificat ă a unei interfe țe
seriale asincrone este reprezentat ă în figura 1.6.
Ceasul pentru generarea ratei de transfer poate fi intern sau extern. În cazul
în care se selecteaz ă ceas intern, acesta se formeaz ă din ceasul unit ății centrale cu o
prescalare. Pentru ca rata de transfer s ă fie programabil ă ceasul prescalat se
divizeaz ă în continuare folosind un num ărător al unui timer din resursele proprii.
Interfa ța UART dispune de un registru de stare și un registru de control cu ajutorul
cărora se pot prgrama modul de lucru, parametrii de comunica ție, selectarea
ceasului, divizarea ceasului.
Conexiunile interfe ței seriale asincrone sunt disponibile la pini cu func ții
multiple la unul din porturile paralele. Magistrala intern ă
Registru de
deplasare la
recep țieRegistru de
deplasare la
transmisieCerere de întrerupere c ătre UC
Buffer
recep țieBuffer
transmisieRegistru de
prescalare
Baud rate
Selec ție ceas
CLK TxD RxD
Figura 1.6 Schema bloc a UART

1. Descriere general ă 17
Modulul serial sincron
Urm ătoarele dou ă metode de sincronizare posibile la transferul serial sunt
transfer serial sincron și transfer serial autosincronizat. Transferul autosincronizat
se bazeaz ă pe utilizarea unui sistem special de codificare a datelor. Sistemul
permite ca din datele recep ționate s ă se poat ă extrage semnalul de ceas. Aceast ă
metod ă nu este folosit ă în MC.
Transferul serial sincron este folosit pentru comunica ții locale între
procesoare sau cu dispozitivele periferice. În transferul sincron datele transferate
sunt înso țite de semnalul de clock. Semnalul de clock este transferat pe o linie
dedicat ă. Transferul serial sincron necesit ă trei conexiuni: emisie, recep ție și clock.
Interfa ța hardware este mai simpl ă decât la transferul asincron. Protocolul dintre
emițător și receptor include o scurt ă perioad ă de sincronizare la ini țierea unui
transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face
prin bitul de start al fiec ărui octet, la transferul sincron aceasta are loc o singur ă
dată, la începutul transferului unui bloc de date. Transferul serial sincron permite
rate de transfer mai mari decât transferul serial asincron; rate de 1Mbps.
Într-o conexiune serial ă sincron ă unul din dispozitive este master iar
celălalt este slave. Un transfer poate fi ini țiat doar de un master. Master-ul scrie un
octet în registrul de transmisie de date al interfe ței seriale sincrone. Datele sunt
transferate unui registru de deplasare unde sunt serializate și transmise pe linia de
emisie numit ă MOSI ( Master Output Slave Input ). Pe linia SCK ( Serial Clock ) este
transmis clock-ul. La slave datele ajung tot pe linia MOSI într-un registru dedeplasare unde sunt deplasate cu ceasul recep ționat pe linia SCK. La umplerea
registrului de deplasare datele sunt transferate în registrul de recep ție de date.
Conexiunile interfe ței seriale sincrone sunt disponibile la pini cu func ții
multiple la unul din porturile paralele. Pinii asocia ți unei conexiuni seriale sincrone
sunt urm ătorii:
MISO – Master In Slave Out – Pinul MISO este configurat ca intrare într-un
master și ieșire dintr-un slave. MISO este conexiunea prin care se transmit date
într-un sens (de la slave la master). Ie șirea MISO la un slave este în starea de înalt ă
impedan ță dacă dispozitivul slave nu este selectat.
MOSI – Master Out Slave In – Pinul MOSI este configurat ca ie șire dintr-un
master și intrare într-un slave. MOSI este cea de-a doua conexiune prin care se
transmit date în cel ălalt sens (de la master la slave).
SCK – Serial Clock – Pinul SCK este ie șire la un master și intrare la un slave. Prin
aceast ă conexiune se transmite semnalul de sincronizare pentru transferul datelor
pe liniile MISO și MOSI. Pe durata a opt perioade ale SCK se transfer ă între
master și slave un byte de informa ție.
nSS – non Slave Select – La pinul nSS se aplic ă semnalul care selecteaz ă un
dispozitiv slave; pentru un dispozitiv slave, semnalul trebuie s ă fie activ (low) pe
toată durata unei tranzac ții în care este implicat. Pentru un dispozitiv master,

18 MICROCONTROLLERE
intrarea nSS se conecteaza permanent la 1 logic; în cazul în care la master, intrarea
nSS devine 0, se seteaza un flag de eroare (MODF) în registrul de stare al interfe ței
seriale sincrone. Pinul nSS al unui master poate fi configurat și ca ie șire de uz
general prin setarea unui bit în registrul de sens DDRD. Ceilal ți trei pini, aminti ți
anterior, sunt dedica ți interfe ței sincrone atâta timp cât este validat ă.
În sistemele care folosesc func ția serial ă sincron ă exist ă un master și unul
sau mai multe dispozitive slave. Exist ă mai multe solu ții de interconectare; acestea
vor fi prezentate în continuare .
În cazul în care în sistem este un singur slave, conexiunea este f ăcută ca în
figura 1.7.
Interfa ța serial ă sincron ă permite interconectarea mai multor dispozitive,
dintre care unul singur este master. Exist ă dou ă solu ții pentru o conexiune multi-
slave. În una din ele master-ul folose ște ie șiri de porturi pentru a selecta
dispozitivul slave cu care se face transferul; în cealalt ă solu ție, toate dispozitivele
slave sunt selectate și sunt legate în inel. Conexiunea cu selec ția fiec ărui dispozitiv
slave este reprezentat ă în figura 1.8.
Un alt mod de a realiza o conexiune serial ă sincron ă în care exist ă mai
mult decât un slave este reprezentat în figura 1.9. Acest tip de conexiune difer ă de
precedentul prin urm ătaorele:
• Pinul MISO al fiec ărui slave este conectat la pinul MOSI al
dispozitivului slave vecin. Pinul MOSI de la master este în continuare
conectat la pinul MOSI de la primul slave.
• Pinul MISO de la master este conectat cu pinul MISO al ultimului
dispozitiv slave.
• Intrările nSS ale tuturor dispozitivelor slave sunt conectate la mas ă. Nu
este necesar ă comanad ă de selec ție de la master în aceast ă conexiune.SLAVE
Registru de
deplasare (8b)MASTER
Registru de
deplasare (8b)
generator
clockMISO MOSI
MOSI MISO
SCK SCK
nSS
nSS+5V
Figura 1.7 Conexiune serial ă sincron ă master-slave

1. Descriere general ă 19
Conexiunea din figura 1.9 folose ște un num ăr minim de pini pentru a
controla un num ăr mare de dispozitive. Ca dezavantaj, master-ul nu poate selecta
un anume slave pentru transferul de date, datele trec prin toate dispozitivele din
inel pân ă la dispozitivul adresat .
Interfa ța serial ă sincron ă este folosit ă pentru a comunica cu periferice cum
ar fi un simplu registru de deplasare, un sistem de afi șare LCD sau un sistem de
conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfa țaMOSI SCK MISO nSSRDSLAVE 0
MOSI SCK MISO nSSRDSLAVE 1
MOSI SCK MISO nSSRDSLAVE k
MASTER
RDSCK
MOSI
MISO
nSS
PB0
PB1
PBk+5V
Figura 1.8 Conexiune serial ă sincron ă single-master multi-slave (varianta 1)…….
MOSI SCK MISO nSSRDSLAVE 0
SCKMASTER
RDMOSI
MISO
nSSMOSI SCK MISO nSSRDSLAVE 1
+5VMOSI SCK MISO nSSRDSLAVE k
Figura 1.9 Conexiune serial ă sincron ă single-master multi-slave (varianta 2)…….

20 MICROCONTROLLERE
direct periferice cu standarde diferite, provenite de la diver și produc ători.
Conexiunea serial ă sincron ă poate fi folosit ă și pentru a extinde num ărul de
intrări/ieșiri acolo unde acesta este limitat de num ărul de pini ai capsulei MC.
Interfe țele seriale amintite sunt întâlnite în MC cu urm ătoarele nume:
SCI (Serial Communications Interface ) este un subsistem I/O serial
indepenent, de tipul full duplex asincron (UART) numit astfel în MC Motorola.
SPI (Serial Peripheral Interface ) este un modul serial folosit pentru a
comunica sincron la distan țe mici cu viteze de pân ă la 4 Mbps
SCI+ este similar cu SCI, are în plus suport pentru comunica ții seriale
sincrone. Dispune de o ie șire de ceas folosit ă pentru a transfera date în mod sincron
cu un periferic de tip SPI.
SIOP (Simple I/O Port ) este o implemenatre mai simpl ă a SPI.
Module Timer
Natura aplica țiilor pentru care s-a n ăscut microcontroller-ul implic ă o
multitudine de func ții de timp puse la dispozi ția utilizatorului prin module de timp
numite timer. Un MC este echipat în mod obligatoriu cu un astfel de modul mai
mult sau mai pu țin complex. Un sistem timer obi șnuit pune la dispozi ție un set de
funcții implementate pe baza unui num ărător liber central și a unor blocuri
funcționale pentru fiecare func ție în parte. Timer-ul are în structura sa, dintre toate
celelalte subsisteme, cele mai multe registre. Toate func țiile unui timer pot genera
întreruperi independente; fiecare are controlul propriu și propriul vector de
întrerupere.
Modulele timer complexe sunt construite cu arii de num ărare programabile
(PCA). Pentru aplica ții speciale în timp real s-au construit module timer cu unitate
aritmetic ă și logic ă proprie.
Timer-ul este folosit pentru a m ăsura timpul și pentru a genera semnale cu
perioade și frecven țe dorite. Timer-ele nu sunt doar circuite cu func ții de
temporizare; în modulul timer sunt implementate câteva mecanisme care pun la
dispozi ția utilizatorului func ții specifice. Mecanismul de comparare permite
controlul unor semnale de ie șire; mecanismul de captur ă permite monitorizarea
unor semnale de intrare; num ărătoarele interne permit generarea de referin țe de
timp interne, necesare în bucle de întârziere, multiplexarea diferitelor sarcinisoftware, ș.a. Timer-ul poate fi folosit practic pentru orice func ție de timp, inclusiv
generarea unor forme de und ă sau conversii D/A simple. Func țiile oferite de un
timer sunt:
1. Captur ă la intrare (IC – input capture ) – aceast ă func ție se bazeaz ă pe
posibilitatea de a stoca valoarea num ărătorului principal la momentul apari ției
unui front activ al unui semnal extern. Facilitatea permite m ăsurarea l ățimii
unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit ă și ca
referin ță de timp pentru declan șarea altor opera ții.

1. Descriere general ă 21
2. Comparare la ie șire (OC – output compare ) – se compar ă la fiecare impuls de
ceas valoarea num ărătorului principal cu cea a unui registru. Dac ă se constat ă
egalitate, în func ție de programarea anterioar ă pot avea loc urm ătoarele
evenimente: declan șarea unei ac țiuni la un pin de ie șire (op țional), setarea unui
flag într-un registru sau generarea unei întreruperi pentru unitatea central ă
(opțional). Func ția este folosit ă pentru a genera întârzieri sau pentru a genera o
form ă de und ă cu valori dorite pentru frecven ță și pentru factorul de umplere .
3. Întreruperi în timp real (RTI – real-time interrupt ) – într-un sistem exist ă
sarcini care trebuiesc executate periodic sau care nu permit dep ășirea unui
interval limit ă între doua execu ții. Aceste sarcini sunt lansate ca rutine de
tratare a întreruperii generate de timer.
4. COP ( computer operating properly ) watchdog – aceast ă func ție este folosit ă
pentru a reseta sistemul în cazul în care din erori de programare ( bugs ) sau
erori în desf ășurarea programului datorate perturba țiilor mediului, registrul
COP nu este accesat într-un interval de timp prescris.
5. Acumulare de pulsuri ( pulse accumulator ) – este func ția folosit ă pentru a
număra evenimentele ce apar într-un interval de timp determinat sau pentru a
măsura durata unui impuls.
Num ărătorul liber
În figura 1.10 sunt prezentate elementele de baz ă din componen ța unui
timer, partea de num ărător liber.
Num ărătorul este pilotat de un clock provenit din clock-ul unit ății centrale
divizat cu un factor de regul ă programabil. Num ărătorul este înscris cu 0 doar la
reset, iar în rest este un registru de tip read-only. Când num ărătorul tranzi ționeaz ă
din starea FFFFh în starea 0000h, se seteaza flag-ul TOF ( timer overflow ) aflatClock
MC:
1,4,8,16TCNT(H) TCNT(L)
Num ărător
16 bitiLa RTI, COP și
acumulator de impulsuriTOI
TOFCerere de
întrerupere
Figura 1.10 Schema bloc a unui timer (MC 68HC 11) – num ărătorul liber

22 MICROCONTROLLERE
într-un registru neopera țional asociat modulului timer. Pentru a autoriza generarea
unei întreruperi este necesar s ă fie setat un flag de autorizare (TOI).
Factorul de divizare a clock-ului este stabilit într-un registru asociat.
Registrul TCNT de 16 bi ți permite citirea st ării num ărătorului. Se
recomand ă citirea num ărătorului folosind o instruc țiune care opereaz ă pe 16 biți; în
acest fel ambii octe ți ai num ărătorului apar țin aceleia și stări de num ărare. Dac ă se
fac dou ă citiri, accesând pe rând partea mai semnificativ ă și partea mai pu țin
semnificativ ă, cele dou ă informa ții nu vor apar ține aceleia și faze de num ărare.
Captura la intrare
Unele aplica ții necesit ă cunoa șterea localiz ării în timp a momentului în
care are loc un eveniment. Într-un calculator, timpul fizic este reprezentat prin
conținutul unui num ărător, iar apari ția unui eveniment este reprezentat ă printr-o
tranzi ție de semnal. Momentul apari ției evenimentului poate fi înregistrat prin
memorarea st ării num ărătorului.
Func ția de captur ă la intrare este implementat ă de un circuit care are
schema bloc reprezentat ă în figura 1.11.
Timpul fizic este reprezentat de valoarea con ținută de num ărătorul liber.
La apari ția unui eveniment materializat printr-o tranzi ție la pinul ICx, con ținutul
numărătorului liber este preluat în latch-ul de 16 bi ți din blocul de captur ă.
Utilizatorul poate s ă valideze func ția de captur ă, poate s ă aleag ă frontul activ al
tranzi ției și poate s ă autorizeze generarea unei întreruperi c ătre unitatea central ă la
detectarea frontului activ. Dac ă un canal de captur ă nu este validat, pinul de intrare
ce îi este asociat poate fi folosit ca intrare de uz general. Întreruperile intr ărilor de
captur ă sunt vectorizate, fiec ărei întreruperi îi este alocat ă o pozi ție bine definit ă în
tabela vecorilor de întrerupere.
Func ția de captur ă are multe aplica ții, câteva din ele descrise pe scurt în
continuare:Latch
16 biți
TICxICxFICxI Cerere de
întrerupere
Detector de
tranzi țiiPin
ICx
Figura 1.11 Func ția de captur ă la intrare – schema bloc

1. Descriere general ă 23
1. Localizarea momentului apari ției unui eveniment – func ția de captur ă este
foarte util ă în cazul în care este necesar ă cunoa șterea momentelor la care au
avut loc evenimentele. Num ărul de evenimente monitorizate sub acest aspect
este limitat de num ărul de canale de captur ă ale MC.
2. Măsurarea perioadei – pentru m ăsurarea perioadei unui semnal necunoscut se
procedeaz ă la determinarea timpului scurs între dou ă tranzi ții consecutive de
acela și fel; dou ă fronturi pozitive consecutive sau dou ă fronturi negative
consecutive.
3. Măsurarea l ățimii unui impuls – Pentru a m ăsura l ățimea unui impuls se
măsoara timpul scurs între un front pozitiv și frontul negativ ce îi urmeaz ă.
Deoarece num ărătorul liber este un num ărător pe 16 biți, intervalul maxim
măsurabil cu un ciclu de num ărare este limitat la de 216 ori periada unui clock
(clock-ul num ărătorului). Dac ă se m ăsoară intervale mai mari, se va lua în
considerare și num ărul de tranzi ții de la valoarea maxim ă la 0 a num ărătorului
liber.
4. Generarea unei întreruperi – Fiecare canal de captur ă poate genera op țional o
întrerupere dac ă se detecteaz ă la intrarea de captur ă frontul stabilit a fi activ.
5. Num ărarea unor evenimente – considerând c ă un eveniment este reprezentat de
o tranzi ție de semnal, cu func ția de captur ă la intrare folosit ă în combina ție cu
funcția de comparare la ie șire, pot fi contorizate evenimentele ce apar într-un
interval de timp stabilit. La apari ția unui eveniment se genereaz ă o întrerupere;
în rutina de servire a întreruperii se incrementeaz ă un contor de evenimente
realizând astfel înregistrarea num ărului de apari ții. Sfâr șitul intervalului de
contorizare este stabilit cu ajutorul func ției de comparare la ie șire.
6. Referin ță de timp – aplica ția folose ște în combina ție func ția de captur ă la
intrare și func ția de comparare la ie șire. Dac ă utilizatorul dore ște să activeze un
semnal de ie șire la un interval dorit dup ă detectarea unui eveniment, se va
folosi func ția de captur ă la intrare pentru a stabili momentul apari ției
evenimentului de referin ță. Se va aduna la valoarea num ărătorului re ținută la
captur ă un num ăr dorit de cicluri de num ărare și se va transfera aceast ă valoare
registrului de comparare. Când num ărătorul liber atinge valoarea
comparatorului se va genera o întrerupere în rutina c ăreia se va activa ie șirea
dorit ă.
Comparare la ie șire
Scema bloc a componentei care realizez ă func ția de comparare este
reprezentat ă în figura 1.12.
Un canal de comparare const ă dintr-un comparator pe 16 biți, un registru
de comparare pe 16 biți, un circuit de generare de întreruperi, o ie șire de comparare

24 MICROCONTROLLERE
și o logic ă de comand ă. Un sistem timer dispune de mai multe canale de comparare
(68HC 11 are cinci canale de comparare).
Principala aplica ție a unei func ții de comparare este întreprinderea unei
acțiuni la un moment de timp viitor bine determinat, când num ărătorul liber atinge
o anumit ă valoare. Ac țiunea întreprins ă ar putea fi comutarea unui semnal,
acționarea unui întrerup ător electronic, aprinderea unui LED, etc. Pentru a folosi
funcția de comparare este necesar ă parcurgerea urm ătoarei secven țe:
1. se copiaz ă valoarea din num ărătorul liber (con ținutul registrului TCNT);
2. se adaug ă la copie o valoare determinat ă de întârzierea dorit ă;
3. se transfer ă rezultatul în registrul de comparare.
Acțiunea dorit ă la pinul ie șirii de comparare se specific ă anterior de c ătre
utilizator într-un registru asociat modulului. Comparatorul compar ă valoarea
numărătorului liber TCNT cu valoarea din registrul de comparare la fiecare clock.
Dacă se constat ă egalitate, se activeaz ă acțiunea specificat ă la pinul de comparare
și se seteaz ă flag-ul asociat. De asemenea, se va genera o întrerupere dac ă aceasta a
fost validat ă anterior prin bitul OcxI din registrul pentru validarea întreruperilor.
Întreruperile sunt vectorizate; fiecare canal are o a adres ă cunoscut ă în tabela
vectorilor de întrerupere.
Întreruperile în timp real – RTI
Func ția RTI este folosit ă pentru a genera periodic întreruperi; întreruperile
pot fi folosite pentru a comuta între aplica ții în sisteme multitasking sau pentru a
declan șa periodic execu ția unei secven țe. Perioada apari țiilor întreruperilor în timp
real este programabil ă. Ca rezolu ție, func ția de întrerupere nu este la fel de
performant ă ca și func ția de comparare.Comparator
16 biți
TOCxOCxFOCxICerere de
întrerupere
Figura 1.12 Func ția de comparare la ie șire – schema blocCtrl.
pinPin
OCx

1. Descriere general ă 25
COP – Watchdog
COP ( Computer Operating Properly ) este un ceas de gard ă, numit
watchdog , folosit pentru a detecta erorile de program. Folosirea ceasului de gard ă
este op țional ă. În cazul în care se folose ște, programul utilizator trebuie s ă reseteze
periodic un registru COP; dac ă nu are loc resetarea, unitatea centrala decide c ă a
apărut o problem ă în rularea programului și reseteaz ă sistemul pentru a preveni o
desfășurare necontrolat ă a programului.
Func ția ceasului de gard ă poate fi realizat ă folosind un canal timer de uz
general sau, situa ția întâlnit ă în mod obi șnuit la MC, ceasul de gard ă este un timer
dedicat, folosit doar pentru func ția gard ă. Structura unui modul watchdog este
reprezentat ă în figura 1.13
Ceasul de gard ă este un timer simplu compus dintr-un num ărător al c ărui
ceas de num ărare este programabil printr-un registru de prescalare. Dac ă circuitul
este activat, num ărătorul num ără continuu. Dac ă num ărătorul ajunge la valoarea
cea mai mare (FFFFh, dac ă este un num ărător de 16 biți). se genereaz ă un RESET
către unitatea central ă. Este sarcina programatorului s ă scrie periodic în registrul de
control un cuvânt care s ă inițializeze num ărătorul. În cazul în care programul a
pierdut controlul se va reseta sistemul.
Acumulatorul de impulsuri
Modulul timer poate s ă dispun ă de un registru acumulator de impulsuri. În
acest registru pot fi num ărate evenimente exprimate prin pulsuri sau pot fi
numărate chiar pulsuri interne, provenite de la clock-ul unit ății centrale.
1. Num ărare de evenimente – num ărătorul de 8 bi ți este incrementat la fiecare
front activ detectat la un pin. Un eveniment poate fi orice, segmente de
program, cicluri ale unui semnal de intrare, unit ăți de timp, etc. Pentru a fi
numărate în acumulatorul de impulsuri, acestea trebuiesc transformate în
tranzi ții.BUS INTERNRegistru de
prescalareRegistru de
controlNum ărător
INITRESET
Figura 1.13Schema bloc a unui modul watchdogClock

26 MICROCONTROLLERE
2. Num ărare gardat ă – num ărătorul de 8 bi ți func ționeaz ă în regim liber de
numărare având la intrarea de clock un semnal provenit din clock-ul unit ății
centrale divizat cu un factor constant. O aplica ție uzual ă în acest mod de
funcționare este m ăsurarea duratei unui puls (impuls singular). Num ărătorul
este înscris cu 0 la începutul pulsului, iar la sfâr șitul pulsului se cite ște valoarea
sa.
Module PWM
Un semnal PWM ( Puls Width Modulation ) este folosit în multe aplica ții;
comanda motoarelor de curent continuu sau comanda surselor de alimentare pot fi
amintite ca principale aplica ții. În figura 1.14 este reprezentat un semnal PWM.
Semnalul PWM este un semnal periodic la care se poate modifica în mod
controlat factorul de umplere. Modulele timer au resursele necesare gener ării unui
semnal cu factor de umplere variabil. Deoarece, dup ă cum am mai amintit,
semnalul PWM este utilizat în aplica ții exist ă module timer dedicate acestei
funcții; modulele PWM. Un modul PWM poate genera mai multe semnale
modulate. Structura unui canal PWM este reprezentat ă în figura 1.15.
Registrul de prescalare genereaz ă clock-ul pentru un num ărător. Clock-ul
de num ărare este programabil. Con ținutul num ărătorului este comparat cu cel alT1T2
Factorul de umplere este
T2/T 1
Fig. 1.14 Semnal PWM
clock
intern
Fig. 1.15 Schema bloc a canalului PWMBUS INTERNNum ărător PWMComparator pe 8 bi țiPWM
Registru prescalare

1. Descriere general ă 27
registrului PWM. Cât timp rezultatul compara ției este mai mic sau egal, se va
genera un unu logic la ie șirea PWM. Dac ă rezultatul compara ției este mai mare, se
va genera la ie șirea PWM un zero logic. Dac ă registrele comparate sunt de opt bi ți
factorul de umplere poate fi între 1/256 și 1. Un canal PWM odat ă programat va
genera la ie șire semnalul periodic continuu, f ără interven ția unit ății centrale.
Ca și la celelalte componente func ționale, în ceea ce prive ște global
modulele timer (includem și modulele watchdog și PWM) vor fi prezentate în
încheiere câteva criterii de apreciere:
• numărul de canale timer și dimensiunea registrului de num ărare;
• flexibilitaea timere-lor, mecanisme implementate;
• existen ța unui ceas de gard ă (watchdog);
• numărul de canale PWM și dimensiunea registrului PWM.
Module A/D și D/A
Intrările/ie șirile analogice și convertoarele A/D nu sunt considerate ca
parte definit ă în contextul unui calculator; aceste elemente sunt importante în
schimb atunci când consider ăm un microcontroller. Prezen ța modulelor A/D și
D/A în structura unui MC contribuie la “puterea”acestuia în aplica ții deoarece
interfa țarea cu mediul presupune necesitatea de a prelucra sau de a elabora m ărimi
analogice.
Convertoarele A/D sunt des întâlnite printre perifericele on-chip .
Convertoarele D/A nu sunt întâlnite în mod uzual printre unit ățile componente
deoarece sunt relativ u șor implementate în exterior. Un convertor D/A simplu
poate fi realizat folosind un timer în mod PWM și integrând pulsul în exterior cu
un simplu circuit RC.
Convertoarele A/D integrate pe chip sunt convertoare cu aproxima ții
succesive sau mai rar, convertoare cu integrare. Însu șirile convertoarelor nu sunt
deosebite; sunt convertoare lente în compara ție cu cele implementate în circuite
independente. Timpii de conversie obi șnuiți sunt plasa ți în intervalul 10µs-25µs.
Rezolu ția este de 8, 10 sau 12 biți iar precizia de +/- 1/2LSB. Modulul de conversie
este prev ăzut și cu un multiplexor analogic, astfel sunt disponibile mai multe
canale de intrare. Unele MC sunt echipate și cu circuit de e șantionare/memorare. În
cazul în care circuitul de e șantionare/memorare lipse ște, semnalul analogic trebuie
menținut constant pe durata unei conversii. Tensiunea de referin ță necesar ă
convertorului poate fi generat ă în circuit sau dac ă nu, este necesar s ă fie furnizat ă
din exterior.
În continuare, în figura 1.16 este prezentat ă o schem ă bloc simpl ă a unui
modul de conversie A/D. Circuitul analogic de intrare const ă într-un multiplexor
analogic, un circuit de e șantionare/memorare și un convertor A/D cu aproxima ții
succesive. Tensiunea de referin ță pentru convertor și masa analogic ă sunt furnizate
din exterior la pini speciali. Clock-ul necesar convertorului este generat intern din
clock-ul unit ății centrale.

28 MICROCONTROLLERE
Modulul A/D folose ște un registru de control prin care se selecteaz ă
canalul de conversie și modul de lucru pentru circuitul de e șantionare/memorare.
Declan șarea și terminarea conversiei sunt semnalizate cu câte un bit tot în registrul
de control. Rezultatul conversiei este stocat în registrul de date. Registrul de dateva con ține întotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie
citit înainte de terminarea urm ătoarei conversii, în caz contrar se pierde informa ția
Conversia poate fi declan șată intern, considerând bitul asociat din registrul
de control, sau din exterior printr-un semnal de comand ă aplicat la pin.
Declan șarea unei conversii la un moment de timp dorit, f ără interven ția unit ății
centrale, se poate realiza folosind un timer. Modulul poate fi programat s ă execute
o conversie a unui canal și să se opreasc ă. Un alt mod de operare al modulului
poate fi conversia continu ă a unui canal pâna la recep ționarea unei comenzi de
încheiere. Un alt mod de operare este conversia ciclic ă în care modulul execut ă pe
rând conversia fiec ărui canal, dup ă care se opre ște. În acest ultim mod sunt folosite
de obicei mai multe registre de date pentru memorarea rezultatelor conversiilor.
Rezultatele sunt citite dup ă încheierea unui ciclu. La terminarea unui ciclu de
conversiei, op țional, se poate genera o întrerupere c ătre unitatea central ă.
În aplica ții de precizie se recomand ă ca pe durata conversiei s ă se comute
unitatea central ă în stare inactiv ă pentru ca aceasta s ă nu perturbe convertorul.
1.4 SISTEMUL DE ÎNTRERUPERI
Sistemul de întreruperi reprezint ă mecanismul ce asigur ă sincronizarea
funcționării unit ății centrale cu evenimentele. Acest mecanism asigur ă
implementarea unui r ăspuns prompt și specific al sistemului la orice cerere deADC0
ADC 1
ADC2ADC3Mux
analogicConvertor Analog Digital
Registru de control Registru de dateSelec ție
canalSTART STOP
Date
Figura 1. 16 Schema bloc a modului de conversie A/Dpin
startE/nM
bus intern

1. Descriere general ă 29
întrerupere. Mul ți dintre produc ători au realizat pentru diversele familii de
microcontroller-e variante constructive care difer ă uneori substan țial unele fa ță de
altele, scopul fiind fie acela al simplific ării sistemului, fie acela al asigur ării unor
facilit ăți cât mai adecvate aplica țiilor pentru care au fost proiectate respectivele
microcontroller-e.
Încă din anii 1980-1985 s-a conturat un principiu care se confirm ă și
astăzi: "fiecare func țiune complex ă cu procesorul ei", respectiv "fiecare func țiune a
unui sistem de comand ă cu rutina ei de servire a întreruperilor".
Evenimentele, sunt acele st ări din func ționarea sistemului care trebuie
avute în vedere la controlul acestuia. Ele trebuie s ă declan șeze, cu o întârziere
minim ă, un r ăspuns adecvat din partea sistemului, r ăspunsul trebuind s ă fie descris
de c ătre proiectant prin instruc țiuni incluse în cadrul unor rutine de servire a
întreruperilor.
În cazul microcontroller-elor, ca de altfel și în acela al microprocesoarelor,
aceste evenimente trebuie privite ca informa ții de stare a sistemului, informa ții ce
rezult ă fie urmare a prelucr ării de c ătre UC a datelor, (evenimente ce genereaz ă așa
numitele întreruperi interne), fie urmare interac țiunii sistemului cu mediul
înconjur ător (numite și întreruperi externe). Acest din urm ă aspect este
preponderent în cazul microcontroller-elor.
Unitatea central ă a MC analizeaz ă în cadrul ultimei perioade de ceas
corespunz ătoare fiec ărui ciclu instruc țiune eventualele cereri de întrerupere postate
pe parcursul execu ției instruc țiunii curente.
Ca orice sisteme deterministe, sistemele digitale dotate cu microcontroller-
e sunt ancorate, în func ționarea lor, într-un spa țiu multidimensional ce are drept
dimensiuni parametrii proprii și cei regla ți de c ătre sistem ("m ărimile de stare") și
timpul. Sistemul de întreruperi este informat asupra evolu ției acestora prin canale
de transfer a informa țiilor generale (porturi, canale temporizatoare/num ărătoare)
sau specifice (interfe țe specializate UART, SPI, SCI, USB, I2C, etc), el dispune de
o unitate de analiz ă a informa țiilor ("controller-ul de întreruperi" – CI),
implementat ă intern, conectat ă via magistralele interne ale MC la unitatea de
control a programelor), precum și de mecanismul prin care opre ște execu ția de
către UC a programului curent și realizeaz ă declan șarea rutinei adecvate de servire
a întreruperilor.
Realizarea st ărilor generatoare de cereri de întrerupere este urmat ă de
analiza acestora de c ătre CI. Aceast ă analiz ă presupune urm ătoarele:
• Identificarea sursei generatoare a cererii de întrerupere;
• Determinarea ordinii de servire a cererilor de întrerupere, în cazul
apari ției simultane a mai multor astfel de cereri.
Ambele etape pot fi implementate atât hard cât și soft, neexcluzându-se
posibilitatea unor implement ări mixte.
Identificarea sursei generatoare de întrerupere se face prin corela ția ce este
stabilit ă între canalul de transfer al cererii, registrul/registrele de memorare al
acesteia și adresa de memorie la care este plasat ă adresa rutinei de servire a

30 MICROCONTROLLERE
întreruperilor sau prima instruc țiune a rutinei de servire a întreruperilor. Aceast ă
situa ție este întâlnit ă la majoritatea microcontroller-elor, dar exist ă și excep ții, cum
ar fi microcontroller-ele familiilor PIC "low range" și "middle range" de la firma
Microchip, la care orice cerere de întrerupere genereaz ă execu ția unei rutine al
cărei început este plasat la o adres ă unic ă, fixă de memorie.
Determinarea ordinii de servire, sau analiza priorit ății cererilor de
întrerupere, presupune scanarea în faza de analiz ă a tuturor canalelor de transfer
pentru cererile de întrerupere sau a regi ștrelor corelate cu acestea într-o anumit ă
ordine prestabilit ă hard. Multe microcontroller-e dispun de mecanismul
(implementat hard) ce permite "prioritizarea" unora dintre aceste canale, ceea ce
implic ă implementarea unor unit ăți de memorare a priorit ăților (registre de setare a
priorit ăților pe dou ă sau mai multe nivele) și instituirea unor reguli de arbitrare.
Fiecare dintre aceste nivele va fi scanat distinct, în ordinea descresc ătoare a
priorit ăților, majoritatea CI prezentând doar dou ă nivele de prioritate: prioritar și
mai pu țin prioritar.
În procesul de scanare, primul canal "activ" – care genereaz ă o cerere de
întrerupere – va fi cel ce va fi "servit", respectiv va declan șa procesul de execu ție a
rutinei de servire a întreruperilor corespunz ătoare.
Sunt întâlnite atât microcontroller-e care permit întreruperea unei rutine de
servire a întreruperilor de c ătre o alt ă cerere de întrerupere mai prioritar ă
(îndeob ște cunoscut ca sistem de întreruperi "reîntreruptibil"), cât și
microcontroller-e care nu permit o astfel de ac țiune.
Mulți produc ători pun la dispozi ția proiectantului câte un flag de
validare/invalidarea global ă a întreruperilor, ceea ce permite ca utilizatorul s ă
modifice cum dore ște mecanismul de ac țiune la apari ția unui întreruperi: permite
sau inhib ă o întrerupere prioritar ă apărută ulterior uneia mai pu țin prioritare, dar pe
durata cât aceasta este servit ă.
Multe microcontroller-e dispun de un mecanism bazat pe flag-uri
(fanioane) de validare/invalidare a întreruperilor, acest mecanism putând fiimplementat atât la nivelul UC al MC cât și la / sau la nivelul CI, respectiv la
nivelul sistemului de analiz ă a cererilor de întrerupere. Registrele de memorare a
cererilor de întrerupere sunt dublate de registre ce memoreaz ă informa ția de
validare a canalelor întrerup ătoare ("registre de validare a întreruperilor" sau
"registre de mascare a întreruperilor"), un canal corespunz ător unei cereri de
întrerupere invalidat ă va fi ignorat în procesul de scanare a cererilor de întrerupere.
Un principiu des aplicat la implementarea acestui sistem const ă în aceea c ă
fiecare flag este setat printr-un mecanism hard și, în general, resetat soft, prin
execu ția unor instruc țiuni de resetare a sa, ceea ce presupune pe de-o parte, luarea
în considerare prin program a st ării semnalate, iar pe de alt ă parte, asigur ă
reanclan șarea mecanismului de întrerupere, pentru situa ția în care starea respectiv ă
se repet ă.
Domeniul de adrese de memorie (SRAM sau PROM) în care sunt plasate
instruc țiunile de start a rutinelor de servire a întreruperilor poart ă denumirea de
"tabel ă a vectorilor de întrerupere".

1. Descriere general ă 31
Unele microcontroller-e prezint ă o tabel ă a vectorilor de întrerupere cu
adrese fixe, specifice canalelor întrerup ătoare, spre exemplu I805 1, Atmel, PIC,
altele permit plasarea tabelei vectorilor de întrerupere la adrese de memorie ce sunt
stabilite de c ătre proiectant, este cazul, spre exemplu, micocontroller-elor din
familia Z80 (Z84 13, Z84 14, Z84 15, etc.)
În prima situa ție, plasarea la adres ă fixă a tabelei vectorilor de întrerupere,
poate fi privit ă ca o restric ție în dezvoltarea unor programe de aplica ție, dar aceasta
este doar o fals ă problem ă! Practic, noi putem realiza translatarea prin program a
tabelei vectorilor de întrerupere la orice adres ă de memorie prin simpla introducere
a unor instruc țiuni de salt ca prime instruc țiuni corespunz ătoare canalelor
întrerup ătoare. Exemplific ăm aceasta pentru familia 805 1.
Tabela vectorilor de întrerupere este cuprins ă între adresele: 0003H și
0023H. Programul de translatare va trebui s ă se prezinte astfel:
CSEG
ORG 00H
START:
JMP MAIN ;Adresa de salt la progamul principal
;
ORG 03H ;Adresa din tabela vectorilor de întrerupere
;corespunz ătoare întreruperilor externe de
;stare – canal 0 –
ISR_EXT0:
JMP NEW_ADDR_ISR0 ;Noua adresa a rutinei (poate fi plasat ă în
;memoria RAM extern ă)
;
ORG 0BH ;Adresa din tabela vectorilor de întrerupere
;corespunz ătoare întreruperilor datorate
;depășirii capacit ății de num ărarea a canalului
;0 num ărător/temporizator
ISR_T0:
JMP NEW_ADDR_ISR 1 ;Noua adresa a rutinei (poate fi ;plasat ă în
;memoria RAM extern ă)
;
ORG 13H ;Adresa din tabela vectorilor de întrerupere
;corespunz ătoare întreruperilor externe de
;stare -canal 1 –
ISR_EXT 1:
JMP NEW_ADDR_ISR2
;
ORG 1BH ;Adresa din tabela vectorilor de întrerupere
;corespunz ătoare întreruperilor datorate
;depășirii capacit ății de num ărarea a canalului
;1 num ărător/temporizator
ISR_T 1:
JMP NEW_ADDR_ISR3
;
;

32 MICROCONTROLLERE
ORG 23H ;Adresa din tabela vectorilor de întrerupere
;corespunz ătoare întreruperilor provenite de la
;UART
ISR_SI:
JMP NEW_ADDR_ISR4
;NEW_ADDR_ISR0:;Aici se vor plasa instruc țiunile corespunz ătoare rutinei de servire a întreruperilor de la
;sursa extern ă corespunz ătoare canalului 0.
NEW_ADDR_ISR 1:
;Aici se vor plasa instruc țiunile corespunz ătoare rutinei e servire a întreruperilor datorate
;depășirii de num ărare la timer 0.
NEW_ADDR_ISR2:;Aici se vor plasa instruc țiunile corespunz ătoare rutinei de servire a întreruperilor de la
;sursa extern ă corespunz ătoare canalului 1.
NEW_ADDR_ISR3:;Aici se vor plasa instruc țiunile corespunz ătoare rutinei e servire a întreruperilor datorate
;depășirii de num ărare la timer 1.
NEW_ADDR_ISR4;Aici se vor plasa instruc țiunile corespunz ătoare rutinei e servire a întreruperilor provenite
;de la UART.
Plasând în memoria RAM aceast ă tabel ă este posibil s ă realiz ăm ceea ce se
cheam ă "servire dinamic ă a întreruperilor". Acest procedeu de servire a
întreruperilor permite implemenarea u șoară a comenzii unui automat secven țial cu
un num ăr finit de st ări. (spre exemplu: cazul unei linii automate de montaj sau de
turnare, etc). Implementarea servirii dinamice a întreruperilor const ă în
modificarea succesiv ă a adreselor la care plas ăm rutina de servire a întreruperii
(ISR).
În figura 1.17 prezent ăm cazul unui automat cu un num ăr de trei st ări
distincte, fiecare rutin ă de servire a întreruperilor (ISR) va rescrie adresa rutinei de
servire corespunz ătoare evenimentului urm ător în tabela vectorilor de întrerupere.
Este evident c ă aceast ă tabel ă trebuie s ă fie locatat ă în memoria RAM a sistemului.
Primul
evenimentISR corespunz ătoare
evenimentului 1
Scrie în Tabela Vectorilor de
întrerupere, adresa ISR2
Al doilea
evenimentAl treilea
eveniment
ISR corespunz ătoare
evenimentului 2
Scrie în Tabela Vectorilor de
întrerupere, adresa ISR3ISR corespunz ătoare
evenimentului 3
Scrie în Tabela Vectorilor de
întrerupere, adresa ISR 1
Figura 1.17 Servirea dinamic ă a întreruperilor într-un automat cu trei st ări

1. Descriere general ă 33
Un exemplu tipic în acest sens îl reprezint ă tastaturile ce prezint ă butoane
multi-func țiune. S ă presupunem cazul butonului unic: START/STOP al unui utilaj.
Vom exemplifica procedeul de servire dinamic ă prin programul care comut ă
funcțiunile butonului din START în STOP și invers. Programul este conceput
pentru un microcontroller din familia 805 1.
CSEG
ORG 00H
BOOT:
JMP MAIN
ISR_EXT0:
JMP BUTON
;S-a considerat c ă prima linie de întreruperi externe de stare reprezint ă canalul de transfer al
;informa țiilor corespunz ător butonului START/STOP
;
;Înstruc țiunea corespunz ătoare etichetei BUTON este plasat ă în memoria RAM a
;sistemului de comand ă
BUTON:
JMP BUTON_START
;
BUTON_START:;
MOV DPTR,#BUTON+ 1
;Încarc ă adresa din tabela vectorilor de întrerupere
MOV A,#LOW(BUTON_STOP)
MOVX @DPTR,AINC DPTRMOV A,#HIGH(BUTON_STOP)MOVX @DPTR,A
;Schimb ă adresa de salt c ătre rutina urm ătoare în schema de comutare a rutinelor
;Ultima rutin ă din schem ă trebuie s ă indice drept adres ă de salt prima dintre rutine
RETI
BUTON_STOP:;
MOV DPTR,#BUTON+ 1
;Încarc ă adresa din tabela vectorilor de întrerupere
MOV A,#LOW(BUTON_START)
MOVX @DPTR,AINC DPTRMOV A,#HIGH(BUTON_START)MOVX @DPTR,A
;Schimb ă adresa de salt c ătre rutina urm ătoare în schema de comutare a rutinelor
;Ultima rutin ă din schem ă trebuie s ă indice drept adres ă de salt prima dintre rutine
RETI
MAIN:;;Trebuiesc incluse instruc țiunile corespunz ătoare programului principal
END

34 MICROCONTROLLERE
În cazul sistemelor 805 1 sau 68xx-68xxx, tabela vectorilor de întrerupere
este ampl ă incluzând variate canale întrerup ătoare. Astfel, pentru întreruperile
externe de stare se dispune de dou ă linii de intrare INT0# și INT 1#, CI putând fi
setat s ă reac ționeze fie pe front (cel negativ), fie pe nivel logic (cel sc ăzut -low),
pentru canalele num ărătoare temporizare dispunem pentru fiecare de adrese de
servire corespunz ătoare st ărilor de dep ășire a capacit ății canalului ("overflow"), iar
pentru unitatea UART dispunem de un vector unic atât la recep ție cât și pentru
transmisie. În cazul microcontroller-elor PIC (low/middle range) exist ă o singur ă
adres ă (plasat ă la 0004H) pentru întreruperi externe, ceea ce impune pentru
proiectant s ă scrie o rutin ă de servire în care analizând registrul ce memoreaz ă
cererile de întrerupere va decide asupra r ăspunsului la cererea respectiv ă.
1.5 MANAGEMENTUL PUTERII
Pentru aplica țiile în care consumul de energie de la sursa de alimentare
este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din
modulele componente. Economia de energie este esen țială în cazul aliment ării de
la baterii. Prin intrarea în starea de economie de energie memoria RAM nu- și
schimb ă conținutul și ieșirile nu- și schimb ă valorile logice. Sistemul de economie
de energie ofer ă dou ă moduri de operare care difer ă prin num ărul componentelor
dezactivate. Aceste moduri sunt numite Idle, Power Down la MC Intel și Wait,
Stop la MC Motorola. Intrarea în unul din modurile de operare cu economie de
energie se face prin comenzi software. MC Motorola dispun de instruc țiuni care
determin ă intrarea în mod Wait sau Stop. MC Intel intr ă în mod Idle sau Power
Down prin controlul unor bi ți din registrul PCON ( Power Control Register ).
În ambele moduri de operare este “înghe țată” func ționarea unit ății centrale.
În mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage
după sine blocarea tuturor func țiilor interne. Timer-ul va “înghe ța” și interfe țele
seriale î și vor opri activitatea. Sistemul de întreruperi, dup ă caz, este dezactivat
(MC Intel) sau poate s ă ramân ă activ (MC Motorola). Con ținutul memoriei și al
registrelor interne nu este alterat, iar liniile I/O r ămân neschimbate. Din aceast ă
stare se poate ie și fie doar cu Reset la MC Intel. La MC Motorola se poate ie și fie
cu Reset, fie la sesizarea unei întreruperi externe (sistemul de întreruperi nu este
dezactivat). În cazul în care revenirea se face la sesizarea unei întreruperi externe
activitatea intern ă este reluat ă în acelea și condi ții în care a fost abandonat ă
(num ărătoarele timere-lor continu ă din starea pe care au avut-o la intrare în mod
Stop).
În mod Idle (Wait) este înghe țată doar func ționarea unit ății centrale,
celelalte func ții folosite r ămân active (timer-ul, interfe țele seriale și sistemul de
întreruperi). Starea unit ății centrale și a tuturor registrelor este p ăstrată cât timp

1. Descriere general ă 35
MC se men ține în mod Idle (Wait). Pinii de port p ăstreaz ă starea pe care au avut-o
la intrarea în acest mod. Din modul Idle se poate ie și prin Reset sau la sesizarea
unei întreruperi interne sau externe.
Consumul de energie este minim atunci când sunt activate cele mai pu ține
funcții. Consumul minim de energie se ob ține în modul de operare Power Down
(Stop). În modul Idle (Wait) consumul este redus fa ța de regimul de operare
normal ă dar este mai mare decât în mod Power Down (Stop). În acela și timp,
consumul în mod Idle (Wait) este cu atât mai redus cu cât sunt mai pu ține func ții
active la intrare în mod. În mod Power Down (Stop) exist ă posibilitatea unei
reduceri suplimentare a consumului prin reducerea tensiunii de alimentare (la unele
MC).
OnNow este o ini țiativă actual ă pentru modernizarea metodelor de
economie de energie în sistemele cu microprocesoare. Se inten ționeaz ă obținerea
unui consum de energie (pentru un calculator PC) de o treime din cel actual și un
timp de ie șire din starea inactiv ă mai mic de 5 secunde. Informa ții despre aceast ă
ințiativă se gasesc la adresa www.microsoft.com/hwedev/onnow.htm
Un alt aspect important al aliment ării sistemelor construite cu MC este
calitatea semnalului furnizat de sursa de alimentare. Dac ă nivelul tensiunii de
alimentare nu se încadreaz ă într-o plaj ă permis ă este posibil ca programul s ă
funcționeze defectuos, s ă se abat ă de la cursul firesc. Pentru a elimina acest risc, pe
care nu ni-l putem permite în sistemele de control, în MC sunt implementate
module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset desistem sau o întrerupere în cazuri considerate limit ă.
LVR ( Low Voltage Reset ) este un circuit care monitorizeaz ă tensiunea de
alimentare a unit ății centrale și forțează un reset dac ă se constat ă că aceasta este
mai mic ă decât un minim predefinit.
LVI ( Low Voltage Interrupt ) este un circuit care monitorizeaz ă tensiunea
de alimentare a unit ății centrale și genereaz ă o întrerupere dac ă se constat ă că
aceasta este mai mic ă decât un minim predefinit. Întreruperea for țează executarea
unei rutine de oprire nefor țată.
1.6 SCHEMA BLOC A UNUI MC
Cu elementele prezentate pân ă la acest punct schema bloc a unui MC poate
fi dezvoltat ă (în compara ție cu cele prezentate în figura 1.1. și figura 1.2);
rezultatul este ilustrat în figura 1.18.

36 MICROCONTROLLERE
Schema este în continuare o reprezentare generalizat ă. Se poate observa c ă
un MC este organizat în jurul unei magistrale interne pe care se vehiculeaz ă date,
adrese și semnale de comand ă și control între blocurile func ționale.
Unitatea central ă execut ă instruc țiunile pe care le prime ște prin magistrala
de date din memoria program. Structura Harvard este posibil ă și răspândit ă la MC
pentru c ă de regul ă instruc țiunile sunt stocate în memoria ROM, iar datele în cea
RAM. Magistrala de date și cea de adrese pot fi separate sau multiplexate.
Magistralele pot s ă nu fie disponibile în exterior (Motorola 6805) sau pot fi
disponibile în exterior direct (MCS-5 1) sau multiplexate (MC pe 16 sau 32 de bi ți).
Fiecare MC are un controller de întreruperi care admite atât intr ări din
exterior cât și de la modulele interne. Unele MC dispun de un controller DMA
propriu.
Modulele I/O pot fi seriale sau paralele. Fiecare modul transfer ă date cu
exteriorul prin intermediul registrului de date (RD). Modulul este programat
(configurat) de unitatea central ă prin intermediul unui registru de comenzi (RC) și
se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera
întreruperi c ătre unitatea central ă. Registrele modulelor I/O pot fi v ăzute de UC ca
locații de memorie (la familia Motorola) sau ca dispozitive de I/O într-un spa țiu deIntrări/ieșiri
de date
Seriale/ParaleleBUS INTERNUNITATE CENTRAL Ă
Registre
interneMemorie
pentru
programeMemorie
pentru
date
RD
reg.
de
dateRC
reg. de
co-
menziRS
reg.
de
stareController de
întreruperi
Controller DMA
Figura 1.18 Schema bloc generalizat ă a unui microcontrollerDISPOZITIV I/O ( 1, 2, … n)Unitate de controlUAL

1. Descriere general ă 37
adresare separat (MCS 5 1). Sub numele de dispozitiv I/O, într-o abordare
generalizat ă, sunt cuprinse principalele interfe țe ale MC (timer, canal serial UART)
și linii I/O grupate în porturi paralele de uz general. Acela și nume generic poate
acoperi și interfe țele speciale întâlnite în configura ții particulare de MC (convertor
A/D, interfa ță serial ă sincron ă, interfa ță LCD, interfa ță USB, etc).
1.7 FAMILII DE MC
Microcontroller-ele se produc într-o mare diversitate în care exist ă totu și
elemente comune care permit o prezentare sistematic ă a produsului. Pe baza unui
nucleu comun au fost definite familiile de microcontroller-e; nucleul este constituit
dintr-o unitate central ă, aceea și pentru to ți membrii unei familii, și o serie de
interfe țe și periferice. Din punct de vedere al programatorului, to ți membrii unei
familii folosesc acela și set de instruc țiuni, permit acelea și moduri de adresare și
folosesc acelea și registre. Diferen ța între membrii unei familii const ă în primul
rând în echiparea chip-ului cu memorie (tip de memorie și capacitatea memoriei).
Alte diferen țe pot fi g ăsite la frecven ța de clock pentru unitatea central ă sau în
interfe țele on-chip și perifericele on-chip suplimentare fa ță de cel mai simplu
reprezentant al familiei. O diferen ță între membrii unei familii poate fi și modul în
care sunt conectate semnalele la pin – respectiv tipul capsulei de prezentare a
circuitului integrat. În cadrul acestui capitol, în continuare, sunt prezentate câteva
familii de microcontroller-e cu sublinierea însu șirilor caracteristice și considerând
numele produc ătorului ca fiind unul din elementele reprezentative pentru o familie.
INTEL 4048 a fost primul MC ap ărut pe pia ță, având o structur ă Harvard
modificat ă, cu 64-256 octe ți de RAM și este înc ă folosit în multe aplica ții datorit ă
prețului sc ăzut.
INTEL 8051 (MCS-5 1) este a doua genera ție de MC și, în prezent, este
familia care se vinde cel mai bine; este fabricat și de mul ți alți produc ători. Acest
MC are o arhitectur ă Harvard modificat ă cu spa țiu de adresare diferit pentru
program (<64K din care 4-8K pe chip) și date (<64K din care 128-256 octe ți pe
chip, cu adresare indirect ă). Dispozitivele I/O au un spa țiu propriu de adresare.
8051 dispune de un procesor boolean prin care se pot executa opera ții complexe la
nivel de bit, iar în func ție de rezultate se pot face salturi. Pentru 805 1 exist ă foarte
mult software, atât contra cost cât și gratuit.
INTEL 80C196 (MCS-96) este a treia genera ție de MC propus ă de
INTEL. 80C 196 este un MC pe 16 biți care admite un tact pân ă la 50MHz. Acest
MC con ține blocuri aritmetice pentru înmul țire și împ ărțire, lucreaz ă cu 6 moduri
de adresare, convertor A/D, canal de comunica ții serial, controller de întreruperi cu
8 surse, pân ă la 40 de porturi I/O, generator PWM și ceas de gard ă.

38 MICROCONTROLLERE
INTEL 80186 și 80188 sunt MC propuse de INTEL ca versiuni a
popularelor microprocesoare 8086 și 8088 care au echipat primele calculatoare
IBM PC XT. Pe chip sunt incluse 2 canale DMA, 2 num ărătoare/temporizatoare,
controller de întreruperi și bloc de refresh pentru memoria RAM. Exist ă și multe
versiuni, MC cu consum redus, cu canale seriale etc. Un mare avantaj la folosirea
acestor MC este faptul c ă se pot folosi uneltele de dezvoltare (compilatoare,
asambloare etc.) de la PC-uri. Cine este familiarizat cu softul de PC poate trecerepede de etapa de înv ățare. Un alt avantaj este un spa țiu mare de adresare, specific
PC-urilor. INTEl a fabricat și MC-ul 80386EX, o variant ă a procesorului 386 care,
la puterea lui 386 mai are în plus canale seriale, canale DMA, num ărătoare/
temporizatoare, controller de întreruperi, refresh pentru RAM dinamic, gestionarea
aliment ării (Power Management ).
65C02/W65C816S/W65C134S (Western Design Center ). WDC a creat
procesorul pe 8 bi ți 65C02 folosit în calculatoarele Apple, Commodore și Atari
urmat de procesorul pe 16 biți W65C8 16S și un MC pe 8 bi ți având ca nucleu
procesorul de baz ă 65C02.
Motorola MC14500 a fost primul MC realizat de Motorola. Acest MC în
arhitectur ă RISC avea calea de date de un bit, 16 instruc țiuni și era furnizat într-o
capsul ă mică (16 pini). El a fost eliminat de pe pia ță de noile MC RISC.
Motorola 6805 se bazeaz ă pe procesorul 6800 și este asem ănător cu 6502
produs de WDC. Are o arhitectur ă von Neumann în care instruc țiunile, datele,
dispozitivele I/O împart acela și spa țiu de adresare. Stiva este limitat ă la 32 de
poziții din cauza indicatorului de stiv ă pe 5 bi ți. Unele MC din aceast ă familie
includ convertoare A/D, sintetizoare de frecven ță cu PLL, canale seriale etc.
Motorola 68HC11 (preluat și de TOSHIBA) este un MC popular pe 8 bi ți
de date și 16 biți de adres ă, cu o arhitectur ă ca și 6805. 68HC 11 are inclus ă
memorie EEPROM sau OTP, linii digitale I/O, num ărătoare/temporizatoare,
convertoare A/D, generatoare PWM, acumulator de impulsuri, canale seriale de
comunica ții sincrone și asincrone etc.
Motorola 683xx (MC68EC300) sunt super MC de înalt ă performan ță
bazate pe un nucleu cu arhitecura procesoarelor 68xx, cu o filozofie și performan ță
asem ănătoare MC INTEL 80386EX.
PIC (MicroChip ) sunt primele MC RISC ap ărute, cu un num ăr mic de
instruc țiuni (tipic 33, fa ță de 8048 care are 90). Simplitatea arhitecturii (Harvard)
duce la realizarea unui chip de mici dimensiuni, cu pu țini pini, consum redus,
vitez ă mare și pre ț mic. Aceste avantaje au impus MC PIC pe pia ță.
Exist ă 3 linii
de MC PIC: low range, middle range și high range (care se disting prin
dimensiunea cuvântului de program și prin facilit ăți legate de structur ă) –
PIC16C5xx, PIC 16C6xx și PIC 17Cxx, din care linia 16C6xx este cotat ă cel
mai bine pe pia ță.
COP400 (National Semiconductor ) este un MC pe 4 bi ți care are 5 12o-2K
ROM, și 32×4- 160×4 RAM, în capsule de 20-28 de pini, cu tensiuni de alimentare
2,3V-6,0V. Sunt echipate cu num ărătoare/temporizatoare și magistral ă

1. Descriere general ă 39
MICROWIRE. Aceste MC se fabric ă în peste 60 de modele echivalente și sunt
primele MC care au un pre ț sub 0,5USD/bucat ă.
COP800 (National Semiconductor ) este un MC de 8 bi ți care con ține
MICROWIRE, UART, RAM, ROM, num ărătoare/temporizatoare de 16 bi ți,
controller de întreruperi, comparator, ceas de gard ă, monitor de tact, generator
PWM, transmisie în infraro șu, convertor A/D cu 8 canale cu prescalare (admite și
intrări diferen țiale), protec ție la sc ăderea tensiunii de alimentare, mod de a șteptare
și HALT, un trigger SCHMITT și circuit de trezire cu mai multe intr ări (Multi-
Input-WakeUp). Eficien ța este dat ă și de un set puternic de instruc țiuni, majoritatea
fiind de un singur octet și executate într-un singur ciclu. Exist ă și variante pentru
uz militar.
HPC (National Semiconductor ) sunt MC pe 16 biți de mare performan ță,
cu o arhitectur ă von Neumann. Unitatea central ă poate executa înmul țiri și
împărțiri. Con țin în structur ă func țiile executate de familia COP800 având în plus
canale seriale HDLC (High Level Data Link Control) și elemente DSP, la o
tensiune de alimentare de 3,3V. MC din aceast ă familie au multe aplica ții în
telecomunica ții, în sisteme de securitate, imprimante LASER, hard discuri, frâne
ABS și aplica ții militare.
Proiectul PIRANHA (National Semiconductor ) este un proiect de realizare
a unui MC RISC, primul MC dedicat aplica țiilor integrate. Acest MC are
avantajele arhitecturii RISC, deci pu ține instruc țiuni, simplitate, modularitate.
Z8 (Zilog ) a fost unul dintre primele MC. Modelul ini țial avea UART,
numărătoare/temporizatoare, DMA, 40 de linii digitale I/O, controller de
întreruperi. Modelul Z867 1 avea în ROM un BASIC simplu. Modelul Z86C95 are
o structur ă Harvard, facilit ăți DSP etc. Un avantaj este c ă se pot folosi pentru
extensii unele circuite de interfa ță din familia lui Z80.
HD64180 (Hitachi ) este un MC puternic, cu structura și posibilit ățile lui
Z80, având în plus 2 canale DMA, canal de comunica ții sincrone și asincrone,
numărătoare/temporizatoare și controller de întreruperi. Unele versiuni includ
EPROM, RAM și PIO (Programmable Input Output). Ruleaz ă instruc țiunile lui
Z80, dar în mai pu ține cicluri și are instruc țiuni în plus. Exist ă variante care
funcționeaz ă până la 18MHz.
TMS370 (Texas Instruments ) este similar cu 805 1. Con ține RAM, ROM
(OTP sau EEPROM), 2 num ărătoare/temporizatoare de 16 bi ți, controller de
întreruperi, ceas de gard ă, generator PWM, convertor A/D cu 8 canale, SCI (port
serial asincron), SPI (port serial sincron), comparator, poate executa înmul țiri și
împărțiri. Tactul poate fi pân ă la 20MHZ, cu 5MHz tact de magistral ă.
1802 (RCA) este un MC mai vechi, cu o structur ă apropiat ă de un
microprocesor. Este folosit mai ales în aplica ții spa țiale.
MuP21 (Forth ) este un MC care are puterea de calcul a unui procesor
INTEL 80486 ( 100MIPS) la un pre ț mult mai mic. Are integrat un coprocesor
video care gestioneaz ă o memorie video, deci se poate ata șa direct un monitor TV.
Acest MC a fost creat ca s ă ruleze programul OKAD (program de proiectare VLSI)
și execut ă acest lucru de 10 ori mai repede ca un 486. Mup2 1 are 40 de pini.

40 MICROCONTROLLERE
F21 (Forth ) a fost conceput pentru aplica ții multimedia și procesare
paralel ă. Viteza ajunge la 250MIPS datorit ă structurii care con ține procesoare de
prelucrare analogic ă și procesor de interfa ță la re țeaua de calculatoare.
Tabelul 1.6 prezint ă caracteristicile de baz ă pentru câ țiva reprezentan ți din
două familii de MC foarte populare; 68HC 11 de la Motorola și 805 1 de la Intel.
Tabelul 1.6
Caracteristici principale pentru MC din dou ă familii reprezentative
(68HC11 și 8051)
Circuit RAM ROM/
(E)EPROMClock I/O A/D Timer
M68HC 11A0 256 – 0.476 µs 4×8
1×64/8 9
M68HC 11A1 256 5 12
EEPROM0.476 µs 4×8
1×64/8 9
M68HC 11A2 – 2048
EEPROM0.476 µs 4×8
1×64/8 9
M68HC 11A8 256 8K ROM
512
EEPROM0.476 µs 4×8
1×64/8 9
M68HC 11E1 5125 12
EEPROM0.476 µs 4×8
1×64/8 9
M68HC 11E9 5 12 12K ROM
512
EEPROM0.476 µs 4×8
1×689
M68HC 11F11 024 5 12
EEPROM0.476 µs 4×8
1×689
I 8035 64 – 2.5 µs 3X8 – 2
I 8039 128 – 1.4 µs 3X8 – 2
I 804 1 64 1024 ROM 2.5 µs 3X8 – 2
I 8748 64 1024
EPROM2.5 µs 3X8 – 2
I 805 11 28 4096 ROM 1 µs 4X8 – 2
I 875 11 28 4096
EPROM1 µs 4X8 – 2

1. Descriere general ă 41
1.8 CLASIFICAREA MC
Se pot considera multe criterii de clasificare a MC; de exemplu dup ă
dimensiunea magistralelor, dup ă interfe țele pe care le au incluse în configura ție,
după aplica țiile în care se folosesc, dup ă furnizor etc. O clasificare sumar ă a celor
mai uzuale MC, dup ă compatibilitatea software, este:
MC cu arhitectur ă CISC
• Compatibile 805 1
• MOTOROLA 68xx
• Compatibile x86
• COP8 (National Semiconductor)
• TMS370 (Texas Instruments)
• ST (Thomson)
• Alte arhitecturi (MC low cost) HITACI – 4bi ți, Z8 – 8 bi ți
MC cu arhitectur ă RISC
• Super H – Hitachi
• PIC – MicroChip
• AVR și ARM – Atmel

2
PROGRAMAREA SISTEMELOR CU MC
2.1 PROIECTAREA PROGRAMELOR DE
APLICA ȚIE
2.1.1 Generalit ăți
Dezvoltarea aplica țiilor cu microsisteme presupune pe lâng ă proiectarea
circuitelor electronice aferente acestora și specificarea în concordan ță cu aceasta,
prin instruc țiuni, a func țiunilor pe care sistemul trebuie s ă le realizeze.
Prin faptul c ă microsistemele dispun de circuite microprogramabile,
structura acestora va fi adaptat ă aplica ției specifice prin rularea programelor de
inițializare a sistemului, programe care duc la o configurare particular ă, specific ă.
Deci, una dintre func țiunile de baz ă pe care microsistemele dotate cu
microcontroller-e trebuie s ă o implementeze o reprezint ă chiar propria configurare
-inițializare-, c ăci având drept suport aceea și structur ă, un sistem realizeaz ă noi
funcțiuni ca urmare a program ării ini țiale sau pe parcurs.
O problem ă practic ă ce este pus ă la programarea microsistemelor o
reprezint ă organigrama pe care trebuie s ă o utiliz ăm la proiectarea programelor de
funcționare. Aceasta variaz ă în raport cu "uneltele" soft avute la dispozi ție:
asamblor1, compilator2, link-editor3, convertor OBJ-HEX4, depanator5, emulator6,
mediu de simulare7, etc.

1 Asamblorul este acel program ce converte ște fișierul surs ă -fișier de tip text (ASCII) ce
conține instruc țiuni ale microcontroller-ului sub form ă de mnemonice, în fi șier obiect,
respectiv într-un fi șier ce con ține codurile ma șină corespunz ătoare instruc țiunilor
specificate în cadrul fi șierului surs ă
2 Compilatorul este acel program ce converte ște fișierul surs ă, scris în limbaj evoluat, în
fișier obiect.

2. Programarea sistemelor cu MC 43
Metodologia proiect ării se bazeaz ă pe analiza structurat ă a aplica ției, pe
separarea cât mai ra țional ă a func țiunilor sistemului în raport cu necesit ățile de
comand ă și cu cele de sincronizare în timp. Se disting ca "stiluri" de programare,
stilul de programare ce utilizeaz ă extensiv implementarea prin rutine specifice a
fiecărei func țiuni, ceea ce duce la generarea unui program ce prezint ă multe apeluri
de func țiuni, utilizeaz ă o stiv ă relativ extins ă, dar care folose ște eficient memoria
sistemului și stilul de proiectare a programelor care specific ă prin macro-uri fiecare
funcțiune în cadrul programului principal și minimizeaz ă astfel num ărul de apeluri,
implicit reduce dimensiunea stivei, dar cre ște memoria necesar ă pentru program.
Evident, ținând cont de varietatea aplica țiilor cât și de varietatea
implement ărilor hard, nu este posibil ă enun țarea unei "re țete" dup ă care s ă
proced ăm! Fiecare aplica ție va trebui s ă fie tratat ă adecvat, m ăsura în care
implement ăm prin rutine, direct în programul principal, sau în rutinele de servire a
întreruperilor, func țiunile sistemului va depinde esen țial de coordonata "timp",
respectiv, de m ăsura în care putem îndeplini restric țiile specifice unui sistem de
comand ă și control în timp real.
Proiectarea programelor pentru un sistem impune ca proiectantul s ă
considere în strâns ă corela ție dou ă aspecte: cel specific procesului și cel ce ține de
specificitatea procesorului.

3 Link -editorul realizeaz ă cuplarea mai multor module de program memorate în fi șiere
obiect distincte și aloc ă zonele de memorie necesare programelor și variabilelor utilizate de
către acestea. Link-editorul favorizeaz ă dezvoltarea structurat ă a programelor precum și
reutilizarea unor module de program în aplica ții distincte.
4 Convertorul OBJ-IntelHEX , realizeaz ă conversia din format OBJ (cod ma șină), într-un
format ce con ține: adresa de locatare, num ărul de octe ți ai liniei respective, tipul datelor
(cod sau date), șirul de coduri, suma de control corespunz ătoare tuturor informa țiilor liniei
respective și terminatorul de linie format din caracterele CR, LF.
5 Depanatorul permite execu ția pas cu pas, sau secven ță dup ă secven ță, a unui program
aflat în faza de testare cu scopul de a releva interac țiunea acestuia cu procesul. În general
acest program func ționeaz ă înpreun ă cu un sistem de dezvoltare și dispune de un monitor –
programul de baz ă ce ofer ă func țiuni de depanare pe sistemul de dezvoltare-
6 Emulatorul este programul care permite simularea func țiunilor și instruc țiunilor
microcontroller-ului pe un alt sistem de calcul gazd ă. El poate prezenta unele restric ții în
special în ceea ce prive ște posibilit ățile de simulare a întreruperilor. Acest program poate s ă
funcționeze atât pe un calculator gen PC, cât chiar pe microcontroller-ul ce face obiectul
aplica ției, atunci când acesta o permite. În aceast ă din urm ă situa ție, sistemul cu
microcontroller are drept consol ă chiar un PC, ce este conectat serial la sistemul cu
microcontroller. Emulatorul rezident pe circuit permite o simulare avansat ă a
funcționalit ății sistemului putându-se verifica atât func ționarea programelor cât și aceea a
rutinelor de servire a întreruperilor.
7 Mediul de simulare este utilizat în cazul unor aplica ții extrem de complexe, caz în care
practic sistemul ce implementeaz ă aplica ția este dezvoltat cu facilit ăți de depanare. Un
astfel de sistem formeaz ă un mediu de simulare. El include atât facilit ăți soft (atât pe
sistemul gazd ă ("host"), cât și pe cel țintă ("target")), cât și facilit ăți hard ce țin de existen ța
unor generatoare de semnal programabile, care s ă ofere excita țiile adecvate.

MICROCONTROLLERE 44
Deși varietatea sistemelor este deosebit de larg ă, totu și putem considera c ă,
în general, dou ă clase de sisteme sunt preponderente, iar la limit ă acestea sunt
unicele întâlnite în practic ă, și anume:
• sisteme de reglare , sisteme ce îndeplinesc una sau mai multe func ții
scop, care sunt me ținute în limite de varia ție prestabilite, și
• sisteme de control , respectiv sisteme ce implementeaz ă un automat cu
un num ăr finit de st ări
Tot aici trebuie s ă subliniem deosebit de strânsa leg ătură ce apare între
aspectele "hard" ale sistemului și aspectele "soft" ale acestuia. Aceast ă legătură
trebuie s ă fie permanent în aten ția proiectantului, el trebuie s ă-și "închipuie " cum
și în ce se traduce execu ția fiec ărei instruc țiuni și de asemenea, mai important,
să țină cont de sincroniz ările ce apar în "via ța sistemului" între func ționarea
unit ății centrale și procesul reglat. Spre deosebire de programarea în limbaje de
înalt nivel sau nivel mediu, în cazul nostru rezultatele program ării se traduc prin
acțiuni specifice în cadrul sistemului, sistemul de întreruperi jucând un rol esen țial.
Interac țiunile, în acest caz sunt uneori mai greu de vizualizat, de aceea în timp s-a
dezvolat o ampl ă varietate de unelte de dezvoltare care sprijin ă proiectantul de soft
în realizarea acestuia.
Prin sistem de dezvoltare se în țelege acel sistem ce include procesorul
împreun ă cu memoria aferent ă, (SRAM și EPROM/Flash ) și care dispune de
porturi, eventual de posibilitatea de generare de semnale, spa țiu pentru "cablarea"
unor subsisteme adi ționale specifice (interfe țe analog digitale și digital-analogice,
driver-e de putere, etc.) și de programe "monitor8" rezidente în memoria fix ă a sa,
ce implementeaz ă dispozitivul logic "consol ă" drept leg ătură cu PC-ul. Aceste
programe pot dispune și de alte rutine, cum ar fi un asamblor/dezasamblor ce
permite scrierea sau modificarea "on-line" a programelor ce ruleaz ă pe sistem.
Sistemul dispune de "uneltele soft" ce ajut ă la asamblarea programelor,
editarea acestora precum și a datelor din memoria sistemului de dezvoltare, darea
în execu ție a programului, oprirea acestuia în puncte prestabilite ("break points"),
vizualizarea st ării registrelor generale, etc. Toate acestea presupun existen ța unui
dispozitiv logic, "consol ă", care asigur ă controlul sistemului, fie de o consol ă
propriu-zis ă, fie, mai des, de c ătre un PC ce este conectat serial la sistem.
Aspecte specifice de programare apar și ca urmare a arhitecturii
procesorului CISC, RISC sau SISC. Aceste aspecte sunt " detalii " extrem de
importante în programare, c ăci ele duc la modificarea stilului de proiectare a
programelor.
Să analiz ăm pe rând aceste aspecte.
Prin analiza necesit ăților impuse de implemetarea comenzii și controlului
unui sistem, va trebui s ă înțelegem urm ătoarele.

8 Monitorul este acel grup de programe, rezident în memoria PROM/EPROM a unui sistem
de dezvoltare, care dispune de un set minimal de func țiuni ce ajut ă la proiectarea și
depanarea pe plac ă a programelor scrise în cod ma șină.

2. Programarea sistemelor cu MC 45
Analiza necesit ăților de comand ă și control pe care le impune sistemul .
1. Canale digitale de transfer a informa țiilor – (vom avea în vedere,
numărul acestora, și modul în care ele pot fi grupate). Este bine s ă
asigur ăm corespunz ător fiec ărei linii de comand ă, sau de achizi ție
digital ă câte un bit corespunz ător în cadrul unor loca ții de memorie ce
reflect ă permanent starea acestora.
2. Canale analogice de transfer al informa țiilor – vor necesita alocarea
unui num ăr de linii de ie șire (este cazul convertoarelor digital-
analogice), respectiv un num ăr de linii de intrare (este cazul
convertoarelor analog-digitale) ce este func ție de tipul de convertor,
respectiv de interfa ța acestuia cu microsistemul.
3. Necesit ățile de control a timpului – (frecven ței, perioadei sau
întârzierii) în cadrul sistemului sunt implementate prin utilizarea
judicioas ă a canalelor temporizatoare.
Fiecare dintre aceste necesit ăți le vom exemplifica în continuare, urmând
ca la capitolul de aplica ții să concretiz ăm aceste exemple în programe mai ample.
Spre exemplu: dac ă avem de comandat dou ă motoare pas cu pas tetrafazate
(MPP) cu aceea și frecven ță de comand ă și în acela și sens , este evident c ă vom
aloca liniile aceluia și port drept linii de comand ă ale acestuia. De ce? C ăci astfel
realiz ăm dou ă obiective: maximiz ăm utilizarea liniilor unui port de 8 bi ți, așa cum
sunt majoritatea, pe microcontroller-ele pe 8 bi ți, dar totodat ă simplific ăm
rezolvarea soft a comenzii, noi dedicând astfel doar o loca ție de memorie
(STATUS_MPP), drept copie a st ării liniilor de comand ă dedicate motoarelor.
Totodat ă ținând cont c ă majoritatea controller-elor dispun de instruc țiuni de rotire
(dreapta/stânga) a informa țiilor, comanda în secven ță simpl ă a MPP nu va
presupune decât câteva instruc țiuni:
• Inițializarea contorului de pa și (STEPS 1 și STEPS2)
• Inițializarea loca ției de stare a MPP-urilor (STATUS)
• Inițializarea timer-ului corespunz ător frecven ței de comand ă a MPP
(SPEED_L, SPEED_H)
• Definirea rutinei de servire a întreruperilor, corespunz ătoare canalului
temporizator (ISR_T0).
Aceast ă rutin ă va roti informa ția din byte-ul de stare corespunz ător, va
copia aceast ă informa ție la port și în final va decrementa contorul de pa și.
Se vor testa cele dou ă loca ții ce re țin num ărul de pa și STEPS 1 și STEPS2
iar atunci când s-au executat pa șii programa ți, comanda va fi întrerupt ă.
Prezent ăm în continuare acest program implementat pentru
microcontroller-e din familia 805 1. Instruc țiunile acestui microcontroller sunt
prezentate în capitolul curent.
1 DSEG
0030 2 STATUS_MPP DATA 30H
;Loca ția memoraz ă starea comenzilor pentru MPP (secven ță simpl ă)
0031 3 STEPS 1 DATA 3 1H; L o c a ție nr. pa și MPP 1

MICROCONTROLLERE 46
0032 4 STEPS2 DATA 32H ;Loca ție nr. pasi MPP2
0033 5 SPEED_L DATA 33H ;Loca ție low(CT)timer 0
0034 6 SPEED_H DATA 34H ;Loca ție high(CT)timer 0
7 BSEG
0010 8 SENS BIT 10H ;Bit "sens de rota ție MPP"
0011 9 COMMAND BIT 11H; B i t c o m a n d ă MPP
;Setarea acestui bit genereaz ă inițierea mi șcării MPP. Pentru aceasta trebuie s ă
;inițializăm în prealabil: STEPS 1, STEPS2, SPEED_L, SPEED_H și SENS.
;Bitul SENS este setat la rotirea spre stânga și resetat la rotirea spre dreapta
10 CSEG
11 EXTRN CODE(INIT) ;Declara ție rutina INIT extern ă
0000 12 BOOT:
0000 020054 13 JMP MAIN
0003 14 ISR_EXT0: ;Începutul tabelei vectorilor de întrerupere
0003 02000E 15 JMP ISR_T0
000B 16 ORG 0BH
000B 17 ISR_TIMER0:
000B 02000E 18 JMP ISR_T0
000E C0D0 19 ISR_T0: PUSH PSW ;Salvare PSW în stiv ă
0010 C0E0 20 PUSH ACC ;Salvare Acumulator
0012 D2D3 2 1 SETB PSW.3 ;Comutare în bancul 1 de registre generale
0014 E53 1 22 MOV A,STEPS 1 ;Încarc ă în A nr.pa și MPP 1
0016 B4000C 23 CJNE A,#0,CONT_0 1 ;Test STEP 1=0?
0019 E532 24 MOV A,STEPS2 ;Da!
001B B40026 25 CJNE A,#0,CONT_02 ;Test STEP2=0?
001E C28C 26 CLR TR0 ;Anulare func ționare timer 1
0020 D0E0 27 END_ISR: POP ACC ;Da! Ie șire ISR
0022 D0D0 28 POP PSW ;Refacere stare registre generale
0024 32 29 RETI ;Ie șire din ISR
0025 E532 30 CONT_0 1: MOV A,STEPS2 ;STEP 1<>0
0027 B400 12 3 1 CJNE A,#0,CONT_03 ;Test STEP2=0?
002A E530 32 MOV A,STATUS_MPP ;Da! STEP 1<>0, STEP2=0
002C 540F 33 ANL A,#0FH ;Mascheaz ă biții corespunz ători MPP 2
002E 1531 34 DEC STEPS 1 ;Actualizeaz ă contor de pa și MPP 1
0030 20 1006 35 EXEC_STEP: JB SENS,LEFT ;Test sens rota ție MPP
0033 03 36 RR A ;Rote ște informa ția de comand ă la dreapta
0034 F590 37 EXEC_BOOTH: MOV P 1,A ;Scrie comanda c ătre MPP
0036 02004C 38 JMP REPRG_T0
0039 23 39 LEFT: RL A ;Rote ște informa ția de comand ă la dreapta
003A 80F8 40 JMP EXEC_BOOTH
003C E530 4 1 CONT_03: MOV A,STATUS_MPP ;STEP 1<>0, STEP2<>0
003E 1531 42 DEC STEPS 1
0040 1532 43 DEC STEPS2 ;Actualizare informa ție de pa și
0042 80EC 44 JMP EXEC_STEP

2. Programarea sistemelor cu MC 47
0044 E530 45 CONT_02: MOV A,STATUS_MPP ;STEP2<>0, STEP 1=0
0046 54F0 46 ANL A,#0F0H ;Mascheaz ă biții corespunz ători MPP 1
0048 1532 47 DEC STEPS2
004A 80E4 48 JMP EXEC_STEP
004C 85338A 49 REPRG_T0: MOV TL0,SPEED_L
004F 85348C 50 MOV TH0,SPEED_H ;Reprogrameaz ă timer0
0052 80CC 5 1 JMP END_ISR
0054 52 MAIN:
0054 120000 F 53 CALL INIT ;Execut ă rutina de ini țializare sistem
0057 20 1102 54 LOOP: JB COMMAND,START_MPP
005A 80FB 55 JMP LOOP
005C D28C 56 START_MPP: SETB TR0 ;Valideaz ă temporizare T0
005E C2 11 57 CLR COMMAND ;Anuleaz ă comanda0060 80F5
58 JMP LOOP ;Cicleaz ă (Așteapt ă!)
END
În cazul în care realiz ăm controlul unui semnal analogic cu ajutorul
sistemului format din microcontroller și convertor digital-analog de 12 biți având
drept interfa ță o interfa ță paralel ă, vom dedica 12 linii din cadrul a dou ă porturi
acestui scop.
Într-un mod analog, putem defini și opera țiile de citire a informa țiilor de
stare atât cele corespunz ătoare unor m ărimi analogice cât și cele corespunz ătoare
mărimilor digitale. Vom dedica fiec ărui semnal analogic loca ții de memorie având
o lățime a cuvântului cel pu țin egal ă cu rezolu ția convertorului ( 1 byte pentru o
rezolu ție de 8 bi ți, 2 bytes pentru rezolu ții mai mari de 8 bi ți și pân ă la 16 biți,
respectiv 3 bytes pentru rezolu ții cuprinse între 17 și 24 de bi ți, etc.)
Deci, num ărul de linii dedicate transferului de informa ții va depinde de
interfa ța convertorului, iar memoria alocat ă reținerii st ării corespunz ătoare m ărimii
va fi mai mare sau egal ă cu rezolu ția convertorului, vorbim de ceea ce îndeob ște se
nume ște "alinierea" datelor, respectiv asigur ăm uniformitatea dimensiunii loca țiilor
de memorie dedicate variabilelor sistemului ceea ce u șureaz ă accesul la informa ție
prin folosirea unor indec și adecva ți.
Necesit ățile de control a timpului sunt satisf ăcute prin dedicarea unor
canale temporizatoare/num ărătoare. Aici apar cele mai delicate probleme, mai ales
în cazul unor sisteme ce controleaz ă procese cu constante de timp mici. În acest
caz critic, este necesar s ă aloc ăm pentru controlul întârzierii respective un canal
temporizator separat, s ă minimiz ăm num ărul de instruc țiuni ale rutinei de servire a
întreruperilor și să analiz ăm, iar apoi s ă setăm cu aten ție priorit ățile stabilite la
arbitrarea întreruperilor. Va trebui ca sistemul nostru s ă satisfac ă cerin țelor impuse
de teorema e șantion ării atât la achizi ția de semnal cât și în comand ă, ceea ce
presupune ca frecven ța minim ă de e șantionare s ă fie mai mare decât dublul
frecven ței maxime ce intervine în cadrul procesului reglat.
Nu trebuie s ă uităm c ă în cazul unui sistem controlat de c ătre un
microcontroller paralelelismul în ac țiune și interac țiunea cu procesul se îmbin ă

MICROCONTROLLERE 48
continuu, ceea ce indeob ște poart ă denumirea de " concuren ță". Aceast ă proprietate
are un rolul esen țial în cazul unui sistem dedicat (încapsulat – "embedded").
Deseori, pentru sisteme relativ lente putem g ăsi o perioad ă minim ă de
temporizat, rutina de servire a întreruperilor, corespunz ătoare acesteia putând fi
utilizat ă pentru controlul mai multor comenzi, ce prezint ă constante de timp
multipli ai temporiz ării de baz ă. Dac ă acest semnal de ceas îl folosim pentru
analiza st ării globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem
de operare9 în timp real, specific. Un program monitor, (supervizor) va putea
analiza periodic starea sistemului și va decla șa task-ul, rutina adecvat ă stării. În
acest caz, construind uneltele minimale și anume task10-uri, rutine11 și subrutine12
vom putea scrie mult mai u șor programe pentru sisteme distincte, asigurând astfel
un grad de portabilitate13 ridicat al aplica țiilor.
Implementarea program ării structurate presupune decelarea acelor ac țiuni
repetabile și executate cu parametri diferi ți în mai multe etape din evolu ția
sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruc țiuni
apelabile din programul principal.
Un rol esen țial îl joac ă și modul în care realiz ăm gestiunea resurselor de
memorie. Acestea sunt dedicate câtorva scopuri și anume:
1. Salveaz ă starea sistemului. În acest sens dispunem de zone de memorie
accesibile de byte și pe bit, zon ă numit ă de obicei "vector de stare".
Dimensiunea acestei memorii este specific ă aplica ției.
2. Salveaz ă temporar informa țiile din registrele generale la apelarea rutinelor sau
la execu ția rutinelor de servire a întreruperilor, în general implementarea
acestei memorii se face utilizând un pointer memorat într-un registru special al
unității centrale numit "Stack Pointer", mecanismul de acces fiind implementat
hard pentru fiecare microcontroller. Respectiva memorie poart ă denumirea de
"stiv ă" și poate fi plasat ă la orice adres ă valid ă de memorie(intern ă sau extern ă
microcontroller-ului), dimensiunea ei având un caracter dinamic.
3. Salveaz ă informa țiile ce sunt achizi ționate, transferate sau prelucrate de c ătre
sistem formând ceea ce îndeob ște se nume ște "buffer" sau memorie tampon.

9 Prin s is tem de operare în tim p real în țelegem ansamblul de rutine ce ofer ă principalele
rutine de comand ă și control a sistemului, cu condi ția respect ării teoremei de e șantionare
atât în comad ă cât și în control
10 Prin task în țelegem acele unit ăți de program executabile independent și care de regul ă
implementeaz ă o singur ă func țiune ce este apelat ă de c ătre planificatorul (în cazul nostru,
programul principal) sistemului.
11 Rutinele implementeaz ă porțiuni mici de program, ce trateaz ă evenimente ce apar în
funcționarea sistemului. Sunt caracterizate prin rapiditate în execu ție și de regul ă sunt
asociate unui anumit eveniment decelabil de c ătre planificatorul sistemului de operare sau
decla șate de c ătre o cerere de întreruperi.
12 sunt por țiuni de program apelate de c ătre task-uri, și pot fi: dedicate, cazul celor activate
de către un "anumit" task, comune, cele apelate de c ătre mai multe task-uri și re-entrante,
cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind reîntreruptibile.
13 Prin portabilitate în țelegem gradul de reutilizare a programelor scrise pentru un anume
sistem la o clas ă larg ă de sisteme analoge celui ini țial.

2. Programarea sistemelor cu MC 49
Aceasta este organizat ă după principii ce pot diferi: FIFO prima dat ă memorat ă
este și prima dat ă extras ă, (First In First Out ) sau ultima dat ă memorat ă este
prima dat ă extras ă LIFO ( Last In First Out ), etc. Dimensiunea zonei de
memorie este adecvat ă aplica ției și fluxurilor informa ționale vehiculate. Tot în
aceast ă categorie putem încadra acele zone de "memorie comun ă", utilizate de
către task-uri diferite ce ruleaz ă pe sistem, zon ă prin intermediul c ăreia sunt
pasate informa ții de la un task la altul în scopul sincroniz ării acestora. De
asemenea în cazul unor sisteme multiprocesor se implementeaz ă stive circulare
de mesaje ce asigur ă arbitrarea accesului procesoarelor la zona de memorie
comun ă, implementându-se a șa numita c ăsuță poștală ("Mail Box"), etc.
Dimensiunea acestor zone poate fi atât variabil ă cât și fixă.
2.1.2 Instruc țiuni ale MC
Este evident c ă în cazul program ării microsistemelor un rol deosebit de
important îl joac ă setul de instruc țiuni al microcontroller-ului. Dac ă în limbajele de
nivel mediu sau înalt, limbajele prezint ă un caracter independent de structura
procesorului, limbajele ma șină sunt limbaje specifice. Aceasta presupune un grad
de detaliere mult mai ridicat ceea ce implic ă și cunoa șterea registrelor interne și a
flag-urilor indicatoare de condi ție specifice unit ății centrale, cunoa șterea structurii
interne, respectiv a memoriei interne și a modului în care aceasta este organizat ă,
cunoa șterea porturilor de intrare/ie șire și a canalelor num ărătoare/temporizatoare.
Cu toate acestea, reprezentarea grafic ă a evolu ției unui sistem cap ătă o
răspândire din ce în ce mai larg ă, ea oferind o reprezentare general ă a algoritmilor
de func ționare ai sistemelor.
Spre exemplu, reprezentarea EBNF ( Extended Backus-Naur Form )
utilizeaz ă simbolurile terminale14 și neterminale15 care sunt conectate în diagrame
(grafuri) sintactice ce formeaz ă un graf orientat. În cadrul acestor grafuri s ăgeata
exprim ă o formulare sintactic ă acceptat ă. Pot fi întâlnite urm ătoarele reprezent ări:
succesiunea, ramifica ția sau alternativa și bucla sau repeti ția. Corespunz ător
acestor formul ări, limbajele de programare ale microcontroller-elor, ofer ă
instruc țiuni (reprezentabile ca "atomi" lexicali) ce implementeaz ă traiectoriile
definte cu ajutorului grafului de fluen ță. Trebuie men ționat c ă în setul de ac țiuni se
disting câteva clase de instruc țiuni prezente la toate microcontroller-ele, și anume:
1. Instruc țiuni ce pot fi succesive (pot fi în șirate unele dup ă altele) și care
realizeaz ă în general fie un transfer de informa ție, fie o opera ție artmetico-
logic ă, fie o alt ă acțiune la nivelul unit ății centrale.

14 Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompu și în
continuare.
15 Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri
terminale.

MICROCONTROLLERE 50
2. Instruc țiuni de decizie (test), care implementeaz ă o ramifica ție a grafului, în
general, la nivelul limbajului ma șină, aceastea sunt instruc țiuni ce
implementeaz ă dou ă alternative (deci sunt de tip binar). În cazul
microcontroller-elor nu întâlnim decât bifurca ții.
3. Instruc țiuni de tip repetitiv, sau instruc țiuni ce implementeaz ă o bucl ă de
program și care sunt reprezentate prin instruc țiuni de test ce se execut ă fie la
începutul, fie la sfâr șitul unui bloc de program
Vom exemplifica pentru dou ă familii de microcontroller-e (Intel 805 1 și
PIC -"middle range") cele mai sus afirmate, urmând ca în prezentarea de detaliu a
familiilor de procesoare s ă tratăm exhaustiv aceste instruc țiuni16.
Familia 805 1 Familia PIC "middle range"
Mnemonic Ac țiunea Mnemonic Ac țiunea
MOV A,<src> A <- <src> MOVF f,d d=0 W <- <f>
MOV <dest>,A <dest> <- A d= 1 W <- <f>
MOV <dest>,<src> <dest> <- <src> MOVWF <f> <- W
MOV DPTR,#data 16D P T R < – d a t a 16M O V L W W < – d a t a 8
PUSH <src> INC SP,@SP <- <src>
POP <dest> DEC SP,<dest> <- @SP
XCH A,<byte> A <-> <byte>
XCHD A,@Ri A <-> <@Ri>
MOVX A,@Ri A <- @Ri
MOVX @Ri,A @Ri <- A
MOVX A,@DPTR A <- @DPTR
MOVX @DPTR,A @DPTR <- A
MOVX A,@DPTR A<-@DPTR
SWAP A A[high] <-> A[low] SWAP f,d d=0f[high] <->f[low]
ANL A,<byte> A <- <byte> ANDWF f,d d=0 W<-W * <f>
ANL <byte>,A <byte> <- A d= 1 f<-W * <f>
ANL 17 < byte > <-data8 <byte><- data8 ANDLW18 k19W <- W*k
ADD A,<byte> A<-A+<byte> ADDWF f,d d=0 W<-W+f
ADDC A,<byte> A<-A+<byte>+C20d=1 f<-W+f
ADDLW21 k W <- W+k

16 Abrevieri folosite la descrierea instruc țiunilor pentru procesoarele familiilor 805 1 și PIC
middle range:A registrul acumulator; W registrul de lucru (acumulator); <src> registru surs ă de
informa ție; <dest> registru destina ție al informa țiilor; DPTR Data Pointer (805 1); @
indicator pentru adresare indirect ă la memoria extern ă; d flag indicator al direc ției; f
regsitru f din "File Register" la PIC; data 16 este o constant ă numeric ă pe 16 biți; data8
constant ă numeric ă pe 8 bi ți; SP registru Stack Pointer (805 1);
17 Abrevieri (continuare): ANL este AND logic, analog func ționez ă și instruc țiunile ORL
(OR logic) și XOR (SAU-EXCLUSIV) logic.
18 ANDWF/ANDLW execut ă func ția logic ă AND între operanzi, analog avem
IORWF/IORLW execut ă func ția logic ă OR, iar XORWF/XORLW execut ă func ția logic ă
SAU-EXCLUSIV
19 k constant ă numeric ă pe 8 bi ți
20 Carry Flag sau fanionul indicator al transportului

2. Programarea sistemelor cu MC 51

21 ADDWF execut ă func ția aritmetic ă adunare între operanzi, analog avem SUBLW pentru
scădere și respectiv ADDLF/SUBLW pentru adunare/sc ădere data pe 8 bi ți

MICROCONTROLLERE 52
Familia 805 1 Familia PIC "middle range"
Mnemonic Ac țiunea Mnemonic Ac țiunea
MUL AB A[low]<-
AxBB[high]<-AxB
DIV AB A<- int(AxB) A<-
mod(AxB)
RR A A 0->A 7 A7->A 6 …. RRF A 0->A 7 A7->A 6 ….
RRC A A 0->C C->A 7 ….
RL A A 7->A 0 A0->A 1 …. RLF A 7->A 0 A6->A 7 ….
RLC A A 7->C A 6->A 7 ….
JMP addr22PC23 <-addr GOTO addr PC <-addr
CALL addr @SP <- PCPC <- addr CALL addr @SP <- PCPC <- addr
RET PC <- @SP RETURN
RETI24PC <- @SP RETFIE
RETLW k PC<-@SP, W<-k
SETB b25b <- 1 BSF f,b f b <-1
CLR b b <- 0 BCF f,b f b <-0
INC A A <-A+ 1 INCF f <- f + 1
INC DPTR DPTR<- DPTR + 1
DEC A A <- A- 1 DECF f <- f – 1
DEC < byte> Byte<-byte- 1
Instruc țiunile mai sus prezentate fac parte din prima categorie. Lista
complet ă de instruc țiuni este detaliat ă pe CD la capitolele corespunz ătoare celor
două microcontroller-e. Urmeaz ă instruc țiunile de decizie:
Familia 805 1 Familia PIC "middle range"
Mnemonic Ac țiunea Mnemonic Ac țiunea
JB addr_rel b= 1 =>PC<-PC+addr_rel BTFSC f,b f B=0 =>PC<-PC+2
Salt peste instr. urm ătoare
JNB addr_rel26b=0 =>PC<-PC+addr_rel BTFSS f,b f B=1 =>PC<-PC+2
Salt peste instr. urm ătoare
JZ addr_rel A=0 =>PC<-PC+addr_rel
JNZ addr_rel A≠0 =>PC<-PC+addr_rel
JC addr_rel C= 1 =>PC<-PC+addr_rel
JNC addr_rel C=0 =>PC<-PC+addr_rel
JBC bit,addr_rel b= 1 =>PC<-
PC+addr_rel,b <- 0
Ultimul tip de instruc țiuni, cel de ciclare este ilustrat doar prin câteva
exemple:

22 addr reprezint ă adresa de salt (adres ă absolut ă)
23 PC este Program Couter-ul (pointer-ul de instruc țiuni)
24 Întoarcere din rutina de servire a întreruperilor implic ă rearmarea sistemului de r ăspuns
la cererile de întrerupere
25 b este num ărul bit-ului care va fi setat/resetat
26 Abrevieri (continuare): addr_rel repezint ă adresa relativ ă de salt specificat ă în
instruc țiune

2. Programarea sistemelor cu MC 53
Familia 805 1 Familia PIC "middle range"
Mnemonic Ac țiunea Mnemonic Ac țiunea
CJNE A,<byte>,addr_rel A≠<byte> =>PC
<-PC+addr_rel
CJNE <byte>,#data8,addr_rel <byte>≠data8 =>
PC<-PC+addr_rel
DJNZ <byte>,addr_rel byte <- byte-
1,PC<-
PC+addr_relDECFSZ f,d f<-f- 1, d=0 =>W <- f
f=0 =>PC<-PC+2
INCFSZ f,d f<-f+ 1, d=0 => W <-
f
f=0 =>PC<-PC+2
Men ționăm în încheierea acestei enumer ări a instruc țiunilor c ă în cazul
microcontroller-elor nu exist ă instruc țiuni de intrare/ie șire, c ăci porturile
microcontroller-ului sunt "mapate"27 în spa țiul de adrese de memorie intern. Ce
rezult ă din aceasta? Accesul la elementele externe microcontroller-ului se face prin
instruc țiuni având adrese relative la porturile acestuia, adic ă sunt instruc țiuni de
transfer în cadrul memoriei interne a microcontroller-ului.
Proiectarea programelor de func ționare ale unui sistem trece prin mai
multe etape ce sunt ilustrate în figura 2. 1. Aceast ă figur ă nu prezint ă prima și în
acela și timp una dintre cele mai importante etape ale proiect ării, care const ă în
analiza sistemic ă a procesului sau sistemului a c ărui comand ă se dore ște a fi
implementat ă.
În cadrul acestei etape trebuie s ă fie eviden țiate:
1. Func țiunile sistemului, l ățimea canalelor de comunica ție nesesare transferului
infoma țiilor, precum și loca țiile de memorie țintă (destina ție) a acestora
2. Identificarea acelor canale de transfer a informa țiilor care asigur ă sincronizarea
UC cu procesul condus
3. Analiza priorit ăților ce trebuie s ă fie atribuite canalelor de transfer la tratarea
informa țiilor pentru arespecta teorema e șantion ării
4. Se eviden țiază similitudinile ce apar în func ționarea sistemului sunt grupate în
raport cu criterii specifice, func ționale canalele de transfer a informa țiilor și
sunt conturate task-urile, rutinele și subrutinele ce implementeaz ă func țiunile
sistemului de comand ă și control.
5. Sunt analizate variatele posibilit ăți de implementare hard a aplica ției, respectiv
sunt dedicate canalelor informa ționale liniile porturilor, canalele
temporizatoare, celelalte resurse diferitelor necesit ăți ale sistemului
În final trebuie s ă subliniem c ă procesul de proiectare este un proces
iterativ, care presupune parcurgerea succesiv ă de mai multe ori a etapelor de
proiectare, pentru a se ob ține o implementare a aplica ției optimal ă.

27 Prin "mapare" în țelegem definirea unei func țiuni surjective ce are drept mul țime de
defini ție mul țimea porturilor și celorlalte dispozitie periferice și ca domeniu al valorilor un
subdomeniu din spa țiul de adrese corespunz ător memoriei interne a microcontroller-ului.

MICROCONTROLLERE 54
Vom descrie pe rând care sunt elementele necesare și ce rezult ă la
parcurgerea fiec ărei etape în cadrul procesului de proiectare a programelor de
aplica ție în cazul utiliz ării uneletelor specifice procesoarelor 805 1.
Asamblarea fi șierelor surs ă scrise în limbaj ma șină și salvate ca fi șiere
Figura 2. 1 Etapele proiect ării programelor pentru un sistem dedicatEDITAREA
FIȘIERELOR
SURS Ă (asamblare)
(FORMAT ASCII)EDITAREA
FIȘIERELOR SURS Ă
(în limbaj C)
(FORMAT ASCII)
ASAMBLAREA
FIȘIERELOR
SURS ĂCOMPILAREA
FIȘIERELOR
SURS ĂBIBLIOTECI
(DIVERSE)
LINK-EDITAREA
CONVERSIA FI ȘIERELOR
OBIECT ÎN FI ȘIERE FORMAT
INTEL-HEX
TRANSFERUL FI ȘIERELOR PE
SISTEMUL DE DEZVOLTARE ȘI
DEPANAREA APLICA ȚIEI
SCRIEREA PROGRAMULUI DE
FUNC ȚIONARE ÎN MEMORIA
EPROM/FLASH A SISTEMULUI
FIȘIER SURS ĂMACRO
ASSEMBLER
A51FIȘIER OBIECT
RELOCATABIL
FIȘIER
LISTING
Figura 2.2 Rolul macro/asamblorului în generarea fi șierelor obiect

2. Programarea sistemelor cu MC 55
ASCII este descris ă în figura 2.2.
În cazul utiliz ării unor module de program scrise în C, fi șierele surs ă vor fi
compilate rezultând în urma compil ări acelea și fișiere ca și în cazul asambl ării.
În figura 2.3 prezent ăm care sunt fi șierele de intrare și cele de ie șire în
cazul utiliz ării programului link-editor
După "legarea" utilizând link-editorul a modulelor de program rezult ă
module obiect absolute care vor fi cu ajutorul debbuger-ului, sau al unui simulatorsau al unui emulator, înc ărcate și testate pentru a se eviden ția intercorela țiile ce se
stabilesc între programe și sistemul controlat.
Pentru transferul fi șierelor fie c ătre sistemul de dezvoltare, fie c ătre un
programatorul universal este necesar s ă obținem plecând de la fi șierul obiect
absolut fi șiere în formate transferabile. Aceast ă func ție este îndeplinit ă de
convertorul OHS5 1. (vezi figura 2.4)
Programul LIB5 1 ce face parte din modulul de programe specifice
microcontroller-elor 805 1 și el permite generarea unor biblioteci cu module de
program, ad ăugarea și extragerea unor module din bibliotec ă.FIȘIERUL OBIECT 1
FIȘIERUL OBIECT 2
FIȘIERUL OBIECT n
BIBLIOTECALINK -EDITORUL
SPECIFIC
PROCESOARELOR
8051MODULUL OBIECT
ABSOLUT
FIȘIERUL CU REFERIN ȚE
ÎNCRUCI ȘATE
Figura 2.3 Rolul link-editorului în generarea fi șierelor obiect absolute
FIȘIERUL OBIECT
ABSOLUTCONVERTORUL
OHS51FIȘIERUL FORMAT
INTEL – HEX
FIȘIERUL SIMBOLIC
DIGITAL RESEARCH
HEX
FIȘIERUL ÎN FORMAT
MICROTEK
Figura 2. 4 Rolul convertorului object – IntelHEX

MICROCONTROLLERE 56
2.1.3 Instrumente software de proiectare: MC 8051
Structura general ă a unei liniii de program scris în limbaj de asamblare are
forma:
[Etichet ă:] mnemonic805 1 [operand][,operand] [;comentariu] <CR><LF>28
drept separator de câmp sunt utilizate caracterele spa țiu sau tabulatorul.
Prin etichet ă înțelegem șirul de caractere ASCII ce se sfâr șește prin caracterul ":".
Operanzii pot fi clasifica ți astfel:
• Simboluri speciale de asamblare (nume de registre sau flag-uri)
• Simboluri ale programului (Segment, extern, local, public)
• Adrese indirecte
• Adrese interne ale microcontroller-ului
• Adrese ale bi ților semnificativi ai microcontroller-ului
• Adrese de interes din cadrul programului (în general adrese de salt)
Exemple:
START : ;Aceasta este o etichet ă
JMP MAIN ;Aceasta este o instruc țiune de salt
LOOP:
DJNZ R7,LOOP
;R7 este simbolul corespunz ător registrului R7, LOOP este simbolul corespunz ător
;adresei de salt (acesta este un comentariu)
Utilizarea etichetelor nu este op țional ă atunci când la adresele
corespunz ătoare acestora se face referire în program. Ele sunt de asemenea utile
pentru a da o mai mare lizibilitate programelor. Împreun ă cu comentariile ofer ă un
real ajutor atât pentru proiectant cât și pentru cel ce analizeaz ă ulterior programele.
Numerele care sunt utilizate în cadrul programelor surs ă pot fi scrise în
următoarele formate:
Baza Sufix Caractere acceptate Exemple
Hexazecimal ă H, h 0, 1,…,9,A,B,C,D,E,F 1234H, 0E7H29, 0A345h
Zecimal D,d 0, 1,2,3,4,5,6,7,8,9 1234, 1234D,023d
Octal O,o 0, 1,2,34,5,6,7 123O, 256O, 111Q,125q
Binar B,b 0, 11 1 011101B
Șirurile sunt expresii ce includ maximum dou ă caractere încadrate între apostrof-
uri.
Exemple: 'A' evaluat ca 004 1H
'AB' evaluat ca 4 142H
'ab' evaluat ca 6 162H, etc.

28 <CR> reprezint ă -returul de car ("Carriage Return" ), iar <LF> sfâr șitul de linie ("Line
Feed")
29 Caracterele scrise în format hexazecimal care încep printr-o cifr ă exprimabil ă ca un
alfanumeric vor fi scrise cu 0 în fa ța acesteia. Acest caracter este ignorat la asamblare.

2. Programarea sistemelor cu MC 57
Simboluri : reprezint ă valori numerice, adrese sau nume de registre ce permit mai
buna lizibilitate a programelor. Atributele ce pot fi date simbolurilor sunt:
TYP: cu valorile CODE, DATA, BIT sau TYPELESS sau REGISTER
SEGMENT: orice simbol con ține și untip de segment.
SCOPE : exprim ă validitatea simbolului, ea poate fi local (valabil ă doar în rutina
sau segment de program în care este specificat ă, public , caz în care în toate
modulele de program poate fi referit și este recunoscut, external, caz în care
definirea simbolului este realizat ă într-un alt fi șier surs ă sau address symbol,
VALUE : reprezint ă valoarea numeric ă corespunz ătoare simbolului, aceasta
depinde de adresa tipului de simbol respectiv.
CHANGEALE : Aceste simboluri pot fi redefinite prin intermediul directivei SET .
Simbolurile care nu au fost definite utilizând directiva SET nu pot fi redefinite
Asamblorul A5 1.EXE admite drept nume de simboluri șirurile de caractere de pân ă
la 31 de caractere, primul trebuind s ă fie obligatoriu un caracter alfanumeric:
'A','a',…'Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric.
Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce
definesc resurse ale microcontroller-ului respectiv. Iat ă câteva dintre acestea: A
=acumulatorul, R0,R 1,..R7 sunt registre generale ale bancului curent, DPTR este
simbolul corespunz ător registrului de adresare "Data Pointer", C este flag-ul de
transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la înmul țire și
împărțire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente.
Operatorii aritmetici recunoscu ți sunt:
Operatorul Exemplu Semnifica ția
+, – +5 + 1 +0Ah Semnul num ărului
+,- 2+ 10-1 Reprezint ă operatorul aplicat
* 1234H*5 Repezint ă operatorul de multiplicare
/ 45/9 Repezint ă operatorul de împ ărțire
MOD 17 MOD 5 Reprezint ă operatorul de împ ărțire întreag ă
^ 2^3 Reprezint ă operatorul de exponen țiere
( ) (2+5)*34 Precizeaz ă preceden ța opera țiilor
Operatori binari utiliza ți sunt:
Operator Exemplu Semnifica ție
NOT NOT 5 Complementul lui 5
HIGH HIGH 1234H Selecteaz ă partea mai semnificativ ă, respectiv
12H
LOW LOW 1234H Selecteaz ă partea mai pu țin semnificativ ă,
respectiv 34H a num ărului 1234H

MICROCONTROLLERE 58
Operator Exemplu Semnifica ție
SHR,
SHL2 SHL 4 Exprim ă deplasarea spre dreapta, respectiv stânga
a biților num ărului 2 cu 4 (ranguri)
AND 0FEH AND 14H Reprezint ă SI -ul logic între cei doi operanzi
OR 0FEH OR 14H Reprezint ă SAU -ul logic între cei doi operanzi
XOR 0FEH XOR 14H Reprezint ă SAU-EXCLUSIV între cei doi
operanzi
Operatorii rela ționali sunt acei operatori ce compar ă doi operanzi.
Rezultatul compara ției este ADEV ĂRAT sau FALS, valori ce sunt returnate în
urma efectu ării opera ției. Dintre ace ști operatori amintim:
Operator Exemplu Semnifica ție
>= ,GTE 8>= 17 Mai mare sau egal. Valoarea returnat ă: FALS
<= ,LTE 8 LTE 45 Mai mic sau egal. Valoarea returnat ă: ADEV ĂRAT
<> , NE 8 NE 45 Nu este egal. Valoarea returnat ă: ADEV ĂRAT
= , EQ 8 EQ 45 Egal. Valoarea returnat ă: FALS
< , LT 8 LT 45 Mai mic decât. Valoarea returnat ă ADEV ĂRAT
> , GT 8 GT 45 Mai mare decât. Valoarea returnat ă FALS
Preceden ța operatorilor este cea cunoscut ă și la alte limbaje de programare,
parantezele, apoi operatorii unari, adunarea și scăderea, înmul țirea și împ ărțirea,
deplasarea, operatorii logici și în final operatorii rela ționali.
Datele imediate, respectiv valorile numerice incluse în cadrul instruc țiunii
sunt reprezentate cu având caracterul '#' în fa ță. Exemple:
MOV A,#0ABH ;Încarc ă în A valoarea ABH, respectiv 171D
MOV DPTR,#8000H ;Încarc ă valoarea 8000H în DPTR
ANL A,# 128
;Realizeaz ă opera ția ȘI logic între valoarea memorat ă în acmulator și valoarea
;128D
MOV R0,#DAT ;Încarc ă în registru R0, valoarea simbolului DAT
Adresarea datelor poate fi f ăcută în dou ă moduri distincte:
1. Direct caz în care informa ția de adres ă este specificat ă chiar în codul
mașină respectiv
2. Indirect, caz în care simbolul inclus în codul ma șină reprezint ă adresa
la care este memorat operandul utilizat de c ătre instruc țiune. Pot fi
utiliza ți: registrele R0 și R1 sau registrul DPTR. Spa țiul de adrese este
funcție de tipul de microcontroller.
Exemplele incluse pe CD detaliaz ă loca țiile și adresele de memorie
inclusiv cele corespunz ătoare simolurilor corespunz ătoare fanioanelor
microcontroller-elor din familia 805 1.
Directivele de asamblare admise sunt prezentate în enumerarea de mai jos:
SEGMENT permite declararea unui segment ce poate fi relocatat. Sintaxa este:

2. Programarea sistemelor cu MC 59
Nume_segment_relocatabil SEGMENT Tip_segment [Tip_relocatabil]
EQU permite specificarea unei valori pentru o variabil ă utilizat ă în faza
de asamblare
SET permite specificarea unei valori pentru o variabil ă utilizat ă în faza
de asamblare, valoare ce poate fi ulterior modificat ă
DATA reprezint ă zona de memorie intern ă având adresele între 0 și 127
IDATA reprezint ă zona adresabil ă indirect din memoria intern ă a
microcontroller-ului 0 la 127 sau 0 la 255 inclusiv.
XDATA reprezint ă zona adresabil ă pe byte situat ă în memoria extern ă
microcontroller-ului
BIT reprezint ă zona adresabil ă pe bit situat ă între 20H și 27H inclusiv
CODE reprezint ă spațiul alocat codului (programelor executabile)
Rezervarea spa țiului de memorie este realizat ă prin intermediul
dispozi țiilor:
[Nume_bloc_memorie:] DS Dimensiune bloc de memorie
[Nume_variabil ă_byte:] DB Valoare de ini țializare byte
[Nume_variabil ă_cuvânt:] DW Valoare de ini țializare cuvânt
[Nume_variabil ă_bit:] DBIT Valoare bloc bi ți
Dispozi țiile ce pot fi incluse se pot adresa și link-editorului, ele trebuind s ă
fie specificate în programul surs ă. Acestea sunt:
PUBLIC directiv ă ce declar ă o variabil ă sau bloc de memorie "vizibil ă" în toate
modulele de program surs ă.
EXTRN directiv ă ce precizeaz ă faptul c ă variabila specificat ă se afl ă în alt modul
de program, implicit alt fi șier surs ă. Se precizeaz ă tipul acestei variabile ce poate fi
numele unei rutine,deci este de tipul CODE sau o variabil ă din memorie, deci
DATA.
NAME directiv ă ce define ște numele unui modul de program
Dintre dispozi țiile de control a asambl ării men ționăm:
ORG adres ă Dispozi ție ce specific ă adresa de la care se locateaz ă codul scris în
continuare
END Indic ă sfârșitul unui modul de program
RSEG Indic ă începutul zonei registrelor generale (000H)
CSEG Indic ă începutul memoriei de program (000H)
DSEG Indic ă începutul zonei memoriei de date (memoria intern ă – 000H)
XSEG Indic ă începutul zonei de memorie externe a microsistemului
ISEG Indic ă începutul zonei de memorie interne adresabile indirect
BSEG Indic ă începutul zonei adresabile pe bit
USING Specific ă bancul de registre generale utilizat
Dăm în continuare doar un exemplu ce ilustreaz ă cum func ționeaz ă câteva
dintre aceste directive.
LOC OBJ LINE SOURCE
0020 1 VAL EQU 20H ;Ini țializeaz ă variabila byte VAL cu 20H
0010 2 VAL 1 EQU 16; I n i țializeaz ă variabila byte VAL 1 cu 16
3 DSEG

MICROCONTROLLERE 60
0000 4 DS 10H ;Rezerv ă 15 bytes în zona RAM intern ă
0010 5 REG23: DS 11H
;Rezerv ă blocul REG23 de 17 bytes în zona RAM
0021 6 BITI: DS 0 1H; R e z e r v ă 1 byte cu numele BITI
0030 7 VAL2 SET VAL+VAL 1;Ințializeaz ă variabila VAL2
;func ție de variabilele VAL, VAL 1. Variabila poate fi redefinit ă în program
REG 8 COUNTER SET R0;Define ște variabila COUNTER ce poate fi redefinit ă în program
9 BSEG AT BITI+8
;Seteaz ă adresa de la care definim zona utilizator accesibil ă pe bit
0029 10 BIT_0: DBIT 1 ;Define ște bitul BIT_0
002A 11 BIT_ 1: DBIT VAL2 ;Define ște func ție de VAL2 bitul BIT_ 1
0008 12 VAL2 SET 8H ;Redefine ște variabila VAL2
0008 13 BIT_2 BIT VAL2 ;Define ște bitul BIT_2
14 XSEG AT 80H
;Define ște zona memorie externe utilizator începând de la adresa 80H
0080 15 STACK 1 DATA 80H ;Define ște pointer-el STACK 1
16 CSEG ;Define ște începutul zonei "memorie de program"
0000 17 START CODE 00H ;Define ște tipul memoriei
0000 020003 18 JMP MAIN ;Instruc țiune de salt
0003 19 ISR0 CODE START+3 ;Define ște adres ă coresp. ISR0
000B 20 ISR 1 CODE START+0BH ; Define ște adres ă coresp. ISR0
0003 2 1 MAIN: ;Adres ă de salt (definit ă de eticheta MAIN)
0003 85808 1 22 MOV SP,STACK 1;Inițializare cu STACK 1 a SP
23 END ;Sfâr șit program surs ă
SYMBOL TABLE LISTING
–– –– ––-
N A M E T Y P E V A L U E ATTRIBUTESBITI . . . D ADDR 002 1H A
BIT_0. . . B ADDR 0025H. 1 A
BIT_ 1. . . B ADDR 0025H.2 A
BIT_2. . . B ADDR 002 1H.0 A
COUNTER. . REG R0ISR0 . . . C ADDR 0003H A
ISR1 . . . C ADDR 000BH A
MAIN . . . C ADDR 0003H A
REG23. . . D ADDR 00 10H A
SP . . . . D ADDR 008 1H A
STACK 1 . . D ADDR 0080H A
START. . . C ADDR 0000H A
VAL. . . . N NUMB 0020H A
VAL 1 . . . N NUMB 00 10H A
VAL2 . . . N NUMB 0008H A

2. Programarea sistemelor cu MC 61
Alături de dispozi țiile mai sus men ționate, pentru u șurarea proiect ării
programelor sunt admise o serie de macro-instruc țiuni, specifice asamblorului, care
asigur ă asamblarea condi ționat ă a fișierelor surs ă de program. Dintre avantajele pe
care un astfel de stil în programare le are, amintim:
• Reduce substan țial frecven ța erorilor acolo unde acelea și secven țe de
instruc țiuni sunt utilizate.
• Scopul simbolurilor utilizate în MACRO-uri este limitat doar la macro-ul
respectiv
• Este util în special pentru crearea unor tabele de coduri simple.
Iată aceste directive:
Nume_macro MACRO [list ă_parametrii_formali]30
LOCAL Nume_simbol31 [,Nume_Simbol 1][…]
REPT Num ăr_repeti ții32
[Etichet ă:] IRP parametru_formal <list ă>
[Etichet ă:] IRPC parametru_formal,parameru_actual
EXITMcomand ă terminarea buclei macro curente
Exemple:
Am specificat deasupra liniei de defini ție elementele acesteia:
Nume defini ție MACRO Cuvânt cheie Parametrul MACRO
1 CLR_MEM MACRO DIMENS
2 MOV R0,#DIMENS ;Încarc ă în R0 valoarea DIMENS
3 LOOP: ;Eticheta de definire a buclei
4 MOV @R0,#00H ;Scrie la adresa memorat ă în R0:00H
5 DJNZ RO,LOOP ;Testeaz ă și cicleaz ă până R0=0
6 ENDM ;Sfâr șit MACRO CLR_MEM
; Macro-ul realizeaz ă umplerea cu zero a memoriei interne de la adresa 000H și
; pân ă la adresa DIMENS
7 REP_OK: ;Define ște o etichet ă de recunoa ștere
8 REPT 2 ;Define ște factorul de repeti ție
9 MOV R0,# 1 ;Încarc ă în R0 valoarea 1
10 MOV A,@R0 ;Transfer ă de la adresa 1 informa ția în A
11 ENDM ;Sfâr șit surs ă program generat repetitiv
0000 780 1 12+1MOV R0,# 1;Programul generat (4 instruc țiuni)
0002 E6 13+1MOV A,@R0
0003 780 1 14+1MOV R0,# 1
0005 E6 15+1MOV A,@R0
0006 16 IRP_EX: ;Exemplu de generare succesiune instruc țiuni
17 IRP X,<2,3> ;Definire variabil ă X

30 Parametri formali sunt variabile utilizate drept parametri în cadrul MACRO-ului
31 Variabil ă/simbol utilizat în spa țiul macro-ului
32 Variabil ă ce precizeaz ă de câte ori se insereaz ă în codul surs ă blocul de instruc țiuni
cuprins între REPT și ENDM

MICROCONTROLLERE 62
18 MOV R0,X ;Definire instruc țiune ce include X
19 INC R0 ;Instruc țiune de incrementare;
20 ENDM ;Sfâr șit macro defini ție repetitiv ă variabil ă
0006 A802 2 1+1MOV R0,2 ;Cod generat cu prima valoare X
0008 08 22+ 1INC R0
0009 A803 23+ 1MOV R0,3 ;Cod generat cu a doua valoare X
000B 08 24+ 1INC R0
000C 25 IRPC_EX:
;Macro defini ție repetivit ă ce utilizeaz ă variabila X dând valorile 2,5 și 9
26 IRPC X,<259> ;Setare valori variabil ă X
27 MOV @R0,X ;Definire instruc țiune
28 ENDM Sfâr șit macro defini ție repetitiv ă
000C A602 29+ 1 MOV @R0,2 ;Definire instruc țiune cu valoarea X( 1)
000E A605 30+ 1 MOV @R0,5;Definire instruc țiune cu valoarea X(2)
0010 A609 3 1+1 MOV @R0,9;Definire instruc țiune cu valoarea X(3)
32 END
SYMBOL TABLE LISTING
–– –– ––-
N A M E T Y P E V A L U E ATTRIBUTES
IRPC_EX. . C ADDR 000CH A
IRP_EX . . C ADDR 0006H AREP_OK . . C ADDR 0000H A
Urm ătoarele caractere sunt considerate caractere speciale în cazul macro-
asamblorului A5 1.EXE:
• & concateneaz ă textul cu parametrii "dummy"
• este utilizat pentru a introduce delimitatorii în text cum ar fi : , și spa țiul
(blank)
• ; delimiteaz ă de la el pân ă la sfâr șitul liniei zona ce nu va fi procesat ă de c ătre
asamblor
• ! este folosit pentru a indica asamblorului c ă urm ătorul caracter special va fi
considerat literal.
• NUL este cuvântul cheie utilizat ca expresie a "non valorii", c ăci orice alt
caracter, inclusiv blank-ul ar fi interpretat de c ătre asamblor în cadrul unor
expresii logice cum ar fi IF.
Apelarea unei expresii MACRO impune o anumit ă sintax ă, și anume:
[etichet ă:] Nume_Macro [Parametri_actuali]
Ordinea parametrilor avutâ în vedere la definirea MACRO-ului trebuie
respectat ă întotdeauna la apelarea sa. Ea este singurul element ce asigur ă
recunoa șterea corect ă a parametrilor în cadrul macro-ului.

2. Programarea sistemelor cu MC 63
Asamblorul admite caracterul $ plasat în prima coloan ă a unei linii drept
caracter "primar" de control. El va fi urmat, nu neaparat imediat, de diverse cuvinte
cheie, cum sunt:
$ XREF/NOXREF activeaz ă/inhib ă lista de referin ță cu variabilele utilizate de
program
$ TITLE define ște titlul programului, care poate fi format dintr-un șir de caractere
(maximum 60) ce urmeaz ă cuvântului cheie
$ MOD5 1/NOMOD5 1 Define ște/redefine ște setul de registre. Implicit asamblorul
execut ă asamblarea considerând c ă programul este scris pentru un microcontroller
standard 805 1, în celelalte situa ții va trebui s ă inhib ăm op țiunea prin dispozi ția:
$ NOMOD5 1, urmat ă de dispozi ția $ INCLUDE
$ MACRO/NOMACRO activeaz ă/inhib ă procesorul de MACRO-uri
$ DEBUG/NODEBUG include sau nu informa țiile de depanare necesare debug-
erului sau emulatorului
$ DATE (30,02,00) cuvântul cheie este urmat de un șir ce exprim ă data (maximum
9 caractere)
$ OBJECT: nume_fi șier indic ă numele fi șierului ce va include rezultatul
asambl ării, respectiv fi șierul cu codul obiect
$ REGISTERBANK/NOREGISTERBANK (Num ărul/numerele bancurilor de
registre utilizate)
$ INCLUDE (Nume_fi șier_cu_defini ții_registre) permite specificarea între
paranteze a fi șierului ce define ște structura de registre specific ă procesorului pentru
care a fost scris programul
$ LIST/NOLIST indic ă liniile din cadrul fi șierului surs ă ce nu vor fi listate în
fișierul listing rezultat în urma asambl ării
Utilizând dispozi țiile de asamblare condi ționat ă putem scrie compact și
incluzând toate variantele de implementare programe. În acest scop asamblorul
pune la dispozi ția programatorului urm ătoarele dispozi ții de asamblare
condi ționat ă.
$SET/RESET (<var 1>[,<var2>], …) sau (<var>=<valoare_numerica>[,…])
$ IF expresie numeric ă ce va fi analizat ă dac ă este sau nu adev ărată, în caz
afirmativ va fi asamblat programul ce urmeaz ă dispozi ției pân ă la întâlnirea
dispozi ției $ ENDIF
Alte dou ă opțiuni pot completa dispozi ția IF cu alternative la aceasta. Un
exemplu va fi edificator:
LOC OBJ LINE SOURCE
1 $DEBUG
;Dispozi ție de generare a simbolorilor pentru depanarea programului
2 $SET (A= 1)
;Define ște variabila A pentru comanda macro assembler-ului. Variabilei trebuie s ă
;i se atribuie o valoare atunci când este invocat ă opera ția de asamblare a codului
;surs ă
3 $IF A= 1 ;Testare variabil ă A, Dac ă este adev ărată
;condi ția, se execut ă asamblarea instruc țiunii urm ătoare

MICROCONTROLLERE 64
0000 E599 4 MOV A,SBUF;Instruc țiune de asamblat când A= 1
5 $ELSEIF B=2
MOV R0,SBUF
$ELSE ;Alternativ ă la bifurca ția IF
MOV R 1,SBUF ;Instruc țiune alternativ asamblat ă
$ENDIF ;Sfâr șit bifurca ție IF…. ELSE….
10 $RESET (A)
;Eliberare memorie corespunz ătoare variabilei A
11 $SET (B=2) ;Setare valoare pentru variabila B
12 $IF A= 1
MOV A,SBUF
$ELSEIF B=2;Dispozi ție macroasamblor de testare iterativ ă tip IF. Este utilizat ă pentru
;simularea instruc țiunilor de tip CASE .. ON … ELSE
0002 A899 15 MOV R0,SBUF
16 $ELSE
MOV R 1,SBUF
$ENDIF
19 $RESET (B)
20 $IF A= 1
MOV A,SBUF
$ELSEIF B=2 MOV R0,SBUF
$ELSE
0004 A999 25 MOV R 1,SBUF
26 $ENDIF
27 END
În încheiere prezent ăm sintaxa liniei de comand ă DOS ce invoc ă execu ția
programului asamblor:
A51 Nume_fi șier_surs ă.a51 [PRINT:CO:]
Utilizarea link-editorului se face tot din mediul DOS , linia de comand ă
având structura:
L51 listă_fișiere_de_intrare [TO nume_fi șier_ie șire] [list ă_controale]<CR,LF>
Sau:L51 fișier_de_comenzi <CR,LF>
Lista include nume de fi șiere ce sunt separate prin caracterul ","
Numele fi șierului de ie șire trebuie precizat atunci când dorim ca fi șierul cu
extensia logic ă ".M5 1" să fie specificat de c ătre utilizator. În caz contrar, acest
fișier va lua numele primului fi șier de lista fi șierelor de intrare.
Fișierul de comenzi poate con ține în format ASCII aceia și parametri ca și
cei din linia de comand ă. Informa ții suplimentare g ăsiți în cadrul CD-ului.

2. Programarea sistemelor cu MC 65
Un program deosebit de important este manager-ul de biblioteci LIB5 1.
Acest program asigur ă crearea unei biblioteci de func ții și actualizarea
acesteia. Linia de comand ă cu care este invocat programul are structura:
LIB5 1 [<comanda>]<CRLF>
Comenzile admise sunt:
Comanda Func țiunea
ADD Adaug ă un nou modul de program în bibliotec ă
CREATE Genereaz ă o bibliotec ă de func ții (ini țial goal ă)
DELETE Șterge din bibliotec ă un modul de program
EXIT Revine în mediul DOS
HELP Ofer ă scurte indica ții asupra comenzilor
LIST Afi șează modulele și simbolurile publice nume ale bibliotecilor
Comanda de ad ăugare (ADD) are sintaxa:
ADD nume_fi șier [(nume_modul 1,nume_modul2,…)] TO nume_bibliotec ă
<CRLF>
Comanda de ștergere (DELETE) are sintaxa
DELETE nume_bibliotec ă (nume_modul) <CRLF>
Sistemele de dezvoltare sunt deosebit de diverse. Ele dispun în afar ă de
microcontroller și de alte elemente cum sunt porturile suplimentare, de obicei
porturi de tip "registru" pe ie șiri și "buffer"-e pe intr ări. Având în vedere
caracteristicile specifice microcontrollerelor selec ția porturilor este realizat ă în
spațiul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru
microcontroller-ele Atmel seriile 89Atxxxx ( 1051,2051,4051), ci variantele
89Atxx (5 1,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas,
etc. În figura 2.5 prezent ăm un sistem de dezvoltare dotat cu un monitor Franklin
ce are implementat ă o consol ă via interfa ța serial ă. Sistemul dispune de 2 porturi
de ie șire 1 port de intrare, precum și un port de comunica ție cu un afi șor cu cristale
lichide (LCD) și un decodificator pentru circuite de intrare/ie șire cu 8 linii de
selec ție.
Sistemul permite dezvoltarea unei aplica ții care poate include toate
elementele unui sistem dedicat. Evident dac ă se dore ște, pot fi ad ăugate
convertoare analog-digitale și digital analoge, precum circuite de interfa ță diverse.
Avantajul principal al acestui sistem const ă în aceea c ă el permite
conectarea microcontroller-ului la procesul controlat ceea ce face ca utilizatorul s ă
poată analiza, depana sau chiar reproiecta anumite programe chiar în contextul dat,
având la dispozi ție toate semnalele de excita ție reale.

MICROCONTROLLERE 66
Zona de dezvoltare
Microcontroller Memorii EPROM /SRAM
Porturi de ie șirePorturi de intrareMemorie EEPROM
Figura 2. 5 Sistem de dezvoltare cu microcontroller PCB80C552
Programul monitor "mt.exe"func ționeaz ă împreun ă cu monitorul Franklin
și prezint ă câteva comenzi:
A [adres ă] <CR,LF> Asambleaz ă cod 805 1 de la adresa specificat ă
BD [ALL] < num ăr_break_point> Invalideaz ă toate break point-urile sau cel
specificat prin num ăr ce reprezint ă chiar indexul acestuia
BE [ALL] < num ăr_break_point> Valideaz ă break point-urile.
BK [ALL] <num ăr_break_point> Șterge toate break point-urile sau doar cel
specificat
BL Listeaz ă break point-urile setate
BS <adres ă>Seteaz ă (stabili ște) un break point la adresa precizat ă
DB ( Display Bits ) <adres ă_start> <adres ă_stop> Afi șează zonă memorie accesibil ă
pe bit între adresele de start și stop
DD ( Display Data ) <adres ă_start> <adres ă_stop> Afi șează zon ă memorie
accesibil ă pe octet între adresele de start și stop aflat ă în memoria intern ă a MC
DI (Display Indirect Data ) <adres ă_start> <adres ă_stop> Afi șează zonă memorie
accesibil ă pe octet indirect între adresele de start și stop
DX ( Display Extended Data ) <adres ă_start> <adres ă_stop> Afi șează zon ă
memorie accesibil ă pe octet plasat ă în afara MC, între adresele de start și stop

2. Programarea sistemelor cu MC 67
DC ( Display Code ) <adres ă_start> <adres ă_stop> Afi șează zon ă memorie
accesibil ă pe octet în memoria de program și plasat ă între adresele de start și stop
FILLB/FILLD/FILLI/FILLX/FILLC <adres ă_start> <adres ă_stop> <valoare>
Directiv ă de umplere zon ă de memorie, cu acelea și semnifica ții ca și la Dispozi ția
Display pentru diversele zone de memorie
G <adres ă_start> <adres ă_break> Dispozi ție de execu ție program între adresa de
start și cea de break
? Dispozi ție de help "on-line"
H<num ăr1><num ăr2> Dispozi ție de calcul în hexazecimal valoare sum ă/diferen ță
număr1, num ăr2
T <adres ă_start> execut ă pas cu pas instruc țiunile programului cu afi șarea tuturor
registrelor microcontroller-uluiX[<nume_registru>] afi șează toți/registrul specificat
F1 tastă special ă ce permite ie șirea din program
F2 tast ă special ă care permite înc ărcarea programelor în format Intel-HEX via
interfa ța serial ă (consola)
F3 tast ă special ă ce permite salvarea în cadrul unui fi șier al c ărui nume este
specificat de c ătre operator a caracterelor recep ționate via interfa ța serial ă
(consola)
2.1.4 Instrumente software de proiectare: MC PIC
Firma Microchip care produce microcontroller-ele PIC a adus pe pia ță
produsul MPLAB drept mediu integrat de dezvoltare/simulare (IDE Integrated
Development Environment ) pentru procesoarele sale precum și Starter-Kit-ul
corespunz ător fiec ărui microcontroller. Mediul MPLAB cuprinde urm ătoarele
componente:
• Editorul fi șierelor surs ă
• Asamblorul
• Compilatorul C
• Linkeditorul
• Editorul de stimuli
• StarterPIC sistemul de dezvoltare minimal pentru dezvoltarea aplica țiilor
• Simulatorul/Emulatorul microcontroller-elor PIC pentru diversele familii
• Programatorul microcontrollerelor ce dispun de memorie EPROM,
EEPROM sau Flash.
Asamblorul este oferit atât integrat în mediu cât și separat atât versiunea
DOS cât și versiunea Windows pe 16 biți.
Mediul integrat dispune de ferestre ce permit atât editarea programului
sursă, vizualizarea fi șierului list rezultat în urma asambl ării, fereasta ce
vizualizeaz ă memoria intern ă de program și de date a microcontroller-ului,

MICROCONTROLLERE 68
fereastra cu registrele acestuia (zona SFR) și fereastra "trace", ce urm ărește
evolu ția programului și cea corespunz ătoare memoriei EEPROM de care
microcontroller-ele din familia PIC dispun.
Meniurile mediului integrat sunt în num ăr de 3 și anume:cel corespunz ător
funcțiunilor de editare și salvare fi șiere și proiecte, cel corespunz ător proces ării
fișierelor surs ă, respectiv asambl ării sau compil ării, al link-edit ării fișeirelor obiect
și cel corespunz ător test ării/simul ării programelor scrise, ce permite execu ția pas
cu pas, admite editarea și administrarea de stimuli sistemului precum și în final,
programarea microcontroller-ului respectiv.
În ceea ce însemn ă dispozi țiile de asamblorului MPASM, apar mici
deosebiri fa ță de asamblorul A5 1.EXE. În continuare vom prezenta câteva dintre
aceste deosebiri, o list ă complet ă de referin ță o pute ți găsi pe CD.
Sistemul de numera ție Sintaxa Exemple
Zecimal D'<digi ți>, .<digiți> D'123', .255
Hexazecimal H'<digi ți>', 0x< digi ți > H'EF' , 0xE32A
Octal O'< digi ți >' O' 1234'
Binar B'< digi ți >' B' 11010011'
Caracter (ASCII) '<caracter>', A'<caracter>' 'V', A'u'
Etichetele sunt exprimate prin șiruri de caractere și ele identific ă punctele
de salt sau cele la care sunt plasate rutinele scrise.
Directiva Descriere Sintaxa
CONSTANT Define ște un simbol drept
constant ă în programConstant<etichet ă>=[<expresie>,
<etichet ă>=<expresie>,..]
#DEFINE Define ște text de substitu ție #define <nume> [<arg>,<arg>,..]
EQU Define ște o constant ă <etichet ă> equ <expresie>
#INCLUDE Include un fi șier surs ă include <nume_fi șier>
PROCESSOR Define ște tipul procesorului Processor <tip_procesor>
SET Asigneaz ă o valoare unei
variabile (poate fi apoi
redefinit ă)<etichet ă> set <expresie>
#UNDEFINE Renun ță la defini ția anterior
precizat ă prin #DEFINE#undefine <etichet ă>
VARIABLE Declar ă un simbol drept
variabil ăvariable <etichet ă>[=expresie]
IF Define ște o macro-
instruc țiune de decizieif <expresie>
WHILE Realizeaz ă buclarea atâta
timp cât condi ția testat ă la
început este adev ăratăwhile <>expresie

2. Programarea sistemelor cu MC 69
Directiva Descriere Sintaxa
BANKISEL Selecteaz ă un banc de
memorie intern ă pentru acces
indirectbankisel <etichet ă>
RES Rezerv ă spațiu de memorie res <num ăr_de_loca ții>
FILL Umple o zon ă de memorie cu
o anume informa țiefill <expresie>,<num ăr_loca ții>
DA Împacheteaz ă în memoria de
program un șir<etichet ă> da
<expresie>[,<expresie>,…]
DATA Creaz ă o valoare numeric ă
sau una textdata <expresie>[,<expresie>..],
data <text>[,<text>,..]
DB Declar ă un byte db <expresie>[,<expresie 1>,..]
DE Declar ă o dat ă în EEPROM de <expresie>[,<expresie 1>,..]
DT Define ște o tabel ă dt <expresie>[,<expresie 1>,..]
DW Declar ă o dat ă un cuvânt dw <expresie>[,<expresie 1>,..]
MACRO Define ște un MACRO <etichet ă> macro [<argument>,
<argument 1>,..]
EXITM Ie șire dintr-unMACRO Exitm
GLOBAL Export ă defini ția unei
eticheteglobal <etichet ă>
__MAXRAM Specific ă adresa maxim ă
pentru memoria RAM__maxram <expresie>
Opțiunile de link-editorului MPLINK atunci când este invocat sunt:
/o nume_fi șier specific ă fișierul de ie șire
/m nume_fi șier specific ă generarea fi șierului "hart ă" nume_fi șier
/l pathlist specific ă (adun ă)calea la fi șierul bibliotec ă ce este link-at
/k pathlist specific ă (adun ă) calea la fi șierul script utilizat de linker
/n length specific ă num ărul de linii llistate pe pagin ă
/h , /? afi șează fișierul de ajutor corespunz ător link-erului
/a hexformat specific ă formatul HEX pentru fi șierele de ie șire
/q iese din link-are/d evit ă crearea fi șierului listing absolut

3
MICROCONTROLLERE MOTOROLA
(MC cu arhitectur ă CISC)
Motorola a dezvoltat câteva tipuri de unit ăți centrale, la care s-au ata șat o
multitudine de interfe țe, ob ținând astfel foarte multe tipuri de circuite, compatibile
din punct de vedere software. Motorola a creat astfel posibilitatea producerii a
nenum ărate variante de MC, care s ă acopere cât mai multe din aplica țiile
utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated
Circuit). Spre deosebire de familia 805 1 unde pe nucleul creat de INTEL, firme
constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de
MC, ob ținând astfel o unitate în diversitate.
Schema bloc simplificat ă a unui MC din familia Motorola este dat ă în
figura 3. 1.
Unitatea central ă
6805, 6808…Memorie ROM,
EPROM sau OTP
Memorie RAM
Memorie
EEPROM
Magistrala de date și
adrese+V DD
(+5V/+3V)
RESET
IRQ
Oscilator
Port A Port B Port C
Porturi cu func ții
speciale (timer, CAN,
SPI, SCI)
Figura 3. 1 Schema bloc a unui microcontroller Motorola

3. Microcontrollere Motorola 71
Porturile I/O pot fi de uz general, dar liniile porturilor pot fi utilizate și de
interfe țele speciale. În continuare vor fi prezentate blocurile din structura MC
Motorola 6805.
3.1 MC M68HC05
3.1.1 Memoria intern ă
MC din familia Motorola, ca și toate circuitele MC, sunt echipate cu
memorie RAM, ROM și EPROM (OTP). Fiecare din memorii are o capacitate
specific ă fiec ărui tip particular de circuit. Memoria poate fi format ă din 176 – 304
octe ți de RAM, 240 octe ți de ROM și 7600 – 7744 octe ți de memorie programabil ă
(EPROM sau OTP.
Memoria RAM este folosit ă pentru stocarea temporar ă a datelor. În modul
de lucru bootstrap (specific MC Motorola), memoria RAM poate fi înc ărcată cu
informa ție de tip program prin portul SCI, urmând ca programul s ă fie executat din
RAM. Memoria ROM este folosit ă pentru a stoca programe. Modulul ROM
conține și programul care coordoneaz ă încărcarea RAM prin portul SCI. Memoria
EPROM (OTP), ca și memoria ROM, con ține programe și variabile specifice
aplica ției cu diferen ța că acestea sunt înscrise de utilizator, nu de fabricant.
În acela și spa țiu de adresare se afl ă memoria de diferite tipuri, registre I/O
și registre de control și stare, privite ca loca ții de memorie. Pentru a ști adresa la
care se afl ă fiecare element se utilizeaz ă o reprezentare numit ă harta memoriei.
Harta memoriei pentru un membru al familiei 6805 (MC68HC705J 1A) este dat ă în
tabelul 3. 1. Pentru a putea lucra cu un MC particular trebuie studiat ă alocarea
(maparea) memoriei din catalog pentru acel MC, tabelul 3. 1 este doar orientativ.
Tabelul 3.1
Maparea memoriei la MC68HC05J 1A
Con ținut Adresa (H)
Date port A 0000
Date port B 000 1
Nefolosit 0002-0003
DDR pentru port A 0004
DDR pentru port B 0005

72 MICROCONTROLLERE
Con ținut Adresa (H)
Nefolosit 0006-0007
Stare și control pentru timer 0008
Registru num ărător pentru timer 0009
Stare și control a întreruperilor 000A
Nefolosit 000B-00 11
Nefolosit 00 12-00 17
Registru de programare a EPROM 00 18
Nefolosit 00 19-00 1F
Nefolosit 0020-00BF
RAM utilizator sau stiv ă (64 octe ți) 00C0-00FF
Nefolosit (5 12 octe ți) 0 100-02FF
EPROM ( 1232 octe ți) 0300-07CF
Nefolosit (30 octe ți) 07D0-07ED
Test ROM (2 octe ți) 07EE-07EF
Registru COP 07F0
Registru de m ăști 07F 1
Rezerva ți 07F2-07F7
Vector pentru timer (octet semnificativ) 07F8
Vector pentru timer 07F9
Vector pentru IRQ (octet semnificativ) 07FA
Vector pentru IRQ 07FB
Vector pentru SWI (octet semnificativ) 07FC
Vector pentru RESET (octet semnificativ) 07FE
Vector pentru RESET 07FF
3.1.2 Unitatea central ă
Unitatea central ă realizeaz ă prelucrarea datelor pe 8 bi ți la o frecven ță
intern ă de 2MHz (tact extern de 4MHz), are o magistral ă de adrese de 11-14 biți și
conține registre și unitatea aritmetic ă și logic ă, figura 3.2. În general, la MC
Motorola, bus-ul de adrese și de date nu este disponibil în exterior.
Unitatea central ă are o arhitectur ă cu bus unic pentru date și instruc țiuni
(von Neumann) și con ține urm ătoarele registre:
Registrul Acumulator (Accumulator – A ) este un registru pe 8 bi ți de uz general.
El nu este afectat de Reset.
Registrul index (Index Register – X ) este un registru pe 8 bi ți folosit la adres ările
indexate. Nu este afectat de Reset.
Registrul indicator de stiv ă (Stack Pointer – SP ) este un registru de 13 biți care
conține adresa urm ătoarei loca ții libere în stiv ă. Dup ă Reset indicatorul de stiv ă
devine 00FFh.

3. Microcontrollere Motorola 73
Registrul num ărător de program (Program Counter – PC ) este un registru de 13
biți care con ține adresa urm ătoarei instruc țiuni de executat. Dup ă execu ția
instruc țiunii registrul este incrementat. Un salt sau o întrerupere determin ă
încărcarea PC cu alt ă valoare decât adresa urm ătoarei loca ții. Dup ă Reset registrul
PC este înc ărcat cu con ținutul loca țiilor 3FFEh și 3FFFh (la MC68HC705J 1A).
Registrul de condi ții (Condition Code Register – CCR ) este un registru de 8 bi ți
(din care sunt folosi ți 5) cu urm ătoarea semnifica ție:
• Bitul 0 -LSB, ( Carry/Borrow Flag ) pozi ționat dac ă o adunare produce un
transport sau dac ă la o sc ădere este nevoie de împrumut.
• Bitul 1 (Zero Flag ), pozi ționat dac ă rezultatul unei opera ții este zero.
• Bitul 2 ( Negative Flag ), pozi ționat dac ă rezultatul unei opera ții este
negativ (bitul 7 este 1).
• Bitul 3 ( Interrupt Mask Bit ) când este 1 sunt invalidate întreruperile. Dac ă
apare o întrerupere când acest bit este 1, ea este memorat ă pân ă bitul
devine 0; atunci se salveaz ă registrele UC în stiv ă. Dup ă Reset bitul este
setat în 1 și poate fi pozi ționat în 0 cu instruc țiunea CLI.
• Bitul 4 ( Half-Carry ) este pozi ționat când apare un transport de la bitul 3
spre 4 în acumulator la o opera ție de adunare cu sau f ără Carry. Este util la
opera ții BCD.
Unitatea aritmetic ă și logic ă realizeaz ă opera țiile aritmetice și logice
definite de setul de instruc țiuni. Multe din instruc țiunile aritmetice se bazeaz ă pe
algoritmul de la adunare. Astfel, o înmul țire este realizat ă printr-un șir de adun ări
și deplas ări succesive și dureaz ă 11 perioade de clock.Unitatea central ă 6805
Acumulator
Registru index
Indicator de stiv ă
Num ărător de program (PC)
Registru de condi țiiUAL
Unitatea aritmetic ă și logic ă
Figura 3.2. Unitatea central ă 6805

74 MICROCONTROLLERE
Inițializarea unit ății centrale
Un Reset duce unitatea central ă într-o stare determinat ă (la o adres ă
cunoscut ă). Un Reset poate fi declan șat de o surs ă intern ă sau de o surs ă extern ă
astfel:
• extern, prin pinul de RESET, activ pe 0;
• extern, Power On Reset (POR), la pornirea sursei de alimentare.
Circuitul POR asigur ă o întârziere de 4064 tacte de la momentul în
care oscilatorul devine activ și dac ă semnalul RESET extern este
inactiv, procesorul începe s ă lucreze;
• intern, de c ătre ceasul de gard ă, Computer Operating Properly (COP).
• încercarea de a executa o instruc țiune de la o adres ă ilegal ă. Dac ă
unitatea central ă încearc ă să execute o instruc țiune care nu este în
EPROM sau RAM se genereaz ă un RESET pentru a proteja MC de
scrieri sau citiri din zone necontrolate.
3.1.3 Moduri de adresare
Unitatea central ă folose ște 8 moduri de adresare pentru o cât mai mare
flexibilitate în utilizare:
1. adresare inerent ă – instruc țiunile nu au operand, cum este întoarcerea din
întrerupere (RTI) sau STOP. Instruc țiunile inerente au lungimea de un octet.
2. adresare imediat ă – instruc țiunile au un operand, care este o valoare imediat
utilizabil ă într-o opera ție cu acumulatorul sau cu registrul index. Instruc țiunile
au doi octe ți, primul fiind codul, iar al doilea valoarea imediat ă.
3. adresare direct ă – instruc țiunile pot avea acces la primele 256 de loca ții de
memorie. Instruc țiunile sunt pe doi octe ți, primul este codul iar al doilea este
octetul cel mai pu țin semnificativ al adresei operandului; octetul cel mai
semnificativ este considerat implicit 00h.
4. adresare extins ă – instruc țiunile sunt pe trei octe ți și pot adresa orice loca ție
de memorie. Primul octet este codul, al doilea este adresa (parte HIGH) iar al
treilea este adresa (partea LOW).
5. adresare indexat ă fără offset – instruc țiunile au un octet și pot avea acces la
loca ții cu adresa variabil ă din registrul index (care con ține partea LOW a
adresei). Pentru partea HIGH se folose ște 00h, a șa încât aceesul este în zona
0000-00FFh.
6. adresare indexat ă cu offset pe 8 bi ți – instruc țiunile au doi octe ți, fiind
accesibile loca ții cu adresa variabil ă în zona primelor 5 11 loca ții. Unitatea
central ă adun ă octetul din instruc țiune la registrul index (f ără semn) și se
obține adresa efectiv ă a operandului. Un exemplu de utilizare al acestui mod de
adresare este selectarea unui element k dintr-un tabel de n elemente. Valoarea

3. Microcontrollere Motorola 75
k este în registrul index, iar adresa începutului tabelului este al doilea octet al
instruc țiunii.
7. adresare indexat ă cu offset pe 16 biți – instruc țiunile au trei octe ți, fiind
accesibile toate loca țiile. UC adun ă fără semn registrul index la cei doi octe ți
din instruc țiune și se ob ține adresa efectiv ă a operandului (primul octet dup ă
codul instruc țiunii este octetul HIGH).
8. adresare relativ ă – este folosit ă în instruc țiunile de salt. La un salt relativ, se
adun ă (cu semn) octetul care urmeaz ă dup ă codul instruc țiunii la con ținutul
registrului Program Counter. Se pot face salturi relative în gama 127 de octe ți
înainte sau înapoi.
3.1.4 Setul de instruc țiuni
Unitatea central ă MC68HC05 are 6 1 de instruc țiuni (mai mult de 200 de
coduri). Câteva dintre instruc țiunile mai importante, clasificate dup ă tipul opera ției,
sunt enumerate în continuare.
Opera ții registru- memorie
ADD, ADC – adun ă con ținutul unei loca ții de memorie la acumulator (f ără
sau cu transport)
AND – și între memorie cu acumulator
CMP – compar ă memorie cu acumulator
EOR – sau exclusiv memorie cu acumulatorCPX – compar ă registru index cu memoria
LDA, LDX – încarc ă acumulator (registru index) cu un octet din memorie
ORA – sau logic între acumulator și memorie
SBC, SUB – sc ădere cu sau f ără împrumut
STA, STX – salvare acumulator (registru index) în memorie
MUL – înmul țire
Opera ții de tip cite ște- modific ă- scrie
ASL,ASR, LSL, LSR – deplasare aritmetic ă (logic ă) stânga (dreapta)
BSET, BCLR – setare sau resetare bit
CLR – resetare registru
COM – complement fa ță de 1
NEG – complement fa ță de 2 (negare)
ROL, ROR – rota ție stânga (dreapta) prin Carry
TST- – test pentru zero sau negativ
Opera ții de salt
BCC, BCS – dac ă bitul Carry este 0 sau 1
BEQ, BNE – dac ă este egal (sau nu)
BHCC, BHCS – dac ă bitul Half Carry este 0 sau 1
BHI, BHS – dac ă este mai mare ori mai mare sau egal
BLO, BLS – dac ă este mai mic ori mai mic sau egal

76 MICROCONTROLLERE
BIH, BIL – dac ă linia de întrerupere extern ă este 1 sau 0
BMI, BPL – dac ă este negativ (sau pozitiv)
BMC, BMS – dac ă masca de întrerupere este 0 sau 1
BRA, JMP – salt necondi ționat
BSR, JSR – salt la subrutin ă
Manipulare la nivel de bit
BCLR, BSET – înscrierea unui bit cu 0 (sau cu 1)
BRCLR, BRSET – salt dac ă un bit este 0 (sau cu 1)
Opera ții de control
CLC, SEC – înscriere cu 0 (cu 1) a bitului de Carry
CLI, SEI – înscriere cu 0 (cu 1) a m ăștii pentru întrerupere
NOP – nu se execut ă nici o opera ție
RTI, RTS – întoarcere din întrerupere (subrutin ă)
STOP, WAIT – se opre ște oscilatorul CPU și se a șteapt ă o întrerupere
extern ă (se valideaz ă întreruperile)
SWI – întrerupere software
TAX, TXA – transfer ă acumulatorul în registrul index (sau invers)
3.1.5 Sistemul de întreruperi
Unitatea central ă poate fi întrerupt ă din programul curent de urm ătoarele
surse:
• un 0 logic aplicat din exterior pinului nIRQ;
• un 1 logic aplicat din exterior la pinii PA3-PA0 ai portului I/O PA,
dacă aceste întreruperi sunt validate;
• o întrerupere de la timer-ul sistemului (TOF Timer Overflow sau RTIF
Real Time Interrupt), dac ă întreruperea este validat ă;
• instruc țiunea de întrerupere software SWI.
Dacă o întrerupere vine în timp ce UC execut ă o instruc țiune, instruc țiunea
în curs este terminat ă și apoi se consider ă întreruperea. Întreruperile pot fi
invalidate global în registrul condi țiilor de program (CCR) și individual pentru
fiecare surs ă în parte. Un Reset inhib ă toate întreruperile pentru ca procesul de
inițializare s ă nu poat ă fi întrerupt.
La apari ția unei întreruperi, unitatea central ă termin ă instruc țiunea în curs,
apoi salveaz ă în stiv ă registrele UC, invalideaz ă întreruperile pentru ca o nou ă
întrerupere s ă nu deranjeze servirea întreruperii curente. Cererile de întrerupere
sunt memorate și servite dup ă servirea întreruperii curente. În PC se transfer ă
vectorul de întrerupere și se execut ă rutina de servire a întreruperii. Rutina se
termin ă cu instruc țiunea RTI care restaureaz ă registrele UC din stiv ă. Vectorii de
întrerupere pentru fiecare dintre sursele enumerate mai sus sunt stoca ți în memorie
la adresele:

3. Microcontrollere Motorola 77
• timer 07F8h și 07F9h;
• nIRQ sau PA 07FAh și 07FBh;
• instruc țiunea SWI 07FCh și 07FDh;
• Reset (POR, RESET din exterior, COP sau adres ă ilegal ă) 07Feh și 07FFh.
Adresele vectorilor pentru fiecare tip de MC se g ăsesc în harta memoriei
furnizat ă de produc ător.
Unele MC din familie au și alte interfe țe care pot și ele s ă solicite
întreruperi, a șa cum poate cere circuitul timer.
Până la servirea întreruperii trece un anumit interval de timp (tacte), timp
necesar pentru ca UC s ă termine instruc țiunea curent ă și să salveze în stiv ă
registrele. Acest timp este numit Interrupt Latency și poate fi oricât de lung dac ă
întreruperile nu sunt validate. Cea mai lung ă instruc țiune este MUL, care dureaz ă
11 tacte, iar unitatea central ă are nevoie de 9 tacte pentru a salva registrele în stiv ă,
deci cel mai lung timp de a șteptare pentru servirea unei întreruperi este de 20 de
tacte. Acest timp trebuie s ă fie luat în calcul în momentul realiz ării unei aplica ții în
timp real. Dac ă survine o a doua întrerupere, timpul de a șteptare pentru servirea ei
poate fi prea lung. O solu ție ar fi validarea întreruperilor în timpul servirii primei
întreruperi. În acest caz trebuie avut grij ă ca stiva s ă fie destul de mare pentru a
permite salvarea a dou ă seturi de registre.
3.1.6 Interfe țe și periferice on-chip
Blocurile func ționale integrate în circuitul MC sunt de o deosebit ă
importan ță în implementarea unei aplica ții. Este în egal ă măsură important s ă fie
cunoscute și bine st ăpânite atât capabilit ățile unit ății centrale cât și ale interfe țelor
cu care este echipat MC – aceast ă cunoa ștere conduce la o exploatare performant ă
a resurselor.
a. Porturi paralele I/O
Porturile paralele I/O sunt forma cea mai simpl ă a interfe țelor.
MC68HC705C8 dispune de 3 1 de linii I/O digitale de uz general grupate în patru
porturi. Porturile A, B, și C sunt porturi de câte opt bi ți fiecare; sensul transferului
pe fiecare linie (intrare sau ie șire) poate fi stabilit prin program. Fiec ărei linii îi este
asociat un bit într-un registru de direc ție (DDR Data Direction Register ).
Organizarea porturilor de opt bi ți (A,B și C) este identic ă.
Portul D dispune de șapte linii (f ără PD6); acestea pot fi folosite doar ca
linii de intrare. O particularitate a acestui port este faptul c ă pinii corespunz ători
sunt folosi ți fie de portul D, fie de porturile seriale SPI și SCI, în func ție de starea
de activare înscris ă în registrele de comand ă ale porturilor seriale SPI și SCI.
Liniile I/O pot fi citite sau scrise de unitatea central ă cu instruc țiuni
specifice. Liniile pot fi apelate grupat, la nivel de port sau individual, la nivel de

78 MICROCONTROLLERE
bit. Pentru a economisi timpul unit ății centrale, interfe țele pot lucra cu unitatea
central ă prin intermediul întreruperilor.
b. Portul serial asincron SCI ( Serial Communications Interface )
SCI este un transmi țător receptor asincron universal (UART) cu
posibilitatea lucrului full-duplex. Pentru un transfer bidirec țional sunt suficien ți doi
pini. Cu circuite de transla ție de nivel RS232 se pot face transferuri la distan țe
suficient de mari. Se poate programa una din 32 viteze de transmisie și lungimea
caracterului; se pot valida separat transmi țătorul și receptorul; se pot genera
întreruperi în diferite situa ții; se poate detecta eroare de cadrare la recep ție.
Formatul datelor este ca la orice transmisie asincron ă (RS232 sau RS422).
Linia este în stare MARK, iar transmisia unui caracter este semnalat ă de trecerea
liniei în stare SPACE pe durata bitului de START. Urmeaz ă 8 sau 9 bi ți de date și
un bit de STOP.
Datele care se doresc a fi transmise sunt scrise în registrul de date al SCI
(SCDR), apoi se valideaz ă transmisia prin pozi ționarea bitului TE ( Transmit
Enable ) în registrul de control al SCI (SCCR2). Dup ă ce cuvântul a fost transmis,
se pozi ționeaz ă bitul TDRE ( Transmit Data Register Empty ) în registrul de stare
SCSR ( SCI Status Register ). Se indic ă astfel c ă poate fi transmis un nou cuvânt. Se
pot transmite caractere speciale, cum ar fi BREAK, care ține linia în stare SPACE
(se transmite un șir de 0) dac ă se pozi ționeaz ă bitul SBK în SCCR2 sau un caracter
care ține linia în stare MARK.
Golirea registrului de date semnalizat ă de TDRE sau de TC ( Transmission
Complete ) din SCDR poate genera o întrerupere.
Datele sunt recep ționate în SCDR, la recep ția complet ă fiind pozi ționat
bitul RDRF ( Receive Data Register Full ) în SCSR. Pentru eliminarea recep țiilor
false fiecare bit de start este e șantionat și citit de 16 ori; orice nepotrivire a
eșantioanelor duce la respingerea acestui bit. Dac ă nu se recep ționeaz ă bitul de
STOP se anun ță o eroare de cadrare prin pozi ționarea bitului FE în SCR.
Întreruperile la recep ție pot fi generate dac ă bitul RDRF din SCSR indic ă
recep ția unui caracter, dac ă este o eroare de vitez ă de recep ție (prin recep ția unui
caracter înainte ca cel precedent s ă fi fost citit) sau dac ă s-a recep ționat un caracter
special format numai din valori de 1.
Structura registrului de control SCCR 1 este:
Bit 7 este al 9-lea bit recep ționat dac ă s-a definit o transmisie pe 9 bi ți
Bit 6 este al 9-lea bit de transmis dac ă s-a definit o transmisie pe 9 bi ți
Bit 4 comand ă lungimea caracterului, 8 sau 9 bi ți
Bit 3 este un bit de trezire care comand ă ce fel de condi ție treze ște SCI
Structura registrului de control SCCR2 este:
Bit 7 – TIE Transmit Interrupt Enable – valideaz ă întreruperile cerute de TDRE
Bit 6 – TCIE Transmit Complete Interrupt Enable – valideaz ă întreruperile
cerute de TC
Bit 5 – RIE Receive Interrupt Enable – valideaz ă întreruperile cerute de RDRF

3. Microcontrollere Motorola 79
Bit 4 – ILIE Idle Interrupt Enable Bit -valideaz ă întreruperile cerute de
caracterul șir de 1
Bit 3 – TE Transmit Enable – valideaz ă transmisia
Bit 2 – RE Receive Enable – valideaz ă recep ția
Bit 1 – RWU Receiver Wakeup Enable – pune receptorul în stare de a șteptare
Bit 0 – SBK Send Break – trimite caracterul BREAK
Structura registrului de stare SCSR este:
Bit 7 – TDRE Transmit Data Register Empty – registru de transmisie gol
Bit 6 – TC Transmission Complete – transmisie complet ă
Bit 5 – RDRF Receive Data Register Full – registru de recep ție plin
Bit 4 – IDLE – s-a recep ționat un șir de 1
Bit 3 – OR Receiver overrun – eroare de vitez ă de recep ție
Bit 2 – NF Receiver Noise – s-au detectat perturba ții în datele citite (prin
eșantionarea bitului de START)
Bit 1 – FE Framing Error – eroare de cadrare.
Registrul ratei de transfer este descris în tabelul 3.2.
Tabelul 3.2
Conținutul registrului ratei de transfer
Bit 5 Bit 4 Ceas pentru transfer Bit 2 Bit 1Bit 0 Rata de transfer
0 0 ceas intern 0 0 0 ceas de transfer
0 1 ceas intern /3 0 0 1 ceas de transfer/2
1 0 ceas intern/4 0 1 0 ceas de transfer/4
11 ceas intern/ 130 11 ceas de transfer/8
1 0 0 ceas de transfer/ 16
1 0 1 ceas de transfer/32
11 0 ceas de transfer/64
111 ceas de transfer/ 128
Rata de transfer se ob ține printr-o dubl ă divizare, întîi se ob ține un ceas de
transfer prin divizarea ceasului intern, apoi se divizeaz ă ceasul de transfer. Se pot
astfel ob ține diferite rate de transfer, de exemplu 4800 Baud (4808) la un ceas de
2MHz prin divizarea întâi cu 13, apoi cu 1.
c. Portul serial SPI (Serial Peripheral Interface)
Cu acest port se poate realiza o comunica ție sincron ă simpl ă, folosit ă de
regul ă pentru a transfera date între circuite pe acela și montaj cu MC. Un transfer
bidirec țional necesit ă 3 pini, unul dintre ei fiind alocat ceasului de transmisie
generat de masterul SPI. Cu SPI se pot realiza transferuri și între microcontroller-e.
Transferurile pot fi full duplex.
Registrele care controleaz ă transferul SPI sunt registrul de control (SPICR
– SPI Control Register ) și registrul de stare (SPISR – SPI Status Register ). Un
transfer SPI poate fi ini țiat doar de un master. Master-ul scrie un octet în registrul

80 MICROCONTROLLERE
de transmisie SPI (SPDR – SPI Data Register ) de unde datele merg într-un registru
de deplasare în care sunt serializate și de unde sunt transmise sincron cu ceasul de
transmisie. Transmisia se termin ă dup ă 8 tacte, când se pozi ționeaz ă bitul SPIF.
Înainte ca master-ul s ă trimit ă un nou octet trebuie s ă se reseteze bitul SPIF prin
citirea registrul de stare SPSR. În slave datele intr ă în registrul de deplasare cu
tactul de recep ție, acela și cu cel de transmisie. Când au intrat 8 bi ți, caracterul este
transferat în registrul de date SPDR. Pentru a se evita erorile de vitez ă (sau de
suprascriere – Overrun ) trebuie ca octetul din SPDR s ă fie citit înainte ca un alt
octet s ă fie transmis din registrul de deplasare.
Pozi ționând bitul MSTR din registrul SPCR în 1, MC lucreaz ă în mod
master. În acest mod pinii au urm ătoarea semnifica ție:
• SCK ( Serial Clock ) este ie șire de tact pentru sincronizare;
• MOSI ( Master Output Slave Input ) este ie șirea serial ă;
• MISO ( Master Input Slave Output ) este intrarea serial ă;
• nSS ( Slave Select ) protejeaz ă MC dac ă dou ă circuite sunt master.
Acest semnal activ dezactiveaz ă la cel ălalt port SPI modul master,
șterge bitul MSTR și pozi ționeaz ă bitul de eroare (MODF Mode Fault
Flag ).
Cu bitul MSTR=0 se valideaz ă modul slave, în care pinii au semnifica ția:
• SCK ( Serial Clock ) este intrarea de tact pentru sincronizare de la
master;
• MOSI ( Master Output Slave Input ) este intrarea serial ă;
• MISO ( Master Input Slave Output ) este ie șirea serial ă;
• nSS ( Slave Select ) valideaz ă SPI pentru modul slave.
În figura 3.3 este ar ătată o conexiune SPI în care sunt legate un circuit master și
mai multe circuite slave.
SPI
MISO
MOSI
SCK
/SS
MC masterPort I/O
0
1
2
nSS SCK MOSI MISO
Dispozitiv slavenSS SCK MOSI MISO
Dispozitiv slave+1
Figura 3.3 Conexiune SPI

3. Microcontrollere Motorola 81
Circuitele slave sunt validate pe rând cu semnale dintr-un port de ie șire
auxiliar.
Pentru a putea adapta transmisiei seriale cât mai multe echipamente
seriale, se poate programa faza și polaritatea ceasului de sincronizare cu bi ții
CPOL și CPHA din SPCR.
În SPI pot s ă apar ă urm ătoarele erori:
• mai multe MC master conectate ( Mode Fault Error )
• scrierea în SPDR în timpul unei transmisii (coliziune), are ca urmare
înscrierea bitului WCOL în SPSR;
• omiterea citirii SPDR înainte ca urm ătorul octet s ă soseasc ă (suprascriere).
O întrerupere poate fi generat ă în urm ătoarele situa ții:
• registrul de date este gol sau plin (la transmisie respectiv la recep ție) se
semnaleaz ă cu SPIF care poate genera o întrerupere dac ă întreruperea este
validat ă cu SPIE;
• la apari ția unei erori Mode Fault semnalat ă cu MODF, dac ă întreruperea
este validat ă cu SPIE.
d. Timer
Circuitele de timp care echipeaz ă MC Motorola sunt foarte variate. De la
cel mai simplu (MC68HC05J) care poate genera 2 întreruperi periodice: una cu
frecven ța fix ă și una cu frecven ța variabil ă, și pân ă la cel mai complex (MC68332)
care con ține un temporizator cu propria lui unitate aritmetic ă și logic ă proiectat
special pentru controlul motoarelor cu ardere intern ă.
Un timer tipic (de la MC68HC705J 1A), nu cel mai simplu dar nici cel mai
complex, are schema bloc dat ă în figura 3.4.
Ceasul de intrare în timer este ceasul de magistral ă (frecven ța cristalului/2)
care, dup ă o divizare cu 4, constituie tact pentru un num ărător de 8 bi ți. Valoarea
acestui registru num ărător poate fi citit ă de UC în oricare moment la loca ția 09h
(TCR Timer Counter Register ). UC nu poate s ă modifice valoarea acestui registru.
Când num ărătorul trece de la FFh la 00h este pozi ționat bitul TOF (Timer Overflow
Flag ) în registrul de stare al timer-ului (TCSR Timer Control and Status Register ).
Starea acestui bit poate fi citit ă de UC în oricare moment. Dac ă bitul TOIE ( Timer
Overflow Interrupt Enable ) din registrul de stare TCSR este 1, în momentul trecerii
de la FFh la 00h se genereaz ă o întrerupere, numit ă întrerupere de dep ășire
(Overflow Interrupt ).
Ieșirea num ărătorului de 8 bi ți constituie tact pentru un alt num ărător de 7
biți. Ie șirea de la oricare dintre cei mai semnificativi 4 bi ți ai acestui ultim
num ărător (selectat ă de unul din cei doi bi ți RT 1 și RT0 din registrul de control
TCSR) poate fi folosit ă pentru generarea unei întreruperi, numit ă de timp real
(Real Time Interrupt ) care înscrie bitul RTIF ( Real Time Interrupt Flag ) din
TCSR. Se genereaz ă o întrerupere dac ă bitul RTIE ( Real Time Interrupt Enable )
este 1.

82 MICROCONTROLLERE
Ultimul nivel al timer-ului este un num ărător de 3 bi ți folosit pentru cesul
de gard ă (COP Computer Operating Properly ). Dac ă este validat ă verificarea COP,
trebuie ca programatorul s ă reseteze COP înainte de expirarea perioadei
programate pentru comanda unui RESET al UC. Perioada de timp în care COP
trebuie resetat depinde de RT 1 și RT0. În tabelul 3.3 sunt date perioadele de
întrerupere și perioadele în care COP trebuie resetat. Perioadele corespund unui
tact de 2MHz:
Tabelul 3.3
Perioade de întrerupere și perioade de reset programabile cu un tact de 2 MHz .
RT1RT0 Perioada de întrerupere Perioada în care COP trebuie resetat
0 0 8.2ms 57.3ms
0 11 6.4ms 114.7ms
1 0 32.8ms 229.4ms
11 65.5ms 458.8ms
Un reset al COP se poate realiza prin scrierea bitului 0 de la adresa 07F0h
(COPR COP Register ).
MC din seria 68705 sunt echipate cu un timer care are posibilitatea de
captur ă și comparare. Captura poate înregistra momentul la care apare un
eveniment extern (o tranzi ție pe pinul TCAP). În acest moment memoreaz ă
conținutul registrelor timer-ului în registrele de captur ă. Memorarea registrelor
timer-ului la tranzi ții de aceea și polaritate a TCAP poate determina perioada unuiXtal/2Divizare
cu 4Num ărător de 8 bi ți MSB
TCR (Timer Counter Register) la adresa 0009h
TCSR registru de control și stare a timerului
TOF RTIF TOIE RTIE TOFR RTIFR RT 1 RT0
Num ărător de 7 bi ți Selec ție ie șire
Num ărător de 3 bi ți
COPGenerare de Reset
intern al UC
Figura 3.4 Timer 6805

3. Microcontrollere Motorola 83
semnal, iar la tranzi ții de polaritate opus ă poate determina l ățimea unui impuls.
Polaritatea de declan șare este programabil ă. Prin comparare se poate genera un
semnal de ie șire când num ărătorul timerului atinge o valoare selectat ă. La fiecare 4
tacte se compar ă valoarea num ărătorului cu cea scris ă în registrul de comparare.
Dacă este egalitate se genereaz ă un semnal TCMP.
e. Portul PWM
Modula ția impulsurilor în l ățime ( Pulse Width Modulation ) are multe
aplica ții, mai ales în comanda motoarelor de curent continuu sau a surselor de
alimentare. Din acest motiv unele MC includ în structura lor un modulator PWM
ca interfa ță.
Circuitul MC68HC05D9 con ține 5 canale PWM de câte 6 bi ți care sunt
realizate cu ajutorul unui num ărător de 6 bi ți, un registru de control PWM și 5
registre de date care formeaz ă 5 linii PWM ce sunt disponibile la pinii portului D
(figura 3.5).
În registrul de mod sunt 5 bi ți care valideaz ă modulul PWM astfel încât
semnalele PWM s ă fie livrate pe la pinii portului D. Tot în registrul de mod mai
este un bit, SCIB, care selecteaz ă dac ă la adresa 000Dh s ă fie date pentru PWM
sau rata de divizare pentru SCI. Dac ă nu sunt folosite ca ie șiri PWM, liniile
portului D pot fi folosite ca intr ări/ieșiri obi șnuite. Registrul de mod PWM se afl ă
la adresa 0008h.Num ărător de 6
bițiPWM4 (000Dh)
PWM3 (000Ch)
PWM2 (000Bh)
PWM 1 (000Ah)
PWM0 (0009h)R
E
GISTR
U
D
E
M
O
D
P
WMPWM 4
PWM 3
PWM 2
PWM 1
PWM 0
Figura 3.5 Structura modulului PWM la familia 68050008h

84 MICROCONTROLLERE
Dacă se încarc ă registrul de date cu 00h semnalul la ie șire va fi tot timpul
zero. Înscrierea valorii 20h în registrul de date are ca rezultat un semnal cu factor
de umplere 50% la ie șirea corespunz ătoare, iar înc ărcarea valorii 3Fh va determina
un semnal cu factor de umplere de 63/64.
f. Portul USB (MC68HC05JB4)
MC68HC05JB4 con ține un convertor A/D și o interfa ță USB, ceea ce îl
face ideal pentru achizi ția de date și transferul lor c ătre un calculator PC-AT.
Datorit ă structurii USB, este posibil ă realizarea unui punct central de prelucrare
echipat cu PC și multe puncte de achizi ție echipate cu acest MC.
Modulul USB implementeaz ă standardul USB 1.0, de mic ă vitez ă, la
1,5Mbps, cu 3 puncte de cap ăt (End Point ). MC con ține și transceiverul USB.
Schema bloc a modului USB este dat ă în figura 3.6.
Transceiverul are o ie șire diferen țială care poate lucra cu 3 st ări pentru a
permite transferul de date bidirec țional de tip full-duplex. Receptorul trebuie s ă fie
de asemenea cu intr ări diferen țiale.
Comanda interfe ței USB se realizeaz ă prin intermediul a 3 registre de
comand ă iar starea poate fi citit ă dintr-un registru de stare. Exist ă un registru de
adres ă și 24 de registre de date. Modul de func ționare în întreruperi este programat
prin registrul de întreruperi. Interfa ța USB poate lucra în modul de economie de
energie dac ă nu exist ă trafic pe linii un anumit interval de timp. Apari ția unei date
la recep ție sau emisia unei date de c ătre UC produce ie șirea din starea inactiv ă.Logica de
control USB
Registre USB
BUS INTER NTransceiver
Stabilizator 3,3VD-D+Cablu USBMC
Figura 3.6 Structura intern ă a portului USBspre HUB sau
alt dispozitiv

3. Microcontrollere Motorola 85
g. Interfa ța LCD
MC6805 DragonKat este denumirea unui MC din familia 6805 care
conține o interfa ță pentru un afi șor cu cristale lichide.
Interfa ța pentru LCD con ține:
• logica de control pentru sincronizare;
• RAM-ul de display care stocheaz ă datele pentru display printr-o
coresponden ță 1 la 1 a bi ților (fiecare bit din memorie are
corespondent un punct pe LCD). Memoria este organizat ă în cuvinte
de 5 bi ți și poate fi scris ă sau citit ă;
• registru de date este folosit pentru a stoca datele din memoria RAM a
LCD;
• generator de tensiune care con ține un divizor de tensiune pentru
alimentarea segmentelor și a planului din spate;
• driver pentru planul din spate;
• driver pentru segmente.
Structura unui afi șaj LCD este ar ătată în figura 3.7.
Un punct este aprins când o linie Bpi și una SEGi sunt active. Pentru
caracterul A, memoria RAM de display are con ținutul din tabelul 3.4.
Tabelul 3.4
Conținutul memoriei pentru afi șarea caracterului A
Adresa Bit0 Bit 1Bit2 Bit3 Bit4
200 0 0 1 00
201 0 1 0 1 0
202 1 000 1
203 1 000 1
204 11111
205 1 000 1
206 1 000 1
2 0 700000Segmente (SEG 0-39)
Planul
din spate
(BP 0- 15)
Figura 3.7 Afișaj LCD

86 MICROCONTROLLERE
Punctul de sus a lui A de exemplu, se scrie cu BP0 și SEG2 active.
Semnalele SEG și BP sunt periodice și baleiaz ă tot timpul afi șajul pentru a men ține
punctele aprinse. Frecven ța semnalelor de aprindere a punctelor este de 32kHz, iar
frecven ța unui cadru este de 62,5Hz.
Dimensiunea panourilor LCD difer ă, de aceea difer ă și consumul de
curent. Tensiunea spre afi șaj este ob ținută prin înserierea unor rezisten țe, înseriere
care poate fi comandat ă soft.
Schema bloc a interfe ței pentru LCD este dat ă în figura 3.8
3.1.7 Managementul puterii
Instruc țiunea STOP plaseaz ă UC în modul de lucru cu consum minim de
energie. Ceasul intern este oprit și toate procesele interne sunt oprite, inclusiv
timer-ul. Întreruperile externe sunt validate automat în registrul CCR. Sunt șterse
registrele aferente timer-ului și canalului SCI, dar celelalte registre și memoria nu
sunt alterate. Unitatea central ă poate fi trezit ă din STOP doar de o întrerupere
extern ă.
Instruc țiunea WAIT plaseaz ă UC într-un mod de lucru cu consum redus de
energie. R ămân active timer-ul și canalul serial SCI. Orice întrerupere validat ă,
primit ă din exterior sau de la temporizator sau SCI, trezesc unitatea central ă.Registru de
date LCD
(40bi ți)RAM pentru display 128x5bitMagistrala intern ă de
adrese si date
Driver de segmenteDriver
pentru
planul
din
spate
BP0-BP 15
SEG0-SEG39Registru
de control
Figura 3.8 Schema bloc a intefe ței LCD

3. Microcontrollere Motorola 87
Întreruperile sunt validate automat. Toate registrele și memoria r ămân cu datele
avute la intrarea în starea WAIT.
3.1.8 Autoverificarea
MC are 2 moduri de operare: normal și auto-verificare. Modul de operare
este selectat de nivelul logic pe pinul IRQ în momentul unui RESET. În modulnormal de operare începe rularea unui program din EPROM, deci EPROM-ul
trebuie sa fie programat dac ă a fost ales modul normal de operare. În modul
autotest MC ruleaz ă un program con ținut în ROM în zona de memorie 3F00h-
3FDEh. Autotestul comunic ă rezultatele la pinii PC3-PC0, unde se pot conecta
LED-uri.
3.1.9 Programarea EPROM
Unele MC din familie con țin ROM, a șa cum este MC68HC05D9 care
conține 16K octe ți de PROM sau MC68HC05D24 care con ține 24K octe ți de
ROM. Modelul MC68HC05D32 are 32K octe ți memorie EPROM, cu posibilitatea
de ștergere UV. Înscrierea memoriei se face cu ajutorul unei tensiuni suplimentare
de 15V (Vpp). Circuitele MC68HC705C8A con țin 8K EPROM sau OTP. Memoria
EPROM sau OTP se poate programa cu ajutorul unui modul special, construit de
Motorola, sau folosind un montaj în care progamul se încarc ă în MC dintr-o
memorie EPROM extern ă sau cu orice programator care poate s ă adreseze și să
pună date pe liniile de date (figura 3.9
MC68xx
PA
PA0-
PA7
PB
PB0-
PB7
PC
PC0-PC4A0-A7
D0-D7
A8-A 12Vpp
+15V la
înscriereSCI
PD
PD1
PD0Circuite de
modificare de
nivel RS232
TxD RxD
Figura 3.9 Schema unui programator EPROM (sau OTP)

88 MICROCONTROLLERE
Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A 12)
se stabilesc la portul C (PC0-PC4). Liniile cu datele de înscris se stabilesc la portul
B. Registrul folosit pentru programarea EPROM-ului este registrul de programare
(PROG).
• Bit 2- LAT ( Latch Enable Bit ), pozi ționat în 1, comand ă ca liniile de
adrese și date s ă fie bufferate pentru ca în urm ătorul ciclu s ă se fac ă o
scriere a EPROM-ului;
• Bit 0 (PGM) valideaz ă tensiunea Vpp pentru programarea EPROM-ului.
Se pune problema cum se poate ca un MC care nu a fost programat s ă
lucreze sub comanda unui program ca s ă poat ă avea acces la programarea unui
registru. Pentru programare MC trebuie s ă lucreze în modul bootstrap, mod în care
MC intr ă prin for țarea liniei IRQ în timpul unui RESET. Programe simple
utilizator pot fi introduse în RAM prin interfa ța SCI ( Serial Communications
Interface ) și rulate. Programul se transmite prin interfa ța serial ă, dup ă care se
ruleaz ă programul din RAM. Parametrii comunica ției implici ți la Reset sunt 8 bi ți
de date și un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint ă
num ărul total de octe ți care vor fi trimi și. Con ținutul EPROM-ului poate fi
verificat prin citirea lui tot prin SCI. Con ținutul EPROM-ului se poate ascunde, a șa
încât s ă nu mai poat ă fi citit din exterior, prin pozi ționarea unui bit de securizare în
registrul de op țiuni (adresa 1FDFh).
3.2 MC M68HC08
Familia 6808 urmeaz ă în timp familiei 6805, bineîn țeles cu îmbun ătățiri
care vor fi amintite în acest subcapitol. MC din familia 6808 sunt compatibile cu
cele din familia descris ă în subcapitolul anterior (3. 1). Ca îmbun ătățiri ale UC 6805
pot fi men ționate:
• indicatorul de stiv ă este un registru de 16 biți (13 la 6805);
• registrul de index este de 16 biți, exist ă posibilitatea manipul ării separat a
octetului superior și a celui inferior (8 bi ți la 6805);
• frecven ța intern ă CPU standard este de 8MHz (2MHz la 6805);
• se pot adresa 64K octe ți memorie de date sau program (2K- 16K la 6805),
• are 16 moduri de adresare (8 la 6805) și 78 de noi coduri de instruc țiuni;
• se pot face mut ări de date între loca ții de memorie f ără intermediul
acumulatorului;
• UC poate executa împ ărțiri de operanzi de 2 octe ți la operanzi de 1 octet;
• operarea secven țială a UC poate fi oprit ă de dou ă tipuri de evenimente:
reset sau întreruperi. Sursele de Reset suplimentare fa ță de 6805 sunt:

3. Microcontrollere Motorola 89
-detectarea unui cod de instruc țiune inexistent ă;
-tensiune de alimentare sub o limit ă acceptat ă
(LVI, Low Voltage Inhibit ).
• sistemul de întreruperi admite un num ăr maxim de 128 de surse de
întrerupere: reset, SWI și IRQ0-IRQ 125. Unele dintre aceste cereri de
întrerupere sunt accesibile la pin. Întreruperea software are cea mai mare
prioritate. În mod WAIT ceasul UC este oprit, dar celelalte module au
ceas, astfel încât orice întrerupere treze ște UC. În mod STOP toate
ceasurile sunt oprite și doar o întrerupere extern ă poate trezi UC.
Schema bloc a unui MC 6808 este prezentat ă în figura 3. 10.
3.2.1 Unitatea central ă 6808
Unitatea central ă 6808 admite 2 moduri de lucru: un mod utilizator și un
mod monitor ROM. Modul de lucru poate fi alese prin pozi ționarea unui pin din
exterior (IRQ) în 1 sau 0 în timpul unui RESET. Modul monitor creeaz ă
posibilitatea leg ării MC cu un calculator gazd ă printr-un canal serial, transferareaPort A Port C Port B
ADCPort D Port E
SerialePort F
TimerPort G Port H
Tastatur ăUnitatea central ă
6805, 6808…Memorie ROM sau
FLASH
(4096bytes)
Memorie RAM
(128bytes)
Memorie
EEPROM Magistral ă de date și
adrese+V DD (+5V
sau +3V)
RESET
IRQ
OscilatorMonitor ROM (960bytes)
Figura 3. 10 Schema bloc a unui MC din familia 6808

90 MICROCONTROLLERE
software-ului de pe calculatorul gazd ă în MC și execu ția lui din RAM. Pentru MC
echipate cu EEPROM în mod monitor se poate programa EEPROM-ul. Leg ătura
serial ă între calculator și MC este RS232 prin intermediul pinilor unui port I/O. În
mod monitor MC poate s ă execute programe din RAM cu ajutorul unor comenzi
simple monitor, toate func țiile MC fiind valide. În modul monitor COP este
invalidat. Transferul de date este bidirec țional. Fiecare comand ă spre MC este
urmat ă de un r ăspuns ecou al MC. Comenzile monitorului sunt:
• READ – cite ște o loca ție de memorie (se trimite cod+2 octe ți de adres ă
și se returneaz ă con ținutul loca ției),
• WRITE – scrie o loca ție de memorie (se trimite cod+2 octe ți de
adres ă+octetul de scris)
• IREAD – citire indexat ă, cite ște urm ătorii 2 octe ți din memorie fa ță de
ultima adres ă accesat ă
• IWRITE – scriere indexat ă, scrie urm ătorii 2 octe ți din memorie fa ță de
ultima adres ă accesat ă
• READSP – cite ște indicatorul de stiv ă
• RUN – ruleaza program
Viteza de transfer implicit ă între MC și calculator este de 4800bps cu pinul
PTC3 ținut la 1 în timpul resetului și 9600bps cu pinul PTC3 ținut la 0 în timpul
resetului.
3.2.2 Interfe țe și periferice on-chip
a. Porturi paralele I/O
MC 6808 poate gestiona 8 porturi I/O (A,B,C,D,E,F,G,H) cu linii care pot
fi programate ca ie șiri sau intr ări. Liniile nefolosite trebuie legate la mas ă sau la
tensiunea de alimentare pentru a preveni defectarea circuitului prin desc ărcări
electrostatice sau consumul excesiv de curent.
Fiec ărui port îi corespunde un registru de direc ție (DDR) prin care se
programeaz ă sensul de transfer al pinului. Unele porturi au semnifica ții duble, dac ă
liniile lor sunt folosite și de alte interfe țe:
• portul B poate fi folosit ca 8 linii de intrare în convertorul A/D (ADC);
• portul C este un port de 6 bi ți, bitul 2 se poate folosi pentru a furniza în
exterior ceasul sistemului;
• portul D poate avea dou ă linii folosite ca intr ări pentru timer (Bit 6 și
Bit 4);
• portul E poate fi folosit ca și canal SPI și SCI;
• portul F este un port de 7 bi ți care poate fi folosit ca intr ări/ieșiri pentru
timer;

3. Microcontrollere Motorola 91
• portul G este un port de 3 bi ți, liniile pot fi folosite ca interfa ță pentru
tastatur ă;
• portul H este un port de 2 bi ți, liniile pot fi folosite ca interfa ță pentru
tastatur ă.
b. Convertorul analog digital (ADC)
Convertorul A/D este un convertor pe 8 bi ți cu aproxim ări succesive care
poate face conversii continuu sau la primirea unei comenzi. Sfâr șitul conversiei
poate fi semnalizat cu un bit indicator (flag) sau poate cere o întrerupere. Ceasul de
conversie poate fi selectat. Un MC are 8 canale de conversie cu intr ări multiplexate
analogic.
Intrările pentru ADC se fac pe pinii portului de uz general PTB7-PTB0.
Selec ția canalului se face pentru a stabili care pin este intrare analogic ă. Ceilal ți
pini pot fi folosi ți ca intr ări/ieșiri de uz general. Dac ă valoarea citit ă este VREFH,
atunci valoarea digital ă va fi FFh, iar dac ă este VREFL atunci valoarea digital ă va
fi 00h. Aceste tensiuni, împreun ă cu tensiunea de alimentare pentru blocul analogic
al MC sunt furnizate din exterior. Schema bloc a convertorului este dat ă în figura
3.11.
Registrele ADC sunt:
registru de control și stare al ADC (ADSCR), care con ține:
Bit 7 COCO/IDMAS, conversie complet ă sau selec ție întrerupere DMA. Dac ă
întreruperile sunt invalidate (AIEN=0), COCO este pozi ționat de fiecare dat ă
când se termin ă o conversie. În modul de conversie continu ă datele se
suprascriu în registrul de date dup ă fiecare conversie și COCO este pozi ționat
doar dup ă prima conversie. Dac ă întreruperile sunt validate (AIEN= 1), IDMAS
selecteaz ă dac ă întreruperea solicit ă și un transfer DMA.
Bit 6 AIEN (ADC Interrupt Enable ) valideaz ă întreruperile la sfâr șitul unei
conversii.ADCRegistru de date ADR
Selec ție
canalADSCR
Intrări
analogiceCerere de
întrerupere
Ceas de conversie
Figura 3. 11 Schema bloc a convertorului analog digital

92 MICROCONTROLLERE
Bit 5 ADCO (ADC Continous Conversion ), dac ă este setat se face conversie
continu ă.
Bit4-0 ADCH4-0 selecteaz ă unul din cele 8 canale de conversie
registru de date (ADR)
registru de ceas (ADCLK) care con ține:
Bit 7-5 ADIV2-0 formeaz ă rata de divizare a ceasului de conversie de la
ADICLK (000) la ADICLK/ 16 (100).
Bit 4 ADICLK selecteaz ă ca ceas de conversie ceasul intern sau un ceas
generat de timer.
O conversie începe dup ă scrierea registrului ADSCR. Rezultatul conversiei
este stocat în registrul de date (ADR) și la terminarea conversiei se pozi ționeaz ă
bitul COCO. Dac ă se opteaz ă pentru conversie continu ă, dup ă prima conversie
urmeaz ă alta, care rescrie registrul de date. Dac ă sunt validate întreruperile,
sfârșitul conversiei poate cere întrerupere c ătre UC sau poate face și o cerere
DMA.
c. Interfa ța extern ă msCAN08 (Motorola Scalable CAN)
Protocolul CAN a fost definit de BOSCH în 1991 pentru utilizarea pe o
magistral ă la autoturisme, unde s ă îndeplineasc ă condi ții specifice: procesare în
timp real, fiabilitate într-un mediu perturbat și pre ț mic. Caracteristici ale
magistralei msCAN08 sunt:
• transmisie serial ă sincron ă cu blocuri între 0-8 octe ți;
• viteza de transfer pân ă la 1MBps;
• transferul serial se face pe 2 linii, o intrare (RxCAN) și o ie șire
TxCAN).
Cuplarea la magistral ă nu se face direct, ci prin transceiver-e care pot
suporta un curent important și care pot detecta dac ă un MC are o linie defect ă care
ar for ța magistrala la conectare direct ă (figura 3. 12).
MC 1
msCAN08
TxCAN RxCANMC 2
msCAN08
TxCAN RxCAN
Transceiver Transceiver Magistrala
Figura 3. 12. Cuplarea la magistrala CAN

3. Microcontrollere Motorola 93
O implementare modern ă trebuie s ă respecte dou ă condi ții:
• orice dispozitiv CAN poate s ă transmit ă un șir de mesaje f ără să
elibereze magistrala între mesaje. Arbitrarea magistralei se va face
doar dup ă ce s-a terminat transmiterea mesajului.
• mesajele sunt astfel organizate încât cel mai prioritar mesaj va fi trimis
înaintea celor care stau de mai mult timp în coada de a șteptare.
Aceste cerin țe pot fi îndeplinite cu o schem ă de transmisie cu buffere
duble. Chiar și așa, unitatea central ă nu are întotdeauna timp s ă aranjeze datele în
buffer, a șa încât la 6808 s-a realizat o arhitectur ă cu 3 buffere.
Mesajul recep ționat este stocat într-o stiv ă FIFO cu 2 nivele. Exist ă 2
buffere de recep ție de 13 octe ți aranjate într-o singur ă arie de memorie, astfel încât
registrul de date recep ționate are o singur ă adres ă. Registrul RxBG (Background
Receive Buffer ) prime ște datele seriale și le transfer ă în RxFG (Foreground
Receive Buffer ) care poate fi adresat de unitatea central ă. Dac ă mesajul recep ționat
este corect (are un identificator valid) se pozi ționeaz ă bitul RxF ( Receiver Full
Flag ) și se genereaz ă o cerere de întrerupere. În acest timp în registrul RxBG se
recep ționeaz ă un nou cadru. Schema bloc pentru recep ție și transmisie este dat ă în
figura 3. 13.
Pentru a mic șora num ărul de întreruperi solicitate UC de c ătre receptor s-a
introdus un filtru de acceptare. Datele msCAN au o anumit ă structur ă, primii bi țiRxBG
RxFGRxF
Date spre
CPURxCAN
TxCANTx0
Tx1
Tx2TxE 0
Date de
la CPU
TxE 1
TxE 2PRIO
PRIO
PRIOFiltru
Figura 3. 13 Schema bloc de receptie, emisie CAN

94 MICROCONTROLLERE
fiind de identificare a cadrului și de adres ă a destina ției. Este posibil ca interfa ța
CAN s ă verifice ace ști primi bi ți și să facă transferul din RxBG în RxFG numai
dacă mesajul este destinat acestui MC.
Când ambele registre de recep ție sunt pline și se recep ționeaz ă date se
genereaz ă o eroare de suprascriere. Se abandoneaz ă recep ția noilor caractere, se
semnalizeaz ă eroarea, dar transmi țătorul r ămâne func țional.
Transmiterea mesajelor se face cu o structur ă de 3 buffere, fiecare de 13
octe ți. Un registru suplimentar TBPR ( Transmit Buffer Priority Register ) stabile ște
prioritatea mesajelor. Fiecare buffer de transmisie semnaleaz ă UC faptul c ă este
gol prin pozi ționarea unui bit TXE ( Transmit Buffer Empty ) în registrul de stare
CTFLG ( CAN Transmitter Flag Register ). Bitul TXE poate cere o întrerupere
pentru ca UC s ă poat ă reînc ărca bufferul de transmisie care s-a golit. Dac ă mai
mult de un registru este plin și gata de transmisie, se face apel la registrul de
priorit ăți pentru arbitrare. Fiecare buffer de transmisie are o zon ă de 8 bi ți (PRIO)
în care programul utilizator scrie prioritatea mesajului când se transmite mesajul de
la UC (cea mai mic ă valoare reprezentând cea mai mare prioritate).
Dacă se transmite un mesaj cu prioritate mai mare și se dore ște
abandonarea mesajului curent, se solicit ă aceasta cu bitul ABTRQ (Abort Request
Flag ) în registrul de control al transmisiei CTCR ( Transmission Control Register ).
Dacă solicitarea de abandonare este posibil ă, interfa ța CAN va pozi ționa bitul
ABTAK ( Abort Request Acknowledge ) și TXE pentru a se putea transmite mesajul
prioritar.
d. Interfa ța cu tastatura
Interfa ța cu tastatura const ă în 5 linii independente de intrare în MC care
pot solicita întreruperi mascabile. Func ționarea acestei interfe țe este asistat ă de
următoarele registre:
registrul de stare și control al tastaturii (KBSCR) con ține:
Bit 3 – indicatorul existen ței unei întreruperi, KEYF. Bitul este 1 dac ă se
află în curs de servire o întrerupere de la tastatur ă;
Bit 2 – confirmare, ACKK. Dac ă acest bit este pozi ționat se șterge bufferul
întreruperilor de la tastatur ă;
Bit 1 – validarea întreruperilor de la tastatur ă, IMASKK. Dac ă acest bit are
valoarea 0 sunt validate întreruperile;
Bit 0 – modul de întrerupere, MODEK. Dac ă bitul este 1 se poate cere o
întrerupere cu un front c ăzător sau cu un nivel 0; dac ă bitul este 0 se poate
cere o întrerupere doar cu front c ăzător.
registrul de validare a întreruperilor de la tastatur ă care cu bi ții
Bit 4 – Bit 0 valideaz ă pinul portului I/O ca cerere de întrerupere de la
tastatur ă sau ca port standard.

3. Microcontrollere Motorola 95
3.2.3 Programarea memoriei EEPROM
Circuitele din familia 6808 pot avea 5 12 octe ți de memorie EEPROM care
poate fi ștears ă și reînscris ă fără o tensiune extern ă suplimentar ă. Memoria
programat ă poate fi protejat ă împotriva unor scrieri sau ștergeri accidentale.
Starea unui bit neprogramat este 1 logic. Programarea lui înseamn ă
trecerea în stare 0. Programarea pote fi f ăcută în mod redundant, adic ă primii 256
de octe ți să fie identici cu urm ătorii.
Registrele EEPROM sunt:
registrul de control al EEPROM EEPROM Control Register (EECR):
Bit 7 – EEBCLK, validare ceas intern pentru EEPROM; selecteaz ă cesul
folosit pentru programarea EEPROM: ceasul intern sau un oscilator RC
intern.
Bit 5 – EEOFF; invalideaz ă EEPROM-ul în modurile de lucru cu
economie de energie.
Bit4, Bit 3 – EERAS 1, EERAS 0; stabilesc opera ția care se execut ă
conform tabelului 3.5.
Tabelul 3.5
Programarea opera țiilor în registru de control
EEBPx EERAS 1EERAS0 Opera ția
0 0 0 Programare de octet
00 1Ș tergere de octet
0 1 0 Ștergere bloc
0 11Ș tergere global ă
1 X X Nu se executa programare/stergere
Bit 2 – EELAT; dac ă este setat, comand ă memorarea datelor și adreselelor
pentru scriere iar dac ă este 0, se face citire din EEPROM.
Bit 0 – EEPGM; dac ă este setat, valideaz ă scrierea sau ștergerea.
Pozi ționarea lui EEPGM trebuie s ă fie precedat ă în alt pas de pozi ționarea
lui EELAT.
registrul EEPROM nevolatil (EENVR):
Bit 7 – EERA, arie redundant ă; configureaz ă memoria în dou ă jum ătăți
redundante.
Bit 4 – CON0; stabile ște dac ă se valideaz ă securitatea memoriei (cu 0) sau
nu.
Bit 3-0 – EEBP3-0, bi ți de protec ție; dac ă ace ști bi ți sunt 1, blocul de
memorie este protejat la scriere.
registrul de configura ție a ariei, EEACR se poate citi ceea ce a fost înscris în
registrul EENVR. Din ra țiuni de siguran ță a informa ției, datele de configurare a

96 MICROCONTROLLERE
EEPROM se scriu într-un registru nevolatil, EENVR. La un RESET, datele din
EENVR se scriu într-un registru volatil corespondent (EEACR).
În modul de economie de energie STOP nu se poate face înscrierea sau
ștergerea memoriei EEPROM.
Pentru înscrierea EEPROM se parcurg urm ătorii pa și:
• se reseteaz ă EERAS 1 și EERAS0 ( și se seteaz ă EELAT în EECR)
• se scrie octetul în EEPROM
• se seteaz ă EEPGM
• se așteapt ă un timp pentru ca programarea s ă poat ă fi executat ă
• se reseteaz ă EEPGM
• se așteapt ă un timp pentru ca tensiunea de programare s ă scad ă
• se reseteaz ă EELAT
O ștergere pe bloc sau global ă se face cu bi ții EERAS ca în tabelul 3.5,
orice adres ă din bloc fiind posibil ă. Împ ărțirea în blocuri este EEBP0 (0800h-
087Fh), EEBP 1 (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh).
În modul redundant EEBP2 și 3 nu au nici o semnifica ție.
3.3 MC PE 16 BI ȚI – 68 16
Unitatea central ă 6816 este o unitate central ă cu magistrala de date de 16
biți și o magistral ă de adrese pe 20 de bi ți care permite adresarea a 1Moctet de
memorie. UC con ține 2 registre acumulator de 16 biți și 3 registre index de 16 biți
pe lâng ă registrele clasice. Unitatea central ă poate executa instruc țiuni pe 8 bi ți, pe
16 bi ți sau pe 32 de bi ți. Toate instruc țiunile de la UC 68 11 pot fi executate de
6816, dar cu alt num ăr de tacte, deci cu alt ă vitez ă. Unitatea central ă func ționeaz ă
la maximum 16MHz. Tehnologia de fabrica ție permite func ționarea și la viteze mai
mici, chiar în regim static (ca și celelalte UC). Unitatea central ă con ține facilit ăți
DSP ( Digital Signal Processing ), fiind posibile înmul țiri cu numere frac ționare.
UC permite 10 tipuri de adresare, din care 6 sunt preluate de la 68 11.
Pentru p ăstrarea compatibilit ății, registrul PC și indicatorul de stiv ă sunt de
16 biți, dar apare un registru nou, numit K, ce re ține extensiile de la 16 biți la 20 de
biți pentru registrul PC și SP. În structura UC mai apar și registrele pentru
înmul țiri, 2 registre de 16 biți (H și I) și unul de 36 de bi ți pentru rezultat (MAC).
Pentru comunica ția între MC sau pentru adresarea memoriei externe s-a
standardizat un bus extern, numit IMB ( Intermodule Bus ), cu 16 linii de date și 24
linii de adres ă, la care s-a aliniat și 6816. Acest bus este de tip asincron, permi țând
transfer pe 8 sau 16 biți în urma unui protocol ( handshake ).

3. Microcontrollere Motorola 97
3.3.1 Modulul de integrare (SIM, System Integration
Module )
Acest modul, ap ărut de la 68 11, grupeaz ă blocurile care controleaz ă
sistemul și cuprinde:
• Modul pentru configurarea sistemului și protec ție:
1. un monitor de bus; reseteaz ă sistemul dac ă apar cicluri de
magistral ă mai lungi de 8-64 tacte de ceas sistem;
2. un monitor de HALT; pozi ționeaz ă un bit în registrul de stare
al RESET-ului când a ap ărut o instruc țiune de HALT pe bus;
3. un monitor de întreruperi; supravegheaz ă apari ția unei arbitr ări
în timpul unui ciclu de întrerupere;
4. un ceas de gard ă (watch dog);
• Modul pentru sintetizarea ceasului; poate fi realizat ă din mai multe
surse; dintr-o surs ă intern ă cu ajutorul unei bucle PLL, dintr-o surs ă
extern ă cu ajutorul buclei PLL sau direct dintr-o surs ă extern ă.
• Modul de formare a bus-ului extern
• Modul de test
3.3.2 Interfe țe
Interfe țele seriale sunt grupate sub forma unui modul serial cu coad ă de
așteptare (QSM Queued Serial Module ) care con ține o interfa ță serial ă SPI și una
SCI. Coada de a șteptare este format ă în RAM și are dimensiunea de 16 cuvinte de
8-16 bi ți fiecare. Transmisia acestui șir de date poate fi executat ă automat, f ără
interven ția unit ății centrale. Modulul QSM este cuplat pe bus-ul IMB.
Convertorul analog numeric (ADC) este un convertor cu aproxima ții
succesive cu rezolu ția programabil ă de 8- 10 bi ți, cu 8 canale multiplexate.
Convertorul este conectat pe bus-ul IMB.
Pentru date importante (cum ar fi cele din stiv ă) exist ă o memorie RAM
static de 1K octet care la c ăderea tensiunii de alimentare este alimentat ă de la un
pin special, unde se poate conecta o baterie.
Timer-ul are 11 canale, din care 2 sunt folosite pentru generarea
semnalelor PWM.
Circuitul este capsulat în capsule de 132 sau 144 pini.
Schema bloc a circuitului este dat ă în figura 3. 14.

98 MICROCONTROLLERE
3.4 MC PE 32 DE BI ȚI – 68300
MC 68300 este asem ănător arhitectural cu MC pe 16 biți. În jurul UC sunt
grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8
canale, un modul de comunica ție serial ă cu coad ă de a șteptare (QSM), 5 12 octe ți
RAM static, 3,5K octe ți RAM care pot fi folosi ți și de timer (TPURAM), un modul
de timp (TPU, Time Processor Unit ), pân ă la 6 porturi I/O de uz general și 2
module flash EEPROM.
Ceasul intern al sistemului este de maximum 16MHz.
Unitatea central ă CPU32 este compatibil ă soft cu procesoarele din familia
68000. Ea con ține 16 registre generale de 32 de bi ți cu care se poate lucra pe 8, 16
sau 32 de bi ți, un PC de 32 de bi ți, un SP de 32 de bi ți, un registru de stare și alte
registre.Unitatea central ă
6816
Memorie
SRAM
(1024 octe ți)
Magistral ă de date și
adrese IMB
QSM
(SCI, SPI)Port C
TimerPort E
Port F
Port ADCSIM
IMB
Port QS Port GPPWM
Figura 3. 14 Schema bloc MC 68 16

3. Microcontrollere Motorola 99
Timer-ul este o unitate microprogramat ă care poate lucra separat de UC, și
care con ține propriul RAM. Timer-ul este format din 16 canale independente.
Fiecare poate executa o func ție de timp și poate fi programat independent.
Memoria flash EEPROM serve ște la stocarea nevolatil ă a informa țiilor
cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent.
Memoria EEPROM este foarte rapid ă, ea poate r ăspunde în 4 tacte. MC este
echipat cu 2 module de flash EEPROM, unul de 16K octe ți și unul de 48K octe ți.
Memoria EEPROM poate fi configurat ă pentru a lucra în modul bootstrap.
Memoria EEPROM poate fi ștears ă doar neselectiv (în întregime) și are nevoie de
o alimentare special ă.
3.5 DATE COMPARATIVE PENTRU MC
MOTOROLA –CISC
Tabelul 3.6 arat ă principalele performan țe, comparativ, pentru MC din
familia Motorola:
Tabelul 3.6
Tabel comparativ pentru MC Motorola – CISC
MC Magistrala de
dateFrecven ț
a
(MHz)Linii I/O Interfe țe
specialePreț
(USD)
6805 8 2 3 1 6 1.9
6808 8 8 48 6 2. 1
6816 16 16 48 6 8.25
68300 32 164 8 6 17.5

4
FAMILIA MCS-51
8051 a fost propus de INTEL în a doua genera ție de MC și este cel mai
folosit și cel mai bine vândut MC din lume. În 1976 Intel a prezentat familia de
microcontroller-e MCS48 care este compus ă din 8048, 8748 și 8035. A ap ărut
astfel pentru prima dat ă pe pia ță un microcalculator complet pe un singur chip. MC
includea o unitate central ă pe 8 bi ți, memorie ROM sau EPROM de 1024x8bi ți,
RAM 64×8 bi ți, porturi I/O și timere. În etapa a doua, INTEL a lansat familia
MCS-51 format ă din MC 8051, 8751 și 8031. INTEL recomand ă ca punerea la
punct a aplica ției s ă fie realizat ă pe MC 8751 care este prev ăzut cu memorie
EPROM (4K octe ți). Memoria poate fi programat ă cu orice programator, dar se
recomand ă utilizarea programatorului de la INTEL (UPP, Universal PROM
Programmer). Pentru produse în serie mare se recomand ă 8051, care are memorie
ROM, programat ă de furnizor la comanda beneficiarului și care revine la un pre ț de
cost mult mai mic. MC 8031 nu con ține ROM, dar se poate ata șa în exterior ROM,
PROM sau EPROM, direct sau multiplexat.
8051 este un MC foarte puternic și ușor de programat. Ca dovad ă, în
tabelul 4.1 se prezint ă câteva modele oferite de diferi ți furnizori, echivalente cu
8051:
Tabel 4.1
Modele echivalente 8051 oferite de diferi ți produc ători
Varianta Nr.
piniProdu-
cătorRAM Mem.
programObserva ții
8031 40 To ți 128 64K Procesor de baz ă, UART, Tmr0+1
8051 40 To ți 128 4K Procesor de baz ă, UART, Tmr0+1
80C51GB 68 Intel 256 64Kx 8051+PCA, 8bA/D
87C51GB 68 Intel 256 8K 8051+PCA, 8bA/D
SABC502 40 Siemens 256 64Kx 8052+XRAM+WDog
80C552 68 Philips 256 64Kx 10bA/D, i2c, CC,PWM
83CL580 56, Philips 256 6K LV 8052+A/DC+i2c+WDog
80C320 40 Dallas 256 64Kx Fast, 2UART
89S8252 40. Atmel 256 10K FLASH 8k, WDog
89C55 40. Atmel 256 20KF FLASH,fast, LV

4. Familia MCS-51 101
PCA- arie programabil ă de num ărătoare (programmable counter array)
LV- tensiune redus ă 3,3V (low voltage)
PWM- modularea impulsurilor în l ățime (pulse width modulation)
CC- intrare și comparare (capture/compare)
i2c- Interfa ța I2C (Philips)
Tmr- timer
Un tabel cu mai multe exemple este disponibil pe discul care înso țește
cartea.
4.1 STRUCTURA ȘI FUNC ȚIONAREA
Schema bloc intern ă este dat ă în Fig. 4.1.
Unitatea central ă este o unitate aritmetic ă și logic ă pe 8 bi ți care con ține
urm ătoarele registre:Magistral ă de dateGener
ator de
TimerUnitatea central ă
Acumulator A
Ind. Stiv ă SP
Nr. program PCAdrese
I
n
Figura 4.1 Schema bloc a unui MC 8051ROM
(EPROM)
RAM
P0 P1 P2 P3Controlle
r de

102 MICROCONTROLLER-e
• acumulator A – 8 bi ți;
• registrul de stare PSW (Program Status Word) – 8 bi ți;
• registrul B (8 bi ți) folosit în opera țiile de înmul țire și împ ărțire;
• indicatorul de stiv ă (Stack Pointer) – 8 bi ți;
• un registru num ărător de date (DPTR Data Pointer) – 16 bi ți – care poate fi
manipulat și ca 2 registre de câte 8 bi ți (DPH și DPL) și serve ște ca baz ă în
salturi indirecte sau în transferuri externe;
• num ărătorul de program (PC Program Counter) – 16 bi ți.
Memoria pentru program (ROM) este separat ă și distinct ă de memoria
pentru date, are alte mecanisme de adresare și alte semnale de comand ă. MC poate
lucra atât cu memoria pe chip cât și cu memorie extern ă; exist ă astfel posibilitatea
de a m ări capacitatea memoriei de lucru. Memoria extern ă este adresat ă automat
dacă adresa din instruc țiune este în afara zonei de memorie intern ă.
Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bi ți. Fiecare
linie poate fi programat ă individual ca linie de intrare, de ie șire sau bidirec țional ă.
Unele linii au semnifica ții alternative. Portul 0 este folosit și ca magistral ă
multiplexat ă de adrese și date, iar pentru transferuri care au nevoie de adrese de 16
biți, se folose ște portul P2 pentru octetul cel mai semnificativ de adres ă. Liniile
portului 3 sunt folosite ca cereri de întrerupere (2 linii), intr ări/ie șiri pentru timer (4
linii) și linii seriale (2).
8051 are 2 timere de 16 bi ți, fiecare poate fi programat separat. Timerele
pot fi utilizate pentru a m ăsura intervale de timp, pentru a determina lungimea unor
impulsuri, ca num ărătoare, etc. Rezolu ția este de 1 µs, intervalul maxim de timp
fiind de 65,536ms.
Portul serial UART este un port serial full duplex cu rata de transfer pân ă
la 115Kbaud. Portul serial poate fi folosit atât pentru comunica ții cu echipamente
periferice cât și comunica ții între circuite.
Controllerul de întreruperi admite întreruperi de la 5 surse:
• de la portul serial (dac ă s-a transmis sau recep ționat un caracter);
• de la timere (când s-a înregistrat o dep ășire);
• de la 2 pini de intrare.
Fiecare surs ă poate fi validat ă sau invalidat ă individual. Prioritatea poate fi
programat ă. Fiecare surs ă are asociat ă o adres ă în memoria program (tabelul 4.2).
Tabelul 4.2
Adresele de salt pentru întreruperi
Sursa de întrerupere Adresa de
saltSursa de întrerupere Adresa de salt
RESET 0000h Extern 1 0013h
Extern 0 0003h Timer 1 001Bh
Timer 0 000Bh Port serial 0023h

4. Familia MCS-51 103
4.1.1 Descrierea semnalelor la pini
Vcc- tensiunea de alimentare, +5V;
Vss- mas ă;
PORT 0* – este un port pe 8 bi ți bidirec țional cu drena în gol. Este port de date și
adrese (octetul cel mai pu țin semnificativ) pentru memoria extern ă. De asemenea
portul 0 prime ște octe ții pentru programarea EPROM-ului intern iar în timpul
verific ării programului din EPROM, datele pot fi citite tot prin portul 0.
PORT 1 *- este un port pe 8 bi ți bidirec țional, cu drena în gol. În timpul
program ării și test ării EPROM-ului, la portul 1 se stabile ște octetul cel mai pu țin
semnificativ de adres ă. Pinii P1.0/T2 și P1.1/T2X au func ții duble. Astfel T2 este
intrare extern ă în Timerul 2 iar T2X este intrarea de comand ă a unei capturi în
Timer-ul 2.
PORT 2 *- este un port de 8 bi ți bidirec țional. În timpul program ării și test ării
EPROM-ului la portul 2 se stabile ște octetul cel mai semnificativ de adres ă. Pentru
adresarea memoriei externe pe 16 bi ți portul 2 genereaz ă partea mai semnificativ ă
a octetului de adres ă. La adresare memoriei externe pe 8 bi ți portul 2 este registrul
cu func ții speciale P2.
PORT 3 *- este un port de 8 bi ți bidirec țional. Pinii portului 3 au semnifica ție
alternativ ă (tabelul 4.3).
Tabelul 4.3
Semnifica ția dubl ă a pinilor de la PORT 3
Pin Semnifica ție
P3.0 RXD-intrare serial ă a porului pentru recep ție
P3.1 TXD-ie șire serial ă a portului pentru emisie
P3.2 /INT0-întrerupere extern ă pentru Timer 0
P3.3 /INT1-întrerupere extern ă pentru Timer 1
P3.4 T0-intrare extern ă în Timer 0
P3.5 T1-intrare extern ă în Timer 1
P3.6 /WR-strob pentru scrierea memoriei de date extern ă
P3.7 /RD-strob pentru citirea memoriei de date extern ă
RST este o intrare de RESET. Dac ă semnalul de intrare r ămâne în HIGH pe
perioada a doi cicli ma șină în timp ce oscilatorul func ționeaz ă, are loc ini țializarea
MC.
ALE/PROG ALE (Address Latch Enable) valideaz ă octetul cel mai pu țin
semnificativ de adres ă în timpul accesului la memoria extern ă (PORT0). PROG

* Ieșirile sunt bufferate și pot suporta pân ă la 4 intr ări LS TTL. Pinii programa ți ca ie șiri în
stare HIGH pot fi folosi ți ca intr ări. Ca pini de intrare, dac ă au fost for țați în LOW din
exterior, ace știa furnizeaz ă curent.

104 MICROCONTROLLER-e
este semnal de intrare pentru impulsul de programare în timpul program ării
EPROM-ului.
/PSEN (Program Store Enable) valideaz ă citirea programelor din memoria
program extern ă. Nu se activeaz ă la citirea datelor din memoria extern ă de date.
/EA/VP /EA (External Acces Enable) valideaz ă în stare HIGH memoria program
intern ă, iar în stare LOW valideaz ă memoria program extern ă. La VP se aplic ă
tensiunea de 21V în timpul program ării EPROM-ului.
XTAL1, XTAL2 se conecteaz ă cristalul de cuar ț sau un oscilator extern.
4.1.2 Gestionarea memoriei
MC8051 au spa ții diferite de adresare pentru memoria program și memoria
de date. Spa țiul maxim de adresare este de 64K atât la memoria program cât și la
cea de date. Un extras din datele de catalog arat ă tipurile și dimensiunea memoriei
pentru diferite circuite din familie (tabelul 4.4).
Tabelul 4.4
Echiparea cu memorie a diferitelor circuite 8051
MC Memorie intern ă de program Memorie intern ă de date
8031AH – 128bytes RAM
8051AH 4Kx8 ROM 128bytes RAM
8751H 4Kx8 EPROM 128bytes RAM
8032AH – 256bytes RAM
8052AH 8Kx8 ROM 256bytes RAM
8752BH 8Kx8 EPROM 256bytes RAM
a. Gestionarea memoriei de date (RAM)
Memoria intern ă este mapat ă în spa țiul de adresare 00H – FFH (256bytes).
Ea poate fi "umbrit ă multiplu"; aceea și adres ă poate fi atribuit ă mai multor arii de
memorie (intern ă SRAM, intern ă extins ă SRAM, ariei registrelor programabile,
memoriei externe de program sau de date). Umbrirea este realizat ă fie utilizând
semnale hard (PSEN, nRD, nWR), fie utilizând instruc țiuni specifice ce se refer ă
strict la unul dintre tipurile de memorie (MOVC sau MOVX). În zona 80H -FFH
sunt registrele speciale (SFR) care sunt adresabile direct. Zona 00H-7FH poate fi
adresat ă direct sau indirect. Memoria extern ă se afl ă între adresele 0000H-FFFFH.
Validarea folosirii memoriei de date se realizeaz ă cu semnalele nRD și nWR.
Aceste semnale (nRD și nWR) se folosesc și pentru selec ția datelor din portul 0,
unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE.
Informa ția poate fi accesat ă cu adresare pe 8 sau pe 16 bi ți.

4. Familia MCS-51 105
b. Gestionarea memoriei program (ROM, EPROM)
Se poate folosi memoria ROM intern ă (nEA în stare HIGH) sau cea
extern ă (nEA în stare LOW). Strobul pentru citirea memoriei externe este semnalul
PSEN. Toate citirile se fac cu adresare pe 16 bi ți.
4.1.3 Circuitele timer
MC 8051 are 2 num ărătoare de 16 bi ți, iar 8052 3 num ărătoare. În modul
de func ționare ca temporizator registrul este incrementat la fiecare ciclu cu un
impuls la 1/12 din frecven ța oscilatorului. În modul de func ționare ca num ărător,
registrul este incrementat la fiecare tranzi ție din 1 în 0 la pinul extern
corespunz ător T0, T1 și T2. Rata maxim ă de num ărare este 1/24 din frecven ța
oscilatorului.
Programarea func ționării timer-elor se face cu registrul TMOD din SFR,
cu structura: pentru num ărătorul 1: GATE1, C/-T1 – M11, M01,
pentru num ărătorul 2: GATE2, C/-T2 – M12, M02, unde:
GATE – gestioneaz ă controlul. Când GATE=1, timer-ul este activat doar
cât timp pinul nINT corespunz ător este în HIGH și și bitul TR din registrul SFR
(TCON) este 1.
C/-T – selecteaz ă operarea ca timer (LOW) sau counter (HIGH)
M1 și M0 au semnifica ția din tabelul 4.5.
Tabelul 4.5
Programarea modului de operare cu bi ții M0 și M1
M1 M0 Modul de operare
0 0 Timer pe 13 bi ți (Mod 0)
0 1 Timer/Counter pe 16 bi ți (Mod 1)
1 0 TL0 este timer/counter pe 8 bi ți și TH0 este timer pe 8 bi ți (Mod 2)
1 1 Timer/Counter 1 oprit (Mod 3)
Semnifica ția bi ților din registrul special TCON este:
TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde:
TF0, TF1- indicatorul de dep ășire al timer-ului 0, respectiv 1. Este setat la
depășire ca num ărător sau teporizator și este resetat când se
apeleaz ă rutina de întrerupere a timerului corespunz ător;
TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri
num ărătoarele/ temporizatoarele;
IE0, IE1 – indicator de activare a întreruperii pe front;
IT0, IT1 – controlul activ ării întreruperii (pe nivel IT=0, sau pe front
IT=1).
Pentru MC care au al treilea timer exist ă registrul T2CON cu structura:

106 MICROCONTROLLER-e
TF2, EXF2, RCLK, TCLK, EXEN2, TR2, C/-T2, CP/RL2, unde:
TF2 – indicator de dep ășire;
EXF2 – indic ă apari ția unui eveniment la pinii de control extern;
RCLK – când este setat, portul serial folose ște ca și tact de recep ție
semnalul de dep ășire generat de timerul 2;
TCLK – când este setat, portul serial folose ște ca și tact de emisie semnalul
de dep ășire generat de timerul 2;
EXEN2- indicator de activare extern ă;
TR2 – porne ște/ opre ște timerul 2
C/-T2 – selecteaz ă func ționarea ca timer sau num ărător;
CP/RL2 – indicator pentru memorare .
4.1.4 Interfa ța serial ă UART
Portul serial este de tip asincron, full-duplex. Portul serial poate opera în 4
moduri:
Modul 0 : datele seriale sunt transferate în ambele sensuri prin RXD. TXD
furnizeaz ă ceasul de transmisie. Rata transferului este 1/12 din frecven ța de
oscila ție.
Modul 1 : transmisie asincron ă, se transmit date prin TXD, se recep ționeaz ă prin
RXD în formatul 1 bit de start, 8 bi ți de date, 1 bit de stop, cu rata de transfer
variabil ă (programabil ă) cu un timer.
Modul 2 : ca la modul 1, dar se transmite și un al 9-lea bit de date care poate fi bitul
de paritate, cu rata de transfer egal ă cu frecven ța oscilatorului divizat ă cu 32 sau cu
64.
Modul 3 : ca la modul 2, cu rata de transfer variabil ă (programabil ă) cu un timer.
Registrul de control al portului serial SCON (din registrele SFR):
SM0, SM1, SM2, REN, TB8, RB8, TI, RI;
SM0, SM1 programeaz ă modul de lucru al portului serial conform
tabelului 4.6.
Tabelul 4.6
Programarea modului serial cu bitii SM0 si SM1
SM0 SM1 Mod
0 0 Mod 0
0 1 Mod 1
1 0 Mod 2
1 1 Mod 3

4. Familia MCS-51 107
SM2 – activeaz ă posibilitatea de lucru multiprocesor în modurile 2 și 3,
prin transmisia bitului special 9;
REN – activare/ dezactivare recep ția;
TB8 – al 9-lea bit ce se transmite în modurile 2 și 3;
RB8 – al 9-lea bit ce se recep ționeaz ă în modurile 2 și 3;
TI – indicator de întrerupere a transmisiei;
RI – indicator de întrerupere a recep ției.
4.1.5 Sistemul de întreruperi
MC 8051 dispun de 5 nivele de întrerupere, iar 8052 de 6 nivele. Exist ă 2
surse externe, INT0 și INT1, care pot fi active pe nivel sau pe front în func ție de
biții IT0 și IT1 din registrul special TCON. Indicatoarele de întrerupere sunt bi ții
IE0 și IE1 care se seteaz ă automat când apare o întrerupere și se reseteaz ă când s-a
încheiat tratarea întreruperii.
Întreruperile generate de timere sunt date de bi ții TF0 și TF1 din registrul
TCON. Ace ști bi ți sunt seta ți când apare o dep ășire în num ărătoarele/
temporizatoarele 0 și 1. Întreruperea pentru timerul 2 va fi generat ă d e u n S A U
între TF2 și EXF2. Rutina de servire a întreruperii va determina care dintre ace ști
biți a cerut întrerupere prin citirea registrului T2CON.
Întreruperea de port serial este generat ă de un SAU logic între RI și TI. .
Rutina de servire a întreruperii va determina care dintre ace ști bi ți a cerut
întrerupere prin citirea registrului SCON.
Fiecare din sursele de întrerupere pot fi activate sau dezactivate prin
setarea sau resetarea unui bit din registrul SFR numit IE, cu structura:
EA, X, ET2, ES, ET1, EX1, ET0, EX0, unde:
EA – dezactiveaz ă toate întreruperile cu IE=0. Cu IE=1 sunt validate
întreruperile și se pot masca individual;
ET2 – mascare întrerupere pentru timer-ul 2;ES – mascare întrerupere port serial;
ET1 – mascare întrerupere timer 1;
EX1 – mascare întrerupere extern ă INT1;
ET0 – mascare întrerupere timer 0;
EX0 – mascare întrerupere extern ă INT0.
Întreruperilor pot fi tratate conform unei ierarhii implicite sau nivelul
priorit ăților poate fi programat în registrul SFR numit IP.
priorit ăți implicite:
IE0 (cea mai mare prioritate), TF0, IE1, TF1, RI+TI, TF2+EXF2.
structura registrului IP:
X, X, PT2, PS, PT1, PX1, PT0, PX0, unde:

108 MICROCONTROLLER-e
PT2 – stabile ște nivelul de prioritate pentru întreruperea timerului 2;
PS – stabile ște nivelul de prioritate pentru întreruperea portului serial;
PT1 – stabile ște nivelul de prioritate pentru întreruperea timerului 1;
PX1 – stabile ște nivelul de prioritate pentru întreruperea extern ă 1;
PT0 – stabile ște nivelul de prioritate pentru întreruperea timerului 0;
PX0 – stabile ște nivelul de prioritate pentru întreruperea extern ă 0.
Nivelul priorit ății poate fi programat în HIGH sau LOW. O întrerupere
LOW poate fi întrerupt ă de o întrerupere LOW dar nu poate fi întrerupt ă de o
întrerupere HIGH. O întrerupere HIGH nu poate fi întrerupt ă.
4.1.6 Operarea cu economie de energie
8051 are dou ă moduri de operare cu putere redus ă; modul inactiv (Idle) și
modul cu tensiune sc ăzută (Power Down).
În modul inactiv oscilatorulfunc ționeaz ă, dar nu se execut ă nici o
instruc țiune. Timerele și portul serial func ționeaz ă și orice întrerupere de la ele
readuc circuitul în stare normal ă. Un RESET hardware readuce circuitul în stare
normal ă. Starea CPU se p ăstreaz ă în întregime: indicator de stiv ă, Program
Counter, registre etc.
În modul cu tensiune sc ăzută oscilatorul intern este oprit și toate func țiile
sunt oprite. Se p ăstreaz ă doar RAM-ul intern și registrele speciale. Singura
modalitate de a ie și din aceast ă stare este prin RESET hardware. În aceast ă stare
tensiunea de +5V poate fi redus ă.
Modurile de operare cu economie de energie pot fi comandate prin
registrul SFR PCON, care are structura: PD, IDL unde:
PD – bit pentru modul cu tensiune sc ăzută;
IDL – bit pentru modul inactiv.
4.1.7 Formarea unor semnale externe
RESET-ul se comand ă pe intrarea RST a MC. Con ținutul registrelor
speciale SFR va fi adus la 00H, cu excep ția SBUF care va fi nedeterminat și PCON
care va fi 0XXX0000 în binar. RAM-ul intern nu este afectat. La pornirea
sistemului se poate realiza un RESET automat cu un montaj ca în figura 4.2.
RSTVCC
R (4-10K)C (10µ)
Figura 4.2 Circuit pentru formarea semnalului RESET

4. Familia MCS-51 109
Ca și generator de tact se poate folosi oscilatorul intern la intr ările X1 și
X2, ca în figura 4.3.
Circuitul poate fi folosit și cu un tact extern, legând X2 la mas ă, iar la X1
se leag ă un oscilator extern.
4.1.8 Programarea EPROM-ului intern
Pentru a fi programat circuitul trebuie s ă fie alimentat și să aib ă cuplat
generatorul de tact pentru c ă transferul de date se face prin bus-ul intern al
circuitului. Adresa pentru EPROM-ul de programat trebuie s ă fie aplicat ă la portul
1 și pinii P2.0-P2.3 ai portului 2, iar octetul de date de programat se aplic ă la portul
0. Ceilal ți pini ai portului 2, precum și semnalele RST, /PSEN, /EA/Vpp trebuie s ă
aibă urm ătoarele nivele (tabelul 4.6).
Tabeul 4.6
Condi ții pentru opera țiile de programare, verificare, setare bit siguran ță
Opera ția RST nPSEN ALE/EA/VP
PP2.7 P2.6
Programare 1 0 impuls la 0 pentru
50msVpp 1 0
Verificare 1 0 1 1 0 0
Setarea bitului
de siguran ță1 0 impuls la 0 pentru
50msVPP 1 1
Semnalul ALE este un impuls la 0 pentru 50 ms pentru a efectua
programarea. Tensiunea Vpp este de +21V pentru 8751H și de -12,75V pentru
8752BH (A se consulta cu aten ție foile de catalog). Sursa de tensiune pentru Vpp
trebuie s ă fie foarte bine filtrat ă și stabilizat ă deoarece chiar și un mic impuls de
tensiune poate produce v ătămarea circuitului.
Verificarea programului se poate face dac ă bitul de siguran ță nu a fost
programat. Citirea se face în acelea și condi ții ca și scrierea, cu excep ția lui ALE
care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citiX1 X2
Figura 4.3 Circuit pentru folosirea generatorului intern de tact

110 MICROCONTROLLER-e
neautorizat con ținutul EPROM-ului se programeaz ă un a șa numit bit de siguran ță
care odat ă programat nu mai permite nici un acces electric la memoria EPROM.
Odat ă programat, acest bit se poate șterge doar prin ștergerea întregii memorii
EPROM.
Ștergerea EPROM-ului se poate face la lumin ă ultraviolet ă
(2537Angstrom), cu cel pu țin 15W.sec/cm2, adic ă o expunere de 20-30 min. la
distan ța de 2-3cm la o lamp ă de ultraviolete cu 12W/cm2.
Programarea rapid ă (Quick Pulse Programming) poate fi aplicat ă la
circuitele 875XBH, și are ca rezultat posibilitatea program ării unui circuit în numai
25 secunde. Programarea se poate face cu o tensiune Vpp mai mic ă (12,75V).
Semnalul ALE are forma unor impulsuri multiple, 25 de impulsuri de 100 µs.
4.2 PROGRAMAREA MC DIN FAMILIA MCS-51
8051 are 111 instruc țiuni din care 64 sunt executate într-un singur ciclu.
4.2.1 Setul de instruc țiuni 8051
Instruc țiuni pentru transferul de date:
Transferuri generale:
MOV – efectueaz ă un transfer pe bit sau pe octet de la surs ă la
destina ție.
PUSH – incrementeaz ă registrul SP (Stack Pointer) și transfer ă un octet
de la surs ă la loca ția din stiv ă adresat ă de SP.
POP – transfer ă un operand pe un octet de la loca ția din stiv ă adresat ă
de SP la destina ție și decrementeaz ă SP.
Transferuri specifice acumulatorului:
XCH – mut ă octetul din surs ă în acumulator.
XCHD – mut ă biții LOW din octetul din surs ă în acumulator.
MOVX – mut ă un octet între memoria extern ă de date și acumulator.
Adresa memoriei de date extern ă poate fi specificat ă în registrul
dublu DPTR.
MOVC – se cite ște un octet din memoria extern ă de program în acumulator.
Transferuri de adrese:
MOV DPTR, #data , încarc ă imediat 16 bi ți de date în registrul dublu
DPTR.
Instruc țiuni aritmetice:

4. Familia MCS-51 111
Adunare:
INC – adun ă operandul cu 1 și pune rezultatul ca nou operand.
ADD – adun ă acumulatorul cu operandul surs ă și pune rezultatul în A.
ADDC – adunare ca la ADD dar se adun ă și bitul CY (Carry) din PSW.
DAA – ajustare zecimal ă, corecteaz ă suma care rezult ă din adunarea a
doi operanzi zecimali cu maxim 2 cifre.
Scădere:
SUBB – scădere cu împrumut, scade operandul din acumulator, apoi
scade CY și pune rezultatul în A.
DEC – scade 1 din operand și pune rezultatul ca nou operand.
Înmul țire:
MUL – execut ă o înmul țire f ără semn între acumulator și registrul B,
rezultatul ob ținut fiind pe 2 octe ți (octetul cel mai semnificativ se
pune în B). Dac ă toți biții din octetul cel mai semnificativ al
rezultatului sunt 0 bitul OV și CY din PSW se pun la 0.
Împ ărțire:
DIV – execut ă împ ărțirea f ără semn a con ținutului registrului A la
conținutul registrului B. Partea întreag ă a rezultatului se pune în A,
iar partea frac ționar ă în B.
Instruc țiuni pentru opera ții logice:
Instruc țiuni logice cu un singur operand:
CLR – reseteaz ă A orice bit adresabil direct.
SETB – seteaz ă orice bit adresabil direct.
CPL – complementeaz ă con ținutul lui A, f ără a afecta PSW.
RL – rota ție stânga a acumulatorului.
RLC – rota ție stânga a A prin CY.
RR – rota ție dreapta a A.
RRC – rota ție dreapta a A prin CY.
SWAP – inverseaz ă niblurile în A.
Instruc țiuni logice cu 2 operanzi:
ANL – ȘI logic.
ORL – SAU logic.
XRL – SAU EXCLUSIV logic.
Instruc țiuni de control:
Apeluri și salturi necondi ționate:
ACAL – este o instruc țiune pe 2 octe ți de apelare a unui subprogram care
se folose ște atunci când adresa de salt este cuprins ă în 2K ai
paginii curente. Câmpul de adres ă de 11 bi ți este concatenat cu cei
mai semnificativi 5 bi ți din PC.
LCALL- este o instruc țiune pe trei octe ți de apelare a unui subprogram care
adreseaz ă toți cei 64K ai memoriei.
RET – transfer ă controlul la adresa de întoarcere care a fost în prealabil
salvat ă în stiv ă și decrementeaz ă registrul SP cu 2.

112 MICROCONTROLLER-e
AJMP – este un salt necondi ționat la adresa specificat ăanalog cu ACALL.
LJMP – este un salt necondi ționat la adresa specificat ă analog cu LCALL.
SJMP – este un salt necondi ționat scurt în cadrul a 256 de octe ți.
Salturi condi ționate:
JZ – execut ă salt dac ă acumulatorul este 0.
JNZ – execut ă salt dac ă acumulatorul nu este 0.
JC – execut ă salt dac ă bitul de CY (Carry) este 1.
JNC – execut ă salt dac ă bitul de CY este 0.
JB – execut ă salt dac ă bitul adresat este 1.
JNB – execut ă salt dac ă bitul adresat este 0.
JBC – execut ă salt dac ă bitul adresat este 1 și apoi șterge bitul adresat.
CJNE – compar ă primul operand cu al doilea operand și face salt dac ă
aceștia nu sunt egali.
DJNZ – decrementeaz ă operandul surs ă și pune rezultatul în operandul
destina ție. Dac ă rezultatul nu este 0 se execut ă salt.
Întreruperi:
RETI – ca și RET, dar activeaz ă întreruperile.
4.2.2 Modurile de adresare
Adresare prin registre – programatorul are acces la 8 registre de lucru, notate R0-
R7. Cei mai pu țin semnificativi 3 bi ți ai codului instruc țiunii indic ă unul dintre
aceste registre. Se poate forma astfel o instruc țiune de un singur octet. De exemplu
adunarea registrului R0 cu R1, cu rezultatul în acumulator:
MOV A,R0
ADD A,R1
Adresare direct ă – se pot adresa loca ții din RAM, porturi I/O sau registrele cu
func ții speciale. La codul instruc țiunii se adaug ă un octet care reprezint ă loca ția
care se folose ște. De exemplu se adun ă con ținutul loca ției 30 din RAM la
conținutul loca ției 40, cu rezultatul în loca ția 40:
MOV A,30h
ADD A,40h
MOV 40h,A
Adresare indirect ă prin registre – introdus ă pentru a putea lucra cu variabile al
căror loc în RAM se modific ă în cursul rul ării programelor. Ca registre index se
folosesc registrele R0 și R1, al c ăror con ținut indic ă adresa în RAM. Cel mai pu țin
semnificativ bit al codului instruc țiunii indic ă registrul care este folosit ca index. În
limbajul de asamblare al lui 8051, adresarea indirect ă se reprezint ă cu @. De
exemplu se adun ă con ținutul loca ției adresat ă de registrul R0 cu con ținutul loca ției
adresat ă de registrul R1, cu rezultatul în acumulator:
MOV A,@R0

4. Familia MCS-51 113
ADD A,@R1
Adresare imediat ă – folosit ă când operandul este o constant ă cu o valoare
cunoscut ă, care se specific ă în codului instruc țiunii. În limbajul de asamblare al lui
8051 constanta este precedat ă de semnul #. De exemplu adunarea lui 15 cu 18
zecimal, cu rezultatul în acumulator:
MOV A,#15
ADD A,#18
4.3 ECHIP ĂRI SPECIALE CU MEMORIE
4.1.1 Memoria EEPROM (Philips 80C851)
Memoria EEPROM are dimensiunea de 256 octe ți, poate re ține
informa țiile minimum 10 ani și poate fi supus ă la 10.000 de cicluri de
ștergere/scriere. Circuitul con ține multiplicatorul de tensiune pentru ștergere și
scriere.
Comunica ția între UC și EEPROM se realizeaz ă cu ajutorul a 5 registre:
EADRH (adresa F3h), EADRL (adresa F2h) sunt dou ă registre pentru
adresare, primul pentru partea LOW a adresei, cel ălalt pentru partea HIGH (pentru
implement ări viitoare și pentru adresarea bi ților de securitate).
EDAT (adresa F4h) este registrul de date în care se stocheaz ă octetul de
scris sau octetul citit. Sunt posibile și ștergeri pe bloc de date, caz în care
conținutul acestui registru nu conteaz ă.
ETIM (adresa F5h) este un registru pentru timer necesar pentru a adapta
timpul de citire/ scriere la frecven ța sistemului și trebuie înc ărcat cu valori func ție
de tactul sistemului și de caracteristicile EEPROM-ului.
ECNTRL (adresa F6h) este registrul de control care:
• stabile ște modurile de lucru: scriere, citire, ștergere pe octet, ștergere pe
bloc;
• conține un bit care semnaleaz ă că este în curs o scriere sau ștergere.
Schema bloc a modulului este dat ă în figura 4.4.
Secven țiatorul asigur ă secven ța de timp corespunz ătoare pentru scriere sau
ștergere. Datele și adresele se transfer ă prin intermediul registrelor de pe
magistral ă.

114 MICROCONTROLLER-e
O citire se poate realiza simplu:
Citire: MOV EADRL,#20H
MOV A,EDAT
Ca urmare a acestei secven țe de program, con ținutul loca ției 20h este citit
în acumulator.
Memoria EEPROM este protejat ă cu un octet la adresa 8000h. Se poate
valida securitatea cu urm ătoarea secven ță de program, cu scrierea activat ă:
Activare securitate:
MOV EADRH,#80H
MOV EADRL,#00H
MOV EDAT,#FFH
Acest octet nu mai poate fi modificat prin soft. Programul din EEPROM
nu mai poate fi citit sau modificat cu instruc țiuni MOVC din memorii externe, ci
doar executat.
4.3.2 Memoria FLASH cu programare paralel ă (Atmel
AT89C55)
Multe MC compatibile 8051 sunt echipate cu memorie FLASH. Unul
dintre acestea este AT89C55 care este echipat cu 20K octe ți memorie FLASH careFigura 4.4 Schema bloc a modulului EEPROMBUS INTERNCPU
EEPROM
EDATA EADRH EADRLSecven țiator
ECNTRL ETIM

4. Familia MCS-51 115
poate fi programat ă și ștears ă (EPROM) în maximum 1000 de cicluri de
scriere/ ștergere.
Programarea memoriei FLASH se poate face cu o tensiune mare, de +12V
așa încât se pot folosi inscriptoarele de EPROM sau se poate face cu +5V, pentru
ca programarea s ă fie posibil ă în sistemul gazd ă. AT89C55 este fabricat cu
memoria ștears ă (plin ă cu FFh) și gata de a fi programat ă.
Programarea memoriei se face astfel:
! pe liniile de adres ă se stabile ște adresa loca ției de programat;
! pe liniile de date se stabile ște octetul de înscris;
! se aplic ă un front pe /EA/Vpp la +12V (pentru programarea cu 12V);
! se aplic ă un impuls ALE//PROG.
Starea program ării este indicat ă de bitul RDY//BSY (P3.4), linia fiind
LOW în timpul program ării și HIGH când programarea s-a terminat.
Dup ă înscriere se poate face verificarea a ceea ce s-a înscris, prin adresare
și citirea octetului de date.
Toat ă memoria FLASH se poate șterge electric aplicând semnalele de
comand ă corespunz ătoare (din tabelul care exist ă în foile de catalog) și aplicând
apoi un impuls ALE//PROG de 10ms. Asem ănător se programeaz ă (programare
paralel ă) și circuitul 89C51 de la Philips.
4.3.3 Memoria FLASH cu programare paralel ă și serial ă
ISP (Philips 89C51RC)
O facilitate interesant ă și util ă o au MC care au înscris în ROM un mic
program monitor care poate s ă gestioneze înscrierea memoriei FLASH prin canalul
serial. Modul de înscriere serial se nume ște In-System Programming (ISP) și este
realizat printr-un canal serial cu liniile TxD și RxD și liniile de alimentare de +5V
și mas ă, precum și tensiunea necesar ă înscrierii memoriei FLASH, +Vpp. Softul
care gestioneaz ă canalul serial este un monitor înscris în ROM. Dup ă programarea
memoriei FLASH, ROM-ul poate fi invalidat. Programul monitor determin ă rata
de transfer cu care i se trimit date și transmite în ecou ce a recep ționat. Dup ă
transmiterea caracterului pentru stabilirea ratei de transfer, se transmite un octet de
identificare care stabile ște natura datelor care urmeaz ă. Num ărul de octe ți care
urmeaz ă este limitat la 16. În foile de catalog sunt explicate comenzile care pot fi
date pe acest ă cale. Programul monitor ocup ă 1K și ROM-ul se nume ște Boot
ROM.
La aceast ă memorie FLASH timpul de acces este de 100ns, timpul necesar
înscrierii unei loca ții este de 20ms, iar ștergerea se realizeaz ă în 3 secunde.

116 MICROCONTROLLER-e
4.4 INTERFE ȚE ȘI PERIFERICE ON CHIP
SPECIALE
4.4.1 Convertorul A/D
Circuitul analogic de intrare const ă într-un multiplexor analogic și un
convertor A/D de 8 bi ți cu aproxima ții succesive. Tensiunea de referin ță pentru
convertor și masa analogic ă sunt conectate prin pini speciali. O conversie poate
avea loc în 24 sau 48 de cicli ma șină, programabil, ceea ce înseamn ă un timp de
conversie de 24 µs la un tact de 12MHz.
Convertorul este controlat de registrul de control ADCON care selecteaz ă
și canalul de conversie. Terminarea conversiei este semnalizat ă cu un bit tot în
ADCON, iar rezultatul conversiei este stocat în registrul ADCH. O conversie poate
fi declan șată în 3 feluri:
• start în operare normal ă și revenire în operare normal ă;
• start în operare normal ă revenire în mod inactiv (Idle);
• intrare în mod inactiv și declan șarea unei conversii din exterior prin pinul
STDAC.
Cu registrul ADCON (C4h) se poate programa:
• selec ția canalului analogic dorit;
• se poate programa ca o conversie s ă fie declan șată de pinul extern STADC;
• se poate declan șa o conversie;
• conține un bit care semnaleaz ă că s-a terminat conversia. Cu acest bit se
poate solicita o cerere de întrerupere;
• se poate selecta viteza de conversie la viteza maxim ă (24 cicli) sau mai
mică (48 de cicli).
4.4.2 Interfa ța PWM
Circuitul este prev ăzut cu un canal PWM la care frecven ța de repeti ție este
programat ă cu un registru de prescalare (PWMP- adresa FEh) care genereaz ă un
ceas pentru un num ărător de 8 bi ți. Con ținutul num ărătorului este comparat cu cel
al registrului PWM0 (adresa FCh); dac ă num ărul este mai mare ie șirea /PWM0
este LOW, dac ă este mai mic sau egal /PWM0 este HIGH. Factorul de umplere
poate fi astfel modificat între 1/255 și 255/255.

4. Familia MCS-51 117
4.1.3 Interfa ța I2C (Siemens P80CL580)
Portul serial I2C are 2 linii, date seriale (SDA) pe pozi ția liniei P1.7 și ceas
serial (SCK) pe pozi ția bitului P1.6. Interfa ța lucreaz ă în 4 moduri:
• transmi țător MASTER
• receptor MASTER
• transmi țător SLAVE
• receptor SLAVE
Aceste func ții pot fi controlate de registrul S1CON (Serial Control
Register) și S1STA (Serial Status Register). Cu datele se lucreaz ă prin S1DAT
(Data Shift Register) iar adresa se stabile ște în S1ADR (Slave Address Register),
figura 4.5.
Cu registrul de control S1CON (registru SFR la adresa DBh) se pot
programa:
• ceasul serial de transfer în mod MASTER (SCK), care este în func ție de tactul
sistemului și poate fi de maximum 100kHz;
• se poate selecta dac ă liniile I/O (P1.6 și P1.7) au semnifica țiile generale sau
speciale pentru I2C;B
US
I
NTER
NS1DAT
Generare ceasArbitrare și
sincronizare
S1CON
S1STAS1ADR
SDA
SCK
Figura 4.5 Interfa ță I2C

118 MICROCONTROLLER-e
• se poate porni transferul prin generarea de condi ții de START repetate (mod
MASTER) sau verificarea bus-ului și generarea de START doar dac ă bus-ul
este liber (mod SLAVE);
• se poate opri transferul prin generarea unei condi ții de STOP;
• se pot valida întreruperile care se genereaz ă în urm ătoarele condi ții: s-a generat
o condi ție de START, s-a recep ționat adresa proprie, un octet s-a transmis sau
s-a recep ționat;
• se poate insera un ACK, (nivel LOW pe SDA) dup ă recep ția unui caracter sau
a adresei proprii.
Registrul de stare S1STA (D9h – registru Read Only) poate fi folosit pentru
generarea unei întreruperi și saltul la o rutin ă de servire.
În registrul de date S1DAT (DAh) se înscrie octetul care se transmite sau
se recep ționeaz ă; cel mai semnificativ bit se transmite sau se recep ționeaz ă primul.
În registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se
stabile ște adresa dispozitivului SLAVE cu care dore ște un transfer de date.
Observa ție: convertorul AD, interfa ța I2C și canalul PWM0 pot lucra în
modurile cu economie de energie. Convertorul, interfa ța I2C și canalul PWM0
rămân active în modul Idle al UC și pot genera o întrerupere sau un RESET,
terminând astfel modul inactiv al UC.
4.4.4 Interfa ța USB (EZ-USB seria 2100)
Familia EZ-USB de la Anchor Chips ( www.anchorchips.com )
echipeaz ă MC-ul lor echivalent cu 8051 cu un modul USB inteligent, destinat
legăturii USB de mare vitez ă (12Mbps). Modulul USB inteligent admite
instruc țiuni avansate, de aceea punerea la punct a lucrului cu USB devine mai
rapid ă. MC este echipat cu RAM care poate fi înc ărcată de la un PC. Din acest
motiv circuitul nu mai are ROM. Circuitul mai con ține și o interfa ță I2C, precum și
linii I/O de uz general. Tot ca un avantaj se poate men ționa c ă bus-ul de date și
adrese nemultiplexat este accesibil la pini speciali, ceea ce înseamn ă că nu se
sacrific ă pini I/O pentru cuplarea unor componente exterioare și nici nu este nevoie
de latch-uri pentru separarea datelor de adrese.
Schema bloc a acestui MC este dat ă în figura 4.6.
Modulul USB realizeaz ă în timpul ini țializ ării o enumerare și alocare de
adrese a dispozitivelor USB conectate. Aceast ă opera ție este posibil ă ca urmare a
mutării unei secven țe de program din RAM-ul MC în RAM-ul modulului USB.
Încărcarea programului în RAM se poate face atât de la un sistem PC cât și
de la un EEPROM serial prin interfa ța I2C sau clasic, prin conectarea unei memorii
ROM externe. Opera ția de enumerare ini țială permite identificarea unui
corespondent USB și creeaz ă posibilitatea înc ărcării programelor de la sistemul
gazd ă chiar prin USB.

4. Familia MCS-51 119
4.4.5 Aria de num ărătoare programabil ă (PCA)
Aria de num ărătoare programabil ă este un circuit special de timp format
din 5 module de 16 bi ți cu posibilitatea de captur ă și compara ție care se adaug ă
timerelor obi șnuite ale MC. Fiecare modul poate fi programat individual s ă lucreze
în unul din modurile:
• captur ă pe front pozitiv sau negativ;
• timer;
• canal PWM;
• ceas de gard ă (doar modulul 4).
Fiecare timer are un pin asociat din portul 1, ca în figura 4.7.8051
BUS INTERNRAM
4-8 Kocte țiInterfa ța cu memoria
extern ă (nemultiplexat ă)
Interfa ța USB inteligent ă2K octe ți FIFO memorie
propriePIO
(24 linii)
Transceiver USBD+Interfa ță I2C
SCK SDA
Figura 4.6 Schema bloc a unui MC cu interfa ță USB

120 MICROCONTROLLER-e
Timerul comun pentru toate modulele este un timer obi șnuit. El poate
func ționa cu diferite tacte programate în registrul SFR CMOD cu 2 bi ți, conform
tabelului 4.7.
Tabelul 4.7
Programarea tactului pentru timer
CPS1 CPS0 Tact pentru timer
00f r e c v e n ța oscilatorului/12
01f r e c v e n ța oscilatorului/4
1 0 Semnalul de dep ășire de la timerul 0 standard
1 1 De la un pin extern (ECI, P1.2)
Fiecare modul are asociat un registru de comand ă (CCAPM0-CCAPM4)
care controleaz ă modul de operare al modulului:
• se poate valida ca o coinciden ță în modul s ă genereze o întrerupere;
• se poate valida modul PWM;
• se poate valida ca ie șirea P1.x s ă schimbe starea dac ă a ap ărut o
coinciden ță între con ținutul modulului și con ținutul timerului;
• se poate programa pe care front al intr ării P1.x s ă se fac ă num ărarea
impulsurilor externe.
Fiecare modul mai are asociat un registru de 16 bi ți (câte dou ă de 8 bi ți;
CCAP0H-CCAP5H și CCAP0L-CCAP5L) care stocheaz ă valoarea num ărată la
apari ția unei coinciden țe. În mod PWM aceste registre controleaz ă factorul de
umplere.
Func ționarea PCA:Temporizator/
Num ărător (Baza de
timp pentru modulele
PCA)Modul 0 (16 bi ți)
Modul 1 (16 bi ți)
Modul 2 (16 bi ți)
Modul 3 (16 bi ți)
Modul 4 (16 bi ți)P1.3
P1.4
P1.5
P1.6
Figura 4.7 Structura ariei de tim p programabile (PCA )

4. Familia MCS-51 121
• în modul de captur ă, când apare o tranzi ție pe intrarea extern ă P1.x, se
încarc ă valoarea la care a ajuns timerul comun în registrele de date
(CCAPxH și CCAPxL). În acest moment se poate genera o
întrerupere;
• în mod timer, con ținutul registrelor de date este incrementat de la
intrarea extern ă. Când se ajunge la o valoare egal ă cu cea stocat ă în
timerul comun poate fi generat ă o întrerupere;
• în mod PWM fiecare modul poate fi folosit ca un canal independent.
Frecven ța semnalului PWM este aceea și și depinde de sursa timerului
comun. Factorul de umplere se poate modifica prin registrul CCAPxL;
• în mod ceas de gard ă utilizatorul încarc ă registrul CCAPxH și
CCAPxL. Când timerul comun ajunge la o valoare egal ă cu cea stocat ă
de utilizator se genereaz ă un RESET intern. Pentru ca s ă nu se ajung ă
la RESET într-un progam rulat normal, utilizatorul trebuie periodic s ă
schimbe valoarea din timer sau s ă reseteze ceasul de gard ă.
4.4.6 MC cu interfa ță pentru RAM nevolatil – NVRAM
(Dallas DS5000FP)
Un astfel de MC poate adresa o memorie extern ă SRAM (între 8K și 64K)
care poate fi f ăcută nevolatil ă prin alimentarea cu baterii. O baterie cu litiu poate
func ționa cca. 10 ani. Transferul de date cu memoria NVRAM se face pe un bus
separat pentru a nu mic șora num ărul de linii I/O.
Circuitul nu are ROM pentru programul utilizator, programul fiind stocat
în NVRAM, programarea se realizeaz ă în sistem, prin interfa ța serial ă a MC. La
acest tip de MC programul se poate schimba chiar și în timpul func ționării.
Programul se poate înc ărca ini țial prin interfa ța serial ă, sub comanda unui program
existent într-un ROM intern numit Boot ROM (sau BOOTSTRAP LOADERROM) care este apoi invalidat și devine invizibil la adresare.
4.4.7 Interfa ța LCD (PHILIPS P83C434)
În jurul unui nucleu 8051 a fost construit un MC specializat pentru
comanda panourilor LCD. R ămân disponibile pentru uz general 12 linii I/O.
Modulul LCD are 24 de linii pentru comanda segmentelor, din care 2 pot fi folosite
pentru comanda planurilor din spate. Afi șajul poate fi comandat cu tensiuni
variabile ob ținute intern prin divizarea tensiunii de alimentare cu rezisten țe.
Schema bloc a MC este dat ă în figura 4.8.

122 MICROCONTROLLER-e
MC se poate folosi la comanda afi șoarelor cu pân ă la 4 planuri în spate.
Cele 24 de linii de comand ă a segmentelor pot comanda 12 caractere numerice
formate cu 7 segmente sau 88 de elemente grafice. Func ționarea afi șajului poate fi
mai bine în țeleas ă în cazul concret al unui singur plan în spate, pentru 2 elemente
alăturate ale afi șajului, figura 4.9.
Primul element este aprins pentru c ă între segment și planul din spate este
o diferen ță de poten țial, iar al doilea este stins pentru c ă nu exist ă o diferen ță de
poten țial.
Comanda modulului de afi șare se face cu 12 registre LCD0-LCD11
(adrese 9Ah-BFh) care con țin configura ția segmentelor stinse/aprinse pentru
fiecare plan din spate.Nucleu
805112
linii
I/O Modul LCD S00-S21
S22/BP3
S23/BP2
BP1
BP0
Figura 4.8 MC cu modul de comand ă LCD
VDD
BP0
VSS
S00
S01
2 elemente de afisaj,
(primul aprins, al doilea stins) Figura 4.9 Comanda a doua elemente al ăturate ale afi șajului LCD

4. Familia MCS-51 123
4.4.8 MC specializat pentru TV și video (PHILIPS 83C145)
Acest MC este construit în jurul unui nucleu 8051 și are 8-16Kocte ți ROM
sau OTP, 256 octe ți RAM, controller pentru vizualizare pe ecran (On Screen
Display OSD), 3 ie șiri video digitale, memorie RAM pentru display de 128×10
biți, generator de caractere (ROM 60 caractere x 18 linii x 14 puncte), 8 canale
PWM de 6 bi ți și un canal PWM de precizie de 14 bi ți, convertor numeric
analogic. Nu se poate conecta memorie extern ă. Schema bloc este dat ă în figura
4.10.
Ceasul canalelor PWM se formeaz ă din tactul sistemului divizat cu 4.
Acest tact este aplicat tuturor canalelor PWM și unui num ărător de 14 bi ți.
Canalele de 6 bi ți utilizeaz ă doar partea mai pu țin semnificativ ă a num ărătorului de
14 bi ți. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii
acestui registru cu con ținutul num ărătorului, ie șirea PWM schimb ă starea.
Structura canalelor PWM este reprezentat ă în figura 4.11.
Convertorul numeric analogic este folosit pentru a realiza conversia analog
numeric ă soft (figura 4.12). Circuitul are 3 intr ări analogice care pot fi comutate pe
rând la intrarea unui comparator de tensiune. La cealalt ă intrare a comparatorului
se aplic ă ieșirea convertorului numeric analogic. Când intr ările sunt egale, valoarea
aplicat convertorului numeric analogic este chiar valoarea numeric ă a semnalului
analogic de intrare.Nucleu 8051
(făra memorie)
Porturi I/O
P3 P2 P1(4b) P08x6bit PWM 14bit PWMMagistral ă de dateROMRAM On Screen Display OSD
RAM 128×10
ROM 60 x 18 x 14
Figura 4.10 Schema bloc a unui MC specializat TV/videoDAC

124 MICROCONTROLLER-e
Modulul OSD are rolul de a suprapune text pe o imagine de televiziune.
Intrările în acest bloc sunt:
• 2 ceasuri video;
• semnalul de sincronizare orizontal ă;Num ărător 14 bi țiCanal PWM0 (6 bi ți)
Canal PWM7 (6 bi ți)
Canal PWM8 (14 bi ți)P1.3
P0.6
Tact= f/4Registru SFR PWM0
Registru SFR PWM7
Registru TDACL, TDACH
Fig. 4.11 Structura canalelor PWM (ale MC specializat TV/video)
MUX
ANALOGICP1.0
P1.1
DAC (4 bit)Comparator
Figura 4.12 Convertorul analog numeric (al MC specializat TV/video)

4. Familia MCS-51 125
• semnalul de sincronizare vertical ă.
Modulul OSD poate fi echipat cu EPROM, ceea ce înseamn ă că
generatorul de caractere poate fi programat. Modulul OSD permite 8 moduri de
scriere umbrit ă a caracterului, culoarea caracterului este selectabil ă, culoarea
fondului este selectabil ă.
4.4.9 MC cu arie configurabil ă (TRISCEND E5)
Firma TRISCEND a realizat un MC compatibil 8051 care con ține o arie de
porți configurabil ă (Configurable System-on-Chip CSOC). Acest MC integreaz ă
pe un singur chip un MC de uz general 8051, un bloc de RAM de mari dimensiuni
și o arie de module configurabile, toate acestea conectate între ele printr-un bus de
mare vitez ă. Programarea ariei se face prin programul de ini țializare și se poate
relua de ori câte ori.
Descrierea pe scurt a circuitului: ruleaz ă la o frecven ță de 40MHz și are
echipare standard (256 octe ți RAM, ceas de gard ă, trei timere, 2 canale DMA,
interfa ță serial ă UART, 64K octe ți RAM) și are în plus 3200 de module
configurabile (CSL Configurable System Logic – ceea ce înseamn ă cam 40.000 de
porți).
Conectarea între modulele cofigurabile și restul sistemului, respectiv liniile
I/O se realizeaz ă prin magistrala CSI (Configurable System Interconnect), cu 8 bi ți
de date bidirec țional, 32 de bi ți de adres ă, rata de transfer de maxim 40MBps.
Magistrala CSI permite lucrul multi master, master putând fi unitatea central ă
8051, canalele DMA sau interfa ța JTAG.
Interfa ța cu exteriorul poate fi realizat ă cu maxim 315 linii I/O (depinde
de variant ă și capsul ă), exist ă și posibilitatea conect ării memoriei externe, iar un
modul de interfa ță IEEE 1149.1 JTAG permite testarea sistemului. Liniile I/O au
caracteristici programabile (curent de ie șire, histerezis la intrare etc.). Schema bloc
este dat ă în figura 4.13.
Interfa ța cu memoria extern ă permite legarea direct ă a unei memorii de
256K x 8 bi ți (de regul ă FLASH) pentru înscrierea ini țială a programului în MC.
Înscrierea ini țială poate fi realizat ă la RESET din aceast ă memorie FLASH extern ă
în mod paralel, dar poate fi realizat ă prin citirea programului prin interfa ța serial ă
de la un PROM serial. Programul poate fi executat din FLASH sau poate fi copiat
prin interfa ța serial ă în RAM și executat de acolo.
Modul serial elibereaz ă pini I/O care pot fi astfel folosi ți în alte scopuri.
Procedura de înc ărcare poate s ă nu fie reluat ă dac ă RAM-ul se alimenteaz ă cu
baterie.
Cu aria de module configurabile se pot realiza sisteme la cerere. Fiecare
modul poate îndeplini diverse func ții, combina ționale sau secven țiale.

126 MICROCONTROLLER-e
Modulele configurabile sunt aranjate într-o matrice, a c ărei dimensiuni
depind de varianta de circuit. Modulele sunt grupate câte dou ă, pentru a putea
împărți resursele. Schema bloc a unui nod din matrice este dat ă în figura 4.14.
PIO PIO PIO8051
CPU
256 x 8 RAMCeas de gard ă
3 x Timer
UART
Controller deîntreruperi
2x DMA
BUS CSIRAM
64Kocte țiInterfa ța cu
memoria
extern ăInterfa ța
JTAG
Matrice CSL
Figura 4.13 Schema bloc a unui MC TRISCEND E5
Matrice
de
legăturiMatrice
de
legături
Matrice
de
legăturiMatrice
de
legăturiModul CSL
Modul CSLLinii lungi de
adres ă
Linii lungi I/OLinii
scurte de
inter-
conectare
Figura 4.14 Schema bloc a unui modul de arie configurabil ă

4. Familia MCS-51 127
Structura unei celule este dat ă în figura 4.15.
Structura por ților poate fi programat ă la ini țializare și reprogramat ă de ori
câte ori. O celul ă poate îndeplini una din func țiile:
• logic ă (ieșirea 1);
• aritmetic ă;
• de memorare (ie șirea 2);
• de magistral ă;
• secven țială.
Testarea JTAG se poate realiza cu un calculator conectat la interfa ța
JTAG. Pinii folosi ți sunt:
• TCK ceas de testare (intrare în MC);
• TMS comanda modului de test, intrare în MC, activ pe 0;
• TDI date seriale de intrare în MC;
• TDO date seriale de ie șire din MC.
În modul de testare nu este nevoie ca MC s ă aibă o memorie extern ă. Prin
legătura JTAG se poate programa matricea CSL și se poate observa modul de
rulare al programului de c ătre MC prin intercalarea de break point-uri, rularea pas
cu pas, citirea registrelor interne etc.
4.5 SISTEM MINIMAL CU 8051
Schema electric ă simplificat ă a unui sistem minimal cu 8051 este dat ă în
figura 4.16.Bistabil D
D Q
EN
TIntrări1 Ieșiri
2
Figura 4.15 Structura unei celule configurabilePorți
configurabile
prin
programare

128 MICROCONTROLLER-e
Sistemul minimal con ține RAM cu capacitatea de 32KB, selectat cu PSEN
(care indic ă faptul c ă nu este acces la memoria program) și /RD pentru o citire sau
/WR pentru o scriere în RAM.
Bus-ul de date și adrese este comun pentru AD0-AD7. Adresele se separ ă
cu un latch validat de semnalul ALE. Liniile de date sunt validate cu /RD sau /WR.
Memoria program EPROM este op țional ă, (este necesar ă pentru modelele
care nu au EPROM sau OTP intern, de exemplu 8031) fiind selectat ă cu semnalul
PSEN. Dac ă exist ă EPROM extern /EA=LOW, iar dac ă se folose ște EPROM-ul
intern /EA=HIGH.
Circuitul se completeaz ă cu un generator de tact și dou ă componente
pentru realizarea RESET-ului, ca în unul din subcapitolele anterioare.
Pentru dezvolt ări se poate folosi portul P1, care este liber, și canalul serial.
Dac ă num ărul liniilor I/O nu este suficient, se poate folosi un expander cum este
de exemplu 8243, care poate extinde 4 linii la 4×4 linii bidirec ționale (figura 4.17).BUS
DATED0-D7BUS
ADRESE
A0-A15/A15
/WR 8051
X1 AD0-AD7
P0
X2
RST
ALE
P2
A8-A15
P1 /RD
/WRLATCH
ADRESERAM
STATIC 32K
A0-A14
CS D0-D7/WE
OE
EPROM
A0-A14
CS D0-D7
/OEA15
/PSENPort I/O liberPSEN /RD
Figura 4.16 Sistem minimal cu 8051

4. Familia MCS-51 129
4.6 DATE COMPARATIVE PENTRU MC DIN
FAMILIA MCS-51
Tabelul 4.8
Tabel comparativ pentru MC din familia MCS -51
MC Magistrala de
dateFrecven ț
a
(MHz)Linii
I/OInterfe țe
specialePreț
(USD)
PHILIPS
P87C5181 6 3 2 2 4
PHILIPS
S87C55281 6 4 8 5 3 5
PHILIPS XA-G3 16 30 32 2 90
TRISCEND E5 8 40 128 2 27
INTL 87C196 16 20 53 6 188051
X1
P0X2
RST
P2.3
P2.2
P2.1
P2.0
P1
P2.5
P2.48243
P4
P23 P5
P22
P21
P20 P6
/CS
PROG P7
Figura 4.17 Expandarea liniilor I/O cu circuitul 8243

130 MICROCONTROLLER-e

5
MICROCONTROLLER-E RISC
5.1 MICROCONTROLLER PIC
Începem prezentarea MC cu arhitectur ă RISC cu microcontrollerul PIC.
Produc ătorul plasat cel mai bine pe pia ța MC PIC este Microchip
(www.microchip.com ). Un alt produc ător important de MC PIC este Motorola.
Exist ă mai multe familii de MC PIC; PIC 12, PIC 16, PIC 17.
5.1.1 PIC12
MC PIC 12 sunt MC cu pre țuri mici și ușor de utilizat datorit ă arhitecturii
RISC. MC are un num ăr de 33 de instruc țiuni cu un grad mare de ortogonalitate,
din care majoritatea se execut ă într-un singur ciclu, iar cele de salt în dou ă cicluri.
Spațiul mic ocupat (capsul ă de 8 pini) fac aceste MC foarte potrivite aplica țiilor
miniatur ă precum și aplica țiilor casnice. Pentru a putea fi realizat ă o și mai mare
economie de spa țiu, circuitul de RESET este integrat. Sunt disponibile circuite cu
OTP, cu EPROM sau EEPROM inclus, care fac posibil ă atât realizarea seriilor
mari cât și a prototipurilor sau a aplica țiilor cu elemente care se modific ă (de
exemplu aplica ții de asigurare a securit ății cu coduri variabile). Aceste MC admit o
frecven ță de pân ă la 4MHz.
MC PIC 12 are o arhitectur ă Harvard, cu magistrale diferite pentru date și
pentru instruc țiuni. Acest lucru permite ca magistrala de instruc țiuni s ă fie mai
mare (de 12 biți) și ca urmare majoritatea instruc țiunilor pot fi de un cuvânt și pot
fi executate într-un singur ciclu.
Unitatea central ă este o unitate pe 8 bi ți care poate realiza func ții
aritmetice și booleene: adunare, sc ădere, deplasare și opera ții logice cu date care se
găsesc în registrul de lucru (W) și în oricare registru de uz general. Setul de
instruc țiuni are un mare grad de ortogonalitate, ceea ce reduce mult timpul
necesitat de realizarea unei aplica ții. O opera ție poate afecta bi ții de stare: Carry

5. Microcontroller-e RISC 131
(C), Digit Carry (C ) și Zero (Z). Num ărătorul de program (PC) este un registru de
12 biți, ceea ce înseamn ă că poate adresa un spa țiu de 2K cuvinte de 12 biți.
Schema bloc a acestui MC este dat ă în figura 5. 1.
Setul de registre localizat în RAM con ține registre cu func ții speciale și
registre de uz general. Registrele generale pot fi apelate direct sau indirect, prin
intermediul registrului special FSR ( File Select Register ). Registrele și adresele lor
sunt date în tabelul 5. 1 (pentru circuitul PIC 12C509).
Tabelul 5.1
Setul de registre PIC12C509
Registru Adresa(H) Registru Adresa(H)
INDF 00 FSR 04
TMR0 0 1 OSCCAL 05
PCL 02 GPIO 06
STATUS 03 Registre
generale07-1FSDA
dateSCL
tactMagistral ă de date și adreseUnitate central ă
PCALUMemoria de date
RAM 25 x 8 bi ți sau
41 x 8 bi ți
(set de registre )Memoria program
ROM/OTP/EPROM
512 x 12 biți sau
1024 X 12 biți
M
A
G
I
S
T
R
A
L
A
I
N
S
T
R.
.W
Timer Ceas de
gard ăTimer pt.
RESETEEPROM serial
16 x 8
PIO
Figura 5.1 PIC12 –Schema bloc

132 MICROCONTROLLER-e
Stiva este de 12 biți și este realizat ă hard. Nu exist ă indicator de stiv ă și nu
sunt instruc țiuni de PUSH și POP, lucrul cu stiva fiind automat la instruc țiunile
CALL și RETLW. Stiva admite o adâncime de 2 nivele.
Setul de instruc țiuni pentru acest MC este dat în tabelul 5.2.
Tabelul 5.2
Setul de instruc țiuni PIC 12
Mnemonic ă-operanzi Descriere
ADDWF f,d Adun ă W cu f
ANDWF f,d ȘI LOGIC între W și f
CLRF f Face în f to ți biții 0
CLRW Face în W to ți biții 0
COMF f,d Complementeaz ă f
DECF f,d Decrementeaz ă f
DECFSZ f,d Decrementeaz ă f și trece mai departe dac ă este 0
INCF f,d Incrementeaz ă f
INCFSZ f,d Incrementeaz ă f și trece mai departe dac ă este 0
IORWF f,d SAU W cu f
MOVF f,d Mut ă f
MOVWF f Mut ă W în f
NOP Nici o opera ție
RLF f,d Rota ție la stânga prin Carry
RRF f,d Rota ție la dreapta prin Carry
SUBWF f,d Sc ădere W din f
SWAPF f,d Schimb ă f
XORWF f,d SAU EXCLUSIV W cu f
BCF f,b Bitul b din f este f ăcut 0
BSF f,b Bitul b din f este f ăcut 1
BTFSC f,b Se testeaz ă bitul b din f și face salt dac ă bitul este 0
BTFSS f,b Se testeaz ă bitul b din f și face salt dac ă bitul este 1
ANDLW k ȘI între W și constanta k
CALL k Chemare subrutin ă
CLRWDT k Resetare ceas de gard ă
GOTO k Salt necondi ționat
IORLW k SAU între W și k
MOVLW k Înc ărcare imediat ă a constantei k în W
OPTION k Înc ărcare registru de op țiuni
RETLW k Întoarcere din subrutin ă cu plasarea k în W
SLEEP Intrarea în mod inactiv
TRIS f Înc ărcarea registrului TRIS
XORLW k SAU EXCLUSIV între k și W

5. Microcontroller-e RISC 133
Dacă valoarea bitului d este 0, rezultatul se stocheaz ă în W iar dac ă este 1,
rezultatul se stocheaz ă în f.
Registrul de op țiuni (OPTION) este un registru special de configurare.
Registrul TRIS este folosit pentru a controla liniile I/O. Un 1 în TRIS pune linia
corespunz ătoare în înalt ă impedan ță, iar un 0 valideaz ă linia.
Liniile de intrare/ie șire pot fi programate ca intr ări sau ie șiri cu registrul
special GPIO. Pinii pot avea semnifica ții duble. La RESET toate liniile se definesc
ca intr ări. Unii pini pot trezi MC din starea inactiv ă (Wake up). Opera țiile de
intrare ie șire se fac prin intermediul registrului GPIO, de exemplu instruc țiunea:
BCF GPIO,5 ;stabile ște un 0 pe linia 5 de ie șire
Modulul timer 0 poate fi utilizat în urm ătoarele moduri:
• temporizator/num ărător pe 8 bi ți;
• num ărător pentru prescalare de 8 bi ți;
• ceas din exterior sau din interior.
Schema bloc a temporizatorului cu semnalele de comand ă este dat ă în
figura 5.2.
Cu bitul TOC5 se alege sursa tactului, extern ă (de la un pin cu semnifica ție
dubl ă) sau intern ă. Tacul merge direct la timer sau prin registrul de prescalare
(registru de 8 bi ți), programabil cu bitul PSA. Registrul de prescalare poate fi
încărcat cu bi ții PS2, PS 1 și PS0. To ți ace ști biți de comand ă se afl ă în registrul de
opțiuni. Registrul de prescalare poate fi folosit și de ceasul de gard ă, dar nu
simultan cu timerul 0.
Memoria EEPROM cu care sunt echipate anumite circuite din familie
poate fi de 16 octe ți, poate fi supus ă la peste 1 mil. de cicluri de scriere/ ștergere și
poate re ține informa ția mai mult de 40 de ani. Transmisia se face serial sincron pe
două fire, unul de tact (SCL) și unul de date, bidirec țional (SDA), mapate în
registrul GPIO ca bit 6 și bit 7, f ără a avea conexiune în exterior. Protocolul pentruFosc/4
(intern)
GP2
(TOCKI )
(extern)
TOC5PrescalareTact f ără
sau cu
prescalare
PS2 PS 1 PS0 PSATIMER
Magistrala de date
Figura 5.2 Schema bloc a temporizatorului PIC 12Alegere
tact

134 MICROCONTROLLER-e
transferul de date poate avea loc doar dac ă magistrala de date nu este ocupat ă, cu
SDA și SCL= 1. Un START este determinat de frontul SDA din 1 în 0, iar un front
SDA din 0 în 1 reprezint ă un STOP. Data trebuie s ă fie stabil ă pe SDA pe durata
unui impuls de tact SCL (o tranzi ție din 1 î n 0 , u r m a t ă de una din 0 în 1).
Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei.
Pentru a asigura siguran ța rul ării corecte a programului, circuitul este
echipat cu un ceas de gard ă, care poate fi resetat printr-o instruc țiune special ă,
asigurând o întârziere de 18ms pân ă să declan șeze un RESET.
Familia PIC 12 are posibilitatea de lucru într-un mod cu economie de
energie, numit SLEEP. În modul SLEEP oscilatorul este oprit, iar pinii I/O î și
păstreaz ă starea. Intrarea în SLEEP se face cu o instruc țiune special ă. MC poate fi
scos din acest mod de lucru printr-un front aplicat la pin extern sau de ceasul degard ă.
Ca și mod de generare a tactului extern, circuitul poate lucra în mai multe
feluri:
• cu cristal extern conectat la GP5/OSC 1 și GP4/OSC2 dup ă o schem ă
standard;
• cu generator de tact extern, cuplat între GP5/OSC 1 și mas ă;
• pentru aplica ții care nu sunt critice la timp, se poate conecta în exterior
la GP5 un grup RC, cu R (3k- 100k) la +5V și C (20pF) la mas ă;
• MC are un generator intern de 4MHz, a c ărui frecven ță poate fi
modificat ă prin scrierea registrului OSCCAL.
Alegerea sursei tactului, precum și activarea ceasului de gard ă se fac cu un
registru de configurare (de 12 biți) care nu este accesibil utilizatorului, fiind o
informa ție scris ă în PROM/ EPROM la adresa FFFh.
Un RESET poate fi generat de una din urm ătoarele surse:
-la conectarea tensiunii de alimentare, POR Power On Reset;
-un RESET extern /MCLR pe pinul GP3;
-un RESET când circuitul este în mod SLEEP pe /MCLR;
-de la ceasul de timp real în operare normal ă;
-de la ceasul de timp real în mod SLEEP;-trezirea din mod SLEEP prin schimbarea st ării unui pin extern.
Identificarea sursei de RESET se face prin pozi ționarea unor bi ți în
registrul de stare, registru al c ărui con ținut nu se modific ă prin RESET.
Memoria poate fi programat ă în circuit (variantele cu EPROM).
Aceasta se realizeaz ă simplu, cu 2 linii, una de date și una de tact, conform
figura 5.3.

5. Microcontroller-e RISC 135
Intrarea în mod programare se face cu GP 1 și GP0 ținuți la 0 pe un front
cresc ător al /MCLR.
Pentru a sublinia dimensiunea și simplitatea de utilizare a acestui MC, în
figura 5.4 este repreyentat ă capsula circuitului.
5.1.2 PIC16
Cu o arhitectur ă asem ănătoare familiei PIC 12, aceste MC au câteva
îmbun ătățiri:
• 35 de instruc țiuni fa ță de 33;
• frecven ța maxim ă 20MHz fa ță de 4;
• posibilitatea de lucru în întreruperi, cu 7 surse interne și o surs ă
extern ă;
• stivă automat ă cu 8 nivele;
• 13 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer
și cu o linie de putere pentru comanda direct ă a unui LED;Inscriptor
(ex. Calc. PC)
+5V
GND
Vpp
CLK
D I/OPIC12C5xx
Vdd
Vss
/MCLR/Vpp
GP1
GP0
Figura 5.3 Conexiune pentru programarea EPROM
PIC12C
1 8
2 73 6
4 5Vss
GP0
GP1
GP2/T0CKIVdd
GP5/OSC 1
GP4/OSC2
GP3/MCLR/Vpp
Figura 5.4 Capsula PIC 12

136 MICROCONTROLLER-e
• magistrala de instruc țiuni este pe 14 biți, față de 12 biți;
• memoria ROM este de 5 12 x 14 cuvinte pân ă la 2K x 14 cuvinte;
• memoria RAM este de 80- 128 de octe ți.
Aceste MC sunt livrate în capsule cu 20 de pini.
Întreruperile sunt controlate de un registru de comand ă a întreruperilor care
poate valida sau invalida global sistemul de întreruperi și individual pe fiecare
linie. Fiecare interfa ță care poate cere întrerupere are ata șat un bit care poate fi
testat pentru a determina sursa întreruperii.
Datorit ă posibilit ății de lucru în întreruperi, timerul 0, care func ționeaz ă la
fel ca la PIC 12 poate cere întrerupere la trecerea num ărătorului de la FFh la 00h.
Întreruperea poate fi mascat ă.
Pentru cre șterea siguran ței în func ționare familia PIC 16 are integrat un
circuit de protec ție care genereaz ă un RESET la sc ăderea tensiunii de alimentare
(Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de
comand ă.
MC din familia PIC 16 pot fi echipate cu o diversitate mult mai mare de
interfe țe, cum ar fi comparatoare, convertoare ADC și DAC, USART, I2C, SPI,
PWM etc. Circuitul PIC 16C64x este echipat cu 2 comparatoare analogice. Intr ările
lor sunt multiplexate cu pinii I/O 0-3 și cu o referin ță de tensiune care poate fi
folosit ă pentru comaparatoare. Cu un registru de comand ă în zona registrelor cu
func ții speciale se poate programa modul de comparare. Se poate programa ca
ieșirea comparatoarelor s ă cear ă întrerupere. Comparatoarele pot fi programate s ă
lucreze cu referin ță extern ă sau intern ă. În modul SLEEP comparatoarele r ămân
active și pot trezi circuitul. Dac ă curentul consumat de comparatoare în mod
SLEEP este prea mare, ele pot fi dezactivate prin registrul de comand ă. Modulul
care genereaz ă referin ța de tensiune este un grup de 16 rezisten țe care divizeaz ă
tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau
invalidat pentru economia de energie.
Circuitul PIC 16C71x este echipat cu convertor A/D și un bloc suplimentar
de timere. Convertorul A/D este un convertor cu aproxima ții succesive pe 8 bi ți, cu
4 intr ări analogice multiplexate și cu circuit de e șantionare-memorare. Tensiunea
de referin ță poate fi cea de alimentare sau o referin ță extern ă la un pin I/O cu
semnifica ție dubl ă. Convertorul A/D poate lucra și în modul SLEEP, pentru acest
mod de lucru fiind integrat în circuit un oscilator propriu pentru convertor.
Convertorului îi sunt ata șate 3 registre, 2 de comand ă și unul de date. Cu registrele
de comand ă se poate programa:
• selec ția tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu);
• selec ția canalului analogic;
• un bit pentru START conversie;
• un bit pentru terminare conversiei – poate fi citit și testat prin program,
sau poate cere o întrerupere;
• un bit pentru oprirea convertorului pentru a nu mai consuma curent,
dacă nu este folosit în mod SLEEP.

5. Microcontroller-e RISC 137
Modulul suplimentar de timere este numit CCP (Capture Compare PWM),
după func țiile pe care le poate îndeplini (un MC poate avea unul sau mai multe
module CCP). Modulul CCP con ține un registru de 16 biți și folose ște timerele
suplimentare 1 și 2. Modurile de lucru posibile pentru modulul CCP sunt:
• mod captur ă – la apari ția unui eveniment la pinul exterior 3, registrul
CCP se încarc ă cu valoarea din timerul 1. Un eveniment poate fi un
front cresc ător, unul descresc ător, la fiecare 4 sau 16 fronturi
cresc ătoare (prescalare). În momentul evenimentului se poate cere o
întrerupere.
• mod comparare – registrul CCP este permanent comparat cu
conținutul timerului 1. Dac ă apare o coinciden ță, se semnalizeaz ă prin
schimbarea st ării pinului extern 3. În acela și moment se poate cere o
întrerupere.
• mod PWM – se folosesc 2 timere, 1 și 2, unul pentru a determina
perioada semnalului și cel ălalt factorul de umplere. Ie șirea PWM se
face tot la pinul 3.
5.1.3 PIC17
PIC17 are urm ătoarele îmbun ătățiri fa ță de PIC 16:
• 58 de instruc țiuni fa ță de 38;
• frecven ța maxim ă 33MHz fa ță de 20;
• stivă automat ă cu 16 nivele fa ță de 8;
• 33 de linii I/O cu posibilitatea stabilirii individuale a sensului de
transfer și cu o linie de putere pentru comanda direct ă a unui LED;
• magistrala de instruc țiuni este pe 16 biți, față de 14 biți;
• memoria ROM este de 2048 x 16 cuvinte;
• memoria RAM este de 232 de octe ți;
• magistralele de date, și adrese (multiplexate) sunt accesibile la pin;
• unitatea central ă poate executa înmul țiri;
• sunt admise 11 surse de întreruperi fa ță de 8.
Aceste MC sunt livrate în capsule cu 44 de pini.
Schema bloc este dat ă în figura 5.5.
Și circuitele din familia PIC 17 pot fi echipate cu o gam ă larg ă de interfe țe.

138 MICROCONTROLLER-e
Sistemul de timere este compus din mai multe timere:
• Timer 0 este un num ărător de 16 biți cu surs ă de num ărare extern ă sau
intern ă. Poate lucra cu un registru de prescalare care d ă un tact divizat
cu 1/1 până la 1/256;
• Timer 1 este un timer pe 8 bi ți care poate lucra împreun ă cu Timerul 2
pentru a forma un timer pe 16 biți. Poate lucra în regim de num ărare a
unor evenimente externe. Timerul are asociat un registru, deci poate
lucra în regim de comparare;
• Timer 2 este la fel cu timerul 1. Timerul 1 și 2 pot lucra în mod PWM;
• Timer 3 este pe 16 biți, cu un registru asociat.
Modulul USART poate fi configurat s ă lucreze în mod serial asincron full-
duplex (pentru a transfera date cu un terminal sau un PC), sau în mod sincron full-duplex (de ex. pentru a lucra cu memorii externe EEPROM). Magistrala de date și adreseUnitate central ă
PCALUMemoria de date
RAM 232 x 8 bi țiMemoria program
ROM/OTP/EPROM
2K x 16 bițiM
A
G
I
S
T
R
A
L
A
I
N
S
T
R
.W
Timer Ceas de
gard ăControl
ler de
întreru pTimer pt.
RESET
PIO
Port C și D Port B Port ASTIVA
16 x 16 biți
3 x
TIMERUART
Figura 5.4 Schema bloc PIC 17

5. Microcontroller-e RISC 139
Observa ție: este de remarcat la MC din familia PIC faptul c ă nu au nevoie de
componente externe pentru RESET și pentru ceas, ceea ce poate fi un avantaj.
5.2 MC ATMEL
Foarte bine plasate pe pia ță în zona aplica țiilor low cost sunt MC ale firmei
ATMEL. Firma fabric ă și MC echivalente 805 1.
5.2.1 Familia AVR
Aceste MC sunt realizate de produc ător în diverse variante, începând cu
modelele low cost AT90S2323, AT90S 1200 și terminând cu modele complexe
AT90S44 14, AT90S85 15, diferen țele între acestea constând în principal în
mărimea și tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM și a
facilit ăților oferite la interfa ța cu utilizatorul.
Seria de MC ATMEL este sus ținută de o campanie puternic ă de promovare
astfel încât produc ătorul ofer ă gratuit software de dezvoltare ce include asamblor,
debugger, documenta ție, exemple și note de aplica ție pe site-ul s ău
www.atmel.com . Softul este disponibil atât în variant ă ce ruleaz ă sub sistemul de
operare MS-DOS cât și în varianta WINDOWS.
Toate MC din familie au o arhitectur ă Harvard, adic ă au spa ții de adres ă și
magistrale diferite pentru memoria de date și memoria program. Dispun de o
prelucrare de tip pipe line a instruc țiunilor (în 2 trepte) astfel încât în timp ce o
instruc țiune este executat ă, cealalt ă se afl ă în ciclu de aducere din memorie (fetch)
și astfele se execut ă câte o instruc țiune în fiecare ciclu.
Schema bloc a unui circuit din familie este dat ă în figura 5.5.
Unul dintre cele mai mici MC este AT90S2323. Circuitul se alimenteaz ă
(în func ție de variant ă) la 5V sau la 3V și func ționeaz ă pân ă la frecven ța de
10MHz. Curentul absorbit este de 2,4mA în stare activ ă, 0,5mA în stare inactiv ă și
1µA în starea Power Down. În principal, circuitul este compus din:
• unitatea central ă, în arhitectur ă RISC cu 118 instruc țiuni, majoritatea
de un ciclu și 32 de registre de uz general;
• blocul de memorie, compus din memoria de program (FLASH de 2K
octeți care suport ă în jur de 1000 de program ări) și din memoria de
date ( 128 octe ți de RAM) și 128 octe ți de EEPROM, care suport ă în
jur de 100.000 de program ări;

140 MICROCONTROLLER-e
• interfe țele sunt reprezentate de un timer de 8 bi ți cu prescalare, un
timer pentru ceasul de gard ă și o interfa ță serial ă SPI pentru
programarea în circuit. Liniile I/O sunt de regul ă cu semnifica ție
dubl ă.
Unitatea central ă poate executa majoritatea opera țiilor într-un ciclu, ceea
ce înseamn ă că operanzii sunt în registrele generale, are loc opera ția și rezultatul
este stocat în unul dintre registre. Se pot realiza și adres ări indirecte cu 6 dintre cele
32 de registre, grupate câte 2 (ca s ă formeze registre de 16 biți); registrele duble
sunt referite cu X, Y, Z. Se pot face opera ții între registre sau cu o constant ă.
Instruc țiunile au formatul pe 16 biți, iar indicatorul de program PC este pe 10 biți.
Memoria de date poate fi accesat ă tot ca registre, în acela și spa țiu. Spa țiul
I/O con ține 64 de adrese unde se g ăsesc registrele de control și de stare ale
interfe țelor. Stiva este definit ă în RAM, deci exist ă un registru indicator de stiv ă
SP de 8 bi ți. O imagine sugestiv ă a spa țiilor de memorie și I/O este dat ă în figura
5.6.Magistral ă de dateUnitate central ă
PCALUMemoria de date
RAM 128 octe ți
EEPROM 128 de octe țiMemoria program
FLASH 2K octe ți32 registre de
uz general
SPI Ceas de
gard ăTimer
Port BOscilator Controller de
întreruperi
Figura 5.5 MC din familia AVR – schema bloc

5. Microcontroller-e RISC 141
Memoria EEPROM dispune de un spa țiu propriu de adresare, în care
fiecare octet dintr-o loca ție poate fi citit sau scris. Accesul se face specificând
adresa, data și comanda în registre speciale.
Acest MC permite 5 moduri de adresare:
• adresare direct ă – adresa operandului este con ținută în instruc țiune. Se
pot executa instruc țiuni cu un registru sau între 2 registre. Este
accesibil astfel tot spa țiul de date;
• adresare indirect ă – adresa operandului este în X, Y sau Z;
• adresare indirect ă cu deplasament – adresa oprandului este rezultatul
adun ării registrelor Y sau Z cu adresa de 6 bi ți con ținută în
instruc țiune. Se acoper ă astfel doar 63 de loca ții față de baza dat ă de
registrele Y sau Z;
• adresare indirect ă cu pre decrementare – registrele X, Y sau Z sunt
decrementate înainte de adresare;
• adresare indirect ă cu post incrementare.
Setul de instruc țiuni este dat în tabelul 5.3.000h
3FFhMemoria program
FLASH
1Kx 16 biți00h
1Fh
60h32 registre de lucru
64 registre I/O
SRAM
128 octe țiEEPROM
128 octe ți00h
7Fh
Figura 5.6 Harta spa țiilor de memorie și I/O

142 MICROCONTROLLER-e
Tabelul 5.3
Setul de instruc țiuni al familiei AVR
Mnemonic ăOperanzi Opera ție Opera ție
ADD Rd,Rr Rd=Rd+Rr Sum ă
ADC Rd,Rr Rd=Rd+Rr+C Sum ă plus carry
SUB Rd,Rr Rd=Rd-Rr Diferen ță
SUBI Rd,K Rd=Rd-K Diferen ță cu o constatnt ă
SBC Rd,Rr Rd=Rd-Rr-C Diferen ță cu carry
SBCI Rd,K Rd=Rd-K-C Dif. cu const. și carry
AND Rd,Rr Rd=Rd*Rr SI logic
ANDI Rd,K Rd=Rd*K SI logic cu const.
OR Rd,Rr Rd=Rd v Rr SAU logic
ORI Rd,K Rd=Rd v K SAU logic cu const.
EOR Rd,Rr Rd=Rd⊕Rr SAU exclusiv
COM Rd Rd=$FF-Rd Complement fa ță de 1
NEG Rd Rd=$00-Rd Complement fa ță de 2
SBR Rd,K Rd=Rd v K Set bit K în registru
CBR Rd,K Rd=Rd*(FFh-K) Clear bit K în registru
INC Rd RD=Rd+ 1 Increment
DEC Rd Rd=Rd- 1 Decrement
TST Rd Rd=Rd * Rd Test de 0 sau –
CLR Rd Rd=Rd⊕Rd Clear registru
SER Rd Rd=$FF Set registru
RJMP k PC=PC+k+ 1 Salt relativ la k
RCALL k PC=PC+k+ 1 Salt la subrutin ă
RET PC=STACK Return din subrutin ă
RETI PC=STACK Ret. din subrutin ă de tratare a
întreruperii
CPSE Rd,Rr if (RD=Rr) PC=PC+2
or 3Compar ă , skip dac ă egal
CP Rd,Rr Rd-Rr Compar ă
CPC Rd,Rr Rd-Rr-C Compar ă cu carry
CPI Rd,K Rd-K Compar ă cu constat ă
SBRC Rr,b if (Rr(b)=0) PC=Pc+2
or 3Skip dac ă bitul b din Rr este 0
SBRS Rr,b if (Rr(b)= 1) PC=Pc+2
or 3Skip dac ă bitul b din Rr este 1
SBIC P,b if (P(b)=0) PC=Pc+2
or 3Skip dac ă bitul B din I/O este 0
SBIS P,b if (P(b)= 1) PC=Pc+2
or 3Skip dac ă bitul B din I/O este 1

5. Microcontroller-e RISC 143
Mnemonic ăOperanzi Opera ție Opera ție
BRBS s,k if(SREG(s)= 1)
PC=PC+k+ 1Salt dac ă SF este 1
BRBC s,k if(SREG(s)=0)
PC=PC+k+ 1Salt dac ă SF este 0
BREQ k if (Z= 1) PC=PC+k+ 1 Salt: egalitate
BRNE k if (Z=0) PC=PC+k+ 1 Salt: diferit
BRCS k if (C= 1) PC=PC+k+ 1 Salt: carry setat
BRCC k if (C=0) PC=PC+k+ 1 Salt: carry este zero
BRSH k if (C=0) PC=PC+k+ 1 Salt: mai mare sau egal
BRLO k if (C= 1) PC=PC+k+ 1 Salt: mai mic
BRMI k if (N= 1) PC=PC+k+ 1 Salt: minus
BRPL k if (N=0) PC=PC+k+ 1 Salt: plus
BRGE k if (N⊕V=0)
PC=PC+k+ 1Salt : mai mare sau egal, cu
semn
BRLT k if (N⊕V=1)
PC=PC+k+ 1Salt : mai mic decât 0, cu semn
BRHS k if (H= 1) PC=PC+k+ 1 Salt dac ă CF este setat
BRHC k if (H=0) PC=PC+k+ 1 Salt dac ă CF este zero
BRTS k if (T= 1) PC=PC+k+ 1 Salt dac ă T este setat
BRTC k if (T=0) PC=PC+k+ 1 Salt dac ă T este zero
BRVS k if (V= 1) PC=PC+k+ 1 Salt dac ă este overflow
BRVC k if (V=0) PC=PC+k+ 1 Salt dac ă nu este overflow
BRIE k if (I= 1) PC=PC+k+ 1Salt dac ă întreruperea e
activat ă
BRID k if (I=0) PC=PC+k+ 1Salt dac ă întreruperea e
dezactivat ă
LD Rd,Z Rd=(Z) Incarc ă registru indirect
ST Z,Rr (Z)=Rr Stocheaz ă registru indirect
MOV Rd,Rr Rd=Rr Mut ă Rr în Rd
LDI Rd,K Rd=K Mut ă constanta K în Rd
IN Rd,P Rd=P IN din portul P
OUT P,Rr P=Rr OUT la portul P
SBI P,b I/O (p,B)= 1 Set bit b din portul P
CBI P,b I/O (p,B)=0 Reset bit b din portul P
LSL Rd Rd(n+ 1)=Rd(n),Rd(
0)=0Shift logic stânga
LSR Rd Rd(n)=Rd(n+ 1),Rd(
7)=0Shift logic dreapta
ROL Rd Rd(0)=C,Rd(n+ 1)=
Rd(n),
C=Rd(7)Rotire spre stânga prin carry

144 MICROCONTROLLER-e
Mnemonic ăOperanzi Opera ție Opera ție
ROR Rd Rd(7)=C,Rd(n)=Rd(
n+1),
C=Rd(0)Rotire spre dreapta prin carry
ASR Rd Rd(n)=Rd(n+ 1),
n=0..6Shift aritmetic spre dreapta
SWAP Rd Rd(3..0)=Rd(7..4),
Rd(7..4)=Rd(3..0)Inverseaz ă jum ătățile
BSET s SREG(s)= 1 Seteaz ă flag s
BCLR s SREG(s)=0 Reseteaz ă flagul s
BST Rr,b T=Rr(b) Stocheaz ă bitul b din Rr în T
BLD Rd,b Rd(b)=T Incarc ă T în bitul b din Rd
SEC C= 1 Seteaz ă Carry flag
CLC C=0 Reset Carry flag
SEN N= 1 Seteaz ă Negative flag
CLN N=0 Reseteaz ă Negative flag
SEZ Z= 1 Seteaz ă Zero flag
CLZ Z=0 Reseteaz ă Zero flag
SEI I= 1 Activeaz ă întrerupere
CLI I=0 Dezactiveaz ă întrerupere
SES S= 1 Seteaz ă flagul de semn
CLS S=0 Reseteaz ă flagul de semn
SEV V= 1 Seteaz ă flagul overflow
complement fa ță de 2
CLV V=0 Reseteaz ă flagul overflow
complement fa ță de 2
SET T= 1 Seteaz ă T în SREG
CLT T=0 Reseteaz ă T în SREG
SEH H= 1 Seteaz ă Half Carry Flag în
SREG
CLH H=0 Reseteaz ă Half Carry Flag în
SREG
NOP No operation
SLEEP Sleep
WDR Watch dog reset
Anumite modele au și o instruc țiune de înmul țire, MUL.
MC AVR au 3 surse de întrerupere:
• de la RESET, (din exterior, la punerea sub tensiune sau de la ceasul de
gard ă);
• de la un pin extern;
• de la timer, la o dep ășire.

5. Microcontroller-e RISC 145
Întreruperile pot fi mascate cu 2 registre de 8 bi ți, GIMSK- General
Interrupt Mask și TIMSK- Timer/Counter Interrupt Mask. La primirea unei
întreruperi se invalideaz ă sistemul de înteruperi. Totu și este posibil ă primirea înc ă
a unei întreruperi în timp ce este servit ă prima, dac ă se revalideaz ă sistemul de
întreruperi. R ăspunsul la o cerere de întrerupere dureaz ă minimum 4 cicluri, timp
în care PC este salvat în stiv ă, SP este incrementat cu 2 și se seteaz ă invalidarea
întreruperilor.
Sursele de RESET pot fi:
• la punerea sub tensiune (Power On Reset), dac ă tensiunea cre ște și
atinge un anumit prag;
• de la un pin extern, dac ă un nivel LOW este prezent mai mult de 50ns;
• de la ceasul de gard ă dac ă este validat și a expirat perioada de timp
pentru care a fost programat s ă aștepte o ini țializare.
După RESET execu ția programului începe de la adresa 000h. Un RESET
porne ște un num ărător care contorizeaz ă un anumit num ăr de impulsuri ale
ceasului intern al circuitului. Contorul stabile ște durata impulsului RESET intern
pentru ca acesta s ă fie suficient de lung pentru ini țializarea tuturor circuitelor
interne, figura 5.7.
Nu mai este astfel necesar ă nici o component ă exterioar ă pentru semnalul
de RESET.
MC admite moduri de lucru cu economie de energie:
• modul adormit (Power Down), în care se intr ă prin execu ția
instruc țiunii SLEEP. Dac ă în modul SLEEP apare o întrerupere
extern ă, una de la ceasul de gard ă sau un RESET, acestea sunt
executate, circuitul trezindu-se. În acest mod de lucru este opritPower On Reset
RESET Vcc
/RESET
Ceas de gard ă
Oscilator RC
internNum ărătorS Q
R /QSAU
LOGIC
Reset
Figura 5.7 Circuit intern pentru generarea semnalului RESET

146 MICROCONTROLLER-e
oscilatorul extern. Trezirea dureaz ă un interval de timp egal cu cel
necesar pentru un RESET.
• modul inactiv, în care se intr ă cu aceea și instruc țiune, dar pozi ționând
un bit din registrul de control. În acest mod unitatea central ă este
oprit ă, dar timerul, ceasul de gard ă și sistemul de întreruperi continu ă
să func ționeze. O întrerupere intern ă, una extern ă sau un RESET
trezesc circuitul.
Circuitul admite ca surse de tact:
• un cristal de cuar ț sau un rezonator ceramic, pentru aplica ții cu
preten ții la stabilitatea frecven ței, (elemente conectate la pinii Xtal 1 și
Xtal2);
• un generator extern la un pin I/O (PB3);
• generatorul RC intern, la 1MHz.
Selec ția sursei ceasului pentru tact intern sau extern se face cu un bit în
memoria FLASH. Circuitul este programat implicit pentru tact extern. Lucrul cu
ceas intern determin ă posibilitatea utiliz ării acestor MC cu componente externe
extrem de pu ține.
Timerul care echipeaz ă circuitele AT902323 este un timer pe 8 bi ți cu un
registru de prescalare pe 10 biți. Timerul poate fi folosit cu tact intern (tactul
sistemului divizat cu 8, 64, 256 sau 1024) sau cu tact extern. Sursa de tact pentru
timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Func ționarea
timerului este controlat ă de bi ți din din dou ă registre (registru de m ăști pentru
întreruperi și registru de control al timerului). La dep ășire, num ărătorul poate cere
o întrerupere.
Ceasul de gard ă are ca și tact un oscilator separat, integrat în MC și
este complet separat de timer. Ca și timerul, ceasul de gard ă are posibilitatea
de prescalare. Controlul ceasului de gard ă se face cu registrul WDTCR
(Watchdog Timer Control Register). Pentru a evita dezactivareaîntâmpl ătoare a ceasului de gard ă, acesta trebuie dezactivat cu o secven ță de
program specific ă.
EEPROM este accesibil în spa țiul I/O, prin urm ătoarele registre:
• registru de adrese EEPROM;
• registru de date EEPROM;
• registru de control EEPROM, care comand ă sensul transferului.
MC ATMEL AVR au linii I/O de uz general (AT902323 are 3 linii,
AT902343 are 5 linii, iar modelul AT90S 1200 dispune de dou ă porturi: B de 8 bi ți
și D de 7 bi ți). Fiecare linie de port poate fi configurat ă independent fa ță de
celelalte, atât ca linie de intrare cât și ca linie de ie șire. De asemenea în modul de
utilizare ca linie de intrare, fiecare linie poate fi configurat ă cu un rezistor de pull-
up intern ( valoarea aprox 40K Ω ). Fiecare linie de ie șire poate sus ține un curent de
20mA (max 40mA valoare limit ă absolut ă) astfel încât se poate folosi direct la

5. Microcontroller-e RISC 147
comandarea de LED-uri. Fiec ărui port îi este alocat un registru de sens, (DDRx,
Port x Data Direction). Pinii I/O admit semnifica ții duble.
Programarea memoriei FLASH și EEPROM se poate face serial, într-un
mod cu tensiune mare ( 12V) și un mod cu tensiune joas ă. Circuitele vin de la
fabricant gata de a fi înscrise (au con ținutul FFh în fiecare loca ție). În modul de
programare cu tensiune înalt ă, tensiunea de 12V valideaz ă programarea, nu are un
rol func țional. Modul de programare în cele 2 variante este ar ătat în figura 5.8.
La programarea cu tensiune mare se poate programa memoria FLASH
(intrarea pe PB 1) și memoria de date EEPROM (intrarea pe PB0). Pentru
programarea memoriei FLASH se trimite întâi adresa apoi data (octetul LOW apoicel HIGH). Confirmarea se ob ține prin trecerea lui PB2 în HIGH. Memoria
EEPROM se programeaz ă trimi țând întâi adresa apoi octetul de date, confirmarea
fiind pe pinul PB2. Orice loca ție poate fi citit ă folosind instruc țiunea de citire și
adresa, ob ținând pe pinul PB2 con ținutul respectiv. Tactul serial este activ pe front
cresc ător. Scrierea, citirea și unele comenzi speciale ( ștergerea întregii memorii,
scrierea bi ților de securitate etc.) se comand ă prin trimiterea înaintea adresei a
codului serial al comenzii respective (se g ăsește în foile de catalog).
La programarea cu tensiune mic ă se poate programa memoria FLASH și
memoria EEPROM tot serial, prin interfa ța SPI. Datele se înscriu pe frontul
cresc ător a lui SCK. În acest mod de lucru, confirmarea scrierii unei loca ții se face
prin trimiterea în ecou a octetului scris. Comenzile se trimit la fel, prin coduri
seriale.
Un programator pentru astfel de MC (mod de programare cu tensiune
mare) se poate realiza simplu, folosind interfa ța CENTRONICS a unui PC, figura
5.9.Programare cu
tensiune mare
Programare cutensiune mic ăAT902323
/RESET Vcc
XTAL 1/PB3 PB2
PB 1
PB0 12V
Ceas de
programare
serial
AT902323
/RESET Vcc
XTAL 1/PB3 PB2
PB 1
PB0 GND
Tact4,5-5,5V
Date seriale de
ieșire
Instruc țiuni seriale
de intrare
Date seriale de
intrare
2,7-6,0V
SCK
MISO
MOSI
Figura 5.8 Programarea serial ă a memoriei EPROM (FLASH)

148 MICROCONTROLLER-e
Memoria este prev ăzută cu posibilitatea de protec ție a programelor
înscrise. Astfel, exist ă 2 bi ți de blocare în FLASH care nu pot fi șterși decât prin
ștergerea întregului program. Ace ști doi bi ți pot comanda:
• dezactivarea unor viitoare program ări ale memoriei FLASH sau
EEPROM;
• dezactivarea unor viitoare program ări ale memoriei FLASH sau
EEPROM și blocarea verific ării.
Memoria mai este prev ăzută cu 2 bi ți care nu pot fi șterși (fuzibili) care pot
comanda:
• dezactivarea modului serial de programare;
• sursa intern ă sau extern ă pentru tact.
Modelul ATiny 10 este echipat cu un comparator analogic, care compar ă
valoarea analogic ă de la pinul PB0 cu cea de la pinul PB 1. Ieșirea comparatorului
poate declan șa o întrerupere. Comparatorul este controlat de un registru de control
și stare.
Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe 10 biți.
Acest model este un MC cu o echipare superioar ă: un timer suplimentar de 16 biți
cu posibilitatea de comparare, captur ă și generare PWM, un comparator analogic,
un canal UART, un convertor A/D pe 10 biți cu 6 canale și un sistem de întreruperi
care admite 14 surse de întrerupere din care 2 externe. Acest circuit are și
posibiliataea de programare paralel ă, deoarece are suficiente linii I/O. Schema bloc
a acestui MC este dat ă în figura 5. 10.AT902323
/RESET Vcc
XTAL 1/PB3 PB2
PB 1
GND PB04,5-5,5VINTERFA ȚA
CENTRONICS
STB
D0
D 1
ACK12V
Figura 5.9 Programarea unui circuit AVR folosind interfa ța CENTRONICS

5. Microcontroller-e RISC 149
Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bi ți
de date, cu generarea de rat ă de transfer. Canalul serial poate cere întrerupere la
transmisie complet ă, registru de transmisie gol sau recep ție complet ă. Recep ția și
transmisia se fac ca și la celelalte MC, cu un registru de deplasare pentru
serializare/deserializare și un registru de date. Se poate realiza și o comunica ție
serial ă multiprocesor (Multi- Processor Communication Mode), prin transmisia în
mesaj întâi a adresei unui destinatar și apoi a mesajului propriu-zis. Se poate astfel
realiza o comunica ție în care un procesor este MASTER iar celelalte SLAVE.
Canalul serial este controlat de un registru de comand ă și stare.
Comparatorul analogic, pe lâng ă întreruperea pe care o poate genera, poate
să declan șeze o captur ă la timerul de 16 biți la acest tip de MC.
Convertorul A/D este un convertor cu aproxima ții succesive cu e șantionare
memorare și cu un bloc de multiplexare analogic ă pe 6 canale la intrare.
Convertorul poate lucra cu conversie singular ă sau conversie continu ă. Convertorul
are pini de alimentare separa ți din exterior și un pin pentru conectarea tensiunii de
referin ță. Ca și tact de conversie, convertorul accept ă tactul sistemului divizat cu
un registru de prescalare. Tactul se poate încadra în valorile optime 50-200kHz. Magistrala de dateUnitate central ă
PCALUMemoria de date
RAM 128 octe ți
EEPROM 128 de octe țiMemoria program
FLASH 2K octe ți
SPICeas
de
gard ă
Timer
Port B32 registre de
uz general
Timer 16b UARTController de întreruperiOscilator intern
ADC
Port CComparator
Port DRESET
Figura 5.10 MC AT90S4433 – Schema bloc

150 MICROCONTROLLER-e
La terminarea unei conversii convertorul poate cere o întrerupere. Schema bloc a
convertorului este dat ă în figura 5. 11.
Prin registrul ADMUX se comand ă cu 3 bi ți selec ția unui canal din cele 6.
Registrul de control și stare ADCSR poate declan șa o conversie prin pozi ționarea
unui bit. Func ționarea convertorului poate fi validat ă/invalidat ă. Prin registrul de
control se poate programa și rata de prescalare. Pentru a mic șora perturba țiile
introduse de unitatea central ă în timpul achizi ției de date se poate comanda UC în
stare inactiv ă. Dup ă efectuarea conversiei întreruperea de la convertor va trezi UC
(ADC Noise Canceler Function).
Înscrierea memoriei FLASH și EEPROM se poate face și în mod paralel,
ceea ce înseamn ă o vitez ă mai mare de scriere și un plus de simplitate la
programare. Semnalele folosite în acest mod de programare sunt date în figura
5.12.
Pentru înscrierea sau citirea datelor se folosesc 8 linii cu semnifica ții duble
din porturile PC și PB. /OE stabile ște dac ă este vorba de scriere sau citire. Scrierea
se face cu strobul /WR. BS selecteaz ă octetul mai semnificativ sau mai pu țin
semnificativ. Semnalele XA0 și XA 1 stabilesc dac ă se încarc ă memoria FLASH,
sau o adres ă a EEPROM, un octet de date sau o comand ă. Sunt posibile 9 comenzi:Multiplexor
analogicConvertor Analog
Digital cu aprox.
succesive
ADMUXADCH, ADCL ( 10b)
BUS INTERNCerere de
întrerupere
Selec ție
canalSTART DateIntrări
analogiceEșantionare
Memorare
ADCSR
Registru de
prescalare
CK
Figura 5.11 Convertorul analog-numericTact
conversie

5. Microcontroller-e RISC 151
ștergere memorie, scriere bi ți de securitate, scriere bi ți fuzibili, scriere FLASH,
scriere EEPROM, citire bi ți de identificare, citire bi ți fuzibili și de securitate, citire
FLASH, citire EEPROM. Modul de scriere paralel poate fi u șor realizat prin
intermediul interfe ței CENTRONICS; citirea pentru verificare este mai complicat ă.
Modelele AT90S44 14 și AT90S85 15 dispun de posibilitatea conect ării în
exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la
portul A magistrala de adrese (octet mai pu țin semnificativ) și magistrala de date
multiplexate, iar la portul C octetul mai semnificativ al magistralei de adrese. De
asemenea sunt disponibile și semnalele ALE (Address Latch Enable), /RD și /WR.
5.2.2 Familia ARM
Un nucleu cu arhitectur ă RISC de mare performan ță este ARM7DMI. Este
conceput cu o arhitectur ă von Neumann, cu magistrala de date pe 32 de bi ți, având
2 seturi de instruc țiuni (ARM pe 32 de bi ți și THUMB pe 16 biți). Spa țiul adresabil
este de 4G.
O schem ă bloc sumar ă a acestui nucleu este dat ă în figura 5. 13.
Structura UC este pipe line pe 3 nivele; extragere cod, decodificare și
execu ție. UC poate lucra cu date pe 8, 16 sau 32 de bi ți și poate executa înmul țiri
într-un singur ciclu. Nucleul are integrat și circuitul de testare JTAG și un emulator
în circuit.
Setul de instruc țiuni THUMB pe 16 biți este un subset al setului pe
32 de bi ți, cele mai uzual folosite instruc țiuni. În acest fel se salveaz ă spațiu
de memorare și se câ știgă vitez ă de prelucrare.AT90S4433
PD1 Vcc
PD2 PC,PB
PD3
PD4PD5
PD6
RESET
XTAL+5V
8 linii de date,
bidirec ționaleRDY/BSY
/OE
/WR
BSXA0
XA1
+12V
tact
Figura 5.12 Semnale folosite la înscrierea paralel ă a memoriei EEPROM (FLASH)

152 MICROCONTROLLER-e
Pentru a asigura un grad mare de paralelism în UC, exist ă mai multe
magistrale de leg ătură. Instruc țiunile sunt analizate și distribuite decodoarelor
corespunz ătoare (THUMB sau ARM). UC este echipat ă cu un set de 32 de registre
și registre suplimentare pentru înmul țire. Pentru a se putea conecta o varietate cât
mai mare de interfe țe, magistralele sunt accesibile prin distribuitor în mai multe
forme: unidirec țional, bidirec țional, multiplexat etc.Unitate central ă ARM
37 registre de 32 bi ți
ALU pe 32 de bi țiBus AMagistrala
de adrese
Registru de date (32)Decodor
THUMBDecodor
ARMBus BBus CRegistru pt. adrese
Magistrala de
date (32)Emulator în
circuit
(Ice Breaker)
Distribuitor
de
magistrale
Controller
JTAG
Figura 5.13 MC ARM – schema bloc

6
CRITERII DE PROIECTARE
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC
Sunt multe aspecte de care trebuie ținut seama la alegerea unui MC pentru
o anumit ă aplica ție. Alegerea unui MC potrivit poate duce la succesul proiectului,
așa cum o alegere nepotrivit ă poate duce la e șecul proiectului. Fiecare cititor
trebuie s ă adapteze aceste criterii nevoilor sale și scalei proprii de valori.
Obiectivul urm ărit în alegerea unui MC este ob ținerea calit ății dorite cu un
cost cât mai sc ăzut. Calit ățile dorite înseamn ă performan ță, fiabilitate, calit ăți EMC
(de compatibilitate electromagnetic ă cu mediul), iar costul total include costurile
cercet ării, proiect ării, construc ției, test ării, repar ării produsului.
În primul rând se pune problema stabilirii func ției pe care MC trebuie s-o
îndeplineasc ă în sistem. Alegerea din catalog a unui MC trebuie f ăcută în ideea a
cât mai pu țin hardware suplimentar (din motive economice). Procesul de c ăutare
este dificil din cauza num ărului foarte mare de tipuri de MC disponibile pe pia ță.
Munca de c ăutare este ajutat ă de bazele de date din Internet, a șa cum este baza de
date de la www.questlink.com . Dup ă stabilirea MC optim se verific ă prețurile,
dacă este disponibil, suportul acordat de fabricant, existen ța uneltelor de
dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea
de a fi g ăsit pe pia ță (optenabilitatea), mai ales în zone în care circula ția mărfurilor
este destul de greoaie.
Criteriile pentru alegerea unui MC sunt, în ordinea importan ței:
1.Posibilitatea folosirii în aplica ția dat ă
! este suficient un MC sau sunt necesare circuite suplimentare;
! liniile I/O sunt suficiente (un num ăr prea mic înseamn ă că aplica ția nu se
poate face cu acest MC, iar un num ăr prea mare înseamn ă un cost excesiv);
! exist ă toate interfe țele solicitate de aplica ție: I/O serial, convertoare A/D,
D/A și nu exist ă interfe țe în plus;
! exist ă capacitatea de memorare suficient ă: RAM, ROM;
! MC are viteza suficient ă pentru aceast ă aplica ție. Se verific ă timpul
necesar rul ării programului care trebuie s ă fie mai mic decât intervalul de
timp în care trebuie s ă reac ționeze MC;

154 MICROCONTROLLERE
! alimentarea MC poate fi f ăcută din aplica ție (este posibil ca aplica ția să fie
portabil ă, atunci este nevoie de un MC care s ă func ționeze la 3V;
! prețul acestui MC este bun (acceptabil) pentru aplica ția respectiv ă.
2. Optenabilitatea MC
! trebuie s ă fie disponibil în cantit ăți suficiente;
! trebuie s ă fie în produc ția actual ă, dar și în viitor pentru posibilitatea
aprovizion ării în viitor;
! disponibilitatea unor accesorii (convertoare A/D, D/A, alimentatoare etc).
3.Disponibilitatea suportului de dezvoltare
! asambloare;
! compilatoare;
! debuggere;
! module de evaluare;
! emulatoare în circuit;
! analizoare logice;
4. Suport din partea constructorului
! documenta ție tehnic ă;
! buletine de aplica ții;
! service prin telefon (BBS);
! rapoarte despre probleme de func ționare;
! software de utilizare;
! dacă MC este folosit și de al ți utilizatori, atunci sunt formate grupuri de
lucru care pot oferi ajutor.
5.Seriozitatea constructorului
! dacă este demonstrat ă competen ța lui ;
! stabilitate și fiabilitatea MC realizate;
! viteza de livrare;
! număr de ani ca și constructor și rezultate financiare.
Un argument pentru alegerea unui tip de MC este existen ța unui modul de
evaluare. Pentru a promova propriile MC, mul ți furnizori au creat Kit-uri de
evaluare care con țin pl ăci de evaluare și un soft minimal cu care se poate înv ăța
utilizarea MC și se pot pune la punct aplica ții. Un kit con ține de regul ă un program
monitor pentru calculator PC, un program de transfer al datelor spre placa de
evaluare (prin interfa ța RS232 sau CENTRONICS), un asamblor și un compilator
C. Toate kiturile sunt înso țite de documenta ție. Câteva din modulele de evaluare
sunt:
Motorola EVBU, EVB, EVM, EVS sunt echipate cu MC 68HC 11.
Dallas Semiconductor DS5000TK sunt echipate cu MC Dallas din seria
DS5000.
Philips și CEIBO DS750 sunt echipate cu 87C75x, echivalent cu 805 1.

6. Criterii de proiectare 155
American Educational Systems AES-5 1(8051), AES- 11(68HC 11), AES-
88(8088) con țin o tastatur ă, un afi șaj cu LCD și documenta ție.
Firma Texas Instruments pune la dispozi ția celor interesa ți un set de
accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS și unelte de
dezvoltare (CDT). Aplica ția poate fi scris ă în limbajul C, de exemplu pe un PC
(utilizând orice editor) și codul pentru TMS va fi generat de link editor. Codul
poate ajunge la MC prin intermediul interfe ței seriale RS232. XDS analizeaz ă
softul creat, (chiar în domeniul timp) și permite punerea la punct (chiar rularea lui
pas cu pas).
Exist ă firme specializate în construirea unor module de evaluare cu diferite
MC, a șa cum este de exemplu PHYTEC ( www.phytec.de ).
Fiecare furnizor de MC pune la dispozi ția clien ților un Kit de start (Starter
Kit), care este un instrument foarte valoros pentru a putea începe lucrul cu un
anumit tip de MC. Kit-ul de start con ține o plac ă cu soclu și hard-ul aferent pentru
programarea ini țială a MC, uneori programarea EPROM-ului, interfa ța și cablul de
legătură la PC, documenta ție și programe (asamblor, link editor, debugger) dar nu
conține de regul ă un MC. Pre țul unui astfel de Kit porne ște de la 100USD
(www.schuricht.de , www.farnell.com ).
Un alt argument pentru alegerea unui MC este comoditatea folosirii lui.
Unele MC, a șa cum este Motorola 68HC 11A8P1 are înscris în ROM un program
monitor (numit Buffalo). Pentru punerea în func țiune este nevoie doar de o
legătură serial ă RS232 cu un PC (este nevoie de o conversie de nivel) și se poate
lucra de pe PC cu monitorul MC, rulând programele în RAM-ul MC și stocându-le
în EEPROM. Pe Internet exist ă subprograme scrise în Buffalo. Un alt MC,
8052AH-BASIC con ține un BASIC. MC Dallas din seria DS5000 are nevoie doar
de un cristal pentru oscilator și este gata de lucru. MC con ține memorie RAM
static alimentat ă de la o baterie și programul și datele sunt astfel nevolatile.
6.2 ALGORITMUL PROIECT ĂRII SISTEMELOR
CU MC
Ne permitem s ă prezent ăm o organigram ă, (figura 6. 1) ce încearc ă să
sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s ă le
urmăreasc ă în dezvoltarea soft-ului dedicat unei aplica ții. Trebuie s ă men ționăm că
etapele 3,4 și 5 pot fi iterate. Ele duc la perfec ționarea func ționării sistemului.

156 MICROCONTROLLERE
ANALIZA CERIN ȚELOR PROCESULUI CONTROLAT :
• NECESIT ĂȚILE DE CONTROL CORESPUNZ ĂTOARE
SEMNALELOR ANALOGICE ȘI DIGITALE
• ANALIZA CERINTELOR LEGATE DE COMANDA ȘI
CONTROLUL ÎNTÂRZIERILOR ȘI FRECVEN ȚEI
ANALIZA STRUCTURII HARDWARE :
• ATRIBUIREA RESURSELOR HARDWARE PENTRU PROCESAREA
SEMNALELOR DIGITALE SI ANALOGICE DIN PROCES
• ANALIZA CERIN ȚELOR LEGATE DE SINCRONIZAREA
FUNC ȚION ĂRII UC ÎN CADRUL PROCESULUI
• ATRIBUIREA RESURSELOR SISTEMULUI DE ÎNTRERUPERI
SEMNALELOR MAI SUS ANALIZATE
• ANALIZA POSIBILELOR INTERFEREN ȚE DINTRE SISTEMUL
CONCEPUT ȘI MEDIUL AMBIANTSTART
PROIECTAREA PROGRAMELOR DE APLICA ȚIE :
• DEFINIREA VARIABILELOR DEDICATE MEMOR ĂRII ST ĂRII
SISTEMULUI ȘI CELOR CE SUNT NECESARE DESERVIRII
FLUXURILOR INFORMA ȚIONALE
• DEFINIREA FUNC ȚIUNILOR CORESPUNZ ĂTOARE FIEC ĂREI
RUTINE DE SERVIRE A ÎNTRERUPERILOR
• DEFINIREA ROLULUI FIEC ĂREI RUTINE PRIN PRECIZAREA:
PARAMETRILOR DE INTRARE, A FUNC ȚIUNII PROPRIU-ZISE,
A TIMPULUI DE EXECU ȚIE ȘI A VARIABILELOR ȘI
SEMNALELOR REZULTATE ÎN URMA EXECU ȚIEI RUTINEI
• DEFINIREA ROLULUI PROGRAMULUI PRINCIPAL
• PROIECTAREARUTINELOR DE SERVIRE A ÎNTRERUPERILOR, A
RUTINELOR ȘI A PROGRAMULUI PRINCIPAL
PROCESAREA FI ȘIERELOR REZULTATE ÎN URMA PROIECT ĂRII:
• ASAMBLAREA
• LINK-EDITAREA
• CONVERSIA OBJ → INTEL-HEX
• DEPANAREA PROGRAMELOR
TESTAREA SISTEMULUI
SIMULAREA FUNC ȚION ĂRII SISTEMULUI
DEPANAREA PE SISTEMUL DE DEZVOLTARE A APLICA ȚIEI
Figura 6.1 Organigrama (form ă simplificat ă) proiect ării unui sistem
dedicat

6. Criterii de proiectare 157
6.3 PROIECTAREA SISTEMELOR CU MC ÎN
VEDEREA SIGURAN ȚEI ÎN EXPLOATARE
Tendin ța produc ătorilor de MC de a sc ădea pre țurile duce la r ăspândirea
din ce în ce mai mare a MC și la crearea a noi și noi aplica ții. Mic șorarea
dimensiunilor duce la cre șterea frecven ței de lucru. Cu cât frecven ța cre ște, cu atât
crește posibilitatea interferen țelor electromagnetice (EMI) și se pune problema
proiect ării în vederea compatibilit ății electromagnetice (EMC).
Apar dou ă categorii de probleme: aplica ția poate genera perturba ții
(conduse sau radiate) sau poate fi susceptibil ă la perturba ții (conduse sau radiate).
Descoperirea unor probleme de EMI în faza final ă de produc ției a aplica ției poate
fi costisitoare deoarece s-ar putea s ă fie necesar ă reproiectarea aplica ției; de aceea
este necesar ca proiectarea ini țială să se fac ă în vederea EMC.
Perturba țiile sunt generate de armonicile semnalelor digitale din circuit.
Ele pot fi radiate de buclele de cablaj care se comport ă ca și antene sau sunt
conduse spre sursa de alimentare. Orice cale inductiv ă sau capacitiv ă pe traseul
acestor armonici poate provoca vârfuri de tensiune sau c ăderi de tensiune. Pentru
un sistem cu MC perturba țiile sunt generate de regul ă de cablaj, deoarece circuitele
integrate au dimensiuni prea mici pentru a putea emite. Semnalul cu frecven ța cea
mai mare este tactul sistemului generat cu un circuit oscilant cu cuar ț. Datorit ă
faptului c ă forma semnalului este apropiat ă de forma sinusoidal ă, con ținutul de
armonici este mic. Dac ă tactul este adus din exterior, se impune aten ție m ărită
pentru a reduce buclele de circuit emisive.
Pentru un sistem care are memorii externe cuplate la MC, liniile de transfer
pot fi emisive, deoarece frecven țele de tranzi ție sunt mari.
Susceptibilitatea sistemelor cu MC este creat ă de natura sincron ă a MC.
Un tact cu nivel electric insuficient poate produce o eroare. Erorile sistemelor cu
MC pot fi grupate în:
1. aplica ția are o eroare dar se corecteaz ă;
2. aplica ția are o eroare dar o întrerupere sau un RESET corecteaz ă
funcționarea;
3. aplica ția are o eroare și oprind și repornind sistemul, eroarea dispare;
4. aplica ția are o eroare permanent ă datorat ă unei componente defecte.
Problemele din categoria 1 și 2 pot s ă nici nu fie observate de beneficiar.
Performan țele EMC pot fi îmbun ătățite acordând aten ție deosebit ă
următoarelor aspecte de proiectare:
• desenul cablajului imprimat;
• ceasul de gard ă
• programarea defensiv ă

158 MICROCONTROLLERE
6.3.1 Cablajul imprimat
Orice perturba ții pe liniile de alimentare pot produce o func ționare
defectuoas ă a sistemului. De aceea se recomand ă utilizarea unui cablaj multistrat la
care masa și alimentarea sunt plane interne. La aplica țiile cu pre ț mic, o cale
important ă de a reduce pre țul este folosirea cablajului dublu placat sau chiar simplu
placat. La aceste tipuri de cablaj traseele de mas ă și +5V trebuie s ă fie cât mai late
pentru a avea o impedan ță cât mai mic ă. Decuplarea cu condensatoare a MC
trebuie s ă fie realizat ă cât mai aproape de circuit.
În unele aplica ții care trebuie s ă fie foarte ieftine se folose ște alimentarea
MC de la re țeaua de c.a. f ără transformator, cu un redresor monoalternan ță (figura
6.2).
În acest caz se creeaz ă o linie de mic ă impedan ță spre mas ă prin re țeaua de
alimentare de la V DD. La acest tip de alimentare se recomad ă decuplarea liniilor de
frecven ță înalt ă spre linia de +5V.
Un circuit critic este cel de generare a tactulului. Orice impuls parazit care
apare modific ă factorul de umplere de 50% al semnalului de tact și instruc țiunea nu
se execut ă corect, circuitul ie șind din program. O astfel de situa ție singular ă poate
fi rezolvat ă de ceasul de gard ă care comand ă un RESET, dup ă care MC ruleaz ă din
nou corect. Se recomand ă ca toate componentele aferente gener ării tactului s ă fie
situate cât mai aproape de circuit, iar dac ă este posibil toate traseele s ă fie
înconjurate de un traseu lat de gard ă. Se recomand ă o decuplare a cristalului la
linia de cea mai mic ă impedan ță (de regul ă masa) cu condensatori SMD. Se
recomand ă să se p ăstreze o distan ță mare între liniile de frecven ță mare și circuitul
de tact.
Este de asemenea important ă protec ția pinilor de intrare, cum ar fi RESET
sau IRQ. Un pin în aer poate comuta dac ă în vecin ătatea lui sunt linii de înalt ăMC
VDD
VSSRețea
220VDZ5V0,1µ
Masă flotant ă
Figura 6.2 Schema simpl ă de alimentare de la re țea

6. Criterii de proiectare 159
frecven ță. Se recomand ă decuplarea acestor pini cu condensatori 1-10nF cât mai
aproape de circuit.
6.3.2 Ceasul de gard ă
Folosirea ceasului de gard ă este foarte util ă în cre șterea siguran ței în
funcționare. Majoritatea MC au un ceas de gard ă integrat, iar dac ă nu, un ceas de
gardă extern poate fi u șor realizat cu un monostabil redeclan șabil.
Redeclan șarea ceasului de gard ă trebuie f ăcută în programul principal, nu
în subrutine. Pentru a putea folosi corect ceasul de gard ă trebuie analizat ă cu
atenție durata normal ă a programului pe ramura cea mai lung ă.
6.3.3 Programarea defensiv ă
Prin metodele de programare defensiv ă se poate îmbun ătăți mult siguran ța
în func ționare f ără nici un hardware suplimentar. Câteva din cele mai eficiente
metode sunt:
• reînc ărcarea periodic ă a registrelor care comand ă pinii I/O și a celor
mai importante registre. Pinii I/O sunt leg ătura MC cu exteriorul, de
aceea ei sunt supu și perturba țiilor. Readucerea lor la nivele corecte
micșoreaz ă probabilitatea ca o perturba ție să se propage în circuit.
• citirea repetat ă a semnalelor de intrare mic șoreaz ă riscul unei citiri
greșite. De exemplu citirea de 3 ori la rând a unui pin care este legat la
o tast ă. Dac ă s-a citit aceea și valoare de fiecare dat ă se elimin ă
posibilitatea unei perturba ții.
• dacă exist ă loca ții în RAM nefolosite, dup ă fiecare etap ă de rulare a
programului se scrie un bit în RAM. Înainte de rularea unei rutine
critice se verific ă valoarea stocat ă în RAM și rutina se execut ă doar în
cazul în care valoarea din RAM este corect ă.
• dacă într-o aplica ție exist ă memorie nefolosit ă, aceasta se umple cu
instruc țiuni de salt într-un loc cunoscut pentru ca un salt neprev ăzut în
memorie datorat unei perturba ții să fie anulat de saltul în locul
cunoscut.
• Folosirea watchdog-ului în faza de testare și chiar în aceea de
fiabilizare a func ționării sistemului. Implic ă, postarea (memorarea într-
o zon ă specific ă) stărilor succesive prin care trece sistemul, scrierea
unei rutine de analiz ă a st ărilor și de directare a programelor c ătre
starea ultim ă postat ă, rutin ă apelat ă la fiecare "warm reset", sau chiar

160 MICROCONTROLLERE
la fiecare reset al sistemului. Pot fi implementate soft și alte func țiuni
care s ă permit ă men ținerea coeren ței sistemului!

7
APLICA ȚII
7.1 IMPLEMENTAREA UNEI APLICA ȚII
SIMPLE DE COMAND Ă ȘI CONTROL
DIGITAL
Să se comande utilizând un sistem dotat cu microcontroller un piston
hidraulic (actuator) într-o mi șcare de avans și alta de retragere, comenzi transmise
prin intermediul unei linii de conexiune seriale. Frecven ța de transfer pe interfa ța
serial ă va fi de 19200 bauds (bi ți pe secund ă), iar frecven ța de ceas a sistemului va
fi de 11059000Hz. Cuvintele de comand ă și control sunt formate dintr-un singur
caracter în format ASCII și comenzile pot con ține și parametrii.
L1 L2
Ev1 Ev2
p
R
Figura 7. 1 Structura actuatorului electro-hidraulic

162 MICROCONTROLLERE
Cuvintele cheie admise de c ătre sistem pentru controlul s ău sunt:
• A – comand ă de avans a pistonului, respectiv comand ă mișcarea de la
limitatorul 1 către limitatorul 2
• R – comada de retragere a pistonului, respectiv comand ă mișcarea de la
limitatorul 2 c ătre limitatorul 1
• S – comand ă de citire a st ării actuatorului care va întoarce urm ătoarele
ecouri:
1. D – preg ătit să recep ționeze comand ă (reaDy)
2. B – ocupat cu execu ția unei comenzi (Busy)
• P – comand ă de aflare a pozi ției actuatorului (Position), care va
întoarce urm ătoarele ecouri:
1. E – avansat, actuatorul atinge limitatorul 2
2. I – retras, actuatorul atinge limitatorul 1
3. M – actuator aflat în mi șcare
Structura electro-hidraulic ă a sistemului de comand ă și control include
elementele din figura 1. și anume:
• pompa de presiune pentru circuitul hidraulic, care porne ște simultan cu
comand ă dorit ă; comanda pompei este realizat ă de c ătre sistem în
logic ă pozitiv ă (1 logic = pompa ac ționat ă, 0 logic = pompa oprit ă).
• două electro-valve cu dou ă căi care asigur ă accesul presiunii c ătre
camerele pistonului hidraulic comandate tot în logic ă pozitiv ă, ceea ce
înseamn ă că aplicând un 1 logic pe linia de comand ă, înalta presiune a
pompei are acces c ătre camera corespunz ătoare a pistonului, iar
aplicând un 0 logic pe linia de comand ă presiunea din camera
pistonului este eliberat ă către rezervorul de fluid.
• două limitatoare de cap ăt de curs ă care func ționeaz ă în logic ă negativ ă
și care permit detectarea st ării actuatorului.
• interfa ța serial ă RS232C cu care sistemul de comand ă este conectat la
sistemul ierarhic superior, spre exemplu la un PC.

7. Aplica ții 163
7.1.1 Varianta de implementare cu microcontroller CISC
Proiectarea elementelor electronice ale sistemului o vom face utilizând
circuitul AT89C205 1, care este dotat cu 2 Ko memorie EEPROM (Flash) care
permite stocarea programelor de comand ă și control. Sunt necesare atât
amplificatoarele în comuta ție pentru comanda electrovalvelor și a pompei de
presiune cât și circuitele de intrare ce se prezint ă sub forma unor trigger-e Schmidt,
pentru formarea semnalelor de la limitatoarele 1 și 2. Structura gândit ă este
prezentat ă în figura 7.2.
Implementarea software a sistemului implic ă scrierea programelor care s ă
permit ă execu ția func țiunilor sistemului propus. Ca sistem determinist, acesta
trebuie s ă aibe o stare ini țială bine definit ă, de aceea vom considera c ă aceasta
corespunde pozi ției cu pistonul retras aflat pe limitatorul L 1, dar pe lâng ă aceste
elemente ce țin de procesul în care sistemul este utilizat, va trebui s ă analiz ăm și să
setăm parametrii ini țiali ai microcontroller-ului. Pentru aceasta, vom urm ări starea
inițială a UC, prezentat ă în catalogul produsului (vezi figura 7.3), iar apoi va trebui
ca s ă scriem rutina de ini țializare de sistem pentru a preciza complet starea
microcontroller-ului.
Organizarea programelor care determin ă func țiunile sistemului ilustreaz ă
principiile program ării structurate, astfel: programul de ini țializare este apelat din
programul principal, func țiunile sistemului, cea de comunica ție serial ă, cele de
comand ă avans și retragere piston, cele de specificare a st ării sistemului și cele de
oprire pe limitatoare a acestuia sunt specificate prin rutine de servire a
întreruperilor (ISR – Interrupt Service Routines ).
AT89C205 1
TxRx Ev
Ev
p
L1
L2P3.
P3.P3.
P3.
P3.
P3.
P3.
Figura 7. 2 Schema conect ării microcontrolerului la aplica ție

164 MICROCONTROLLERE
1. Rutina de ini țializare, INIT, va realiza urmatoarele:
• Umple toate loca țiile memoriei interne a microcontroller-ului cu 0.
(Fill Memory with zero )
• Aduce în pozitia de referin ță (pistonul atinge limitatorul L 1) sistemul.
• Programeaz ă urm ătoarele registre de func ții speciale (SFR Special
Functions Registers )
! PSW ( Program Status Word Register )
! PCON ( Power On Control Regsiter )
! TMOD ( Timers Mode Register )
! TCON ( Timers Control Register )
! SCON ( Serial Control Register )
! IE (Interuppt Enable Register )
• Intră în bucla de a șteptare a comenzilor de la sistemul ierarhic
superior, comenzi ce vor fi transmise via interfa ța serial ă.
2. Rutinele de serive a întreruperilor vor fi concepute pentru a
implementa func țiunile ce necesit ă sincronizarea func ționării sistemului
cu elementele externe acestuia ce sunt fie comandate fie reprezint ă senzori
sau traductoare ale sale. Astfel, va trebui s ă satisfacem urm ătoarele:
! Func ția de recep ție a mesajelor de comand ă sau a cererilor de date de
stare din partea sistemului ierarhic superior. Implementarea acesteia se
refer ă la interfa ța serial ă a sistemului și necesit ă analiza mesajului
receptionat, comanda corespunz ătoare a sistemului sau emiterea
ecoului la comenzile Cerere de Stare ( Status Request ) din partea
sistemului ierarhic superior.Figura 7. 3 Valorile de RESET ale microcontroller-ului AT89C205 1Numele SFR Valori de RESET
PC 00H
ACC 00H
B 00H
PSW 00H
SP 07H
DPTR 00H
P0-P3 FFH
IP xx000000B
IE 0xx00000B
TMOD 00H
SCON 00H
SBUF Nedeterminat
PCON 0xxx0000B

7. Aplica ții 165
! Func ția de oprire la atingerea limitatoarelor a comenzii actuatorului
electrico-hidraulic.
3. Programul principal, este gândit s ă aștepte o comad ă din partea
sistemului ierarhic superior sau s ă aștepte îndeplinirea acesteia.
OBSERVATIE: Aceast ă organizare a programelor poate fi utilizat ă mai ales
atunci când sistemul controlat nu este unul extrem de rapid, respectiv noi, prin
intermediul microcontroller-ului putem îndeplini restric țiile impuse unui sistem de
comand ă în timp real, adic ă putem oferi semnalele de comand ă și cele de control
“ca oportune”, respectiv ele verific ă teorema e șantion ării a lui Shannon.
În ceea ce însemn ă implementarea, putem alege între dou ă variante:
a) Cea mai sus men ționat ă care permite ca scrierea func țiunilor de comand ă să fie
facut ă direct în cadrul ISR
b) Cea prin care rutinele de servire a întreruperilor ISR consemneaz ă modific ările
de stare în cadrul sistemului în zona dedicat ă variabilelor de stare, iar
programul principal analizeaz ă ciclic starea sistemului, și func ție de aceasta
execut ă comenzile corespunz ătoare ei.
Prima variant ă, reflect ă principiile program ării structurate, fiecare ISR
asigur ă implementarea unei func țiuni. Aceast ă variant ă permite cea mai rapid ă
reacție din partea sistemului, permite ierarhizarea reac țiilor în raport cu cerin țele
impuse de e șalonarea în timp a acestora, dar necesit ă o ra țional ă atribuire a liniilor
de întrerupere corespunz ător evenimentelor principale din sistem și este aplicabil ă
în special în cadrul unor sisteme de mic ă amploare.
A doua variant ă asigur ă analiza st ării sistemului în cadrul programului
principal, analiza fiind implementat ă prin intermediul unor instruc țiuni de decizie,
majoritatea calate pe bit, transferul informa țiilor se face prin utilizarea unei zone
comune de memorie ce formeaz ă legătura dintre lumea extern ă (elementele aflate
în afara sistemului sau cele comandate: actuator, pomp ă, electrovalve, limitatoare,
etc) și func țiunile pe care sistemul este obligat s ă le implementeze. Aceasta
variant ă permite controlul unor sisteme ample – cu multe surse de întrerupere și
multe elemente de comand ă și control- dar viteza de reac ție este variabil ă neputând
fi anticipat ă aprioric, c ăci evenimentele ce au loc în afara sistemului vor fi
consemnate sincron (adic ă foarte curând dup ă producerea lor), dar analiza și reac ția
sistemului la acestea va apare mai târziu, func ție de instruc țiunea curent ă pe care
sistemul o execut ă la momentul producerii evenimentului respectiv.
Să analiz ăm pe rând care vor fi informa țiile pe care va trebui s ă le scriem
în cadrul SFR pentru a ini țializa sistemul.
PSW
CY AC F0 RS 1 RS0 OV F 1 P
MSB LSB

166 MICROCONTROLLERE
CY carry flag este setat atunci când în urma unei instruc țiuni aritmetico-logice
apare o opera ție de transport sau împrumut
AC Auxiliary Flag utilizat tot în cadrul unor instruc țiuni aritmetico-logice
F0 User definible Flag poate fi scris și citit de c ătre utilizator ca indicator specific
RS1 și RS0 codific ă natura (binar) bancul țintă de registre generale astfel:
00 specific ă bancul 0 de registre generale
01 specifica bancul 1 de registre generale
10 specifica bancul 2 de registre generale
11 specifica bancul 3 de registre generale
OV este setat auotmat la apari ția unei dep ășiri în cadrul unei opera ții de transfer a
datelor
F1 User definible Flag poate fi scris și citit de c ătre utilizator ca indicator specific
P Parity Flag specific ă paritatea byte-ului de informa ție prelucrat
PCON
S M O D – G F 1 GF0 PD IDL
SMOD (Serial Mode ) setat (dac ă este fixat pe 1 logic) multiplic ă cu 2 frecven ța de
emisie/recep ție serial ă a datelor
GF1 (General Flag 1 ), este un bit ce poate fi scris sau citit de c ătre utilizator prin
program
GF0 (General Flag 0 ), este un bit ce poate fi scris sau citit de c ătre utilizator prin
program
PD (Power Down Flag ) Setarea acestui bit trece microcontroller-ul în starea de
putere redus ă blocând func ționarea oscilatorului intern și aducând în starea high
FFH ie șirile porturilor sale. Informa țiile stocate în memoria intern ă a procesorului,
abstrac ție făcând cele din registrele speciale (SFR) sunt men ținute, chiar când
tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul în curs
va fi oprit imediat dup ă efectuarea instruc țiunii curente în care a ap ărut setarea
acestui flag. Acest flag are preceden ță în raport cu flag-ul IDL (Idle) atunci când
cele dou ă flag-uri sunt setate simultan.
Ieșirea din starea PD se face prin aplicarea unui semnal de Reset.
IDL (IDLE Flag ) Setarea acestui flag duce la trecerea într-o stare de consum redus
a microcontroller-ului, stare în care frecven ța de ceas a sistemului este aplicat ă
doar elementelor periferice, controller-ul de întreruperi, interfa ța serial ă, timer-ele
etc. Porturile r ămân în starea anterioar ă setării bitului IDL, iar semnalele ALE și
PSEN# trec în 1 logic. Revenirea în stare de lucru se poate realiza pe dou ă căi:
Prin generarea extern ă a unei întreruperi, aceasta va reseta flag-ul IDL iar la
terminarea ei, prin program, dup ă instruc țiunea RETI putem seta din nou acest
flag, sau printr-un Reset hardware, caz în care durata minim ă a impulsului de Reset
trebuie s ă depășească 24 de ciclii de ceas.
Aceste dou ă stări Power Down și Idle Mode sunt st ări în care consumul
microcontroller-ului este redus și pot fi exploatate atunci când aplica ția pe care
vrem s ă o realizam corespunde unui aparat portabil care trebuie s ă protejeze la
maximum resursele energetice.

7. Aplica ții 167
TMOD
GATE C/T# M 1 M0 GATE C/T# M 1 M0
Timer 1 Timer0
Registrul TMOD nu poate fi accesat decât pe byte, deci scrierea unei informa ții în
acest registru poate fi f ăcută prin instructiuni de tipul:
MOV TCON,#nnH sau
MOV @R0,#nnH unde R0=#TCON. Aten ție, aceast ă instructiune poate scrie
în memoria intern ă extins ă, dac ă microcontroller-ul prezint ă o astfel de memorie
(vezi PCB80C552 și alte analoge lui).
Modurile de func ționare ale canalelor temporizatoare/num ărătoare sunt în num ăr
de 4 și sunt codate natural prin simpla scriere a num ărului binar corespunz ător
canalului în bi ții 0 și 1 pentru Timer0 sau 4 și 5 pentru Timer 1. Iată care sunt
aceste moduri:
Modul 0 , permite temporizarea1 sau num ărarea impulsurilor2 aplicate la intrarea
canalului respectiv dispunând de: un divizor cu 25 =32 (prescale) și apoi divizarea
programat ă cu o constant ă de timp ce poate fi format ă din orice num ăr
reprezentabil pe 8 bi ți, deci cuprins între 0 și 255, 0 corespunde unei diviz ări cu
256. Num ăratoarele canalului temporizator num ăra în sens direct, adic ă fiecare
front negativ al unui impuls aplicat la intrare determin ă incrementarea
num ărătorului. L ățimea minim ă a unui impuls este de 1/24 din frecven ța de ceas a
sistemului. Structura canalului temporizator num ărător este dat ă în figura 4.
Modul 1, asigur ă temporizarea sau num ărarea impulsurilor aplicate pe intrarea
canalului, constanta de timp fiind un num ăr cuprins între 0 și 65535 cu 0
corespunz ător lui 65536.
Modul 2 , permite divizarea frecven ței de intrare sau num ărarea impulsurilor
aplicate cu un num ăr reprezentabil pe 8 biti, aceasta constant ă este re ținuta în TH x
și este reînc ărcată automat în TL x atunci când canalul num ărător efectueaz ă
tranzi ția de stare din 11111111 B în 00000000B.
Modul 3, este diferit la canalul 0 în raport cu canalul 1. Pentru canalul 0 setarea
acestui mod permite împ ărțirea celor dou ă num ărătoare TL0 și TH0 între pinii de
comand ă ai canalelor 0 și 1. Temporizatoarele/num ărătoarele canalului 0 low pot fi
comandate de c ătre pinii corespunzatori canalului 0 (TL0), și
temporizatoarele/num ărătoarele canalului 0 high de c ătre pinii corespunz ători ai
canalului 1 (TH0). Dac ă program ăm canalul 1 în modul 3 aceasta duce la blocarea
acestuia și reținerea informa țiilor de la momentul respectiv. Utilizarea canalului 0

1 Prin temporizare se în țelege m ăsurarea unui interval de timp ca multiplu al frecven ței de
ceas a sistemului (microcontroller-ului). In acest caz impulsurile num ărate de canalul
respectiv provin de la ceasul de sistem, care în cazul circuitului AT89C205 1 este divizat cu
12 și aplicat pe intrarea de num ărare.
2 Num ărarea impulsurilor ce sunt aplicate pe o intrare accesibil ă din exterior (vezi pinii T0
sau T 1). Aceste impulsuri pot proveni de la o surs ă extern ă de semnal.

168 MICROCONTROLLERE
în modul 3 va permite multiplicarea canalelor temporizatoare/num ărătoare cu un
canal de temporizare/ num ărătoare de 8 bi ți
TCON
TF1 TR1 TF0 TR0 IE 1 IT1 IE0 IT0
Registrul TCON ( Timer Control ) permite modificarea set ărilor bit cu bit,
semnifica ția acestora o detaliem în continuare:
TF x, exprim ă starea canalului temporizator corespunz ător. Setarea se realizeaz ă
hardware, automat la trecerea de la starea 11…11B la starea 00..00B a
num ărătoarelor canalului respectiv (overflow).
Biții TR x setați/reseta ți permit sau respectiv inhib ă soft poarta de control ce asigur ă
accesarea num ărătoarelor de c ătre semnalul de intrare al canalului respectiv.
Biții IEx se seteaz ă automat (hardware) atunci când un front descresc ător apare pe
linia de întreruperi externe corespunz ătoare și sunt reseta ți tot automat la servirea
întreruperii. (la intrarea în ISR).
Biții ITx seta ți/reseta ți stabilesc dac ă intr ările corespunz ătoare întreruperilor
externe de stare vor fi sensibile pe frontul descresc ător al semnalului, respectiv pe
nivelul logic zero. În cazul în care bi ții respectivi (IT x) sunt reseta ți, dac ă semnalul
extern aplicat pe intr ările INT x este de durat ă mai mare decât durata ISR
corespunz ătoare, la sfâr șitul ISR se va genera o nou ă întrerupere corespunz ătoare
respectivului canal.
Figura 7. 4 Structura canalului temporizator al microcontrolerului AT89C205 1

7. Aplica ții 169
SCON
SM0 SM 1 SM2 REN TB8 RB8 TI RI
SM0 și SM 1 seteaz ă unul dintre cele patru moduri distincte în care interfa ța UART
a microcontroller-ului poate func ționa. Detalierea acestor moduri este realizat ă în
continuare:
Modul 0 , corespunz ător combina ției 00 a bi ților respectivi, permite serializarea
octeților ce sunt transmi și și receptiona ți semi-duplex pe linia RxD. Linia TxD este
utilizat ă pentru transferul semnalului de ceas serial, în acest caz 1/12 din frecven ța
de ceas a microcontroller-ului.
Modul 1, corespunz ător combina ției 10 a bi ților respectivi, asigur ă transferul full-
duplex asincron al informa țiilor, respectiv 1 bit de start (0), 8 bi ți de date și în final
un bit de stop ( 1). Frecven ța de transmisie este variabil ă, ea fiind setat ă de c ătre
canalul 1 temporizator corespunz ător frecven ței de apari ție a st ării overflow.
Modul 2 , corespunz ător combina ției 0 1 a bi ților respectivi, asigur ă transferul
asincron al informa țiilor cu 1 bit de start (0), 8 bi ți de date, un bit programabil, care
poate fi chiar bitul de paritate și un bit de stop ( 1). La transmisie bitul 9 este re ținut
în loca ția TB8, iar la recep ție acesta este memorat în RB8. Rata de transfer este
programabil ă la 1/32 sau 1/64 din frecven ța de ceas a sistemului.
Modul 3 , corespunz ător combina ției 11 a bi ților respectivi, asigur ă transferul
asincron al informaiilor într-un format analog celui din modul 2 cu excep ția
faptului c ă rata de transfer este variabil ă și setat ă de c ătre frecven ța programat ă
pentru canalul 1 al circuitului temporizator intern al microcontroller-ului.
Bitul SM2 permite validarea unui mod special de comunica ție via interfa ța serial ă
USART și anume a modului prin care pe acela și bus pot fi prezente mai multe
sisteme care pot recepta informa ția. În acest caz, al 9-lea bit poate fi utilizat ca bit
de specificare a tipului de informa ții ce sunt transmise. Astfel, setând bitul SM2,
poate fi generat ă o întrerupere atunci când și bitul al 9-lea transmis este 1 (spre
exemplu), ceea ce va determina analiza de c ătre sistemul receptor a informa țiilor și
rejectarea acestora atunci când cuvântul de adresare respectiv nu corespunde
propriei adrese.
Bitul REN permite validarea întreruperilor la recep ție atunci când este setat, ceea
ce face ca la recep ția bitului de stop, corespunz ător formatului de transmisie
specificat, s ă se genereze o întrerupere și totodat ă să se seteze bitul RI.
Bitul TI este setat harware la încheirea transferului unei informa ții via interfa ța
serial ă, caz în care dac ă întreruperile corespunz ătoare acesteia au fost validate are
loc transferul programului c ătre ISR corespunzatoare. Resetarea acestui bit cade în
responsabilitatea programatorului, acesta trebuind s-o efectueze în cadrul ISR.
Bitul RI semnaleaz ă recep ția complet ă a unit ății de informa ție, via interfa ța
UART. La recep ția bitului de stop, flag-ul RI este automat (hardware) setat.
Programatorul are obliga ția ca în ISR corespunz ătoare recep ției datelor s ă ștearg ă
bitul RI, pentru a reancla șa mecanismul de semnalizare a recep ției datelor pe
UART.

170 MICROCONTROLLERE
IE
EA – – SI TF 1 IE1 TF0 IE0
Acest registru specific ă sursele de întreruperi admise de microcontroller care vor
putea genera întreruperi. Astfel:
IE0 corespunde liniei întreruperii externe de stare INT0
TF0 corespunde st ării timer 0 overflow
IE1 corespunde liniei întreruperii externe de stare INT 1
TF1 corespunde st ării timer 1 overflow
SI corespunde întreruperilor ce provin de la unitatea UART integrat ă pe
microcontroller.
Registrul IE permite validarea individual ă a acestora, dar pentru ca o întrerupere s ă
se declan șeze este necesar ca bitul EA s ă fie obligatoriu setat. Priorit ățile în
servirea întreruperilor sunt stabilite de c ătre programator, fiind permise dou ă nivele
de prioritizare a întreruperilor: unul superior (high) setat prin înscrierea unui 1
logic în dreptul sursei de întrerupere respective (vezi structura pe surse de
întreruperi a registrului IP – Interuppt Priority Register , este analog ă celei a
registrului IE), și restul inferior (low). Sursa de prioritate înalt ă va fi capabil ă să
întrerup ă o rutin ă de servire ISR corespunz ătoare unei surse de nivel de prioritate
low, dar nu și invers.
Dacă simultan apar mai multe întreruperi având acela și nivel de prioritate (low),
ordinea de analiz ă a cererilor se face de la IE0 c ătre SI.
Odat ă încheiat ă analiza structurii SFR s ă specific ăm informa țiile adecvate
aplica ției noastre. Iat ă-le:
In PSW vom scrie: 00000000B .
In PCON vom scrie: 10000000B setăm SMOD pentru multiplicarea cu doi a
frecven ței de emisie pe interfa ța serial ă.
In TMOD vom scrie: 00 100000B, respectiv vom programa în modul 2
temporizatorul 1 cu autoreînc ărcarea constantei de timp, iar canalul 0 îl vom
menține în modul 0.
Constanta de timp o vom calcula dup ă ce vom seta și parametrii interfe ței UART,
respectiv vom transmite 8 bi ți/caracter, la 19200 bauds, cu un bit de start și unul de
stop. În consecin ță în SCON vom scrie:
SCON : 01010000B , adic ă vom alege modul 1 de func ționare și vom valida
recep ția caracterelor pe interfa ța serial ă.
În acest caz, calculul constantei de timp se va face utilizând formula:
Baud Rate=2SMOD/32*f CLK/(12*(256-TH 1)). Rezult ă, înlocuind în formul ă valoarea
de 253, respectiv FDH, respectiv 111111 01B ce va trebui înc ărcată în TH 1 drept
constanta de timp.În registrul IE vom scrie informa ția: 10010000B corespunz ătoare st ării ini țiale a
sistemului când acesta va trebui doar s ă accepte recep ția comenzilor de la sistemul
ierarhic superior.

7. Aplica ții 171
Iată rutina de ini țializare a sistemului:
INIT:
MOV R0,#7FH
;Încarc ă în registrul R0 limita superioar ă a memoriei interne
LOOP0: MOV @R0,#0H
;Scrie îndirect 0 în loca ția adresat ă prin pointer-ul R0
DJNZ R0,LOOP0
;Efectueaz ă umplerea cu zero a memoriei interne a controller-ului
LOOP 1:
JNB P3.2,START_POSITION
;Testare stare piston, Dac ă atinge limitatorul L 1, sistemul este în pozi ția de
;referin ță
SETB P3.6
SETB P3.5
CLR P3.7
;Comand ă Electrovalva 1 și pompa, și anuleaz ă comanda pentru Electrovalva 2
JMP LOOP 1
START_POSITION:
SETB STATUS0
MOV PSW,#00H
MOV PCON,#80H
MOV TMOD,#20HMOV TH 1,0FDH
SETB TR 1
MOV SCON,#50H
MOV IE,#90H
;Setarea st ării ini țiale a microcontroller-ului implic ă validarea doar a întreruperilor
;UART
RET
Rutina de servire a întreruperilor corespunz ătoare UART va trebui s ă
realizeze urm ătoarele:
1. Să citeasc ă informa ția recep ționat ă de pe linia serial ă.
2. Să analizeze informa ția, și func ție de aceasta s ă reac ționeze astfel:
• Dacă este vorba de o comand ă să inițieze execu ția acesteia.
• Dacă este vorba de o cerere de stare a microcontroller-ului din partea
sistemului ierarhic superior s ă inițieze transferul acesteia.
Pentru a rezolva aceast ă func țiune va trebui s ă introducem o variabil ă
local ă de stare STATUS, având structura prezentat ă mai jos, actualizat ă de fiecare
dată când are loc o schimbare a st ării de c ătre rutinele de servire a întreruperilor ce
asigur ă sincronizarea func ționării unit ății centrale.

172 MICROCONTROLLERE
STATUS
–– C D A L 2 L 1
• Bitul L 1 este setat la atingerea limitatorului L 1, în rest este resetat
• Bitul L2 este setat la atingerea limitatorului L2, în rest este resetat
• Bitul CDA este setat la ini țierea unei comenzi de avans sau retragere și
resetat în rest, la sfâr șitul mi șcării.
Rutina de servire a întreruperilor din partea UART (ISR_SI) asigur ă
tratarea fiec ărui cuvânt de comand ă dintre cele admise de protocolul instituit.
Loca țiile STATUS asigur ă memorarea st ării sistemului. în acest sens,
asamblorul permite rezervarea de spa țiu de memorie în zona de adrese 20H la 2FH,
respectiv bi ții de la 00H la 7FH.
;Variabile de stare ale actuatorului electo-hidraulic.
STATUS0 BIT 20H
STATUS 1 BIT 2 1H
STATUS2 BIT 22H;Rutina de servire a întreruperilor generate de UART
;Aten ție UART genereaz ă o unic ă întrerupere atât la recep ție cât și la transmisie
ISR_SI:
JB RI,RECEPTIE
TRANSMISIE:
CLR TI
;Șterge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru
;reanclan șarea întreruperilor la transferul unui nou caracter
JB RI,RECEPTIE ;Retestare recep ție caracter de c ătre UART
RETI
RECEPTIE:
MOV A,SBUF ;Cite ște caracterul recep ționat în registrul ACC
CJNE A,#'A',ISR_SI_ 1
CDA_AVANS:
SETB P3.7 ;Comand ă Electrovalva 1
CLR P3.6 ;Blocheaz ă Electrovalva2
SETB P3.5 ;Comand ă pompa de presiune
;Comand ă mișcarea de avans a actuatorului ac ționând Electrovalva 1 și pompa.
CLR STATUS0
;Reseteaz ă starea consemnat ă anterior, respectiv “actuator retras”
SETB STATUS2 ;Consemneaz ă comanda actuatorului
SETB IE. 1
;Valideaz ă și întreruperile corespunz ătoare limitatorului 2
JMP END_ISR_SI
ISR_SI_ 1:
CJNE A,#'R',ISR_SI_2
SETB P3.6 ;Comand ă Electrovalva2
CLR P3.7 ;Blocheaz ă Electrovalva 1

7. Aplica ții 173
SETB P3.5 ;Comand ă pompa de presiune
;Comand ă mișcarea de retragere a actuatorului ac ționând Electrovalva 2 și pompa.
CRL STATUS 1
; Reseteaz ă starea consemnat ă anterior, respectiv “actuator avansat”
SETB STATUS2 ;Consemneaz ă comand ă actuatorului
SETB IE.0
;Valideaz ă și întreruperile corespunz ătoare limitatorului 1
JMP END_ISR_SI
;Testare cereri de stare din partea sistemului ierarhic superior
;Ecoul la acestea const ă într-un caracter ce define ște starea curent ă a sistemului
ISR_SI_2:
CJNE A,#'S',ISR_SI_3JB STATUS2,ISR_SI_4
MOV SBUF,#'D'
;Transmite ecoul corespunz ător st ării reaDy – preg ătit
JMP END_ISR_SI
ISR_SI_3:
CJNE A,#'P',END_ISR_SI
;În cazul în care codul nu corespunde protocolului stabillit, – cuvântul recep ționat
;nu este unul dintre cuvintele cheie- el va fi ignorat
JB STATUS0,LIM 1
JB STATUS 1,LIM2
MOV SBUF,#'M'
;Transmite ecoul “actuator în mi șcare (pozi ție intermediar ă)
JMP END_ISR_SI
LIM 1:
MOV SBUF,#'I' ;Transmite ecoul “actuator retras”
JMP END_ISR_SI
LIM2:
MOV SBUF,#'E' ;Transmite ecoul “actuator avansat”
END_ISR_SI:
CLR RI ;Reseteaza flag-ul “recep ție caracter”
RETI
ISR_SI_4:
MOV SBUF,#'B'
JMP END_ISR_SI
Vom descrie în continuare rutinele de servire a întreruperilor ce asigur ă
oprirea comenzilor de avans și retragere a actuatorului electro-hidraulic.
Corespunz ător fiec ărei linii de întreruperi externe vom scrie câte o rutin ă
(ISR_EXT0 și respectiv ISR_EXT 1)
ISR_EXT0:
CLR IE.0
;Sterge flag-ul de validare a întreruperilor corespunz ător sursei

174 MICROCONTROLLERE
CLR P3.6 ; Șterge comada corespunz ătoare lui Ev2
CLR P3.5 ; Șterge comanda corespunz ătoare pompei
CLR STATUS2
;Șterge bitul ce consemneaz ă mișcarea actuatorului
SETB STATUS0
;Șeteaz ă bitul ce specific ă starea "actuator retras"
RETI
ISR_EXT 1:
CLR IE.2
;Șterge flag-ul de validare a întreruperilor corespunz ător sursei
CLR P3.7 ; Șterge comada corespunz ătoare lui Ev 1
CLR P3.5 ; Șterge comand ă corespunz ătoare pompei
CLR STATUS2
;Șterge bitul ce consemneaz ă mișcarea actuatorului
SETB STATUS 1
;Seteaz ă bitul ce specific ă starea "actuator avansat"
RETI
Programul principal al sistemului va include doar o rutin ă de a șteptare a
unui eveniment. Iat ă-l:
ORG 0H
JMP MAIN
JMP ISR_EXT0 ;Saltul la rutina de întreruperi corespunz ătoare lui L 1
ORG 13H
JMP ISR_EXT 1 ;Saltul la rutina de întreruperi corespunz ătoare lui L2
ORG 23H
JMP ISR_SI ;Saltul la rutina de întreruperi corespunz ătoare UART
ORG 100H
$INCLUDE INIT
$INCLUDE SERIAL$INCLUDE EXT 1&2
;Dispozi ții de inserare a programelor anterioare în cadrul programului principal
MAIN:
CALL INIT
;Construim tabela cu salturile la rutinele de servire a întreruperilor sau laprogramul principal
JMP $ ;Instruc țiunea asigur ă saltul permanent la ea îns ăși
Urmare a scrierii programului, memoria de program a sistemului dup ă
parcurgerea etapelor de asamblare, link-editare și conversie OBJ->HEX (IntelHEX
code), va cuprinde în ordine, începând de la adresa 0 instruc țiunea de salt la
programul principal, instruc țiunile de salt c ătre rutinele de servire a întreruperilor și
rutinele de servire a întreruperilor și programul principal în ordinea specificat ă prin
dispozi țiile INCLUDE. Odat ă înscris în memoria flash a procesorului, sistemul este
gata s ă satisfac ă func țiunile specificate în raport cu protocolul stabilit.

7. Aplica ții 175
7.1.2 Varianta de implementare cu microcontroller RISC.
Implementarea aceleia și aplica ții utilizând procesorul PIC 16F84 presupune
următoarele:
1. Implementarea interfe ței cu aplica ția, respectiv comanda celor dou ă
electrovalve și a pompei de presiune
2. Implementarea controlului cursei pistonului, adic ă achizi ția semnalelor
digitale de la cele dou ă limitatoare
3. Implementarea interfe ței seriale ce asigur ă conexiunea c ătre nivelul
ierarhic superior, pentru aplica ția noastr ă.
Vom analiza pe scurt care sunt principalele elemente caracteristice ale
procesorului ales. Structura acestuia este prezentat ă în figura 7.5.
Dispune de 13 linii utilizabile ca linii de intrare/ie șire cu capabilitate
ridicat ă în curent (pân ă la 20 mA, fiecare). Arhitectura procesorului este Harvard,
cu lățimea magistralei de date de 8 bi ți și a celei corespunz ătoare memoriei de
program de 14 biți. Dispune de 1Ko memorie de program (flash sau EPROM), de
Figura 7. 5 Structura microcontroler-ului PIC 16F86

176 MICROCONTROLLERE
Figura 7. 7 Structura cuvântului instruc țiuneIND ADR IND ADR
TMR0 OPTION
PCL PLC
STATUS STATUS
FSR FSR
PORT A TRIS A
PORT B TRIS B
EEDATA EECON 1
EEADR EECON2
PCLATCH PCLATCH
INTCON INTCON
68 x 8 GPR Mapped
Figura 7. 6 Registrele microcontroler-ului
PIC16F842x128 bytes memorie SRAM
organizat ă în dou ă zone, zona SFR
(Special Function Regsiter) și zona
GPR ( General Purpose Register ) și
de 64 bytes memorie EEPROM ce
poate fi înscris ă și stears ă prin
program. Dispune de un canaltemporizator/num ărător ce poate
îndeplini func ția de Watch Dog de 8
biți cu un prescaler de 5 bi ți.
Controller-ul de întreruperi intern
admite 4 surse de întreruperi: unaextern ă (RB0/INT, una de la canalul
TMR0 (timer overflow), una de la
portul B comun ă pentru 4 dintre
liniile portului care genereaz ă o
întrerupere la schimbarea niveluluilogic de semnal pe ele și o
întrerupere intern ă generat ă la
scrierea datelor în EEPROM. Stiva
microcontroller-ului este mai
deosebit ă, respectiv este
implementat ă într-o zon ă special ă
a memoriei interne și are
maximum 8 nivele nefiind permis ă
citirea sau înscrierea acesteia prin
adresare direct ă. Procesorul nu
dispune de instruc țiuni PUSH sau
POP și astfel doar prin instruc țiuni
de tipul CALL, GOTO, RETURN,
RETFIE și RETLW putem
introduce, respectiv extrage
informa ții la nivelul stivei. O
observa ție important ă de care va
trebui s ă ținem cont, este aceea c ă
nu este prev ăzut nici un indicator
de dep ășire a dimensiunii stivei,
ceea ce poate duce la grave erori
atunci când num ărul de apeluri
sau de instruc țiuni GOTO este
mai mare de 8.
Instruc țiunile procesorului
au o l ățime de 14 bi ți și ele
includ atât codul respectiv cât și operanzii aferen ți acestuia, respectiv adresa

7. Aplica ții 177
registrului din zona file Register și/sau indexul bitului corespunz ător loca ției
respective.
Instruc țiunile de salt, cum ar fi, CALL și GOTO sunt singurele care
dureaz ă mai mult de un ciclu instruc țiune și care necesit ă modificarea con ținutului
PC-ului.
Setul de instruc țiuni al procesorului este “ortogonal”, ceea ce presupune c ă
modalitatea de acces la orice loca ție de memorie este identic ă atât la scriere cât și
la citire, atât pentru zona GPR cât și pentru zona SFR.
În cazul opera țiilor calate pe bit, instruc țiunile vor citi întâi tot registrul,
vor opera pe bitul selectat ( specificat ) și vor întoarce înapoi rezultatul în registrul
specificat.
Uniformitatea în tratare atât la nivel de bit cât și la nivel de octet, precum
și a registrelor de uz general și special și a porturilor permite reducerea
semnificativ ă a opera țiilor de transfer intermediar care sunt specifice procesoarelor
CISC.
Este de men ționat c ă Work Register (W Register), func ționeaz ă ca
acumulator și particip ă la majoritatea instruc țiunilor atât cele de transfer direct cât
și la cele de transfer indirect –via un registru de adresare INDR -, adic ă un registru
ce memoreaz ă adresa surs ă sau destina ție a informa țiilor.
Iată câteva instruc țiuni pe care în cadrul programului le vom utiliza.
Prezentarea lor o facem pentru c ă ele prezint ă trăsături specifice în raport cu cele
de la microcontroller-ul Atmel.
Aceste instruc țiuni le vom putea clasifica a șa în :
Instruc țiuni de transfer, aritmetico-logice și de redirectare a
programului , cum ar fi:
Pot con ține drept parametri pân ă la trei valori și anume:
• Prin k (8 bi ți) specific ăm o valoare imediat ă ce este inclus ă în corpul
instruc țiunii
• Prin f (8 bi ți) specific ăm adresa din zona de memorie File Register la
care face referire instruc țiunea.
• Prin b specific ăm bitul la care face referire instruc țiunea (valoare pe 3
biți)
• Falg-ul d specific ă registrul destina ție în care se stocheaz ă rezultatul
opera ției sau al transferului, dac ă acesta este 0, atunci rezultatul este
reținut în regsitrul W, altfel el este re ținut în registrul f din File
Register.
MOVF f,d Transfer data între W și registrul f cu indicarea registrului de
memorare a rezultatului.
MOVWF f Transfer data din W în registrul f
MOVLW k Transfer valoare imediat ă k (specificat ă în cadrul instruc țiunii) în
registrul W.
SWAPF f,d Comutare semi-bytes în cadrul registrului f cu re ținerea
rezultatului în W sau f func ție de d.
ANDWF f,d SI-LOGIC, între informa țiile din W și f, bitul d are acela și rol,

178 MICROCONTROLLERE
ANDLW k SI-LOGIC între valoarea specificat ă k și valoarea stocat ă în W.
Rezultatul este re ținut în W.
ADDWF f,d Adunarea informa țiilor din W și f, bitul d specific ă destina ția
rezultatului.
ADDLW k Adunarea între valoarea specificat ă k și valoarea stocat ă în W.
Rezultatul este stocat în registrul W.
SUBWF f,d Scăderea informa țiile din W și f cu acela și rol pentru flag-ul d
SUBLW k SI-LOGIC între valoarea specificat ă k și valoarea stocat ă în W.
Rezultatul este stocat în registrul W.
IORWF f,d SAU-LOGIC, între informa țiile din W și f, bitul d are acela și rol,
IORLW k SAU-LOGIC între valoarea specificat ă k și valoarea stocat ă în W.
Rezultatul este re ținut în W.
XORWF f,d SAU-EXCLULSIV, între informa țiile din W și f, bitul d are
acela și rol,
XORLW k SAU-EXCLUSIV, între valoarea specificat ă k și valoarea stocat ă
în W. Rezultatul este re ținut în W.
CALL k Apel rutin ă k (11/13 biți specifica ți prin instruc țiune)
GOTO k Salt la adresa k (11/13 biți specifica ți prin instruc țiune)
RETURN Revenire din subrutin ă
RETFIE Revenire din subrutina de tratare a întreruperilor
RETLW k Revenire din subrutin ă cu înc ărcarea unei valori ”literale” în W.
Instruc țiunilede setare/resetare bytes sau bi ți, cele de rotire pot fi încadrate
în categoria curent ă, unele dintre acestea le vom detalia, având în vedere
particularit ățile pe care ele le prezint ă. Spre exemplu, instruc țiunea :
RRF f,d nu face altceva decât s ă deplaseze c ătre dreapta cu o pozi ție
informa ția din registrul f, rezultatul fiind re ținut conform valorii lui d, în W sau
chiar în registrul f. La fiecare deplasare, bitul 0 este mutat în bitul de C (de
transport), iar acesta este transferat în bitul 7 al registrului f, etc.
Analog, func ționeaz ă și instruc țiunea RLF f,d , caz în care bitul C (de
transport) va fi copiat în bitul 0 al registrului f și bitul 7 al aceluia și registru fi
memorat în C.
Instruc țiuni de decizie:
BTFSS Test bit și salt peste instruc țiunea urm ătoare dac ă acesta este 1
logic
BTFSC Test bit și salt peste instruc țiunea urm ătoare dac ă acesta este 0
logic
Instruc țiuni ce permit execu ția repetitiv ă a unui șir de opera ții:
DECFSZ f,d Decrementeaz ă registrul f și sare instruc țiunea urm ătoare dac ă este
zero rezultatul. Valoarea rezultat este re ținută func ție de flag-ul d în W d=0 sau f
d=1.

7. Aplica ții 179
INCFSZ f,d Incrementeaz ă registrul f și sare instruc țiunea urm ătoare dac ă este
zero rezultatul. Valoarea rezultatului este re ținută func ție de flag-ul d în W d=0 sau
f d=1.
Restul instruc țiunilor de resetare sau setare pe bit și byte, cele de
incrementare și decrementare, cele de complementare și instruc țiunea NOP sunt
furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip).
Vom utiliza instruc țiunile de deplasare la dreapta prin bitul de carry pentru
emularea UART.
Registrele generale ale microcontroller-ului asigur ă pe de-o parte
implementarea func țiunilor de control pentru program, iar pe de alt ă parte permit
memorarea datelor și transferul comenzilor c ătre mediul extern. Iat ă structura celor
mai importante dintre acestea.
STATUS
IRP RP 1 RP0 T0# PD# Z DC C
IRP este bitul care selecteaz ă bancul de registre ( la adresarea indirect ă) valoarea 0
corespunde intervalului de adrese 00H la FFH, iar valoarea 1 corespunde
intervalului 100H la 1FFH.
RP1,RP0 corespunde selec ției bancului de registre (la adresarea direct ă) selec ție
astfel:
00 corespunde intervalului de adrese 00H la 7FH
01 corespunde intervalului de adrese 80H la FFH
10 corespunde intervalului de adrese 100H la 17FH
11 corespunde intervalului de adrese 180H la 1FFH
T0# (time out bit ), exprim ă dep ășirea capacit ății de num ărare a canalului 0,
respectiv tranzi ția de stare de la FFH spre 00H.
PD# (Power Down ), odat ă setat exprim ă “trezirea sistemului”, la pornirea acestuia
sau dup ă execu ția instruc țiunii CLRWDT. În rest bitul de mai sus este resetat.
Z (Zero flag ), este setat la întâlnirea coinciden ței a dou ă valori numerice sau când
rezultatul opera ției aritmetico-logice este zero. În rest, acesta este resetat.
DC (Digital Carry ), exprim ă transportul sau împrumutul la nivel de semibyte.
Setat la apari ția transportului, resetat la apari ția unui împrumut.
C (Carry ), este setat la apari ția unui transport la nivel de byte, și resetat în rest.
OPTION
RBPU# INTEDG TOCS TOSE PSA PS2 PS 1 PS0
RBPU#, (Pull up bits port B ),setat exprim ă invalidarea func țiunii pull-up pentru
liniile portului B, iar resetat, asigur ă func ția pull-up pentru aceste linii.
INTEDG (Interrupt Edge Select ) setat permite generarea întreruperilor pe frontul
cresc ător, iar resetat realizeaz ă generarea întreruperii pe frontul descresc ător.
TOCS (TMR0 Source Clock ), selecteaz ă sursa impulsurilor ce sunt num ărate de
către canalul 0 num ărărtor/temporizator, setat permite num ărarea impulsurilor
externe, aplicate la pinul RA4, resetat selecteaz ă frecven ța intern ă de ceas divizat ă
cu 4.

180 MICROCONTROLLERE
TOSE (TMR0 Source Edge Select ), setat realizeaz ă incrementarea num ărătorului
canalului pe frontul negativ, iar resetat incrementeaz ă impulsurile pe frontul
pozitiv.
PSA , (Prescaler Assignemet Bit ), setat asigneaz ă prescaler-ul pentru WDT ( Watch
Dog Timer ), resetat îl rezerv ă pentru canalul TMR0.
PS2, PS 1, PS0 (Biți de selec ție a constantei de divizare a prescaler-ului), dup ă cum
urmeaz ă:
000H reprezint ă 1/2 ptr. TMR0 și 1/1 pentru WDT
001H reprezint ă 1/4 ptr. TMR0 și 1/2 pentru WDT
010H reprezint ă 1/8 ptr. TMR0 și 1/4 pentru WDT
011H reprezint ă 1/16ptr. TMR0 și 1/8 pentru WDT
100H reprezint ă 1/32 ptr. TMR0 și 1/16 pentru WDT
101H reprezint ă 1/64 ptr. TMR0 și 1/32 pentru WDT
110H reprezint ă 1/128 ptr. TMR0 și 1/64 pentru WDT
111H reprezint ă 1/256 ptr. TMR0 și 1/128 pentru WDT
Structura canalului temporizator/num ărător este ilustrat ă în figura 7.8.
Întreruperile în cazul microcontroller-ului PIC 16F84 au un singur
“vector”, și anume cel plasat la adresa 004H din memoria de program, iar cum
sursele de întreruperi sunt în num ăr de patru este necesar s ă implement ăm în cadrul
rutinei de servire programul de identificare și apoi de tratare a acestora. Registrul
INTCON, este cel ce d ă posibilitatea utilizatorului s ă valideze sau invalideze atât
decla șarea întreruperilor de la diverse surse, cât și să valideze sau invalideze global
întreruperile.
INTCOM
G I E E E I ET O I EI N T ER B I ET O I FI N T FR B I F
GIE, (Global Interrupt Enable ), permite setat s ă valideze acele cereri de
întrerupere ce apar dac ă acestea au fost validate și individual, respectiv resetat
inhib ă orice cerere de întrerupere.
EEIE (EEPROM Interrupt Enable ) setat valideaz ă întreruperile la opera țiile de
scriere sau citire a EEPROM-ului intern, resetat ignor ă acestecereri de întrerupere
TOIE (TMR0 Overflow Enable ), setat valideaz ă întreruperile corespunz ătoare
depășirii la canalul temporizator/num ărător, resetat acestea sunt ignorate
Figura 7. 8 Structura canalului temporizator la circuitul PIC 16F84

7. Aplica ții 181
INTE (External Interrupt Enable ), valideaz ă întreruperile datorate varia ției
semnalului aplicat pe intrarea RB0 atunci când este setat, respectiv resetat le ignor ă
RBIE (B Register Interrupt Enable ), setat valideaz ă întreruperile datorate
schimb ării st ării uneia dintre intr ările portului RB7, RB6, RB5 sau RB4 al
microcontroller-ului, respectiv, resetat ignor ă schimb ările de stare la nivelul
portului RB
TOIF (Timer Overflow Interrupt Flag ), este setat hard la apari ția stării “dep ășire”
a capacit ății num ărătorului corespunz ător canalului 0, resetat în rest.
INTF (Interrupt Flag ) setat hard la apari ția unei întreruperi la nivelul liniei RB0,
în rest resetat.
RBIF (B Port Interrupt Flag ), setat hard, atunci când una sau mai multe linii ale
portului B au schimbat starea, resetat în rest.
Ca observa ție general ă trebuie re ținut c ă biții de stare prezen ți în structura
registrului INTCON sunt seta ți hard (prin mecanismul implementat în cadrul
microcontroller-ului) și programatorul, în cadrul rutinei de servire a întreruperilor,
va trebui s ă-i reseteze, pentru a putea detecta urm ătoarea condi ție de decla șare a
întreruperilor.
Registrele EEDATA ( EEPROM Data Register ), reține data de înscris sau
de șters din/în EEPROM, EEADR ( EEPROM address ), reține adresa de memorie
la care, sau de la care se face: scrierea, respectiv citirea datelor și registrele
EECON 1 și EECON2 permit efectuarea memor ării datelor în memoria EEPROM
asignând comenzile de scriere WR sau citire și cele de validare.
Având imaginea registrelor procesorului s ă gândim cum am putea utiliza
acest microcontroller pentru transferul datelor și implementarea func țiunilor
actuatorului electro-hidraulic.
Observ ăm un fapt mai pu țin îmbucur ător: circuitul nu dispune de o
interfa ță serial ă implementat ă hard, deci
va trebui s ă o emul ăm soft.
În ceea ce înseamn ă
implementarea controlului, observ ăm că
portul B este deosebit de util el detectând
automat varia ția nivelului logic pe liniile
RB4 la RB7. În figura 7.9 d ăm schema
electric ă de conectare propus ă, schem ă în
care am ignorat eventualele circuite
amplificatoare în comuta ție sau
formatoare de implus.
Pentru liniile RxD și respectiv
TxD, vom folosi liniile portului B și
anume RB6 (aten ție vom utiliza și
facilitatea de generare a întreruperilor la
schimbarea nivelului logic pe aceast ă
intrare, în acest sens vom folosi
posibilitatea pe care aceast ă linie o ofer ă,PIC 16F84
RxD PB0TxD PB1pEv1
PA0PB4
PB3
PB2L2
L1
Ev2PB5
Figura 7. 9 Schema de conectare

182 MICROCONTROLLERE
de generare a întreruperii la sesizarea bitului de START în cazul transmisiei
seriale), respectiv RB 1 pentru transmisie.
Principalele idei în baza c ărora vom emula interfa ța serial ă sunt
următoarele:
• program ăm timer0 astfel încât acesta s ă genereze câte o întrerupere cu
frecven ța cât mai apropiat ă de frecven ța de transfer serial a
informa țiilor.
• transfer ăm cu ocazia servirii întreruperii corespunz ătoare, câte un bit și
rotim informa ția respectiv ă pentru a simula felul în care decurge
transferul serial pe un UART implementat hard.
• vom stabili rata de transfer serial ă, programând corespunz ător timer-ul
0 pentru aceasta. Iat ă cum se realizeaz ă acest lucru:
Formula de calcul -aproximativ ă3- pentru stabilirea frecven ței de transfer,
dacă presupunem utilizarea unui microcontroller ce func ționeaz ă la f Clk=10MHz va
fi:
) 256(1
4 CT PSfBRClk
−⋅⋅= ,
unde BR este rata de tranmisie serial ă (o vom stabili la 19200 Bauds), f Clk este
frecven ța de ceas a sistemului, PS este factorul de divizare al prescaler-ului, iar CT
este constanta de timp înc ărcată de c ătre programator. Formula nu ține cont de
erorile datorate momentului de timp la care are loc reînc ărcarea constantei de timp
și de timpul necesar microcontroller-ului pentru a intra în ISR.
În cazul nostru, vom ob ține: 130 valoarea produsului PS*(256-CT).
Considerând pentru PS valoarea 1, deci nu utiliz ăm prescaler-ul, vom
înscrie în registrul corespunz ător timer-ului 0, valoarea 7EH.
Aten ție, este de observat c ă timer-ul num ără în sens direct, deci valoarea
corespunz ătoare este dat ă de diferen ța între valoarea la care se realizeaz ă
consemnarea dep ășirii capacit ății canalului și valoarea dorit ă.
Eroarea datorat ă rotunjirii valorii corespunz ătoare ratei de transfer va fi de
0,16%.4
Pentru a implementa aceast ă func ție, vom folosi câteva loca ții de memorie
și anume:
CHR_TRS: loca ție ce memoreaz ă octetul de transmis
CHR_REC: loca ție ce re ține octetul recep ționat
RI bit ce specific ă recep ția complet ă a caracterului pe linia serial ă

3 Formula este aproximativ ă căci ea nu ține cont de timpii necesari execu ției instruc țiunilor
din cadrul rutinei de servire a întreruperilor, timpi care de altfel pot fi diferi ți, func ție de
starea în care este gasit procesorul la ancla șarea întreruperii
4 Formula de calcul a erorii va fi:
pp rErrτττ−= unde  r este valoarea programat ă, iar
p este valoarea teoretic ă.

7. Aplica ții 183
TI bit ce exprim ă transmisia complet ă a caracterului pe linia serial ă
R bit ce exprim ă transferul în curs la recep ție (este utilizat de ISR).
T bit ce exprim ă transferul în curs la transmisie(este utilizat de ISR).
Transferul se va efectua semi-duplex, cu 8 bi ți/caracter, un bit de start și
unul de stop. Structura byte-ului de stare este cea de mai jos:
SI_STARE
TR T I R I E N D C 2 C 1 C0
Unde:
END are semnifica ția de sfâr șit transmisie sau recep ție byte
C2,C 1,C0 sunt bi ții utiliza ți pentru contorul de bi ți, transmi și sau
recep ționați
Astfel, la transmisie vom face urm ătoarele:
• Transfer ăm la loca ția CHR_TRS octetul de transmis și set ăm flag-ul
INT_TRS.
• Reset ăm linia TxD (respectiv bitul corespunz ător ei, adic ă RB 1)
semnalizând bitul de start (Break pentru transmisie).
• Setăm bitul T, ce exprim ă ocuparea CPU ( Central Processing Unit ) cu
transferul serial.
• Inițiem ceasul de transmisie, adic ă program ăm TMR0 în scopul
gener ării întreruperilor
• Vom înscrie bitul corespunz ător la fiecare întrerupere pân ă la
transferul complet al celor 8 bi ți.
• Setăm linia RB 1, cel pu țin pentru o perioad ă de ceas, (bitul de stop),
setăm bitul TI ce exprim ă încheierea transmisiei caracterului (“buffer
de transmisie gol”) pentru programul principal și reset ăm bitul T –
eliberând astfel UC de task-ul de serializare a informa țiilor.
La recep ție este necesar s ă parcurgem urm ătoarele etape:
• La apari ția schimb ării de stare pe bitul RB0, set ăm bitul ce
consemneaz ă ocuparea interfe ței seriale, respectiv bitul R.(“recep ție în
curs”).
• Pe fiecare întrerupere de timp vom citi (e șantiona) linia serial ă la
recep ție – RB0 – și vom scrie în Carry Flag bitul citit și vom deplasa la
dreapta prin carry byte-l CHR_REC ce va con ține ceea ce recept ăm.
• După 8 cicli de temporizare, vom seta bitul RI, ce specific ă pentru
programul principal, recep ția complet ă a caracterului (“caracter
recep ționat disponibil”), resetând în acela și timp bitul CHR_REC. Va
fi necesar s ă invalid ăm întreruperile corespunz ătoare canalului 0
temporizator, respectiv TMR0.
Având în vedere structura de registre ale procesorului, precum și faptul c ă
punctul de intrare în rutina de servire a întreruperilor este unic, va trebui ca aceasta

184 MICROCONTROLLERE
să implementeze absolut toate func țiunile ce impun sincronizarea CPU cu mediul
extern. De aceea, programul principal va ini țializa sistemul și nu va face decât s ă
aștepte întreruperile și să dea comenzile corespunz ătoare informa țiilor recep ționate
din mediul extern dup ă prealabila memorare și analiz ă a acestora (informa țiile
provin de la interfa ța serial ă sau sunt culese din proces).
Byte-ul de stare a sistemului va avea aceea și structur ă ca și în cazul
implement ării anterioare. În plus, având în vedere variabilele care controleaz ă
starea interfe ței seriale UART, am mai introdus loca ția INT_TRS ce re ține cererea
de transfer a unui caracter.
Iată în continuare programul ce implementeaz ă aplica ția:
list p= 16f84
#include p 16f84.inc
ORG 0x00
START GOTO MAIN
ORG 0x04
ISR ;Salvare stare microcontroller PIC, respectiv W și STATUS
MOVWF TEMP_WORK ;TEMP_WORK <-WMOVF STATUS,W ; W <- STATUS
MOVWF TEMP_WORK 1 ;TEMP_WORK 1 <- W
BTFSC INTCON,INTF
;Testare apari ție bit de start pe RxD
GOTO PRIM_CHR
;Directare spre rutina ce ini țiază recep ția serial ă a caracterelor
BTFSC INTCON,RBIF
;Testare modificare stare L 1 sau L2
GOTO LIMITATORI
;Directare spre rutina de tratare corespunz ătoare atingerii limitatorilor de curs ă
BTFSC INTCON,T0IF ;Testare dep ășire contor TMR0
GOTO REC_TRS
;Directare spre rutina corespunz ătoare dep ășirii contorului de timp corespunz ător
MOVF INTCON,W ; W <- INTCON
ANDLW 0xF8 ;Resetez contorul de bi ți
MOVF INTCON,F ; INTCON <- W
END_ISR ;Refac starea microcontroller-ului
MOVF TEMP_WORK 1,W
MOVWF STATUS
MOVF TEMP_WORK,W
RETFIE
PRIM_CHR
BCF INTCON,INTE
;Invalidez INTE Nu accept alte întreruperi de la RxD. Revalidarea se va face doar
;la sfâr șitul recep ției complete a caracterului curent, odat ă cu setarea flag-ului RI)
MOVLW 3/2*CT

7. Aplica ții 185
;Incarc în W: 3/2 din constanta de timp corespunz ătoare perioadei de transmisie
;serial ă a datelor (vezi diagrama de timp)
;De ce? C ăci eșantionarea liniei RxD se face cât mai aproape de mijlocul
;perioadei de ceas a UART.
MOVF TMR0,F ; TMR0 <- W
BSF SI_STARE,6
;Setez indicatorul "în recep ție" respectiv flag-ul R
MOVF SI_STARE,W
;Încarc în W vectorul de stare: W <- SI_STARE
ANDLW 0xF8
;Resetez bi ții 0,1 si 2, respectiv contorul de bi ți la recep ție
MOVF SI_STARE,F ; SI_STARE <- W
;Se poate introduce în acest punct testul de "overrun" la recep ție
BCF INTCON,INTF
;Resetez flag-ul INTE corespunz ător liniei RxD
GOTO END_ISR
LIMITATORI
BCF INTCON,RBIF
;Resetez flag-ul indicator al întreruperii datorate varia ției st ării liniilor RB4-RB7
BTFSS PORTB,4 ;Testare atingere limitator L 1?
;Da! A fost atins!
GOTO L 1_ATINS
;Nu!
BTFSS PORTB,5 ;Testare atingere limitator L2?
;Da! A fost atins!
GOTO L2_ATINS
;Ignorare întrerupere la schimbarea de stare, respectiv ignorare fronturi pozitive
;ale semnalelor de la limitatoarele 1 și 2
GOTO END_ISR
L1_ATINS
BCF PORTB,3 ;Opre ște comanda Ev2
BCF PORTA,0
;Opre ște comanda pompa de fluid. Actualizare stare sistem în vectorul STARE
BSF STARE,0 ;Atins limitator L 1 pozi ție retras
BCF STARE,2 ;Oprit ă mișcare actuator
GOTO END_ISR
L2_ATINS
BCF PORTB,2 ;Opre ște comanda Ev 1
BCF PORTA,0
;Opre ște comanda pompa de fluid Actualizare stare sistem în vectorul STARE
BSF STARE, 1 ;Atins limitator L2 pozi ție avansat
BCF STARE,2 ;Oprit ă mișcarea actuatorului
GOTO END_ISR
REC_TRS

186 MICROCONTROLLERE
BTFSC SI_STARE,6
;Test întrerupere de la TMR0 la recep ția caracterelor?
;Da! Intrerupere la recep ția caracterelor
GOTO RECEPTIE
;Nu!
BTFSC SI_STARE,7
;Test întrerupere de la TMR0 la transmisia caracterelor?;Da! Intrerupere la transmisia caracterelor
GOTO TRANSMISIE
;Nu! Eroare, refacem doar flag ce semnaleaz ă întreruperea coresp. lui TMR0
BCF INTCON,T0IF
GOTO END_ISR
RECEPTIE
BTFSS PORTB,0
;Eșantionare linie RxD (linia RxD este linia RB0) ;Da, linia este zero!
GOTO REC_ZERO
;Nu, Setez carry flag
BSF STATUS,C
;Setez bitul 0 din STATUS register care este Carry Flag
GOTO REC_CONT
REC_ZERO
BCF STATUS,C
;Resetez bitul 0 din STATUS register care este Carry Flag
REC_CONT
RRF CHR_REC,F
;Rotesc prin Carry loca ția (file register REC_CHR) Bitul de Carry
; va ajunge în pozi ția bitului 7 din REC_CHR și dup ă 8 bi ți recepta ți pe pozi ția 0
INCF SI_STARE,F
;Incrementez contorul din SI_STARE și îl salvez în el însu și
BTFSS SI_STARE,3
;Testez atingerea recep ției celui de-al 8-lea bit al caracterului
GOTO END_REC_BIT
END_REC_CHR
BCF SI_STARE,6
;Resetez flag-ul ce indic ă starea "în recep ție caracter"
BSF SI_STARE,4
;Setez flag-ul RI, "Caracter recep ționat disponibil"
BCF INTCON,T0IF
;Resetez flag-ul ce semnalizeaz ă "overflow" canal temporizator
BCF INTCON,T0IE
;Invalidez întreruperile corespunz ătoare canalului temporizator
BCF SI_STARE,3
;Resetez contor num ărător bi ți recep ționați
GOTO END_ISR

7. Aplica ții 187
END_REC_BIT
MOVWF CT
;Încarc constanta de temporizare în W
MOVF TMR0,F ;O transfer c ătre TMR0
BCF INTCON,T0IE
;Resetez flag-ul corespunz ător întreruperilor de la TMR0 Reanclan șare TMR0
GOTO END_ISR
TRANSMISIE
BTFSC SI_STARE,3
;Test corespunz ător încheierii transferului datelor ce formeaz ă caracterul (8 bi ți)
GOTO TEST_END_TRS
CONT_TRS
BTFSC CHR_TRS,0
GOTO SET_BIT_TRS
BCF PORTB, 1 ;Scriu 0 logic pe linia TxD
GOTO TRS_BITI
SET_BIT_TRS
BSF PORTB, 1 ;Scriu 1 logic pe linia TxD
TRS_BITI
RRF CHR_TRS,F
;Rotesc bi ții caracterului de transmis în bufferul de transmisie
MOVLW CTMOVF TMR0,F
;Reîncarc constanta de timp corespunz ătoare frecven ței de transmisie pe UART
BCF INTCON,T0IF
;Resetez flag-ul indicator timer "overflow"
BSF INTCON,T0IE
;Validez întreruperile ptr. canalul temporizator
INCF SI_STARE
;Incrementez contorul de bi ți la transmisie
GOTO END_ISR
TEST_END_TRS
BTFSC SI_STARE,0
;Testez dac ă este de transmis bitul de STOP
GOTO END_TRS
TRS_STOP_BIT
BSF PORTB, 1
;Scriu 1 logic pe linia serial ă, corespunz ător bitului de STOP
GOTO TRS_BITI
END_TRS
BCF INTCON,T0IE
;Invalidez întreruperilor corespunz ătoare TMR0
BCF INTCON,T0IF
;Șterg flag-ul indicator de întrerupere

188 MICROCONTROLLERE
MOVLW 0x76
;Maschez bitul T, și biții contorului de bi ți ai UART
ANDWF SI_STARE,F
;Realizez resetarea bi ților 7,3 și 0 din SI_STATUS
BSF SI_STARE,5
;Setez TI, indic ă "buffer transmisie gol"
GOTO END_ISR
INIT
MOVLW 0x0C
MOVWF FSR
NEXT
CLRF INDF
INCF FSR
BTFSC FSR,6
GOTO NEXT
BTFSC FSR,4
GOTO NEXT
;Umple cu 0 memoria SRAM a microcontroller-ului de la adresa 0x0C la 0x4F
BCF STATUS,RP0 ;Select bank 0
MOVLW 0x02
MOVF PORTB,F
MOVLW 0x0 1
MOVF PORTA,F
BSF STATUS,RP 1;Select bank 1
MOVLW 0x3 1
MOVWF TRISB
MOVLW 0x00
MOVWF TRISA
BCF STATUS,RP0 ;Ini țializeaz ă porturile A și B
RETURN
;********************************************************
MAIN CALL INIT
LOOP BTFSC SI_STARE,4
;Testare dac ă a fost recep ționat un caracter pe UART
CALL EXEC_CDA
;Execu ție comanda venit ă pe UART de la PC
CONTINUE0
BTFSC INT_TRS,0
;Testare dac ă este de transmis un caracter via UART
CALL INIT_TRS
CONTINUE 1
GOTO LOOP
EXEC_CDA
MOVLW 0x4 1;Încarc comanda 'A' – avans

7. Aplica ții 189
XORWF CHR_REC,W
;Testez identitatea între caracterul recep ționat și 'A'
BTFSC STATUS,Z ;Testez identitatea Z= 1 IDENTIC
GOTO AVANS ;Execut ă avans
MOVLW 0x52 ;Încarc comanda 'R' – retragere
XORWF CHR_REC,W
;Testez identitatea între caracterul receptionat și 'r'
BTFSC STATUS,Z ;Testez identitatea Z= 1 IDENTIC
GOTO RETRAGERE
MOVLW 0x53 ;Incarc comanda 'S' – stare
XORWF CHR_REC,W
;Testez identitatea între caracterul recep ționat și 'S'
BTFSC STATUS,Z ;Testez identitatea Z= 1 IDENTIC
GOTO REQ_STARE
MOVLW 0x50 ;Încarc comanda 'P' – pozi ție
XORWF CHR_REC,W
;Testez identitatea între caracterul recep ționat și 'P'
BTFSC STATUS,Z ;Testez identitatea Z= 1 IDENTIC
GOTO POZITIE
END_EXEC_CDA
BCF SI_STARE,4
;Resetez flag corespunz ător caracterului recep ționat.Acesta a fost citit și interpretat
RETURN
AVANS
BSF PORTB,2 ;Comand ă Ev1
BSF PORTA,0 ;Comand ă pompa
BCF STARE,0 ;Resetez stare sistem L 1 atins
BSF STARE,2 ;Setez starea "actuator în mi șcare"
GOTO END_EXEC_CDA
RETRAGERE
BSF PORTB,3 ;Comand ă Ev1
BSF PORTA,0 ;Comanda pompa
BCF STARE, 1 ;Resetez staresistem L 1 atins
BSF STARE,2 ;Setez starea "actuator in mi șcare"
GOTO END_EXEC_CDA
REQ_STARE
BTFSS STARE,2 ;Testez atingere limitator L 1
;Da! Consemneaz ă stare și inițiază emisie ecou
GOTO READY
BUSY
MOVLW 0x42 ; W <-'B' Busy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini țiere transmisie
GOTO END_EXEC_CDA

190 MICROCONTROLLERE
READY
MOVLW 0x44 ; W <-'D' reaDy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini țiere transmisie
GOTO END_EXEC_CDA
POZITIE
BTFSC STARE,0
GOTO LIM 1
BTFSC STARE, 1
GOTO LIM2
BTFSC STARE,2
GOTO MOVEGOTO END_EXEC_CDA
LIM 1
MOVLW 0x49 ; W <-'I' retras (L 1 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini țiere transmisie
GOTO END_EXEC_CDA
LIM2
MOVLW 0x45 ; W <-'E' avansat (L2 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini țiere transmisie
GOTO END_EXEC_CDA
MOVE
MOVLW 0x4C ;W <-'M' in mi șcare
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini țiere transmisie
GOTO END_EXEC_CDA
INIT_TRS
BTFSS SI_STARE,5 ;Testez dac ă TI este activ,
;În acest caz nu am voie s ă inițiez o nou ă transmisie, voi a ștepta!
GOTO END_INIT_TRS
BCF PORTB, 1 ;Scriu 0 logic pe linia TxD
MOVLW CTMOVF TMR0,F ;Încarc constanta de timp înTMR0
BSF SI_STARE,7 ;Set "transmisie în curs"
BSF INTCON,T0IE
;Validez întreruperile corespunz ătoare canalului TMR0
END_INIT_TRS
RETURN
STARE DB 0x00 ;Vectorul de stare al actuatorului
;Bit 0 L 1 atins
;Bit 1 L2 atins
;Bit 2 în mi șcare

7. Aplica ții 191
SI_STARE DB 0x00 ;Vectorul stare corespunz ător UART
CHR_REC DB 0x00 ;Loca ție ce re ține caracterul recep ționat
CHR_TRS DB 0x00 ;Loca ție ce re ține caracterul de transmis
TEMP_WORK DB 0x00 ;Loca ție ce memoreaz ă W pe durata ISR
TEMP_WORK 1 DB 0x00
;Loca ție ce memoreaz ă STATUS register pe durata ISR
INT_TRS DB 0x00
;Loca ția memoreaz ă în bitul 0 cererea de transmisie a unui caracter.
CT EQU 0x7E ;Constanta de timp coresp. ceasului UART
În text toate etichetele la care se face referire sunt scrise cu caractere
îngro șate. Pentru a avea imaginea modului în care assembler-ul plaseaz ă codul
nostru, d ăm pe CD și partea referitoare la locatare din listing-ul rezultat în urma
asambl ării. Aceast ă list ă este dat ă cu titlu informativ pentru a putea sesiza
modalitatea în care sunt asignate automat loca țiile de memorie, variabilelor.
În final vom face o scurt ă analiz ă comparativ ă a solu țiilor avute în vedere
la implementarea aplica ției.
Criteriul Atmel AT89C205 1 PIC16F84
Procesorul :
Arhitectura
Setul de instruc țiuni
Registre de uz general
Memoria intern ă
Num ăr intr ări/ieșiri:
Linii de comand ă și control
Canale temporizatoare
WatchDog
UART
Sistemul de întreruperi
Alte facilit ăți speciale
Tensiune alimentare
Programarea controller-ului
Memoria de program
Facilit ăți energeticeVon Neumann
CISC5
4 bancuri a câte 8 registrefiecare
128 bytes
15 I/O
2 (4 moduri de programare)
1 canal (8 bi ți) 256 valori
1 canal sincron/asincron
Vectorizat
6
Dispune de 2 intr ări
analogice7
2,7 la 5 V
Flash Reprogramabil
2 Kbytes (CISC)
Low Power și IDLE mode8Harvard
RISC9
2 Bancuri “File Registres” a câte68 de bytes fiecare
Este organizat ă sub forma "File
Registrers"
13 I/O
1 (2 moduri de programare)
1 canal (8 bi ți) 16 valori
NU
Cu unic ă adres ă de servire
NU
2 la 6 V
Programare flash tip
ICSP
10
1024 x 14 biți (RISC)
PowerDown11 și IDLE mode

5 Complex Set Instruction Computer, deci microcontroller cu un set vast de instruc țiuni
6 Prin sistem de întreruperi vectorizat în țelegem capacitatea dispozitivului respectiv de a
realiza automat, la servirea unei întreruperi saltul la o adres ă specific ă sursei de întreruperi

192 MICROCONTROLLERE
Facilit ăți software :
Assembler
Compilaror C
Link-editor
Translator INTEL-HEX codeEmulator
Mediu integratA51, SAM5 1, etc. Extrem de
multe variante de asambloare,Compilatoare C5 1 și altele
L51
DA
DA
NUMASM macro-asamblor,
integrabil în mediul MPLABDA
MPLINK
DA
DA
DA (MPLAB)
Aspecte economice :
Preț/bucat ă
Optenabilitate:
Seria produsului:7,24 DM (Hoepping
Elektronik)
DA
Nu avem date precise8,03 DM (ASA Micros)
DA
Nu avem date precise
Grad de pregatire
proiectant: calat pentru
microcontroller-ul respectiv Nu avem date precise Nu avem date precise
Suport de dezvoltare12: DA DA
Strategia firmei: NU NU
Timpul preconizat pentru
dezvoltarea aplica ției NU NU
Ce concluzii putem trage în urma analizei acestui tablou cu caracteristici
ale celor dou ă procesoare și nu numai?
Putem stabili factori de pondere corespunz ători fiec ărui parametru (ace ști
factori trebuie preciza ți de c ătre fiecare proiectant în parte) și putem calcula
coeficientul de eficien ță al implement ării produsului.
Un aspect deseori esen țial îl constituie preg ătirea proiectan ților, experien ța
lor anterioar ă și timpul în care se preconizeaz ă dezvoltarea aplica ției. Rubricile la
care nu se poate r ăspunde de la început (vezi cele ce con țin “NU”) pot influen ța
substan țial eficien ța deciziei, c ăci, spre exemplu, preg ătirea unui specialist în
domeniu presupune timp și bani suplimentari pe care nu întotdeauna îi avem. (vezi
rubrica “strategia firmei”).

7 Intrările pot fi conectate intern ca intr ări inversoare/neinversoare ale unui comparator
analogic, ie șirea acestuia fiind accesibil ă soft, ca bitul 6 al portului 3 al microcontroller-ului
8 Mod de func ționare în care procesorul consum ă puțin căci reduce tensiunea de alimentare
pe liniile porturilor și opre ște execu ția instruc țiunilor. Accept ă întreruperile ca modalitate
de ie șire din stare dat ă
9 Reduced Set Instruction Computer, deci microcontroller cu set redus de instruc țiuni
10 ICSP prescurtare a “In Circuit Serial Programming”, este facilitatea prin care utilizând
drept linii de conexiune liniile microcontroller-ului se poate realiza programarea memorieiflash a circuitului f ără ajutorul unui programator specializat
11 Mod de func ționare în care procesorul nu execut ă instruc țiuni și se izoleaz ă electric în
raportul cu procesul controlat. Ie șirea din starea dat ă se face doar printr-un RESET hard.
12 Exprim ă existen ța atât a sistemelor de dezvoltare, a resurselor de programare: asamblor,
link-editor, translator, emulator, simulator cât și a programelor de proiectare asistat ă a
implement ării.

7. Aplica ții 193
Alte informa ții privind microcontroller-ele familiei PIC de la Microchip
găsiți la urm ătoarele adrese:
Don McKenzie: http://www.dontronics.com/dtlinks.html
Adam Davis: http://www.ubasics.com/adam/pic/piclinks.shtml
Sam Powell: http://come.to/thepicarchive
Brian Lane: http://www.nexuscomputing.com/~picarchive/
Richard Spencer: http://engmtasd.derby.ac.uk
Michael Covington: ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/
Steve Walz: ftp://ftp.armory.com/pub/user/rstevew/PIC/DaveTait/
http://www.tinaja.com/pic500.html
Iar pentru familia I805 1 la adresele:
www.8052.com
www.intel.com
www.atmel.com
www.philips.com
www.hitachi.com
7.2 IMPLEMENTAREA INTERFE ȚELOR LA
PROCES
În acest paragraf vom aborda câteva aplica ții care presupun folosirea
convertoarelor analog-digitale și a celor digital-analoge în aplica ții de comand ă și
control.
În acest sens vom exemplifica interfa țarea sistemelor cu urm ătoarele tipuri
de convertoare:
1. Convertoarele analog – digitale controlabile serial
2. Convertoarele analog – digitale controlabile paralel
3. Convertoarele analog – digitale complexe
4. Convertoarele digital – analoge controlabile serial
5. Convertoarele digital – analoge controlabile serial.
Vom prezenta pentru fiecare dintre aceste cazuri atât aspectele legate de
implementarea hardware, inclusiv caracteristicile convertoarelor, cât și aspectele ce
țin de implementarea software.

194 MICROCONTROLLERE
7.1.1 Convertoare A/D controlabile serial
Pentru primul exemplu, am ales un convertor reprezentativ pentru
domeniul achizi ției de semnale din cadrul instala țiilor industriale, și anume:
ADS7822, convertor cu regsitru de aproxima ții succesive a c ărui schem ă o dăm în
figura 7. 10.
Convertorul prezint ă un amplificator de instrumenta ție pe intrare la care
ambele intr ări sunt accesibile din exterior. Registrul cu aproxima ții succesive SAR
(Succesive Aproximation Register ), controlat de c ătre semnalele de interfa țare
CS#/SHDN declan șează și apoi controleaz ă procesul de conversie, aplicând
succesiv combina țiile ce implementeaz ă metoda diviz ării intervalului în aflarea
valorii digitale corespunz ătoare semnalului de pe intrare. Domeniul de m ăsurare
este setat de c ătre valoarea tensiunii sursei de referin ță externe ce aplic ă tensiunea
stabilizat ă pe intrarea V REF. Comparatorul întoarce la fiecare tact al convertorului
rezultatul compara ției și astfel împreun ă cu logica de control realizeaz ă trecerea la
testarea urm ătorului bit. Convertorul va realiza în 12 ciclii testarea fiec ărui bit de
informa ție sincron cu semnalul de ceas DCLOCK, începând cu al 1,5-lea impuls de
ceas (perioad ă de e șantionare, caracteristic ă acestui convertor) dup ă care
informa ția va fi disponibil ă bit de bit începând cu bitul cel mai semnificativ pe
ieșirea D OUT a circuitului. “L ățimea implusurilor” (durata acestora), nu trebuie s ă
fie mai mic ă de 400ns, circuitul acceptând astfel frecven țe de ceas cuprinse între
Figura 7. 10 Schema bloc a circuitului ADS7822 – convertor analog – digital cu registru
de aproxima ții succesive

7. Aplica ții 195
10KHz și 1,2 MHz, ceea ce corespunde unor rate de e șantionare a semnalului
analogic cuprinse între:625 Hz și respectiv 75kHz.
Impulsurile corespunz ătoare de ceas sunt oferite de conexiunile pe care le
vom realiza între convertor și microcontroller. Am ales tot microcontroller-ul
Atmel, având în vedere simplitatea schemei ce implementeaz ă aplica ția și faptul c ă
acesta prezint ă dou ă canale num ărătoare temporizatoare ceea ce favorizeaz ă
aplica ția. Timing-ul este prezentat în figura 11, iar schema de conectare în figura
12.
Vom utiliza canalul 1 al circuitului drept generator al ratei de transmisie
serial ă a datelor, iar canalul 0 drept generator al frecven ței de ceas necesar ă
convertorului A/D.
Formarea semnalului DCLOCK va fi realizat ă soft, prin generarea ratei de
achizi ție, programând corespunz ător canalul respectiv. Aici este momentul s ă
facem câteva comentarii.
Figura 7. 11 Timing-ul (e șalonarea în timp) semnalelor de comand ă pentru circuitul
ADS7822
P1.5
P1.4
P1.7CS#
DCLOCK
DOUTRxD
TxDAT89C205 1ADS7822
Figura 7. 12 Structura sistemului de achizi ție – schem ă simplificat ă

196 MICROCONTROLLERE
Dacă microcontroller-ul func ționeaz ă la o frecven ță de ceas de 24MHz,
teoretic frecven ța maxim ă pentru semnalul DCLOCK ar trebui s ă fie de 1MHz, dar
va trebui s ă ținem cont de alte câteva “am ănunte”, și anume:
• Întârzierea datorat ă procesului de servire a întreruperilor, care în acest
care este de minimum 7 µs.
• De întârzierea datorat ă execu ției instruc țiunilor rutinei de servire a
întreruperilor
• De întârzierile (care pot fi aleatorii) datorate proceselor de schimb de
informa ție concurente procesului de achizi ție, cum ar fi procesul de
transfer serial al datelor c ătre sistemul ierarhic superior, alte procese ce
concur ă la buna func ționare a sistemului, etc.
În final, vom specifica cum se calculeaz ă frecven ța maxim ă de ceas
corespunz ătoare achizi ției de semnal.
În figura 7. 13 dăm structura principalelor fluxuri de informa ție în cadrul
sistemului propus.
Proiectarea programelor în cazul astfel specificat, implic ă:
Inițializarea de sistem, ceea ce presupune:
• Resetarea memoriei sistemului,
• Setarea valorilor corespunz ătoare frecven ței de achizi ție,
• Scrierea rutinelor de servire a întreruperilor
• Implementarea transferului semnalului de ceas c ătre convertorul A/D
• Implementarea achizi ției datelor de la convertorSTART
INIȚIA LIZA REA
SISTEM ULUI
S-A PRODUS UN
EVENIMENTAșteapt ă
Servire întrerupere
corespunz ătoare UART,
respectiv RI sau TIServire întrerupere
corespunz ătoare canalului T0
Im plem enteaz ă achizi țiaÎntre rupere Între rupere
Figura 7. 13 Structura soft-ului aferent sistemului

7. Aplica ții 197
• Implementarea buffer-elor de intrare/ie șire
• Implementarea transferului serial al datelor, la frecven ța și în condi țiile
dorite.
• Scrierea programului principal, care are ca principal rol, rolul de a
aștepta producerea unor evenimente.
Dăm în continuare programul ce implementeaz ă aplica ția.
;Rutina de servire a întreruperilor corespunz ătoare achizi ției de semnal
;Realizeaz ă achizi ția unei date în cadrul ei, necesit ă urm ătoarele loca ții:
CT_H EQU 11H
CT_L EQU 00H
SET_UART EQU 5CH ;Setarea parametrilor interfe ței seriale
SET_TIMER EQU 2 1H
;Setarea modului de func ționare pentru timer-ele microcontroller-ului
SET_T 1 EQU 0FDH
;Setarea constantei de timp pentru rata de transfer a UART
DSEG
ORG 24H
STATUS DATA 00H
CONTOR DATA 00H ;Loca ția memoreaz ă nr. de pasi la achizi ție
DATA_REC DATA 00H ;Loca ția memoreaz ă comanda venita via UART
DATA_LSB DATA 00H ;Loca ție byte mai pu țin semnificativ
DATA_MSB DATA 00H ;Loca ție byte mai semnificativ
BSEG
TRS_MSB BIT 10H
;Specific ă necesitatea transferului celui mai semnificativ byte al datei achizi ționate
REC_EN BIT 11H
;Specific ă recep ția complet ă a unui caracter, caz în care programul principal îl va
;analiza generând ecourile specifice comenzii primite
;Rutina de servire a întreruperilor corespunz ătoare canalului 0 temporizator
;In cadrul programului principal se vor seta:;rata de e șantionare prin setarea constantei de timp
;modul de achizi ție: 1.un singur punct / 2. puncte multiple
CSEG
ORG 0H
JMP MAIN
ORG 0BH
ISR_T0:
(24) PUSH PSW ;Salvez contextul respectiv registrele PSW și ACC
(24) PUSH ACC
(12) SETB PSW.3
;Schimb bancul tin ță de registre generale cu bancul 1
(12) MOV TH0,#CT_H
(12) MOV TL0,#CT_L

198 MICROCONTROLLERE
;Reîncarc ă constantele de timp și redecla șează temporizarea corespunz ătoare
(12) CLR IE. 1 ;Reseteaz ă flag-ul de întrerupere corespunz ător
canalului 0
(12) SETB P 1.5
(12) CLR P 1.5 ;Activeaz ă CS# pentru accesul la convertor
(12) CLR P 1.4
;Reseteaz ă DCLOCK pentru 1 ms. Formeaz ă DCLOCK =0
(12) SETB P 1.5 ;Formeaz ă DCLOCK = 1
(12) CLR P 1.5 ;Formeaza DCLOCK =0
;S-a încheiat perioada de e șantionare pentru convertor. Urmeaz ă citirea datelor
;Aceasta presupune urm ătoarele: DCLOCK= 1, Incrementeaz ă contor,DCLOCK=0,
;Cite ște data. Num ărul de cicluri este de 13 având în vedere c ă prima valoare citit ă
;de la CAD este 0
(12) MOV R0,#8 ;Initializez contor
(12) MOV A,#00H;Resetez ACC
LOOP_MSB:
180/12=15µµµµS este timpul cât dureaz ă execu ția instruc țiunilor de mai sus
(12) SETB P 1.4 ;Formeaza DCLOCK = 1
(12) CLR P 1.4 ;Formeaza DCLOCK =0
(24) JNB P 1.7,CLR_BIT8
(12) SETB ACC.0
CLR_BIT8:
(12) RL A
(24) DJNZ R0,LOOP_MSB
(12) MOV DATA_MSB,A ;Salvez bi ții 4 la 12 achizi ționați
(12) MOV R0,#4 ;Ini țializez contor
(12) MOV A,#00H;Resetez ACC
180/12=28,5µµµµS este timpul cât dureaz ă execu ția instruc țiunilor de mai sus
LOOP_LSB:
(12) SETB P 1.4 ;Formeaza DCLOCK = 1
(12) CLR P 1.4 ;Formeaza DCLOCK =0
(24) JNB P 1.7,CLR_BIT0
SETB ACC.0
CLR_BIT0:
(12) RL A
(24) DJNZ R0,LOOP_LSB
(12) MOV DATA_MSB,A ;Salvez bi ții 0 la 3 în DATA_LSB
;Am achizi ționat to ți cei 12 biți oferi ți de ADS7822
180/12=14,5µµµµS este timpul cât dureaz ă execu ția instruc țiunilor de mai sus
(12) SETB P 1.5 ;Inactivez CS#
;Formez rezultatul conversiei
(12) MOV A,DATA_MSB
(12) SWAP A
(24) PUSH ACC

7. Aplica ții 199
(12) ANL A,#0F0H ;Maschez LSB=bi ții 4-7 ai LSB
(12) ORL A,DATA_LSB
(12) MOV DATA_LSB,A ;Formez primii 8 bi ți ai datei convertite
(24) POP ACC
(12) ANL A,#0FH ;Maschez cel mai seminificativ semibyte
(12) MOV DATA_MSB,A ;Formez urm ătorii 4 bi ți -cei mai
;semnificativi
(24) POP PSW ;Refac starea PSW dinaintea intr ării în întreruperi
(24) POP ACC ;Refac starea ACC dinaintea intr ării în întreruperi
(24) RETI
180/12=8,5µµµµS este timpul cât dureaz ă execu ția instruc țiunilor de mai sus
66,5µµµµS ESTE TIMPUL TOTAL CORESPUNZ ĂTOR ISR _T0
;Rutina de servire a întreruperilor corespunz ătoare UART
;Sistemul va transmite date doar la cererea sistemului ierarhic superior și
;numai maximum doi bytes
ORG 23H
ISR_SI:
(24) JB RI,REC ;Testare dac ă a fost recep ționat un caracter
TRS: ;NU! Intrerupere la transmisie
(12) CLR TI
(12) JNB TRS_MSB,END_TRS;Test dac ă mai sunt de transmis date
(12) MOV SBUF,DATA_MSB ;Transfer MSB data achizi ționat ă
(12) CLR TRS_MSB
END_TRS:
(24) RETI
REC:
(12) CLR RI
(12) MOV DATA_REC,SBUF ;Scriu data în buffer-ul de recep ție
(12) SETB REC_EN ;Specific recep ția unui caracter
(24) RETI
MAIN:
CALL INIT ;Rutina de initializarea a sistemului
LOOP:
JNB REC_EN,LOOP
ANALIZA:
MOV A,#'A' ;Incarc ă primul caracter utilizat drept comanda
CJNE A,DATA_REC,CONTINUE0CALL INIT_ACHIZITIE
JMP LOOP
CONTINUE0:
;Aici pot fi inserate celelate teste pentru comenzile pe care le instituim prin
protocol;… … …
NOP

200 MICROCONTROLLERE
INIT_ACHIZITIE:
;Rutina de initiere a achizitiei datelor trebuie sa valideze intreruperile
;corespunzatoare canalului 0 si sa incarce constanta de timp corespunzatoare
;ratei de esantionare
MOV TH0,#CT_H
MOV TL0,#CT_L
SETB TR0SETB T0
RET
INIT:
;Rutina de ini țiere de sistem. Nu mai detaliem ini țializarea memoriei
MOV IE,#90H ;Ini țializez întreruperile corespunz ătoare UART
MOV PSW,#0 ;Ini țializez PSW
MOV SCON,#SET_UART ;Ini țializez UART
MOV TMOD,#SET_TIMER
;Setez modurile de func ționare ale timer-elor
MOV TL 1,#0
MOV TH 1,#SET_T 1;Setez constantele de timp
RET
Să observ ăm c ă dac ă calcul ăm timpul de execu ție corespunz ător
instruc țiunilor rutinei de servire a întreruperilor la achizi ția datelor în cazul unei
frecven țe de ceas de 24 MHz ob ținem o durat ă de 66,5 µs, adic ă frecven ța maxim ă
de achizi ție este de: 15.037 Hz. Putem constata c ă și în situa ția în care am utilizat
facilit ățile hard de sincronizare, respectiv sistemul de întreruperi totu și viteza de
achizi ție este puternic legat ă de modul de implementare prin program a acesteia,
deci acest aspect va trebui cu cea mai mare grij ă analizat și proiectat.
Observ ăm că dac ă am fi utilizat la achizi ția datelor de la convertorul
analog-digital facilitatea interfe ței UART a microcontroller-ului (vezi modul 0 de
func ționare) am fi putut cre ște frecven ța maxim ă de achizi ție aproape de limita
superioar ă corespunz ătoare convertorului analog-digital. În acest caz, observ ăm că
ar fi fost necesar s ă recep ționăm sincron doi octe ți, ceea ce ar fi dus la consumarea
unui timp de aproximativ 16 ciclii de ceas, adic ă la 24 MHz timpul de achizi ție ar
fi fost de 8 µs, ceea ce corespunde unei rate de e șantionare de 125000Hz ceea ce
evident c ă dep ășește frecven ța maxim ă admisibil ă a convertorului. Evident, în
acest caz am fi renun țat la utilizarea UART drept port de leg ătură cu sistemul
ierarhic superior.

7. Aplica ții 201
7.1.2 Interfa țarea paralel ă a convertoarelor A/D
În acest scop vom utiliza convertorul ADS782 1 convertor cu registru de
aproxima ții succesive de 16 biți. Câteva date tehnice importante: frecven ța maxim ă
100 kHz, domeniul tensiunilor de intrare: 0 la 5 V, poate utiliza atât o referin ță de
tensiune intern ă, cât și una extern ă, poate fi conectat direct la un bus de sistem.
Schema bloc a sa este prezentat ă în figura 7. 14.
Pentru a-l putea conecta, este necesar s ă cunoa ștem care este modul de
func ționare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur ă
citirea rezultatului sau declan șarea conversiei, semnalul CS# permite trecerea bus-
ului din starea High Impedance într-una din st ările 1 sau 0 logic, semnalul BYTE
permut ă magistralele low/high de ie șire, iar linia BUSY# semnaleaz ă situa ția în
care convertorul se g ăseșt e î n f a z a d e e șantionare și conversie a semnalului
analogic.
Pentru a realiza conversia de semnal va trebui s ă cunoa ștem care este
succesiunea de semnale de comand ă. Combina țiile posibile sunt prezentate în
tabelul I.
Figura 7. 14 Structura convertorului analog-digital ADS782 1, cu ie șire paralel ă de date

202 MICROCONTROLLERE
Astfel aplicând
simultan un 0 logic pe
liniile CS# și R/C# și
menținând cel pu țin 40
ns linia R/C# în zero
logic realiz ăm
eșantionarea și
conversia semnalului
analogic. Semnalul
BUSY va sta în zero
logic din momentul
inițierii conversiei și
până la momentul la
care aceasta s-a
încheiat. Convertorul îl
va aduce automat pe 1
logic, moment la carevaloarea numeric ă
corespunz ătoare
semnalului de intrare va
fi valid ă pe ie șirea
convertorului.
Linia BYTE va permuta bi ții inferiori și superiori ai rezultatului. Astfel dac ă
BYTE=0, pinii de ie șire ai convertorului de la 6 la 13 vor scoate semi-byte-ul mai
semnificativ, pentru ca dac ă BYTE = 1, aceia și pini s ă rețină cei mai pu țini 8 bi ți ai
rezultatului conversiei.
Structura schemei electrice este gândit ă pentru procesorul AT89C205 1, în
urma analizei resurselor pe care acesta le posed ă, precum și a necesit ăților datorate
convertorului analog-digital ADS782 1 (figura 7. 15).
AT89C205 1ADS782 1P3.4
P3.5
P3.7CS#
R/C#
BYTE
P3.2 BUSY
P1.0-7 6-13TxD
RxD
Figura 7. 15 Schema de conectare

7. Aplica ții 203
Strategia urmat ă va consta în:
1. declan șarea conversiei prin resetarea liniilor CS# și R/C#
2. trecerea dup ă mai mult de 40 ns a semnalului R/C#în 1 logic
3. citirea rezultatului atunci când linia BUSY# va trece în 1 logic.
Pentru implementarea achizi ției vom putea folosi atât unul cât și
celălalt dintre controller-e.
Să analiz ăm avantajele și dezavantajele acestor implement ări.
Legând liniile CS#, R/C# și BYTE la portul 3 al microcontroller-ului nu
afect ăm func ționalitatea acestuia c ăci cele dou ă canale temporizatoare le vom
folosi, unul pentru generarea ratei de e șantionare a semnalului analogic, iar cel ălalt
drept generator al frecven ței de ceas pe linia serial ă de date a UART.
Liniile portului P 1 sunt direct conectate la liniile 6 la 13 ale convertorului.
Eșalonarea în timp a evolu ției semnalelor este dat ă în figura 7. 16.
Semnalul byte permut ă pe acela și grup de 8 linii de ie șire byte-ul mai semnificativ
cu cel mai pu țin semnificativ, func ție de nivelul logic 1, respectiv 0 logic.
Pentru achizi ția datelor va trebui s ă aloc ăm resursele disponibile ale
microcontroller-ului astfel:
1. rutina de servire a întreruperilor corespunz ătoare semnalului BUSY, astfel
ca pe frontul pozitiv al acestuia s ă se declan șeze rutina de servire. (vezi
declan șarea se face pe frontul descresc ător, iar starea de interes la achizi ție
este starea corespunz ătoare frontului cresc ător, deci am introdus un inversor).
2. rutina de start al conversiei A/D –rutina de servire corespunz ătoare
întreruperilor timer overflow de la canalul 0.
3. vom scrie rutina de servire a întreruperilor corespunz ătoare UART
Figura 7. 16 Eșalonarea în timp a semnalelor de comand ă pentru interfa ța
ADS782 1

204 MICROCONTROLLERE
4. vom proiecta rutina de ini țializare
5. vom scrie programul principal de func ționare ce cuprinde rutina de analiz ă
a informa țiilor vehiculate prin UART
Programul ce implementeaz ă aceast ă aplica ție a considerat urm ătorul
protocol:
• Caracterul „A” reprezint ă comanda de achizi ție necondi ționat ă a datei
• Caracterul „C” reprezint ă comanda de achizi ție continu ă cu o rata fix ă
de e șantionare, aprioric stabilit ă prin constantele de timp CT_L și
CT_H a datelor
• Caracterul „D” reprezint ă comanda de transfer a datei achizi ționate via
interfa ța UART.
Dăm în continuare programul:
CT_L EQU 00H
CT_H EQU 80H
CT_SMOD EQU 2 1H;
CT_ST EQU 55H ;
CT_SSCON EQU 5CH ;
;Valori pentru constanta de timp necesara la declansarea conversiei semnalului
analogic
DSEGBSEG
RX BIT 10H ;Specifica receptia unui caracter
TX BIT 11H ;Specifica necesitatea transferului DATA_LSB
DE BIT 12H ;Specifica existenta unei date achizitionate
DATA_UART DATA 30H ;Locatie data receptionata pe UARTDATA_LSB DATA 3 1H ;Locatie LSB data achizitionata
DATA_MSB DATA 32H ;Locatie MSB data achizitionata
CSEG
;ISR_EXT0 Rutina de servire a intreruperilor corespunzatoare achizitiei de la CAD
ORG 0HJMP MAIN
JMP ISR_EXT0
ORG 0BH
JMP ISR_T0
ORG 23H
JMP ISR_SI
ISR_EXT0:
PUSH PSW ;Salveaza starea UC
SETB PSW.3
;Seteaza bancul 1 de regsitrii generali, ca registrii "tinta"
MOV DATA_MSB,P 1 ;Salveaza partea mai
semnificativa a datei

7. Aplica ții 205
SETB P3.7 ;Comanda switch-area bytes: LSB <-
>MSB
MOV DATA_LSB,P 1;Salveaza partea mai putin semnificativa a
datei
SETB DE
POP PSW ;Reface starea UC
RETI ;Iese din ISR
;ISR_T0 Rutina de servire a intreruperilor corespunzatoare frecventei de
esantionare
ISR_T0:
PUSH ACC ;Salveaza acumulatorul
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0
POP ACC ;Reface acumulatorul
SETB P3.5 ;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizare
RETI ;Iese din ISR
;ISR_SI Rutina de servire a intreruperilor corespunzatoare UART
ISR_SI:
JB RI,RECEPTIE ;Testare intrerupere la receptie
;NU! Intrerupere la transmisie
TRANSMISIE:
CLR TI ;Sterg flag pentrua reanclasa intreruperea
JB TX,SCRIE ;Test daca trebuie sa transmit si LSB
;NU!
RETI ;Iesire din ISR
SCRIE:
MOV SBUF,DATA_LSB ;Scriu LSB
CLR TX ;Sterg flag atentionare transfer via UART
a LSB
RETI ;Iesire din ISR
RECEPTIE:
CLR RI ;Sterg flag receptie data pe UART
MOV DATA_UART,SBUF ;Citesc data receptionata pe linia
seriala
SETB RX ;Semnalez receptia si citirea dateiRETI
;Programul principal de functionare a sistemului
MAIN:
CALL INIT
LOOP:

206 MICROCONTROLLERE
MOV A,DATA_UART
CJNE A,'A',TEST 1
;Comanda SOC ("Start Of Conversion")
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ;
SETB P3.5
TEST 1:
CJNE A,'C',TEST2
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ;POP ACC ;Reface acumulatorul
SETB P3.5 ;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizareSETB TR0 ;Validez impulsurile catre temporizator –
canalul 0-
SETB IE. 1 ;Validarea intreruperilor "timer 0
overflow"
TEST2:
CJNE A,'D',FINAL
SETB DE
FINAL:
JNB DE,LOOP
INIT_TRS:
JB TI,INIT_TRS
MOV SBUF,DATA_MSBSETB TX
CLR DE
JMP LOOP
INIT:
MOV R0,7FH
LP:
MOV @R0,#0H
DJNZ R0,LP
;Reseteaza memoria interna a controller-ului
MOV SP,#60HMOV TMOD,#CT_SMOD
MOV TCON,#CT_ST
MOV SCON,#CT_SSCON
MOV IE,#9 1H
MOV P3,#0FFH

7. Aplica ții 207
RET
END
Locatarea variabilelor și a registrelor utilizate de c ătre aplica ție este dat ă pe CD.
7.1.3 Convertoare A/D complexe
Sistemele de achizi ție ce cuprind convertoare analog-digitale complexe
sunt utilizate în aplica ții cum ar fi achizi ția semnalelor în tensometrie, în domeniul
medical, în domeniile ce necesit ă frecven țe de e șantionare relativ reduse (de
maximum câ țiva KHz) și rezolu ții ridicate (de la 18 la 24 de bi ți).
Dintre realiz ările tehnologice actuale ne vom opri asupra circuitului
ADS 1211, cap de serie al convertoarelor de înalt ă rezolu ție al firmei Burr-
Brown/Texas Instruments.
Structura acestuia este prezentat ă în figura 7. 17.
Circuitul ADS 1210/1211 este un convertor analog-digital cu un domeniul
de intrare deosebit de larg.
Ofer ă o rezolu ție de 24 de bi ți, cu facilitatea de autocalibrare și de
multiplexare intern ă diferen țială pentru 4 canale distincte în cazul ADS 1211.
Circuitul posed ă un amplificator cu amplificare programabil ă digital
(PGA), un modulator sigma-delta de ordinul 2, un filtru digital programabil care
Figura 7. 17 Structura convertorului sigma/delta ADS 1210

208 MICROCONTROLLERE
include un microcontroller ce dispune de regi ștrii de instruc țiuni, comenzi, precum
și de regi ștrii de date, offset și calibrare la cap ăt de scal ă.
Referin ța de tensiune este intern ă și setabil ă digital cu valori de pân ă la
2,5V. Func ționarea detaliat ă a convertorului este prezentat ă în foaia sa de
catalog. (www.burr-brown.com) unde sunt detaliate și modurile sale de
func ționare. Dou ă sunt tipice: master mode (MODE= 1) -caz în care convertorul are
inițiativa transferului datelor achizi ționate imediat dup ă faza de ini țializare și slave-
mode, (MODE=0)caz în care ini țiativa și frecevn ța de ceas sunt oferite de c ătre
controller-ul magistralei de conexiune.
În figura 7. 18 dăm diagramele de timp pentru cazul în care circuitul este
conectat ca element slave (pinul MODE este plasat pe 0 logic) pe bus.
Schema de conectare aleas ă permite realizarea tuturor modurilor de
func ționare pentru convertor, respectiv atât a modului "slave" cât și a modului
"master". De asemenea prin controlul liniei CS# este posibil ă inserarea mai multor
convertoare pe acela și bus și adresarea acestora. În figura 7. 19 este prezentat ă
aceast ă schem ă.
Figura 7. 18 Diagramele de timp corespunz ătoare interfe ței seriale
Figura 7. 19 Schema electric ă simplificat ă a interfe ței CAD-ADS 1210 microcontroller I805 1

7. Aplica ții 209
Pentru a putea scrie programele de ini țializare și cele de achizi ție este
necesar s ă cunoa ștem structura regi ștrilor interni ai convertorului.
Registrul de instruc țiuni este cel prin intermediul c ăruia se controleaz ă
transferul informa țiilor și are structura:
INSTR
R/W# MB 1 MB0 0 A3 A2 A 1 A0
Bitul R/W# specific ă tipul opera ției: de citire/scriere respectiv 1/0 logic.
Biții MB 1 și MB2 codific ă num ărul de octe ți de comand ă pe care circuitul îi va
recep ționa, via interfa ța serial ă: combina ția 00 corespunde unui octet, 0 1 la doi
octeți, 10 la 3 octe ți și 11 la 4 octe ți transmi și succesiv.
Biții A3,A2,A 1,A0 adreseaz ă regi ștrii interni ai convertorului, conform tabelului
alăturat.
Circuitul este astfel conceput încât dup ă fiecare sesiune de scriere
adreseaz ă implicit, din nou, regsitrul de instruc țiuni.
Odat ă decla șată, spre exemplu achizi ția datelor, acestea vor fi emise
autonom, func ție de set ările stabilite.
Registrele de comenzi permit setarea parametrilor de achizi ție pentru
convertorul analog-digital. Între ace știa amintim: rata de e șantionare în
concordan ță cu frecven ța de decimare și câștigul amplificatorului de pe intrare
obținute pe convertor, canalul selectat, formatul datelor, sursa pentru tensiunea de
referin ță și modul de achizi ție: unipolar sau bipolar, ordinea de emisie a datelor
începând cu LSB (Last Signifiant Bit) sau cu MSB (Most Signifiant Bit). Setarea
modurilor de func ționarese face conform structurii de bi ți de comand ă urm ători.

210 MICROCONTROLLERE
Byte 3 (MSB)
BIAS REF DF U/B# BD MSB SDL DRDY/
DSYNC#
O = Off 1 = On 1 =comp 2 0=
Bipolar0= MSB 0=MSB 0=SDIO 0
Valorile trecute pe a doua linie sunt cele implicite.
• Pentru valoarea 0 a bitului BIAS, tensiunea de referin ță este de 2,5V, iar pentru
valoarea 1 ea este 1,33*2,5V adic ă aproximativ 3,3V.
• Un 1 logic pe bitul REF asigur ă utilizarea sursei interne de referin ță, iar 0
aduce în starea de mare impedan ță aceast ă surs ă, permitând utilizarea unei
surse de referin ță externe.
• DF exprim ă formatul datelor, 0 implic ă formatul datelor în complement fa ță de
doi +FSR=7FFFFFH, 0=000000H, iar -FSR=800000H (FSR este abreviereascalei complete "Full Scale Range").
• U/B# exprim ă când este 0 achizi ția bipolar ă a datelor, iar când este 1 exprim ă
achizi ția unipolar ă a acestora.
• BD exprim ă ordinea de transfer a bytes, setând bitul ordinea este cresc ătoare
de la LSB c ătre MSB și invers dac ă-l reset ăm.
• MSB exprim ă cine este primul bit emis în cadrul fiec ărui byte, 1 implic ă
transferul întâi al bitului cel mai nesemnificativ, iar 0 implic ă transferul întâi al
bitului cel mai semnificativ.
• SDL comand ă utilizarea a unei linii bidirec ționale seriale (SDIO) dac ă este
resetat, respectiv a dou ă linii seriale dac ă este setat (SDIO pentru comenzi și
SOUOT pentru date)
• DRDY# exprim ă resetat prezen ța datelor (Data Ready), iar setat exprim ă date
invalide.
Byte 2
MD2 MD 1 MD0 G2 G 1 G0 CH 1 CH0
Acest byte seteaz ă, modurile de func ționare, codate binar de la 0 la 7, valorile
câștigului și selecteaz ă canalul de intrare pentru achizi ția de semnal.
Modurile de func ționare codate binar sunt în ordine, începând de la 000H
următoarele:
1. Normal,
2. "Self calibration" calibrare automat ă,
3. Calibrare de offset,
4. Calibrare la cap ăt de scal ă,
5. "Pseudo-calibrare",
6. Calibrare în fundal "background calibration",
7. "Sleep" și
8. Rezervat -neutilizat.

7. Aplica ții 211
Byte 1
SF2 SF 1 SF0 DR 12D R 11 DR10 DR9 DR8
SF2, SF 1, SF0 selecteaz ă una dintre valorile modului turbo de func țioare a
circuitului, iar valorile DR 12 la DR0 seteaz ă frecven ța de decimare pentru filtrul
digital al convertorului.
Byte 0
DR7 DR6 DR5 DR4 DR3 DR2 DR 1 DR0
În modul de conectare ce utilizeaz ă liniile SDIO și SDOUT convertorul
poate fi controlat dinamic, respectiv poate lucra în modul de citire continu ă,
admitând în acela și timp comenzi prin intermediul liniei SDIO și generând date via
linia SDOUT. (vezi documenta ția firmei Burr – Brown, memorat ă pe CD)
Implementarea unui ciclu descriere a comenzilor în modul slave presupune
îndeplinirea urm ătorilor pa și:
1. Așteapt ă ca ADS 1211 să plaseze DRDY# pe zero logic
2. Așteapt ă ca CS# s ă treac ă la rândul s ău în zero logic
3. Genereaz ă 8 cicluri de ceas pentru a trece în instruction register data de
configurare via SDIO
4. Genereaz ă n ciclii de ceas de transmisie pentru înscrierea regi ștrilor țintă ai
comenzilor (vezi documenta ția la ADS 1210 ads 1210.pdf de la Burr-Brown)
5. Ads1210 pune pe 1 logic DRDY
Repet ă pașii 3 la 5 pân ă la transmiterea tuturor cuvintelor de comand ă
către ADS 1210, dup ă care intr ă în ciclul/ciclurile de citire a datelor, ceea ce
presupune:
1. Așteapt ă ca ADS 1211 să plaseze DRDY# pe zero logic
2. Așteapt ă ca CS# s ă treac ă la rândul s ău în zero logic
3. Dacă este în modul citire continu ă (Continous Read), trece la pasul 5
4. Microcontroller-ul genereaz ă 8 ciclii de ceas și transfer ă cuvântul de
control în registrul de instruc țiuni via SDIO
5. Dacă utiliz ăm SDIO drept linie bidirec țional ă vom urm ării evolu ția
acesteia în continuare, dac ă nu, atunci linia SDIO trece în starea de
mare impedan ță
6. Microcontroller-ul emite n ciclii de ceas ( n multiplu de 8) și
transmite/recep ționeaz ă informa ția din registrul specificat prin
instruc țiunea de la punctul 4. Recep ția acestor bi ți se face pe linia
SDOUT sau SDIO dup ă caz.
7. SDOUT sau SDIO intr ă în starea de mare impedan ță, dup ă ce a
transmis informa ția comandat ă

212 MICROCONTROLLERE
8. Testare dac ă mai sunt de transmis alte comenzi sau cereri de date.
Dacă dadadada se reia ciclul de la punctul 2. CS# r ămâne inactiv 10,5 ciclii
de ceas.
Programul de mai jos prezint ă câteva rutine, ca de transfer a unui cuvânt de
comand ă, precum și cea de citire a unei date format ă din trei octe ți. Programarea
microcontroller-ului va fi specific ă pentru fiecare aplica ție în parte, ea trebuind s ă
realizeze adaptarea parametrilor convertorului în raport cu rezolu ția și rata de
eșantionare impuse de aplica ție.
Programul de func ționare permite:
1. Sincronizarea transferului comenzilor c ătre CAD;
2. Generarea soft și emiterea semnalului de ceas (SCLK), c ătre CAD
3. Transferul informa țiilor de ini țializare și a comenzilor c ătre CAD
4. Recep ția datelor corespunz ătoare semnalului analogic convertit
Iată acest program:
ORG 28H
PROG: DB 0 1100100B ;Cuvânt de instruc țiuni
DB 0 10000 10B ;Cuvânt de C-d ă nr. 3
DB 00000000B ;Cuvânt de C-d ă nr. 2
DB 00000000B ;Cuvânt de C-d ă nr. 1
DB 00000000B ;Cuvânt de C-d ă nr. 0
;Cuvântul de instruc țiuni asigur ă scrierea cuvintelor de comand ă 3, 2, 1 și 0
DB 11000000
;Cuvântul asigur ă citirea celor 3 regi ștrii corespunz ători valorii semnalului
analogic convertit
BUFFER: DS 03H
CAD: JB P 1.0,CAD ;Testeaz ă starea CAD, respectiv DRDY#=0
MOV R 1,#04H
MOV R0,#PROG
;Preg ătește transmiterea a 5 octe ți către CAD, ce sunt: cuvântul de instruc țiuni și
;cele 4 cuvinte de comand ă. Cuvintele sunt memorate începând de la adresa PROG
LOOP_ 1: MOV A,@R0
CALL SERIAL_OUTINC R0
DJNZ R 1,LOOP_ 1
CAD 1:J B P 1.0,CAD 1 ;Testeaz ă starea CAD, respectiv DRDY#=0
MOV A,@R0
CALL SERIAL_OUT
LOOP_2: JB P 1.0,LOOP_2
;Așteapt ă conversia datelor de c ătre CAD, semnalul DRDY# va fi resetat
MOV R 1,#03H
MOV R0,#BUFFER
;Preg ătește citirea celor 3 bytes de date, corespunz ători semnalului analogic
LOOP_3:

7. Aplica ții 213
CALL SERIAL_IN
MOV @R0,A
INC R0
DJNZ R 1,LOOP_3
;Încheie un ciclu complet Ini țializare comand ă și achizi ție data convertit ă
SERIAL_OUT: CLR P 1.3
MOV R7,#08HRL A
RL A
LOOP_OUT:
JB ACC.2,SET_OUT
CLR P 1.2
JMP CLOCK_OUT
SET_OUT: SETB P 1.2
CLOCK_OUT: SETB P 1.3
CRL P 1.3 ;Genereaz ă semnalul SCLK
RL ADJNZ R7,LOOP_OUT ;Transfer ă un octet c ătre CAD
RET
SERIAL_IN: CLR P 1.3
MOV R7,#08H
LOOP_IN:
JB P 1.1,SET_IN
CLR ACC.0
JMP CLOCK_IN
SET_IN: SETB ACC.0
CLOCK_IN: SETB P 1.3
CRL P 1.3
RL ADJNZ R7,LOOP_IN ;Recepteaz ă un octet de la CAD
RET
7.1.4 Convertor D/A controlabil serial
Aplica ția pe care o vom descrie în continuare se refer ă la comanda unui
convertor digital – analog cu intrare serial ă, cum ar fi cele utilizate în cadrul
aparaturii audio de înalt ă performan ță. Vom exemplifica aceasta prin circuitul
PCM56 convertor digital-analog de 16 biți. Structura convertorului este dat ă în
figura 7.20. Câteva dintre caracteristicile convertorului sunt: domeniul dinamic depeste 96 dB FSR, nu necesit ă componente externe, 16 biți rezolu ție, eroare liniar ă
sub 0,00 1%, timp de stabilire 1,5 ms, opereaz ă cu tensiuni între ±5V și ±12V. LE

214 MICROCONTROLLERE
"Latch Enable", l ăcătuiește informa ția serial receptat ă și o aplic ă convertorului la
momentul valid ării lăcătuirii.
Data este intrarea de "Date", ce sunt transmise în format complement fa ță
de 2, sincron cu semnalul de ceas "Clock". Am ănunte privind fronturile și
sincronizarea datelor și timming-ul corespunz ător transferului unei date sunt
prezentate în figura 7.2 1. Se constat ă că datele sunt transmise începând cu cel mai
semnificativ octet, frontul negativ realizeaz ă deplasarea acestora la dreapta bit de
bit. Frontul pozitiv reprezint ă f r o n t u l p e c a r e d a t a e s t e m e m o r a t ă în registrul de
deplasare aflat pe intrarea convertorului digital-analog PCM56. Intrarea LE trebuiesă stea pe 1 logic cel pu țin un ciclu de ceas, ea plasându-se pe durata transferului
serial al datelor pe 0 logic. La sfâr șitul transferului ea va fi trecut ă în 1 logic pentru
cel pu țin 1,5 perioade de ceas.
Figura 7. 2 1 Diagramele de timp ce ilustreaz ă comanda convertorului PCM65
Figura 7. 20 Structura convertorului PCM56 (Fabricat de Burr-Brown)

7. Aplica ții 215
Utilizând microcontroller-ul AT89C205 1 vom conecta liniile P 1.7 la linia
Clock, P 1.6 la linia Date, iar P 1.5 la linia LE. D ăm mai jos rutina care realizeaz ă
comanda convertorului.
CT_TMOD EQU 2 1H
;Setare mod functionare canale temporizatoare:
; canalul 0 utilizat pentru rata de e șantionare comand ă programat în modul 1
; canalul 1 utilizat pentru rata de transfer serial programat în modul 2
CT_TCON EQU 50H
;Setez flag-urile de dezinhibare a num ărării pentru canalele 0 & 1
CT_SCON EQU 90H
;Setez modul 1 de transfer serial UART 8 bi ți pilotat cu rata variabil ă de c ătre
;canalul 1 temporizator
CT_LOW0 EQU 00H
CT_HIGH0 EQU 00H
CT_LOW 1 EQU 0FDH
;Constanta de timp corespunz ătoare ratei de 9600 Baud la f ceas=11,059MHz
LEN_BUFFER EQU 20H ;Lungime prestabilit ă a blocului
;de date de transferat. CONTOR_B este mai mic sau egal cu LEN_BUFFER
BSEG
REC BIT 0H
;Flag-ul setat exprim ă recep ția complet ă a unui caracter via UART
RANG_DATA BIT 1H
;Flag ce exprima byte-ul care este transferat c ătre CDA
DSEG
DATA_CDA: DS LEN_BUFFER ;Buffer bloc date
DATA_LOW DATA 00H ;LSB corespunz ător datei de convertit D/A
DATA_HIGH DATA 00H ;MSB corespunz ător datei de convertit D/A
;Loca ții corespunz ătoare datei transferate c ătre CDA în modul transfer cuvânt
DATA_SI DATA 00H ;Buffer de recep ție a datelor (comenzi) via UART
CONTOR_B DATA 00H ;M ărime bloc de date de transferat c ătre CDA
POINTER_D SET DATA_CDA
CSEG
ORG 000H
BOOT:
JMP MAIN
ORG 0BH
ISRT0:
JMP ISR_T0
ORG 23H
ISRSI:
JMP ISR_SI
;Rutina corespunde transferului unui cuvânt c ătre CDA
ISR_T0: PUSH PSW
PUSH ACC ;Salvez starea microcontroller-ului

216 MICROCONTROLLERE
SETB PSW.3 ;Utilizez bancul 1 de regi ștrii generali
CLR P 1.5
;Invalidez LE, => Posibilitate de scriere in buffer-ul de serializare al CDA
MOV R7,08H
;Încarc contor al bi ților de serializat corespunz ător MSB
MOV A,DATA_HIGH ;Încarc MSB
LOOP_CDA 1: RL A ;Rotesc informa ția din Acumulator
CLR P 1.7 ;Reset semnal Clock c ătre CDA
JB ACC.0,SET_BIT_CDA
CLR P 1.6 ;Reset DATA c ătre CDA
CLK_CDA: SETB P 1.7 ;Set semnal Clock c ătre CDA
DJNZ R7,LOOP_CDA 1
JMP CONT
SET_BIT_CDA: SETB P 1.6 ;Set DATA c ătre CDA
JMP CLK_CDA ;Am transmis MSB c ătre CDA, urmeaz ă LSB
CONT: MOV R7,08H
MOV A,DATA_LOW
LOOP_CDA2: RL A
CLR P 1.7 ;Reset semnal Clock c ătre CDA
JB ACC.0,SET_BIT_CDA 1
CLR P 1.6 ;Reset DATA c ătre CDA
CLK_CDA 1:S E T B P 1.7 ;Set semnal Clock c ătre CDA
DJNZ R7,LOOP_CDA 1
SETB P 1.5
;Lăcătuiesc informa ția transferat ă serial în buffer-ul de ie șire al CDA
CLR P 1.5
;Revalidez accesul la buffer-ul de intrare (serial) al CDA
POP ACC
POP PSW ;Refac starea UC dinaintea intreruperii de timpRETI
SET_BIT_CDA 1:
SETB P 1.6 ;Set DATA catre CDA
JMP CLK_CDA 1
ISR_SI:
JB RI,RECEPTIE
TRANSMITE:
CLR TI
RETI
RECEPTIE:
MOV DATA_SI,SBUF
CLR RI
SETB REC
RETI
MAIN:

7. Aplica ții 217
MOV R0,#7FH
LP:
MOV @R0,#00H
DJNZ R0,LP
;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului
MOV SP,70H
;Setez adresa pentru stiva sistemului
CALL INIT
;Realizez initializarile canalelor temporizatoare si a interfetei seriale
MOV IE,#92H
;Validez întreruperile corespunz ătoare canalului 0 temporizator și UART
LOOP:;Se va particulariza programul func ție de protocolul dorit și func ție de
;particularit ățile sistemului
JNB REC,LOOP
;Testare caracter recep ționat și comanda corespunzatoare codului asignat
; …………….
CLR REC
;Reancla șare analiz ă a unui eventual nou caracter recep ționat via UART
JMP LOOP
INIT:
MOV TMOD,CT_TMODMOV TCON,CT_TCON
MOV TL0,#CT_LOW0
MOV TH0,#CT_HIGH0
MOV TL 1,#CT_LOW 1
SETB 0D7H
;Dublez rata de transfer serial a informa țiilor =>PCON.7=SCON= 1
RET
END
7.1.5 Programarea unui sistem de dozare gravimetric ă
dotat cu microcontroller
Aplica ția pe care o prezent ăm reprezint ă un cântar electronic necesar
dozarii materiilor prime pulverulente, bazat pe utilizarea unei balan țe electronice
ce prezint ă o doz ă tensometric ă compensat ă complet cu ajutorul c ăreia se
determin ă greutatea ansamblului cântar și pulbere (figura 7.22).
Sistemul electronic de dozare a materiilor prime pulverulente este format
din dou ă subsisteme principale:
1. Subsistemul mecanic, sub forma unui cântar diferen țial de precizie

218 MICROCONTROLLERE
2. Subsistemul electronic de m ăsurare a tensiunii ap ărute în reazemul
către sistemul de referin ță fix format din cadrul cântarului.
Principiul de func ționare al cântarului dozator este acela de transformare a
greut ății corespunz ătoare materiilor prime pulverulente în semnal electric prin
intermediul unui captor de for ță (Philips PR62 11). Acesta ofer ă un semnal de
tensiune în diagonala unei pun ți tensometrice rezistive care este alimentat ă de la o
sursă de tensiune de referin ță. Sensibilitatea senzorului este de 2mV/V, rezultând la
o înc ărcare egal ă cu cea maxim admis ă, și cu o tensiune de alimentare a pun ții de
5V rezult ă o diferen ță maxim ă de tensiune de 10mV pe diagonala pun ții de
măsurare.
Prelucrarea semnalului analogic de la captorul tensometric este realizat ă în
două trepte de amplificare și filtrare. Pentru semnalul amplificat, – domeniul de
varia ție este 0- 10V – el fiind aplicat unui convertor analog-digital ADS7805
(analog convertorului ADS782 1), de 16 biți ce–l converte ște în semnal digital.
Sistemul digital este coordonat de c ătre un microcontroller de 8 bi ți Philips
PCB80C552 (analog unuia Intel 805 1), ce dispune de 40 de linii digitale de
intrare/ie șire, la care se adaug ă 3 canale num ărătoare/temporizatoare, precum și un
convertor analog/digital de 10 biți intern precum și dou ă ieșiri PWM (Pulse Width
Modulation). Microcontroller-ul posed ă dou ă interfe țe seriale, una standard UARTCONVERTOR
ANALOG-DIGITALPORT
INTRAREAFISAJ SI
TASTATUR Ă
SISTEM DIGITAL
CU MICRO-
CONTROLLERCaptor
TensometricPREAMPLIFICATOR
AMPLIFICATORCÂNTAR
DIFERENTIAL
(PARTEA MECANIC Ă)
Figura 7. 22 Structura dozatorului gravimetric

7. Aplica ții 219
(Universal Asyncronus Receiver Transmiter), și una I2C care asigur ă o rat ă de
transfer mai bun ă de 4Mbi ți/secund ă. Memoria intern ă a controller-ului este de 256
de bytes la care se adaug ă regi ștrii de func ții speciale (Special Function Registers).
Sistemul dispune de dou ă afișoare, unul cu LED-uri cu șapte segmente,
necesar afi șării greut ății măsurate, iar al doilea cu LCD-uri 2x 16 caractere necesar
pentru ghidarea prin intermediul mesajelor a operatorului, precum și o tastatur ă cu
12 taste multifunc ționale.
Memoria sistemului este de 64Kbytes, dintre care 32Kbytes EPROM și
32Kbytes SRAM.
Subsistemul mecanic asigur ă transmiterea greut ății materiilor prime
pulverulente c ătre captorul tensometric prin demultiplicarea efortului pe acesta.
Factorul de demultiplicare al cântarului are expresia: δκ
++=) (21
baa , unde:
a,b și δ sunt dimensiuni ale bra țelor cântarului diferen țial. Pentru dimensiunile de
a=78 mm, b=300 mm și δ=150 mm, factorul k va fi: k=0,08,
Subsistemul electronic de m ăsurare include captorul de for ță ce traduce
reacțiunea normal ă aplicat ă asupra sa în semnal electric de tensiune.
Iată principalele caracteristici ale elementelor subsistemului:
Captorul de for ță: clas ă de precizie: D 1, respectiv 0,05% eroare integral ă
de m ăsurare, (aceasta include toate erorile cea de zero, de neliniaritate, cea
corespunz ătoare varia ției temperaturii, etc). Rezisten ța de intrare a captorului 1200
Ω, rezisten ța de ie șire 1200 Ω , rezisten ța de izola ție a m ărcilor captorului în raport
cu masa acestuia mai bun ă 5000MΩ. Tensiunea de alimentare a pun ții
tensometrice este de 5V cc, ob ținuți de la o surs ă de tensiune REF02 (Burr Brown)
având o stabilitate excelent ă în domeniul de temperaturi de la – 10 la +85°C.
Preamplificatorul de semnal este implementat cu ajutorul unui circuit
INA 114(Burr Brown), amplificator de m ăsurare integrat ce nu necesit ă decât o
singur ă rezisten ță extern ă de setare a amplific ării. Dintre caracteristicile sale
amintim: domeniu de tensiuni de alimentare: ±2,25V la ±18V, tensiune maxim ă de
offset 50µV, drift maxim 0,25 µV/°C, CMRR mai bun de 115dB, curent maxim de
polarizare pe intr ări 2nA, domeniu temperaturilor de func ționare între -40 și
+85°C, este protejat la scurtcircuit pe ie șire, și la supratensiuni pe intrare.
Circuitului i s-a setat o amplificare de 1000.
Amplificatorul de semnal: este implementat cu acela și tip de amplificator
ca și preamplificatorul, amplificarea acestuia fiind de 1,1316.
Convertorul analog-digital ADS7805, cu urm ătoarele caracteristici: 16 biți
rezolu ție, eroarea maxim ă integral ă 2-3 LSB (Last Signifiant Bit), f ără coduri lips ă,
necesit ă doar tensiunea de 5V pe alimentare, domeniul de intrare ±10V, codarea în
format complement fa ță de 2, rata de e șantionare maxim ă 100 kHz, ie șirea

220 MICROCONTROLLERE
convertorului pe 16 biți se poate cupla direct la magistrala de date a sistemului
digital, domeniul temperaturilor de func ționare –40 la +85°C.13
Sistemul digital: asigur ă comanda și controlul de ansamblu, permite
implementarea func țiunilor de m ăsurare, prelucrare, memorare, dozare și afișare a
greut ății materiilor prime pulverulente.
Unitatea central ă PCB80C552, dispune de o memorie intern ă de 256 bytes,
iar sistemul de o memorie extern ă de 64Kbytes( 32K EPROM /32KSRAM). Pentru
a se realiza func țiunile sistemului s-au ad ăugat porturi digitale de ie șire și intrare
de câte 8 bi ți fiecare, implementate cu circuitele 74LS374, 74LS574, respectiv
74LS244 și 74LS574 care au o capabilitate în curent la ie șire de 20-24mA/ie șire.
Afișajul cu LCD-uri este implementat cu circuitul LTN2 11, circuit ce posed ă un
microcontroller, memorie intern ă și un generator de caractere necesar afi șării a
până la 5 12 caractere diferite. Capacitatea acestuia este de 2x 16 caractere. Afi șorul
cu LED-uri este clasic, transferul informa țiilor binare c ătre acesta realizându-se
serial (vezi schema pe CD). S-a prev ăzut o plac ă special ă de ie șiri numerice pe
relee (4 buc ăți cu câte 2 contacte fiecare de câte 8 A), și 8 intr ări digitale izolate
galvanic. Tastatura sistemului cuprinde 12 taste scanate soft de c ătre procesor.
Dintre func țiunile pe care sistemul le implementeaz ă amintim:
• Dozarea în fluxul tehnologic a materiilor prime pulverulente
• Filtrarea automat ă a datelor de m ăsurare prin medierea unei serii de
eșantioane.
• Tararea automat ă realizat ă la începutul procesului de dozare, sau la
cereera operatorului.
Alte func țiuni implementate:
• Presetare greutate de dozat
• Presetare tempozare la sfâr șitul procesului de dozare ( rezolu ție 1
secund ă, domeniu 0 la 999s)
• Presetare tempozare pentru pornirea amestec ătorului ( rezolu ție 1
secund ă, domeniu 0 la 999s)
• Presetare tempozare la sfâr șitul procesului de golire a cântarului (
rezolu ție 1 secund ă, domeniu 0 la 999s)
• Determinare TARA
• Afișare presetare greutate de dozat
• Afișare preset ări temporiz ări
• Setare constant ă de calibrare
• Afișare constant ă de calibrare

13 ATEN ȚIE: se recomand ă buffer-area ie șirii convertorului cu buffer-e în tehnologie
Shotky pentru a nu permite traversarea convertorului de c ătre glich-uri ce pot apare pe
partea analogic ă de prelucrare a informa țiilor. Ace ști parazi ți pot afecta func ționarea
corect ă a sistemului!

7. Aplica ții 221
• Transfer serial în format binar a greut ății măsurate în fazele de dozare
și golire a cântarului (formatul datelor: asincron, rata 9600 Bauds, 8
biți/cuvânt, f ără paritate, 2 bi ți de stop)
Sistemul permite reglarea anumitor parametrii ai s ăi, precum: cantitatea
dozat ă, temporiz ările corespunz ătoare diferitelor faze ale procesului de dozare.
Utilizând sistemul de întreruperi al procesorului putem declan șa procesul
de conversie la intervale de timp prestabilite pentru convertorul analog-digital de
semnal asigurând e șantionarea uniform ă a semnalului de greutate.
Programul complet de func ționare al sistemului este înscris pe CD unde
este dat ă și schema sistemului utilizat pentru aceast ă aplica ție.
În continuare prezent ăm câteva rutine care implementeaz ă comanda unui
afișor LCD, comanda unui afi șor realizat cu afi șoare cu câte 7 segmente (5
afișoare), rutina de înmul țire a dou ă cifre de câte 16 biți fiecare și explic ăm modul
de utilizare a canalului "Watch Dog" pentru a evita ag ățarea sistemului în cazul
apari ției unor zgomote parazite la nivelul magistralei de sistem.
Scrierea c ătre un modul de afi șare LCD (LTN2 11, conectat la un port
paralel de adres ă 100H), implic ă realizarea unor întârzieri necesare procesului de
transfer al datelor și comenzilor. Implementarea acestora s-a realizat soft
(întârziere prin execu ția de instruc țiuni), c ăci pe de-o parte nu este critic ă durata
temporizat ă, iar pe de alt ă parte în cadrul aplica ției canalele
temporizatoare/num ărătoare au fost dedicate altor procese ce necesit ă o precizie
mai ridicat ă. Am utilizat MACRO-uri pentru scrierea acestor programe. În cadrul
rutinelor de întârziere am avut grij ă să reanclan șăm periodic temporizatorul
"Watch Dog", pentru a evita generarea unui RESET al sistemului.
;Rutine pentru afisarea pe LCD
EXTERN WAIT
WAITVL MACRO
;Macro ce realizeaz ă o întârziere de
LOCAL B_0,B_ 1,B_2 ;Etichete definite local în cadrul MACRO
MOV R5,#20H (12) ;Inițializeaz ă R5 cu valoarea de ciclare 32
B_1: MOV R6,#0FFH (12) ;Inițializeaz ă R6 cu valoarea de ciclare 255
B_0: MOV R7,#0FFH (12) ;Inițializeaz ă R6 cu valoarea de ciclare 255
B_2: DJNZ R7,B_2 (24) ;Decrementeaz ă contoare pe rând
DJNZ R6,B_0 (24) ;Decrementeaz ă contoare pe rând
ORL PCON,# 10H(12)
MOV T3,#00H (12)
DJNZ R5,B_ 1 (24) ;Decrementeaz ă contoare pe rând
ENDM
În partea dreapt ă a mnemonicelor s-au men ționat num ărul de perioade de
ceas necesare execu ției instuc țiunilor. Considerând frecven ța de ceas egal ă cu 12
MHz, vom ob ține temporizarea de: 4, 192secunde.
Men ționăm că regi ștrii R5, R6 și R7 sunt utiliza ți drept contoare
WAITL MACRO

222 MICROCONTROLLERE
LOCAL B_0,B_ 1,B_2
MOV R6,#04H
B_0: MOV R7,#0FFH
B_2: DJNZ R7,B_2
;Anclansare WATCH DOG
ORL PCON,# 10H
MOV T3,#00HDJNZ R6,B_0
ENDM ;Temporizarea de: 0,002048secunde.
;Registrul este pointer-ul în buffer-ul de mesaj de scris la afi șor LCD
;Registrul DPTR este pointer-ul c ătre portul microsistemului la care se afl ă afișorul
;LCDBUCLA:
MOV A,#0 ;Pointer la buffer-ul de mesaj
MOVC A,@A+DPTR ;Rutina de scriere mesaj la LCD
INC DPTR
MOV R0,DPLMOV R 1,DPH
MOV DPL,R3
MOV DPH,R4
WAIT
ORL PCON,# 10H ; Setare flag corespunz ător
WATCH DOG
MOV T3,#00H ;Anclan șare WATCH DOG : scrie constanta
MOVX @DPTR,A ;Scrie caracterul c ătre LCD
MOV DPL,R0
MOV DPH,R 1
DJNZ R2,BUCLA
MOV DPL,R3
MOV DPH,R4MOV A,#2
MOVX @DPTR,A
;Scrie comanda de avans cu un caracter la afi șorul LCD
WAIT
RET
;Rutin ă de scriere a mesajelor c ătre afi șorul LCD
;MESAJ 1 și MESAJ2 adresele de început pentru mesajele de afi șat pe primul
;respectiv, pe al doilea rând al afi șajului
LCD_PRINT MACRO #MESAJ 1,#MESAJ2
MOV DPTR,# 100H ;Adresa de scriere la LCD
MOV A,# 1 ;Selec ție func ție:
MOVX @DPTR,A ;DISPLAY / CLEAR LCD
WAITL
MOV A,#80H ;Selec ție func ție Cursor plasat pe:
MOVX @DPTR,A ;RÂNDUL 1

7. Aplica ții 223
WAIT
MOV R2,# 10H;Încarc ă contor caractere ce vor fi afi șate pe r-dul 1
MOV DPTR,# 101H ;Încarc ă adresa de scriere c ătre afi șorul LCD
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ 1;Încarc ă pointer c ătre mesajul de afi șat
MOV R0,DPLMOV R 1,DPH
WAITL
CALL BUCLA ;Rutin ă de scriere mesaj (
lungime mesaj 16 car.)
WAITL
MOV DPTR,# 100H
MOV A,#0C0H
MOVX @DPTR,A; Comand ă saltul la rândul 2 al afi șorului
WAIT
MOV DPTR,# 101H
MOV R3,DPLMOV R4,DPH
MOV DPTR,#MESAJ2 ;Încarc ă pointer c ătre mesajul de afi șat
MOV R0,DPL
MOV R 1,DPH
MOV R2,# 10H ;Contor de caractere Rând 2
WAITL
CALL BUCLA ;Rutin ă de scriere mesaj (lungime mesaj 16 car.)
WAITL
ENDM
În continuare prezent ăm rutina de înmul țire întreag ă a dou ă valori
memorate în loca țiile OP 1 și OP2 (loca ții de 16 biți fiecare). În loca țiile MREZ 1,
MREZ2, MREZ3 și MREZ4 (8 bi ți fiecare), în ordinea cresc ătoare a rangului, vom
obține rezultatul înmul țirii. Rutina va genera produsul celor doi operanzi, iar flag-
ul C va fi afectat la dep ășirea buffer-ului rezultat.
Notând cu N 1H și N1L, respectiv cu N2H și N2L octe ții corespunz ători
celor dou ă numere, acestea pot fi scrise astfel: N 1=256*N 1H+N 1L, iar
N2=256*N2H+N2L. (N 1L=LOW( 1),N2L=LOW(N2), iar N 1H=HIGH(N 1)
N2L=HIGH(N2)).
Înmul țindu-le ob ținem:
N1*N2=65536*N 1H*N2H+256*(N 1H*N2L+N2H*N 1L)+N 1L*N2L. Execu ția
acestei înmul țiri se va face începând de la dreapta spre stânga, ținându-se cont de
eventualul bit de transport ce poate apare la execu ția opera țiilor.
M16:
MOV B,OP 1L ;Încarc ă în B pe N 1L
MOV A,OP2L ;Încarc ă în A pe N2L
MUL AB ;Execut ă N1L*N2L

224 MICROCONTROLLERE
MOV MREZ 1,A ;Re ține LSB rezultat din înmul țirea
N1L*N2L
MOV MREZ2,B ;Re ține MSB rezultat din înm. N1L*N2L
MOV A,OP2H
MOV B,OP 1L
MUL AB ;Execut ă produsul: N2H*N 1L
ADD A,MREZ2 ;Adun ă: LSB(N2H*N 1L)+MSB(N 1L*N2L)
MOV MREZ2,A ;Salveaz ă rezultatul
MOV A,B ;Transfer ă în registrul A=MSB(N2H*N 1L)
ADDC A,MREZ3 ;Adun ă cu transport în A=MSB(N2H*N 1L)
MOV MREZ3,A ;Transfer ă rezultat în MREZ3
MOV A,OP 1H
MOV B,OP2L
MUL AB ;Execut ă produsul:N 1H*N2L
ADD A,MREZ2
;Adun ă: LSB(N 1H*N2L)+LSB(LSB(N2H*N 1L)+MSB(N 1L*N2L))
MOV MREZ2,A ;Transfer ă rezulatul în MREZ2
MOV A,B ;Transfer ă MSB(N 1H*N2L) în registrul A
ADDC A,MREZ3
MOV MREZ3,A
;Reține în MREZ3,MREZ2 și MREZ 1 expresia calculat ă:
;256*(N 1H*N2L+N2H*N 1L)+N 1L*N2L
;De observat c ă îmul țirea cu 256 este specificat ă prin loca ția în care rezultatele sunt
;salvate, dup ă regula rangul cel mai ridicat este plasat la o adres ă mai mare
MOV A,OP 1H
MOV B,OP2H
MUL AB ;Execut ă produsul N 1H*N2H
ADD A,MREZ3
MOV MREZ3,A ;Salvez LSB(N 1H*N2H)
MOV A,B
ADDC A,MREZ4
MOV MREZ4,A ;Salvez MSB(N 1H*N2H)
RET
NR_OCT DATA 13H ;Index octe ți serializa ți
SERBUF DATA 2 1H ;Loca ție octet de serializat c ătre afi șoare
;Loca țiile E3 și E4 reprezint ă biții 3, respectiv 4 ai Acumulatorului
SERPIN 1 BIT 0E3H ;Ie șire clock registru intrare serial ă/ieșire paralel ă
SERPIN0 BIT 0E4H ;Ie șire date registru de deplasare (MMC40 15)
BIT_0 BIT 8 ;Bitul 0 al loca ției SERBUF (2 1H)
BIT_ 1 BIT 9 ;Bitul 1 al loca ției SERBUF (2 1H)
BIT_2 BIT 0AH ;Bitul 2 al loca ției SERBUF (2 1H)
BIT_3 BIT 0BH ;Bitul 3 al loca ției SERBUF (2 1H)
BIT_4 BIT 0CH ;Bitul 4 al loca ției SERBUF (2 1H)
BIT_5 BIT 0DH ;Bitul 5 al loca ției SERBUF (2 1H)

7. Aplica ții 225
BIT_6 BIT 0EH ;Bitul 6 al loca ției SERBUF (2 1H)
BIT_7 BIT 0FH ;Bitul 7 al loca ției SERBUF (2 1H)
BUF_AF: DB 0 1H,23H,45H,67H,89H ;Zon ă memorare informa ții
DB 11H,11H,11H,11H,11H ;de afi șat.
DB 22H,22H,22H,22H,22H ;Valori de TEST
DB 33H,33H,33H,33H,33H
; Refresh afi șoare
MOV SP,#70H ;Setare adres ă de baz ă stivă
MOV NR_OCT,#0 ;Îni țializare contor
MOV DPTR,#(BUF_AF- 1); I n i țializare pointer
LOOP_BY: INC DPTR ;Incrementare pointer
MOVX A,@DPTR ;Cite ște primul caracter (num ăr)
MOV SERBUF,A
PUSH DPH
PUSH DPL ;Re ține în stiv ă DPTR
MOV DPTR,# 120H
;Încarc ă în DPTR adresa portului pentru afi șoarele cu 7 segmente
Biții 3 și 4 sunt folosi ți pentru transferul semnalelor de CLOCK și respectiv DATE
CLR SERPIN 1 ;Pune pe zero linia de CLOCK
MOV C,BIT_7 ;Transfer ă în C falg bitul 7 al datei de serializat
MOV SERPIN0,C ;Scrie bitul respectiv ca bit 4 al reg.A
MOVX @DPTR,A;Scrie la portul de adres ă 120H primul bit MSB
SETB SERPIN 1
MOVX @DPTR,A ;Pune linia CLOCK pe 1 logic
;Repet ă pașii corepunz ători bitului 7 pentru bitul 6 al datei de transmis
CLR SERPIN 1
MOV C,BIT_6
MOV SERPIN0,C
MOVX @DPTR,ASETB SERPIN 1
MOVX @DPTR,A
CLR SERPIN 1 ;Idem bitul 5
MOV C,BIT_5
MOV SERPIN0,CMOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,A
CLR SERPIN 1 ;Idem bitul 4
MOV C,BIT_4MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,A
CLR SERPIN 1 ;Idem bitul 3

226 MICROCONTROLLERE
MOV C,BIT_3
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,A
CLR SERPIN 1 ;Idem bitul 2
MOV C,BIT_2MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,A
CLR SERPIN 1 ;Idem bitul 1
MOV C,BIT_ 1
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,ACLR SERPIN 1 ;Idem bitul 0
MOV C,BIT_0
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN 1
MOVX @DPTR,A
,0;Reface din stiv ă pointer-ul de adresare pentru buffer-ul de date
POP DPL
POP DPH
INC NR_OCT ;Incrementeaz ă contorul de transfer octe ți
MOV A,NR_OCT
CJNE A,#5,LOP_BY ;5 reprezint ă num ărul de afi șoare 7 seg.
;Testeaz ă dacă au fost serializate toate informa țiile
JMP EXIT ;Ie șire din rutin ă
LOP_BY: JMP LOOP_BY
EXIT:
În leg ătură cu utilizarea canalului Watch Dog (WD) trebuie s ă arătăm
următoarele: a șa cum s-a precizat în capitolele 1, 2 și 4 rolul acestui canal
temporizator const ă în generarea unui RESET-hard atunci când el atinge
starea"overflow", respectiv are loc tranzi ția de la 11111111 B la 00000000B.
Încărcând o anume constant ă de timp exprimabil ă pe 8 bi ți, putem
modifica intervalul de timp dup ă care, dac ă nu este reînc ărcată constanta,
respectivul canal temporizator va genera semnalul de RESET.
În cazul nostru, sistemul a prezentat o "sensibilitate" ini țială relativ
important ă la zgomotele din mediul industrial. De aceea am adoptat urm ătoarea
soluție: am setat la 256* 16µs perioada temporizat ă de c ătre WatchDog și periodic
în programul de func ționare, am reanclan șat WD prin reînc ărcarea constantei de

7. Aplica ții 227
timp mai sus precizate. Cum sistemul este un sistem de comand ă și control
(comanda elementelor auxiliare ale dozatorului care realizeaz ă umplerea automat ă
a sa, precum și un sistem de m ăsurare, c ăci sistemul cânt ărește o anumit ă cantitate
ce este prescris ă pe fluxul tehnologic), cu un num ăr de 8 st ări, acestea au fost
numerotate și stocate împreun ă cu restul variabilelor atât în memoria intern ă cât și
în cea extins ă a microcontroller-ului. Actualizarea st ării s-a realizat de fiecare dat ă
imediat dup ă ce starea respectiv ă a ap ărut. Rutina de ini țializare a sistemului a fost
modificat ă astfel încât dup ă fiecare RESET, s ă analizeze starea sistemului și
func ție de aceasta s ă realizeze saltul la începutul programului corespunz ător st ării.
Enumer ăm stările principale ale sistemului și variabilele ce sunt modificate
în concordan ță cu acestea.
0=stare a șteptare programare / comand ă sistem Variabilele: DOZ=0 și PRG=0
1=stare programare sistem de la tastatur ă implic ă Variabilele: PRG= 1 și DOZ=0
2=stare dozare: Variabilele: PRG=0 și DOZ= 1
3=stare temporizare 1 Variabilele PRG=0 și DOZ=0
4=stare temporizare2 Variabilele PRG=0 și DOZ=0
5=stare temporizare3 Variabilele PRG=0 și DOZ=0
6=stare aseptare comand ă manual ă de golire
7=stare temporizare la comanda clapei de golire
8 stare de temporizare pentru blocarea clapetei de golire
Sistemul este supervizat de un calculator de proces ce asigur ă integrarea sa
pe linia tehnologic ă, dar poate func ționa și autonom, caz în care operatorul poate
interveni pentru a goli manual containerul dozatorului.
Prezent ăm în continuare acea parte din programul de func ționare ce
realizeaz ă directarea corespunz ătoare a execu ției dup ă ce s-a generat semnalul de
RESET.
MAIN:
ANL IE,#00H ;Invalidate întreruperile
MOV DPTR,#HPRT_O2MOV A,#00H
MOV PORT_O2,A
;Opre ște motor ce introduce materie pulverulent ă în cântar – comanda este dictat ă
;de fluxul tehnologic specific
MOV R0,#7FH
INIT_ 1:MOV @R0,#00H
DJNZ R0,INIT_ 1 ;Ini țializare memorie intern ă cu 0
ORL TCON,#0CH
;Valideaz ă activarea întreruperilor exeterne de stare 1 pe front – se evit ă astfel
;reanclan șarea întreruperilor în cazul când nivelul semnalului r ămâne prea mult
;timp în 0 logic.
MOV SP,#6EH ;Pozi ționare stiv ă sistem la adresa 6EH
;Testare stare sistem – este executat ă pentru o eventual ă r e s e t a r e c a u r m a r e a
;acțiunii Watch Dog-ului, care genereaz ă ceea ce se cheam ă "Warm Boot"

228 MICROCONTROLLERE
MOV R0,#0D0H ;Loca ția D0 re ține STAREA sistemului14
MOV A,@R0
;Starea 0 corespunde situa ției de RESET la pornirea sistemului "COLD RESET"
CJNE A,#5AH,PRIM_RESET ;În caz de COLD RESET
;Valoarea 5AH la loca ția D0H exprim ă execu ția unui "Warm Boot" ca urmare a
;forțării de c ătre WD a unui semnal de RESET pentru sistem.
MOV PORT_O 1,#03h
;Reprezint ă traiectoria programului în caz de Warm RESET
MOV DPTR,#HPRT_O 1
MOV A,PORT_O 1
MOVX @DPTR,A ;Comand ă de refacere stare port "port0 1" de
comand ă
ERR_RESET:
MOV R0,#90H
MOV R 1,#57H
MOV R2,#23
;Preg ătire registre pentru transferul pe bloc al informa țiilor de stare
;Registrul R0 este pointer-ul surs ă, registrul R 1 este pointer-ul destina ție și
;registrul R2 este contorul utilizat pentru transferul blocului de date de stare (23D –
;lungimea acestuia), din memoria intern ă extins ă15 în memoria SRAM începând de
;la adresa 57H
ERR_LOOP 1:
MOV A,@R0 ;Copiaz ă informa ție surs ă în registrul A
MOV @R 1,A ;Slaveaz ă registrul A în memoria intern ă
INC R 1
INC R0 ;Incrementeaz ă pointerii
DJNZ R2,ERR_LOOP 1 ;Execut ă copiere bloc de la 90H
la 57H
ORL PCON,# 10H
MOV T3,#00H ;Anclan șare WATCH DOG
;Aceast ă opera ție trebuie realizat ă periodic la execu ția programului pentru a
;preveni generarea unui semnal de RESET
MOV A,STARE ;Loca ția re ține ultima stare postat ă.
Indexarea ;st ărilor este f ăcută natural în ordinea de apari ție a acestora
;Postarea indexului st ării se face întotdeauna dup ă ce starea respectiv ă a fost atins ă.

14 Am plasat în zona de memorie intern ă extins ă o copie a tuturor variabilelor de stare
importante, c ăci pe de-o parte memoria RAM intern ă a fost utilizat ă până la limita ei fizic ă,
iar pe de alt ă parte memoria extins ă poate fi cu o probabiliate net mai redus ă afectat ă de
erori, c ăci ea este accesat ă doar prin instruc țiunea MOV @R0,A (deci indirect)
15 Procesorul 80C552 prezint ă o memorie intern ă extins ă (256 bytes), dintre care primii 128
sunt identici cu cei ai procesoarelor 805 1, iar urm ătorii sunt "umbri ți" de zona SFR a UC.
Accesarea lor poate fi f ăcută doar indirect prin intermediul registrului R0.

7. Aplica ții 229
CJNE A,#00,ERR_RESET2 ;Testare " COLD RESET "16 -stare 0
JMP ERR_RESET 1
ERR_RESET2:
CJNE A,#0 1H,ERR_RESET3 ;Testare – stare 1
JMP ERR_RESET 1 ;Revenire la starea 1
ERR_RESET3:
CJNE A,#02H,ERR_RESET4 ;Testare stare 2 -MOV DPTR,#ERR_END_DOZ ;Stare DOZARE
PUSH DPL
PUSH DPH
SETB DOZ
;Se reia procesul de dozare cu considerarea greut ății dozate pân ă la momentul
;apari ției incidentului
17
JMP ERR_DOZ
ERR_RESET4:
CJNE A,#03H,ERR_RESET5 ;Testare stare 3
JMP ERR_TEMPO 1
ERR_RESET5:
CJNE A,#04H,ERR_RESET6 ;Testare stare 4
JMP ERR_WAIT_STGOL
ERR_RESET6:
CJNE A,#05H,ERR_RESET7 ;Testare stare 5JMP ERR_TEMPO3
;Eroare aparut ă în bucla de a șteptare ap ăsare buton pentru golirea containerului
ERR_RESET7:
CJNE A,#06H,ERR_RESET8 ;Testare stare 6
JMP ERR_TEMPO2
ERR_RESET8:
CJNE A,#07H,ERR_RESET9 ;Testare stare 7JMP GOLIRE
ERR_RESET9:
CJNE A,#08H,ERR_RESET 1 ;Testare stare 8
JMP ERR_TEMPO_GOL
PRIM_RESET: ;Programul de ini țializare la Cold Reset
MOV R2,#7FH
MOV R0,#0FFH
INIT_2: MOV @R0,#00H

16 Este necesar ă testarea redundant ă a acestei st ări căci apari ția semnalelor parazite are
caracter aleator
17 Aceast ă stare este tratat ă deosebit de celelalte, c ăci este necesar ă o cânt ărire distinct ă a
pulberii aflate în bunc ărul cântarului dozator, iar pe de alt ă parte trebuie analizat ă valoarea
curent ă a greut ății acesteia în raport cu cea prescris ă și trebuiesc luate acele decizii care se
impun, inclusiv generarea semnalelor de eroare în dozare atunci când cantitatea de dozat afost dep ășită.

230 MICROCONTROLLERE
DEC R0
DJNZ R2,INIT_2
MOV R0,#0D0H
MOV @R0,#5AH
;ERR_RESET 1:
;Inițializare valori prescrise implicite. Reprezint ă valorile ini țiale care asigur ă
;starea de baz ă a sistemului dozator.
MOV VAL_PRESCR_L,#40H
MOV VAL_PRESCR_H,# 1FH
;Urmeaz ă instruc țiunile ce detaliaz ă acțiunea sistemului în fiecare dintre posibilele
stări pe care acesta le poate atinge dup ă generarea semnalului de RESET
Programul în forma sa complet ă este memorat pe CD.
În concluzie, putem spune c ă proiectarea aplica țiilor dedicate impune o
deosebit ă rigurozitate. Nu este suficient ă proiectarea corect ă din punct de vedere
hardware și software a aplica ției, sistemul realizat va trebui s ă fie integrat corect în
mediul, procesul, aplica ția mai larg ă pentru care a fost construit. Complexitatea
interac țiunilor ce apar în "via ța" sistemului nu poate fi în totalitate simulat ă, ceea
ce face ca etapa de testare "în sistem" o proiectului s ă aibe o importan ță esen țială.
Nu putem afirma c ă o anume etap ă a proiect ării este mai pu țin important ă decât
alta, dar prin iterarea ra țional ă a etapelor de proiectare, prin testarea cu o colec ție
cât mai larg ă de stimuli a sistemului și prin verificarea sa într-un mediu
"zgomotos" putem atinge siguran ța necesar ă func ționari satisf ăcătoare a acestuia.
Este necesar, deseori, s ă construim înc ă din faza de proiectare odat ă cu
programele de func ționare și "uneltele" specifice de testare a sistemului. Aceste
"unelte" nu sunt altceva decât rutine, programe, uneori complexe, ce asigur ă
validarea corectei func ționări corespunz ătoare fiec ărei etape pe care sistemul o
parcurge în func ționare. Dezvoltarea programelor de testare simultan cu
proiectarea sistemului reduce substan țial timpul necesar valid ării finale.
Nu trebuie neglijat principiul redundan ței func ționale -oglindit ă atât la
nivel fizic (hard) cât și la nivel logic (soft), atunci când dorim s ă realiz ăm un
sistem robust și fiabil. Va trebui s ă verific ăm întotdeauna dac ă suntem corect
"ancora ți" în timp, dac ă sistemul nostru î și men ține proprietatea de a fi un sistem
de reglare "în timp real", asta presupune s ă verific ăm dac ă toate informa țiile pe
care sistemul de comand ă le prelucreaz ă sunt "oportune", deci în concordan ță cu
teorema e șantion ării.
Aplica țiile ce sunt detaliate pe CD-ul ata șat lucr ării sunt aplica ții "reale" ce
func ționeaz ă în cadrul unor întreprinderi ca: ELCO- SA Tg. Secuiesc, CIMUS SA
Câmpulung și F.S. SA Râ șnov. Ele au fost "validate" într-o perioad ă de func ționare
ce dep ășește câ țiva ani. Aducem mul țumiri celor ce le-au testat și ne-au ajutat la
implementarea acestora, ajutorul lor a fost deosebit de important, iar pentru aceasta
le mul țumim

Similar Posts