Sunteți pe pagina 1din 22

MICROCONTROLER

Notiuni introductive

La modul general un controler ("controller" - un termen de origine anglo-saxon, cu
un domeniu de cuprindere foarte larg) este, actualmente, o structur electronic destinat
controlului (destul de evident!) unui proces sau, mai general, unei interaciuni caracteristice
cu mediul exterior, fr s fie necesar intervenia operatorului uman. Primele controlere au
fost realizate n tehnologii pur analogice, folosind componente electronice discrete i/sau
componente electromecanice (de exemplu relee). Cele care fac apel la tehnica numeric
modern au fost realizate iniial pe baza logicii cablate (cu circuite integrate numerice
standard SSI i MSI ) i a unei electronici analogice uneori complexe, motiv pentru care
"strluceau" prin dimensiuni mari, consum energetic pe msur i, nu de puine ori, o
fiabilitate care lsa de dorit.
Apariia i utilizarea microprocesoarelor de uz general a dus la o reducere consistent
a costurilor, dimensiunilor, consumului i o mbuntire a fiabilitii. Exist i la ora actual
o serie de astfel de controlere de calitate, realizate n jurul unor microprocesoare de uz
general cum ar fi Z80 (Zilog), 8086/8088 (Intel), 6809 (Motorola), etc.
Pe msur ce procesul de miniaturizare a continuat, a fost posibil ca majoritatea
componentelor necesare realizrii unei astfel de structuri s fie ncorporate (integrate) la
nivelul unui singur microcircuit (cip). Astfel c un microcontroler ar putea fi descris ca fiind
i o soluie (nu n sens exhaustiv !) a problemei controlului cu ajutorul a (aproape) unui
singur circuit.
Legat de denumiri i acronime utilizate, aa cum un microprocesor de uz general este
desemnat prin MPU (MicroProcessor Unit), un microcontroler este, de regul, desemnat ca
MCU, dei semnificaia iniial a acestui acronim este MicroComputer Unit.
O definiie, cu un sens foarte larg de cuprindere, ar fi aceea c un microcontroler este
un microcircuit care incorporeaz o unitate central (CPU) i o memorie mpreun cu resurse
care-i permit interaciunea cu mediul exterior.
Resursele integrate la nivelul microcircuitului ar trebui s includ, cel puin,
urmtoarele componente:
a. o unitate central (CPU), cu un oscilator intern pentru ceasul de sistem
b. o memorie local tip ROM/PROM/EPROM/FLASH i eventual una de tip RAM
c. un sistem de ntreruperi
d. I/O - intrri/ieiri numerice (de tip port paralel)
e. un port serial de tip asincron i/sau sincron, programabil
f. un sistem de timere-temporizatoare/numrtoare programabile
Este posibil ca la acestea s fie adugate, la un pre de cost avantajos, caracteristici
specifice sarcinii de control care trebuie ndeplinite:
g. un sistem de conversie analog numeric(una sau mai multe intrari analogice)
h. un sistem de conversie numeric analogic i/sau ieiri PWM (cu modulare n durat)
i. un comparator analogic
j. o memorie de date nevolatil de tip EEPROM
k. faciliti suplimentare pentru sistemul de temporizare/numrare (captare i
comparare)
Un microcontroler tipic mai are, la nivelul unitii centrale, faciliti de prelucrare a
informaiei la nivel de bit, de acces direct i uor la intrri/ieiri i un mecanism de prelucrare
TIPURI I VARIANTE CONSTRUCTIVE
Exist la ora actual un numr extrem de mare de tipuri constructive de
microcontrolere. Un criteriu de clasificare care se poate aplica ntotdeauna este lungimea
(dimensiunea) cuvntului de date. Funcie de puterea de calcul dorit i de alte caracteristici
se pot alege variante avnd dimensiunea cuvntului de date de 4, 8,16 sau 32 de bii (exist
chiar i variante de 64 de bii!). Nu este obligatoriu ca dimensiunea cuvntului de date s fie
egal cu dimensiunea unui cuvnt main (cuvnt program). Exist i multe variante zise
dedicate, neprogramabile de utilizator la nivel de cod main, strict specializate pe o anumit
aplicaie, prin intermediul codului preprogramat i al resurselor hardware, utilizate pentru
comunicaii, controlul tastaturilor, controlul aparaturii audio/video, prelucrarea numeric a
semnalului, etc.
TEHNOLOGIILE DE FABRICAIE UTILIZATE
Practic, toate microcontrolerele se realizeaz la ora actual n tehnologie CMOS
(tehnologii similare celor utilizate la seriile standard CMOS de circuite numerice: HC, AC,
ALV, etc.). Se pot realiza astfel structuri cu o mare densitate de integrare, cu un consum
redus (care va depinde de frecvena de lucru), permind eventual alimentarea de la baterie.
Logica intern este static (total sau n cea mai mare parte) permind astfel, n anumite
condiii, micorarea frecvenei de ceas sau chiar oprirea ceasului n ideea optimizrii
consumului. Tehnologia este caracterizat i de o imunitate mai mare la perturbaii, esenial
ntr-un mare numr de aplicaii specifice. Se realizeaz variante pentru domeniu extins al
temperaturii de funcionare (de ex.- 40 +85 C).
Exist foarte multe variante de ncapsulare (capsule de plastic i mai rar de ceramic),
multe din ele destinate montrii pe suprafa (SMD): SOIC, PLCC, PQFP, TQFP (x100pini),
etc., dar i variante clasice cu pini tip DIP/DIL (tipic de la 8 la 68 pini).
CARACTERISTICI ARHITECTURALE ALE UNITII CENTRALE
Arhitectura unitii centrale de calcul (CPU) este unul din elementele cele mai
importante care trebuie avut n vedere n analiza oricrui sistem de calcul. Principalele
concepte luate n considerare i ntlnite aici sunt urmtoarele:
a. Arhitecturi de tip " von Neumann "
Cele mai multe microcontrolere sunt realizate pe baza acestei arhitecturi de sistem.
Microcontrolerele bazate pe aceast arhitectur au o unitate central (CPU) caracterizat de
existena unui singur spaiu de memorie utilizat pentru memorarea att a codului
instruciunilor ct i a datelor ce fac obiectul prelucrrii. Exist deci o singur magistral
intern (bus) care este folosit pentru preluarea a instruciunilor (fetch opcod) i a datelor;
efectuarea celor dou operaii separate, n mod secvenial, are ca efect, cel puin principial,
ncetinirea operaiilor. Este arhitectura standard (cea mai des ntlnit) i pentru
microprocesoarele de uz general.
b. Arhitecturi de tip " Harvard "
La aceast arhitectur exist spaii de memorie separate pentru program i date. n
consecin ar trebui s existe i magistrale separate (de adrese i date) pentru codul
instruciunilor i respectiv pentru date. Principial exist astfel posibilitatea execuiei
cvasiparalele (suprapunerii) a celor dou operaii menionate anterior. Codul unei instruciuni
poate fi preluat din memorie n timp ce se execut operaiile cu datele aferente instruciunii
anterioare. Este posibil (cel puin teoretic) o execuie mai rapid, pe seama unei complexiti
sporite a microcircuitului, mai ales atunci cnd exist i un pipeline. Este arhitectura standard
pentru procesoarele numerice de semnal (DSP). Datorit costului mare al implementrii unei
astfel de arhitecturi, n cazul microcontrolerelor se ntlnete mai ales o arhitectur
Harvard modificat, cu spaii de memorie separate pentru program i date, dar cu magistrale
comune pentru adrese i date.
c. CISC
Aproape toate microcontrolerele au la baza realizrii CPU conceptul CISC (Complex
Instruction Set Computer). Aceasta nseamn un set uzual de peste 80 instruciuni, multe din
ele foarte puternice i specializate. De obicei multe din aceste instruciuni sunt foarte diferite
ntre ele: unele opereaz numai cu anumite spaii de adrese sau registre, altele permit numai
anumite moduri de adresare, etc. Pentru programatorul n limbaj de asamblare exist unele
avantaje prin utilizarea unei singure instruciuni complexe n locul mai multor instruciuni
simple (analog macroinstruciunilor clasice dintr-un limbaj de asamblare).
d. RISC
RISC (Reduced Instruction Set Computer) este un concept de realizare a CPU care a
nceput s fie utilizat cu succes de ceva timp i la realizarea microcontrolerelor. Prin
implementarea unui set redus de instruciuni care se pot executa foarte rapid i eficient, se
obine o reducere a complexitii microcircuitului, suprafaa disponibilizat putnd fi utilizat
n alte scopuri. Printre caracteristicile asociate de obicei unui CPU RISC se pot meniona:
- arhitectur Harvard modificat sau von Neumann
- vitez sporit de execuie prin implementarea unui pipeline pentru instruciuni
- set de instruciuni ortogonal (simetric): orice instruciune opereaz cu orice spaiu de
adrese (de memorie) sau orice registru, instruciunile nu prezint combinaii speciale,
excepii, restricii sau efecte colaterale.
IMPLEMENTAREA MEMORIEI MICROCONTROLERELOR

n afar de memoria local de tip RAM, de dimensiuni relativ reduse (de la x10 octei
la x1k), implementat ca atare sau existent sub forma unui set de registre i destinat
memorrii datelor (variabilelor), mai exist o serie de aspecte specifice, marea majoritate a
acestora fiind legat de implementarea fizic a memoriei de program (i eventual a unei
pri a memoriei de date) cu ajutorul unor memorii nevolatile. Clasic, memoria de program
era implementat ntr-o variant de tip ROM: EPROM pentru dezvoltare i producie pe
scar mic/medie sau mask-ROM pentru producia de mas. Principalele concepte noi
aprute de a lungul timpului n legtur cu implementarea memoriei de program sau date sunt
enumerate n continuare.
a. OTP - majoritatea productorilor ofer variante de microcontrolere la care
memoria local de program este de tip OTP (One Time Programmable), practic o memorie
PROM identic intern cu varianta EPROM, dar fr fereastra de cuar pentru tergere (deci i
mai ieftine); aceste variante pot fi utilizate ca o alternativ pentru o producie limitat, pn
n momentul testrii i validrii finale a codului, moment n care pot fi comandate variantele
(mask) ROM propriu-zise, cele mai economice pentru o producie de mas
b. FLASH EPROM - este o soluie mai bun dect EPROM-ul propriu-zis atunci
cnd este necesar un volum mare de memorie program (nevolatil); mai rapid i cu un
numr garantat suficient de mare (x10000) de cicluri de programare (de tergere/scriere), este
caracterizat i prin modaliti mai flexibile de programare; este utilizat numai ca memorie
de program.
c. EEPROM - multe microcontrolere au i o memorie de acest tip, de dimensiune
limitat (de la x10 octei la x K octei), destinat memorrii unui numr limitat de parametrii
(memorie de date) care eventual trebuie modificai din timp n timp; este o memorie relativ
lent (la scriere), dar cu un numr de cicluri de tergere/scriere mai mare ca FLASH-ul
(x1 00000).
d. NO VRAM (RAM nevolatil) - realizat prin alimentarea local (baterie, acumulator)
a unui masiv RAM CMOS atunci cnd este necesar un volum mare de memorie de program
i date nevolatil; mult mai rapid dect toate celelalte tipuri i fr limitri ca numr de
cicluri.
e. Programarea "In System" (ISP-In System Programming) - folosirea unor
memorii nevolatile de tip FLASH face posibil i "programarea" unui astfel de
microcontroler fr a-l scoate din sistemul n care este ncorporat (programare on-line, In
System Programming); programarea se face de regul prin intermediul unei interfee seriale
dedicate de tip ISP (poate avea nume diferite) sau a unei interfee standard JTAG. Exist
microcontrolere la care aceast programare se poate face prin intermediul portului serial
asincron sau al interfetei CAN (Controller Area Network). Este posibil astfel modificarea cu
uurin a codului program sau a unor constante de lucru (local sau de la distan-remote
update). Vezi i Bootloader.
Un lucru foarte important este c la anumite familii interfaa prin intermediul
creia se face programarea poate fi utilizat i la testarea i depanarea aplicaiei (soft),
permind realizarea simpl, cu un pre de cost minim, a unor mijloace de testare i
depanare(emulatoare). De exemplu, n acest caz interfaa JTAG este specificat ca fiind
JTAG/ICE (In Circuit Emulation) pentru a arta c poate fi folosit i pentru emularea n
circuit.
f. Bootloader - multe din microcontrolerele recente la care memoria de program este
de tip FLASH au i facilitatea (au de fapt instruciuni dedicate acestui scop) de a putea i
scrie n aceast memorie de program fr a utiliza un circuit de programare extern. Astfel n
microcontroler poate exista permanent (rezident) un cod de mici dimensiuni (denumit i
bootloader) care pur i simplu va ncrca prin intermediul portului serial (este doar un
exemplu) codul utilizator sau constantele pe care acesta vrea eventual s le actualizeze.
Bootloader-ul este i cel care lanseaz n execuie programul utilizator dup ncrcarea
acestuia.
g. Protejarea codului - protejarea codului program dintr-o memorie local nevolatil
mpotriva accesului neautorizat (la citire -deoarece pirateria soft exist i aici) este oferit ca
o opiune (ea mai trebuie i folosit!) la variantele FLASH, EPROM sau OTP. Codul poate
protejat att la citire cat i la scriere (practic circuitul trebuie ters, nainte de a se mai putea
scrie ceva n el). Este eliminat astfel posibilitatea de a se realiza, n acest caz, de patch-uri
(alterri cu un anumit scop) ale codului original. La variantele mask-ROM propriu-zis
protecia este de cele mai multe ori implicit.
h. Memoria extern de program sau date
Marea majoritate a familiilor de microcontrolere permit si utilizarea de memorie
extern de program (tipic ROM) sau date (tipic RAM). Aceasta presupune existenta si
utilizarea unor magistrale externe de adrese si date. Conexiunile externe necesare pentru
acestea sunt disponibile ca funcii alternative ale pinilor. Din pcate, in aceast situaie
numrul de conexiuni exterioare disponibile pentru interfaa cu exteriorul se reduce dramatic,
reducnd mult din versatilitatea microcontrolerului. Mai mult la variantele constructive cu
un numr mic de pini (conexiuni externe) nu este posibil utilizarea de memorie extern,
dect, eventual, intr-o variant cu interfa serial (memorie RAM, FLASH sau EEPROM cu
interfa I2C, SPI, etc.) si numai ca memorie de date.
CONTROLUL PUTERII CONSUMATE I ALIMENTAREA LA TENSIUNI
REDUSE
Majoritatea microcontrolerelor pot fi trecute sub control soft n stri speciale cum ar
fi: n ateptare (STAND-BY), inactiv ("IDLE") sau oprit ("HALT", "POWER DOWN"),
denumirile acestor stri diferind i funcie de fabricant. n aceste moduri starea CPU,
coninutul RAM-ului intern, starea I/O-urilor poate fi conservat n condiiile unei tensiuni de
alimentare reduse (fa de cea nominal) i deci al unui consum mult redus. Flexibilitatea
acestui sistem este strans legata de faciltitatile si programabilitatea sistemului de generare a
ceasului de lucru (clock system, vezi 1.7).
De exemplu, ntr-un mod de tip "IDLE" toate activitile sunt oprite cu excepia
circuitului oscilatorului local de ceas i, dac acestea exist: circuitul "watchdog" (ceasul de
gard), circuitul de monitorizare a oscilatorului de ceas i eventual un temporizator dedicat
("idle timer"). Puterea consumat este redus la cca. 30%, iar ieirea din acest mod se face
prin reset (iniializare) sau printr-un stimul exterior (de regul o ntrerupere). Temporizatorul
dedicat poate scoate periodic microcontrolerul din aceast stare, pentru ndeplinirea anumitor
sarcini, dup care se reintr n starea respectiv.
n modul"HALT" toate activitile sunt oprite, tensiunea de alimentare poate fi
cobort sub valoarea nominal, fr alterarea strii (CPU, RAM, I/O), puterea consumat
fiind minim. Ieirea din aceast stare se face prin reset sau ca urmare a unei cereri de
ntrerupere. Toate aceste moduri de lucru sunt de regul valorificate n aplicaii n care
alimentarea sistemului se face de la o surs de tip baterie (n funcionarea normal sau numai
n anumite situaii).
Se mai ofer uneori ca facilitate o protecie la scderea accidental (n anumite limite)
a tensiunii de alimentare ("brownout protection"). La scderea tensiunii de alimentare sub o
anumit limit ("brownout voltage") microcontrolerul este iniializat (resetat) i inut n
aceast stare atta timp ct condiia respectiv persist.
Tensiunea de alimentare standard pentru microcontrolere a fost mult timp, din
considerente i istorice(vezi TTL-ul), de Vcc = 5V (cu o anumit toleran ). La ora actual
se ofer, pentru multe din ele, i variante cu tensiune de alimentare redus (Low Voltage) cu
Vcc = 1.8 .. 3.3V, destinate unor aplicaii unde consumul este un parametru critic. Exist
variante cu plaj mare a tensiunii de alimentare, de exemplu Vcc = 2..6V, funcionarea la
limita inferioar implicnd doar o micorare a frecvenei maxime de ceas.
SISTEMUL DE CEAS
Orice microcontroler este caracterizat cel puin de existena circuitelor electronice
aferente oscilatorului care genereaz ceasul de sistem. Astfel este posibil implementarea
simpl a oscilatorului doar prin adugarea, n exterior, a unui rezonator extern (cuar sau
piezoceramica) pentru stabilizarea frecventei si eventual a unor capacitori. Dac stabilitatea
si precizia frecvenei nu este o cerin important, la anumite microcontrolere se poate utiliza
doar un circuit RC extern sau exist un circuit RC intern, care determin frecvena de
oscilaie. Exist microcontrolere la care configuraia oscilatorului este programabil prin
intermediul unor fuzibile" FLASH (se programeaz similar memoriei de program):
rezonator extern i tipul acestuia, varianta RC intern sau extern, gama de frecvent, etc. La
familiile evoluate de microcontrolere exist si circuite de tip PLL (Phase Locked Loop)
si/sau FLL (Frequency Locked Loop) care permit multiplicarea cu uurin a frecvenei de
baz (cea a rezonatorului extern). Astfel plecnd, de exemplu de la o frecven de 32.768KHz
se pot obine frecvene de lucru pn ordinul MHz. La astfel de microcontrolere sistemul de
ceas este programabil prin intermediul unor registre speciale oferind un maxim de
flexibilitate n sensul putinei de controla compromisul ntre puterea consumat i viteza
maxim de lucru.
INTERFAA EXTERN (SISTEMUL DE INTRRI I IEIRI)
Toate microcontrolerele au un numr oarecare de intrri- Inputs / ieiri numerice-
Outputs (de la x1 la x10) organizate sub forma unor porturi I/O; conexiunile exterioare sunt
bidirecionale sau unidirecionale, unele sunt multifuncionale (se ofer funcii alternative pe
acelai pin), unele pot avea o capacitate sporit de a absorbi curent (de exemplu pentru
comanda direct a unui LED, cu IOL max = - 20mA), etc.
n afar de acest set de intrri/ieiri de uz general, pentru interfaa cu mediul exterior
se ofer o serie de alte faciliti importante de intrare/ieire cum ar fi:
a. UART (Universal Asynchronous Receiver Transmitter) este un port serial bidirecional
destinat implementrii unui protocol clasic de comunicaie asincron; USART (Universal
Synchronous Asynchronous Receiver Transmitter) este un port similar, dar care permite
implementarea i a unui protocol sincron cu obinerea unor viteze mai mari de comunicaie;
SCI (Serial Communications Interface) este un circuit de tip UART mbuntit, definit i
utilizate de firma Freescale(Motorola). LIN (Local Interconnect Network) reprezint o
implementare particular a unui protocol de comunicaie asincron, utilizat n industria de
automobile ca o alternativ de mic vitez dar cu pre sczut pentru magistrala i protocolul
CAN (vezi mai jos).
b. Porturi seriale sincrone dedicate - sunt destinate transferului serial de date de mare
vitez cu unele periferice specializate (sisteme de afiare, convertoare analog-numerice, etc.)
sau care permit conectarea ntr-o reea de comunicaie. Presupun existenta, mpreuna cu
datele, a unui semnal de ceas (implicit sau explicit) pentru sincronizarea acestora. Implic i
implementarea unor protocoale mai mult sau mai puin complexe de transfer al informaiei,
fiind de fapt vorba de o magistral serial. Exist cteva implementri rspndite (sunt
prezentate n ordinea cresctoare a complexitii):
- SPI (Serial Peripheral Interface) este un port serial sincron definit de firma Motorola
- Microwire / Microwire Plus este o interfa serial bidirecional sincron definit i
utilizat de firma National Semiconductors
- I2C (Inter Integrated Circuits bus) este o interfa serial bidirecional (pe numai 2
fire), dezvoltat de Philips, destinat aplicaiilor de 8 bii. Exist i multe circuite
"periferice" care sunt prevzute cu o astfel de interfa. Este cunoscut i sub denumirea
TWI (Two Wire Interface)
- CAN (Controller Area Network) proprietate intelectual a firmei Bosch, foarte utilizat
n Europa i Japonia, oarecum similar ca funcionalitate lui SAE J1850 care este utilizat
n America de Nord (SAE -Society of Automotive Engineers), este un standard (o
magistral i un protocol) de comunicaie serial sincron utilizat n industria de
automobile, permind interconectarea ntr-o reea a diverselor componente inteligente
(senzori, elemente de execuie, indicatoare, etc.) omniprezente ntr-un automobil modern.
In ultimul timp magistrala CAN a nceput s fie utilizat i n alte domenii dect
industria de automobile (automatizri industriale, robotic, acionri electrice).
c. Conectivitate Ethernet/Web - implic existena unor resurse care s permit integrarea
cu uurin ntr-o reea de tip Ethernet, pentru a face posibil, n final, implementarea unui
protocol TCP/IP (a unei stive TCP/IP). Resursele respective pot fi de natur software (stiv
soft) care presupun o vitez de prelucrare (putere de calcul) a CPU suficient de mare pentru a
nu afecta vizibil operarea propriu-zis a controlerului, sau hardware (stiv hardware). Pe
baza acestei stive se poate realiza o conectivitate tip HTTP, FTP, STMP, POP3, etc.
d. Conectivitate USB - magistrala serial USB (Universal Serial Bus) a fost creat pentru
conectarea cu uurin a diverselor periferice la un calculator PC (cu rolul de gazd - host).
Conexiunea permite si furnizarea tensiunii de alimentare. Varianta USB 1.1 permite atingerea
unei rate de transfer maxime a datelor de 12Mbytes/sec, iar varianta USB 2.0 a unei rate
maxime de cca. 480MBytes/sec. La ora actual exist pe pia multe firme care ofer o gam
larg de microcontrolere cu conectivitate USB (majoritatea compatibile USB 1.1), cu un pre
de cost minim pentru componentele hardware i software. Exemple n acest sens ar fi firmele:
Atmel, Microchip, Intel, Cypress, ST, Infineon, s.a. Majoritatea sunt destinate realizrii unor
periferice USB si mai puine realizrii unui USB host.
e. Conectivitate Wireless- se refer la existena unor resurse hardware si/sau software care
s permit integrarea cu uurin i la un pre de cost avantajos ntr-o reea de tip wireless,
pentru a face posibil, n final, implementarea unui protocol (a stivei aferente protocolului).
Exemplele cele mai cunoscute de astfel de reele, protocoale i stive sunt Bluetooth (IEEE
802.15.1) iZigbee (IEEE 802.15.4).
f. Convertoarele Analog Numerice (CAN, ADC)
Convertoarele utilizate fac parte de regul dintr-un sistem de achiziie de date,
existnd i un multiplexor analogic cu mai multe canale de intrare. Rezoluia disponibil
este tipic de 8, 10 sau 12 bii, uneori cu precizia (rezoluia adevrat) corespunztoare unui
numr mai mic de bii. In marea majoritate a cazurilor ele sunt realizate pentru mrime de
intrare unipolar. Sursa de referin utilizat este intern sau extern. Timpul minim de
conversie este n plaja x |j,sec la x10 |j,sec. Exist microcontrolere care utilizeaz tehnici de
recalibrare (auto-zero, corecie ctig, etc.) pentru mrirea i/sau meninerea preciziei.
Tehnicile de conversie cele mai utilizate sunt: aproximaii succesive (majoritatea) cu
eantionare implicit (circuit Track-Hold inclus), ramp digital (mai rar). Exist i
subsisteme locale care, n cazul n cnd sunt prezente, pot fi folosite pentru implementarea
unor alte tehnici de conversie bazate pe integrare (cu utilizarea unui numr minim de
componente exterioare): numrtoare de impulsuri, circuite comparatoare (analogice,
standard), intrri de captare (foreaz memorarea - "captarea" valorii unui numrtor care
numr liber, n momentul activrii, permind astfel msurarea intervalelor de timp sau
frecvenelor), etc.
OBSERVAIE n ultimul timp au aprut i variante de CAN cu rezoluii mari i foarte mari,
realizate n tehnica sigma-delta (a-5). Realizrile respective sunt mai degrab un CAN cu
microcontroler (firma Analog Device ofer un nucleu de microcontroler 8051 plus un CAN
sigma-delta cu rezoluii de pn la 24 bii !)
g. Convertoarele Numeric Analogice (CNA, DAC)
Cea mai rspndit tehnic de conversie numeric analogic folosit este bazat pe
modulaia n factor de umplere (PWM- Pulse Width Modulation). Exist unul sau mai multe
canale pe care se poate genera un tren de impulsuri cu factor de umplere programabil (de la 0
la 100%). Factorul de umplere este controlat cu o rezoluie de la 8 bii sau 16 bii. Frecvena
trenului de impulsuri este i ea programabil, n limite largi. La un microcontroler fr un
sistem PWM dedicat, n acest scop se poate utiliza, cu o flexibilitate mai sczut, sistemul de
timere/numrtoare i orice ieire numeric. Printr-o filtrare exterioar relativ simpl, de tip
trece jos (FTJ, Low Pass), se poate obine o tensiune de ieire proporional cu factorul de
umplere. Convertoare numeric analogice propriu-zise sunt mai rar ntlnite.
g. Interfaa pentru sisteme de afiare tip LCD (panou LCD)
n ultimul timp n familiile de microcontrolere deja consacrate sau n familiile noi au
aprut variante care posed un subsistem destinat conectrii directe, cu utilizarea unui numr
minim de componente exterioare, unui sistem de afiare (un panou) de tip LCD (cu cristale
lichide). Interfaa respectiv genereaz toate semnalele necesare pentru comanda panoului
LCD. Complexitatea sa este descris prin numrul maxim de segmente LCD care pot fi
controlate, fiind limitat n primul rnd de numrul de conexiuni externe necesare (pentru un
numr mare de segmente oricum se folosesc tehnici de multiplexare).
FAMILII DE MICROCONTROLERE REPREZENTATIVE
n prezentarea care urmeaz i care nu se dorete exhaustiv, accentul este pus pe
familiile mai cunoscute, de 8 bii i 16bii.
a. 8048
"Bunicul" microcontrolerelor pe 8 bii, mai este nc folosit! Unele din caracteristicile
sale arhitecturale se regsesc la urmtoarea generaie (MCS-51, 8051).
b. 8051

A doua generaie de microcontrolere de 8 bii a firmei Intel care, dei aprut acum 20
de ani, nc ocup un segment semnificativ de pia. Cu o arhitectur destul de ciudat, este
suficient de puternic i uor de programat (odat nvat!). Arhitectura sa are spaii de
memorie separate pentru program i date. Poate adresa 64KBytes memorie de program, din
care primii 4(8..32)KBytes locali (ROM). Poate adresa 64KBytes memorie de date extern,
adresabil doar indirect. Are 128 (256) octei de RAM local, plus un numr de registre
speciale pentru lucrul cu periferia local. Are faciliti de prelucrare la nivel de bit (un
procesor boolean, adresare pe bit). Intel a dezvoltat si un "super 8051" numit generic 80151.
Actualmente exist zeci de variante produse de diveri fabricani (Philips, Infineon, Atmel,
Dallas, Temic, etc.) precum i cantiti impresionante de soft comercial sau din categoria
freeware/shareware. Au aprut i dezvoltri ale acestei familii n sensul trecerii la o
arhitectur similar (n mare), dar pe organizat pe 16 bii, cu performane mbuntite ca
vitez de prelucrare: familia XA51 eXtended Arhitecture de la Philips i familia 80C251
(Intel). Din pcate aceste noi variante nu s-au bucurat nici pe departe de succesul
btrnului" 8051.
c. 80C196
Este un microcontroler pe 16 bii fcnd parte din generaia treia de microcontrolere a
firmei Intel. Destinat iniial unor aplicaii din industria de automobile, are o arhitectur von
Neumann, cu un spaiu de adresare de 64KBytes, o unitate de intrri/ieiri numerice de mare
vitez (destinat iniial controlului injeciei la un motor cu ardere intern), ieiri PWM,
convertor analog numeric, timer watchdog. Exist multe variante, ultimele cronologic
aprute, fiind mult superioare variantei iniiale. Exist i o dezvoltare recent sub forma
familiei MCS-296 (80C296).
d. 80C186, 80C188 (Intel, AMD, .a.)
Derivate din clasicele 8086/88 prin includerea pe acelai microcircuit a 2 canale
DMA, 2 numrtoare/timere, un sistem de ntreruperi i un controler pentru DRAM. Marele
avantaj al acestor cvasi(aproape) microcontrolere (ele nu au memorie integrat!) este legat de
utilizarea ca mediu de dezvoltare a unor platforme de calcul tip IBM-PC, compatibile 80x86,
cu tot softul aferent.
e. 68HC05
Un microcontroler de 8 bii derivat din microprocesorul M6800 i care prezint multe
asemnri cu un alt microprocesor rspndit, la timpul su, 6502. Are un spaiu de memorie
unic (64Kbytes) n care sunt plasate i registrele perifericelor (I/O, timere) cu un indicator de
stiv (SP) hard pe 5bii (stiv de maxim 32 octei !). Exist variante cu memorie EEPROM,
CAN, port serial, etc. Este unul din cele mai rspndite microcontrolere (comparabil cu
8051). Varianta evoluat a acestei familii este seria 68HC08 bazat pe o nou unitate central
de 8 bii numit CPU08, cu cea mai recent dezvoltare sub forma seriei 68HCS08 destinat
n mod special unor aplicaii din industria automobilului.
i. AVR
Un concurent puternic al seriei PIC este familia numit AVR, a firmei ATMEL,
familie aprut n ultimii ani, care ofer variante de microcontrolere oarecum asemntoare
ca resurse cu familia PIC, la performane similare sau mai bune. Sunt bazate pe o arhitectur
diferit, dar unitatea central este tot de tip RISC, cu cuvntul de date de 8 bii. La fel ca la
PIC dimensiunea cuvntului de program este mai mare, fiind de 16 bii. Exist cel puin 3 sub
familii mari, n ordinea complexitii resurselor, acestea fiind: AT Tiny, AT90 i ATMega.
j. COP4(00) i COP8(00)
COP4 este un microcontroler pe 4 bii, categorie de microcontrolere care, n general,
departe de a fi nvechite, ocup un segment relativ important al pieii. Printre caracteristici:
pn la 2K ROM local, 32x4 pn la 160x4 RAM local, Microwire, numrtoare/timere,
tensiune de alimentare 2.3-6V, numr mic de pini.
COP8 reprezint o serie de microcontrolere pe 8 bii, versatil, cu pre sczut,
disponibil n multe variante. Arhitectura este similar lui 8051, dar setul de instruciuni este
similar lui Z80.
k. Z8
Un derivat al microprocesorului Z80, reprezint un compozit al mai multor arhitecturi
diferite. Nu este compatibil cu setul de instruciuni i nici cu perifericele standard Z80. Are
trei spaii de adrese: program, date i un masiv de registre. Resurse locale tipice: UART,
timere, DMA, sistem de ntreruperi cu pn la 37 de surse. Exist o variant cu un interpreter
Tiny Basic n ROM-ul local (analog 8052AH Basic de la Intel) precum i o variant cu
resurse mbuntite numit Super-8.
l. Z180(Zilog), Rabbit
Z180 -ul firmei Zilog are un CPU similar cu Z80 dar mbuntit, cu resurse locale
cum ar fi: management de memorie (memorie paginat de maxim 1MB), USART (numit
SIO), 2 canale DMA, timere, sistem de ntreruperi, eventual PIO. Instruciuni suplimentare
fa de setul standard Z80, printre care i nmulirea. Diversele sale variante nu includ
memorie local. Rabbit 2000 sau 3000 este un microcontroler bazat pe un nucleu de Z180,
deosebit de versatil ca resurse periferice disponibile i foarte uor de integrat n aplicaii. Sunt
disponibile module realizate pe baza acestui microcontroler, module care adaug i memorie
de tip ROM FLASH i RAM. Utilizarea unui mediu de programare foarte productiv numit
Dynamic C precum i a facilitailor de programare i depanare In-System au fcut ca acest
microcontroler sa cunoasc o rspndire destul de larga..
m. TMS370
Microcontrolerul standard pe 8 bii al firmei TI realizat n multe variante (de ordinul
zecilor), prezint unele asemnri cu 8051 (memoria de date local, stiva, modurile de
adresare). O varietate extrem de mare a resurselor locale.
n. 80386EX (Intel)
Un 80386 destinat aplicaiilor de tip controler. Resurse locale: I/O seriale,
timere/numrtoare, DMA, optimizarea consumului, controler de ntreruperi, controler pentru
RAM dinamic. Nu au memorie local.
Marele avantaj al unui astfel de microcontroler este c se poate utiliza ca platform de
dezvoltare un sistem de tip IBM PC mpreun cu tot mediul de programare aferent.
o. SC 3/4/5xx, Elan
O serie de microcontrolere deosebit de performante realizate n jurul unei uniti
centrale de tip 386/486. Permit practic, doar prin adugarea de memorie extern, obinerea
unui sistem de calcul compatibil PC, destinat unor aplicaii de control ncapsulate-integrate
("embedded PC").
p. 80C16x
Unul din microcontrolerele de 16 bii foarte utilizat n Europa. Arhitectur deosebit de
performant a CPU, de tip RISC, are diverse variante, cu resurse complexe: 80C165,
80C166, 80C167, etc.
q. MSP430 (Texas Instruments)
Firma TI ofer i o familie de microcontrolere de 16 bii cu arhitectura RISC, cu
posibilitatea controlului compromisului vitez de calcul/consum propriu, destinat
aplicaiilor portabile (i nu numai), denumit MSP 430. Cu un spaiu de adresare de
64KBytes, are diverse variante de realizare a memoriei interne de program (OTP, FLASH),
resurse diverse (printre care i o interfaa pentru un sistem de afiare LCD).
r. Alte familii de microcontrolere
Fujitsu Microelectronics - ofer familii deosebit de puternice de
microcontrolere pe 8 bii (FMC-8), 16 bii (FMC-16) sau 32 de bii (FR). n fiecare familie
exist zeci de variante. Multe dintre ele sunt orientate pe aplicaiile din industria de
automobile sau din electronica de consum(audio, video, electrocasnice).
Renesas - ofer de asemenea o gam larg de microcontrolere organizate n familii de
4, 8, 16 i 32 de bii. Exist un numr foarte mare de variante constructive n fiecare familie.
ARM - este de fapt o unitate central de 32 de bii (sau de 16/32 bii) care face
parte din categoria structurilor IP ("Intelectual Property"). Consoriul ARM a oferit
licene ale acestei micro arhitecturi Pe baza acestor licene se realizeaz i microcontrolere
de mare performan. Cele mai cunoscute i rspndite variante de nuclee sunt ARM7 i
ARM9, cu implementrile lor simplificate numite ARM7T, ARM9T (T-"Thumb").
MPC500 (Freescale)- este o familie de microcontrolere bazat pe o unitate central
de 32 de bii compatibil cu arhitectura (i cu setul de instruciuni) Power PC. Include i o
unitate de prelucrare n virgul mobil.
OBSERVAIE Codurile prezentate sunt generice, identificarea complet a unui
microcontroler fcndu-se i cu utilizarea unor prefixe/sufixe alfanumerice prin intermediul
crora se precizeaz resursele disponibile i eventual alte caracteristici ale variantei
constructive (frecvena maxim de ceas, tipul de capsul, gama de temperatur, etc.).
LIMBAJE DE PROGRAMARE
Limbajul main i de cel de asamblare
Limbajul main (instruciunile main) este singura form de reprezentare a
informaiei pe care un microcontroler o "nelege" (ca de altfel orice alt sistem de calcul !).
Din pcate aceast form de reprezentare a informaiei este total nepractic pentru un
programator, care va utiliza cel puin un limbaj de asamblare, n care o instruciune (o
mnemonic cu operanzii afereni) are drept corespondent o instruciune n limbaj main
(excepie fac macroinstruciunile disponibile la unele asambloare).
Un program n limbaj de asamblare este rapid i compact. Aceasta nu nseamn c un
astfel de program, prost scris, nu poate fi lent i de mari dimensiuni, programatorul avnd
controlul total (i responsabilitatea !) pentru execuia programului i gestiunea resurselor.
Limbajul de asamblare este primul care trebuie nvat, chiar sumar, atunci cnd
dorim s proiectm o aplicaie hard/soft cu un anume microcontroler (familie), el permind
nelegerea arhitecturii acestuia i utilizarea ei eficient.
Utilizarea numai a limbajului de asamblare pentru dezvoltarea unei aplicaii
complexe este neproductiv de multe ori, deoarece exist i familii de microcontrolere cu
CPU de tip CISC care au un numr foarte mare de instruciuni (x100) combinate cu moduri
de adresare numeroase i complicate.
Totui, nu trebuie uitat c la ora actual muli din productorii mari de
microcontrolere ofer medii de dezvoltare software gratuite care includ programe asambloare
gratuite. De asemenea, comunitatea utilizatorilor diverselor familii de microcontrolere a
dezvoltat i ea, n timp, multe astfel de asambloare, care sunt disponibile ca freeware.
b. Interpretere
Un interpreter este o implementare a unui limbaj de nivel nalt, mai apropiat de
limbajul natural. Este de fapt un program rezident care, n acest caz, ruleaz pe o platform
de calcul de tip microcontroler. Caracteristic pentru execuia unui program interpretat, este
citirea i executarea secvenial a instruciunilor (instruciune cu instruciune). De fapt
fiecare instruciune de nivel nalt este interpretat ntr-o secven de instruciuni main care
se execut imediat.
Cele mai rspndite interpretere sunt cele pentru limbajele BASIC i FORTH.
Limbajul BASIC este remarcabil prin simplitatea i accesibilitatea codului, dar (n varianta
interpretat) i prin viteza mai mic de execuie, acesta fiind de altfel preul pltit pentru
utilizarea oricrui interpreter. Un exemplu de astfel de interpreter foarte rspndit i utilizat
este PBASIC al firmei Parallax utilizat pentru programarea modulelor Basic Stamp. Este
foarte uor de nvat i poate fi utilizat suficient de productiv chiar de indivizi care au o
experiena minima n domeniul programrii.
Limbajul FORTH este popular datorit vitezei de execuie (apropiat de cea oferit de
limbajul de asamblare) i posibilitii construirii aplicaiilor din pri reutilizabile. Este un
limbaj mult diferit de limbajele clasice, codul este destul de greu de scris i de mai ales de
citit (codul este greu lizibil). Totui, odat stpnit foarte bine (n timp!), poate fi foarte
productiv n aplicaii cum ar fi cele de control, n robotic, etc.
Marele avantaj al utilizrii unui interpreter este dezvoltarea interactiv i
incremental a aplicaiei: se scrie o poriune de cod care poate fi testat imediat, instruciune
cu instruciune; dac rezultatele sunt satisfctoare se poate continua cu adugarea de astfel
de poriuni pn la finalizarea aplicaiei.
OBSERVAIE. Exist i variante interpretate ale limbajului C care constituie o
implementare aproximativ a standardului ANSI C. Un astfel de exemplu este Interactive C
(Newton Labs) care genereaz cod Motorola 68HC11 i este destul de mult utilizat n
robotic.
c. Compilatoare
Un compilator combin uurina n programare oferit de un interpreter (de fapt de
limbajul de nivel nalt) cu o vitez mai mare de execuie a codului. Pentru aceasta programul,
n limbaj de nivel nalt, este translatat (tradus) direct n limbaj main sau n limbaj de
asamblare (urmnd a fi apoi asamblat). Codul main rezultat are dimensiuni relativ mari (dar
mai mici dect cel interpretat) i este executat direct, ca un tot, de microcontroler. De regul
codul generat poate fi optimizat fie ca dimensiune, fie ca timp de execuie. Se pot enumera
compilatoare pentru limbajele: C, BASIC, Pascal, PL/M (Intel), Forth. Cele mai populare i
utilizate sunt cele pentru limbajul C, un limbaj universal folosit att pentru super computere
cum ar fi Cray-ul, ct i de microcontrolerele de 4 bii. Este un limbaj puternic i flexibil,
care dei de nivel nalt, poate permite i accesul direct la resursele sistemului de calcul. Un
program bine scris genereaz un cod rapid i compact. Totui, de multe ori, poriuni critice
din punct de vedere al vitezei de execuie, trebuie nc scrise n limbaj de asamblare. Exist
numeroase implementri, pentru majoritatea familiilor de microcontrolere. Cu anumite
limitri legate de arhitectur i mai ales resursele microcontrolerului, asigur
portabilitatea unei aplicaii scris pentru un anumit tip (familie) de microcontroler la un alt
tip (familie).
Pentru unele familii noi i foarte puternice de microcontrolere, datorit complexitii
setului de instruciuni i al numeroaselor moduri de adresare, este descurajat n mod explicit
utilizarea limbajului de asamblare n momentul n care se programeaz aplicaii performante.
Unitatea central a acestor noi microcontrolere a fost proiectat i optimizat pentru
utilizarea unor limbaje de nivel nalt.
Funcie i de familia de microcontrolere n cauz, preul unor astfel de compilatoare
(de C) poate fi destul de ridicat, ncepnd cu x100USD i ajungnd la x1000USD. Exist insa
i variante freeware de compilatoare de C, cum ar fi gcc care este o portare a compilatorului
omonim din Linux n lumea microcontrolerelor. Exist implementri diferite ale acestui
compilator care genereaz cod pentru familii diferite de microcontrolere (de exemplu AVR,
MSP430, 68HC11,etc.).
a. Simulatoarele
Un simulator este un program care ruleaz programul microcontrolerului -
implementeaz un microcontroler virtual - folosind un sistem de calcul gazd -host (cum ar fi
un PC). Programul se poate executa pas cu pas, coninutul variabilelor i registrelor poate fi
vizualizat i modificat. Reprezint un punct de plecare atunci cnd se abordeaz un
microcontroler, pentru familiarizarea cu resursele lui i cu limbajul de asamblare. Nu permite
simularea n timp real a ntreruperilor i, de regul, programul ruleaz mai ncet dect pe
maina real. De regul exist mijloace pentru evaluarea vitezei de execuie a codului simulat
(ca numr de cicluri main sau de stri). Ideal, un simulator ar trebui s permit i simularea
complet a interaciunii, cel putin din punct de vedere logic, cu toate perifericele disponibile.
b. Programele de depanare ("debbugers") rezidente
Sunt programe (denumite uneori n romn i programe "monitor") care ruleaz -sunt
rezidente- pe maina int (microcontrolerul) oferind faciliti de depanare similare
simulatorului. Interfaa cu utilizatorul este realizat prin intermediul unui sistem gazd (PC)
i/sau a unui terminal alfanumeric, conectate prin intermediul unui port serial. Utilizeaz o
parte din resursele microcontrolerului: memorie de program pentru el nsui (de tip ROM) i
memorie de date (RAM) pentru variabile proprii, memorie de program (de multe ori memorie
externa de tip RAM, pentru a se putea incarca i modifica cu usurinta codul!) pentru
programul ce se depaneaz, un port serial pentru comunicaia cu sistemul gazd, eventual
ntreruperi, etc. Se utilizeaz de regul mpreun cu un sistem de dezvoltare (sau evaluare),
care este un sistem minimal realizat n jurul microcontrolerului pe care ruleaz depanatorul,
dar avnd resurse suficiente pentru a permite testarea i depanarea aplicaiilor uzuale.
c. Emulatoarele In Circuit (ICE-In Circuit Emulators)
Sunt cele mai eficiente mijloace de testare i dezvoltare i au fost mult timp cele mai
complexe i mai costisitoare. Presupun existena unui hardware dedicat (i complicat!) care
nlocuiete practic microcontrolerul (se conecteaz n locul acestuia n sistemul pentru care se
dezvolt aplicaia), n acelai timp fiind disponibile toate facilitile descrise anterior i altele
suplimentare. Permit un control total al mainii int (n timp real), fr a folosi nimic din
resursele acesteia (la variantele cele mai costisitoare). Ele sunt realizate de cele mai multe ori
ca un mijloc de testare i depanare de sine stttor, conectat la un PC prin intermediul unui
port paralel, serial sau USB. Cele mai ieftine sunt disponibile n gama x100$, iar cele mai
scumpe x1000$.
Variantele mai noi folosesc interfeele specializate de programare i depanare
integrate la nivelul microcontrolerului, cnd ele exist. Nu este necesar nlocuirea
microcontrolerului de pe sistemul int, conectarea cu acesta fcndu-se printr-un numr
minim de interconexiuni. Exemple de astfel de interfee ar fi: JTAG/ICE - In Circuit
Emulation - la multe familii de microcontrolere, BDM (Background Debug Monitor) - pentru
Freescale/Motorola. Existena acestui tip de interfee face posibil realizarea de emulatoare
cu un pre de cost mult mai mic dect cele clasice.
d. Simulatoarele de sistem
Reprezint o categorie aparte de simulatoare destinate simulrii cat mai complete a
sistemului i a aplicaiei n ansamblu, cu alte cuvinte a microcontrolerului mpreuna cu o
dispozitivele hardware externe. Ele integreaz de regula i un simulator SPICE.
Cele mai cunoscute sunt Proteus VSM (Virtual System Modelling) al firmei
Labcenter Electronics i UMPS (Universal Microprocessor Program Simulator) al firmei
Virtual Microdesign
Un astfel de simulator permite rularea aplicaiei (codului), n mod continuu sau pas cu
pas i evaluarea n detaliu a modului cum aceasta (si microcontrolerul) interacioneaz cu
hardware-ul extern. El permite ceea ce se numete co-simularea (Co-simulation):
interaciunea dintre software-ul microcontrolerului i dispozitivele electronice analogice sau
numerice conectate cu acesta. Sunt bazate pe utilizarea unor modele avansate ale unor familii
de microcontrolere precum i pe modelele SPICE ale dispozitivelor electronice. In cazul lui
Proteus VSM exist (versiunea 6.8 SP1) modele ale microcontrolerelor: ARM (LPC2000-
Philips), PIC 10, PIC 12, PIC 16, PIC 18, AVR, 8051, 68HC11 i Basic Stamp. In cazul UMPS
exist modele ale microcontrolerelor: PIC12, PIC16, 8051, 68HC05, 68HC11, ST6200
(SGS) i COP8. Pentru fiecare model de microcontroler exist un asamblor i un editor de
legturi integrat astfel c se poate face, n anumite limite, i dezvoltarea codului n
asamblare. Pe lng aceasta ele au asigurate i interfee corespunztoare pentru a se putea
dezvolta codul cu medii de programare consacrate pentru familia respectiv de
microcontrolere, folosind de exemplu un compilator C. Facilitile de simulare a codului sunt
similare celor ntlnite la simulatoarele deja menionate.
Pe lng numeroasele dispozitive electronice discrete, circuite integrate analogice sau
numerice (la Proteus VSM exist peste 6000 de modele), circuite de memorie sau periferice,
n categoria dispozitivelor externe se mai pot meniona i sisteme de afiare (LED, LCD),
tastaturi matriciale sau butoane, relee, etc.
Ambele simulatoare menionate sunt produse comerciale, dar exist i versiuni de
evaluare, utilizabile cu limitrile de rigoare.
e. Nucleele (sistemele de operare) de timp real (Real Time kernel, Real Time
Operating System-RTOS)
Pe piaa de software pentru microcontrolere exista i componente numite nuclee de
timp real sau sisteme de operare n timp real (RTOS). Un astfel program de sistem de nivel
profesional este o componenta software scump sau foarte scump, funcie de complexitatea
lui, de accesibilitatea surselor programului, de familia de microprocesoare creia ii este
adresat, de modul in care va fi distribuit mpreuna cu aplicaia. Exist ins i variante de
RTOS, de mai mic complexitate, din categoria freeware sau shareware, care pot fi utilizate
cu performante mulumitoare.
Un sistem de operare n timp real faciliteaz crearea aplicaiilor aa zise de timp real,
dar nu garanteaz i faptul ca ele chiar se vor executa n timp real, aceasta depinznd de
modul n care este utilizat acest software la nivel de sistem..
Spre deosebire de un calculator cum este PC-ul, un sistem integrat (embedded system)
este proiectat ntotdeauna ntr-un anumit scop i are un cod care se execut aproape
ntotdeauna dintr-o memorie ROM, fiind de presupus c nu se modific pe parcursul
execuiei aplicaiei. Astfel lucrurile sunt uurate deoarece comportarea sistemului poate
specificat complet nc din faza de proiectare. Din aceasta cauza, n cazul multora din
aplicaii, multe probleme se pot rezolva n timp real i fr s se utilizeze un RTOS.
Esenial este pan la urm calitatea i competena celui care programeaz aplicaia !



Arhitectura

Capitolul de fata reprezinta o descriere a familiei de microcontrollere
pe 8 biti, bazate pe arhitectura 80C51, realizate de firma Philips
Semiconductors, precum si a altor componente furnizate de catre respectivul
producator. Un microcontroller este un microprocesor destinat n general
controlului unor procese industriale care contine memorii si diverse porturi
de I/O integrate pe acelasi cip. n continuare se vor prezenta modurile de
adresare, setul de instructiuni, partajarea memoriei s.a. n cadrul familiei de
microcontrolle 80C51.
Microcontrollere derivate contin si o interfata seriala I
2
C (magistrala de
interconectare a circuitelor integrate), care permite conectarea cu usurinta la peste
alte 100 de componente integrate, sporind capacitatea si functionalitatea
microsistemului realizat. Pentru aplicatii industriale si automate,
microcontrollerele sunt nsotite de alta o magistrala seriala de control (Control Area
Network - CAN).
Familia de microcontrollere pe 16 biti, 90CXXX se bazeaza pe
arhitectura Motorola 68000. n timp ce microcontrollerele sunt pe 16 biti n
exterior, n interior unitatea centrala a arhitecturii 68000 este pe 32 de biti.
Acest fapt confera utilizatorului o putere de procesare mai mare, n
conditiile cresterii necesitatilor de proiectare, trecnd de la microcontrollere
pe 8 biti la cele pe 16 biti. Microcontrollerele pe 16 biti ai firmei Philips
Semiconductors sunt compatibile software cu codul procesorului Motorola
68000
ARHITECTURA FAMILIEI 80C51

ORGANIZAREA MEMORIEI


















Figura 5.1. Schema bloc a microprocesoarelor 80C51
Toate procesoarele 80C51 au spatii de adrese separate pentru
instructiuni si date implementnd deci o arhitectura de tip Harvard a memoriei
(vezi figura 5.1). Accesarea zonei de date se face pe o magistrala de 8 biti, data citita
putnd fi rapid memorata si manipulata de catre registrii pe 8 biti ai CPU. Memoria
program este de tip ROM sau EPROM si poate avea capacitati de pna la 64ko. La
dispozitivele 80C51, cei mai putin semnificativi 4ko de memorie sunt implementati n
cip. Memoria de date este de tip RAM. Cei mai putin semnificativi 128 octeti ai
memoriei de date sunt implantati n cip, restul de pna la 64ko regasindu-se extern pe
placa.



Memoria program
Figura 5.2 ilustreaza harta memoriei program - partea cea mai putin
semnificativa. Dupa resetarea sistemului, CPU (unitatea centrala de
procesare) ncepe executia de la adresa 0000H, n conformitate cu
initializarea PC-ului. Primii trei octeti ai Memoriei Program pot codifica de
exemplu, o instructiune de salt neconditionat (JUMP <Adresa>)
reprezentnd prima instructiune care se executa imediat dupa initializare. De fapt are
loc un salt la adresa de nceput a programului monitor - program ce realizeaza
verificarea configuratiei hardware a microsistemului, teste de memorie, interfata cu
utilizatorul, etc.
Fiecarei ntreruperi i este asignata o locatie fixa n memoria program.
ntreruperea determina CPU sa execute salt la locatia respectiva, unde ncepe
executia rutinei de serviciu (tratare a ntreruperii). Zona de program aferenta
rutinelor de tratare a ntreruperii se mparte n intervale de 8 octeti: 0003H - pentru
ntreruperea externa 0, 000BH - pentru circuitul Timer 0
(numarator),0013H - pentru ntreruperea externa 1, 001BH - pentru
circuitul Timer 1 etc. Daca o rutina de serviciu este suficient de scurta, ea
poate fi inclusa n interiorul unui astfel de interval de 8 octeti. Rutinele mai
lungi de opt octeti vor folosi n general o instructiune de salt codificata pe
maximum trei octeti pentru a nu altera zona aferenta unei alte ntreruperi
active.


















Figura 5.2. Memoria program la procesoarele 80C51
Cei mai semnificativi 4 ko ai memoriei program pot fi implementati fie
n cipul ROM intern fie n memoria ROM externa. Selectia se face prin
conectarea pinului EA la tensiunea de alimentare (V
cc
) sau la masa (V
ss
).
Daca EA este legat la V
cc
, accesele de citire din zona de memorie program cuprinsa
ntre 0000H si 0FFFH sunt directionate spre memoria ROM -
intern implementata. Accesele de citire din zona de memorie program de la adresa
1000H la FFFFH sunt ndreptate spre memoria ROM externa .



EA se conecteaza la masa atunci toate citirile din memoria program sunt
directionate spre memoria externa ROM.
Figura 5.3 reprezinta configuratia hardware pentru executia unui
program stocat n memoria program externa. Se observa 16 linii de intrare / iesire
(porturile 0 si 2) avnd functii de magistrala dedicata citirii codului (datei) din
memoria program externa. Portul 0 serveste la multiplexarea magistralei de date /
adresa. Aceasta multiplexare implica desigur o scadere a vitezei de lucru cu memoria
si este datorata unor constrngeri tehnologice legate de numarul de pini ai
microcontrollerului. n cadrul unui ciclu de aducere (fetch) a instructiunii el emite
octetul cel mai putin semnificativ al registrului Program Counter (PCL) ca si adresa
si ramne n stare de asteptare pna la sosirea octetului de cod din memoria
program. n momentul n care octetul cel mai putin semnificativ al registrului
Program Counter este valid n portul 0, semnalul ALE (Address Latch Enable)
strobeaza acest octet ntr-un latch ale carui iesiri ataca memoria. ntre timp, portul 2
emite cel mai semnificativ octet al registrului Program Counter
(PCH). n final, semnalul de validare a citirii ( PSEN ) se activeaza iar
EPROM-ul emite octetul de cod cerut de catre microcontroller, prin
intermediul aceluiasi port P0, aflat de data aceasta pe post de magistrala de
date.
















Figura 5.3. Executia programelor stocate n Memoria Externa
Adresarea memoriei program se face ntotdeauna pe 16 biti, chiar daca capacitatea
memoriei program fizic implementata este mai mica de 64 ko.






Executia programelor externe sacrifica doua din porturile pe 8 biti (P0 si P2)
acordndu-le acestora functii de adresare a memoriei program.
Memoria de date
n figura 5.4, se prezinta o configuratie hardware pentru accesarea de pna la 2 ko
de memorie RAM externa. CPU n acest caz executa instructiunile din
memoria ROM interna. Portul 0 serveste ca multiplexor al magistralei de date
respectiv adrese care "ataca" memoria RAM, iar cele 3 linii de intrare / iesire ale
portului 2 sunt folosite la paginarea memoriei
RAM (8 pagini). CPU genereaza semnalele de comanda RD si WR (validare
citire respectiv scriere) necesare n timpul acceselor la memoria RAM externa.
Adresarea memoriei de date externe poate fi facuta pe 8 sau 16 biti. Adresarea pe 8
biti este deseori folosita n conjunctie cu una sau mai multe linii de intrare / iesire
pentru paginarea memoriei RAM. Adresarea pe 16 biti implica folosirea portului 2 ca
emitent al octetului cel mai semnificativ de adresa, asa cum s-a mai aratat








Figura 5.5. Memoria de date interna
Memoria de date interna este mpartita n trei blocuri (vezi figura 5.5),
referite sub numele: cei mai putin semnificativi 128o (inferiori), cei mai
semnificativi 128o (superiori), si SFR (spatiu alocat registrilor cu functii
speciale). Adresarea memoriei de date interne se face pe cuvinte de 1 octet
rezultnd un spatiu adresabil de 256o. Folosind un mic artificiu, modurile de
adresare ale memoriei de date interne pot gazdui 384o si nu doar 256o cum
s-ar parea la o prima vedere. Adresarea celor 128o inferiori (00 -7FH) se
poate face direct sau indirect. Adresarea celor 128o superiori (80 - FFH) se
face doar prin adresare indirecta iar accesul la spatiul registrilor cu functii
speciale (SFR) se face doar prin adresare directa. Rezulta ca zona de 128o
superiori si spatiul SFR ocupa acelasi bloc de adrese, de la 80H la FFH, desi
fizic constituie doua entitati diferite.
Figura 5.6 reflecta maparea celor 128o inferiori ai memoriei interne. Cei
mai putin semnificativi 32 de octeti sunt grupati n 4 bancuri a cte 8 registri.
Instructiunile programelor apeleaza acesti registri sub numele R0R7. Doi biti
din registrul de stare program (PSW) selecteaza bancul de registri folosit. Aceasta
permite o eficientizare a spatiului de cod ntruct instructiunile cu operare pe
registri ocupa mai putin spatiu n memoria program dect instructiunile care
folosesc adresarea directa. Urmatorii 16o, succesorii bancurilor de registri formeaza
un bloc de memorie adresabil pe bit. Setul de instructiuni al microcontrollerului
80C51 cuprinde un numar mare de instructiuni avnd operanzi codificati pe un singur bit.








Maparea spatiului de memorie aferent registrilor cu functii speciale (SFR) este
exemplificata n figura 5.7. De remarcat ca n spatiul alocat SFR nu toate adresele sunt
ocupate. Adresele libere nu sunt implementate n cip fiind probabil rezervate
pentru mbunatatiri ulterioare ale arhitecturii. Accesele de citire la aceste locatii
vor returna date aleatoare, iar accesele de scriere nu vor avea nici un efect. Dintre
registrii cu functii speciale amintim: acumulatorul (A), registrul de stare program
(PSW), pointerul de stiva (SP),
pointerul de date (DPTR), registrul tampon (buffer) serial de date (SBUF), registrii
timer, de control, de validare ntreruperi, cu prioritati de ntrerupere,
4 porturi.


















Figura 5.6. Reprezentarea celor 128 octeti inferiori ai memoriei RAM interna


















Figura 1.7. Maparea spatiului de memorie aferent registrilor cu functii speciale





Registrul de stare program (vezi figura 5.8) contine biti de stare care
reflecta starea curenta a CPU. Contine bitii de transport - Carry, Auxiliary
Carry, de depasire - Overflow, de paritate, doi biti de selectie ai bancului de
registre si doi biti de stare la dispozitia utilizatorului. Registrul B este folosit
n cadrul operatiilor de nmultire / mpartire. Registrul SP este pe 8 biti si
este incrementat nainte ca data sa fie memorata n timpul executiei
instructiunilor PUSH sau CALL (SP - pointeaza spre ultima locatie ocupata
din stiva). Acest lucru este atipic ntruct n majoritatea procesoarelor
registrul SP este predecrementat la salvarea n stiva si nu preincrementat ca
n acest caz. Desi stiva poate rezida oriunde n memoria RAM, registrul SP
este initializat cu valoarea 07H imediat dupa semnalul Reset. Aceasta
determina ca stiva sa nceapa practic de la locatia 08H. Registrul DPTR
poate fi folosit ca un registru pe 16 biti sau ca doi registri independenti pe 8
biti (DPH - octetul superior al registrului DPTR si DPL - octetul inferior al
registrului DPTR). Registrii pereche (TH0, TL0) si (TH1, TL1) sunt registri
numaratori pe 16 biti pentru circuitele timer 0 si 1. Registrul TMOD este un
registru de control si specifica modul de lucru a celor doua circuite timer.
Alti registri de control sunt TCON (control al circuitelor timer), SCON
(control al portului serial), PCON (control al sursei de alimentare).












Figura 5.8. Registrul de Stare Program (PSW)
Setarea / resetarea bitilor de selectie ai celor patru bancuri de registre
(PSW
3
, PSW
4
) se face prin metode software. De exemplu: orice instructiune
care adreseaza spatiul de memorie de date 00H 1FH modifica
corespunzator bitii de selectie din PSW.

MODURILE DE ADRESARE

Pentru aplicatii de control pe 8 biti, setul de instructiuni al
microcontrollerului 80C51 a fost optimizat. Acesta permite o varietate mare de moduri
rapide de adresare, pentru accesarea memoriei RAM interne, facilitnd operatii pe
octet asupra structurilor de date de dimensiuni reduse. Setul de instructiuni permite
manevrarea directa a operanzilor la nivel de bit n sisteme logice si de control care
necesita procesare booleana.
a. Adresare directa - operandul este specificat printr-un cmp de
adresa pe 8 biti al instructiunii. Doar memoria RAM interna si SFR
sunt adresabile direct.
Dupa cum s-a aratat, registrul Acumulator (adresa E0H n spatiul SFR) apartine
zonei de memorie SFR si poate fi adresat direct. Astfel, instructiunea de adunare
devine: ADD E0H, 7FH si s-ar putea crede ca respectiva instructiune este codificata
pe 3 octeti (1opcode-ul instructiunii;2,3










- cei doi operanzi[adresele de memorie]).
Totusi, respectiva instructiune este codificata pe doar 2 octeti (1- opcode-ul
instructiunii [ce include si primul operand - acumulatorul] si 2 - al doilea
operand [adresa de memorie]). De fapt, arhitectura microcontrollerului fiind
orientata pe acumulator (instructiunile aritmetico- logice cu doi operanzi au
acumulatorul implicit ca sursa si destinatie), acesta- prin exceptie fata de
ceilalti registri SFR
- nu mai este necesar a fi adresat direct prin adresa
E0H, fiind codificat n chiar opcode-ul instructiunii. Astfel, instructiunile
aritmetico logice cu doi operanzi n modul de adresare direct sunt
codificate pe doar doi octeti n loc de trei.

b. Adresare indirecta - adresa operandului este specificata n mod
indirect prin intermediul unui registru pointer. Pentru adrese pe
octet registrii folositi sunt R0 sau R1 din bancul de registri selectat,
sau SP (stack pointer) n cazul acesarii stivei. Pentru adrese pe doi
octeti se foloseste doar registrul pointer de date (DPTR). Att
memoria RAM interna ct si cea externa sunt adresabile indirect.
Exemplu: ADD A, @R0

c. Adresarea prin registri - 3 biti din opcode-ul instructiunii
specifica unul din cei 8 registri (R0R7) care vor fi accesati.
Bancul de registri este specificat prin cei doi biti dedicati ai
registrului PSW n momentul executiei instructiunii. Instructiunile care acceseaza
registrii n acest mod se numesc optimizatoare de cod ntuct se elimina necesitatea
unui octet de adresa (de exemplu, n modul direct, adresarea R0 R7 mai consuma un
octet care n plus trebuie si adus din memoria program).
Exemplu: ADD A, R7

d. Adresarea prin instructiuni cu registrii specifici - este cazul
instructiunilor care opereaza asupra registrului acumulator (A) sau
pointer de date (DPTR). Nu e necesar un octet de adresa pentru
operanzii respectivi, codificarea operanzilor se face n chiar
opcode-ul instructiunii.
e . Adresarea prin constante imediate - folosita la ncarcarea unei
valori imediate ntr-un registru. Valorile pot fi n sistem zecimal
sau hexazecimal.
Exemplu: ADD A, #127
f. Adresarea indexata - este folosita la citirea tabelelor de memorie
program. Doar memoria program este adresabila indexat. Registrul
DPTR sau PC retine adresa de baza a tabelului, iar registrul
acumulator retine numarul intrarii n tabel. Adresarea indexata este
folosita si n cazul instructiunilor de selectie de tip "case" din
limbajele de nivel nalt. n acest caz adresa instructiunii destinatie
se calculeaza ca suma dintre un pointer de baza si acumulator.
Exemplu: MOVC A, @A+DPTR