Sunteți pe pagina 1din 144

Sisteme Incorporate (Embedded Systems)

1



1. INTRODUCERE


1.1. Ce este un microcontroler?

Un controller este o structur electronic destinat controlului automat al unui proces
extern. Primele controller-e au fost realizate n tehnologii pur analogice, folosindu-se componente
electronice discrete i/sau componente electromecanice (relee, contactoare etc.). Controller-ele
moderne (digitale) au fost realizate in prima faza cu componente discrete (circuite integrate) digitale
si analogice caracterizate de dimensiuni si consum energetic relativ mari si o fiabilitate scazuta.
Apariia i utilizarea microprocesoarelor de uz general (pentru PC de exemplu) a dus la o
reducere consistent a costurilor, dimensiunilor, consumului i o mbuntire a fiabilitii.
Pe msur ce procesul de miniaturizare a continuat, a fost posibil ca majoritatea
componentelor necesare realizrii unei astfel de structuri s fie ncorporate (integrate) intr-un singur
circuit integrat (chip).
In functie de gradul de generalizare al aplicatiilor procesate, controller-ele se impart in doua
mari categorii:

- MicroProcessor Unit (MPU): microprocesoare de uz general destinate mai multor aplicatii
gestionate sau nu de utilizator;
-
- MicroComputer Unit (MCU): microprocesoare dedicate unei/unor aplicatii specifice
(microcontroller-e).

Orice sistem de calcul se bazeaza in functionarea sa pe un controller. Calculatoarele
personale detin de exemplu controller-e MPU (microprocesoare). Sistemele de calcul care au in
componenta lor controller-e MCU (microcontroller-e) se numesc sisteme incorporate (Embedded
Systems).
Spre deosebire de un microprocesor de uz general, un microcontroller reprezinta un sistem
de calcul complet integrat intr-un chip. Practic, un microcontroller este un calculator intr-un chip,
avand performante inferioare unui calculator implementat cu componente discrete dar cu avantaje
majore obtinute prin reducerea dimensiunii, puterii consumate, costurilor de productie etc.
In cazul general un microcontroller trebuie sa detina urmatoarele blocuri functionale:

a. Unitatea central (CPU)
b. Blocul oscilator intern pentru ceasul de sistem
c. Memoria sistemului de tip ROM/PROM/EPROM/FLASH i RAM
d. Sistem de ntreruperi si exceptii
e. Blocul de intrare/ieire (porturi digitale paralele)
f. Porturi seriale programabile asincrone i sincrone
g. Sistem de timer-e/numrtoare programabile pentru gestiunea timpului

Sistemele incorporate (dedicate) pot detine blocuri specifice in functie de caracteristicile
aplicatiilor gestionate:

a. Convertor analog-numeric cu una sau mai multe intrari analogice
b. Convertor numeric-analogic i/sau ieiri cu modulare in impulsuri (PWM - Pulse
Width Modulation)
Sisteme Incorporate (Embedded Systems)
2
c. Watchdog timer timer-ul de garda utilizat la restartarea sistemului in cazul aparitiei
anomaliilor software
d. etc.

De asemenea, un microcontroller este capabil sa efectueze operatii la nivel de bit, sa
acceseze rapid si direct porturile de intrare/ieire i sa trateze eficient si in timp real evenimentele
externe (intreruperi sau semnale provenite de la periferie).
Prin utilizarea microcontroller-elor in sistemele actuale nu se elimin in totalitate
componentele de interfatare cu mediul exterior: blocuri de prelucrare analogic (amplificare,
redresare, filtrare, protecie-limitare), elemente pentru realizarea izolrii galvanice (optocuploare,
transformatoare), elemente de comutaie de putere (tranzistoare de putere, relee electromecanice
etc).


1.2. Domenii de utilizare a microcontroller-elor

Aplicaiile n care se utilizeaz microcontroller-e fac parte din categoria sistemelor
ncorporate (Embedded Systems).
Initial sistemele incorporate au fost implementate in industrie pentru automatizarea mai
eficienta a proceselor industriale. In prima faza sistemele cu comanda mecanica si electromecanica
au fost inlocuite cu sistemele CNC (Computer Numeric Control) care au revolutionat masinile
unelte. In a doua faza au aparut automatele programabile PLC (Programmable Logic Controller),
liniile flexibile de fabricaie, etc. La ora actuala automatizarea proceselor se face prin sisteme
distribuite de microcontroller-e (interconectate prin diverse magistrale) care coopereaza pentru
controlul eficient al procesului monitorizat.

In ultimii 20 de ani sistemele incorporate au patruns in toate domeniile in care este necesar
controlul unui sistem:

- domeniul automotive este unul din cele mai revolutionare domenii in care s-au impus
microcontroller-ele. Microcontroller-ele sunt utilizate atat pentru controlul blocurilor simple
(sistemul de iluminare) cat si al celor complexe care asigura siguranta pasagerilor (controlul
puterii motorului, controlul caii de rulare, climatizare, inchidere centralizata etc.). In cadrul
unui automobil exista la ora actuala retele de ordinul zecilor de microcontroller-e care
coopereaza eficient pentru controlul acestuia.

Sisteme Incorporate (Embedded Systems)
3

Exemplu de unitate ECU din automobil

- microcontroller-ele s-au impus si in domeniul aparaturii casnice: sisteme audio-video,
televizoare, camere video, camere digitale, telefonie mobil, GPS-uri, jocuri electronice,
maini de splat, frigidere, cuptoare cu microunde, aspiratoare etc.






- un alt domeniu acaparat de sistemele embedded este cel al controlului mediului din locuine,
hale industriale, obiective de interes public, case de marcat, cititoare de cartele etc.

Sisteme Incorporate (Embedded Systems)
4


- industria aerospaial si militara au fost primele industrii in care s-au impus microcontroller-
ele prin integrarea acestora in aparatele de msura, senzori, traductoare inteligente.


Cockpit pentru avion Airbus (2002!)

- Microcontroller-ele se regasesc de asemenea si in perifericele aferente calculatoarelor
personale (placi de sunet, placi video, dispozitive de intrare-iesire). Practic un sistem de
calcul de tip PC este un sistem embedded compus.

Sisteme Incorporate (Embedded Systems)
5


- Johnnie este un robot umanoid destul de simplu, construit la Universitatea Tehnic din
Munchen n 1998, utilizeaz 5 microcontroller-e, conectate prin intermediul unei magistrale
CAN la un calculator PC. Alpha, un alt robot umanoid (fotbalist ca destinaie) dezvoltat la
Universitatea din Freiburg utilizeaz, intr-o variant a sa, 11 microcontroller-e conectate
similar. Un numr foarte mare de microcontroller-e sunt folosite i de aa zisele jucrii
inteligente, din care capetele de serie cele mai cunoscute sunt cei doi roboi, unul canin i
altul umanoid: AIBO (Sony) i ASIMO (Honda). ASIMO folosete 26 de microcontroller-e
numai pentru controlul individual al celor 26 de elemente de acionare inteligente (motoare).
Tot n categoria roboilor umanoizi intra i QRIO (Sony) sau HOAP-1 (Fujitsu). Roboii
respectivi sunt produi n serie, unii dintre ei chiar la un pre accesibil.



Johnnie Aibo
Sisteme Incorporate (Embedded Systems)
6


Asimo Qrio



HOAP-1


1.3. Clasificarea microcontroller-elor

Exist la ora actual un numr extrem de mare de tipuri constructive de microcontroller-e.
Un criteriu de clasificare care se poate aplica 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, 32 de bii sau 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 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
Sisteme Incorporate (Embedded Systems)
7
comunicaii, controlul tastaturilor, controlul aparaturii audio/video, prelucrarea numeric a
semnalului, etc.

1.4. 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.). Astfel
se pot realiza structuri cu o mare densitate de integrare, cu un consum redus (care va depinde de
frecvena de tact), permind eventual alimentarea de la baterie. Logica intern este static (total sau
n cea mai mare parte) permind 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).

1.5. 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. Arhitectura de tip von Neumann

Microcontroller-ele 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 instruciunilor (instruction fetch) i a datelor; efectuarea celor dou operaii
separate, n mod secvenial, are ca efect ncetinirea operaiilor. Este arhitectura standard pe baza
careia se defineste arhitectura de tip Princeton.

b. Arhitectura de tip Harvard

La aceast arhitectur exist memorii 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.

Indiferent de modelul arhitectural ales in dezvoltarea procesoarelor exista doua mari
paradigme de proiectare:


a. Paradigma CISC

Sisteme Incorporate (Embedded Systems)
8
Procesoarele primelor microcontroller-e au fost proiectate pe baza conceptului 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. Paradigma 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 microcontroller-elor. 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:

- vitez sporit de execuie prin implementarea pipeline-urilor 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.
- unitate de comanda cablata

1.5. Implementarea spaiului de memorie in microcontroller-e

Aditional memoriei local de tip RAM, de dimensiuni relativ reduse (de la x10 octei la
x1Ko), 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. Tipic, 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.
La ora actuala exista mai multe concepte legate de tipul de memorie existenta pe un
microcontroller:

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.
b. (mask) ROM propriu-zise, cele mai economice pentru o producie de mas
c. 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.
d. EEPROM - multe microcontrolere au i o memorie de acest tip, de dimensiune limitat (de
la x10 octei la xK 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 (x100000).
e. NOVRAM (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.
Sisteme Incorporate (Embedded Systems)
9
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 (software),
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.
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. Protejarea codului - protejarea codului program dintr-o memorie local nevolatil
mpotriva accesului neautorizat (la citire deoarece pirateria soft exist i aici) este oferit ca
opiune (ea mai trebuie i folosit!) la variantele FLASH, EPROM sau OTP. Codul poate fi
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 patch-uri (alterri cu un
anumit scop) ale codului original. La variantele mask-ROM propriu-zis protecia este de
cele mai multe ori implicit.
f. 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.

1.6. Controlul puterii consumate

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 porturilor de I/O 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 sistem.
De exemple, in modul de tip "IDLE" toate activitile sunt oprite cu excepia oscilatorului de
tact i (dac exist) a timer-ului "watchdog", a circuitului de monitorizare a oscilatorului de tact i
eventual a unui timer dedicat acestui scop ("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). Timer-ul dedicat poate scoate periodic microcontrolerul din aceast stare, pentru
ndeplinirea anumitor sarcini, dup care se reintr n starea respectiv.
Sisteme Incorporate (Embedded Systems)
10
n modul "HALT" toate activitile sunt oprite, tensiunea de alimentare poate fi cobort sub
valoarea nominal, fr alterarea strilor CPU, RAM si 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) microcontroler-ul 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) 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.

1.7. Ceasul sistem

Un microcontroler este caracterizat si de circuitele electronice aferente oscilatorului care
genereaz semnalul de tact al sistemului. Astfel este posibil implementarea simpl a oscilatorului
doar prin adugarea, n exterior, a unui rezonator extern compus dintr-un element de cuar sau
piezoceramic pentru stabilizarea frecventei si de regula doi condensatori. 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: 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 ceasul sistemului 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.

1.8. Sistemul de intrare/ieire (I/O)

Toate microcontrolerele au un numr de intrri (Inputs) / ieiri (Output) digitale (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).

Sisteme Incorporate (Embedded Systems)
11
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) i Zigbee (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
Sisteme Incorporate (Embedded Systems)
12
extern. Timpul minim de conversie este n plaja x sec la x10 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 ( - ).
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.

h. 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).

1.9. 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 (Intel MCS-48 - www.intel.com )

"Bunicul" microcontrolerelor pe 8 bii, mai este nc folosit! Unele din caracteristicile sale
arhitecturale se regsesc la urmtoarea generaie (MCS-51, 8051).

b. 8051 (Intel MCS-51 i muli alii: Atmel, Philips- www.semiconductor.philips.com,
Infineon, Atmel, Dallas-Maxim - www.maxim-ic.com, Cygnal www.cygnal.com , etc.)

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
Sisteme Incorporate (Embedded Systems)
13
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 (Intel MCS-96)

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 (Freescale - www.freescale.com, ex Motorola )

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.

f. 68HC11, 68HC12, 68HC16 (Freescale)

68HC11 a fost unul din cele mai puternice microcontrolere pe 8 bii, foarte rspndit n
ciuda faptului c Motorola a fost un timp singurul productor. Are un set de instruciuni asemntor
cu alte produse ale firmei (6801, 6805, 6809). Are un spaiu de adrese unic de 64K. Nenumrate
variante ca resurse: EEPROM, OTP, CAN, PWM, etc. Prezint ca particularitate existena unui
program de ncrcare rezident (bootstrap loader n ROM intern) cu care, la reset, un segment din
memoria RAM extern poate fi ncrcat cu cod program prin intermediul portului serial. Variantele
evoluate sunt de fapt microcontrolere de 16 bii:
- un "super 68HC11", numit 68HC12 bazat pe o nou unitate central numit CPU12, care
reprezint extensia la 16 bii a arhitecturii HC11
- un 68HC16, mai puin rspndit, bazat pe o unitate central numit CPU16

Sisteme Incorporate (Embedded Systems)
14
g. 683xxx (Freescale)

Microcontrolere pe 32 de bii construite n jurul unui CPU analog microprocesorului
M68020 (CPU32), denumite i "procesoare integrate". Putere de calcul comparabil sau mai mare
ca a lui Intel 80386.

h. PIC (Microchip- www.microchip.com )

Primul microcontroler din aceast familie (PIC1650) a aprut acum mai bine de 20 de ani pe
vremea cnd firma era proprietatea General Instruments. Este o familie de microcontrolere care, n
ultimii ani, a cunoscut o dezvoltare exploziv. Sunt disponibile actualmente sub forma a 6 serii:
PIC10, PIC12, PIC14, PIC16, PIC17 i PIC18. In seriile respective exist variante cu memorie de
program de tip OTP(C) sau FLASH(F). Au fost primele microcontrolere de 8 bii cu arhitectur
RISC: PIC16C5x avea un set de doar 33 instruciuni (Intel 8048 avea 90). Arhitectura este de tip
Harvard i, ca o particularitate, dimensiunea cuvntului pentru program este de 12, 14 sau 16 bii,
cuvntul de date fiind tot de 8 bii. Exist foarte multe variante pentru cele sase serii, unele din ele
fiind caracterizate printr-un numr mic de conexiuni exterioare (pini) i n consecin dimensiuni
mici, consum foarte mic, ideea de baz fiind costul redus. Cronologic, ultimul produs al firmei
Microchip este seria dsPIC30F, de fapt un procesor numeric de semnal, de 16 biti, cu o periferie
specific optimizat pentru controlul actionrilor electrice (motoare electrice). Firma Ubicom (ex
Scenix, www.ubicom.com) produce nite clone ale familiei PIC, mult mai rapide dect originalele.
Modulele Basic Stamp ale firmei Parallax (www.parallax.com) sunt bazate si pe astfel de
microcontrolere (sunt foarte utilizate, i nu numai de hobbistii din robotic!).

i. AVR (Atmel- www.atmel.com )

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) (NS -National Semiconductors - www.national.com )

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 (Zilog, - www.zilog.com )

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 ( Rabbit Semiconductors- www.rabbitsemiconductor.com )
Sisteme Incorporate (Embedded Systems)
15

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 (Texas Instruments- www.ti.com )

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 (AMD- www.amd.com )

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 (Infineon, ex Siemens www.infineon.com )

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 (www.fme.fujitsu.com) - 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 (ex Hitachi, www.renesas.com) -
ofer de asemenea o gam larg de microcontrolere organizate n familii de 4, 8, 16 i 32 de bii.
Sisteme Incorporate (Embedded Systems)
16
Exist un numr foarte mare de variante constructive n fiecare familie. ARM (Advanced RISC
Machine, www.arm.com ) - 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 (nucleu ARM) pentru numeroi
productori de circuite (Atmel, Philips, TI, OKI www.okisemi.com , etc.). 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.).


1.10. Limbaje de programare

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

1.10.2. Interpretoare

Un interpretor 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 interpretoare 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 interpretor foarte rspndit i utilizat este PBASIC al firmei
Parallax utilizat pentru programarea modulelor Basic Stamp. Este foarte uor de nvat i poate fi
Sisteme Incorporate (Embedded Systems)
17
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 interpretor 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.

1.10.3. 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.).

Observaii
Codul este obinut cu ajutorul unui mediu integrat de dezvoltare a programelor (IDE-
Integrated Development Environment) care conine n mod tipic urmtoarele componente software:
un editor specializat (orientat pe codul surs), un asamblor/compilator, un editor de legturi/locator
("link-editor/locator"), programe de gestiune a unor biblioteci de cod ("librarians"), programe de
conversie a formatelor de reprezentare a codului (de exemplu din binar n format Intel HEX sau
Motorola S) i, nu n ultimul rnd, un simulator i/sau depanator ("debugger"). Codul astfel obinut
Sisteme Incorporate (Embedded Systems)
18
trebuie ncrcat n memoria de program a mainii int unde va rula, fiind de fapt programat ntr-o
memorie de tip (EP)ROM/FLASH sau ncrcat direct (up-loaded) ntr-o memorie de tip RAM.

1.11. Dezvoltarea i testarea aplicaiilor

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

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

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

1.11.4. 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
Sisteme Incorporate (Embedded Systems)
19
dispozitivele hardware externe. Ele integreaz de regula i un simulator SPICE. Cele mai cunoscute
sunt Proteus VSM (Virtual System Modelling) al firmei Labcenter Electronics
(http://www.labcenter.co.uk/) i UMPS (Universal Microprocessor Program Simulator) al firmei
Virtual Microdesign (www.vmdesign.com). 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), PIC10, PIC12, PIC16, PIC18, 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.

1.11.5. 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 !

1.12. Criterii de alegere a unui microcontroler

n momentul n care se dorete alegerea unui microcontroler (sau mai bine zis a unei familii
de microcontrolere) pentru dezvoltarea unei aplicaii de tip embedded system exist mai multe
criterii care trebuie luate n considerare, innd cont de implicaiile multiple ale acestei alegeri. Vom
ncerca s grupm aceste criterii dup cerinele impuse aplicaiei i s prezentm cteva din
ntrebrile rezultate, la care trebuie dat un rspuns.

a. Costurile aplicaiei
Sisteme Incorporate (Embedded Systems)
20

Care va fi scara de producie: prototip, producie mic/medie sau de mas? Care sunt
costurile permise pentru microcontroler?
Care sunt costurile permise pentru mediul de programare i dezvoltare?

b. Timpul de dezvoltare al aplicaiei

Ce limbaj de programare s aleg?
Ce limbaje de programare cunosc bine i ce medii de dezvoltare am utilizat?
Ce modalitate de testare i depanare folosesc: simulator, sistem de dezvoltare, emulator?

c. Caracteristicile fizice

Care este viteza de prelucrare (de calcul) necesar?
De ct memorie am nevoie pentru program i respectiv date? Va fi necesar si o memorie
extern?
Ce fel de alimentare este disponibil i care sunt limitrile acesteia? De cte intrri i/sau
ieiri am nevoie?
Ce fel de intrri i/sau ieiri sunt necesare: intrri/ieiri analogice, ieiri numerice de curent
mai mare?
Care sunt resursele necesare n materie de temporizare/numrare si care ar fi caracteristicile
lor cele mai importante (rezoluie, frecventa maxima de numrare) ?
Ce tip de capsul, ce dimensiuni fizice i numr de pini ar trebui s aib? Care este gama
temperaturilor de lucru necesare?
Aplicaia va funciona ntr-un mediu cu caracteristici speciale, de exemplu n care exist
perturbaii electromagnetice puternice?

d. Conectivitatea

Care sunt resursele de comunicaie necesare: cte porturi seriale asincrone i cu ce
caracteristici, ce tipuri de magistrale seriale sincrone sunt disponibile?
Este necesar o conectivitate Ethernet (o stiv TCP/IP), USB sau wireless (stive Bluetooth,
Zigbee, etc.)?

e. Compatibilitate, scalabilitate i dezvoltarea ulterioar

Cu ce tipuri de circuite se poate interfaa ct mai simplu: sisteme de afiare, senzori,
elemente
de comand i execuie (relee, motoare de cc, motoare pas cu pas, etc.)? Cum se poate
realiza extinderea ulterioar, atunci cnd este necesar?
Exist mai multe variante n familia respectiv de microcontrolere, care s acopere
eventualele cerine suplimentare n materie de vitez de lucru, resurse periferice sau de
memorie?

f. Alte aspecte

Ce distribuitori exist i ct sunt de accesibili pentru mine?
Care este suportul oferit de fabricant sau distribuitor icare este baza de cunostine existent:
site-uri web, documentaie on-line sau pe CD-uri, note de aplicaii, exemple de proiectare
(reference designs), software din categoria freeware/shareware si, nu n ultimul rnd,
forumuri de discuii pentru utilizatori?

Sisteme Incorporate (Embedded Systems)
21
Din pcate rspunsurile la multe din aceste ntrebri sunt corelate ntre ele. Un exemplu este
legtura care exist ntre criteriile de cost i cele de timp de dezvoltare. Principial, utilizarea unui
limbaj de nivel nalt mpreun cu un emulator pentru testare i depanare poate duce la scurtarea
consistent a timpului de dezvoltare. Dar preul unui compilator este ntotdeauna mai mare dect cel
al unui asamblor (nimic nu e mai ieftin dect ceva ce poate fi gratis!), iar preul unui emulator este
i el mai mare dect cel al unor mijloace mai simple de testare i depanare. n practic, de cele mai
multe ori, alegerea unui microcontroler pentru a anumit aplicaie este i trebuie s fie rezultatul
unui compromis.
Sisteme Incorporate (Embedded Systems)
22

2. ARHITECTURA MICROCONTROLLER-elor PIC18x
(MICROCHIP)


2.1. Clasificarea microcontroller-elor

La ora actual exist trei tipuri arhitecturale de microcontroller-e:

1. microcontroller-e ncorporate EM (embedded microcontrollers)
2. microcontroller-e propriu-zise M (cu interfete pentru suport extern)
3. procesoare de semnal DSP (digital signal processors)

Microcontroller-ele embedded au integrate intr-un singur chip toate resursele necesare
controlului proceselor. Avantajul acestei implementari este costul redus de fabricatie. Programul
este stocat intr-o memorie nevolatila integrata in acelasi chip cu procesorul.
A doua categorie de microcontroller-e este alcatuit din microcontroller-ele (MCU) cu
caracteristici de procesor de uz general. Un astfel de microcontroller poate deine unul sau mai
multe MCU/chip, interfete pentru accesul memoriei externe si interfee pentru interconectarea cu
diverse circuite electronice. Aceste microcontroller-e nglobeaz de asemenea module existente i
n cazul microcontroller-elor embedded.
DSP-urile (Digital Signal Processor) sunt procesoare de semnal care pot efectua operatii
matematice complexe asupra datelor de intrare. Aceste controller-e integreaza blocuri hardware
existente si in celelalte configuratii sau pot accesa dispozitive electronice externe. Spre deosebire de
marea majoritate a microcontroller-elor, DSP-urile nu proceseaza efficient aplicatiile ce contin
multe ramificatii; ele sunt proiectate sa execute eficient si rapid operatiile componente ale
formulelor matematice complexe provenite din teoria controlului digital, si care sunt utilizate in
procesarea semnalelor analogice. DSP-urile pot fi implementate complet embedded sau cu interfata
externa pentru accesul dispozitivelor auxiliare.
Controller-ele EM se regasesc si in perifericele din calculatoarele personale (controller de
mouse de ex.). Controller-ele DSP se regasesc pe placile de sunet ale acelorasi sisteme.
Microcontroller-ele propriu-zise pot fi regasite in televizoare, automobile, sisteme de supraveghere
etc.

2.2. Structura unui microcontroller

Indiferent de varianta constructiva un microcontroller trebuie sa contina cel putin
urmatoarele blocuri (fig. 2.1.):

- bloc de alimentare
- logica de reset
- ceasul sistem si blocul de timer-e
- logica de control
- procesorul
- memoria RAM
- porturi de intrare-iesire

Sisteme Incorporate (Embedded Systems)
23


Fig.2.1. Schema bloc a unui microcontroller.

Marea majoritate a microcontroller-elor moderne contin integrate in chip blocuri
suplimentare celor prezentate anterior:

- memoria nevolatila de program si logica aferenta
- mecanism de tratare a intreruperilor
- porturi analogice de intrare/iesire
- bloc de comanda a curentului continuu si bloc PWM (Pulse Width Modulation)
- Interfete seriale de intrare/iesire
- Interfete pentru memoriile externe (RAM/ROM)
- Program monitor intern pentru comunicatie cu PC-ul si pentru depanarea in-circuit a
aplicatiilor

Aceste caracteristici cresc flexibilitatea si versatilitatea microcontroller-ului, permitand
crearea de aplicatii diverse si complexe.
Desi microcontroller-ele permit stocarea aplicatiilor in interiorul lor (ceea ce aduce avantaje
evidente pentru procesarea aplicatiei), exista situatii in care tipul, marimea sau specificatiile
aplicatiei necesita adaugarea de memorie suplimentara externa (ex. implementarea aplicatiilor
inteligente in sistemele embedded). In practica se utilizeaza trei metode de extindere a spatiului de
memorie aferent unui sistem embedded:

1. Prima metoda consta in adaugarea in chip a unei interfete de acces a memoriei (fig.
2.2.). In acest caz microcontroller-ul capata caracteristici de microprocesor de uz
general (MCU MPU). O aplicatie tipica pentru un microcontroller cu memorie
externa este controller-ul de harddisk conectat la cache-ul/buffer-ul harddisk
acestuia.
2. A doua metoda se bazeaza pe emularea operatiilor efectuate pe bus-ul
microprocesorului prin intermediul pinilor de intrare/iesire. Aceasta metoda este mai
lenta decat metoda accesarii directe a dispozitivelor externe. In realitate aceasta
metoda se bazeaza pe un circuit extern de accesare a memoriei care este comandat de
catre microcontroller prin porturile de intrare-iesire.
3. Ultima metoda utilizeaza un protocol de comunicatie pe bus care permite extinderea
spatiului de memorie sau de intrare/iesire. Un exemplu tipic este interfata inter-inter-
computer (I2C) care se bazeaza pe un bus de doua fire prin intermediul carora pot
comunica mai multe dispozitive fara a fi necesar un protocol complex de acces la
bus.


Sisteme Incorporate (Embedded Systems)
24


Fig.2.2. Microcontroller cu interfata de acces a memoriei externe.


2.3. Arhitectura procesorului aferent unui microcontroller

Indiferent de tipul microcontroller-ului utilizat in sistemul embedded, procesorul
acestuia se supune uneia din cele doua paradigme de proiectare a arhitecturilor de calcul:

1. paradigma RISC (Reduced Instruction Set Computer)
2. paradigma CISC (Complex Instruction Set Computer)

Paradigma RISC presupune existenta unui set redus de instructiuni simple si de aceeasi
dimensiune, un set de bogat de registre generale, unitate de comanda cablata ceea ce duce la
performante deosebite in procesarea aplicatiilor.
Paradigma CISC specifica un set complex de instructiuni de dimensiuni diferite, un set
restrans de registre generale si unitate de comanda microprogramata. Setul bogat de instructiuni
permit dezvoltarea mai rapida a programelor scrise in limbaj de asamblare dar cu repercursiuni la
nivelul duratei ciclului instructiunii.
Costurile de proiectare si productie ale procesoarelor RISC sunt ridicate in principal datorita
unitatii cablate. Costurile de fabricatie ale procesoarelor CISC sunt mai reduse datorita timpului mai
scurt de proiectare a unitatii de comanda microprogramate. In dezvoltarea unei aplicatii embedded
trebuie sa se tina cont de tipul procesorului utilizat (RISC sau CISC), decizia afectand pozitiv sau
negativ costurile sistemului.
In anul 1940 guvernul Statelor Unite a solicitat universitatilor Princeton si Harvard sa
propuna o arhitectura de calculator pentru utilizare in artileria navala. Cercetatorii de la Princeton
au propus o arhitectura cu o memorie comuna pentru instructiuni si date (fig. 2.3.). Aceasta
arhitectura mai este denumita dupa numele conducatorului echipei de cercetare: John von
Neumann. In contrast, cercetatorii Harvard au propus o arhitectura cu bancuri de memorie separate
pentru instructiuni, date si stiva (fig. 2.4.).
Arhitectura Princeton a castigat batalia datorita faptului ca a fost cea mai potrivita pentru
tehnologia de implementare existenta; un singur spatiu compact de memorie presupunea existenta
unui numar mai mic de circuite electronice simple si fiabile (tranzistorul nu fusese inca inventat!).
Unitatea de gestiune a memoriei arbitreaza transferurile intre procesor si memorie; ea trebuie sa
extraga instructiunea din memoria sistemului si sa depuna rezultatul furnizat de procesor. Din
aceasta cauza aceste arhitecturi prezinta efectul de bottleneck care conduce la limitarea
Sisteme Incorporate (Embedded Systems)
25
peformantelor. Pentru limitarea acestui efect negativ, majoritatea arhitecturilor Princeton au
implementat un bloc de prefetch.
Arhitectura Harvard a fost ignorata pana la inceputul anilor 70 cand producatorii de
procesoare au constatat ca aceasta nu sufera de limitarea ratei de procesare datorata efectului de
bottleneck. Datorita celor doua cai de date existente in procesor, acesta poate executa instructiuni in
mai putine perioade tact decat in cazul procesoarelor Princeton. Spre deosebire de arhitectura
Princeton, arhitectura Harvard se preteaza pentru procesoarele care nu acceseaza cantitati mari de
date din memorie. Accesul la date trebuie sa se faca intr-un timp foarte scurt. Aceste caracteristici
recomanda arhitectura Harvard pentru implementarea procesoarelor destinate sistemelor incorporate
(de ex. microcontroller-ele PIC).
Independent de paradigma utilizata in specificarea caracteristicilor procesorului, acesta
poate fi implementat d.p.d.v. arhitectural in una din cele doua variante: Princeton sau Harvard.


Fig. 2.3. Arhitectura Princeton (von Neumann).



Fig. 2.4. Arhitectura Harvard.

2.4. Clasa microcontroller-elor PIC18x

Firma Microchip a dezvoltat de-a lungul anilor sase clase de microcontroller-e pe 8 biti
(dimensiunea busului de date dintre procesor si memorie):

1. PIC12x (8 pini) avand formatul instructiunii de 12 sau 14 biti
Sisteme Incorporate (Embedded Systems)
26
2. PIC14000 (28 pini) cu formatul instructiunii de 14 biti
3. PIC 16C5x cu 12 biti pentru formatul instructiunii
4. PIC16Cxx (28 pini) cu formatul instructiunii de 14 biti
5. PIC17 avand formatul instructiunii de 16 biti
6. PIC18 avand formatul instructiunii de 16 biti

Fiecare clasa de microcontroller PIC suporta un set de instructiuni diferit ca format si ca
marime, ceea ce duce la aparitia incompatibilitatilor intre MCU-uri din clase diferite. Conventia de
notare a MCU PIC este reprezentata in figura de mai jos.


Fig. 2.5. Conventia de notare a microcontroller-elor PIC.

Microcontroller-ele din clasa PIC18x detin acelasi set de instructiuni, aceleasi functionalitati
ale perifericelor si sunt livrate in variante cu 8 pana la peste 80 de pini. Setul de instructiuni identic
asigura compatibilitate in jos intre MCU-urile din aceasta clasa, permitand upgradarea sistemului
fara a fi nevoie de modificari esentiale.
Microcontroller-ele PIC18x detin urmatoarele periferice/functii (fig. 2.6):

1. Porturi paralele de I/O
2. Timer-e, inclusiv numaratoare, captatoare pt. semnalele de intrare, comparatoare de
iesire, intreruperi de timp real, watchdog timer
3. modul PWM (Pulse Width Modulation)
4. Interfata seriala SPI si I2C
5. Intefata seriala USART (Universal Synchronous/Asynchronous Receiver Transmitter)
6. Convertor analog/digital cu rezolutie de 10 biti
7. Comparator analogic
8. Memorie SRAM si EEPROM
9. Memorie EPROM si flash
10. Interfata CAN (Controller Area Network)
Sisteme Incorporate (Embedded Systems)
27


Fig. 2.6.a. Arhitectura microcontroller-ului PIC18F2X2.

Sisteme Incorporate (Embedded Systems)
28


Fig. 2.6.b. Arhitectura microcontroller-ului PIC18F4X2.



Sisteme Incorporate (Embedded Systems)
29

2.5. Organizarea memoriei microcontroller-elor PIC18

Ca si in cazul unui computer, memoria unui sistem embedded este formata dintr-o suita de
locatii adresabile. In cazul controller-elor PIC o locatie memoreaza 8 biti de informatie (1 octet).
Locatia de memorie poate fi utilizata pentru memorarea datelor, instructiunilor, starii perifericelor
etc. Registrele generale sunt stocate in memorie si pot fi adresate ca si o locatie de memorie.
Arhitectura microcontroller-elor PIC18 este de tip Harvard cu spatiu separat de instructiuni
si date (fig. 2.7.).



Fig. 2.7. Arhitectura generala a MCU PIC18.

Avantajul acestei arhitecturi este dat de prezenta bus-urilor separate de instructiuni si date,
astfel incat accesul acestora se face in paralel pentru cresterea eficientei sistemului.
Microcontroller-ele PIC18 detin trei yone de memorie:
- Memoria de program FLASH
- Memoria de date RAM
- Memoria de date EEPROM

Structura memoriei de program este prezentat n figura 2.8.

Sisteme Incorporate (Embedded Systems)
30

a) b)

a) Organizarea memoriei de program la MCU PIC18F442/242 (memorie fizica de 16KB)
b) Organizarea memoriei de program la MCU PIC18F452/252 (memorie fizica de 32KB)

Fig. 2.8. Structura memoriei de program aferenta PIC18x.

Memoria de program mapeaza stiva utilizata pentru implementarea adreselor de revenire din
procedura, vectorii de intrerupere, vectorul de reset (pointeaza catre rutina de start a sistemului la
punerea sub alimentare sau dupa un reset) si memoria programului curent executat.
Stiva (Return Address Stack) poate contine adresele de revenire intretesute pentru maxim 31
de proceduri si handler-e de intrerupere. Registrul PC este salvat in stiva la execuia unei
instruciuni de tip CALL, si extras din stiva la revenirea din procedura/handler prin instruciuni de
tip RETURN. Dimensiunea stivei este de 3121 bii (dimensiunea PC este de 21 de bii). De
asemenea, stiva este accesibil pentru salvarea temporar a unor variabile prin intermediul
registrelor SFR (Special Functions Registers). Evenimentul de depire a capacitii stivei (stack
overflow) este marcat prin setarea bitului de stare aferent. Vrful stivei este adresat printr-un
registru stack pointer denumit STKPTR care poate lua valori ntre 0 i 31 (cinci bii). Valoarea din
vrful stivei pointat de STKPTR este memorat n trei registre TOSU, TOSH i TOSL (fig. 2.9).
Aceasta permite programatorului sa implementeze o stivp software. De exemplu, la apelul unei
proceduri prin instruciunea CALL, aplicaia poate citi valoarea din vrful stivei prin accesarea
registrului Top-of-Stack. n momentul revenirii aplicaia poate nlocui coninutul acestui registru i
s efectueze o instruciune de tip RETURN.

Sisteme Incorporate (Embedded Systems)
31

Fig. 2.9. Accesul la vrful stivei.

Registrul STKPTR (fig. 2.10) conine adresa vrfului stivei, un bit de stare STKFUL (stiv
plin) i bitul de stare STKUNF (stack underflow).



Fig. 2.10. Structura registrului STKPTR.

Valoarea pointerului de stiv (SP4-SP0) poate fi cuprins ntre 0 i 31. Stack pointer-ul este
incrementat la fiecare adugare n stiv i este decrementat la fiecare extragere din stiv.Dup
salvarea registrului PC de 31 de ori bitul STKFUL va fi setat. Resetarea acestuia se poate face prin
software sau printr-un eveniment POR (Power-On Reset). Dac dup efectuarea unei operaii de tip
POP stiva este goal, bitul de stare STKUNF este setat, iar la urmatoarea extragere din stiv se va
obine n PC valoarea 0.
MCU PIC 18F deine un set de registre speciale FRS (Fast Register Stack) utilizate pentru
tratarea rapid a ntreruperilor (caracteristic de timp real). Aceast stiv este utilizat pentru
salvarea o singur dat a registrelor STATUS, WREG i BSR. Stiva nu este accesibil n mod direct
programatorului i este ncrcat la tratarea unei ntreruperi sau apel de procedur. La revenire
descarcat automat n registrele specificate anterior.

CALL SUB1,FAST ;FRS <- STATUS, WREG, BSR

SUB1
RETURN FAST ;RESTAURARE VALORI SALVATE IN FRS

Sisteme Incorporate (Embedded Systems)
32
Microcontroller-ul PIC18 detine un registru Program Counter (PC) pe 21 de bii prin
intermediul cruia poate accesa pn la 2 MBytes de memorie program (memorie relativ mare
pentru sistemele embedded). Structura registrului PC este prezentata in figura 2.11.

20..................................16 15.............................................8 7.............................................0
PCU PCH PCL

Fig. 2.11. Structura registrului Program Counter

Registrul PC poate fi accesat de instructiunile de apel de procedura sau salt (CALL, RCALL
si GOTO). Registrele PCU si PCL pot fi incarcate cu diverse valori prin intermediul altor registre
de control ale MCU (de exemplu pentru calculul offsetului necesar efectuarii saltului). Registrul
PCL este singurul accesibil programatorului pentru citire/scriere. Pentru a asigura alinierea la word
(16 biti), bitul cel mai putin semnificativ din PCL este 0.
PCL se incrementeaza cu 2 la fetch-ul fiecarei instructiuni (fig. 2.12). Semnalul de tact
OSC1 este divizat in patru faze: Q1, Q2, Q3 si Q4. Registrul PC este incrementat pe fiecare faz
Q1, iar instructiunea este incarcata in IR (Instruction Register) la finele fazei Q4. Instructiunea este
decodificata si executata pe durata Q1...Q4.
Dimensiunea memoriei de program difera in cadrul aceleiai clase de la MCU la MCU.
MCU PIC18F252 si PIC18F452 detin 32 KB de memorie flash, in timp ce PIC18F242 si
PIC18F442 detin 16KB. Accesarea spatiului adresabil cuprins intre sfarsitul memoriei fizice
implementate si 2MB va conduce la citirea valorii 0 (instructiunea NOP).



Fig. 2.12. Ciclul instructiunii la microcontroller-ele PIC18

2.5.1. Memoria de date

Memoria de date este implementat n general n microcontroller-e prin structuri de tip
SRAM (Static RAM). Stocarea unui bit n SRAM se face prin utilizarea a 4 tranzistori
interconectai ca n figura 2.13.


Fig. 2.13. Celul SRAM utilizat pentru memorarea unui bit.
Sisteme Incorporate (Embedded Systems)
33

Pentru gestiunea operaiilor de scriere-citire se utilizeaz doi tranzistori MOSFET adiionali
(M5 i M6) care permit conectarea celulei la cele dou linii BL i /BL. Accesul celulei se valideaz
prin intermediul semnalului WL care are rolul de a controla funcionarea tranzistorilor M5 i M6
att pentru citire ct i pentru scriere.
O locaie din memoria de date este denumit registru sau register file. Pentru adresarea
memoriei de date PIC18 utilizeaz 12 bii de adres, spaiul total de date fiind de:

2
12
Bytes = 4096 Bytes (4KB)

Organizarea memoriei de date pentru PIC18 este prezentat n figura 2.14. Dimensiunea
limitat a instruciunilor PIC18 (16 bii) determin utilizarea a 8 bii pentru adresarea registrelor
(2
8
=256 registre). Drept urmare, memoria de date este mprit n 16 bancuri a 256 registre cu un
singur banc activ la un moment dat. Pentru selecia bancului activ se utilizeaz 4 bii memorai n
registrul BSR (Bank Select Register). Programatorul poate selecta prin program bancul de registre
activ prin manipularea registrului BSR.
Memoria de date conine dou tipuri de registre:

1. registrele de uz general GPR (General Purpose Register)
2. registrele cu funcii speciale SFR (Special Functions Register)

Registrele generale GPR sunt utilizate pentru memorarea datelor dinamice (variabile) pe
durata execuiei unui program. Registrele speciale SFR sunt implementate cu SRAM i sunt
utilizate de procesor i dispozitivele periferice pentru controlul microcontroller-ului.
Maparea registrelor speciale i generale n memoria de date este prezentat n anexa
capitolului 2.

2.5.2. Accesarea bancurilor de registre din memoria de date

Pentru accesarea datelor din bancurile de registre, MCU PIC18 deine o zon special
numit Access Bank (fig. 2.14). Aceast zon este utilizat pentru optimizarea codului de ctre
compilatoarele de C. Aceast zon de memorie poate fi folosit pentru:

- valorile intermediare calculate n program
- variabile locale i subrutine
- schimbarea rapid a contextului de lucru (variabilelor/bancurilor)
- evaluarea i controlul registrelor SFR

Formatul instruciunii conine bitul a (access bit) pentru a specifica dac operaia de
citire/scriere se va efectua din/n bancul specificat de registrul BSR sau n zona Access Bank. Dac
a este 0 operaia va fi efectuat n Access Bank. Access Bank mapeaz n partea inferioar de
adresare registrele GPR, iar n partea superioar registrele SFR (fig. 2.14).


Sisteme Incorporate (Embedded Systems)
34

Fig. 2.14. Organizarea memoriei de date.
Sisteme Incorporate (Embedded Systems)
35

2.6. Registrele CPU aferente MCU PIC18

Microcontroller-ele PIC18 dein un set de registre mapate n memoria de date la adresele
0xFFF ... 0xFD8 (fig. 2.15) dedicate controlului operaiilor efectuate de unitatea central de
procesare (CPU). Aceste registre sunt denumite registrele generale ale CPU i sunt stocate n
zona alocat registrelor SFR.



Fig. 2.15. Registrele generale ale CPU PIC18.

Sisteme Incorporate (Embedded Systems)
36
Rolul fiecrui registru general prezentat n figura anterioar va fi definit pe parcurs, atunci
cnd este cazul.
Registrul de stare al procesorului (STATUS) este mapat la adresa 0xFD8 i are rolul de a
memora starea programului la un moment dat (fig. 2.16). Registrul STATUS este echivalentul
registrului de flag-uri din microprocesoarele de uz general.



Fig. 2.16. Structura registrului STATUS.

Datorit maprii registrului STATUS n memoria de date, acesta poate fi destinaie pentru
orice instruciune, ca de altfel orice registru general al PIC18. Acest fapt conduce la o problem
major: registrul STATUS memoreaz starea aritmetic a programului la un moment dat, iar aceast
stare poate fi teoretic modificat de ctre orice instruciune. Pentru a evita un astfel de
comportament biii C, DC, Z, OV, i N sunt read-only, i pot fi setai/resetai doar de ctre
hardware.
Sisteme Incorporate (Embedded Systems)
37
Registrul WREG este mapat la adresa 0xFE8 i reprezint registrul de lucru (working
register) sau registrul acumulator, utilizat de ctre majoritatea instruciunilor.

2.7. Structura pipeline a CPU PIC18

Ciclul instruciunii procesoarelor aferente PIC18 este compus din dou faze majore: fetch-ul
instruciunii i execuia instruciunii (fig. 2.17). Pentru efectuarea unei faze este necesar o perioad
de tact. Suprapunerea fazelor (overlapping) aferente a dou instruciuni consecutive d.p.d.v.
dinamic determin o rat de procesare (n cazul ideal!!!) de o instruciune/perioad de tact.
Instruciunile de control ale programului (salt, apel de procedura etc.) necesit mai multe perioade
de tact pentru procesare (vezi fig. 2.17).




Fig. 2.17. Pipeline-izarea instruciunilor n PIC18.

Procesorul MCU PIC18 trebuie s acceseze memoria de instruciuni n timpul fazei de fetch
i memoria de date n faza de execuie. Prin execuia pipeline-izat procesorul trebuie s acceseze
cele dou zone simultan pe aceeai perioad de tact. Aceast limitare este eliminat prin
implementarea de memorii separate de instruciuni i date (arhitectur Harvard).
O alt limitare n procesarea paralel a instruciunilor este introdus de hazardurile care apar
n timpul procesrii aplicaiei. Exist dou tipuri de hazarduri: dependenele de date (WAW, WAR
i RAW) i dependenele de control.
Uzual, dependenele de date se rezolv prin redenumirea registrelor sau prin mecanismul de
forwarding al rezultatului anterior. n unele cazuri pentru eliminarea acestor dependene este
necesar reordonarea instruciunilor sau inserarea de instruciuni de tip NOP (de ex. instruciunea
load). Procesorul aferent MCU PIC18 deine un pipeline structurat pe 2 nivele i de aceea nu
prezint fenomenul de hazard de date.
Dependenele de control sunt determinate de instruciunile de salt. Atunci cnd o
instruciune de salt ajunge n faza de execuie i saltul se efectueaz (taken), procesorul va evacua
din pipeline urmtoarea instruciune extras deja din memorie (aflat n faza de fetch) i care nu va
trebui s fie executat. n figura 2.15 instruciunea BSF PORTA, BIT3 este evacuat din pipeline
n momentul n care ajunge n faza de execuie datorit faptului c instruciunea de salt anterioar se
efectueaz.

2.8. Formatul instruciunii PIC18

Setul de instruciuni al procesorului aferent PIC18 este mprit n 5 categorii, n funcie de
tipul operaiei efectuate de instruciune:

1. Instruciuni cu un operand (byte oriented operations)

Sisteme Incorporate (Embedded Systems)
38


Cmpul opcode (6 bii) specific operaia efectuat de instruciune. Bitul d specific
operandul destinaie care poate fi registrul de lucru WREG sau un registru general f. Bitul a
specific bancul de lucru din memorie. Bancul de lucru poate fi cel selectat de registrul BSR (Bank
Select Register) sau poate fi Access Bank. Cmpul f (8 bii) specific adresa registrului general
utilizat pentru depunerea rezultatului.

2. Instruciuni cu doi operanzi (byte-to-byte oriented operations)



Exist o singur instruciune care utilizeaz acest format: movff f1,f2. Aceast instruciune
permite copierea unei valori din registrul surs n registrul destinaie. Cmpurile f specific adresele
registrelor surs/destinaie.

3. Instruciuni la nivel de bit



Instruciunile din aceast categorie opereaz asupra unui bit din registrul f , bit a crui
poziie este specificat n cmpul b (3 bii).

4. Instruciuni cu valori imediate



5. Instruciuni de control

Sisteme Incorporate (Embedded Systems)
39
Instruciunile de control sunt utilizate pentru implementarea salturilor necondiionate i
condiionate n program, pentru apelul funciilor etc. Formatul instruciunii specific un registru sau
o valoare imediat care poate fi adresa de salt propriu-zis sau o valoare de offset care se va aduga
la adresa curent pentru aflarea adresei la care se va face saltul.




Cu excepia formatului instruciunii cu valori imediate, toate celelalte formate pot specifica
ca i operand (prin intermediul unei adrese pe 8 bii) cel puin un registru. Un registru de date este
denumit file register (cu excepia registrului de lucru WREG). Cu 8 bii putem specifica maximum
256 de registre. Spaiul de memorie permite implementarea unui numr mai mare de registre i de
aceea acestea sunt mprite n 16 bancuri a cte 256 de registre (vezi 2.5.1).
Schemele de gestiune a bancurilor de registre utilizate n microcontroller-ele PIC12, PIC14,
PIC16 i PIC17 conduceau la o suprancrcare a software-ului datorat comutrii contextului de la
un banc la altul. Mai mult, dac programatorul omite s selecteze contextul de lucru (bancul)
necesar algoritmului software, aplicaia se va executa eronat sau se va bloca.
n cazul MCU PIC18 proiectanii au prevzut un set de registre de date implicite care sunt
plasate n Access Bank. Acest banc de registre conine 96 de registre generale (GPR) i 160 de
registre cu funcii speciale (SFR). Practic programatorul are n permanen la dispoziie un set de
registre pentru dezvoltarea aplicaiei, iar n unele cazuri nu mai este necesar comutarea contextului
pe alt banc. Acest lucru conduce la un software mai rapid i mai simplu de implementat.
Atunci cnd este necesar comutarea pe un alt banc de registre, programatorul are la
dispoziie instruciunea movlb k. Aceast instruciune plaseaz cei mai puin semnificativ 4 bii ai
lui k n registrul BSR. n acest moment bancul specificat n BSR va deveni activ.


2.9. Modurile de adresare (MA)

2.9.1. Modul de adresare direct registru

n acest mod de adresare se utilizeaz 8 bii pentru specificarea registrului de date n care se
afl operandul (fig. 2.18). Registrul poate fi n Access Bank sau n orice alt banc. Cei 8 bii
Sisteme Incorporate (Embedded Systems)
40
selecteaz n primul caz un registru din Access Bank, iar valoarea stocat n registrul BSR va fi
ignorat.


Fig. 2.18. Modul de adresare imediat.

Exemplu:
movwf 0x45, A
Instruciunea copiaz coninutul registrului WREG n locaia de memorie (registrul) de la
adresa 45h din Access Bank (culoarea roie identific tipul sursei, iar culoarea verde identific tipul
destinaiei).

movwf 0x1A, BANKED
Instruciunea copiaz coninutul registrului WREG n locaia de memorie de la adresa 1Ah
din bancul specificat n registrul BSR.

movff Reg1, Reg2
Instruciunea copiaz coninutul registrului Reg1 n registrul Reg2. Reg1 i Reg2 specific o
valoare pe 12 bii i ca atare registrul BSR este ignorat. Cu aceast instruciune se pot copia valori
n/din bancuri diferite de registre.

2.9.2. Modul de adresare imediat

Operandul este plasat imediat dup codul instruciunii. Nu este necesar accesarea memoriei
n acest caz.

Exemplu:
addlw 0x20

Instruciunea adun coninutul registrului WREG cu valoarea 20h i depune rezultatul n
WREG (l = literal - imediat).

movlw 0x15
Instruciunea ncarc registrul WREG cu valoarea 15h.


Sisteme Incorporate (Embedded Systems)
41
movlb 0x03
Instruciunea ncarc n ultimii 4 bii din registrul BSR valoarea 3h (0011
2
). Aceast
instruciune activeaz bancul 3 de registre.

2.9.3. Modul de adresare indirect

Pentru adresarea indirect PIC18 utilizeaz unul din registrele speciale (FSR) pentru a
specifica adresa locaiei accesate pentru scriere/citire (fig. 2.19). Acest mod de adresare este utilizat
pentru adresarea operanzilor n memorie, a vectorilor i a stivelor software.

Fig. 2.19. Modul de adresare indirect.

Procesorul PIC18 deine 3 registre utilizate pentru adresarea indirect: FSR0, FSR1 i FSR2.
Pentru a adresa ntreg spaiul de memorie disponibil (4096 octei) este necesar specificarea unei
adrese pe 12 bii. Pentru a memora o astfel de adres sunt necesare 2 registre a cte 8 bii fiecare.
Fiecare registru de adresare indirect este compus din dou registre pe 8 bii astfel:
FSR0: FSR0H i FSR0L
FSR1: FSR1H i FSR1L
FSR2: FSR2H i FSR2L

Dup ncrcarea adresei de memorie ntr-unul din registrele FSRn, se poate valida accesul
indirect la locaia de memorie dorit prin citirea/scrierea unui registru logic din cele 3 existente
INDF0, INDF1 i INDF2. Accesul unui registru logic INDFn pentru citire/scriere va duce la
accesarea registrului de date de la adresa specificat de FSRn (fig. 2.20).


Fig. 2.20. Utilizarea INDFn n modul de adresare indirect.
Sisteme Incorporate (Embedded Systems)
42

Fiecare registru FSRn (n = 0,1,2) are asociate mai multe registre speciale utilizate n
adresarea indirect care specific modul n care se modific FSRn dup adresare:

1. registrul INDFn (fig. 2.18): FSRn rmne neschimbat dup accesul memoriei;
2. registrul POSTDECn: FSRn va fi decrementat dup accesul indirect la memorie;
3. registrul POSTINCn: FSRn va fi incrementat dup accesul indirect la memorie;
4. registrul PREINCCn: FSRn va fi incrementat nainte de accesul indirect la memorie;
5. registrul PLUSWn: Coninutul registrului WREG va fi utilizat ca un offset pentru FSRn.
Adresa locaiei accesate va fi format din nsumarea valorii cu semn din WREG cu
valoarea din FSRn. Niciunul din cele dou registre nu vor fi modificate nainte sau dup
accesul indirect.

Exemplu:
movwf INDF0

Instruciunea copiaz coninutul registrului WREG n locaia de memorie (registrul) de la
adresa specificat de FSR0. Dup execuia acestei instruciuni FSR0 rmne nemodificat.

movwf POSTDEC0

Instruciunea copiaz coninutul registrului WREG n locaia de memorie (registrul) de la
adresa specificat de FSR0. Dup execuia acestei instruciuni FSR0 este decrementat cu 1.

movwf PREINC0

Instruciunea copiaz coninutul registrului WREG n locaia de memorie (registrul) de la
adresa specificat de FSR0. nainte de execuia acestei instruciuni FSR0 este incrementat cu 1.

2.9.4. Modul de adresare direct pe bit

PIC18 deine 5 instruciuni care pot opera la nivel de bit. Trei dintre acestea sunt utilizate
pentru modificarea strii unui anumit bit specificat, iar celelalte dou sunt utilizate pentru
implementarea instruciunilor de salt.

Exemplu:
bcf PORTB,3,A

Instruciunea reseteaz bitul 3 al registrului PORTB ceea ce va conduce la trecerea n zero a
bitului RB3 din portul B. Registrul PORTB se afl n Access Bank n acest caz (operandul A).

bsf PORTA,4,A

Instruciunea seteaz bitul 4 al registrului PORTA ceea ce va conduce la trecerea n 1 a
bitului RA4 din portul A. Registrul PORTA se afl n Access Bank.

Sisteme Incorporate (Embedded Systems)
43
Anexa capitol 2



Blocurile funcionale din componena MCU PIC18X.
Sisteme Incorporate (Embedded Systems)
44


Maparea registrelor speciale aferente PIC18Fxxx n memoria de date.

Sisteme Incorporate (Embedded Systems)
45


a)

Sisteme Incorporate (Embedded Systems)
46


b)
Sisteme Incorporate (Embedded Systems)
47


c)
Structura registrelor MCU PIC18Fxxx

Sisteme Incorporate (Embedded Systems)
48



3. Setul de instruciuni al procesorului aferent MCU PIC18


Setul de instruciuni cuprinde 77 de instruciuni dintre care 4 sunt pe 32 de bii iar restul pe
16 bii.

3.1. Instruciuni pentru transferul datelor

Aceste instruciuni au rolul de a plasa datele din memorie n registrele specificate pentru
efectuarea anumitor operaii.



lfsr f,k este o instruciune pe 32 de bii. ncarc registrul FSR specificat de f cu
valoarea k pe 12 bii.

lfsr FSR0, 0xabc

movf f,d,a este implementat pentru compatibilitate cu PIC16. Transfer o valoare
dintr-un registru n alt registru.

movf 0x20,W,A

Copiaz coninutul registrului de la adresa 20h n registrul de lucru WREG din Access
Bank.

movff fs,fd instruciune pe 32 de bii utilizat pentru copierea unei valori dintr-un
registru n alt registru. Registrele sunt specificate prin adrese pe 12 bii ceea ce nseamn c aceast
instruciune ignor registrul de selecie a bancurilor BSR. Astfel, aceast instruciune poate
transfera date ntre registrele aflate n bancuri diferite de lucru.

movff 0x030,0x400
Copiaz coninutul registrului de la adresa 30h n registrul de la adresa 400h (cele dou
registre se afl n bancuri diferite de lucru).

movwf f,a copiaz coninutul registrului de lucru WREG n registrul specificat de f din
Access Bank sau bancul de lucru selectat de BSR.

Sisteme Incorporate (Embedded Systems)
49
movwf 0x20,A
Copiaz coninutul registrului WREG n registrul de la adresa 20h din Access Bank.

movwf 0x20,BANKED

Copiaz coninutul registrului WREG n registrul de la adresa 20h din bancul specificat de
registrul BSR.

swapf f,d interschimb cei mai puin semnificativi patru bii (LSB nibble) ai sursei f
cu cei mai semnificativi 4 bii (MSB nibble) ai aceleiai surse f. De asemenea, instruciunea poate
depune rezultatul ntr-un registru specificat de destinaia d. Aceast instruciune poate fi utilizat
pentru operaii n format BCD.

swapf temp,W

Dac variabila temp are valoarea 5Ah, dup execuia instruciunii ea va avea valoarea A5h,
iar registrul W va conine aceast valoare.

movlb k seteaz bancul de registre k activ. Instruciunea copiaz valoarea k pe 3 bii n
registrul BSR (Bank Select Register).

movlb 3

Activeaz bancul de lucru 3.

movlw k ncarc valoarea imediat k n registrul de lucru WREG.

movlw 0x0A

ncarc n registrul WREG valoarea imediat 0Ah.


3.2. Instruciuni de adunare i scdere

Instruciunile de adunare i scdere pot avea doi sau trei operanzi. n cazul instruciunilor cu
trei operanzi, cel de-al treilea operand este bitul carry din registrul STATUS. PIC 18 deine trei
instruciuni de adunare i patru de scdere.

addwf f,d,a
Adun registrul WREG cu registrul f i depune
rezultatul n d
addlw k
Adun valoarea imediat k i depune rezultatul n
WREG
addwfc f,d,a
Adun registrul WREG cu registrul f i cu bitul carry i
depune rezultatul n d
subfwb f,d,a
Scade cu mprumut coninutul registrului f din registrul
WREG i depune rezultatul n d
subwfb f,d,a
Scade cu mprumut coninutul registrului WREG din f
i depune rezultatul n d
subwf f,d,a
Scade din f i depune rezultatul n d
sublw k
Scade coninutul registrului WREG din valoarea
imediat k i depune rezultatul n WREG
Sisteme Incorporate (Embedded Systems)
50

Exemple:

Scriei cte o instruciune care s efectueze urmtoarele operaii:


a) Adunai coninutul registrului WREG cu al celui de la adresa 0x40 (Access Bank) i
depunei rezultatul n WREG

addwf 0x40,W,A

b) Incrementai registrul WREG cu 7

addlw 0x07

c) Scriei o secven de instruciuni care s incrementeze cu 5 coninutul celor trei registre
de la adresele 0x40..0x42

movlw 0x05
addwf 0x40,F,A
addwf 0x41,F,A
addwf 0x42,F,A

d) Scriei o secven de instruciuni care s adune coninutul a trei registre localizate la
adresele 0x30..0x32 i care stocheaz suma la adresa 0x50.

movf 0x30,W,A
addwf 0x31,W,A
addwf 0x32,W,A
movwf 0x50,A


e) Scriei o secven de instruciuni care adaug valoarea 10 la registrele de la adresele
0x300...0x305 utiliznd modul de adresare indirect cu postincrementare

movlw 0x0A
lfsr FSR0,0x300
addwf POSTINC0,F
addwf POSTINC0,F
addwf POSTINC0,F
addwf POSTINC0,F
addwf POSTINC0,F
addwf POSTINC0,F

f) Scriei o secven de instruciuni care extrage valoarea 9 din registrele de la adresele
0x400...0x402

movlw 0x09
subwf 0x400,F
subwf 0x401,F
subwf 0x402,F


Sisteme Incorporate (Embedded Systems)
51
g) Scriei o secven de instruciuni care efectueaz urmtoarele operaii: scade coninutul
lui WREG din registrul de la adresa 0x30 i depune rezultatul in registrul de la adresa
0x30, scade cu mprumut coninutul registrului 0x30 din WREG i depune rezultatul n
WREG, scade coninutul lui WREG din registrul de la adresa 0x50 i depune rezultatul
in registrul WREG

subwf 0x30,F,A
subfwb 0x30,W,A
subwf 0x50,W,A


3.3. Instruciuni de nmulire

Microcontroller-ul PIC18 deine dou instruciuni de nmulire pe 8 bii. Prima instruciune
are formatul mullw k i permite nmulirea unei variabile (literal) sau a unei valori imediate pe 8
bii cu coninutul registrului WREG. Rezultatul pe 16 bii este depus n perechea de registre
PRODH:PRODL (octetul superior al rezultatului este depus n PRODH, iar cel inferior n PRODL).
A doua instruciune de nmulire are formatul mulwf f,a i permite nmulirea
coninutului registrului WREG cu registrul specificat n instruciune depunnd rezultatul n aceeai
pereche de registre destinaie PRODH:PRODL.

mullw 0x05

mulwf 0x30,A

Pentru implementarea operaiilor de nmulire pe 16/24/32 bii este necesar crearea unei
biblioteci de funcii care pot fi utilizate ulterior n dezvoltarea aplicaiilor.

Un exemplu de funcie care realizeaz nmulirea a dou valori pe 16 bii fr semn este
prezentat n continuare.

S presupunem c avem dou valori P i Q pe 16 bii fr semn reprezentate n hexazecimal.
Cele dou valori pot fi descompuse astfel:

L H
P P P =

L H
Q Q Q =


unde P
H
i Q
H
reprezint octetul superior, iar P
L
i Q
L
reprezint octetul inferior din valorile date.
Pentru obinerea rezultatului nmulirii fr semn pe 16 bii algoritmul va efectua patru
operaii de nmulire pe 8 bii iar apoi va nsuma cele patru produse pariale conform schemei din
figura 3.1.

Sisteme Incorporate (Embedded Systems)
52


Fig. 3.1. Algoritmul de nmulire a dou valori pe 16 bii fr semn.

Setul de instruciuni aferent procesoarelor PIC nu cuprinde instruciuni de mprire. De
aceea, pentru realizarea acestei operaii este necesar crearea de funcii ca i n cazul operaiei de
nmulire. Un exemplu de cod care implementeaz operaiile de nmulire pe 16 bii/mprire 32/16
bii este redat n figura 3.2.

LIST p=18F2320, r=DEC ;processor PIC18F2320, radix decimal

#include "P18F2320.INC"

;register file definition example
C0 equ 0
C1 equ 1
C2 equ 2
C3 equ 3
ACCUH equ 4
ACCUL equ 5
EXT_H equ 8
EXT_L equ 9
WRD_H equ 10
WRD_L equ 11
LUK_H equ 12
LUK_L equ 13
;Multiplication 16bit * 16bit -> 32bit
;WRD * LUK -> EXTWRD
;detailed: WRD_H:WRD_L * LUK_H:LUK_L -> EXT_H:EXT_L:WRD_H:WRD_L
;LUK value remains. Affected registers: temp reg C3
MULW: movf WRD_H,w
mulwf LUK_H ; LUK_H * WRD_H
movff PRODH,EXT_H
movff PRODL,EXT_L
movf WRD_L,w
mulwf LUK_L ; LUK_L * WRD_L
movff PRODH,C3
movff PRODL,WRD_L
mulwf LUK_H ; LUK_H * WRD_L
movf PRODL,w
Sisteme Incorporate (Embedded Systems)
53
addwf C3,f ; Add cross
movf PRODH,w ; products
addwfc EXT_L,f
clrf WREG
addwfc EXT_H,f
movf WRD_H,w
mulwf LUK_L ; LUK_L * WRD_H
movf PRODL,w ;
addwf C3,w ; Add cross
movwf WRD_H
movf PRODH,w ; products
addwfc EXT_L,f
clrf WREG
addwfc EXT_H,f
return
;Unsigned Division 32bit / 16bit -> 16bit
;EXTWRD / LUK -> WRD, remainder -> EXT
;detailed EXT_H:EXT_L:WRD_H:WRD_L / LUK_H:LUK_L -> WRD_H:WRD_L
;On overflow or divide by zero: FFFFh -> WRD, FFFFh -> EXT
;LUK value remains. Affected registers: temp reg C0, C1, C2, C3
DIV32: clrf C0 ;TEMP
clrf C1
clrf C2
movlw -32 ;LOOPS
movwf C3
;
;SHIFT R8R6R4<<1
DIV322: bcf STATUS,C
rlcf WRD_L,f
rlcf WRD_H,f
rlcf EXT_L,f
rlcf EXT_H,f
rlcf C2,f
rlcf C1,f
rlcf C0,f
;update C12=C12-LUK if remains positive
movf LUK_L,w
subwf C2,f
movf LUK_H,w
subwfb C1,w
bc DIV324 ;borrow = !carry
;16 bit subtraction < 0
tstfsz C0
bra DIV323 ;borrow from C0
;24 bit subtraction < 0
;restore C2 (C1 is already unghanged)
movf LUK_L,w
addwf C2,f
bra DIV325
;
DIV323: decf C0,f ;update C0
DIV324: movwf C1 ;update C1 (C2 is already updated)
bsf WRD_L,0
btfss C3,4 ;>=16 counts remaining?
bra DIV326 ;overflow
;
;next loop
DIV325: incfsz C3,f
bra DIV322
;
;ready, result ok
movff C2,EXT_L ;remainder
Sisteme Incorporate (Embedded Systems)
54
movff C1,EXT_H
return
;
;overflow
DIV326: movlw 0FFh
movwf WRD_H
movwf WRD_L
movwf EXT_H
movwf EXT_L
return


3.4. Instruciuni de control al programului

n execuia secvenial i contigu a instruciunilor unei aplicaii, registrul PC (Program
Counter) este gestionat de ctre blocul de comand i control al procesorului pentru a pointa spre
urmtoare instruciune de executat. Uzual, ntr-un procesor RISC registrul PC este incrementat cu 2
sau 4.
Marea majoritate a algoritmilor de calcul nu prezint un caracter contiguu din punctul de
vedere al execuiei instruciunilor. Aceti algoritmi prezint puncte de discontinuitate numite puncte
de salt (ramificaie).
Instruciunile de control ale unui procesor acioneaz asupra registrului PC (Program
Counter) i au rolul de implementa n program punctele de ramificaie din cadrul algoritmului.
Registrul PC din cadrul procesoarelor PIC18 este organizat pe 21 de bii (2 MB spaiu
posibil adresabil). Structura registrului PC este prezentat n figura 3.2.



Fig. 3.2. Structura registrului PC n procesoarele PIC18

Registrul PC este divizat n trei registre:

- PCL conine octetul inferior fiind accesibil pentru operaii de scriere/citire ca
orice registru de date
- PCH conine octetul cu biii 15...8 i nu poate fi accesat n mod direct. Pentru
operaiile de scriere/citire se utilizeaz registrul PCLATH
- PCU conine partea superioar a adresei. Ca i PCH el poate fi accesat n mod
indirect prin intermediul registrului PCLATU

Registrele PCL, PCH i PCU sunt mapate n memoria de date. De fiecare dat cnd se face o
citire a registrului PCL, registrele PCH i PCU sunt ncrcate n PCLATH i PCLATU. La o scriere
a lui PCL, coninutul registrelor PCLATH i PCLATU va fi ncrcat n PCH i PCU (fig. 3.3.).
Sisteme Incorporate (Embedded Systems)
55



Fig. 3.3. Modificarea adresei din PC n cazul efecturii unui salt.

Cel mai puin semnificativ bit (LSB) din PC este read-only i are ntotdeauna valoarea zero
fornd astfel alinierea programelor n memorie la byte. Orice scriere a acestui bit este ignorat.
Cteva din instruciunile de control mai reprezentative sunt ilustrate n tabelul de mai jos.


Toate instruciunile de branch condiionate permit un offset de ne[-128....+127] octei. n
momentul efecturii saltului acest offset va fi nsumat cu coninutul actual al registrului PC.
Instruciunea de branch necondiionat BRA n permite efectuarea unui salt peste ne[-1024+1023]
octei, iar instruciunea de salt necondiionat GOTO n permite un salt cuprins ntre ne[0...1048575]
octei.
Instruciunea CALL n,s permite apelul procedurilor (funciilor) dar i al rutinelor de
tratare a ntreruperii. Parametrul ne[0...1048575] specific adresa subrutinei apelate iar parametrul
s indic dac instruciunea s salveze (s=1) sau nu (s=0) registrele WREG, STATUS i BSR n
stiv.
Atunci cnd se execut o instruciune de branch valoarea specificat n instruciune (8 bii cu
semn) este adunat la registrul PC. Aceast valoare se numete offset i permite efectuarea saltului
nainte (valoare pozitiv) sau napoi (valoare negativ). Figura 3.3. reprezint cele dou cazuri: salt
cu offset negativ (a) i salt cu offset pozitiv (b).

Sisteme Incorporate (Embedded Systems)
56


Fig.3.3. Efectuarea saltului n funcie de semnul offset-ului.

Pentru aflarea adresei de salt a unui branch, PIC18 utilizeaz i informaiile din registrul
STATUS (flag-uri). De exemplu, instruciunile de salt condiionat urmtoare utilizeaz flag-urile N
i C pentru calculul adresei de salt:

bn -10 ; branch if N

Salt napoi peste 9 locaii (word-uri) dac flag-ul N este setat

bc 10 ; branch if C

Salt nainte peste 11 locaii (word-uri) dac flag-ul C este setat

PIC18 deine i instruciuni pentru implementarea buclelor de program de tip for. Aceste
dou instruciuni sunt de tip aritmetic dar pot lucra i n conjuncie cu instruciunile de branch
pentru implementarea buclei for.

inc f,d,a ;incrementeaz registrul f

dec f,d,a ;decrementeaz registrul f

De asemenea PIC18 permite implementarea de bucle de program cu ajutorul altor
instruciuni dect cele de branch. Aceste instruciuni sunt corelate cu instruciunea GOTO i
realizeaz comparaii, incrementri, decrementri, operaii pe bit pentru a determina condiia de
efectuare a branch-ului (fig. 3.4.).


Fig. 3.4. Instruciuni care pot fi utilizate pentru implementarea branch-urilor
Sisteme Incorporate (Embedded Systems)
57

Exemplu: O bucl de program care trebuie s se execute de n ori.

n equ 20 ; n=20
loop_cnt set 0x10 ; loop_cnt -> registrul 0x10
...
movlw n ; n -> WREG
movwf loop_cnt ; WREG -> registrul 0x10

loop ...
...
decfsz loop_cnt,F,A ; dec. n i omite dac devine zero
goto loop ; sare la eticheta loop


Secvena de cod anterioar poate fi rescris utiliznd o instruciune de branch.

n equ 20 ; n=20
loop_cnt set 0x10 ; loop_cnt -> registrul 0x10
...
movlw n ; n -> WREG
movwf loop_cnt ; WREG -> registrul 0x10

loop ...
...
decf loop_cnt,F,A ; dec. n i seteaz coresp. flag-ul Z
bnz loop ; dac Z=0 sare la eticheta loop
Sisteme Incorporate (Embedded Systems)
58

3.5. Citirea/scrierea datelor din/n memoria de program

Arhitectura microcontroller-ului PIC18 presupune implementarea de spaii diferite de
memorie pentru cod i date (fig. 3.5). Adresarea memoriei de program se face prin intermediul unui
bus de 21 de bii, iar pentru adresarea memoriei de date sunt necesari 12 bii.



Fig. 3.5. Arhitectura general a MCU PIC18.

Memoria de program este organizat n locaii de 16 bii (2 octei),iar memoria de date este
organizat n locaii de 8 bii (1 octet). Procesorul PIC18 deine dou instruciuni care permit
transferul octeilor ntre memoria de program i memoria de date:

- TABLE READ (TBLRD)
- TABLE WRITE (TBLWT)

Citirea/scrierea datelor din/n memoria de program se face prin intermediul a dou registre:
Table pointer (TBLPTR) i Table latch (TABLAT). Registrul TBLPTR are rolul de a memora
adresa locaiei de memorie care va fi accesat, iar registrul TABLAT memoreaz datele care sunt
citite/scrise din/n memorie (fig. 3.6 a i b).



a) citirea valorilor din memoria program n registrul TABLAT.

Sisteme Incorporate (Embedded Systems)
59

b) scrierea valorilor din registrul TABLAT n memoria program.

Fig. 3.6. Operaii de scriere/citire prin intermediul registrului TABLAT.

Registrul Table Pointer (TBLPTR) adreseaz un octet n memorie. TBLPTR conine trei
cmpuri memorate n trei registre SFR:

- TBLPTRU table pointer upper byte
- TBLPTRH table pointer high byte
- TBLPTRL table pointer low byte

Aceste trei registre memoreaz 22 de bii: 21 de bii (20...0) sunt utilizai pentru adresarea a
2MB de memorie, iar bitul cel mai semnificativ (bitul 21) permite accesul read-only al locaiei
selectate de Table Pointer (TBLPTR).
Registrul TBLPTR este gestionat de instruciunile TBLRD i TBLWT. Registrul TBLPTR
pointeaz datele n memoria de program i este echivalentul registrului PC care pointeaz
instruciunile din aceeai memorie. Operaiile care pot fi efectuate asupra PC se regsesc i n cazul
registrului TBLPTR. n tabelul de mai jos sunt prezentate instruciunile TBLRD/TBLWT care
opereaz asupra registrului TBLPTR. Pointerul TBLPTR poate fi postdecrementat (decrementat
dup ce a fost utilizat), preincrementat (incrementat i apoi utilizat) sau postincrementat
(incrementat dup ce a fost utilizat).




3.6. Instruciuni logice

Microcontroller-ul PIC18 deine 8 instruciuni cu care se pot efectua operaiile logice AND,
OR, XOR i de complementare pe 8 bii.

Sisteme Incorporate (Embedded Systems)
60


Aceste operaii logice sunt utile pentru identificarea valorilor care au anumite proprieti (de
exemplu sunt divizibile cu 2) sau pentru gestiunea pinilor din porturile de intrare/ieire
(setare/resetare de pin, oscilaie a valorii unui pin etc.).

Exemplu: S se scrie o secven de cod care s efectueze urmtoarele operaii:

a) Seteaz biii 7,6,0 din registrul PORTA

movlw B11000001 ;ncarc n WREG valoarea 0xC1
iorwf PORTA,F,A ;SAU ntre registrul PORTA i WREG

b) Reseteaz biii 4,2,1 din registrul PORTB

movlw B11101001 ;ncarc n WREG valoarea 0xE9
andwf PORTB,F,A ;AND ntre registrul PORTB i WREG

c) Comut biii 7,5,3,1 din registrul PORTC

movlw B10101010 ;ncarc n WREG valoarea 0xAA
xorwf PORTC,F,A ;XOR ntre registrul PORTC i WREG


3.7. Utilizarea buclelor de program pentru implementarea ntrzierilor (delay)

Implementarea rutinelor de ntrziere (delay) pe un microcontroller se poate face prin
utilizarea a dou metode:

- Metode hardware
- Metode software

Implementarea ntrzierilor hardware se face cu ajutorul blocurilor de numrtoare
(implementate n timer-e), prin presetarea unei valori de numrare i startarea acelui numrtor.
Atunci cnd numrtorul ajunge la valoarea prestabilit se va genera o cerere de ntrerupere.
Tratarea acestei cereri de ntrerupere poate consta de exemplu n reluarea aplicaiei din punctul n
care a fost oprit. Avantajul acestei metode este c pe durata ntrzierii microprocesorul MCU poate
efectua alt cod ceea ce duce la implementarea de aplicaii de timp real. Un dezavantaj ar fi acela c
se va aloca un bloc hardware (de ex. timer-ul) pentru implementarea ntrzierilor.
Implementarea ntrzierilor software se face cu ajutorul buclelor de program i al
instruciunii NOP (no operation). ntrzierea se va realiza prin repetarea acestei instruciuni de un
anumit numr de ori. Pentru a realiza ntrzieri software cu o durat bine precizat programatorul
Sisteme Incorporate (Embedded Systems)
61
trebuie s cunoasc arhitectura microprocesorului MCU (n spe structura pipeline-ului acestuia) i
frecvena oscilatorului la care lucreaz acesta.
S presupunem c avem un MCU PIC18 care lucreaz cu un oscilator de 40MHz. Fiecare
instruciune se execut n 4 cicluri de tact; un ciclu de tact are n acest caz o durat de
ns 25 10 025 , 0
10 40
1
6
6
= =


. Rezult c ciclul unei instruciuni este de 100ns (fig. 3.7).




Fig. 3.7. Ciclul instruciunii la microcontroller-ele PIC18.

Pentru implementarea unei ntrzieri de 1 microsecund este necesar executarea a 10
instruciuni a 100 ns fiecare. Implementarea unui delay de 2 microsecunde se poate face ca n
secvena de mai jos:

;loop_cnt = contor
; aceasta este
um de ori
dat de loop_cnt
;ntrzierea p
;delay=
de bucl
;dcfsz decrementeaz loop_cnt
i omite dac 0
;secvena se repet de n
;
oate fi calculat n
;funcie de loop_cnt
loop_cnt*nr de instr. executate*100ns
rul
loop_cnt = 0x02
loop_cnt = 0x01
loop_cnt = 0x00
..........
loop_cnt equ 0x02
..........
1.nop
2.again: nop
3.nop
4.nop
5.nop
6.nop
7.nop
8.nop
9.nop
10.dcfsz loop_cnt,f,a
11.bra again
..........


Fig. 3.8. Secven de cod pentru implementarea unei ntrzieri software.

Avantajul metodei software este neutilizarea blocurilor hardware n procesul de delay mai
ales atunci cnd resursele MCU sunt limitate. Dezavantajul acestei metode const n faptul c
durata de ntrziere poate varia n timpul execuiei programului datorit ntreruperilor hardware care
pot fi activate de ctre periferice.


Sisteme Incorporate (Embedded Systems)
62
3.8. Instruciuni de rotire

Instruciunile de rotire pot fi utilizate pentru manipularea biilor sau pentru
nmuliri/mpriri cu valoarea 2. Procesorul PIC18 deine 4 instruciuni utilizate n operaiile de
rotire:



RLCF f,d,a



Instruciunea realizeaz rotirea la stnga cu o poziie binar a valorii prin flag-ul Carry.
Rezultatul poate fi depus n registrul de lucru (WREG) dac d=0, sau n registrul f dac d=1.

RLNCF f,d,a



Instruciunea realizeaz rotirea la stnga cu o poziie binar a valorii fr flag-ul Carry.
Rezultatul poate fi depus n registrul de lucru (WREG) dac d=0, sau n registrul f dac d=1.

RRCF f,d,a



Instruciunea realizeaz rotirea la dreapta cu o poziie binar a valorii prin flag-ul Carry.
Rezultatul poate fi depus n registrul de lucru (WREG) dac d=0, sau n registrul f dac d=1.

RRNCF f,d,a



Sisteme Incorporate (Embedded Systems)
63
Instruciunea realizeaz rotirea la dreapta cu o poziie binar a valorii fr flag-ul Carry.
Rezultatul poate fi depus n registrul de lucru (WREG) dac d=0, sau n registrul f dac d=1.

Exemplul 1: S se calculeze noile valori aferente registrului 0x10 i flag-ului Carry dup execuia
instruciunii rlcf 0x10,F,A. Se presupune c valoarea iniial a registrului 0x10 este 0xA9, iar
bitul Carry este 0.






Exemplul 2: S se calculeze noile valori aferente registrului 0x10 i flag-ului Carry dup execuia
instruciunii rrcf 0x10,F,A. Se presupune c valoarea iniial a registrului 0x10 este 0xC7, iar
bitul Carry este 1.







3.9. Utilizarea instruciunilor de rotire pentru efectuarea operaiilor de
nmulire/mprire

Operaia de nmulire a unei valori cu o putere a lui 2 se poate implementa prin operaia de
deplasare a valorii nspre stnga cu un anumit numr de bii; operaia de mprire a unei valori cu o
putere a lui 2 se poate implementa prin deplasarea valorii spre dreapta cu un numr de bii
specificai.
Procesorul PIC18 nu deine instruciuni de deplasare (shift). Pentru implementarea operaiei
de deplasare se utilizeaz instruciunile de rotire cu Carry. nainte de execuia instruciunii de rotire
trebuie ca flag-ul Carry s fie resetat pentru a nu influena valoarea deplasat.
Sisteme Incorporate (Embedded Systems)
64
PIC18 deine trei instruciuni care opereaz la nivel de bit. Cmpul b specific poziia bitului
pe care se opereaz modificarea.



Exemplul 1: S se scrie o secven de instruciuni pentru nmulirea cu 8 a valorii pe trei octei
localizai n registrele 0x00...0x02.

movlw 0x03 ;bucla de 3 iteraii
loop bcf STATUS,C,A ;reseteaza bitul Carry
rlcf 0x00,F,A ;rotire cu 1 bit la stanga prin Carry
rlcf 0x01,F,A ;rotire cu 1 bit la stanga prin Carry
rlcf 0x02,F,A ;rotire cu 1 bit la stanga prin Carry
decfsz WREG,W,A ;s-au efectuat 3 iteraii?
goto loop ;dac nu, continu

Exemplul 2: S se scrie o secven de instruciuni pentru mprirea cu 16 a valorii exprimate pe
trei octei localizai n registrele 0x10...0x12. Operaia de deplasare trebuie s se fac n acest caz
ncepnd cu octetul cel mai semnificativ.

movlw 0x04 ;bucla de 4 iteraii
loop bcf STATUS,C,A ;reseteaza bitul Carry
rrcf 0x12,F,A ;rotire cu 1 bit la stanga prin Carry
rrcf 0x11,F,A ;rotire cu 1 bit la stanga prin Carry
rrcf 0x10,F,A ;rotire cu 1 bit la stanga prin Carry
decfsz WREG,W,A ;s-au efectuat 4 iteraii?
goto loop ;dac nu, continu

Sisteme Incorporate (Embedded Systems)
65
Anexa curs 3
Setul de instruciuni aferent procesoarelor PIC18





Sisteme Incorporate (Embedded Systems)
66





Sisteme Incorporate (Embedded Systems)
67


Sisteme Incorporate (Embedded Systems)
68



4. MECANISMUL DE TRATARE A NTRERUPERII N
PROCESORUL PIC18


Rolul mecanismului de tratare a ntreruperilor n cazul unui sistem de calcul este de a
permite sincronizarea operaiilor de I/O, gestiunea erorilor i a resurselor partajate etc.
ntreruperea reprezint un eveniment care va determina procesorul s ntrerup execuia
programului curent i s execute un serviciu (rutin de tratare a ntreruperii) aferent perifericului
solicitant. n cazul sistemelor ncorporate exist dou tipuri de ntreruperi: ntreruperi interne
(generate on-chip) i ntreruperi externe (generate de circuitele externe).
Deoarece n cazul microcontroller-elor echipamentele periferice (timer-e, porturi I/O,
interfee seriale etc.) sunt integrate on-chip ele vor genera ntreruperi hardware interne. Situaiile
anormale de procesare (excepii) generate de codul ilegal, overflow, mprirea la zero etc. Sunt
tratate prin ntreruperile software interne.
Tipul aplicaiei hardware poate permite apariia ntreruperilor externe care vor fi generate de
ctre circuitele adiionale microcontroller-ului. Un exemplu clasic ar putea fi o aplicaie care
msoar o valoare analogic (de ex. temperatura) cu ajutorul unui senzor digital. n acest caz
microcontroller-ul va citi valoarea numeric furnizat de senzor numai la apariia cererii de
ntrerupere generate de acesta.
Mecanismul de tratare a ntreruperii implementat n procesoarele PIC18 este prezentat n
figura 4.1.



Fig. 4.1. Mecanismul de tratare a ntreruperii n sistemele cu PIC18.

Tratarea cererilor de ntrerupere se face de ctre microprocesor prin execuia programului
(handler sau rutin de tratare a ntreruperii) aferent perifericului care a generat ntreruperea. Dup
efectuarea serviciului procesorul trebuie s reia programul ntrerupt la apariia cererii perifericului.
n cazul general, tratarea cererii de ntrerupere presupune efectuarea urmtorilor pai:

1. Salvarea adresei de revenire n programul ntrerupt (registrul PC)
Sisteme Incorporate (Embedded Systems)
69
2. Salvarea strii curente a procesorului (registrul de stare i alte registre n funcie de
tipul procesorului)
3. Identificarea sursei de ntrerupere
4. Aflarea adresei de start a rutinei de tratare a ntreruperii
5. Execuia rutinei de tratare a ntreruperii (deservirea cererii de ntrerupere)
6. Restaurarea strii procesorului din stiv
7. Restaurarea registrului PC i reluarea programului ntrerupt

Sistemul de ntreruperi este utilizat n diverse aplicaii cum ar fi:

- Gestionarea transferurilor I/O. Microprocesorul trebuie s fie anunat printr-o cerere
de ntrerupere atunci cnd un periferic este pregtit s furnizeze datele. Dac nu s-ar
utiliza mecanismul de tratare a cererilor de ntrerupere, microprocesorul ar trebui s
interogheze n permanen acel periferic, ceea ce ar duce la creterea timpului alocat
transferului I/O.
- Aplicaii critice din punct de vedere al timpului. Evenimentele cauzate de cderea
tensiunii de alimentare sau controlul proceselor trebuie tratate imediat (n timp real)
de ctre procesor prin ntreruperea programului aflat n curs de execuie i efectuarea
serviciului solicitat.
- Abandonarea aplicaiei n cazul apariiei unei erori software.
- Efectuarea ciclic a unor task-uri. Exemple de task-uri ar putea fi gestiunea datei i a
orei prin execuia periodic a rutinei aferente, achiziia periodic a unui semnal,
comutarea task-urilor ntr-un sistem de operare multitasking etc.

Sistemele de calcul actuale dein mai multe surse de ntreruperi hardware de la periferice sau
circuitele externe. Aceste surse pot genera simultan cereri de ntrerupere care trebuie tratate de ctre
procesor pe baza prioritii lor. Stabilirea prioritilor cererilor de ntrerupere se poate face prin
hardware sau, n cazul sistemelor mai simple, prin software de ctre programator.
Exist cazuri n care, n funcie de tipul aplicaiei, anumite cereri de ntrerupere trebuie s fie
ignorate de ctre procesor. Procesoarele actuale dein mecanisme de mascare a unor ntreruperi
astfel nct acestea nu vor fi tratate. Aceste ntreruperi sunt numite mascabile. Totui pentru
aplicaiile critice exist ntreruperi nemascabile pe care procesorul trebuie s le trateze n momentul
apariiei cererii de ntrerupere.
Tratarea cererilor de ntrerupere mascabile activate pe durata execuiei unei instruciuni se
face de ctre procesor dup execuia complet a instruciunii respective.
n cazul ntreruperilor nemascabile procesorul va abandona execuia instruciunii curente
indiferent de faza n care se afl aceasta pentru tratarea ct mai rapid a evenimentului survenit.
Servirea acestor tipuri de cereri se face prin abandonarea urgent a execuiei programului i afiarea
unui mesaj de eroare.
Adresa de start a unei rutine de tratare a ntreruperii este denumit vector de ntrerupere.
Determinarea acestei adrese se poate face prin mai multe metode:

- Predefinirea vectorului. Aceast metod presupune definirea unor adrese standard n
momentul proiectrii procesorului. Servirea se face prin efectuarea unui salt la o
locaie predefinit unde se va gsi rutina de tratare a ntreruperii (de ex. MCU
Microchip i MCU 8051)
- Citirea vectorului dintr-o locaie de memorie predefinit. Adresele rutinelor de
ntrerupere se vor regsi n tabela vectorilor de ntrerupere. Avantajul acestei metode
este adresa rutinei poate fi stabilit de programator
- Localizarea vectorului de ntrerupere prin intermediul unei valori citite de procesor
de la periferic (numrul ntreruperii). Numrul ntreruperii furnizat de periferic sau
de software va determina aflarea poziiei vectorului n cadrul tabelei vectorilor de
Sisteme Incorporate (Embedded Systems)
70
ntrerupere (fig. 4.2.). Pe lng avantajul menionat la punctul anterior aceast
metod permite i o prioritizare hardware a perifericelor din sistem (de ex.
procesorul Intel 8086)



Fig. 4.2. Mecanismul de tratare a ntreruperilor software n procesorul Intel 8086.

Mai multe surse de ntrerupere pot partaja acelai vector de ntrerupere. Pentru ca procesorul
s poat identifica sursa cererii de ntrerupere el trebuie s analizeze flag-ul aferent fiecrei surse de
ntrerupere.
Procesorul microcontroller-ului PIC18 deine doar doi vectori de ntrerupere predefinii prin
care gestioneaz toate ntreruperile din sistem. Aceste ntreruperi sunt divizate n dou clase de
prioritate: clasa cu nivel ridicat de prioritate i clasa cu nivel sczut de prioritate. Indiferent de clasa
de prioritate handler-ul de ntrerupere trebuie s verifice biii de stare asociai din IRR (Interrupt
Request Register) pentru identificarea sursei de ntrerupere.
O categorie aparte de evenimente care sunt tratate ca i ntreruperile este cea a
evenimentelor de resetare. Exist dou tipuri de reset: resetare la alimentare (power-on reset) i
resetare manual (manual reset).
Prin resetarea la alimentare microprocesorul i iniializeaz valorile de start din registre i
din bistabile precum i din interfeele de I/O pentru startarea corect a sistemului. Resetarea
manual permite eliminarea erorilor software (dac hardware-ul funcioneaz corect) i restabilirea
condiiilor iniiale. Dup tratarea oricrui eveniment de reset microprocesorul va reboota.


4.1. Tratarea cererilor de ntrerupere prin intermediul aplicaiilor software

Scrierea programelor care trateaz cererile de ntrerupere presupune parcurgerea a trei pai:
1. Scrierea handler-ului de ntrerupere. Handler-ul de ntrerupere este o procedur prin
care se implementeaz serviciul oferit sursei de ntrerupere.
2. Iniializarea tabelei vectorilor de ntrerupere. n aceast tabel se memoreaz
adresele handler-elor de ntrerupere (fig. 4.3.). n cazul PIC18 acest pas NU este
necesar deoarece exist doar doi vectori de ntrerupere predefinii (fig 4.4).
Sisteme Incorporate (Embedded Systems)
71
3. Validarea cererilor de ntrerupere prin setarea biilor afereni. Acest pas presupune
demascarea cererilor de ntrerupere pentru a fi sesizate de ctre microprocesor.



a)

b)

c)
Sisteme Incorporate (Embedded Systems)
72
Fig. 4.3. Setarea unui vector de ntrerupere (Intel 8086)
(a) starea iniial a tabelei IVT; (b,c) starea tabelei IVT dup instalarea noului handler


org 0x000
goto start

org 0x08 ;rutina pt. ntreruperi cu prioritate ridicat
........
org 0x18 ;rutina pt. ntreruperi cu prioritate sczut
........
start ;programul principal
........
........
........
end

Fig. 4.4. Exemplu de program scris n limbaj de asamblare cu rutine de tratare a ntreruperii (MCU
PIC18).

n cazul scrierii programului n limbajul C, este necesar ca programatorul s defineasc
funciile prin care gestioneaz rutinele de tratare a ntreruperilor necesare proiectului. Definirea se
face cu ajutorul directivei #pragma. Deoarece microcontroller-ul PIC18 are doar dou nivele de
prioritate alocate pentru ntreruperi rezult c programatorul poate defini maxim dou handler-e de
ntrerupere:

#pragma interruptlow nume_functie ;low priority ISR

#pragma interrupt nume_functie ;high priority ISR

Coninutul unei rutine de tratare a ntreruperii const (n cazul obinuit) din instruciuni goto
pentru a selecta funcia de servire a ntreruperii.
Un exemplu de program standard scris n limbajul C care trateaz ntreruperile este
prezentat mai jos:

#include <pl8Fxxx.h>

void high_ISR(void);
void low_ISR(void);

#pragma code high_vector = 0x08
//forteaza ca urmatoarea functie sa inceapa la adresa 0x08

void high_interrupt (void)
{
_asm
goto high_ISR; //salt la functia care trateaza intreruperea
_endasm
}

#pragma code //revenire la sectiunea de cod implicita
#pragma interrupt high_ISR

void high_ISR (void)
{
......... //tratarea intreruperilor de prioritate ridicata
Sisteme Incorporate (Embedded Systems)
73
}

#pragma code low_vector = 0x18
//forteaza ca urmatoarea functie sa inceapa la adresa 0x18

void low_interrupt (void)
{
_asm
goto low_ISR; //salt la functia care trateaza intreruperea
_endasm
}

#pragma code //revenire la sectiunea de cod implicita
#pragma interruptlow low_ISR

void low_ISR (void)
{

......... //tratarea intreruperilor de prioritate scazuta

}

void main(void)
{
.........
}


4.2. ntreruperile MCU PIC18

Microcontroller-ul PIC18 (fig. 4.5.) deine urmtoarele surse de ntrerupere:

1. Patru ntreruperi externe cu activare pe front (INT0...INT3)
2. Patru ntreruperi externe cu activare la schimbarea strii biilor 7...4 afereni portului B
3. ntreruperi on-chip provenite de la perifericele integrate n controller


Fig. 4.5. Semnificaia pinilor la microcontroller-ul PIC18F442/452.

Sisteme Incorporate (Embedded Systems)
74
Aa cum am vzut n seciunea precedent, MCU PIC18 permite utilizatorului s mpart
ntreruperile n dou categorii: grupul de ntreruperi cu prioritate ridicat i grupul de ntreruperi cu
prioritate sczut. Atunci cnd aplicaia revendic tratarea special a unor ntreruperi ele vor fi
plasate n grupul de prioritate ridicat. Dac aplicaia nu trebuie s diferenieze ntreruperile atunci
utilizatorul poate opta s nu valideze schema de prioritate oferit de PIC18, iar toate ntreruperile
vor face parte din acelai grup de prioritate (high sau low).
Pentru gestiunea tuturor surselor de ntrerupere microcontroller-ul PIC18 utilizeaz 13
registre:
- RCON
- INTCON
- INTCON2
- INTCON3
- PIR1, PIR2 i PIR3
- PIE1, PIE2 i PIE3
- IPR1, IPR2 i IPR3

Pentru controlul fiecrei surse de ntrerupere sunt alocai n hardware trei bii:

- Un bit de stare (flag) care indic activarea cererii de ntrerupere.
- Un bit de validare pentru activarea/dezactivarea sursei de ntrerupere.
- Un bit de prioritate pentru selecia grupului de prioritate a ntreruperii. Acest bit are
efect doar dac schema de prioritizare este activat.


Registrul RCON (Reset Control Register) conine biii de stare necesari identificrii
surselor de ntrerupere. Structura registrul RCON este prezentat n figura de mai jos.



Bitul 7 IPEN bitul Interrupt Priority Enable valideaz prioritizarea ntreruperilor
(fig. 4.6).
0 schema de prioritizare a ntreruperilor este invalidat (PIC micro mid-range
devices compatibility mode)
1 schema de prioritizare a ntreruperilor este validat

Sisteme Incorporate (Embedded Systems)
75


Fig. 4.6. Schema de prioritizare a ntreruperilor n MCU PIC18.

Biii 6..5 sunt neimplementai. La citire sunt 0.

Bitul 4 RI bitul Reset Instruction Flag specific dac s-a executat un reset al MCU.
0 instruciunea de RESET a fost executat
1 instruciunea de RESET nu a fost executat. Acest bit trebuie setat prin
software dup un eveniment de tip Brownout Reset (scderea tensiunii de
alimentare)

Bitul 3 TO bitul Watchdog Timeout Flag specific dac timer-ul watchdog a ajuns
la valoarea de numrare prestabilit (timeout).
0 timer-ul watchdog a generat timeout
1 dup alimentare, bitul este setat de instruciunile CLRWDT sau SLEEP

Bitul 2 PD bitul Power Down Detection Flag specific dac s-a sesizat o cdere a
alimentrii.
0 este resetat la execuia instruciunii SLEEP
1 este setat dup realimentare sau la execuia instruciunii CLRWDT

Bitul 1 POR bitul Power-on Reset Status specific dac s-a efectuat un reset la
alimentare.
0 MCU a fost resetat la alimentare
1 MCU nu a fost resetat la alimentare (bitul trebuie setat prin software dup acest
eveniment de reset).
Sisteme Incorporate (Embedded Systems)
76

Bitul 1 BOR bitul Brownout Reset Status specific dac s-a efectuat un reset la
scderea tensiunii de alimentare.
0 MCU a fost resetat la scderea tensiunii de alimentare
1 MCU nu a fost resetat la scderea tensiunii de alimentare (bitul trebuie setat
prin software dup acest eveniment de reset).


a) cderea tensiunii de alimentare (blackout);

b) scderea tensiunii de alimentare (brownout);

Sisteme Incorporate (Embedded Systems)
77

c) cderea temporar tensiunii de alimentare (dropout);

Fig. 4.7. Reprezentarea grafic a evenimentelor care pot aprea la alimentarea unui circuit.

Registrele INTCON, INTCON2 i INTCON3 (Interrupt Control Registers) conin bii de
validare, prioritizare i stare pentru cererile de ntrerupere externe activate prin schimbarea strii
biilor din portul B, precum i pentru cele provenite de la timer-ul 0 (la timeout).



Registrul INTCON registru de control a cererilor de ntrerupere



Bitul 7 GIE/GIEH bitul de validare global a cererilor de ntrerupere (Global
Interrupt Enable).
Dac IPEN=0
0 invalideaz toate cererile de ntrerupere
1 valideaz toate cererile de ntrerupere nemascabile
Dac IPEN=1
0 invalideaz toate cererile de ntrerupere
1 valideaz toate cererile de ntrerupere cu prioritate ridicat (vector la
adresa 00008)

Sisteme Incorporate (Embedded Systems)
78



Bitul 6 PEIE/GIEL bitul de validare a cererilor de ntrerupere provenite de la
periferice (Peripheral Interrupt Enable).
Dac IPEN=0
0 invalideaz toate cererile de ntrerupere provenite de la periferice
1 valideaz toate cererile de ntrerupere nemascabile provenite de la periferice
Dac IPEN=1
0 invalideaz toate cererile de ntrerupere cu prioritate sczut provenite de la
periferice
1 valideaz toate cererile de ntrerupere cu prioritate sczut provenite de la
periferice (vector la adresa 00018)
Sisteme Incorporate (Embedded Systems)
79


La acceptarea tratrii unei cereri de ntrerupere procesorul reseteaz bitul GIE (Global
Interrupt Enable) pentru a invalida sesizarea urmtoarelor cereri. Dac bitul IPEN este zero,
microcontroller-ul funcioneaz n modul de compatibilitate cu MCU PIC micro mid-range (PIC
16CXXXX). n cazul n care IPEN este 1, resetarea poate fi fcut asupra GIEH sau GIEL n
funcie de sursa de ntrerupere. O ntrerupere cu prioritate ridicat poate n acest caz s ntrerup
tratarea unei ntreruperi de prioritate sczut.
Adresa de revenire n programul ntrerupt de execuia rutinei de tratarea a ntreruperii
(Interrupt Service Routine) este salvat n stiv, iar n registrul PC se ncarc adresa vectorului de
ntrerupere (00008 sau 00018). Identificarea sursei de ntrerupere se face n ISR prin interogarea
flag-urilor de ntrerupere aferente fiecrui periferic utilizat n aplicaia n cauz (biii XXXXIF).
Flag-ul de ntrerupere trebuie resetat de software nainte de revalidarea global a ntreruperilor
(setarea GIE, GIEH sau GIEL), pentru a evita apariia ntreruperilor recursive.
Fiecare rutin de tratare a ntreruperii se ncheie cu instruciunea return from interrupt
RETFIE, care extrage coninutul PC din stiv (revenire n programul ntrerupt) i seteaz biii de
validare a ntreruperilor (GIE, GIEH sau GIEL).

Bitul 5 TMR0IE bitul de validare a cererii de ntrerupere (timeout) provenite de la
timer-ul zero (TMR0 Overflow Interrupt Enable).
0 invalideaz cererile de ntrerupere provenite de la TMR0
1 valideaz cererile de ntrerupere provenite de la TMR0

Bitul 4 INT0IE bitul de validare a ntreruperii externe 0 (INT0 External Interrupt
Enable).
0 invalideaz cererea de ntrerupere extern INT0
1 valideaz cererea de ntrerupere extern INT0

Sisteme Incorporate (Embedded Systems)
80
Bitul 3 RBIE bitul de validare a ntreruperilor activate la schimbarea strii biilor
7...4 din portul B (RB Port Interrupt Enable).
0 invalideaz cererile de ntrerupere externe prin RB7...4
1 valideaz cererile de ntrerupere externe prin RB7...4

Bitul 2 TMR0IF bitul de stare a ntreruperii de timeout provenite de la timer-ul
zero (TMR0 Overflow Interrupt Flag).
0 nu s-a activat cererea de ntrerupere provenit de la TMR0
1 s-a activat cererea de ntrerupere provenit de la TMR0

Bitul 1 INT0IF bitul de stare a ntreruperii externe 0 (INT0 External Interrupt
Enable).
0 nu s-a activat nicio cerere de ntrerupere extern INT0
1 s-a activat o cerere de ntrerupere extern INT0 pe pinul RB0

Bitul 0 RBIF bitul de stare a ntreruperilor activate la schimbarea strii biilor 7...4
din portul B (RB Port Interrupt Enable).
0 nici un pin RB7...4 nu i-a schimbat starea
1 cel puin un pin RB7...4 i-a schimbat starea (dup testare bitul trebuie resetat
prin software)

Se observ c ntreruperea activat pe pinul INT0 nu are bit de setare a prioritii. Aceast
cerere de ntrerupere are ntotdeauna prioritate ridicat deoarece ea apare n schema de prioritizare
doar n circuitul de prioritate ridicat (vezi fig. 4.6).
Atunci cnd se valideaz prin intermediul lui IPEN schema de prioritate trebuie ca
programatorul s valideze biii GIEH i GIEL pentru a avea active i cererile de ntrerupere cu
prioritate sczut, deoarece GIEH=0 conduce la invalidarea tuturor cererilor de ntrerupere.

Registrul INTCON2 registru de control a cererilor de ntrerupere



Bitul 7 RBPU bitul de validare pull-up resistor aferent portului B (Pull-up Enable).
0 valideaz ieirile pull-up resistor aferente pinilor portului B
1 valideaz ieirile open collector aferente pinilor portului B
Ieirile open collector sunt utilizate n cazul interconectrii circuitelor care
funcioneaz la aceeai tensiune de alimentare (fig. 4.8.a). Ieirile pull-up resistor
sunt utilizate pentru interconectarea dispozitivelor alimentate la tensiuni
diferite(fig. 4.8.b).

Sisteme Incorporate (Embedded Systems)
81

a) b)

Fig. 4.8. Circuite cu ieire a) open collector; b) pull-up resistor.

Bitul 6 INTEDG0 bitul de selecie a frontului ntreruperii INT0 (External Interrupt0
Edge Select).
0 cererea de ntrerupere extern INT0 este sesizat pe frontul cztor
1 cererea de ntrerupere extern INT0 este sesizat pe frontul cresctor (fig. 4.9)



Fig. 4.9. Detecia cererilor de ntrerupere pe frontul cresctor (INTEDG0=1).

Bitul 5 INTEDG1 bitul de selecie a frontului ntreruperii INT1 (External Interrupt1
Edge Select).
0 cererea de ntrerupere extern INT1 este sesizat pe frontul cztor
1 cererea de ntrerupere extern INT1 este sesizat pe frontul cresctor

Bitul 4 INTEDG2 bitul de selecie a frontului ntreruperii INT2 (External Interrupt2
Edge Select).
0 cererea de ntrerupere extern INT2 este sesizat pe frontul cztor
1 cererea de ntrerupere extern INT2 este sesizat pe frontul cresctor

Bitul 3 neimplementat. La citire este 0.

Bitul 2 TMR0IP bitul de stabilire a prioritii ntreruperii TMR0 (TMR0 Overflow
Interrupt Priority).
0 cerere de ntrerupere cu prioritate sczut
1 cerere de ntrerupere cu prioritate ridicat

Bitul 1 neimplementat. La citire este 0.

Bitul 0 RBIP bitul de stabilire a prioritii ntreruperilor din biii 7...4 afereni
portului B (RB Port Change Interrupt Priority).
0 cerere de ntrerupere cu prioritate sczut
Sisteme Incorporate (Embedded Systems)
82
1 cerere de ntrerupere cu prioritate ridicat


Registrul INTCON3 registru de control a cererilor de ntrerupere



Bitul 7 INT2IP bitul de prioritate a ntreruperii externe INT2 (INT2 External
Interrupt Priority).
0 cererea de ntrerupere extern INT2 are prioritate sczut
1 cererea de ntrerupere extern INT2 are prioritate ridicat


Bitul 6 INT1IP bitul de prioritate a ntreruperii externe INT1 (INT1 External
Interrupt Priority).
0 cererea de ntrerupere extern INT1 are prioritate sczut
1 cererea de ntrerupere extern INT1 are prioritate ridicat

Bitul 5 neimplementat. La citire este 0.

Bitul 4 INT2IE bitul de validare a ntreruperii externe 2 (INT2 External Interrupt
Enable).
0 invalideaz cererea de ntrerupere extern INT2
1 valideaz cererea de ntrerupere extern INT2

Bitul 3 INT1IE bitul de validare a ntreruperii externe 1 (INT1 External Interrupt
Enable).
0 invalideaz cererea de ntrerupere extern INT1
1 valideaz cererea de ntrerupere extern INT1

Bitul 2 neimplementat. La citire este 0.

Bitul 1 INT2IF bitul de stare a ntreruperii externe 2 (INT2 External Interrupt
Enable).
0 nu s-a activat cererea de ntrerupere extern INT2
1 s-a activat cererea de ntrerupere extern INT2

Bitul 0 INT1IF bitul de stare a ntreruperii externe 1 (INT1 External Interrupt
Enable).
0 nu s-a activat cererea de ntrerupere extern INT1
1 s-a activat cererea de ntrerupere extern INT1


Registrele PIR (Peripheral Interrupt Register) conin biii de stare afereni ntreruperilor
provenite de la periferice. Biii de flag-uri sunt utilizai pentru identificarea sursei de ntrerupere
provenite de la periferice. Aceti bii nu sunt prezeni la toate microcontroller-ele PIC18 deoarece
unele dintre ele nu au implementate anumite blocuri hardware. De exemplu, registrul PIR3 este
utilizat pentru memorarea biilor de stare ai controller-ului CAN (Controller Area Network) n cazul
microcontroller-elor care dein acest bloc.

Sisteme Incorporate (Embedded Systems)
83
Registrul PIR1



Bitul 7 PSPIF bitul de stare a ntreruperii de scriere/citire a portului paralel aferent
slave-ului (Parallel Slave Port Read/Write Interrupt Flag).
0 nu s-au efectuat operaii de scriere/citire prin/din PSP
1 s-a efectuat o operaie de scriere/citire prin/din PSP
(1)
Acest bit este rezervat pentru familia de controller-e PIC18F2x2. Celelalte
microcontroller-e PIC18 trebuie s menin acest bit pe zero.

Bitul 6 ADIF bitul de stare a ntreruperii convertorului analog/digital (A/D
Interrupt Flag).
0 conversia analog/numeric nu s-a ncheiat
1 conversia analog/numeric s-a ncheiat i rezultatul este disponibil

Bitul 5 RCIF bitul de stare a ntreruperii de recepie a blocului serial Universal
Asynchronous Receiver Transmitter (USART Receive Interrupt Flag).
0 buffer-ul de recepie USART, RCREG este gol
1 buffer-ul de recepie USART este plin

Bitul 4 TXIF bitul de stare a ntreruperii activate de blocul serial Universal
Asynchronous Receiver Transmitter (USART Transmit Interrupt Flag) la
transmisia unui caracter.
0 buffer-ul de transmisie TXREG poate fi ncrcat (TXREG a fost golit)
1 buffer-ul de transmisie TXREG nu poate fi ncrcat (TXREG nu a fost golit)

Bitul 3 SSPIF bitul de stare a ntreruperii blocului serial sincron master (Master
Synchronous Serial Port Interrupt Flag).
0 se ateapt o operaie de transmisie/recepie prin MSSP
1 operaia de transmisie/recepie prin MSSP s-a ncheiat

Bitul 2 CCP1IF bitul de stare a ntreruperii blocului CCP1
(Capture/Compare/PWM1 Interrupt Flag).
Modulul CCP1 are trei funcii de baz: captarea valorii curente a registrului unui timer,
compararea cu valoarea curent a registrului unui timer i generarea unui semnal PWM
(Pulse Width Modulation).
Modul Captare:
0 nu s-a efectuat o captare a registrului TMR1
1 captarea registrului TMR1 s-a ncheiat
Modul Comparare:
0 nu s-a detectat o egalitate ntre registrele TMR1
1 s-a detectat o egalitate ntre registrele TMR1
Modul PWM:
Bitul este neutilizat n acest mod.

Bitul 1 TMR2IF bitul de stare a ntreruperii de timer 2 (TMR2 to PR2 Match
Interrupt Flag).
Timer-ul TMR2 deine registrul PR2 (Period 2). n momentul n care valoarea numrat
(incrementat) de TMR2 ajunge la valoarea PR2, se va genera o cerere de ntrerupere.
Sisteme Incorporate (Embedded Systems)
84
0 nu s-a detectat o egalitate ntre registrele TMR2 i PR2
1 s-a detectat o egalitate ntre registrele TMR2 i PR2

Bitul 0 TMR1IF bitul de stare a ntreruperii de timer 1 (TMR1 overflow Interrupt
Flag).
0 registrul TMR1 nu a generat overflow
1 registrul TMR1 a generat overflow


Registrul PIR2



Biii 7...5 neimplementai. La citire sunt 0.

Bitul 4 EEIF bitul de stare a operaiei de scriere a datelor n EEPROM/FLASH
(Data EEPROM/FLASH Write Interrupt Flag).
0 operaia de scriere nu s-a ncheiat sau nu a fost startat
1 operaia de scriere s-a ncheiat

Bitul 3 BCLIF bitul de stare a coliziunilor pe bus (Bus Collision Interrupt Flag).
0 nu sunt coliziuni pe bus
1 a aprut cel puin o coliziune pe bus

Bitul 2 LVDIF bitul de stare a ntreruperii de detecie a scderii tensiunii (Low
Voltage Detect Interrupt Flag).
0 tensiunea de alimentare este mai mare dect valoarea minim acceptabil
1 tensiunea de alimentare a sczut sub valoarea nominal

Bitul 1 TMR3IF bitul de stare a ntreruperii de timer 3 (TMR3 overflow Interrupt
Flag).
0 registrul TMR3 nu a generat overflow
1 registrul TMR3 a generat overflow

Bitul 0 CCP2IF bitul de stare a ntreruperii blocului CCP2
(Capture/Compare/PWM2 Interrupt Flag).
Modul Captare:
0 nu s-a efectuat o captare a registrului TMR1
1 captarea registrului TMR1 s-a ncheiat
Modul Comparare:
0 nu s-a detectat o egalitate ntre registrele TMR1
1 s-a detectat o egalitate ntre registrele TMR1
Modul PWM:
Bitul este neutilizat n acest mod.

Registrele PIE conin biii de validare a ntreruperilor provenite de la blocurile periferice.
Dac bitul IPEN (bitul 7 din registrul RCON) este 0, atunci bitul PEIE (bitul 2 din registrul
INTCON) trebuie setat pentru validarea acestor ntreruperi.

Registrul PIE1
Sisteme Incorporate (Embedded Systems)
85



Bitul 7 PSPIE bitul de validare a ntreruperii de scriere/citire a portului paralel
aferent slave-ului (Parallel Slave Port Read/Write Interrupt Enable).
0 invalideaz cererea de ntrerupere PSP
1 valideaz cererea de ntrerupere PSP
(1)
Acest bit este rezervat pentru familia de controller-e PIC18F2x2. Celelalte
microcontroller-e PIC18 trebuie s menin acest bit pe zero.

Bitul 6 ADIE bitul de validare a ntreruperii convertorului analog/digital (A/D
Interrupt Enable).
0 invalideaz cererea de ntrerupere de la convertor
1 valideaz cererea de ntrerupere de la convertor

Bitul 5 RCIE bitul de validare a ntreruperii de recepie a blocului serial Universal
Asynchronous Receiver Transmitter (USART Receive Interrupt Enable).
0 invalideaz cererea de ntrerupere de recepie de la USART
1 valideaz cererea de ntrerupere de recepie de la USART

Bitul 4 TXIE bitul de validare a ntreruperii de transmisie a blocului serial
Universal Asynchronous Receiver Transmitter (USART Transmit Interrupt
Enable).
0 invalideaz cererea de ntrerupere de transmisie de la USART
1 valideaz cererea de ntrerupere de transmisie de la USART

Bitul 3 SSPIE bitul de validare a ntreruperii blocului serial sincron master (Master
Synchronous Serial Port Interrupt Enable).
0 invalideaz cererea de ntrerupere a MSSP
1 valideaz cererea de ntrerupere a MSSP

Bitul 2 CCP1IE bitul de validare a ntreruperii blocului CCP1
(Capture/Compare/PWM1 Interrupt Enable).
0 invalideaz cererea de ntrerupere a CCP1
1 valideaz cererea de ntrerupere a CCP1

Modulul CCP1 are trei funcii de baz: captarea valorii curente a registrului unui timer,
compararea cu valoarea curent a registrului unui timer i generarea unui semnal PWM
(Pulse Width Modulation).

Bitul 1 TMR2IE bitul de validare a ntreruperii de timer 2 (TMR2 to PR2 Interrupt
Enable).
0 invalideaz cererea de ntrerupere de la TMR2
1 valideaz cererea de ntrerupere de la TMR2
Timer-ul TMR2 deine registrul PR2 (Period 2). n momentul n care valoarea numrat
(incrementat) de TMR2 ajunge la valoarea PR2, se va genera o cerere de ntrerupere.

Bitul 0 TMR1IE bitul de validare a ntreruperii de timer 1 (TMR1 overflow
Interrupt Enable).
0 invalideaz cererea de ntrerupere de la TMR1
Sisteme Incorporate (Embedded Systems)
86
1 valideaz cererea de ntrerupere de la TMR1

Registrul PIE2




Biii 7...5 neimplementai. La citire sunt 0.

Bitul 4 EEIE bitul de validare a ntreruperii datorate operaiei de scriere a datelor
n EEPROM/FLASH (Data EEPROM/FLASH Write Operation Interrupt
Enable).
0 ntreruperea este invalidat
1 ntreruperea este validat

Bitul 3 BCLIE bitul de validare a ntreruperii datorate apariiei coliziunilor pe bus
(Bus Collision Interrupt Enable).
0 ntreruperea este invalidat
1 ntreruperea este validat

Bitul 2 LVDIE bitul de validare a ntreruperii de detecie a scderii tensiunii (Low
Voltage Detect Interrupt Enable).
0 ntreruperea este invalidat
1 ntreruperea este validat

Bitul 1 TMR3IE bitul de validare a ntreruperii de timer 3 (TMR3 overflow
Interrupt Flag).
0 ntreruperea este invalidat
1 ntreruperea este validat

Bitul 0 CCP2IE bitul de validare a ntreruperii blocului CCP2
(Capture/Compare/PWM2 Interrupt Flag).
0 ntreruperea este invalidat
1 ntreruperea este validat

Registrele IPR (Interrupt Priority Register) memoreaz biii de prioritate pentru
ntreruperile periferice. Aceste registre au efect doar dac bitul de validare IPEN este setat. Prin
validarea schemei de prioriti i a bitului de prioritate asociat programatorul poate ncadra
ntreruperea periferic ntr-una din cele dou clase de prioriti (high/low priority).

Registrul IPR1



Bitul 7 PSPIP bitul de prioritate a ntreruperii de scriere/citire a portului paralel
aferent slave-ului (Parallel Slave Port Read/Write Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat
Sisteme Incorporate (Embedded Systems)
87
(1)
Acest bit este rezervat pentru familia de controller-e PIC18F2x2. Celelalte
microcontroller-e PIC18 trebuie s menin acest bit setat.

Bitul 6 ADIP bitul de prioritate a ntreruperii convertorului analog/digital (A/D
Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 5 RCIP bitul de prioritate a ntreruperii de recepie a blocului serial USART
(USART Receive Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 4 TXIF bitul de prioritate a ntreruperii de transmisie a blocului serial
USART (USART Transmit Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 3 SSPIF bitul de prioritate a ntreruperii blocului serial sincron master
(Master Synchronous Serial Port Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 2 CCP1IF bitul de prioritate a ntreruperii blocului CCP1
(Capture/Compare/PWM1 Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 1 TMR2IF bitul de prioritate a ntreruperii de timer 2 (TMR2 to PR2 Match
Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat

Bitul 0 TMR1IF bitul de prioritate a ntreruperii de timer 1 (TMR1 overflow
Interrupt Priority).
0 prioritate sczut
1 prioritate ridicat


Registrul IPR2



Biii 7...5 neimplementai. La citire sunt 0.

Bitul 4 EEIP bitul de prioritate a ntreruperii datorate operaiei de scriere a datelor
n EEPROM/FLASH (Data EEPROM/FLASH Write Operation Interrupt
Enable).
0 prioritate sczut
1 prioritate ridicat
Sisteme Incorporate (Embedded Systems)
88

Bitul 3 BCLIP bitul de prioritate a ntreruperii datorate apariiei coliziunilor pe
bus (Bus Collision Interrupt Enable).
0 prioritate sczut
1 prioritate ridicat

Bitul 2 LVDIP bitul de prioritate a ntreruperii de detecie a scderii tensiunii (Low
Voltage Detect Interrupt Enable).
0 prioritate sczut
1 prioritate ridicat

Bitul 1 TMR3IP bitul de prioritate a ntreruperii de timer 3 (TMR3 overflow
Interrupt Flag).
0 prioritate sczut
1 prioritate ridicat

Bitul 0 CCP2IP bitul de prioritate a ntreruperii blocului CCP2
(Capture/Compare/PWM2 Interrupt Flag).
0 prioritate sczut
1 prioritate ridicat


Microcontroller-ul PIC18 poate deine urmtoarele ntreruperi provenite de la periferice:

1. ntreruperea de port paralel (slave)
2. ntreruperea de conversie analog/digital
3. ntreruperea de recepie USART
4. ntreruperea de transmisie USART
5. ntreruperea de port SPI (master synchrounous serial port)
6. ntreruperea de captare/comparare/PWM
7. ntreruperea de timer
8. ntreruperea de comparare
9. ntreruperea de scriere n EEPROM/FLASH
10. ntreruperea de coliziune pe bus
11. ntreruperea de detecie a scderii tensiunii de alimentare
12. ntreruperea de CAN (Controller Area Network)


4.3. Programarea ntreruperilor MCU PIC18. Studiu de caz.

Fie circuitul din figura 4.10. n cadrul acestei scheme se regsesc un microcontroller PIC18,
un circuit timer 555 i 4 diode electroluminiscente (led). Circuitul timer 555 genereaz impulsuri cu
frecvena
C R R
f
) 2 2 1 (
44 . 1
+
= . Aceste impulsuri vor genera cereri de ntrerupere care vor fi sesizate
de ctre MCU. Pe fiecare cerere de ntrerupere MCU va incrementa un contor hexazecimal i va
afia acea valoare pe cele 4 led-uri.

Sisteme Incorporate (Embedded Systems)
89


Fig. 4.10. Schema demonstrativ de generare a unei ntreruperi externe (INT0).

Varianta programului scris n limbaj de asamblare este prezentat mai jos:


Sisteme Incorporate (Embedded Systems)
90


La tratarea unei ntreruperi de prioritate ridicat procesorul salveaz registrul PC n stiv, iar
pentru reducerea latenei de tratare a ntreruperii registrele STATUS, WREG i BSR sunt salvate
ntr-o stiv de registre denumite shadow registers (fig. 4.11).



Fig. 4.11. Salvarea registrelor STATUS, WREG i BSR la tratarea unei cereri de ntrerupere.
Instruciunea RETFIE FAST realizeaz revenirea din ntrerupere prin restaurarea PC din
stiv i extragerea registrelor STATUS, WREG i BSR din registrele shadows (fig. 4.12).



Fig. 4.12. Restaurarea registrelor STATUS, WREG i BSR la revenirea dintr-o ntrerupere cu
RETFIE FAST.


Exist cazuri n care este necesar generarea de ntreruperi la intervale constante de timp (de
ex. ntrzieri, comand de motor pas cu pas etc.) fr a utiliza un timer extern. Exemplul anterior s-
ar putea implementa cu ajutorul timer-ului 1 (timer intern MCU PIC18). Un exemplu de program
scris n limbajul C este prezentat mai jos:

Sisteme Incorporate (Embedded Systems)
91




Sisteme Incorporate (Embedded Systems)
92



5. PORTURILE PARALELE


5.1. Generaliti

Interaciunea sistemelor de calcul cu mediul exterior se face prin intermediul dispozitivelor
de intrare/ieire (I/O). Caracteristicile electrice i funcionale ale perifericelor nu permit
interconectarea direct cu microprocesorul sistemului. Interconectarea microprocesorului cu
periferia se face prin intermediul interfeelor de intrare/ieire (interface chip).
Rolul circuitelor de interfaare este de a permite sincronizarea transferurilor de date ntre
microprocesor i periferice. Un astfel de circuit reprezint o colecie de structuri electronice de
diverse tipuri:
a) registre de date;
b) registre de control;
c) registre de stare;
d) registre de direcie;
e) circuite de control.

Registrele de control permit programatorului s seteze parametrii necesari realizrii operaiei
I/O dorite. Registrele de stare furnizeaz informaii despre evoluia i starea operaiei de I/O.
Registrele de date sunt utilizate pentru memorarea datelor care vor fi trimise spre periferice sau care
sunt citite de la periferice. O structur format din pini de I/O, registre de control, de stare, de
date i de direcie formeaz un port de I/O.
Pentru a putea efectua operaii de intrare/ieire registrul de direcie asociat portului trebuie
setat corespunztor operaiei efectuate. Operaia de intrare presupune citirea datelor de ctre
microprocesor din registrul de date aferent portului specificat. Prin operaia de scriere n port,
procesorul microcontroller-ului va transfera date n registrul de date aferent portului, aceasta fiind
singura modalitate prin care datele pot fi puse la dispoziia echipamentelor/perifericelor externe.
Figura 5.1. reprezint schema bloc a unui sistem de intrare/ieire implementat n cadrul unui
sistem de calcul.


Fig. 5.1. Interconectarea blocurilor I/O cu microprocesorul.

Un singur dispozitiv (procesor sau periferic) poate accesa busul de date la un moment dat.
Implementarea unui decodificator de adrese permite prevenirea conflictelor pe bus-ul de date, prin
validarea unui singur dispozitiv care va avea acces la bus la un moment dat. Validarea unui port
Sisteme Incorporate (Embedded Systems)
93
(interfa) se face prin semnalul Chip Enable ( CE ). Circuitele invalidate sunt izolate electric de
busul de date prin intermediul porilor tristate. Transferul datelor se poate face serial (pentru
dispozitivele mai lente) sau paralel pentru dispozitivele care au o vitez mai mare de funcionare.
Rolul porturilor este de a permite sincronizarea microprocesorului cu perifericele de I/O. n
general porturile de I/O sunt integrate n microcontroller, n acelai chip cu procesorul. Atunci cnd
CPU trebuie s citeasc date de intrare provenite de la un dispozitiv, de fapt va citi datele din portul
de I/O aferent acelui periferic. Pentru a evita citirea repetat a acelorai date, este necesar
implementarea unui mecanism care s previn acest lucru (de exemplu flag-uri de stare). Atunci
cnd microprocesorul dorete s transmit date acestea vor fi nscrise n circuitul de interfaare
aferent perifericului. De obicei citirea datelor de ctre periferic este o operaie mai lent, astfel nct
exist cazuri n care procesorul ar putea scrie noile date nainte ca perifericul s recepioneze datele
anterioare (de ex. transmiterea repetat a unui octet prin intermediul interfeei seriale). Evitarea
acestor situaii se poate face prin implementarea unui mecanism de informare a procesorului despre
starea datelor transmise anterior (de ex. prin bii de stare a perifericului). Deoarece interfeele de I/O
(porturile) trebuie s opereze att cu procesorul ct i cu perifericele, ele trebuie proiectate astfel
nct s poat s se sincronizeze att cu microprocesorul, ct i cu perifericele (fig. 5.2.).


Fig.5.2. Rolul circuitelor de interfaare.

La citirea unor date provenite de la un periferic (operaia IN), microprocesorul trebuie s fie
informat c acestea nu au mai fost accesate la o citire anterioar. Uzual, pentru operaia de citire,
exist dou metode de implementare a sincronizrii dintre procesor i interfee:

1. Metoda interogrii: interfaa I/O deine n acest caz un bit de stare (flag) care indic dac
datele stocate n registrul de date sunt valide pentru microprocesor. Prin verificarea acestui
bit microprocesorul poate determina dac datele ce urmeaz a fi citite sunt valide (nu au mai
fost accesate printr-o operaie anterioar). Interogarea poate fi fcut n mod continuu, sau
din cnd n cnd, la o anumit perioad de timp. Metoda este una lent, care duce la
creterea timpului de procesare.
2. Metoda ntreruperii: prin aceast metod interfaa este capabil s genereze cereri de
ntrerupere de fiecare dat cnd recepioneaz date de la periferic. Microprocesorul
sesizeaz cererea de ntrerupere o va trata prin apelul i execuia rutinei de servire
ISR(Interrupt Service Routine), rutin care permite citirea datelor.

Sincronizarea microprocesorului cu portul I/O n cazul scrierii datelor (operaia OUT) se
face prin aceleai dou metode utilizate la citire dar, sensul de transmitere a datelor va fi dinspre
microprocesor nspre periferic:

1. Metoda interogrii: interfaa I/O deine un bit de stare (flag) care indic faptul ca datele au
fost transmise ctre periferic, iar interfaa este pregtit s primeasc date noi de la
microprocesor. Prin verificarea periodic a acestui bit microprocesorul poate determina dac
Sisteme Incorporate (Embedded Systems)
94
noile date pot fi transmise ctre interfaa perifericului. Interogarea poate fi fcut n mod
continuu, sau din cnd n cnd, la o anumit perioad de timp. Metoda este una lent, care
duce la creterea timpului de procesare.
2. Metoda ntreruperii: prin aceast metod interfaa este capabil s genereze cereri de
ntrerupere de fiecare dat cnd este pregtit s recepioneze date de la microprocesor.
Microprocesorul sesizeaz cererea de ntrerupere i va trece la tratarea ei prin execuia
rutinei de tratare ISR (Interrupt Service Routine) prin care va scrie noile date.

Porturile (interfeele) de I/O sunt responsabile de transferul datelor dinspre (input) i nspre
(output) dispozitivele periferice. Exist mai multe metode de sincronizare a transferului de date
ntre porturi i periferice:

1. Fr semnal de sincronizare: n acest caz nu vor exista semnale de sincronizare ntre
periferic i port. Portul va prelua la citire datele de la periferic i le va pune la dispoziia
microprocesorului n mod direct sub form de nivele de tensiune (cazul porturilor paralele
obinuite). n cazul operaiei de scriere datele provenite de la microprocesor vor fi puse la
dispoziia perifericului n mod direct pe pinii microcontroller-ului. Aceast metod se
utilizeaz atunci cnd timpul de transfer a datelor nu conteaz. Un exemplu ar putea fi
comanda (aprinderea/stingerea) unor LED-uri (comutarea valorii de pe un anumit pin).
2. Utilizarea unui semnal de strobe (impuls de tact). Pe parcursul operaiei de citire,
perifericul activeaz un semnal de strobe ori de cte ori datele sunt stabile pe intrare. La
scriere, portul I/O plaseaz mai nti datele pe pinii de ieire. Portul activeaz semnalul de
strobe atunci cnd datele au devenit stabile, pentru a informa perifericul c datele sunt
valide i c acestea pot fi preluate.
3. Metoda handshake. Metodele anterioare nu pot fi utilizate pentru transferul datelor ntre
porturile I/O i periferice atunci cnd timing-ul este critic. De exemplu, pentru tiprirea unui
caracter se consum mai mult timp dect pentru transmisia lui ctre imprimant. Astfel,
urmtorul caracter nu trebuie transmis ctre imprimant dac aceasta nc tiprete. O
soluie ar fi utilizarea sincronizrii prin protocolul handshake implementat ntre port i
imprimant. Exist dou protocoale de handshake: handshake cu interblocare i handshake
cu impulsuri. Indiferent de protocolul utilizat sunt necesare dou semnale de handshake: H1
generat de portul de I/O i H2 generat de periferic.

Protocolul handshake utilizat pentru citirea datelor (fig. 5.3.) const din urmtorii pai:

1. Portul I/O genereaz semnalul (sau impulsul) H1 pentru a semnaliza c dorete s
citeasc datele.
2. Perifericul plaseaz datele pe pinii de intrare ai interfeei i activeaz semnalul
(impulsul) H2.
3. La detectarea semnalului activ H2 portul I/O va memora datele, dup care va
dezactiva H1. Dezactivarea semnalului H1 de ctre port va conduce dezactivarea
semnalului H2 de ctre periferic.

Sisteme Incorporate (Embedded Systems)
95



Fig. 5.3. Citirea datelor de la periferic utiliznd:
a) handshake cu interblocare; b) handshake cu impulsuri


Protocolul handshake utilizat pentru transmisia (scrierea) datelor (fig. 5.4.) const din
urmtorii pai:

1. Interfaa I/O depune datele pe pinii de ieire i genereaz semnalul (sau impulsul) H1
pentru a semnaliza c datele sunt valide
2. Perifericul memoreaz datele i activeaz semnalul (impulsul) H2 pentru
confirmarea recepiei
3. Interfaa I/O dezactiveaz H1 la detectarea semnalului H2. Dup un anumit timp
perifericul dezactiveaz H2.

Sisteme Incorporate (Embedded Systems)
96



Fig. 5.4. Transmisia (scrierea) datelor ctre periferic utiliznd:
a) handshake cu interblocare; b) handshake cu impulsuri


5.2. Porturile MCU PIC18

Microcontroller-ele PIC18 pot avea pn la 10 porturi de intrare/ieire. Pinii afereni unui
port pot fi deseori multiplexai avnd una sau mai multe funcii (de exemplu interfa de timer,
interfa serial etc.). Dac pentru un port sau un pin s-a activat o funcie periferic alternativ,
acesta nu mai poate fi utilizat ca i pin de I/O de uz general. Pinii de I/O de uz general reprezint
cele mai simple interfee periferice. Pinii pot fi utilizai pentru monitorizarea / controlul
dispozitivelor externe.
Numrul de porturi de I/O difer n funcie de implementarea microcontroller-ului:

- PIC18 cu 18 i 20 pini au dou porturi paralele: A i B
- PIC18 cu 28 pini au trei porturi paralele: A, B i C
- PIC18 cu 40 i 44 pini dein 5 porturi paralele: A, B, C, D i E
- PIC18 cu 64 pini au 7 porturi paralele: A, B, C, D, E, F i G
- PIC18 cu 80 pini au 9 porturi paralele: A, B, C, D, E, F, G, H i J
- PIC18 cu 84 pini au 10 porturi paralele: A, B, C, D, E, F, G, H, J i K

Nu toate porturile de I/O dein acelai numr de pini. n tabelul 5.1 sunt prezentate porturile
care pot fi implementate pe un MCU PIC18 i numrul de pini afereni acestora.
Sisteme Incorporate (Embedded Systems)
97

Tabelul 5.1. Porturile MCU PIC18

Schema bloc a unui pin dintr-un port de I/O este prezentat n figura 5.5. Citirea registrului
PORT conduce la citirea strii pinilor (I/O pins), iar scrierea conduce la modificarea registrului
LAT (Data Latch).


Fig. 5.5. Implementarea unui pin din portul A al MCU PIC18.

Fiecare port de I/O din PIC18 se implementeaz pe baza a trei registre:

- Registrul de direcie (input/output) TRIS
- Registrul de date de intrare PORT
- Registrul de ieire LAT
Sisteme Incorporate (Embedded Systems)
98

Direcia datelor printr-un bit al unui port este dat de bitul aferent din registrul TRIS. Dac
bitul aferent din registrul TRIS este 1 atunci pinul din port este de intrare, iar dac este 0 atunci
pinul din port este de ieire.
Denumirea registrelor pentru fiecare port se face adugnd numele portului la tipul portului.
De exemplu, portul A este implementat prin registrele TRISA, PORTA i LATA.

5.2.1. Operaia de citire din port

Citirea valorii unui bit din port presupune citirea valorii expuse pe pinul de ieire aferent
bitului din port (I/O pin). Aceast valoare poate fi valoarea memorat n registrul Data Latch dac
pinul este setat pe output (bitul TRIS=0), sau valoarea pus la intrare de un dispozitiv extern dac
pinul este setat pe input (bitul TRIS=1).

A. Citirea valorii unui pin setat pe output

Dac pinul este setat pe output (fig. 5.6. a i b), valoarea memorat de Data Latch va fi
expus pe pin. Operaia de citire presupune activarea comenzii RD PORT (Read Port) care va
valida memorarea valorii de pe pin (n acest caz ceea ce se gsete n Data Latch) n bistabilul D
aferent i expunerea ei, prin intermediul porii tristate, pe busul de date al procesorului.


a) citirea valorii memorate 0 b) citirea valorii memorate 1

Fig. 5.6. Citirea valorii unui pin setat pe output (TRIS=0).

B. Citirea valorii unui pin setat pe input

Sisteme Incorporate (Embedded Systems)
99
Dac pinul este setat pe input (fig. 5.7.), valoarea 1 memorat n latch-ul TRIS va invalida
cele dou tranzistoare de la ieirea pinului. Operaia de citire activat de comanda RD PORT (Read
Port) va valida memorarea valorii plasate pe pin de ctre un dispozitiv extern n bistabilul D aferent
i va permite expunerea ei, prin intermediul porii tristate, pe busul de date al procesorului. n
acelai timp valoarea de pe pin va fi memorat n Data Latch prin activarea comenzii WR LAT
(WR PORTA).



Fig. 5.7. Citirea valorii unui pin setat pe input (TRIS=1).

5.3. Portul A

Pinii afereni unui port I/O pot fi implementai ca intrri trigger Schmitt (fig. 5.8) sau ieiri
line driver, open-drain sau push-pull (fig. 5.9).
Un circuit trigger Schmitt este un dispozitiv capabil s transforme un semnal analogic avnd
o anumit form de und, ntr-un semnal dreptunghiular (fig. 5.8).
Sisteme Incorporate (Embedded Systems)
100


Fig. 5.8. Circuit de tip trigger Schmitt.


Fig. 5.9. Ieiri de tip line driver, open collector i push/pull.

Ieirea de tip line driver furnizeaz valoarea Vcc (n principiu 1 logic) atunci cnd semnalul
Input este activ, i valori oscilante atunci cnd Input este inactiv. Ieirea open collector furnizeaz
valoarea Ground (n principiu 0 logic) atunci cnd semnalul Input este activ, i valori oscilante
atunci cnd Input este inactiv. Ieirea de tip push-pull este realizat prin combinarea celor dou
tipuri prezentate anterior i furnizeaz valoarea Vcc (n principiu 1 logic) atunci cnd semnalul Input
este activ i valoarea Ground (n principiu 0 logic) atunci cnd Input este inactiv.
Portul A este un port bidirecional pe 7 bii. Pinul 4 (RA4) este multiplexat putnd fi utilizat
i ca semnal de ceas (T0CKI) pentru timer-ul 0. Acest pin poate fi o intrare trigger Schmitt sau o
ieire open-drain.
Toi ceilali pini RA reprezint intrri TTL sau ieiri CMOS. Pinul RA6 poate fi utilizat doar
ca pin general de I/O. Ceilali pini sunt multiplexai i pot deveni intrri analogice pentru
convertorul analog-numeric sau pentru tensiuni de referin VREF+ i VREF-. Funciile alternative
aferente pinilor RA sunt prezentate n figura 5.10.

Sisteme Incorporate (Embedded Systems)
101

Fig.5.10. Portul A i funciile alternative aferente pinilor RA.

Funciile alternative aferente pinilor RA sunt:

- RA0/AN0 pin I/O sau intrarea analogic zero
- RA1/AN1 pin I/O sau intrarea analogic unu
- RA2/AN2 pin I/O sau intrarea analogic doi, sau tensiune de referin negativ
utilizat pentru conversia analog digital
- RA3/AN3 pin I/O sau intrarea analogic trei, sau tensiune de referin pozitiv
utilizat pentru conversia analog digital
- RA4/T0CKI pin I/O sau semnal de tact pentru intrarea timer-ului 3
- RA5/AN4/SS/LVDIN pin I/O sau intrarea analogic patru, sau selector de intrare slave
pentru portul serial sincron, sau detector de tensiune sczut.
- RA6 pin I/O

5.4. Portul B

Portul B este un port bidirecional pe 8 bii. Cei mai puin semnificativi 4 pini ai portului B
(RB3-RB0) sunt utilizai pentru sesizarea ntreruperilor externe INT3-INT0. Ceilali patru pini
(RB7-RB4) au o caracteristic de interrupt-on-change (sesizeaz cererile de ntrerupere la
schimbarea strii pinului). Sesizarea cererilor de ntrerupere se face doar dac pinii sunt setai pe
intrare (biii TRISB afereni sunt 1). La schimbarea strii unui pin RB7-RB4 se seteaz flag-ul
RBIF din registrul INTCON. Funciile alternative aferente pinilor RB sunt prezentate n figura 5.11.


Fig.5.11. Portul B i funciile alternative aferente pinilor RB.

Funciile alternative aferente pinilor RB sunt:

- RB0/INT0 pin I/O sau intrare pentru ntreruperea extern zero
Sisteme Incorporate (Embedded Systems)
102
- RB1/INT1 pin I/O sau intrare pentru ntreruperea extern unu
- RB2/INT2 pin I/O sau intrare pentru ntreruperea extern doi
- RB3/CCP2 pin I/O sau pin I/O pentru modulul CCP2 (Capture- input, Compare-
output, PWM-output) dac acesta este validat
- RB4 pin I/O sau intrare de ntrerupere extern activat la schimbarea valorii pinului
- RB5/PGM pin I/O sau intrare de ntrerupere extern activat la schimbarea valorii
pinului, sau detector de tensiune de programare sczut
- RB6/PGC pin I/O sau intrare de ntrerupere extern activat la schimbarea valorii
pinului, sau intrare pentru semnalul de tact utilizat la programarea serial a MCU
- RB7/PGD pin I/O sau intrare de ntrerupere extern activat la schimbarea valorii
pinului, sau intrare pentru datele utilizate pentru programarea serial a MCU

5.5. Portul C

Portul C este un port bidirecional pe 8 bii. Aa cum se observ din figura 5.12, portul C
este multiplexat pentru a suporta mai multe funcii periferice necesare timer-elor (RC0-RC2),
interfeelor seriale I2C i SPI (RC3-RC5) sau interfeei seriale asincrone (RC6-RC7).


Fig.5.12. Portul C i funciile alternative aferente pinilor RC.

Funciile alternative aferente pinilor RC sunt:

- RC0/T1OSO/T1CKI pin I/O sau ieire pentru oscilatorul timer-ului 1, sau semnal de
tact pentru intrarea timer-ului 1
- RC1/T1OSI/CCP2 pin I/O sau intrare pentru oscilatorul timer-ului 1, sau pin I/O
pentru modulul CCP2 (Capture- input, Compare-output, PWM-output) dac bitul
CCP2MX este validat
- RC2/CCP1 pin I/O sau pin I/O pentru modulul CCP1 (Capture- input, Compare-
output, PWM-output) dac acesta este validat
- RC3/SCK/SCL pin I/O sau semnal de tact pentru interfeele seriale SPI (SCK) i I2C
(SCL)
- RC4/SDI/SDA pin I/O sau linie de date pentru interfeele seriale SPI (SDI) i I2C
(SDA)
- RC5/SDO pin I/O sau ieire de date pentru interfaa serial sincron SSP
- RC6/TX/CK pin I/O sau linie de transmisie pentru interfaa serial asincron USART,
sau semnal de tact pentru interfaa serial sincron USART
- RC7/RX/DT pin I/O sau linie de recepie pentru interfaa serial asincron USART,
sau linie de date pentru interfaa serial sincron USART

5.6. Portul D
Sisteme Incorporate (Embedded Systems)
103

Portul D este un port bidirecional pe 8 bii. Aa cum se observ din figura 5.13 fiecare pin
din portul D poate fi configurat ca i pin general de I/O. Portul D poate fi utilizat pentru adresarea
memoriei externe (AD7-AD0) sau pentru implementarea unui port PSP (Parallel Slave Port) pe 8
bii (PSP7-PSP0).


Fig.5.13. Portul D i funciile alternative ale pinilor RD.

5.7. Porturile E i F

Porturile E i F sunt porturi bidirecionale pe 8 bii. Aa cum se observ din figura 5.14,
fiecare pin al acestor porturi poate fi multiplexat pentru a suporta diverse funcii periferice i pentru
extinderea periferiei aferente microcontroller-ului.


Fig.5.14. Porturile E i F i funciile alternative ale pinilor RE i RF.


5.8. Portul G

Portul G este un port bidirecional pe 5 bii. Funciile alternative ale acestui port sunt
utilizate pentru interfaa serial asincron 2 (RG2-RG1) i modulele CCP5, 4 i 3 (RG4, RG3,
RG0).

Sisteme Incorporate (Embedded Systems)
104

Fig.5.15. Portul G i funciile alternative ale pinilor RG.

5.9. Porturile H i J

Porturile H i J sunt porturi bidirecionale pe 8 bii. Aa cum se observ din figura 5.16
fiecare pin al acestor porturi poate fi multiplexat pentru a suporta diverse funcii periferice pentru
extinderea periferiei aferente microcontroller-ului.


Fig.5.16. Porturile H i J i funciile alternative ale pinilor RH i RJ.

5.10. Portul K

Portul K este un port bidirecional pe 4 bii. Pinii acestui port nu suport funcii alternative.
El poate fi utilizat doar ca port general de I/O.

5.11. Exemple de aplicaii de utilizare a porturilor paralele

Unele din funciile alternative ale porturilor prezentate anterior vor fi studiate n capitolele
urmtoare. Utilizarea acestor porturi ca i interfee generale de I/O permite microcontroller-ului s
conlucreze cu diverse periferice.

a) Comanda unui LED

Aplicaia care realizeaz comanda unui LED trebuie s permit setarea unui pin dintr-un
port ca pin de ieire (bitul TRIS aferent s fie 0), iar apoi valoarea memorat de acest pin s fie
setat sau resetat, dup caz. Schema de conectare a LED-ului la pin este prezentat n figura 5.17:
Sisteme Incorporate (Embedded Systems)
105

Fig. 5.17. Conectarea LED-ului la un pin de ieire al unui MCU.

O secven de cod care realizeaz aprinderea unui LED conectat la pinul RC0 ar putea fi:
.............
movlw 0xFE,A ; WREG=0b1111|1110
andwf TRISC,A ; TRISC=TRISC and WREG
; Pinul RC0 este pus pe output

movlw 0x01,A ; WREG=0b0000|0001
iorwf PORTC,A ; PORTC=PORTC or WREG
; Pinul RC0 este setat
.............

b) Interfaarea microcontroller-ului cu un afiaj BCD-7 segmente

Un afiaj BCD-7 segmente este constituit din 7 LED-uri poziionate astfel nct s permit
afiarea valorilor zecimale sau a unor litere. Dei PIC18 poate furniza un curent suficient pentru
activarea acestor module, este bine ca interfaarea s se fac prin intermediul altor circuite de I/O
care s protejeze MCU. n figura 5.18 MCU este conectat la afiajul BCD prin intermediul buffer-
ului tristate 74HC244.


Fig. 5.18. Interfaarea PIC cu un afiaj BCD-7 segmente cu catod comun.

Tensiunea de ieire din buffer este de aproximativ 5V. Prin adugarea rezistoarelor de 300
se va asigura un curent de aproximativ 10mA pentru fiecare LED, valoare suficient pentru
aprinderea acestora.
Afiarea unei cifre sau litere se face prin comanda individual a fiecrui LED prin
intermediul unui port aferent MCU, fiecare form avnd asignat o anumit valoare binar. n
tabelul 5.2 sunt reprezentate valorile binare / hexazecimale utilizate pentru afiarea cifrelor
zecimale:
Sisteme Incorporate (Embedded Systems)
106

Tabelul 5.2. Valorile binare / hexazecimale corespunztoare fiecrei cifre zecimale.

Utilizarea mai multor dispozitive BCD presupune utilizarea a nc unui port MCU pentru
selecia secvenial a acestora (fig. 5.19.). n acest caz portul D al MCU va fi utilizat pentru
transferul datelor (codul cifrei), iar portul B pentru selecia (activarea) unui circuit BCD la un
moment dat. Setarea unui pin din portul B (RB5-RB0), conduce la deschiderea tranzistorului aferent
conectat la port, ceea ce va duce la conectarea la mas a LED-urilor din componena afiajului
curent, informaia devenind vizibil pentru utilizator.


Fig. 5.19. Interfaarea PIC cu 6 afiaje BCD-7 segmente.
Secvena de cod utilizat pentru afiarea valorii 2010 ar putea fi:

.............
; initializare registre de directie TRISD si TRISB

movlw 0x80,A ; WREG=0b1000|0000
andwf TRISD,A ; TRISD=TRISD and WREG
; Pinii RD6...RD0 sunt pusi pe output

movlw 0xF0,A ; WREG=0b1111|0000
Sisteme Incorporate (Embedded Systems)
107
andwf TRISB,A ; TRISB=TRISB and WREG
; Pinii RB3...RB0 sunt pusi pe output

; initializare registre de date PORTD si PORTB

movlw 0x80,A ; WREG=0b1000|0000
andwf PORTD,A ; PORTD=PORTD and WREG
; Pinii RD6...RD0 sunt pusi pe 0

movlw 0x80,A ; WREG=0b1111|0000
andwf PORTB,A ; PORTB=PORTB and WREG
; Pinii RB3...RB0 sunt pusi pe 0

;afisare valoare 2010

Forever:

movlw 0x6D,A ; WREG=0b0110|1101
iorwf PORTD,A ; PORTD=PORTD or WREG
; Combinatia aferenta cifrei 2 a fost pusa in PORTD.
; Bitul RD7 nu este afectat!!!

movlw 0x08,A ; WREG=0b0000|1000
iorwf PORTB,A ; PORTB=PORTB or WREG
; BCD 3 a fost activat prin PORTB
; Este afectat doar bitul RB3!!!

movlw 0x7E,A ; WREG=0b0111|1110
iorwf PORTD,A ; PORTD=PORTD or WREG
; Combinatia aferenta cifrei 0 a fost pusa in PORTD.
; Bitul RD7 nu este afectat!!!

movlw 0x04,A ; WREG=0b0000|0100
iorwf PORTB,A ; PORTB=PORTB or WREG
; BCD 2 a fost activat prin PORTB
; Este afectat doar bitul RB2!!!

movlw 0x30,A ; WREG=0b0011|0000
iorwf PORTD,A ; PORTD=PORTD or WREG
; Combinatia aferenta cifrei 1 a fost pusa in PORTD.
; Bitul RD7 nu este afectat!!!

movlw 0x02,A ; WREG=0b0000|0010
iorwf PORTB,A ; PORTB=PORTB or WREG
; BCD 1 a fost activat prin PORTB
; Este afectat doar bitul RB1!!!

movlw 0x7E,A ; WREG=0b0111|1110
iorwf PORTD,A ; PORTD=PORTD or WREG
; Combinatia aferenta cifrei 0 a fost pusa in PORTD.
; Bitul RD7 nu este afectat!!!

movlw 0x01,A ; WREG=0b0000|0001
Sisteme Incorporate (Embedded Systems)
108
iorwf PORTB,A ; PORTB=PORTB or WREG
; BCD 0 a fost activat prin PORTB
; Este afectat doar bitul RB2!!!

bra Forever
.............

c) interfaarea MCU cu un afiaj cu cristale lichide (LCD)

Atunci cnd se dorete afiarea mai multor informaii simultan, modulele BCD nu mai pot fi
utilizate datorit resurselor multiple consumate. Soluia este utilizarea de afiaje LCD care au mai
multe avantaje:

- contrast bun
- consum mic de putere
- numr redus de linii de interconectare
- capacitate de a afia caractere (orice caractere din tabela de coduri ASCII) sau elemente
grafice

Schema bloc a unui afiaj LCD este prezentat n figura 5.20.



Fig. 5.20. Schema bloc a unui afiaj LCD.

Funcionarea panoului LCD este asigurat de un controller (HD44780) care interfaeaz
pinii MCU cu afiajul. Semnificaiile pinilor controller-ului LCD sunt prezentate n tabelul 5.3.

Sisteme Incorporate (Embedded Systems)
109
Tabelul.5.3. Semnificaiile pinilor controller-ului HD44780.

Pinii DB7-DB0 sunt utilizai pentru transferul datelor ntre microcontroller i controller-ul
LCD. Prin intermediul pinului E microcontroller-ul valideaz afiajul LCD. Semnalul W R/
determin sensul transferului datelor ntre cele dou echipamente. Prin semnalul RS se selecteaz
registrul afiajului care va fi accesat (RS = 1 registrul de date, RS = 0 registrul de instruciuni).
Comanda afiajului se face de ctre programator prin gestiunea pinilor reprezentai mai sus.
Controller-ul HD44780 suport mai multe instruciuni prin care programatorul obine efectul dorit
pe LCD (Tabelul 5.4.).


Tabelul.5.4. Instruciunile aferente controller-ului HD44780.

Afiajul LCD deine o memorie RAM (DDRAM) care memoreaz datele sub forma de
coduri pe 8 bii (cod ASCII). Capacitatea acestei memorii este de 808 bii, adic 80 de caractere.
Maparea celulelor de pe display n memoria DDRAM a panoului LCD este prezentat n tabelul
5.5.


Tabelul.5.5. Maparea celulelor de pe display n memoria RAM.

Sisteme Incorporate (Embedded Systems)
110
Pentru generarea formelor aferente caracterelor afiate pe LCD se utilizeaz un generator de
caractere care se bazeaz pe o memorie ROM. Pe baza codului ASCII acest generator poate genera
caractere de 58 sau 510 pixeli. Memoria ROM conine 208 forme de caractere de 58 pixeli i 32
de 510 pixeli.
Controller-ul HD44780 deine dou registre: un registru de instruciuni (IR) i un registru de
date (DR). Registrul de instruciuni memoreaz codul instruciunii (de ex. tergere ecran, mutare
cursor etc.) i adresa informaiei din memoria RAM. Aceste instruciuni sunt scrise de ctre MCU
pentru setarea operaiilor pe LCD. Datele pot fi nscrise n RAM prin intermediul registrului de date
DR. Datele scrise n DR vor fi automat copiate n RAM prin operaii interne. De asemenea, registrul
DR poate fi utilizat pentru citirea informaiilor din RAM. Registrele IR i DR pot fi gestionate de
ctre microcontroller prin intermediul semnalelor RS i W R/ (tabelul 5.6).


Tabelul 5.6. Gestiunea IR i DR prin intermediul semnalelor RS i W R/ .

Interfaarea MCU cu controller-ul HD44780 se poate face prin intermediul a 8 sau 4 bii de
date (fig. 5.21, fig. 5.22), n funcie de modul de lucru selectat.


Fig. 5.21. Interfaarea MCU cu controller-ul HD44780 prin intermediul a 8 bii de date.


Fig. 5.22. Interfaarea MCU cu controller-ul HD44780 prin intermediul a 4 bii de date.
Sisteme Incorporate (Embedded Systems)
111


5.12. Portul slave paralel PSP (Parallel Slave Port)

Portul D al microcontroller-elor PIC18 poate fi configurat ca un port paralel slave (PSP),
numit deseori port microprocesor. Configurarea se face prin setarea bitului PSPMODE al registrului
TRISE sau PSPCON, n funcie de tipul MCU. Configurarea acestui port pe un microcontroller
slave permite altor microprocesoare sau microcontroller-e efectuarea de operaii de citire/scriere a
datelor din/n acest port.

Pentru controlul accesului la datele din PSP (PORTD) se utilizeaz 3 pini din portul E:

- RD RE / 0 pentru controlul semnalului de citire
- RW RE / 1 pentru controlul semnalului de scriere
- CS RE / 2 pentru controlul semnalului de selecie a circuitului

Aceti pini trebuie configurai ca i intrri n MCU astfel:

- Cei mai puini semnificativi trei bii ai lui TRISE trebuie s fie setai
- Cei mai puini semnificativi trei bii ai lui ADCON1 trebuie s fie setai
- Bitul PSPMODE din PSPCON sau TRISE trebuie setat pentru a permite portului E s
gestioneze semnalele de control

Structura registrului PSPCON (TRISE n alte cazuri) este prezentat n figura 5.23.



Fig. 5.23. Structura registrului PSPCON.

Diagramele semnalelor utilizate pentru operaia de scriere n portul PSP sunt prezentate n
figura 5.24. n aceast figur se regsesc cele 4 semnale de tact Q1, Q2, Q3, Q4 care corespund
ciclului unei instruciuni PIC18. Scrierea n PSP survine atunci cnd ambele semnale CS i WR
sunt detectate n zero. Operaia de scriere se efectueaz pe dou cicluri de instruciune. Atunci cnd
fie CS , fie WR devin 1 logic, flag-ul de stare IBF (Input Buffer Full) este setat. Flag-ul de stare a
ntreruperii de PSP (PSPIF din registrul PIR1) va fi de asemenea setat. Flag-ul IBOV (Input Buffer
Overflow) este setat dac o alt operaie de scriere ncearc s acceseze portul PSP nainte ca MCU
s citeasc datele scrise anterior.
Sisteme Incorporate (Embedded Systems)
112


Fig. 5.24. Diagramele semnalelor utilizate pentru operaia de scriere n portul PSP.

Diagramele semnalelor utilizate pentru operaia de citire din PSP sunt prezentate n figura
5.25. Citirea din PSP se face prin dezactivarea semnalelor CS i WR. Citirea dureaz dou cicluri
de instruciune. Flag-ul OBF (Output Buffer Full) este ters imediat dup activarea semnalului de
citire (activ n zero), indicnd faptul c portul D (PORTD) a fost pus pe busul extern. Dac CS sau
RD au devenit 1 logic, flag-ul PSPIF este setat pentru a marca ncheierea operaiei de citire.


Fig. 5.25. Diagramele semnalelor utilizate pentru operaia de citire din portul PSP.

Sistemele ncorporate au nevoie de dispozitive de I/O pentru a putea transfera date n/din
exterior. Aceste dispozitive pot fi comutatoare, tastaturi, LED-uri, afiaje BCD sau LCD,
Sisteme Incorporate (Embedded Systems)
113
imprimante, convertoare A/D sau D/A, scanner-e de coduri etc. Datorit incompatibilitilor
electrice i de vitez de procesare aceste dispozitive nu pot fi conectate direct la procesorul MCU.
Interfeele de I/O integrate n MCU realizeaz sincronizarea i adaptarea n procesul de transfer al
datelor ntre MCU i dispozitivele periferice.
Sisteme Incorporate (Embedded Systems)
114


6. BLOCUL DE TIMER-E. GESTIUNEA TIMPULUI N
MICROCONTROLLER-ELE PIC18


Gestiunea timpului n cadrul sistemelor digitale se realizeaz prin intermediul timer-elor.
Timer-ul este un dispozitiv electronic care gestioneaz un contor (o valoare numeric) pe baza unui
semnal de tact.
Timer-ele sunt utilizate n aplicaii pentru generarea periodic de cereri de ntrerupere,
msurarea impulsului i a perioadei aferente unui semnal, msurarea frecvenei i a factorului de
umplere a unui semnal, generarea de semnale de o anumit frecven sau un anumit factor de
umplere, contorizarea evenimentelor etc.
Microcontroller-ele PIC18 dein 4 sau 5 blocuri de timer: Timer0 (16 bii), Timer1 (16 bii),
Timer2 (8 bii), Timer3 (16 bii) i Timer4 (8 bii). Un timer genereaz o cerere de ntrerupere de
fiecare dat cnd valoarea incrementat comut din 0xFFFF n 0x0000 (sau din 0xFF n 0x00).
Semnalul de tact care este numrat de timer poate fi generat din semnalul utilizat n sincronizarea
ciclului instruciunii (f
CPU
) sau poate fi un semnal din exterior provenit de la un periferic.
Un alt modul care poate fi utilizat pentru gestiunea timpului mpreun cu timer-ele este
modulul CCP (Capture, Compare, PWM Pulse Width Modulation). Controller-ele PIC 18 dein
ntre unu i cinci module CCP. Cele trei moduri de funcionare ale modulelor CCP utilizeaz
aceleai registre i pini de I/O, astfel nct un singur mod poate fi activat pe acel timer la un moment
dat.
Atunci cnd un modul CCP este configurat pentru modul de captare, el poate fi programat s
copieze coninutul unui timer ntr-un registru de captare pe fiecare front cresctor sau descresctor,
la fiecare patru fronturi cresctoare sau la fiecare 16 fronturi cresctoare. Acest mod de funcionare
poate fi utilizat pentru a msura limea impulsului, perioada, factorul de umplere sau frecvena
unui semnal. Modul de captare poate fi utilizat i pentru referine temporale.
n modul de comparare, modulul CCP compar pe fiecare tact coninutul unui registru pe 16
bii (CCPR1...CCPR5) cu registrul unui timer (uzual Timer1 sau Timer3). Dac valorile celor dou
registre coincid, modulul CCP va putea s basculeze valoarea de pe pinul asociat blocului. n acest
mod se pot crea ntrzieri de timp, se pot genera impulsuri sau semnale periodice.
Activarea modului de funcionare PWM determin CCP s genereze semnale cu o anumit
frecven i un anumit factor de umplere (duty cycle). Acest semnal poate fi utilizat pentru comanda
motoarelor de c.c., luminilor dinamice etc.


6.1. Blocul de Timer 0

Timer-ul 0 poate fi configurat ca un timer sau un contor pe 8 sau 16 bii. Utilizatorul poate
selecta ca surs a semnalului contorizat fie semnalul de tact intern (bazat pe f
CPU
), fie un semnal
extern aplicat pe intrarea T0CKI. nainte de a fi aplicat pe intrarea de numrare, semnalul de tact
poate fi divizat cu un factor de prescalare. Schema bloc a timer-ului 0 este prezentat n figura 6.1.
(a i b).
Sisteme Incorporate (Embedded Systems)
115

a)



a) configuraie pe 8 bii; b) configuraie pe 16 bii.

Fig.6.1. Schema bloc a timer-ului 0.

Cele dou configuraii pot fi setate i controlate prin intermediul registrului T0CON.
Structura registrului T0CON este redat n figura de mai jos.



Semnificaiile pinilor sunt:



Sisteme Incorporate (Embedded Systems)
116


Timer-ul 0 suport dou moduri de funcionare:
- timer propriu-zis
- numrtor

Modul timer este activat atunci cnd sursa semnalului numrat este semnalul de tact intern.
Modul numrtor este activat atunci cnd sursa semnalului de numrat este un semnal extern prin
pinul T0CKI. Selecia sursei de semnal se face prin intermediul bitului TOCS (bitul 5 din T0CON).
n modul numrtor incrementarea valorilor registrelor TMR0L i TMR0 high byte se poate face fie
pe frontul cresctor, fie pe frontul cztor al semnalului de pe pinul T0CKI. Selecia se face prin
intermediul bitului T0SE (bitul 4 din T0CON). Registrul TMR0H reprezint un buffer ntre
registrul TMR0 high byte i busul intern. Atunci cnd MCU citete registrul TMR0L, valoarea din
TMR0 high byte este transferat n TMR0H. Citirea octetului superior a valorii pe 16 bii se va face
din registrul TMR0H. Acest mod de funcionare se datoreaz faptului c microcontroller-ul este pe
8 bii, iar pentru a citi valoarea timer-ului sunt necesare dou accese (low byte i high byte). La
citirea octetului inferior (TMR0L) se va transfera octetul superior din TMR0 high byte n TMR0H,
astfel nct valoarea total s nu fie alterat de incrementri intermediare care pot apare pe durata
citirii.
S presupunem c timer-ul 0 nu deine registrul TMR0 high byte ci doar buffer-ul TMR0H,
iar valoarea contorizat este 0x35FE. Citirea valorii pe 16 bii se poate realiza prin execuia
urmtoarei secvene de instruciuni:

movff TMR0L, PRODL
movff TMR0H, PRODH

Instruciunea movff se execut n dou cicluri de tact. La execuia celei de-a doua
instruciuni, valoarea contorizat de Timer0 devine 0x3600. Rezult c n urma citirii valoarea va fi
0x36FE (PRODH=0x36 iar PRODL=0xFE) ceea ce duce la un comportament anormal al aplicaiei.
Prin utilizarea registrelor TMR0H i TMR0 high byte valoarea citit va fi cea corect, deoarece
citirea TMR0L va determina copierea simultan a registrului TMR0 high byte n TMR0H.


6.2. Blocul de Timer 1
Sisteme Incorporate (Embedded Systems)
117

Timer-ul 1 poate funciona ca i timer propriu-zis, sau ca un contor n funcie de sursa de
semnal selectat. Valoarea pe 16 bii se afl n registrele TMR1H i TMR1L. Aceste registre pot fi
citite sau scrise prin dou operaii pe 8 bii, sau o operaie pe 16 bii. Timer-ul 1 genereaz o cerere
de ntrerupere atunci cnd valoarea contorizat trece din 0xFFFF n 0x0000. Timer-ul 1 poate fi
resetat atunci cnd un modul CCP este configurat n modul comparare pentru a genera un semnal de
activare a unui anumit eveniment (de ex. o nou conversie analog/numeric). Schema bloc a timer-
ului 1 este prezentat n figura 6.2.



Fig. 6.2. Schema bloc a timer-ului 1.

Funcionarea timer-ului 1 este controlat prin intermediul registrului T1CON. Structura
acestui registru este prezentat n figura de mai jos.



Semnificaiile pinilor sunt:


Sisteme Incorporate (Embedded Systems)
118


Timer-ul 1 poate funciona n trei moduri:

- timer
- numrtor sincron
- numrtor asincron

Modul de operare se selecteaz prin intermediul bitului TMR1CS (bitul 1 din T1CON) Dac
TMR1CS este 0, timer-ul 1 va incrementa pe fiecare ciclu de instruciune. Dac TMR1CS=1, timer-
ul va incrementa pe fiecare front cresctor al semnalului extern sau al oscilatorului intern dac
acesta este activat (T1OSCEN=1). Atunci cnd oscilatorul intern al timer-ului 1 este validat, pinii
RC1/T1OSI i RC0/T1OSO/T1CKI sunt automat setai ca intrri, iar valorile biilor 1 i 0 din
TRISC sunt ignorate.
Timer-ul 1 deine o intrare de RESET intern. Prin intermediul acestui semnal un bloc CCP
poate reseta timer-ul 1.


6.3. Blocul de Timer 2

Blocul de timer 2 deine un timer pe 8 bii (TMR2) i un registru de perioad pe 8 bii
(PR2). Ambele registre permit acces la citire/scriere.
Timer-ul 2 incrementeaz un contor de la 0x00 pn cnd acesta ajunge la valoarea stocat
n registrul PR2, iar apoi readuce contorul la 0x00. Registrul PR2 este iniializat cu 0xFF dup
RESET. Semnalul de numrat se obine din semnalul intern (Fosc/4 - 4 tacte pe fiecare ciclu
de tact) divizat cu un factor de prescalare programabil (fig. 6.3.).
La fiecare egalitate detectat ntre TMR2 i PR2, se va genera un semnal EQ care va reseta
registrul TMR2. Acest semnal EQ va fi divizat cu un factor de postscalare programabil i va
permite generarea de cereri de ntrerupere. Ieirea timer-ului 2 poate fi utilizat pentru alimentarea
interfeei seriale sincrone (SPI i I2C) pentru generarea semnalului de tact.
Valorile de prescalare i postscalare pot fi resetate la apariia urmtoarelor evenimente:
- scrierea registrului TMR2
- scrierea registrului T2CON
- la apariia unui RESET (Power-On Reset, MCLR Reset, Watchdog Timer Reset sau
Brown-out Reset)
Sisteme Incorporate (Embedded Systems)
119



Fig. 6.3. Schema bloc a timer-ului 2.

Controlul funcionrii timer-ului 2 se face prin intermediul registrului T2CON. Structura
acestui registru este prezentat n continuare:



Semnificaiile pinilor sunt:



Timer-ul 2 poate fi utilizat i pentru generarea de cereri periodice de ntrerupere. S
presupunem c dorim s generm cereri de ntrerupere o dat la 8 ms, n condiiile n care avem
Fosc=32MHz i factorii de prescalare i postscalare setai la valoarea 16. Pentru aceasta trebuie s
calculm valoarea numeric a registrului PR2. Aceasta va fi:

Sisteme Incorporate (Embedded Systems)
120
1 ) 4 ( ) ( 2 = stscalare factordepo escalare factordepr Fosc s perioada PR

Rezult:
( ) ( ) 249 1 16 16 4 10 32 10 8 2
6 3
= =

PR


6.4. Blocul de Timer 3

Timer-ul 3 (fig. 6.4.) are o structur aproape identic cu cea a timer-ului 1. Timer-ul 3 deine
un registru timer/contor pe 16 bii divizat n dou registre pe 8 bii TMR3H/TMR3L. Timer-ul
genereaz cereri de ntrerupere la bascularea valorii din 0xFFFF n 0x0000. Ca i n cazul timer-ului
1 acest bloc de timer poate fi resetat de un modul CCP.



Fig. 6.4. Schema bloc a timer-ului 3.

Controlul operaiilor efectuate de timer-ul 3 se face prin intermediul registrului T3CON care
este diferit ca structur de T1CON:



Semnificaiile biilor sunt n acest caz urmtoarele:


Sisteme Incorporate (Embedded Systems)
121


Spre deosebire de timer-ul 1, timer-ul 3 poate fi configurat pentru a deveni o surs de
semnal de tact pentru modulele CCP (T3CCP2:T3CCP1/biii 6-3 din T3CON).


6.5. Blocul de Timer 4

Timer-ul 4 este disponibil doar n variantele de PIC18F8x20 i PIC18F6x20. Acesta este
implementat ca un timer/registru de perioad pe 8 bii (fig. 6.5.).
Ieirea timer-ului 4 este utilizat pentru modul PWM al blocului CCP. Coninutul registrului
T4CON este identic cu cel al registrului T2CON. Structura registrului T4CON este prezentat n
figura de mai jos:



Sisteme Incorporate (Embedded Systems)
122


Timer-ul 4 incrementeaz o valoare atta timp ct aceasta difer de valoarea din registrul
PR4. n momentul n care se detecteaz egalitate la compararea celor dou valori, registrul TMR4
este resetat, iar timer-ul va genera o cerere de ntrerupere prin intermediul unui bloc de postscalare.
Valorile de prescalare i postscalare pot fi resetate la apariia urmtoarelor evenimente:
- scrierea registrului TMR4
- scrierea registrului T4CON
- la apariia unui RESET (Power-On Reset, MCLR Reset, Watchdog Timer Reset sau
Brown-out Reset)



Fig. 6.5. Schema bloc a timer-ului 4.


Sisteme Incorporate (Embedded Systems)
123



7. MODULELE CCP (CAPTURE/COMPARE/PWM)


Microcontroller-ele PIC18 pot deine unul, dou sau cinci module de
Captare/Comparare/PWM. Un modul CCP deine un registru de captare pe 16 bii, un registru de
comparare pe 16 bii i un registru PWM.
Modulele CCP utilizeaz resursele hardware ale timer-elor. n modurile de captare i
comparare CCP utilizeaz resursele timer-elor 1 sau 3. n modul PWM, CCP utilizeaz resursele
timer-elor 2 sau 4.
Configurarea modulelor CCP se face prin intermediul registrelor CCPxCON (x=1...5).
Structura acestor registre este prezentate n figura 7.1.


Fig.7.1. Structura registrelor CCPxCON (x=1...5).



Sisteme Incorporate (Embedded Systems)
124
Fiecare modul CCP existent n cadrul MCU deine un astfel de registru de configurare,
precum i un registru de date denumit CCPRx (x=1...5). Registrul de date este mprit la rndul su
n registrele CCPRxH i CCPRxL.
Indiferent de numrul de module CCP existente n MCU, acestea utilizeaz resursele
hardware oferite de timer-ele sistemului.
Timer-erele 1 i 3 sunt utilizate pentru modurile captare i comparare, n timp ce pentru
modul PWM se utilizeaz timer-ele 2 i 4.
Asignarea unui anumit timer pentru un modul CCP se face prin setarea biilor T3CCPx
(x=1,2) afereni registrului T3CON. n funcie de starea acestor bii putem selecta 4 configuraii
diferite care partajeaz resursele hardware (fig. 7.2.).



Fig. 7.2. Interconectarea blocurilor CCP cu timer-ele sistemului.

T3CCP2:T3CCP1 = 00
Timer-ul 1 este utilizat pentru toate operaiile de captare i comparare. Timer-ul 2 este
utilizat pentru modul de funcionare PWM aferent modulelor CCP. n aceast configuraie timer-ele
3 i 4 nu sunt utilizate.

T3CCP2:T3CCP1 = 01
Timer-ele 1 i 2 sunt utilizate pentru operaiile captare, comparare sau PWM aferente
modulului CCP1. Celelalte module CCPx (x=2...5) utilizeaz resursele timer-elor 3 i 4.

T3CCP2:T3CCP1 = 10
Timer-ele 1 i 2 sunt utilizate pentru modulele CCP1 sau CCP2. Ambele module CCP pot
utiliza resursele aceluiai timer dac ele funcioneaz n acelai mod CCP. Celelalte module CCPx
(x=3...5) utilizeaz timer-ele 3 sau 4.

T3CCP2:T3CCP1 = 10
Timer-ul 3 este utilizat pentru toate operaiile de captare i comparare. Timer-ul 4 este
utilizat pentru modul de funcionare PWM aferent modulelor CCP. n aceast configuraie timer-ele
1 i 2 nu sunt utilizate.






7.1. Configurarea modului de captare aferent unui modul CCP
Sisteme Incorporate (Embedded Systems)
125

La apariia unui eveniment pe pinul CCPx, registrele CCPRxH:CCPRxL capteaz valoarea
pe 16 bii aferent registrelor timer-elor 1 sau 3. Un eveniment poate fi reprezentat de:
- fiecare front cztor
- fiecare front cresctor
- fiecare al patrulea front cresctor
- fiecare al aisprezecelea front cresctor

Evenimentele monitorizate pot fi selectate prin intermediul biilor CCPxM3:CCPxM0 (biii
3...0 din registrul de control CCPxCON)
La efectuarea unei captri se seteaz prin hardware flag-ul aferent CCPxIF. Acest flag
trebuie resetat de ctre software. Registrul CCPRx este suprascris atunci cnd se capteaz o nou
valoare, chiar dac vechea valoare nu a fost nc citit.
n acest mod pinii CCPx trebuie configurai pe input. Timer-ele utilizate de acest mod
trebuie setate n modul timer sau numrtor sincron. Captarea nu funcioneaz dac timer-ul utilizat
este setat ca un numrtor asincron. Structura modulului CCP1 care funcioneaz n modul captare
este prezentat n figura 7.3.


Fig. 7.3. Structura modulului CCP1 n modul de captare.

Modul de captare aferent modulelor CCP este utilizat n general n aplicaii de msur a
unor valori.
1. nregistrarea (memorarea) timpului de sosire. Unele aplicaii trebuie s contorizeze timpii de
sosire/activare afereni anumitor evenimente. Numrul evenimentelor gestionate este limitat
de numrul de canale de captare existente.
2. Msurarea perioadei unui semnal. Pentru msurarea perioadei unui semnal, modulul CCP
trebuie s fie configurat pentru captarea de la timer a valorilor aferente a dou fronturi
cresctoare/cztoare consecutive (fig. 7.4.). Diferena dintre cele dou valori conduce la
aflarea perioadei semnalului monitorizat.

Sisteme Incorporate (Embedded Systems)
126


Fig. 7.4. Msurarea perioadei prin captarea valorilor aferente a dou fronturi cresctoare/cztoare
consecutive.

3. Msurarea limii unui impuls. Pentru aceast operaie se capteaz valorile aferente a dou
fronturi consecutive (fig. 7.5.).



Fig. 7.5. Msurarea duratei unui impuls ntre dou fronturi consecutive.

4. Generarea de cereri de ntrerupere. Intrrile captate pot folosi ca surse de ntrerupere
senzitive la front. Dup validare, ntreruperile vor fi generate pe frontul selectat.
5. Contorizare de evenimente. Un eveniment n acest caz este reprezentat de apariia unui front
al unui semnal. Pentru contorizare se poate utiliza un canal CCP configurat n modul de
captare, n conjuncie cu un alt canal CCP configurat n modul comparare, sau un timer.
Aplicaia este similar cu utilizarea unui timer n mod numrtor.
6. Referin de timp. n acest mod se utilizeaz dou canale CCP, unul configurat n mod de
captare, cellalt configurat n mod de comparare. Dac programatorul dorete s activeze un
semnal dup cteva cicluri de tact la detecia unui eveniment, poate utiliza canalul CCP de
captare pentru a nregistra timpul la care s-a activat evenimentul. La aceast valoare captat
se va aduga numrul de cicli de ntrziere, iar rezultatul se va depune n registrul CCPRx
aferent modulului CCP configurat pentru comparare (fig. 7.6.).

Sisteme Incorporate (Embedded Systems)
127

Fig. 7.6. Activarea unui semnal la apariia unui eveniment.

7. Msurarea factorului de umplere a unui semnal. Factorul de umplere este definit ca fiind
procentajul de timp n care semnalul este pe 1 logic din totalul de timp al unei perioade
aferente unui semnal periodic (fig. 7.7.).



Fig. 7.7. Definirea factorului de umplere.


7.2. Configurarea modului de comparare aferent unui modul CCP

n acest mod valoarea unui anumit registru CCPRx (16 bii) se compar cu valoarea
registrelor aferente timer-ului 1 sau timer-ului 3. La detecia unei egaliti pinul aferent CCPx poate
fi setat, resetat, basculat (toggle) sau nealterat, n funcie de tipul aplicaiei. Specificarea aciunii
efectuate asupra pinului CCPx se face prin setarea biilor CCPxM3...CCPxM0 din registrul
CCPxCON. Schema bloc a modulului CCP utilizat pentru comparare este prezentat n figura 7.8.
Uzual, programarea blocului CCP pentru comparare const din urmtorii pai:

- Copierea valorii stocate ntr-unul din timer-ele 1 sau 3 (TMRxH:TMRxL)
- Adugarea unei valori de ntrziere y
- Stocarea sumei n perechea de registre CCPRxH:CCPRxL

Dup un timp corespunztor valorii y, valorile din registrele de timer i cele din registrele
CCPRx vor fi egale, acest fapt conducnd la generarea unei cereri de ntrerupere i la setarea
corespunztoare a flag-ului de ntrerupere CCPxIF.
Pinii CCPx trebuie configurai ca i pini de ieire, iar timer-ele utilizate n comparare trebuie
s funcioneze n mod timer sau numrtor sincron. Ieirile CCPx pot declana un eveniment special
(Special Event Trigger) prin care registrele aferente timer-ului utilizat sunt resetate. n acest mod
registrul CCPR1 devine un registru de perioad pentru timer-ul utilizat. Evenimentul special aferent
ieirii CCP2 va declana conversia analog/digital pentru un modul A/D validat.
Modul de comparare poate fi utilizat pentru diverse task-uri: generarea unui singur impuls
sau a unui tren de impulsuri, generarea unui semnal periodic cu un anumit factor de umplere sau
realizarea unei ntrzieri cu o anumit perioad.
Sisteme Incorporate (Embedded Systems)
128


Fig. 7.8. Configuraia modului de comparare al unui bloc CCP.

Exemplu: generarea unui semnal periodic cu factor de umplere de 40% i o frecven de
1KHz, presupunnd c frecvena semnalului de tact pentru ciclul unei instruciuni este de 4MHz.

Semnalul generat este prezentat n figura 7.9. Perioada acestui semnal este de
ms
KHz
1 10
10
1
1
1
3
3
= = =

. Rezult c limea impulsului va fi de 400 s, iar limea golului de
600s. Frecvena semnalului de tact pentru ciclul unei instruciuni (instruction cycle) este de 4MHz
care reprezint frecvena de funcionare a timer-ului utilizat de aplicaie (factor de prescalare 1).
Perioada acestui semnal este 1/4MHz. De aici rezult c semnalul este 1 logic pe un numr de 1600
de cicli de tact
|
|
.
|

\
|
= =

1600
25 . 0
400
10 25 . 0
10 400
4 / 1
400
6
6
s
s
MHz
s
i pe 0 logic pe un numr de 2400 de cicli
de tact
|
|
.
|

\
|
= =

2400
25 . 0
600
10 25 . 0
10 600
4 / 1
600
6
6
s
s
MHz
s
.


Fig. 7.9. Semnalul generat de modulul CCP.

Programul care realizeaz acest semnal poate fi:

#include<p18F8720.h>
void main()
{
Sisteme Incorporate (Embedded Systems)
129
TRISCbits.TRISC2=0; //configurare pin CCP1 (RC2) pe OUT
T3CON=0xC9; //startare Timer3 cu factor de prescalare 1
CCP1CON=0X09; //setare mod comparare si configurare pin CCP1
//pe 1 logic (activ)
CCPR1=TMR3+0x640; //specificare delay de 1600 (0x640)
PIR1bits.CCP1IF=0; //resetare flag CCP1IF

while(1)
{
while(!(PIR1bits.CCP1IF)); //interogare flag CCP1IF
PIR1bits.CCP1IF=0; //daca flag-ul a fost setat (TMR3=CCPR1)
CCP1CON=0x08; //setare mod comparare si configurare pin CCP1
//pe 0 logic (inactiv)
CCPR1+=0x960; //specificare delay de 2400 (0x960)
while(!(PIR1bits.CCP1IF)); //interogare flag CCP1IF
PIR1bits.CCP1IF=0; //daca flag-ul a fost setat (TMR3=CCPR1)
CCP1CON=0X09; //setare mod comparare si configurare pin CCP1
//pe 1 logic (activ)
CCPR1+=0x640; //specificare delay de 1600 (0x640)
}
}


Fig. 7.10. Organigrama programului prezentat anterior.

Organigrama programului este prezentat n figura 7.10. n primul pas algoritmul activeaz
ieirea CCP1 genernd frontul pozitiv al primului impuls de tact (CCP1CON=0x09). Totodat
modulul CCP este configurat astfel nct pinul CCP1 va bascula la apariia unei egaliti. Registrul
de comparare CCPR1 va fi ncrcat cu suma dintre valoarea registrelor timer-ului 3 i 0x0640
(
16 10
640 1600 = ). Se reseteaz flag-ul. Se ateapt ntr-o bucl setarea flag-ului de ntrerupere
Sisteme Incorporate (Embedded Systems)
130
CCP1IF (de remarcat c aplicaia nu utilizeaz rutine de tratare a ntreruperii, ci doar interogheaz
flag-ul CCP1IF!!!). La apariia acestui eveniment impulsul cu durata de 400 s a fost creat, ieirea
CCP1 este basculat de ctre hardware, iar programul continu n mod similar pentru generarea
golului de 600 s.


7.2. Configurarea modului PWM aferent unui modul CCP

Modul PWM (Pulse Width Modulation) permite generarea unui semnal periodic digital cu o
rezoluie de 10 bii. Valoarea pe 10 bii permite specificarea perioadei semnalului precum i a
factorului de umplere (duty cycle). Spre exemplu, valoarea 767 pe 10 bii specific un factor de
umplere de 75% (1024*0,75-1). Pinul CCPx trebuie setat ca ieire pentru modul PWM. Schema
bloc simplificat a modului PWM este prezentat n figura 7.11.



Fig. 7.11. Schema bloc a modulului PWM.

Valoarea pe 10 bii care specific factorul de umplere este stocat astfel: cei mai
semnificativi 8 bii (9...2) sunt memorai n registrul CCPRxL, iar cei mai puin semnificativ doi bii
(1..0) sunt memorai pe biii 5 i 4 ai registrului CCPxCON. Pe fiecare ciclu de instruciune aceast
valoare este comparat cu valoarea stocat n registrul timer-ului utilizat (timer 2 sau timer 4). Cnd
aceste valori devin egale, pin CCPx este resetat. Valoarea timer-ului este de asemenea comparat pe
fiecare ciclu cu valoarea din registrul PR (Period Register). n caz de egalitate, se declaneaz
urmtoarele evenimente:

- Pinul CCPx este setat (excepie: factor de umplere = 0)
- Registrul aferent timer-ului este resetat
- Valoarea CCPxL este transferat n CCPxH (noul factor de umplere)

Perioada semnalului PWM se poate calcula utiliznd urmtoarea formul:

( ) prescalare de factor T PRy PWM Perioada
OSC
+ = 4 1
Sisteme Incorporate (Embedded Systems)
131

Factorul de umplere aferent semnalului PWM se poate calcula utiliznd urmtoarea formul:

( ) prescalare de factor T CCPxCON CCPRxL PWM umplere de Factor
OSC
> < = 4 : 5 :

Pentru configurarea modulului PWM trebuie parcuri urmtorii pai:

- Setarea perioadei semnalului prin scrierea registrului PRy (y=2 sau 4)
- Setarea factorului de umplere prin scrierea registrelor CCPRxL i CCPxCON<5:4>
- Punerea pinului CCPx pe output
- Setarea factorului de prescalare pentru timer-ul y prin scrierea registrului TyCON
- Configurarea modului CCPx pentru operare n mod PWM (CCPxCON)

Comanda motoarelor de curent continuu (DC motors), comanda intensitii luminoase a unui
bec i n general proiectele n care sunt necesare tensiuni variabile ntr-o anumit plaj, sunt
aplicaii specifice modului PWM (fig. 7.12).





Fig. 7.12. Aplicaii specifice modului PWM al blocului CCP.
Sisteme Incorporate (Embedded Systems)
132



8. INTERFAA SERIAL ASINCRON I SINCRON


Interfaa serial USART (Universal Synchronous Asynchronous Receiver Transmitter)
suport dou moduri de comunicaie serial: asincron i sincron. Microcontroller-ele PIC18 dein
dou interfee USART identice i independente. Pinii afereni celor dou interfee sunt mapai pe
pinii portului C i G. Modulele USART pot funciona n trei moduri diferite:
- Asincron (full duplex)
- Sincron - master (half duplex)
- Sincron slave (half duplex)

Controlul transferului serial se face prin intermediul a cinci registre dedicate:
- Registrul de stare a transmisiei (TXSTA - Transmit Status Register)
- Registrul de stare a recepiei (RCSTA - Receive Status Register)
- Registrul de generare a ratei de transfer (Baud Rate Generate Register - SPBRG)
- Registrul de transmisie (Transmit Register - TXREG)
- Registrul de recepie (Receive Register - RCREG)

Registrul de stare a transmisiei TXSTA are rolul de a realiza:
- Validarea/invalidarea transmisiei
- Selecia transmisiei pe 8 sau 9 bii
- Selecia modului de transmisie (sincron sau asincron)

Structura registrului TXSTA este prezentat n figura de mai jos.
Sisteme Incorporate (Embedded Systems)
133


Registrul de stare a recepiei RCSTA are rolul de a realiza:
- Validarea/invalidarea modulului USART
- Selecia recepiei pe 8 sau 9 bii
- Selecia modului de recepie (sincron sau asincron)

Structura registrului RCSTA este prezentat n figura de mai jos.

Sisteme Incorporate (Embedded Systems)
134


Calculul valorii coninute de registrul SPBRG pentru o anumit rat de transfer se face pe
baza formulelor de mai jos:




Sisteme Incorporate (Embedded Systems)
135
8.1. Modul asincron de funcionare a interfeei USART

n acest mod, interfaa utilizeaz datele transmise/recepionate n formatul: un bit de start, 8
sau 9 bii de date i unul sau doi bii de stop. Cel mai puin semnificativ bit este transmis/recepionat
primul (fig. 8.1.). Sistemele care comunic pe interfaa seriala asincron sunt total independente dar
trebuie s utilizeze acelai format al datelor i aceeai vitez de transfer pentru comunicare.


Fig. 8.1. Formatul datelor pe interfaa serial asincron.


Schema bloc a interfeei USART pentru transmisie este prezentat n figura 8.2.



Fig. 8.2. Schema bloc a interfeei USART n modul de transmisie.

Transmiterea unui caracter se face prin nscrierea codului ASCII aferent n registrul de
transmisie TXREG. Dac registrul TSR este gol (octetul anterior a fost serializat i transmis
complet), el va fi ncrcat cu valoarea TXREG iar flag-ul TXIF va fi setat. Dac flag-ul de
ntrerupere TXIE este setat se va genera cte o cerere de ntrerupere la fiecare transmisie a unui
caracter. Semnalizarea eliberrii registrului de transmisie TSR se face prin setarea bitului TRMT. n
cazul formatului cu 9 bii de date trebuie ncrcat bitul al noulea (8) al registrului TSR prin
intermediul lui TX9D.

Diagrama semnalelor utilizate n transmisie este prezentat mai jos.

Sisteme Incorporate (Embedded Systems)
136



Exemplu: s se scrie o secven de cod prin care s se configureze interfaa USART n
modul asincron, cu 8 bii de date i rat de transfer de 9600 bii/secund (se presupune c frecvena
oscilatorului este de 20MHz).

Soluie:

Structura registrului TXSTA este urmtoarea:



Rezult c pentru iniializare avem nevoie de urmtoarea instruciune C:

TXSTA1=0x24; // transmisie pe 8 bii

Rata de transfer (coninutul registrului SPBRG) se calculeaz cu formula (bit BRGH - registrul
TXSTA = 1):

16 10
6
81 129 1
9600 16
10 20
1
16
= =

=
|
|
.
|

\
|

=
rate baud
F
SPBRG
osc


SPBRG = 0x81; // rata de transfer de 9600

Bitul 7 din portul C (RC7) trebuie setat pentru recepie, iar bitul 6 (RC6) pentru transmisie:

TRISC |=0x80; //RC7 setat pe input
TRISC &= 0xBF; //RC6 setat pe output

Structura registrului RCSTA este urmtoarea:


Pentru validarea interfeei USART, pinul SPEN trebuie setat:

RCSTA.SPEN=1; //validare USART

Sisteme Incorporate (Embedded Systems)
137
Rezult secvena de cod care rspunde cerinelor problemei:

TXSTA1=0x24; // transmisie pe 8 bii
SPBRG = 0x81; // rata de transfer de 9600
TRISC |=0x80; //RC7 setat pe input
TRISC &= 0xBF; //RC6 setat pe output
RCSTA.SPEN=1; //validare USART

Schema bloc a receptorului USART este prezentat n figura 8.3. Datele sunt recepionate pe
pinii RC7 (USART1) sau RG2 (USART2). Blocul de reconstrucie a datelor (data recovery)
opereaz la o vitez de 16 ori mai mare dect rata de transfer, pe cnd registrul de shiftare opereaz
la frecvena oscilatorului Fosc.



Fig. 8.3. Receptorul USART.

Diagrama semnalelor utilizate n recepie este prezentat mai jos.




8.2. Modul sincron de funcionare a interfeei USART

Transmisia serial sincron se realizeaz ntre dou dispozitive: master i slave. Selectarea
modului sincron de funcionare a interfeei USART master se face prin setarea biilor SYNC (bitul
Sisteme Incorporate (Embedded Systems)
138
4 al registrului TXSTA), SPEN (bitul 7 al registrului RCSTA) i CSRC (bitul 7 al registrului
TXSTA).
n modul sincron datele sunt transmise half-duplex (transmisia i recepia nu pot surveni n
acelai timp). Semnalul de sincronizare (clock) este generat prin intermediul pinului RC6 (TX).
Datele vor circula pe linia RC7 (RX) n ambele sensuri (fig. 8.4.).

8.2.1. Transmisia sincron a dispozitivului master

Bitul TXEN trebuie setat nainte de validarea transmisiei sincrone pentru a starta generarea
semnalului de sincronizare. Transmisia nu va starta dect dup scrierea datelor n registrul TXREG
i ncrcarea lor n registrul de transmisie TSR. Primul bit va fi transmis pe frontul cresctor al
primului impuls de ceas CK (RC6) i va rmne stabil pe toat durata acestuia (fig. 8.4.).



Fig. 8.4. Transmisia datelor prin intermediul interfeei USART n modul sincron aferent unui
dispozitiv master..

8.2.2. Recepia sincron a dispozitivului master

Validarea receptorului se face dup selectarea modului sincron fie prin setarea bitului SREN
(single reception), fie prin setarea bitului CREN (continuous reception). Dac SREN=1 se va
recepiona un singur octet; dac CREN =1 se va face recepie continu pn la resetarea acestuia.
Datele sunt eantionate pe frontul cztor al semnalului de ceas (fig. 8.5.). Dac ambii bii sunt
setai, atunci bitul CREN va avea prioritate. Diagrama semnalelor utilizate n recepia unui singur
octet este prezentat n figura 8.5.



Sisteme Incorporate (Embedded Systems)
139
Fig. 8.5. Diagrama de semnal pentru recepia sincron a unui dispozitiv master.

8.2.3. Transmisia sincron a dispozitivului slave

Selectarea modului sincron de funcionare a interfeei USART slave se face prin setarea
biilor SYNC (bitul 4 al registrului TXSTA), SPEN (bitul 7 al registrului RCSTA) i resetarea
bitului CSRC (bitul 7 al registrului TXSTA).
Realizarea transmisiei n modul slave este aproape identic cu transmisia n modul master.
Excepia este dat de configurarea pinului RC6/TX/CK care trebuie setat n acest caz pe input.
Paii care trebuie urmai pentru validarea transmisiei sincrone seriale pe un dispozitiv slave
sunt:

1. setarea biilor SYNC (bitul 4 al registrului TXSTA), SPEN (bitul 7 al registrului
RCSTA) i resetarea bitului CSRC (bitul 7 al registrului TXSTA)
2. Resetarea bitului CREN
3. Validarea ntreruperilor prin setarea bitului TXIE
4. Startarea transmisiei prin ncrcarea datelor n registrul TXREG
5. Validarea transmisiei prin setarea bitului TXEN

8.2.4. Recepia sincron a dispozitivului slave

Operaiile efectuate de ctre slave pentru recepia sincron a datelor sunt aproape identice cu
cele efectuate de master pentru recepie. Diferena apare la sursa semnalului de tact. Spre deosebire
de master care va genera semnalul de tact, dispozitivul slave recepioneaz acest semnal ca un
semnal de intrare.
Paii care trebuie urmai pentru validarea recepiei sincrone seriale pe un dispozitiv slave
sunt:

1. setarea biilor SYNC (bitul 4 al registrului TXSTA), SPEN (bitul 7 al registrului
RCSTA) i resetarea bitului CSRC (bitul 7 al registrului TXSTA)
2. Validarea ntreruperilor prin setarea bitului RCIE. Setarea bitului CREN pentru
validarea recepiei
3. Dac bitul RCIF este setat se citete registrul RCSTA pentru aflarea celui de-al noulea
bit (dac este cazul). Datele recepionate vor fi citite din registrul RCREG.
4. Resetarea bitului CREN dac a aprut o eroare la recepie

Modul serial sincron de transfer al datelor poate fi utilizat pentru extinderea porturilor unui
microcontroller. De asemenea, el este des utilizat pentru realizarea unei comunicaii ntre dou
microcontroller-e (fig. 8.6.).


Sisteme Incorporate (Embedded Systems)
140

Fig. 8.6. Comunicaie serial sincron ntre dou microcontroller-e PIC18.

Sisteme Incorporate (Embedded Systems)
141



9. INTERFAA SPI (SERIAL PERIPHERAL INTERFACE)


Microcontroller-ele PIC18 dein blocul MSSP (Master Synchronous Serial Port) cu rolul de
a permite comunicarea cu alte periferice (memorii EEPROM, registre de deplasare, diver-e de
afiare, convertoare anlog/numerice etc.) sau alte microcontroller-e. Interfaa MSSP utilizeaz un
singur semnal de tact care este partajat de transmitor i receptor.
Interfaa MSSP poate opera n dou moduri:

1. Interfa serial SPI (Serial Peripheral Interface)
2. Interfa I
2
C (Inter-integrated circuit)

Ambele interfee suport protocoale seriale sincrone de comunicare master-slave. Protocolul
SPI a fost propus ca i standard de Motorola, fiind o metod simpl care permite comunicare cu
alte dispozitive. Datorit simplitii sale SPI a devenit standard industrial, suportat de majoritatea
microcontroller-elor actuale.
Interfaa I
2
C se bazeaz pe un bus de comunicaie de doar dou fire. Aceast interfa a fost
propus de Philips i permite comunicaia ntre dou dispozitive (master/slave) atunci cnd se
cunoate adresa dispozitivului slave. Viteza de comunicaie n acest caz este standardizat la trei
valori:

1. Normal mode: 100 Kbps
2. Fast mode: 400 Kbps
3. High-speed mode: 3.4 Mbps

ntr-un sistem care utilizeaz protocolul SPI un dispozitiv este master (de obicei un
microcontroller) iar celelate dispozitive sunt configurate ca i slave. Dispozitivele periferice pot fi
configurate doar ca slave, n timp ce microcontroller-ele pot fi configurate ca master/slave. n
sistemele care utilizeaz I2C dispozitivele slave trebuie s dein o adres unic pe baza creia pot
fi accesate de master (microcontroller).
Modurile SPI i I2C utilizeaz aceeai pini ai microcontroller-ului, astfel nct ele nu pot fi
active simultan. MCU PIC 18 utilizeaz urmtorii pini pentru modulul MSSP:

- Serial data out (SDO) pinul RC5/SDO
- Serial data in (SDI) pinul RC4/SDI/SDA
- Serial clock (SCK) pinul RC3/SCK/LVDIN
- Adiional slave-ul poate utiliza semnalul Slave select (SS) pinul RF7/SS

Modulul MSSP utilizeaz patru registre pentru modul SPI:

- Registrul de control SSPCON1
- Registrul de stare SSPSTAT
- Buffer-ul de transmisie/recepie SSPBUF
- Registrul de deplasare (inaccesibil programatorului) SSPSR

Sisteme Incorporate (Embedded Systems)
142

Fig. 9.1. Interconectarea a dou dispozitive prin interfaa SPI.


Fig.9.2. Interconectarea mai multor dispozitive prin interfaa SPI.


Transferul prin interfaa I2C este gestionat prin intermediul a cinci componente de semnal:
- Start (S)
- Stop (P)
- Repeated Start (R)
- Data
- Acknowledge (A)

Semnalul de start indic intenia unui dispozitiv de a transfera date pe bus. Semnalul de start
este activat prin cderea liniei SDA n 0 n timp ce linia SCL este activ n 1 (fig. 9.3). Semnalul de
start va iniializa interfaa I2C.

Fig. 9.3. Condiia de start.

Sisteme Incorporate (Embedded Systems)
143
Condiia de stop indic eliberarea busului I2C. Dup eliberare celelalte dispozitive vor putea
accesa busul pentru a transmite date. Condiia de stop se activeaz prin trecerea in 1 a liniei SDA n
timp ce SCL este 1 (fig. 9.4).

Fig. 9.4. Condiia de stop.


Semnalul de repeated start este un semnal start fr efectuarea unui stop. Acest semnal este
utilizat de ctre master pentru a comunica cu alt slave n moduri diferite (transmisie/recepie) fr
eliberarea busului (9.5).

Fig. 9.5. Condiia de restart.

Transferul datelor pe bus poate fi fcut fie cu semnal acknowledge pozitiv (A) sau negativ
(NACK) (fig.9.6.).

Fig. 9.6. Condiia de ACK i NotACK (NACK).

Transferul de date se face n blocuri de cte 8 bii. Datele sunt transmise pe linia SDA, n
timp ce semnalul de tact este plasat pe linia SCL. Datele sunt considerate valide doar atunci cnd
semnalul SCL este activ n 1 (fig. 9.7). n comunicare, datele pot reprezenta coduri de control,
adrese sau date.

Sisteme Incorporate (Embedded Systems)
144


Fig. 9.7. Transferul datelor pe I2C.

O metod de interconectare a circuitelor pe busul I2C este prezentat n figura 9.8.



Fig. 9.8. Interconectarea circuitelor pe I2C.

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