Sunteți pe pagina 1din 235

PREFA!

"
Se consider! anul "97", cnd INTEL a anun#at producerea primului
microprocesor, ca momentul trecerii de la electronica implementat! cablat la
electronica realizat! programat. Primul microprocesor 4004 a fost conceput de M.
E. Hoff ca un procesor pu#in simplificat pentru a putea fi implementat, la vremea
aceea, pe un singur chip n siliciu. Ini#ial, microprocesorul nu a fost un computer-
on-a-chip, de$i n timp a ajuns la acest stadiu; conceptul de microprocesor s-a
dezvoltat $i spre alte implement!ri specifice: microcontroller, microcalculator,
procesor de semnale (DSP). Oricare din aceste circuite, pentru a deveni parte a
unui sistem, impune un proces de proiectare care se bazeaz! n egal! m!sur! att
pe componenta hardware ct $i pe componenta software.
Microprocesorul, sau celelalte variante ale sale, integrat ntr-un sistem
aduc acestuia acea performan#!, care atunci cnd este realizat! de fiin#a uman! este
referit! ca inteligen#!. n general, microprocesorul este integrat ca unitate central!
de procesare n sistemele digitale de calcul. Actual, aproape toate sistemele au o
arhitectur! de sistem digital particularizndu-se n func#ie de aplicare/utilizare.
Aplica#iile care nu sunt, n sensul clasic, sisteme digitale de calcul sunt n general
implementate pe baz! de microprocesor sau DSP. Implement!rile sistemelor pe
baz! de microcontroller ori DSP devin simple $i ieftine -pentru c! utilizeaz! deja
o component! de serie, devin performante pentru c! utilizeaz! o component! care
poate asigura suport pentru inteligen#!, devin flexibile pentru c! utilizeaz! o
component! ce poate fi programat!.
For#a care a impus sistemele pe baz! de microcontroller const! n
programabilitatea unei componente de serie. Pentru sistemele la care o component!
de serie, chiar programabil! n software, nu duce la rezultatele cele mai bune au
ap!rut implement!rile pe baz! de circuite ASIC (Application Specific Integrated
Circuits). Spre deosebire de sistemele pe baz! de microcontroller, unde
func#ionarea dorit! se ob#ine, n software, printr-un anumit program, la sistemele
pe baz! de circuite ASIC func#ionarea dorit! se ob#ine prin structurarea hardware-
ului cu un anumit program. Alegerea ntre o implementare pe baz! de
microcontroller, o implementare pe baz! de circuit ASIC sau una combinat!
depinde de aplica#ia respectiv! $i de cerin#ele impuse.
Prezenta carte constituie un material, dar f!r! a absolutiza, pentru
abordarea sistemelor pe baz! de microcontroller. Materialul prezentat $i CD-ul
VI MICROCONTROLLERE
al!turat asigur! un traseu de la descrierea func#ion!rii unui microcontroller generic,
dar $i cu exemplific!ri comerciale, pn! la analiza, sinteza implementarea $i
testarea unui sistem. Deoarece oferta pe pia#! pentru microcontrollere este vast! $i
variat!, pe acest traseu s-a accentuat prezentarea comparativ! $i critic! ncercnd s!
se imprime cititorului analiza lucid! n fa#a avalan$ei agresive a ofertelor de pia#!.
Cartea a fost elaborat! n cadrul programului Tempus RESUME (REtraining
SUpport for small and Medium Enterprises) de la Universitatea TRANSILVANIA
din Bra$ov, program care a avut printre obiective $i sprijinul dezvolt!rii de sisteme
pe baz! de microcontrollere n/$i pentru ntreprinderi mici $i mijlocii. %innd cont
de aceast! adres! cartea nu este destinat! numai inginerilor n specialitatea de
electronic! $i ingineria calculatoarelor ci $i inginerilor de alte specialit!#i care au o
practic! sau doresc s! abordeze acest domeniu al sistemelor pe baz! de
microcontroller. Nu exist! actual produse de HiTech care s! nu se bazeze direct sau
indirect pe microprocesor sau microcontroller. n consecin#!, ntr-o economie de
tranzi#ie, cum este a noastr!, care dore$te s! se impun!, formarea de personal care
s! $tie s! proiecteze/implementeze/exploateze sisteme pe baz! de microcontroller
este o necesitate prioritar!.
Mul#umim tuturor celor care ne-au sprijinit, colegilor Catedrei de
Electronic! $i Calculatoare, d-l asist. ing. R!zvan Br!tucu $i mai ales domnilor
profesori Marcian Crstea de la DMU Leicester - Marea Britanie, Josef Hoffmann
de la Fachhochschule Karlsruhe - Germania, Dr. Peter Corcoran - National
University of Ireland, MSC Eng.Petronel Bigioi, doctorand la Universitatea
Transilvania Bra$ov precum $i studen#ilor aceleia$i universit!#i.
Bra$ov, Ianuarie 200"
CUPRINS
DESCRIERE GENERAL!________________________________________________1
1.1 ISTORIC __________________________________________________________1
1.2 SCHEMA BLOC GENERAL! ____________________________________________3
1.3 ARHITECTURA MC__________________________________________________5
1.3.1 Unitatea central" de prelucrare ____________________________________6
1.3.2 Memoria _____________________________________________________8
1.3.3 Dispozitive I/O _______________________________________________10
1.4 SISTEMUL DE NTRERUPERI___________________________________________28
1.5 MANAGEMENTUL PUTERII____________________________________________34
1.6 SCHEMA BLOC A UNUI MC____________________________________________35
1.7 FAMILII DE MC ___________________________________________________37
1.8 CLASIFICAREA MC ________________________________________________41
PROGRAMAREA SISTEMELOR CU MC _________________________________43
2.1 PROIECTAREA PROGRAMELOR DE APLICA#IE _____________________________43
2.1.1 Generalit"$i __________________________________________________43
2.1.2 Instruc$iuni ale MC____________________________________________50
2.1.3 Instrumente software de proiectare: MC 8051 _______________________56
2.1.4 Instrumente software de proiectare: MC PIC________________________67
MICROCONTROLLERE MOTOROLA ___________________________________71
3.1 MC M68HC05____________________________________________________72
3.1.1 Memoria intern" ______________________________________________72
3.1.2 Unitatea central"______________________________________________73
3.1.3 Moduri de adresare ____________________________________________75
3.1.4 Setul de instruc$iuni ___________________________________________76
3.1.5 Sistemul de ntreruperi _________________________________________77
3.1.6 Interfe$e %i periferice on-chip ____________________________________78
3.1.7 Managementul puterii __________________________________________87
3.1.8 Autoverificarea _______________________________________________88
3.1.9 Programarea EPROM__________________________________________88
3.2 MC M68HC08____________________________________________________89
3.2.1 Unitatea central" 6808 _________________________________________90
3.2.2 Interfe$e %i periferice on-chip ____________________________________91
3.2.3 Programarea memoriei EEPROM ________________________________96
3.3 MC PE 16 BI#I - 6816_______________________________________________97
3.3.1 Modulul de integrare (SIM, System Integration Module) ______________98
3.3.2 Interfe$e_____________________________________________________98
3.4 MC PE 32 DE BI#I - 68300 ___________________________________________99
3.5 DATE COMPARATIVE PENTRU MC MOTOROLA CISC_____________________100
VIII MICROCONTROLLERE
FAMILIA MCS-5"_____________________________________________________101
4.1 STRUCTURA &I FUNC#IONAREA_______________________________________102
4.1.1 Gestionarea memoriei _________________________________________104
4.1.2 Circuitele timer ______________________________________________104
4.1.3 Interfa$a serial" UART ________________________________________106
4.1.4 Sistemul de ntreruperi ________________________________________106
4.1.5 Operarea cu economie de energie________________________________108
4.2 PROGRAMAREA MC DIN FAMILIA MCS-51 _____________________________108
4.2.1 Setul de instruc$iuni 8051______________________________________108
4.2.2 Modurile de adresare _________________________________________110
4.3 ALTE INTERFE#E &I PERIFERICE ON-CHIP ______________________________111
4.3.1 Interfa$a I
2
C (Siemens P80CL580) _______________________________111
4.3.2 Aria de num"r"toare programabil" (PCA) _________________________113
4.3.3 MC cu interfa$" pentru RAM nevolatil - NVRAM (Dallas DS5000FP) __115
4.3.4 MC specializat pentru TV %i video (PHILIPS 83C145) _______________115
4.3.5 MC cu arie configurabil" (TRISCEND E5) ________________________116
4.4 SISTEM MINIMAL CU 8051 __________________________________________118
4.5 DATE COMPARATIVE PENTRU MC DIN FAMILIA MCS-51___________________119
MICROCONTROLLERE RISC _________________________________________121
5.1 MICROCONTROLLER PIC ___________________________________________121
5.1.1 PIC12 _____________________________________________________121
5.1.2 PIC16 _____________________________________________________125
5.1.3 PIC17 _____________________________________________________127
5.2 MC ATMEL ____________________________________________________129
5.2.1 Familia AVR________________________________________________129
5.2.2 Familia ARM _______________________________________________138
CRITERII DE PROIECTARE ___________________________________________141
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC_______________________________141
6.2 ALGORITMUL PROIECT!RII SISTEMELOR CU MC __________________________143
6.3 PROIECTAREA SISTEMELOR CU MC N VEDEREA SIGURAN#EI N EXPLOATARE __145
6.3.1 Cablajul imprimat ____________________________________________146
6.3.2 Ceasul de gard"______________________________________________147
6.3.3 Programarea defensiv" ________________________________________147
APLICA#II___________________________________________________________149
7.1 IMPLEMENTAREA UNEI APLICA#II SIMPLE DE COMAND! &I CONTROL
DIGITAL _______________________________________________________149
7.1.1 Varianta de implementare cu microcontroller CISC__________________151
7.1.2 Varianta de implementare cu microcontroller RISC. _________________163
7.2 IMPLEMENTAREA INTERFE#ELOR LA PROCES ___________________181
7.2.1 Convertoare A/D controlabile serial ______________________________182
7.2.2 Interfa$area paralel" a convertoarelor A/D _________________________189
7.2.3 Convertoare A/D complexe ____________________________________195
7.2.4 Convertor D/A controlabil serial ________________________________201
7.2.5 Programarea unui sistem de dozare gravimetric" dotat cu MC _________205
BIBLIOGRAFIE_______________________________________________________ 219
1
DESCRIERE GENERAL!
1.1 ISTORIC
Privind evolu!ia istoric" a opera!iei de comand" a unui proces putem
contura imaginea unui microcontroller (MC - se va folosi n continuare aceast"
prescurtare pentru a numi un microcontroller). Un controller este un sistem folosit
pentru a comanda #i a prelua st"ri de la un proces sau un aspect al mediului
nconjur"tor. La nceput un controller era un echipament de mari dimensiuni. Dup"
apari!ia microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de
miniaturizare a continuat, toate componentele necesare unui controller au fost
integrate pe acela#i chip. S-a n"scut astfel calculatorul pe un singur chip specializat
pentru implementarea opera!iilor de control; acesta este microcontroller-ul. Un
microcontroller este un circuit realizat pe un singur chip care con!ine tipic:
unitatea central";
generatorul de tact (la care trebuie ad"ugat din exterior un cristal de cuar!
sau n aplica!ii mai pu!in preten!ioase, un circuit RC);
memoria volatil" (RAM);
memoria nevolatil" (ROM/PROM/EPROM/EEPROM);
dispozitive I/O seriale #i paralele;
controller de ntreruperi, controller DMA, num"r"toare/temporizatoare
(timers), covertoare A/D #i D/A, etc.;
periferice.
Pre!ul unui MC este redus din cauza cantit"!ilor mari n care se fabric".
Pre!ul mic al MC aduce cu sine #i mic#orarea pre!ului sistemelor de control (se
mic#oreaz" inclusiv costul proiect"rii).
Diferen!ele dintre microprocesor #i unitatea central" a MC se atenueaz" n
timp. Astfel, marii constructori de procesoare au realizat ni#te circuite care s-ar
putea numi super-microcontroller-e, a#a cum sunt Motorola 68EC300, INTEL
386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.
2 MICROCONTROLLERE
Cu un MC se poate realiza un controller integrat (Embedded Controller,
EC). Un controller integrat face parte dintr-un sistem construit cu un anumit scop,
altul dect calcule generale. Pe lng" MC, un controller integrat are nevoie de
hardware suplimentar pentru a-#i ndeplini func!ia.
Importan!a MC este dovedit" incontestabil de pia!a care este n continu"
cre#tere. Astfel, evolu!ia vnz"rilor de MC n lume se reflrct" n tabelele $.$ #i $.2.
Tabelul 1.1
Evolu"ia vnz#rilor MC n lume (n milioane dolari)
MC '90 '92 '94 '96 '97 '98 '99
(estimat)
'00
(estimat)
4-bit $393 $596 $76$ $849 $88$ $856 $8$6 $757
8-bit 2077 2862 4689 6553 7529 8423 92$9 97$5
$6-bit $92 340 8$0 $628 2$9$ 2969 3678 4405
Tabelul 1.2
Evolu"ia vnz#rilor MC n lume (n milioane buc#"i)
MC '90 '92 '94 '96 '97 '98 '99
(estimat)
'00
(estimat)
4-bit 778 979 $063 $$00 $096 $064 $025 970
8-bit 588 843 $449 2$23 2374 2556 268$ 2700
$6-bit 22 45 $06 227 3$3 4$9 50$ 585
Principalii produc"tori de microprocesoare au realizat n $994 #i $995
urm"toarele cifre de afaceri (tabelul $.3).
Tabelul 1.3
Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microprocesoare
(n milioane dolari)
Produc"tor $994 $995
Intel $0800 8036
AMD 88$ 992
Motorola 78$ 827
IBM 468 297
TI 2$9 202
Cyrix 2$0 240
Hitachi $88 66
NEC $00 82
LSI Logic 58 5$
IDT 45 25
$. Descriere general" 3
n prezent datele arat" modific"ri de structur"; de exemplu cifra de afaceri
a AMD se apropie de cea a lui INTEL. Cifra de afaceri, ca ordin de m"rime, era
deja n anii $994, $995 apropiat" de cea realizat" din vnz"ri de microprocesoare
(tabelul $.4).
Tabelul 1.4
Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microcontrollere
(n milioane dolari)
Produc"tor $994 $995
Motorola $78$ $5$$
NEC $42$ $208
Mitsubishi 945 708
Hitachi 899 782
Intel 835 605
TI 807 534
Philips 524 345
Matsushita 500 4$3
Lucent (AT&T) 492 275
Toshiba 400 328
1.2 SCHEMA BLOC GENERAL!
Vom defini un microcontroller pornind de la o reprezentare simplificat" a
sa n interac!iune cu mediul (figura $.$).
Memoria
Unitatea
central"
de
prelucrare
Generator de
tact
Intr"ri
Ie#iri
Programe
Figura 1.1 Schema simplificat" a unui microcontoller
4 MICROCONTROLLERE
Ca intr"ri se folosesc de regul" semnale provenind de la comutatoarele
individuale sau de la traductoare (de temperatur", de presiune, foto, traductoare
specializate). Intr"rile pot fi digitale sau analogice. Intr"rile digitale vehiculeaz"
semnale discrete, informa!ia "citit"" fiind informa!ia ce se e#antioneaz" la
momentul citirii liniei respective. Intr"rile analogice vehiculeaz" informa!ii
exprimabile prin func!ii continue de timp. "Citirea" acestora de c"tre
microcontroller presupune prezen!a unor circuite capabile s" prelucreze aceste
informa!ii, fie comparatoare analogice, fie convertoare analog-numerice, ale c"ror
ie#iri sunt citite de c"tre MC.
Ie#irile sunt fie analogice, caz n care reprezint" de fapt ie#iri ale
convertoarelor numeric-analogice, fie sunt digitale, caz n care informa!ia este n
general memorat" pe acestea pn" la o nou" scriere operat" de c"tre UC la un port
al MC. Ie#irile pot comanda dispozitive de afi#are, relee, motoare, difuzoare, etc.
O structur" mai detaliat", care include blocurile principale, este
reprezentat" n figura $.2.
Memorie pentru
programe
Memorie pentru
date
Dispozitive I/O
Unitatea centrala de prelucrare
(UCP)
Oscilator
Intr"ri
digitale
Ie#iri
digitale
Bus de
date
Bus de
adrese
Reset
Figura 1.2 Schema bloc a unui microcontroller
$. Descriere general" 5
Se poate distinge o prim" diferen!" fa!" de calculatoarele personale, unde
intr"rile se fac de regul" de la tastatur" #i ie#irile pe monitorul TV sau la
imprimant". Dac" un calculator personal este folosit pentru a prelucra informa!ii #i
a afi#a rezultatele pe monitor sau hrtie, un MC comand" un proces.
Un element important, f"r" de care un MC nu poate func!iona, este
programul (sau programele), care se stocheaz" n memoria proprie MC.
Un MC poate fi definit ca un sistem de calcul complet pe un singur chip.
Acesta include o unitate central", memorie, oscilator pentru tact #i dispozitive I/O.
Un MC poate fi privit ca un microprocesor care pe acela#i chip mai con!ine
memorie #i o serie de interfe!e. Natura #i complexitatea aplica!iei n care este
folosit MC determin" performan!ele unit"!ii centrale, capacitatea de memorie #i
tipul interfe!elor ce compun structura intern" a MC.
1.3 ARHITECTURA MC
Arhitectura unui MC define#te atributele sistemului a#a cum sunt ele
v"zute de un programator n limbaj de asamblare. Deoarece un microcontroller este
un caz particular de calculator, (calculator specializat pentru opera!ii I/O, realizat
pe un singur chip), acesta este compus din cele cinci elemente de baz": unitate de
intrare, unitate de memorie, unitate aritmetic" #i logic", unitate de control #i unitate
de ie#ire. Unitatea de control mpreun" cu unitatea aritmetic" #i logic" compun
mpreun" unitatea central" de prelucrare pe care o vom referi n continuare
prescurtat cu UCP. Unit"!ile de intrare #i ie#ire vor fi tratate mpreun" #i vor fi
referite prescurtat ca sistem I/O.
Blocurile componente ale MC sunt legate ntre ele printr-o magistral"
intern" (bus). Magistrala vehiculeaz" semnale de adres", de date #i semnale de
control. M"rimea acestor magistrale constituie una dintre caracteristicile cele mai
importante ale unui MC. Prin magistrala de adrese unitatea central" de prelucrare
(UCP) selecteaz" o loca!ie de memorie sau un dispozitiv I/O, iar pe magistrala de
date se face schimbul de informa!ie ntre UCP #i memorie sau dispozitivele I/O.
ntre UCP #i memorie sunt transferate att date ct #i instruc!iuni. Acestea se pot
transfera pe o singur" magistral" de date sau pe magistrale de date diferite.
Arhitectura von Neumann prevede existen!a unui bus unic folosit pentru
circula!ia datelor #i a instruc!iunilor. Cnd un controller cu o astfel de arhitectur"
adreseaz" memoria, bus-ul de date este folosit pentru a transfera nti codul
instruc!iunii, apoi pentru a transfera date. Accesul fiind realizat n 2 pa#i, este
destul de lent.
Arhitectura Harvard prevede un bus separat pentru date #i instruc!iuni.
Cnd codul instruc!iunii se afl" pe bus-ul de instruc!iuni, pe bus-ul de date se afl"
6 MICROCONTROLLERE
datele instruc!iunii anterioare. Structura MC este mai complex", dar performan!ele
de vitez" sunt mai bune.
Magistralele interne, dup" numele lor, nu sunt accesibile n exterior la
nivel de pin. Aceast" stare caracterizeaz" regimul normal de func!ionare. n
regimuri speciale de func!ionare, numite diferit la diferitele tipuri de MC,
semnalele magistralelor de adrese #i de date sunt accesibile la nivel de pin
sacrificnd func!iile ini!iale ale pin-ilor respectivi. Totodat" este necesar s" fie
livrate n exterior #i semnale de comand" (cel pu!in comand" de scriere WR #i
comand" de citire RD). Aceast" facilitate este util" pentru extensii de memorie
sau pentru a ata#a sistemului interfe!e suplimentare. Ea nu este posibil" n mod
normal de func!ionare deoarece aceasta ar presupune existen!a unui num"r foarte
mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese #i de date pot fi
aduse la pin multiplexat sau nemultiplexat. Familia MCS-5$ este un exemplu
pentru acces multiplexat la magistrale. Accesul se face n doi pa#i; n primul pas se
conecteaz" liniile de adres" la pinii portului sacrificat, iar n al doilea pas se
conecteaz" datele la aceia#i pini. Pentru a putea utiliza informa!ia de adresare,
adresa se memoreaz" ntr-un latch, de asemenea exterior microcontroller-ului.
Complicarea accesului la magistralele interne prin multiplexare este justificat" de
asemenea din ra!iunea men!inerii unui num"r ct mai mic de pini la capsul". MC
mai pu!in performante (ex. - MC low cost) nu au magistralele interne accesibile la
nivel de pin.
Ca urmare a celor prezentate se poate aprecia performan!a unui MC din
punct de vedere al magistralei interne dup" urm"toarele criterii:
dimensiunea magistralei de date;
dimensiunea magistralei de adrese;
accesibilitatea n exterior la magistrale;
magistrale accesibile multiplexat sau nemultiplexat.
1.3.1 Unitatea central# de prelucrare
Unitatea central" de prelucrare este compus" din unitatea aritmetic" #i
logic" (UAL) #i din unitatea de control.
Unitatea aritmetic" #i logic" este sec!iunea responsabil" cu efectuarea
opera!iilor aritmetice #i logice asupra operanzilor ce i sunt furniza!i. Modul de
implementare a opera!iilor este transparent pentru utilizator; important pentru
utilizatorul de MC este repertoriul opera!iilor implementate pentru a aprecia
posibilitatea implement"rii optime a aplica!iei particulare de control. De asemenea
este important timpul de execu!ie al fiec"rei opera!ii pentru a aprecia dac" timpul
necesar proces"rii complete satisface cerin!ele de timp ale aplica!iei.
Unitatea ce control este responsabil" cu decodificarea codului opera!iei
con!inut de codul unei instruc!iuni. Pe baza decodific"rii unitatea de control
$. Descriere general" 7
elaboreaz" semnale pentru comanda celorlalte blocuri func!ionale pentru a finaliza
executarea unei instruc!iuni. Modul de implementare al acestui bloc este de
asemenea transparent utilizatorului.
Unitatea central" de prelucrare con!ine un set de registre interne, similare
unor loca!ii de memorie, folosite pentru memorarea unor date des apelate sau
pentru programarea unor anumite func!ii. Diferitele familii de MC folosesc seturi
diferite de registre. Exist" ns" cteva registre comune.
A (Accumulator) - registrul acumulator - este folosit deseori pentru a stoca
un operand #i rezultatul opera!iei aritmetice sau logice.
PC (Program Counter) registru num"r"tor de program - este registrul
care stocheaz" adresa urm"toarei instruc!iuni de executat. Dup" un RESET
(ini!ializarea MC), registrul PC se ncarc" dintr-o loca!ie de memorie numit" vector
de reset. Aceast" loca!ie con!ine adresa primei instruc!iuni de executat. PC este
incrementat automat la execu!ia unei instruc!iuni.
SP (Stack Pointer) registrul indicator de stiv" - con!inutul acestui registru
indic" adresa curent" a stivei. Stiva reprezint" o zon" de memorie accesibil" rapid
n care se depun temporar informa!ii importante n desf"#urarea programului. Stiva
este definit" de obicei n RAM. Implementarea accesului presupune existen!a unui
registru de adresare (SP) #i a mecanismului de memorare declan#at de instruc!iuni
specifice (instruc!iunile PUSH/POP).
Un aspect important ce se reflect" n arhitectura unui MC este modul de
programare. Prin arhitectur" n!elegem felul n care sunt dispuse "resursele" unui
MC. Cu ct structura, func!ionalitatea #i accesul la acestea sunt mai profund
standardizate #i simetrizate, cu att num"rul de instruc!iuni de care dispune MC
este mai redus #i viteza de execu!ie a programelor cre#te.
Conceptul CISC (Complex Instruction Set Computer) pe baza c"ruia sunt
construite majoritatea MC, prevede existen!a unui num"r mare de instruc!iuni (tipic
>80), ceea ce face mai u#oar" munca programatorului. Multe din instruc!iuni sunt
specializate, adic" se pot folosi doar n anumite moduri de adresare sau cu anumite
registre.
Evolu!ia MC este spre arhitectura RISC (Reduced Instruction Set
Computer), n cadrul c"reia un MC are un num"r mic de instruc!iuni. Avantajele
sunt un chip mai mic, cu un num"r de pini mai mic, cu un consum mai redus #i cu
o vitez" mai mare. Instruc!iunile sunt simetrice, adic" pot fi folosite la fel n orice
mod de adresare sau cu orice registru, nu au excep!ii sau restric!ii.
n prezent un MC este cu mai mult dect o arhitectur" RISC, el este cu o
arhitectur" SISC (Specific ISC). Instruc!iunile sunt specifice pentru a lucra optim
cu dispozitivele I/O, permit manipularea la nivel de bit #i sunt mai pu!ine
instruc!iuni de uz general, a#a cum ntlnim la microprocesoarele 8086, 68000 etc.
n general MC cu arhitectur" CISC dispun de un num"r redus de registre.
Acestea au func!ii determinate (acumulator, registru index,etc), iar MC cu
arhitectur" RISC dispun de un num"r mai mare de registre cu un mare grad de
ortogonalitate ceea ce nseamn" c" pot fi folosite simetric n orice mod de adresare
(ATMEL AVR are 32 de registre)
8 MICROCONTROLLERE
Registrele interne pot avea diferite dimensiuni, astfel registrele acumulator
au dimensiunea egal" cu cea a magistralei de date (8, $6 sau 32 bi!i). Registrul
num"r"tor de program are dimensiunea egal" cu cea a magistralei de adrese.
Registrul indicator de stiv" poate avea dimensiunea mai mic" dect a magistralei
de adrese permi!nd localizarea stivei ntr-o zon" restrns" a memoriei RAM.
Exist" #i MC cu stiv" automat", acestea nu au nevoie de indicator de stiv" dar au
dezavantajul c" nu se pot folosi mai mult de 2-4 nivele de stiv" (MC din familia
PIC).
1.3.2 Memoria
MC folosesc diferite tipuri de informa!ii, care sunt stocate n diferite tipuri
de memorii. Instruc!iunile care controleaz" func!ionarea MC trebuie stocate ntr-o
memorie nevolatil", unde informa!iile se p"streaz" #i dup" oprirea #i repornirea
sursei de alimentare. Rezultatele intermediare #i variabilele pot fi nscrise ntr-o
memorie volatil", la acestea este important s" se poat" face scrierea /citirea rapid #i
simplu n timpul func!ion"rii.
Memoria RAM (Random Access Memory) este o memorie volatil" care
poate fi citit" sau scris" de unitatea central". Loca!iile din RAM sunt accesibile n
orice ordine. Pe chip, memoria RAM ocup" mult loc #i implicit costurile de
implementare sunt mari. De aceea un MC include de obicei pu!in RAM. Memorie
RAM static alimentat" de la baterie se folose#te pentru stocarea nevolatil" a
cantit"!ilor mari de date, la o vitez" de acces mare #i cu un num"r nelimitat de
#tergeri #i renscrieri.
Memoria ROM (Read Only Memory) este cea mai ieftin" #i cea mai simpl"
memorie #i se folose#te la stocarea programelor n faza de fabrica!ie. Unitatea
central" poate citi informa!iile, dar nu le poate modifica.
Memoria PROM (Programmable Read Only Memory) este similar" cu
memoria ROM, dar ea poate fi programat" de c"tre utilizator. Dup" posibilit"!ile de
#tergere, aceast" memorie poate fi de mai multe feluri:
Memoria EPROM (Erasable PROM) care se poate #terge prin expunere la
raze ultraviolete. MC cu EPROM au un mic geam de cuar! care permite ca chip-ul
s" fie expus la radia!ia ultraviolet". %tergerea este neselectiv", adic" se poate #terge
doar ntreaga informa!ie #i nu numai fragmente. Memoria poate fi #tears" #i
renscris" de un num"r finit de ori. Programarea EPROM-ului necesit" o procedur"
special", iar MC cu EPROM au nevoie de regul" pentru nscrierea EPROM-ului de
o tensiune auxiliar", de $2 V de exemplu. Unele MC au incluse circuite de
programare a memoriei EPROM, cu ajutorul c"rora unitatea central" poate
programa memoria EPROM. n timpul program"rii memoria EPROM nu este
conectat" la magistrala de date #i adrese. Unele MC sunt prev"zute cu mod special
de lucru, n care sunt v"zute din exterior ca ni#te memorii EPROM obi#nuite #i pot
fi astfel programate cu orice programator.
$. Descriere general" 9
OTP (One Time Programmable PROM) se folose#te pentru multe serii de
MC. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat
ntr-o capsul" de material plastic f"r" fereastr", care este mult mai ieftin". Memoria
nu se poate #terge sau reprograma. Pre!ul unui MC cu OTP este mic, viteza este
bun", dar aplica!iile sunt lipsite de flexibilitate.
Memoria EEPROM (Electrically Erasable Programmable Read Only
Memory) poate fi #tears" electric de c"tre unitatea central", n timpul func!ion"rii.
%tergerea este selectiv", iar pentru renscriere trebuie parcur#i mai mul!i pa#i.
Memoria EEPROM echipeaz" multe MC, fiind ieftin". n memoria EEPROM se
memoreaz" un mic num"r de parametri care se schimb" din timp n timp. Memoria
este lent" #i num"rul de #tergeri/scrieri este limitat (tipic $0 000).
Memoria FLASH este o memorie asem"n"toare EPROM #i EEPROM n
sensul c" poate fi #tears" #i reprogramat" n sistemul n care este folosit" (f"r" a fi
necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesit" fereastr"
pentru #tergere. Ca #i EEPROM, memoria FLASH poate fi #tears" #i programat"
electric. Memoria FLASH nu permite #tergerea individual" de loca!ii, utilizatorul
poate s" #tearg" doar ntregul con!inut.
Din punct de vedere al locului #i modului de programare a memoriilor de
tip PROM exist" dou" concepte:
ICP (In Circuit Programming) programarea memoriei cnd MC se
afl" pe placa de cablaj imprimat a aplica!iei;
ISP (In System Programming) presupune posibilitatea de
reprogramare n func!ionare a sistemului. De exemplu la
autovehiculele comandate de MC, schimbarea tipului benzinei sau
schimbarea unei legi privitoare la poluare pot fi actualizate n
programul MC f"r" ca acesta s" fie scos din autovehicul.
n func!ie de num"rul aplica!iilor n care urmeaz" s" fie folosit MC se
recomand" folosirea MC cu ROM pentru volum mare de produc!ie (ROM se
nscrie cu masc" la fabricant), OTP pentru volum mic de produc!ie #i EPROM
pentru prototipuri.
Tipul de memorie #i capacitatea memoriei din echiparea unui MC sunt
caracteristici particulare fiec"rui tip de circuit. Printre alte diferen!e, ace#ti
parametri sunt diferi!i pentru membrii unei aceleia#i familii de MC. Se vor
prezenta date concrete pentru exemplificare ntr-un tabel recapitulativ la sfr#itul
capitolului (tabelul $.6).
Pentru a aprecia un MC sub aspectul componentei memorie este necesar s"
se considere urm"toarele caracteristici:
varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM
/EEPROM /FLASH;
capacitatea memoriei aflat" pe chip;
u#urin!a cu care se poate programa (programare n circuit sau nu,
necesitatea unor tensiuni de programare suplimentare).
10 MICROCONTROLLERE
1.3.3 Dispozitive I/O
Dispozitivele I/O reprezint" un aspect de mare interes atunci cnd este
vorba de microcontroller-e, interes rezultat din ns"#i particularitatea unui MC:
aceea de a interac!iona cu mediul n procesul de control pe care l conduce.
Dispozitivele I/O implementeaz" func!ii speciale degrevnd unitatea
central" de toate aspectele specifice de comand" #i control n func!ia respectiv".
Exist" o varietate mare de dispozitive I/O; dispozitivele I/O conduc opera!ii
generale de comunica!ie (transfer serial sau paralel de date), func!ii generale de
timp (num"rare de evenimente, generare de impulsuri), opera!ii de conversie
analog/numeric", func!ii de protec!ie, func!ii speciale de comand", #i enumerarea
poate continua. Parte din resurse acoper" func!iile de control propriu-zis, iar o parte
asigur" func!iile necesare aplica!iilor n timp real (sistemul de ntreruperi, timer).
Din aceast" mare varietate, parte din dispozitive se g"sesc n configura!ia
tuturor MC sau sunt foarte des ntlnite, iar o alt" parte de dispozitive o reg"sim
doar n MC construite pentru a optimiza aplica!ii cu un grad mare de
particularitate. n acest capitol, n continuare, vor fi prezentate dispozitive des
ntlnite n echiparea MC. n capitolele urm"toare, pe m"sur" ce vor fi prezentate
exemple de MC, vor fi descrise #i o serie de dispozitive I/O speciale ce intr" n
componen!a acestora.
Dispozitivele I/O sunt v"zute de unitatea central" ca porturi. Exist" dou"
filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de c"tre unitatea
central". Porturile sunt mapate fie n spa!iul de memorie, fie ntr-un spa!iu propriu.
Cele dou" metode sunt exemplificate la MC produse de Motorola #i MC produse
de Intel. La MC Motorola dispozitivele I/O ocup" adrese ntr-un spa!iu comun cu
memoria, ceea ce atrage dup" sine reducerea num"rului de loca!ii de memorie. MC
de la Intel folosesc un semnal care indic" dac" la adresa curent" se apeleaz" o
loca!ie de memorie sau un dispozitiv I/O.
Avantajele map"rii n spa!ii separate:
Metoda nu este susceptibil" de a provoca erori soft deoarece se
folosesc instruc!iuni diferite pentru a accesa memoria #i dispozitivele
I/O;
Dispozitivele I/O nu ocup" spa!iu de memorie;
Decodificatorul de adrese pentru dispozitivele I/O este mai simplu
deoarece spa!iul de adresare al dispozitivelor I/O este mai mic.
Dezavantaje ale map"rii n spa!ii separate:
instruc!iunile I/O sunt mai pu!in flexibile n compara!ie cu
instruc!iunile de lucru cu memoria;
instruc!iunile I/O nu permit folosirea modurilor de adresare folosite n
lucrul cu memoria.
Avantajul map"rii n spa!iu comun:
$. Descriere general" 11
toate instruc!iunile de lucru cu memoria #i toate modurile de adresare
sunt utilizabile #i n tratarea dispozitivelo I/O (programarea opera!iilor
I/O este foarte flexibil");
Dezavantajele map"rii n acela#i spa!iu:
este susceptibil la erori software;
spa!iul de adresare disponibil pentru memorie este mai mic.
Avantajul map"rii ntr-un spa!iu comun este acela c" se poate opera cu
porturile la fel ca #i cu o loca!ie de memorie; multe opera!ii aritmetice #i logice
folosesc operanzi direct de la port, datele pot fi mutate ntre porturi cu o singur"
instruc!iune, con!inutul unui port poate fi citit, incrementat #i rezultatul scris din
nou la port de asemenea cu o singur" instruc!iune.
Se contureaz" trei direc!ii de evolu!ie a MC din punct de vedere al
resurselor disponibile pe chip. O direc!ie este dezvoltarea de MC de uz general care
sunt puse la dispozi!ia utilizatorului pentru a realiza aplica!ii de la A la Z. O a
doua direc!ie o reprezint" dezvoltarea de MC specializate care dispun de resurse
specifice unui anume gen de aplica!ii (automobile, telecomunica!ii, Internet,
ac!ion"ri electrice, etc). Pentru aceste MC specializate att structura hardware ct #i
instruc!iunile sunt specifice #i sunt calate pe un gen particular de aplica!ii. Exist" o
a treia tendin!" de dezvoltare de MC care dispun de resurse hardware configurabile
la utilizator. ntre resursele configurabile se afl" memoria, elemente de logic"
programat", module specializate, gen convertoare A/D #i convertoare D/A, #i
module de procesare avansat" a datelor.
Porturi paralele
Porturile paralele I/O faciliteaz" transferul simultan al mai multor bi!i ntre
MC #i mediu. Num"rul de bi!i transfera!i ca urmare a execut"rii unei instruc!iuni
depinde de organizarea particular" a porturilor n cadrul MC; unele porturi sunt
organizate pe 8 bi!i, altele pe un num"r mai mare de bi!i. Sensul transferului, I
(input) sau O (output) este programabil #i se stabile#te de obicei ntr-un registru de
sens. Pentru a veni n ntmpinarea cerin!elor specifice de interac!iune cu mediul
sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor
paralele I/O. Mecanismul presupune o structur" hardware corespunz"toare #i
instruc!iuni pentru manipularea informa!iei la nivel de bit (un operand este un bit).
Astfel, la execu!ia unei instruc!iuni orientat" pe bit, exist" posibilitatea de a
transfera un singur bit, de a masca bi!i care nu sunt folosi!i ntr-o opera!ie
particular" #i de a efectua opera!ii logice pe un singur bit al unui port paralel I/O.
Datorit" capabilit"!ii de manipulare la nivel de bit la descrierea caracteristicilor
sistemului paralel I/O se specific" num"rul total de linii I/O.
MC68HC705C8 dispune de 3$ de linii I/O digitale de uz general grupate n patru
porturi (A, B, C #i D). Porturile A, B, #i C sunt porturi de cte opt bi!i fiecare #i pun
12 MICROCONTROLLERE
la dispozi!ie n total 24 de linii care pot fi folosite fie ca intr"ri, fie ca ie#iri. Portul D
dispune de 7 linii care pot fi folosite doar ca int"ri.
Circuitul de interfa!" al portului paralel este responsabil de corectitudinea
transferului cu dispozitivul I/O. n acest scop se foloseste una din urm"toarele
metode de sincronizare:
Transfer direct (brute-force method) n cadrul acestei metode interfa!a are
doar rolul de a transfera semnalele de la unitatea central" spre dispozitivul I/O
(dac" este o opera!ie de ie#ire) sau de la dispozitivul I/O la unitatea central"
(dac" este o opera!ie de intrare). Se folose#te acest tip de transfer dac" se
cite#te nivelul unui poten!ial, dac" se comand" la ie#ire un nivel logic (pentru
comanda unor LED-uri, de exemplu).
Transfer strobat (strobe method) aceast" metod" folose#te semnale de
strobare pentru a indica starea stabil" a semnalelor la porturile de intrare sau de
ie#ire. ntr-o opera!ie de intrare, dispozitivul de intrare genereaz" semnalul de
strobare cnd datele sunt stabile la pinii portului de intrare al interfe!ei.
Stocarea informa!iei n registrul de date al interfe!ei se face cu semnalul de
strobe. Daca este vorba de o opera!ie de ie#ire, cnd semnalele de date sunt
stabile, interfa!a elaboreaz" semnal de strobare cu care dispozitivul I/O preia
efectiv datele. Aceat" metod" poate fi folosit" dac" interfa!a #i dispozitivul I/O
lucreaz" la viteze comparabile.
Transfer cu protocol (handshake method) exist" cazuri n care vitezele de
lucru ale celor dou" p"r!i implicate n transfer sunt mult diferite #i metodele
mai sus amintite nu ofer" cadrul potrivit pentru transferul datelor. Solu!ia este
ca interfa!a #i dispozitivul I/O s" poarte un dialog numit handshake. Sunt
necesare dou" semnale de protocol; unul din ele este elaborat de circuitul de
interfa!" iar cel"lalt de dispozitivul I/O. Tranzac!iile de protocol difer" pentru
opera!ii de intrare #i de ie#ire.
n figura $.3 este ilustrat" organizarea portului A al unui circuit particular
(MC68HC705C8).
Bit 7 6 5 4 3 2 $ Bit 0
DDRA7 DDRA6 DDRA5 DDRA4 DDRA3 DDRA2 DDRA$ DDRA0
0 0 0 0 0 0 0 0
Starea registrelor de ie#ire nu este influen!at" de Reset
PA7 PA6 PA5 PA4 PA3 PA2 PA$ PA0
Figura 1. 3 Organizarea portului paralel A (MC68HC705C8)
$. Descriere general" 13
Registrul DDRA (Data Direction Register port A) este un registru de 8 bi!i
ca #i registrul de date PA al portului A . Sub fiecare din registre este reprezentat"
starea ini!ial" a registrelor (dup" reset). n cazul particular considerat, portului PA
este implicit port de intrare.
O structur" posibil" de circuit pentru o linie bidirec!ional" de scriere/citire
la porturi este redat" n figura $.4. Se poate constata modul n care ac!ioneaz" bitul
din registrul de sens asupra circuitului driver de ie#ire.
n partea stng" a diagramei sunt reprezentate leg"turile spre magistrala
intern" de date a MC. n func!ie de natura opera!iei efectuate (citire sau scriere) #i
de valoarea bitului din registrul de direc!ie sunt posibile opera!iile exprimate n
tabelul $.5.
Tabelul 1.5
Func"iile unui pin I/O
Opera!ie Bit DDR Func!ie pin I/O
scriere 0 Pinul I/O este n mod intrare;
datele pentru scriere vor fi nscrise n latch-ul de ie#ire
scriere $ Datele pentru scriere sunt nscrise n latch-ul de ie#ire
#i transferate de buffer-ul [$] pinului I/O
citire 0 Este citit" starea pinului I/O
citire $ Pinul I/O este n mod ie#ire; este citit" informa!ia din
latch-ul de ie#ire.
Se poate observa c" o linie de ie#ire a unui port paralel este mai mult dect
un latch simplu; totodat", informa!ia nscris" n latch-ul de ie#ire nu se schimb"
dect dac" se efectueaz" o nou" opera!ie de scriere la port.
Unele porturi paralele sunt considerate cvasi-bidirec!ionale, ceea ce
nseamn" c" o linie poate fi folosit" n acela#i timp ca ie#ire #i ca intrare. Aceast"
flexibilitate este considerat" de interes n aplica!ii #i este posibil" printr-un truc.
Bit
DDR
Bit port ie#ire
(latch)
[$]
[2]
[3]
pin
I/O
[$] Buffer de ie#ire
[2] Buffer de intrare
(activ pentru DDR=0)
[3]Buffer de intrare
(activ pentru DDR=$)
Figura 1.4 Circuit bidirec!ional de scriere/citire la portul paralel
14 MICROCONTROLLERE
Figura $.5 reprezint" structura unei linii cvasi-bidirec!ionale. Trucul const" n
exploatarea facilit"!ilor unui etaj de ie#ire cu drena n gol (open-drain) care n acest
exemplu este pev"zut cu o rezisten!" conectat" intern la sursa de alimentare.
Fiecare linie poate fi folosit" independent ca intrare sau ca ie#ire. Pentru a
fi folosit" ca intrare este necesar ca latch-ul s" fie nscris cu unu logic (nQ va fi n
acest caz zero) pentru ca tranzistorul n$ s" fie blocat. Dac" nu este ata#at nimic la
pin, rezisten!a intern" de pull-up va determina citirea unui unu logic la pin. Dac"
linia este for!at" exterior n zero logic, etajul va genera curent prin rezisten!a de
pull-up, iar informa!ia citit" va fi un zero logic. Exist" structuri mai complicate
care n unele situa!ii necesit" conectarea n exterior a unei rezisten!e de pull-up.
Pentru a interac!iona cu mediul unui MC i sunt necesare multe conexiuni
la nivel de pin, ceea ce nseamn" un circuit cu un num"r mare de pini. Din
considerente de fiabilitate #i economice se caut" reducerea num"rului de pini ai
unui circuit integrat. n aceast" situa!ie a fost necesar un compromis n urma c"ruia
s-a ajuns la solu!ia prin care se atribuie unui pin func!ii multiple (dou" sau mai
multe). Pinii astfel sacrifica!i sunt pinii portului paralel. La pinii porturilor paralele
sunt accesibile celelalte resurse ale circuitului; pot fi amintite conexiunile
interfe!elor seriale, conexiunile cu exteriorul ale modulelor timer, canalele de
intrare ale convertoarelor A/D, liniile pentru generarea ntreruperilor externe.
n mod normal de operare magistralele interne ale unui MC nu sunt
accesibile n exterior, la nivel de pin. Exist" situa!ii n care este necesar" extensia
resurselor (extensia memoriei, spre exemplu) caz n care este necesar accesul la
magistralele interne. Pentru rezolvarea acestei probleme sunt folosi!i tot pinii
porturilor paralele. Din nou, pentru economie de pini sacrifica!i, aceia#i pini sunt
folosi!i consecutiv pentru a vehicula adrese #i apoi date. Deoarece adresele folosesc
liniile doar ca ie#iri, adresa este disponibil" la pinii portului paralel n timpul
primului ciclu de ceas al execu!iei unei instruc!iuni. Adresa este memorat" n
circuite exterioare (n latch-uri). n al doilea ciclu de ceas se vehiculeaz" pe aceste
pin
I/O
D
CLK
Q
Q n$
Pull-up
intern
V
CC
Citire latch
Citire pin
Scriere latch
Bus intern
Figura 1.5 Structura unei linii cvasi-bidirec!ionale
$. Descriere general" 15
linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este
numit mod expandat de lucru.
Pentru a evalua capabilitatea porturilor paralele se recomand" considerarea
urm"toarelor nsu#iri:
Num"rul de linii I/O;
Posibilitatea de a programa sensul liniilor I/O;
Alte resurse accesibile prin func!ii multiple la liniile I/O;
Posibilitatea accesului la magistralele interne
Aspecte electrice de interfa!are.
Module de comunica"ii seriale
Comunica!ia serial" este o metod" bine agreat" #i n contextul MC
deoarece ofer" compatibilitate cu o gam" extins" de dispozitive #i necesit" un
num"r minim de fire, implicit un num"r minim de conexiuni (pini pu!ini).
n transferul serial de date este necesar s" se cunoasc" nceputul #i sfr#itul
informa!iei transferate. Pentru a identifica cele dou" coordonate emi!"torul #i
receptorul trebuie s" fie sincroniza!i. Sincronizarea se poate realiza prin trei
metode, dintre care numai dou" sunt folosite n MC, urmnd s" le consider"m doar
pe acestea n continuare. Oricare din metode presupune c" durata unui bit este
aceea#i att la emi!"tor ct #i la receptor (este folosit acela#i semnal de ceas pentru
serializarea informa!iei). Num"rul de bi!i transmi#i ntr-o secund" reprezint" rata
de transfer numit" baud rate; aceasta se m"soar" n bi!i/secund" (bps). Durata unui
bit este $/(baud rate).
Modulul serial asincron
Prima metod" considerat" este transferul serial asincron. Modulul serial
asincron este referit ca UART (Universal Asynchronous Receiver Transmiter).
ntr-un transfer serial asincron nceputul fiec"rui byte este marcat de o tranzi!ie a
liniei men!inut" pe durata corespunz"toare unui bit. Sfr#itul este marcat de
asemenea de un bit de stop; bitul de stop const" n men!inerea liniei pe durata unui
bit ntr-o stare predefinit". ntre bitul de start #i bitul de stop sunt transfera!i bi!ii de
informa!ie. O secven!" complet" este compus" dintr-un bit de start, opt sau nou"
bi!i de date #i un bit de stop, n total $0 sau $$ unit"!i de cod. Interfa!a serial"
asincron" poate fi implementat" n dou" moduri ntr-un MC.
Cea mai pu!in costisitoare solu!ie din punct de vedere al cheltuielilor de
resurse hardware este un program care s" genereze secven!a de transfer ca #i
componen!" #i ca durat" a fiec"rui bit. Programul trebuie s" m"soare durata
fiec"rui bit. Solu!ia este costisitoare din punct de vedere al timpului consumat n
rularea programului.
16 MICROCONTROLLERE
A doua solu!ie de implementare a interfe!ei seriale este #i cea mai des
ntlnit" n MC. Interfa!a este realizat cu un modul hardware specializat. Unitatea
central" nscrie informa!ia de transferat ntr-un registru al interfe!ei dup" care
sarcina serializ"rii #i a gener"rii secven!ei este finalizat" de c"tre hardware-ul
interfe!ei. n cazul recep!iei interfa!a preia secven!a recep!ionat", extrage
elementele de sincronizare #i nscrie datele efective ntr-un registru. Datele
recep!ionate sunt accesibile unit"!ii centrale n acest registru al interfe!ei. n cazul
n care registrul de transmisie este gol sau registrul de recep!ie este plin interfa!a
semnalizeaz" starea #i poate chiar suspenda temporar execu!ia programului
principal prin ntreruperi hardware. O schem" bloc simplificat" a unei interfe!e
seriale asincrone este reprezentat" n figura $.6.
Ceasul pentru generarea ratei de transfer poate fi intern sau extern. n cazul
n care se selecteaz" ceas intern, acesta se formeaz" din ceasul unit"!ii centrale cu o
prescalare. Pentru ca rata de transfer s" fie programabil" ceasul prescalat se
divizeaz" n continuare folosind un num"r"tor al unui timer din resursele proprii.
Interfa!a UART dispune de un registru de stare #i un registru de control cu ajutorul
c"rora se pot prgrama modul de lucru, parametrii de comunica!ie, selectarea
ceasului, divizarea ceasului.
Conexiunile interfe!ei seriale asincrone sunt disponibile la pini cu func!ii
multiple la unul din porturile paralele.
Magistrala intern"
Registru de
deplasare la
recep!ie
Registru de
deplasare la
transmisie
Cerere de ntrerupere c"tre UC
Buffer
recep!ie
Buffer
transmisie
Registru de
prescalare
Baud rate
Selec!ie ceas
CLK TxD RxD
Figura 1.6 Schema bloc a UART
$. Descriere general" 17
Modulul serial sincron
Urm"toarele dou" metode de sincronizare posibile la transferul serial sunt
transfer serial sincron #i transfer serial autosincronizat. Transferul autosincronizat
se bazeaz" pe utilizarea unui sistem special de codificare a datelor. Sistemul
permite ca din datele recep!ionate s" se poat" extrage semnalul de ceas. Aceast"
metod" nu este folosit" n MC.
Transferul serial sincron este folosit pentru comunica!ii locale ntre
procesoare sau cu dispozitivele periferice. n transferul sincron datele transferate
sunt nso!ite de semnalul de clock. Semnalul de clock este transferat pe o linie
dedicat". Transferul serial sincron necesit" trei conexiuni: emisie, recep!ie #i clock.
Interfa!a hardware este mai simpl" dect la transferul asincron. Protocolul dintre
emi!"tor #i receptor include o scurt" perioad" de sincronizare la ini!ierea unui
transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face
prin bitul de start al fiec"rui octet, la transferul sincron aceasta are loc o singur"
dat", la nceputul transferului unui bloc de date. Transferul serial sincron permite
rate de transfer mai mari dect transferul serial asincron; rate de $Mbps.
ntr-o conexiune serial" sincron" unul din dispozitive este master iar
cel"lalt este slave. Un transfer poate fi ini!iat doar de un master. Master-ul scrie un
octet n registrul de transmisie de date al interfe!ei seriale sincrone. Datele sunt
transferate unui registru de deplasare unde sunt serializate #i transmise pe linia de
emisie numit" MOSI (Master Output Slave Input). Pe linia SCK (Serial Clock) este
transmis clock-ul. La slave datele ajung tot pe linia MOSI ntr-un registru de
deplasare unde sunt deplasate cu ceasul recep!ionat pe linia SCK. La umplerea
registrului de deplasare datele sunt transferate n registrul de recep!ie de date.
Conexiunile interfe!ei seriale sincrone sunt disponibile la pini cu func!ii
multiple la unul din porturile paralele. Pinii asocia!i unei conexiuni seriale sincrone
sunt urm"torii:
MISO Master In Slave Out Pinul MISO este configurat ca intrare ntr-un
master #i ie#ire dintr-un slave. MISO este conexiunea prin care se transmit date
ntr-un sens (de la slave la master). Ie#irea MISO la un slave este n starea de nalt"
impedan!" dac" dispozitivul slave nu este selectat.
MOSI Master Out Slave In Pinul MOSI este configurat ca ie#ire dintr-un
master #i intrare ntr-un slave. MOSI este cea de-a doua conexiune prin care se
transmit date n cel"lalt sens (de la master la slave).
SCK Serial Clock Pinul SCK este ie#ire la un master #i intrare la un slave. Prin
aceast" conexiune se transmite semnalul de sincronizare pentru transferul datelor
pe liniile MISO #i MOSI. Pe durata a opt perioade ale SCK se transfer" ntre
master #i slave un byte de informa!ie.
nSS non Slave Select La pinul nSS se aplic" semnalul care selecteaz" un
dispozitiv slave; pentru un dispozitiv slave, semnalul trebuie s" fie activ (low) pe
toat" durata unei tranzac!ii n care este implicat. Pentru un dispozitiv master,
18 MICROCONTROLLERE
intrarea nSS se conecteaza permanent la $ logic; n cazul n care la master, intrarea
nSS devine 0, se seteaza un flag de eroare (MODF) n registrul de stare al interfe!ei
seriale sincrone. Pinul nSS al unui master poate fi configurat #i ca ie#ire de uz
general prin setarea unui bit n registrul de sens DDRD. Ceilal!i trei pini, aminti!i
anterior, sunt dedica!i interfe!ei sincrone atta timp ct este validat".
n sistemele care folosesc func!ia serial" sincron" exist" un master #i unul
sau mai multe dispozitive slave. Exist" mai multe solu!ii de interconectare; acestea
vor fi prezentate n continuare.
n cazul n care n sistem este un singur slave, conexiunea este f"cut" ca n
figura $.7.
Interfa!a serial" sincron" permite interconectarea mai multor dispozitive,
dintre care unul singur este master. Exist" dou" solu!ii pentru o conexiune multi-
slave. n una din ele master-ul folose#te ie#iri de porturi pentru a selecta
dispozitivul slave cu care se face transferul; n cealalt" solu!ie, toate dispozitivele
slave sunt selectate #i sunt legate n inel. Conexiunea cu selec!ia fiec"rui dispozitiv
slave este reprezentat" n figura $.8.
Un alt mod de a realiza o conexiune serial" sincron" n care exist" mai
mult dect un slave este reprezentat n figura $.9. Acest tip de conexiune difer" de
precedentul prin urm"taorele:
Pinul MISO al fiec"rui slave este conectat la pinul MOSI al
dispozitivului slave vecin. Pinul MOSI de la master este n continuare
conectat la pinul MOSI de la primul slave.
Pinul MISO de la master este conectat cu pinul MISO al ultimului
dispozitiv slave.
Intr"rile nSS ale tuturor dispozitivelor slave sunt conectate la mas". Nu
este necesar" comanad" de selec!ie de la master n aceast" conexiune.
SLAVE
Registru de
deplasare (8b)
MASTER
Registru de
deplasare (8b)
generator
clock
MISO MOSI
MOSI MISO
SCK SCK
nSS
nSS
+5V
Figura 1.7 Conexiune serial" sincron" master-slave
$. Descriere general" 19
Conexiunea din figura $.9 folose#te un num"r minim de pini pentru a
controla un num"r mare de dispozitive. Ca dezavantaj, master-ul nu poate selecta
un anume slave pentru transferul de date, datele trec prin toate dispozitivele din
inel pn" la dispozitivul adresat.
Interfa!a serial" sincron" este folosit" pentru a comunica cu periferice cum
ar fi un simplu registru de deplasare, un sistem de afi#are LCD sau un sistem de
conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfa!a
MOSI SCK MISO nSS
RD
SLAVE 0
MOSI SCK MISO nSS
RD
SLAVE $
MOSI SCK MISO nSS
RD
SLAVE k
MASTER
RD
SCK
MOSI
MISO
nSS
PB0
PB$
PBk
+5V
Figura 1.8 Conexiune serial" sincron" single-master multi-slave (varianta $)
.
MOSI SCK MISO nSS
RD
SLAVE 0
SCK
MASTER
RD
MOSI
MISO
nSS
MOSI SCK MISO nSS
RD
SLAVE $
+5V
MOSI SCK MISO nSS
RD
SLAVE k
Figura 1.9 Conexiune serial" sincron" single-master multi-slave (varianta 2)
.
20 MICROCONTROLLERE
direct periferice cu standarde diferite, provenite de la diver#i produc"tori.
Conexiunea serial" sincron" poate fi folosit" #i pentru a extinde num"rul de
intr"ri/ie#iri acolo unde acesta este limitat de num"rul de pini ai capsulei MC.
Interfe!ele seriale amintite sunt ntlnite n MC cu urm"toarele nume:
SCI (Serial Communications Interface) este un subsistem I/O serial
indepenent, de tipul full duplex asincron (UART) numit astfel n MC Motorola.
SPI (Serial Peripheral Interface) este un modul serial folosit pentru a
comunica sincron la distan!e mici cu viteze de pn" la 4 Mbps
SCI+ este similar cu SCI, are n plus suport pentru comunica!ii seriale
sincrone. Dispune de o ie#ire de ceas folosit" pentru a transfera date n mod sincron
cu un periferic de tip SPI.
SIOP (Simple I/O Port) este o implemenatre mai simpl" a SPI.
Module Timer
Natura aplica!iilor pentru care s-a n"scut microcontroller-ul implic" o
multitudine de func!ii de timp puse la dispozi!ia utilizatorului prin module de timp
numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai
mult sau mai pu!in complex. Un sistem timer obi#nuit pune la dispozi!ie un set de
func!ii implementate pe baza unui num"r"tor liber central #i a unor blocuri
func!ionale pentru fiecare func!ie n parte. Timer-ul are n structura sa, dintre toate
celelalte subsisteme, cele mai multe registre. Toate func!iile unui timer pot genera
ntreruperi independente; fiecare are controlul propriu #i propriul vector de
ntrerupere.
Modulele timer complexe sunt construite cu arii de num"rare programabile
(PCA). Pentru aplica!ii speciale n timp real s-au construit module timer cu unitate
aritmetic" #i logic" proprie.
Timer-ul este folosit pentru a m"sura timpul #i pentru a genera semnale cu
perioade #i frecven!e dorite. Timer-ele nu sunt doar circuite cu func!ii de
temporizare; n modulul timer sunt implementate cteva mecanisme care pun la
dispozi!ia utilizatorului func!ii specifice. Mecanismul de comparare permite
controlul unor semnale de ie#ire; mecanismul de captur" permite monitorizarea
unor semnale de intrare; num"r"toarele interne permit generarea de referin!e de
timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini
software, #.a. Timer-ul poate fi folosit practic pentru orice func!ie de timp, inclusiv
generarea unor forme de und" sau conversii D/A simple. Func!iile oferite de un
timer sunt:
$. Captur" la intrare (IC - input capture) - aceast" func!ie se bazeaz" pe
posibilitatea de a stoca valoarea num"r"torului principal la momentul apari!iei
unui front activ al unui semnal extern. Facilitatea permite m"surarea l"!imii
unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit" #i ca
referin!" de timp pentru declan#area altor opera!ii.
$. Descriere general" 21
2. Comparare la ie#ire (OC - output compare) - se compar" la fiecare impuls de
ceas valoarea num"r"torului principal cu cea a unui registru. Dac" se constat"
egalitate, n func!ie de programarea anterioar" pot avea loc urm"toarele
evenimente: declan#area unei ac!iuni la un pin de ie#ire (op!ional), setarea unui
flag ntr-un registru sau generarea unei ntreruperi pentru unitatea central"
(op!ional). Func!ia este folosit" pentru a genera ntrzieri sau pentru a genera o
form" de und" cu valori dorite pentru frecven!" #i pentru factorul de umplere .
3. ntreruperi n timp real (RTI real-time interrupt) ntr-un sistem exist"
sarcini care trebuiesc executate periodic sau care nu permit dep"#irea unui
interval limit" ntre doua execu!ii. Aceste sarcini sunt lansate ca rutine de
tratare a ntreruperii generate de timer.
4. COP (computer operating properly) watchdog aceast" func!ie este folosit"
pentru a reseta sistemul n cazul n care din erori de programare (bugs) sau
erori n desf"#urarea programului datorate perturba!iilor mediului, registrul
COP nu este accesat ntr-un interval de timp prescris.
5. Acumulare de pulsuri (pulse accumulator) este func!ia folosit" pentru a
num"ra evenimentele ce apar ntr-un interval de timp determinat sau pentru a
m"sura durata unui impuls.
Num!r!torul liber
n figura $.$0 sunt prezentate elementele de baz" din componen!a unui
timer, partea de num"r"tor liber.
Num"r"torul este pilotat de un clock provenit din clock-ul unit"!ii centrale
divizat cu un factor de regul" programabil. Num"r"torul este nscris cu 0 doar la
reset, iar n rest este un registru de tip read-only. Cnd num"r"torul tranzi!ioneaz"
din starea FFFFh n starea 0000h, se seteaza flag-ul TOF (timer overflow) aflat
Clock
MC
:
$,4,8,$6
TCNT(H) TCNT(L)
Num"r"tor
$6 biti
La RTI, COP #i
acumulator de impulsuri
TOI
TOF
Cerere de
ntrerupere
Figura 1.10 Schema bloc a unui timer (MC 68HC$$) num"r"torul liber
22 MICROCONTROLLERE
ntr-un registru neopera!ional asociat modulului timer. Pentru a autoriza generarea
unei ntreruperi este necesar s" fie setat un flag de autorizare (TOI).
Factorul de divizare a clock-ului este stabilit ntr-un registru asociat.
Registrul TCNT de $6 bi!i permite citirea st"rii num"r"torului. Se
recomand" citirea num"r"torului folosind o instruc!iune care opereaz" pe $6 bi!i; n
acest fel ambii octe!i ai num"r"torului apar!in aceleia#i st"ri de num"rare. Dac" se
fac dou" citiri, accesnd pe rnd partea mai semnificativ" #i partea mai pu!in
semnificativ", cele dou" informa!ii nu vor apar!ine aceleia#i faze de num"rare.
Captura la intrare
Unele aplica!ii necesit" cunoa#terea localiz"rii n timp a momentului n
care are loc un eveniment. ntr-un calculator, timpul fizic este reprezentat prin
con!inutul unui num"r"tor, iar apari!ia unui eveniment este reprezentat" printr-o
tranzi!ie de semnal. Momentul apari!iei evenimentului poate fi nregistrat prin
memorarea st"rii num"r"torului.
Func!ia de captur" la intrare este implementat" de un circuit care are
schema bloc reprezentat" n figura $.$$.
Timpul fizic este reprezentat de valoarea con!inut" de num"r"torul liber.
La apari!ia unui eveniment materializat printr-o tranzi!ie la pinul ICx, con!inutul
num"r"torului liber este preluat n latch-ul de $6 bi!i din blocul de captur".
Utilizatorul poate s" valideze func!ia de captur", poate s" aleag" frontul activ al
tranzi!iei #i poate s" autorizeze generarea unei ntreruperi c"tre unitatea central" la
detectarea frontului activ. Dac" un canal de captur" nu este validat, pinul de intrare
ce i este asociat poate fi folosit ca intrare de uz general. ntreruperile intr"rilor de
captur" sunt vectorizate, fiec"rei ntreruperi i este alocat" o pozi!ie bine definit" n
tabela vecorilor de ntrerupere.
Func!ia de captur" are multe aplica!ii, cteva din ele descrise pe scurt n
continuare:
Latch
$6 bi!i
TICx
ICxF
ICxI
Cerere de
ntrerupere
Detector de
tranzi!ii
Pin
ICx
Figura 1.11 Func!ia de captur" la intrare schema bloc
$. Descriere general" 23
$. Localizarea momentului apari!iei unui eveniment - func!ia de captur" este
foarte util" n cazul n care este necesar" cunoa#terea momentelor la care au
avut loc evenimentele. Num"rul de evenimente monitorizate sub acest aspect
este limitat de num"rul de canale de captur" ale MC.
2. M"surarea perioadei pentru m"surarea perioadei unui semnal necunoscut se
procedeaz" la determinarea timpului scurs ntre dou" tranzi!ii consecutive de
acela#i fel; dou" fronturi pozitive consecutive sau dou" fronturi negative
consecutive.
3. M"surarea l"!imii unui impuls Pentru a m"sura l"!imea unui impuls se
m"soara timpul scurs ntre un front pozitiv #i frontul negativ ce i urmeaz".
Deoarece num"r"torul liber este un num"r"tor pe $6 bi!i, intervalul maxim
m"surabil cu un ciclu de num"rare este limitat la de 2
$6
ori periada unui clock
(clock-ul num"r"torului). Dac" se m"soar" intervale mai mari, se va lua n
considerare #i num"rul de tranzi!ii de la valoarea maxim" la 0 a num"r"torului
liber.
4. Generarea unei ntreruperi Fiecare canal de captur" poate genera op!ional o
ntrerupere dac" se detecteaz" la intrarea de captur" frontul stabilit a fi activ.
5. Num"rarea unor evenimente considernd c" un eveniment este reprezentat de
o tranzi!ie de semnal, cu func!ia de captur" la intrare folosit" n combina!ie cu
func!ia de comparare la ie#ire, pot fi contorizate evenimentele ce apar ntr-un
interval de timp stabilit. La apari!ia unui eveniment se genereaz" o ntrerupere;
n rutina de servire a ntreruperii se incrementeaz" un contor de evenimente
realiznd astfel nregistrarea num"rului de apari!ii. Sfr#itul intervalului de
contorizare este stabilit cu ajutorul func!iei de comparare la ie#ire.
6. Referin!" de timp aplica!ia folose#te n combina!ie func!ia de captur" la
intrare #i func!ia de comparare la ie#ire. Dac" utilizatorul dore#te s" activeze un
semnal de ie#ire la un interval dorit dup" detectarea unui eveniment, se va
folosi func!ia de captur" la intrare pentru a stabili momentul apari!iei
evenimentului de referin!". Se va aduna la valoarea num"r"torului re!inut" la
captur" un num"r dorit de cicluri de num"rare #i se va transfera aceast" valoare
registrului de comparare. Cnd num"r"torul liber atinge valoarea
comparatorului se va genera o ntrerupere n rutina c"reia se va activa ie#irea
dorit".
Comparare la ie"ire
Scema bloc a componentei care realizez" func!ia de comparare este
reprezentat" n figura $.$2.
Un canal de comparare const" dintr-un comparator pe $6 bi!i, un registru
de comparare pe $6 bi!i, un circuit de generare de ntreruperi, o ie#ire de comparare
24 MICROCONTROLLERE
#i o logic" de comand". Un sistem timer dispune de mai multe canale de comparare
(68HC$$ are cinci canale de comparare).
Principala aplica!ie a unei func!ii de comparare este ntreprinderea unei
ac!iuni la un moment de timp viitor bine determinat, cnd num"r"torul liber atinge
o anumit" valoare. Ac!iunea ntreprins" ar putea fi comutarea unui semnal,
ac!ionarea unui ntrerup"tor electronic, aprinderea unui LED, etc. Pentru a folosi
func!ia de comparare este necesar" parcurgerea urm"toarei secven!e:
$. se copiaz" valoarea din num"r"torul liber (con!inutul registrului TCNT);
2. se adaug" la copie o valoare determinat" de ntrzierea dorit";
3. se transfer" rezultatul n registrul de comparare.
Ac!iunea dorit" la pinul ie#irii de comparare se specific" anterior de c"tre
utilizator ntr-un registru asociat modulului. Comparatorul compar" valoarea
num"r"torului liber TCNT cu valoarea din registrul de comparare la fiecare clock.
Dac" se constat" egalitate, se activeaz" ac!iunea specificat" la pinul de comparare
#i se seteaz" flag-ul asociat. De asemenea, se va genera o ntrerupere dac" aceasta a
fost validat" anterior prin bitul OcxI din registrul pentru validarea ntreruperilor.
ntreruperile sunt vectorizate; fiecare canal are o a adres" cunoscut" n tabela
vectorilor de ntrerupere.
ntreruperile n timp real RTI
Func!ia RTI este folosit" pentru a genera periodic ntreruperi; ntreruperile
pot fi folosite pentru a comuta ntre aplica!ii n sisteme multitasking sau pentru a
declan#a periodic execu!ia unei secven!e. Perioada apari!iilor ntreruperilor n timp
real este programabil". Ca rezolu!ie, func!ia de ntrerupere nu este la fel de
performant" ca #i func!ia de comparare.
Comparator
$6 bi!i
TOCx
OCxF
OCxI
Cerere de
ntrerupere
Figura 1.12 Func!ia de comparare la ie#ire schema bloc
Ctrl.
pin
Pin
OCx
$. Descriere general" 25
COP - Watchdog
COP (Computer Operating Properly) este un ceas de gard", numit
watchdog, folosit pentru a detecta erorile de program. Folosirea ceasului de gard"
este op!ional". n cazul n care se folose#te, programul utilizator trebuie s" reseteze
periodic un registru COP; dac" nu are loc resetarea, unitatea centrala decide c" a
ap"rut o problem" n rularea programului #i reseteaz" sistemul pentru a preveni o
desf"#urare necontrolat" a programului.
Func!ia ceasului de gard" poate fi realizat" folosind un canal timer de uz
general sau, situa!ia ntlnit" n mod obi#nuit la MC, ceasul de gard" este un timer
dedicat, folosit doar pentru func!ia gard". Structura unui modul watchdog este
reprezentat" n figura $.$3
Ceasul de gard" este un timer simplu compus dintr-un num"r"tor al c"rui
ceas de num"rare este programabil printr-un registru de prescalare. Dac" circuitul
este activat, num"r"torul num"r" continuu. Dac" num"r"torul ajunge la valoarea
cea mai mare (FFFFh, dac" este un num"r"tor de $6 bi!i). se genereaz" un RESET
c"tre unitatea central". Este sarcina programatorului s" scrie periodic n registrul de
control un cuvnt care s" ini!ializeze num"r"torul. n cazul n care programul a
pierdut controlul se va reseta sistemul.
Acumulatorul de impulsuri
Modulul timer poate s" dispun" de un registru acumulator de impulsuri. n
acest registru pot fi num"rate evenimente exprimate prin pulsuri sau pot fi
num"rate chiar pulsuri interne, provenite de la clock-ul unit"!ii centrale.
$. Num"rare de evenimente num"r"torul de 8 bi!i este incrementat la fiecare
front activ detectat la un pin. Un eveniment poate fi orice, segmente de
program, cicluri ale unui semnal de intrare, unit"!i de timp, etc. Pentru a fi
num"rate n acumulatorul de impulsuri, acestea trebuiesc transformate n
tranzi!ii.
BUS INTERN
Registru de
prescalare
Registru de
control
Num"r"tor
INIT
RESET
Figura 1.13 Schema bloc a unui modul watchdog
Clock
26 MICROCONTROLLERE
2. Num"rare gardat" num"r"torul de 8 bi!i func!ioneaz" n regim liber de
num"rare avnd la intrarea de clock un semnal provenit din clock-ul unit"!ii
centrale divizat cu un factor constant. O aplica!ie uzual" n acest mod de
func!ionare este m"surarea duratei unui puls (impuls singular). Num"r"torul
este nscris cu 0 la nceputul pulsului, iar la sfr#itul pulsului se cite#te valoarea
sa.
Module PWM
Un semnal PWM (Puls Width Modulation) este folosit n multe aplica!ii;
comanda motoarelor de curent continuu sau comanda surselor de alimentare pot fi
amintite ca principale aplica!ii. n figura $.$4 este reprezentat un semnal PWM.
Semnalul PWM este un semnal periodic la care se poate modifica n mod
controlat factorul de umplere. Modulele timer au resursele necesare gener"rii unui
semnal cu factor de umplere variabil. Deoarece, dup" cum am mai amintit,
semnalul PWM este utilizat n aplica!ii exist" module timer dedicate acestei
func!ii; modulele PWM. Un modul PWM poate genera mai multe semnale
modulate. Structura unui canal PWM este reprezentat" n figura $.$5.
Registrul de prescalare genereaz" clock-ul pentru un num"r"tor. Clock-ul
de num"rare este programabil. Con!inutul num"r"torului este comparat cu cel al
T$
T2
Factorul de umplere este
T2/T$
Fig. 1.14 Semnal PWM
clock
intern
Fig. 1.15 Schema bloc a canalului PWM
BUS INTERN
Num"r"tor
PWM
Comparator pe 8 bi!i
PWM
Registru prescalare
$. Descriere general" 27
registrului PWM. Ct timp rezultatul compara!iei este mai mic sau egal, se va
genera un unu logic la ie#irea PWM. Dac" rezultatul compara!iei este mai mare, se
va genera la ie#irea PWM un zero logic. Dac" registrele comparate sunt de opt bi!i
factorul de umplere poate fi ntre $/256 #i $. Un canal PWM odat" programat va
genera la ie#ire semnalul periodic continuu, f"r" interven!ia unit"!ii centrale.
Ca #i la celelalte componente func!ionale, n ceea ce prive#te global
modulele timer (includem #i modulele watchdog #i PWM) vor fi prezentate n
ncheiere cteva criterii de apreciere:
num"rul de canale timer #i dimensiunea registrului de num"rare;
flexibilitaea timere-lor, mecanisme implementate;
existen!a unui ceas de gard" (watchdog);
num"rul de canale PWM #i dimensiunea registrului PWM.
Module A/D $i D/A
Intr"rile/ie#irile analogice #i convertoarele A/D nu sunt considerate ca
parte definit" n contextul unui calculator; aceste elemente sunt importante n
schimb atunci cnd consider"m un microcontroller. Prezen!a modulelor A/D #i
D/A n structura unui MC contribuie la putereaacestuia n aplica!ii deoarece
interfa!area cu mediul presupune necesitatea de a prelucra sau de a elabora m"rimi
analogice.
Convertoarele A/D sunt des ntlnite printre perifericele on-chip.
Convertoarele D/A nu sunt ntlnite n mod uzual printre unit"!ile componente
deoarece sunt relativ u#or implementate n exterior. Un convertor D/A simplu
poate fi realizat folosind un timer n mod PWM #i integrnd pulsul n exterior cu
un simplu circuit RC.
Convertoarele A/D integrate pe chip sunt convertoare cu aproxima!ii
succesive sau mai rar, convertoare cu integrare. nsu#irile convertoarelor nu sunt
deosebite; sunt convertoare lente n compara!ie cu cele implementate n circuite
independente. Timpii de conversie obi#nui!i sunt plasa!i n intervalul $0s-25s.
Rezolu!ia este de 8, $0 sau $2 bi!i iar precizia de +/-$/2LSB. Modulul de conversie
este prev"zut #i cu un multiplexor analogic, astfel sunt disponibile mai multe
canale de intrare. Unele MC sunt echipate #i cu circuit de e#antionare/memorare. n
cazul n care circuitul de e#antionare/memorare lipse#te, semnalul analogic trebuie
men!inut constant pe durata unei conversii. Tensiunea de referin!" necesar"
convertorului poate fi generat" n circuit sau dac" nu, este necesar s" fie furnizat"
din exterior.
n continuare, n figura $.$6 este prezentat" o schem" bloc simpl" a unui
modul de conversie A/D. Circuitul analogic de intrare const" ntr-un multiplexor
analogic, un circuit de e#antionare/memorare #i un convertor A/D cu aproxima!ii
succesive. Tensiunea de referin!" pentru convertor #i masa analogic" sunt furnizate
din exterior la pini speciali. Clock-ul necesar convertorului este generat intern din
clock-ul unit"!ii centrale.
28 MICROCONTROLLERE
Modulul A/D folose#te un registru de control prin care se selecteaz"
canalul de conversie #i modul de lucru pentru circuitul de e#antionare/memorare.
Declan#area #i terminarea conversiei sunt semnalizate cu cte un bit tot n registrul
de control. Rezultatul conversiei este stocat n registrul de date. Registrul de date
va con!ine ntotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie
citit nainte de terminarea urm"toarei conversii, n caz contrar se pierde informa!ia
Conversia poate fi declan#at" intern, considernd bitul asociat din registrul
de control, sau din exterior printr-un semnal de comand" aplicat la pin.
Declan#area unei conversii la un moment de timp dorit, f"r" interven!ia unit"!ii
centrale, se poate realiza folosind un timer. Modulul poate fi programat s" execute
o conversie a unui canal #i s" se opreasc". Un alt mod de operare al modulului
poate fi conversia continu" a unui canal pna la recep!ionarea unei comenzi de
ncheiere. Un alt mod de operare este conversia ciclic" n care modulul execut" pe
rnd conversia fiec"rui canal, dup" care se opre#te. n acest ultim mod sunt folosite
de obicei mai multe registre de date pentru memorarea rezultatelor conversiilor.
Rezultatele sunt citite dup" ncheierea unui ciclu. La terminarea unui ciclu de
conversiei, op!ional, se poate genera o ntrerupere c"tre unitatea central".
n aplica!ii de precizie se recomand" ca pe durata conversiei s" se comute
unitatea central" n stare inactiv" pentru ca aceasta s" nu perturbe convertorul.
1.4 SISTEMUL DE NTRERUPERI
Sistemul de ntreruperi reprezint" mecanismul ce asigur" sincronizarea
func!ion"rii unit"!ii centrale cu evenimentele. Acest mecanism asigur"
implementarea unui r"spuns prompt #i specific al sistemului la orice cerere de
ADC0
ADC$
ADC2
ADC3
Mux
analogic
Convertor Analog Digital
Registru de control Registru de date
Selec!ie
canal
START STOP
Date
Figura 1. 16 Schema bloc a modului de conversie A/D
pin
start
E/nM
bus intern
$. Descriere general" 29
ntrerupere. Mul!i dintre produc"tori au realizat pentru diversele familii de
microcontroller-e variante constructive care difer" uneori substan!ial unele fa!" de
altele, scopul fiind fie acela al simplific"rii sistemului, fie acela al asigur"rii unor
facilit"!i ct mai adecvate aplica!iilor pentru care au fost proiectate respectivele
microcontroller-e.
nc" din anii $980-$985 s-a conturat un principiu care se confirm" #i
ast"zi: "fiecare func!iune complex" cu procesorul ei", respectiv "fiecare func!iune a
unui sistem de comand" cu rutina ei de servire a ntreruperilor".
Evenimentele, sunt acele st"ri din func!ionarea sistemului care trebuie
avute n vedere la controlul acestuia. Ele trebuie s" declan#eze, cu o ntrziere
minim", un r"spuns adecvat din partea sistemului, r"spunsul trebuind s" fie descris
de c"tre proiectant prin instruc!iuni incluse n cadrul unor rutine de servire a
ntreruperilor.
n cazul microcontroller-elor, ca de altfel #i n acela al microprocesoarelor,
aceste evenimente trebuie privite ca informa!ii de stare a sistemului, informa!ii ce
rezult" fie urmare a prelucr"rii de c"tre UC a datelor, (evenimente ce genereaz" a#a
numitele ntreruperi interne), fie urmare interac!iunii sistemului cu mediul
nconjur"tor (numite #i ntreruperi externe). Acest din urm" aspect este
preponderent n cazul microcontroller-elor.
Unitatea central" a MC analizeaz" n cadrul ultimei perioade de ceas
corespunz"toare fiec"rui ciclu instruc!iune eventualele cereri de ntrerupere postate
pe parcursul execu!iei instruc!iunii curente.
Ca orice sisteme deterministe, sistemele digitale dotate cu microcontroller-
e sunt ancorate, n func!ionarea lor, ntr-un spa!iu multidimensional ce are drept
dimensiuni parametrii proprii #i cei regla!i de c"tre sistem ("m"rimile de stare") #i
timpul. Sistemul de ntreruperi este informat asupra evolu!iei acestora prin canale
de transfer a informa!iilor generale (porturi, canale temporizatoare/num"r"toare)
sau specifice (interfe!e specializate UART, SPI, SCI, USB, I2C, etc), el dispune de
o unitate de analiz" a informa!iilor ("controller-ul de ntreruperi" - CI),
implementat" intern, conectat" via magistralele interne ale MC la unitatea de
control a programelor), precum #i de mecanismul prin care opre#te execu!ia de
c"tre UC a programului curent #i realizeaz" declan#area rutinei adecvate de servire
a ntreruperilor.
Realizarea st"rilor generatoare de cereri de ntrerupere este urmat" de
analiza acestora de c"tre CI. Aceast" analiz" presupune urm"toarele:
Identificarea sursei generatoare a cererii de ntrerupere;
Determinarea ordinii de servire a cererilor de ntrerupere, n cazul
apari!iei simultane a mai multor astfel de cereri.
Ambele etape pot fi implementate att hard ct #i soft, neexcluzndu-se
posibilitatea unor implement"ri mixte.
Identificarea sursei generatoare de ntrerupere se face prin corela!ia ce este
stabilit" ntre canalul de transfer al cererii, registrul/registrele de memorare al
acesteia #i adresa de memorie la care este plasat" adresa rutinei de servire a
30 MICROCONTROLLERE
ntreruperilor sau prima instruc!iune a rutinei de servire a ntreruperilor. Aceast"
situa!ie este ntlnit" la majoritatea microcontroller-elor, dar exist" #i excep!ii, cum
ar fi microcontroller-ele familiilor PIC "low range" #i "middle range" de la firma
Microchip, la care orice cerere de ntrerupere genereaz" execu!ia unei rutine al
c"rei nceput este plasat la o adres" unic", fix" de memorie.
Determinarea ordinii de servire, sau analiza priorit"!ii cererilor de
ntrerupere, presupune scanarea n faza de analiz" a tuturor canalelor de transfer
pentru cererile de ntrerupere sau a regi#trelor corelate cu acestea ntr-o anumit"
ordine prestabilit" hard. Multe microcontroller-e dispun de mecanismul
(implementat hard) ce permite "prioritizarea" unora dintre aceste canale, ceea ce
implic" implementarea unor unit"!i de memorare a priorit"!ilor (registre de setare a
priorit"!ilor pe dou" sau mai multe nivele) #i instituirea unor reguli de arbitrare.
Fiecare dintre aceste nivele va fi scanat distinct, n ordinea descresc"toare a
priorit"!ilor, majoritatea CI prezentnd doar dou" nivele de prioritate: prioritar #i
mai pu!in prioritar.
n procesul de scanare, primul canal "activ" - care genereaz" o cerere de
ntrerupere - va fi cel ce va fi "servit", respectiv va declan#a procesul de execu!ie a
rutinei de servire a ntreruperilor corespunz"toare.
Sunt ntlnite att microcontroller-e care permit ntreruperea unei rutine de
servire a ntreruperilor de c"tre o alt" cerere de ntrerupere mai prioritar"
(ndeob#te cunoscut ca sistem de ntreruperi "rentreruptibil"), ct #i
microcontroller-e care nu permit o astfel de ac!iune.
Mul!i produc"tori pun la dispozi!ia proiectantului cte un flag de
validare/invalidarea global" a ntreruperilor, ceea ce permite ca utilizatorul s"
modifice cum dore#te mecanismul de ac!iune la apari!ia unui ntreruperi: permite
sau inhib" o ntrerupere prioritar" ap"rut" ulterior uneia mai pu!in prioritare, dar pe
durata ct aceasta este servit".
Multe microcontroller-e dispun de un mecanism bazat pe flag-uri
(fanioane) de validare/invalidare a ntreruperilor, acest mecanism putnd fi
implementat att la nivelul UC al MC ct #i la / sau la nivelul CI, respectiv la
nivelul sistemului de analiz" a cererilor de ntrerupere. Registrele de memorare a
cererilor de ntrerupere sunt dublate de registre ce memoreaz" informa!ia de
validare a canalelor ntrerup"toare ("registre de validare a ntreruperilor" sau
"registre de mascare a ntreruperilor"), un canal corespunz"tor unei cereri de
ntrerupere invalidat" va fi ignorat n procesul de scanare a cererilor de ntrerupere.
Un principiu des aplicat la implementarea acestui sistem const" n aceea c"
fiecare flag este setat printr-un mecanism hard #i, n general, resetat soft, prin
execu!ia unor instruc!iuni de resetare a sa, ceea ce presupune pe de-o parte, luarea
n considerare prin program a st"rii semnalate, iar pe de alt" parte, asigur"
reanclan#area mecanismului de ntrerupere, pentru situa!ia n care starea respectiv"
se repet".
Domeniul de adrese de memorie (SRAM sau PROM) n care sunt plasate
instruc!iunile de start a rutinelor de servire a ntreruperilor poart" denumirea de
"tabel" a vectorilor de ntrerupere".
$. Descriere general" 31
Unele microcontroller-e prezint" o tabel" a vectorilor de ntrerupere cu
adrese fixe, specifice canalelor ntrerup"toare, spre exemplu I805$, Atmel, PIC,
altele permit plasarea tabelei vectorilor de ntrerupere la adrese de memorie ce sunt
stabilite de c"tre proiectant, este cazul, spre exemplu, micocontroller-elor din
familia Z80 (Z84$3, Z84$4, Z84$5, etc.)
n prima situa!ie, plasarea la adres" fix" a tabelei vectorilor de ntrerupere,
poate fi privit" ca o restric!ie n dezvoltarea unor programe de aplica!ie, dar aceasta
este doar o fals" problem"! Practic, noi putem realiza translatarea prin program a
tabelei vectorilor de ntrerupere la orice adres" de memorie prin simpla introducere
a unor instruc!iuni de salt ca prime instruc!iuni corespunz"toare canalelor
ntrerup"toare. Exemplific"m aceasta pentru familia 805$.
Tabela vectorilor de ntrerupere este cuprins" ntre adresele: 0003H #i
0023H. Programul de translatare va trebui s" se prezinte astfel:
CSEG
ORG 00H
START:
JMP MAIN ;Adresa de salt la progamul principal
;
ORG 03H ;Adresa din tabela vectorilor de ntrerupere
;corespunz"toare ntreruperilor externe de
;stare - canal 0 -
ISR_EXT0:
JMP NEW_ADDR_ISR0 ;Noua adresa a rutinei (poate fi plasat" n
;memoria RAM extern")
;
ORG 0BH ;Adresa din tabela vectorilor de ntrerupere
;corespunz"toare ntreruperilor datorate
;dep"#irii capacit"!ii de num"rarea a canalului
;0 num"r"tor/temporizator
ISR_T0:
JMP NEW_ADDR_ISR$ ;Noua adresa a rutinei (poate fi ;plasat" n
;memoria RAM extern")
;
ORG $3H ;Adresa din tabela vectorilor de ntrerupere
;corespunz"toare ntreruperilor externe de
;stare -canal $ -
ISR_EXT$:
JMP NEW_ADDR_ISR2
;
ORG $BH ;Adresa din tabela vectorilor de ntrerupere
;corespunz"toare ntreruperilor datorate
;dep"#irii capacit"!ii de num"rarea a canalului
;$ num"r"tor/temporizator
ISR_T$:
JMP NEW_ADDR_ISR3
;
;
32 MICROCONTROLLERE
ORG 23H ;Adresa din tabela vectorilor de ntrerupere
;corespunz"toare ntreruperilor provenite de la
;UART
ISR_SI:
JMP NEW_ADDR_ISR4
;
NEW_ADDR_ISR0:
;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la
;sursa extern" corespunz"toare canalului 0.
NEW_ADDR_ISR$:
;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate
;dep"#irii de num"rare la timer 0.
NEW_ADDR_ISR2:
;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la
;sursa extern" corespunz"toare canalului $.
NEW_ADDR_ISR3:
;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate
;dep"#irii de num"rare la timer $.
NEW_ADDR_ISR4
;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor provenite
;de la UART.
Plasnd n memoria RAM aceast" tabel" este posibil s" realiz"m ceea ce se
cheam" "servire dinamic" a ntreruperilor". Acest procedeu de servire a
ntreruperilor permite implemenarea u#oar" a comenzii unui automat secven!ial cu
un num"r finit de st"ri. (spre exemplu: cazul unei linii automate de montaj sau de
turnare, etc). Implementarea servirii dinamice a ntreruperilor const" n
modificarea succesiv" a adreselor la care plas"m rutina de servire a ntreruperii
(ISR).
n figura $.$7 prezent"m cazul unui automat cu un num"r de trei st"ri
distincte, fiecare rutin" de servire a ntreruperilor (ISR) va rescrie adresa rutinei de
servire corespunz"toare evenimentului urm"tor n tabela vectorilor de ntrerupere.
Este evident c" aceast" tabel" trebuie s" fie locatat" n memoria RAM a sistemului.
Primul
eveniment
ISR corespunz"toare
evenimentului $
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR2
Al doilea
eveniment
Al treilea
eveniment
ISR corespunz"toare
evenimentului 2
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR3
ISR corespunz"toare
evenimentului 3
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR$
Figura 1.17 Servirea dinamic" a ntreruperilor ntr-un automat cu trei st"ri
$. Descriere general" 33
Un exemplu tipic n acest sens l reprezint" tastaturile ce prezint" butoane
multi-func!iune. S" presupunem cazul butonului unic: START/STOP al unui utilaj.
Vom exemplifica procedeul de servire dinamic" prin programul care comut"
func!iunile butonului din START n STOP #i invers. Programul este conceput
pentru un microcontroller din familia 805$.
CSEG
ORG 00H
BOOT:
JMP MAIN
ISR_EXT0:
JMP BUTON
;S-a considerat c" prima linie de ntreruperi externe de stare reprezint" canalul de transfer al
;informa!iilor corespunz"tor butonului START/STOP
;
;nstruc!iunea corespunz"toare etichetei BUTON este plasat" n memoria RAM a
;sistemului de comand"
BUTON:
JMP BUTON_START
;
BUTON_START:
;
MOV DPTR,#BUTON+$
;ncarc" adresa din tabela vectorilor de ntrerupere
MOV A,#LOW(BUTON_STOP)
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH(BUTON_STOP)
MOVX @DPTR,A
;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor
;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine
RETI
BUTON_STOP:
;
MOV DPTR,#BUTON+$
;ncarc" adresa din tabela vectorilor de ntrerupere
MOV A,#LOW(BUTON_START)
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH(BUTON_START)
MOVX @DPTR,A
;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor
;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine
RETI
MAIN:
;
;Trebuiesc incluse instruc!iunile corespunz"toare programului principal
END
34 MICROCONTROLLERE
n cazul sistemelor 805$ sau 68xx-68xxx, tabela vectorilor de ntrerupere
este ampl" incluznd variate canale ntrerup"toare. Astfel, pentru ntreruperile
externe de stare se dispune de dou" linii de intrare INT0# #i INT$#, CI putnd fi
setat s" reac!ioneze fie pe front (cel negativ), fie pe nivel logic (cel sc"zut -low),
pentru canalele num"r"toare temporizare dispunem pentru fiecare de adrese de
servire corespunz"toare st"rilor de dep"#ire a capacit"!ii canalului ("overflow"), iar
pentru unitatea UART dispunem de un vector unic att la recep!ie ct #i pentru
transmisie. n cazul microcontroller-elor PIC (low/middle range) exist" o singur"
adres" (plasat" la 0004H) pentru ntreruperi externe, ceea ce impune pentru
proiectant s" scrie o rutin" de servire n care analiznd registrul ce memoreaz"
cererile de ntrerupere va decide asupra r"spunsului la cererea respectiv".
1.5 MANAGEMENTUL PUTERII
Pentru aplica!iile n care consumul de energie de la sursa de alimentare
este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din
modulele componente. Economia de energie este esen!ial" n cazul aliment"rii de
la baterii. Prin intrarea n starea de economie de energie memoria RAM nu-#i
schimb" con!inutul #i ie#irile nu-#i schimb" valorile logice. Sistemul de economie
de energie ofer" dou" moduri de operare care difer" prin num"rul componentelor
dezactivate. Aceste moduri sunt numite Idle, Power Down la MC Intel #i Wait,
Stop la MC Motorola. Intrarea n unul din modurile de operare cu economie de
energie se face prin comenzi software. MC Motorola dispun de instruc!iuni care
determin" intrarea n mod Wait sau Stop. MC Intel intr" n mod Idle sau Power
Down prin controlul unor bi!i din registrul PCON (Power Control Register).
n ambele moduri de operare este nghe!at" func!ionarea unit"!ii centrale.
n mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage
dup" sine blocarea tuturor func!iilor interne. Timer-ul va nghe!a #i interfe!ele
seriale #i vor opri activitatea. Sistemul de ntreruperi, dup" caz, este dezactivat
(MC Intel) sau poate s" ramn" activ (MC Motorola). Con!inutul memoriei #i al
registrelor interne nu este alterat, iar liniile I/O r"mn neschimbate. Din aceast"
stare se poate ie#i fie doar cu Reset la MC Intel. La MC Motorola se poate ie#i fie
cu Reset, fie la sesizarea unei ntreruperi externe (sistemul de ntreruperi nu este
dezactivat). n cazul n care revenirea se face la sesizarea unei ntreruperi externe
activitatea intern" este reluat" n acelea#i condi!ii n care a fost abandonat"
(num"r"toarele timere-lor continu" din starea pe care au avut-o la intrare n mod
Stop).
n mod Idle (Wait) este nghe!at" doar func!ionarea unit"!ii centrale,
celelalte func!ii folosite r"mn active (timer-ul, interfe!ele seriale #i sistemul de
ntreruperi). Starea unit"!ii centrale #i a tuturor registrelor este p"strat" ct timp
$. Descriere general" 35
MC se men!ine n mod Idle (Wait). Pinii de port p"streaz" starea pe care au avut-o
la intrarea n acest mod. Din modul Idle se poate ie#i prin Reset sau la sesizarea
unei ntreruperi interne sau externe.
Consumul de energie este minim atunci cnd sunt activate cele mai pu!ine
func!ii. Consumul minim de energie se ob!ine n modul de operare Power Down
(Stop). n modul Idle (Wait) consumul este redus fa!a de regimul de operare
normal" dar este mai mare dect n mod Power Down (Stop). n acela#i timp,
consumul n mod Idle (Wait) este cu att mai redus cu ct sunt mai pu!ine func!ii
active la intrare n mod. n mod Power Down (Stop) exist" posibilitatea unei
reduceri suplimentare a consumului prin reducerea tensiunii de alimentare (la unele
MC).
OnNow este o ini!iativ" actual" pentru modernizarea metodelor de
economie de energie n sistemele cu microprocesoare. Se inten!ioneaz" ob!inerea
unui consum de energie (pentru un calculator PC) de o treime din cel actual #i un
timp de ie#ire din starea inactiv" mai mic de 5 secunde. Informa!ii despre aceast"
in!iativ" se gasesc la adresa www.microsoft.com/hwedev/onnow.htm
Un alt aspect important al aliment"rii sistemelor construite cu MC este
calitatea semnalului furnizat de sursa de alimentare. Dac" nivelul tensiunii de
alimentare nu se ncadreaz" ntr-o plaj" permis" este posibil ca programul s"
func!ioneze defectuos, s" se abat" de la cursul firesc. Pentru a elimina acest risc, pe
care nu ni-l putem permite n sistemele de control, n MC sunt implementate
module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset de
sistem sau o ntrerupere n cazuri considerate limit".
LVR (Low Voltage Reset) este un circuit care monitorizeaz" tensiunea de
alimentare a unit"!ii centrale #i for!eaz" un reset dac" se constat" c" aceasta este
mai mic" dect un minim predefinit.
LVI (Low Voltage Interrupt) este un circuit care monitorizeaz" tensiunea
de alimentare a unit"!ii centrale #i genereaz" o ntrerupere dac" se constat" c"
aceasta este mai mic" dect un minim predefinit. ntreruperea for!eaz" executarea
unei rutine de oprire nefor!at".
1.6 SCHEMA BLOC A UNUI MC
Cu elementele prezentate pn" la acest punct schema bloc a unui MC poate
fi dezvoltat" (n compara!ie cu cele prezentate n figura $.$. #i figura $.2);
rezultatul este ilustrat n figura $.$8.
36 MICROCONTROLLERE
Schema este n continuare o reprezentare generalizat". Se poate observa c"
un MC este organizat n jurul unei magistrale interne pe care se vehiculeaz" date,
adrese #i semnale de comand" #i control ntre blocurile func!ionale.
Unitatea central" execut" instruc!iunile pe care le prime#te prin magistrala
de date din memoria program. Structura Harvard este posibil" #i r"spndit" la MC
pentru c" de regul" instruc!iunile sunt stocate n memoria ROM, iar datele n cea
RAM. Magistrala de date #i cea de adrese pot fi separate sau multiplexate.
Magistralele pot s" nu fie disponibile n exterior (Motorola 6805) sau pot fi
disponibile n exterior direct (MCS-5$) sau multiplexate (MC pe $6 sau 32 de bi!i).
Fiecare MC are un controller de ntreruperi care admite att intr"ri din
exterior ct #i de la modulele interne. Unele MC dispun de un controller DMA
propriu.
Modulele I/O pot fi seriale sau paralele. Fiecare modul transfer" date cu
exteriorul prin intermediul registrului de date (RD). Modulul este programat
(configurat) de unitatea central" prin intermediul unui registru de comenzi (RC) #i
se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera
ntreruperi c"tre unitatea central". Registrele modulelor I/O pot fi v"zute de UC ca
loca!ii de memorie (la familia Motorola) sau ca dispozitive de I/O ntr-un spa!iu de
Intr"ri/ie#iri
de date
Seriale/Paralele
BUS INTERN
UNITATE CENTRAL&
Registre
interne
Memorie
pentru
programe
Memorie
pentru
date
RD
reg.
de
date
RC
reg. de
co-
menzi
RS
reg.
de
stare
Controller de
ntreruperi
Controller DMA
Figura 1.18 Schema bloc generalizat" a unui microcontroller
DISPOZITIV I/O ($, 2, n)
Unitate de control
UAL
$. Descriere general" 37
adresare separat (MCS 5$). Sub numele de dispozitiv I/O, ntr-o abordare
generalizat", sunt cuprinse principalele interfe!e ale MC (timer, canal serial UART)
#i linii I/O grupate n porturi paralele de uz general. Acela#i nume generic poate
acoperi #i interfe!ele speciale ntlnite n configura!ii particulare de MC (convertor
A/D, interfa!" serial" sincron", interfa!" LCD, interfa!" USB, etc).
1.7 FAMILII DE MC
Microcontroller-ele se produc ntr-o mare diversitate n care exist" totu#i
elemente comune care permit o prezentare sistematic" a produsului. Pe baza unui
nucleu comun au fost definite familiile de microcontroller-e; nucleul este constituit
dintr-o unitate central", aceea#i pentru to!i membrii unei familii, #i o serie de
interfe!e #i periferice. Din punct de vedere al programatorului, to!i membrii unei
familii folosesc acela#i set de instruc!iuni, permit acelea#i moduri de adresare #i
folosesc acelea#i registre. Diferen!a ntre membrii unei familii const" n primul
rnd n echiparea chip-ului cu memorie (tip de memorie #i capacitatea memoriei).
Alte diferen!e pot fi g"site la frecven!a de clock pentru unitatea central" sau n
interfe!ele on-chip #i perifericele on-chip suplimentare fa!" de cel mai simplu
reprezentant al familiei. O diferen!" ntre membrii unei familii poate fi #i modul n
care sunt conectate semnalele la pin respectiv tipul capsulei de prezentare a
circuitului integrat. n cadrul acestui capitol, n continuare, sunt prezentate cteva
familii de microcontroller-e cu sublinierea nsu#irilor caracteristice #i considernd
numele produc"torului ca fiind unul din elementele reprezentative pentru o familie.
INTEL 4048 a fost primul MC ap"rut pe pia!", avnd o structur" Harvard
modificat", cu 64-256 octe!i de RAM #i este nc" folosit n multe aplica!ii datorit"
pre!ului sc"zut.
INTEL 8051 (MCS-5$) este a doua genera!ie de MC #i, n prezent, este
familia care se vinde cel mai bine; este fabricat #i de mul!i al!i produc"tori. Acest
MC are o arhitectur" Harvard modificat" cu spa!iu de adresare diferit pentru
program (<64K din care 4-8K pe chip) #i date (<64K din care $28-256 octe!i pe
chip, cu adresare indirect"). Dispozitivele I/O au un spa!iu propriu de adresare.
805$ dispune de un procesor boolean prin care se pot executa opera!ii complexe la
nivel de bit, iar n func!ie de rezultate se pot face salturi. Pentru 805$ exist" foarte
mult software, att contra cost ct #i gratuit.
INTEL 80C196 (MCS-96) este a treia genera!ie de MC propus" de
INTEL. 80C$96 este un MC pe $6 bi!i care admite un tact pn" la 50MHz. Acest
MC con!ine blocuri aritmetice pentru nmul!ire #i mp"r!ire, lucreaz" cu 6 moduri
de adresare, convertor A/D, canal de comunica!ii serial, controller de ntreruperi cu
8 surse, pn" la 40 de porturi I/O, generator PWM #i ceas de gard".
38 MICROCONTROLLERE
INTEL 80186 #i 80188 sunt MC propuse de INTEL ca versiuni a
popularelor microprocesoare 8086 #i 8088 care au echipat primele calculatoare
IBM PC XT. Pe chip sunt incluse 2 canale DMA, 2 num"r"toare/temporizatoare,
controller de ntreruperi #i bloc de refresh pentru memoria RAM. Exist" #i multe
versiuni, MC cu consum redus, cu canale seriale etc. Un mare avantaj la folosirea
acestor MC este faptul c" se pot folosi uneltele de dezvoltare (compilatoare,
asambloare etc.) de la PC-uri. Cine este familiarizat cu softul de PC poate trece
repede de etapa de nv"!are. Un alt avantaj este un spa!iu mare de adresare, specific
PC-urilor. INTEl a fabricat #i MC-ul 80386EX, o variant" a procesorului 386 care,
la puterea lui 386 mai are n plus canale seriale, canale DMA, num"r"toare/
temporizatoare, controller de ntreruperi, refresh pentru RAM dinamic, gestionarea
aliment"rii (Power Management).
65C02/W65C816S/W65C134S (Western Design Center). WDC a creat
procesorul pe 8 bi!i 65C02 folosit n calculatoarele Apple, Commodore #i Atari
urmat de procesorul pe $6 bi!i W65C8$6S #i un MC pe 8 bi!i avnd ca nucleu
procesorul de baz" 65C02.
Motorola MC14500 a fost primul MC realizat de Motorola. Acest MC n
arhitectur" RISC avea calea de date de un bit, $6 instruc!iuni #i era furnizat ntr-o
capsul" mic" ($6 pini). El a fost eliminat de pe pia!" de noile MC RISC.
Motorola 6805 se bazeaz" pe procesorul 6800 #i este asem"n"tor cu 6502
produs de WDC. Are o arhitectur" von Neumann n care instruc!iunile, datele,
dispozitivele I/O mpart acela#i spa!iu de adresare. Stiva este limitat" la 32 de
pozi!ii din cauza indicatorului de stiv" pe 5 bi!i. Unele MC din aceast" familie
includ convertoare A/D, sintetizoare de frecven!" cu PLL, canale seriale etc.
Motorola 68HC11 (preluat #i de TOSHIBA) este un MC popular pe 8 bi!i
de date #i $6 bi!i de adres", cu o arhitectur" ca #i 6805. 68HC$$ are inclus"
memorie EEPROM sau OTP, linii digitale I/O, num"r"toare/temporizatoare,
convertoare A/D, generatoare PWM, acumulator de impulsuri, canale seriale de
comunica!ii sincrone #i asincrone etc.
Motorola 683xx (MC68EC300) sunt super MC de nalt" performan!"
bazate pe un nucleu cu arhitecura procesoarelor 68xx, cu o filozofie #i performan!"
asem"n"toare MC INTEL 80386EX.
PIC (MicroChip) sunt primele MC RISC ap"rute, cu un num"r mic de
instruc!iuni (tipic 33, fa!" de 8048 care are 90). Simplitatea arhitecturii (Harvard)
duce la realizarea unui chip de mici dimensiuni, cu pu!ini pini, consum redus,
vitez" mare #i pre! mic. Aceste avantaje au impus MC PIC pe pia!". Exist" 3 linii
de MC PIC: low range, middle range #i high range (care se disting prin
dimensiunea cuvntului de program #i prin facilit"!i legate de structur") -
PIC$6C5xx, PIC$6C6xx #i PIC$7Cxx, din care linia $6C6xx este cotat" cel
mai bine pe pia!".
COP400 (National Semiconductor) este un MC pe 4 bi!i care are 5$2o-2K
ROM, #i 32x4- $60x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare
2,3V-6,0V. Sunt echipate cu num"r"toare/temporizatoare #i magistral"
$. Descriere general" 39
MICROWIRE. Aceste MC se fabric" n peste 60 de modele echivalente #i sunt
primele MC care au un pre! sub 0,5USD/bucat".
COP800 (National Semiconductor) este un MC de 8 bi!i care con!ine
MICROWIRE, UART, RAM, ROM, num"r"toare/temporizatoare de $6 bi!i,
controller de ntreruperi, comparator, ceas de gard", monitor de tact, generator
PWM, transmisie n infraro#u, convertor A/D cu 8 canale cu prescalare (admite #i
intr"ri diferen!iale), protec!ie la sc"derea tensiunii de alimentare, mod de a#teptare
#i HALT, un trigger SCHMITT #i circuit de trezire cu mai multe intr"ri (Multi-
Input-WakeUp). Eficien!a este dat" #i de un set puternic de instruc!iuni, majoritatea
fiind de un singur octet #i executate ntr-un singur ciclu. Exist" #i variante pentru
uz militar.
HPC (National Semiconductor) sunt MC pe $6 bi!i de mare performan!",
cu o arhitectur" von Neumann. Unitatea central" poate executa nmul!iri #i
mp"r!iri. Con!in n structur" func!iile executate de familia COP800 avnd n plus
canale seriale HDLC (High Level Data Link Control) #i elemente DSP, la o
tensiune de alimentare de 3,3V. MC din aceast" familie au multe aplica!ii n
telecomunica!ii, n sisteme de securitate, imprimante LASER, hard discuri, frne
ABS #i aplica!ii militare.
Proiectul PIRANHA (National Semiconductor) este un proiect de realizare
a unui MC RISC, primul MC dedicat aplica!iilor integrate. Acest MC are
avantajele arhitecturii RISC, deci pu!ine instruc!iuni, simplitate, modularitate.
Z8 (Zilog) a fost unul dintre primele MC. Modelul ini!ial avea UART,
num"r"toare/temporizatoare, DMA, 40 de linii digitale I/O, controller de
ntreruperi. Modelul Z867$ avea n ROM un BASIC simplu. Modelul Z86C95 are
o structur" Harvard, facilit"!i DSP etc. Un avantaj este c" se pot folosi pentru
extensii unele circuite de interfa!" din familia lui Z80.
HD64180 (Hitachi) este un MC puternic, cu structura #i posibilit"!ile lui
Z80, avnd n plus 2 canale DMA, canal de comunica!ii sincrone #i asincrone,
num"r"toare/temporizatoare #i controller de ntreruperi. Unele versiuni includ
EPROM, RAM #i PIO (Programmable Input Output). Ruleaz" instruc!iunile lui
Z80, dar n mai pu!ine cicluri #i are instruc!iuni n plus. Exist" variante care
func!ioneaz" pn" la $8MHz.
TMS370 (Texas Instruments) este similar cu 805$. Con!ine RAM, ROM
(OTP sau EEPROM), 2 num"r"toare/temporizatoare de $6 bi!i, controller de
ntreruperi, ceas de gard", generator PWM, convertor A/D cu 8 canale, SCI (port
serial asincron), SPI (port serial sincron), comparator, poate executa nmul!iri #i
mp"r!iri. Tactul poate fi pn" la 20MHZ, cu 5MHz tact de magistral".
1802 (RCA) este un MC mai vechi, cu o structur" apropiat" de un
microprocesor. Este folosit mai ales n aplica!ii spa!iale.
MuP21 (Forth) este un MC care are puterea de calcul a unui procesor
INTEL 80486 ($00MIPS) la un pre! mult mai mic. Are integrat un coprocesor
video care gestioneaz" o memorie video, deci se poate ata#a direct un monitor TV.
Acest MC a fost creat ca s" ruleze programul OKAD (program de proiectare VLSI)
#i execut" acest lucru de $0 ori mai repede ca un 486. Mup2$ are 40 de pini.
40 MICROCONTROLLERE
F21 (Forth) a fost conceput pentru aplica!ii multimedia #i procesare
paralel". Viteza ajunge la 250MIPS datorit" structurii care con!ine procesoare de
prelucrare analogic" #i procesor de interfa!" la re!eaua de calculatoare.
Tabelul $.6 prezint" caracteristicile de baz" pentru c!iva reprezentan!i din
dou" familii de MC foarte populare; 68HC$$ de la Motorola #i 805$ de la Intel.
Tabelul 1.6
Caracteristici principale pentru MC din dou# familii reprezentative
(68HC11 $i 8051)
Circuit RAM ROM/
(E)EPROM
Clock I/O A/D Timer
M68HC$$A0 256 - 0.476 s 4x8
$x6
4/8 9
M68HC$$A$ 256 5$2
EEPROM
0.476 s 4x8
$x6
4/8 9
M68HC$$A2 - 2048
EEPROM
0.476 s 4x8
$x6
4/8 9
M68HC$$A8 256 8K ROM
5$2
EEPROM
0.476 s 4x8
$x6
4/8 9
M68HC$$E$ 5$2 5$2
EEPROM
0.476 s 4x8
$x6
4/8 9
M68HC$$E9 5$2 $2K ROM
5$2
EEPROM
0.476 s 4x8
$x6
8 9
M68HC$$F$ $024 5$2
EEPROM
0.476 s 4x8
$x6
8 9
I 8035 64 - 2.5 s 3X8 - 2
I 8039 $28 - $.4 s 3X8 - 2
I 804$ 64 $024 ROM 2.5 s 3X8 - 2
I 8748 64 $024
EPROM
2.5 s 3X8 - 2
I 805$ $28 4096 ROM $ s 4X8 - 2
I 875$ $28 4096
EPROM
$ s 4X8 - 2
$. Descriere general" 41
1.8 CLASIFICAREA MC
Se pot considera multe criterii de clasificare a MC; de exemplu dup"
dimensiunea magistralelor, dup" interfe!ele pe care le au incluse n configura!ie,
dup" aplica!iile n care se folosesc, dup" furnizor etc. O clasificare sumar" a celor
mai uzuale MC, dup" compatibilitatea software, este:
MC cu arhitectur# CISC
Compatibile 805$
MOTOROLA 68xx
Compatibile x86
COP8 (National Semiconductor)
TMS370 (Texas Instruments)
ST (Thomson)
Alte arhitecturi (MC low cost) HITACI - 4bi!i, Z8 - 8 bi!i
MC cu arhitectur# RISC
Super H - Hitachi
PIC - MicroChip
AVR #i ARM - Atmel
2
PROGRAMAREA SISTEMELOR CU MC
2.1 PROIECTAREA PROGRAMELOR DE
APLICA!IE
2.1.1 Generalit"#i
Dezvoltarea aplica!iilor cu microsisteme presupune pe lng" proiectarea
circuitelor electronice aferente acestora #i specificarea n concordan!" cu aceasta,
prin instruc!iuni, a func!iunilor pe care sistemul trebuie s" le realizeze.
Prin faptul c" microsistemele dispun de circuite microprogramabile,
structura acestora va fi adaptat" aplica!iei specifice prin rularea programelor de
ini!ializare a sistemului, programe care duc la o configurare particular", specific".
Deci, una dintre func!iunile de baz" pe care microsistemele dotate cu
microcontroller-e trebuie s" o implementeze o reprezint" chiar propria configurare
-ini!ializare-, c"ci avnd drept suport aceea#i structur", un sistem realizeaz" noi
func!iuni ca urmare a program"rii ini!iale sau pe parcurs.
O problem" practic" ce este pus" la programarea microsistemelor o
reprezint" organigrama pe care trebuie s" o utiliz"m la proiectarea programelor de
func!ionare. Aceasta variaz" n raport cu "uneltele" soft avute la dispozi!ie:
asamblor
$
, compilator
2
, link-editor
3
, convertor OBJ-HEX
4
, depanator
5
, emulator
6
,
mediu de simulare
7
, etc.

$
Asamblorul este acel program ce converte#te fi#ierul surs" -fi#ier de tip text (ASCII) ce
con!ine instruc!iuni ale microcontroller-ului sub form" de mnemonice, n fi#ier obiect,
respectiv ntr-un fi#ier ce con!ine codurile ma#in" corespunz"toare instruc!iunilor
specificate n cadrul fi#ierului surs"
2
Compilatorul este acel program ce converte#te fi#ierul surs", scris n limbaj evoluat, n
fi#ier obiect.
2. Programarea sistemelor cu MC 43
Metodologia proiect!rii se bazeaz! pe analiza structurat! a aplica"iei, pe
separarea ct mai ra!ional" a func!iunilor sistemului n raport cu necesit"!ile de
comand" #i cu cele de sincronizare n timp. Se disting ca "stiluri" de programare,
stilul de programare ce utilizeaz" extensiv implementarea prin rutine specifice a
fiec"rei func!iuni, ceea ce duce la generarea unui program ce prezint" multe apeluri
de func!iuni, utilizeaz" o stiv" relativ extins", dar care folose#te eficient memoria
sistemului #i stilul de proiectare a programelor care specific" prin macro-uri fiecare
func!iune n cadrul programului principal #i minimizeaz" astfel num"rul de apeluri,
implicit reduce dimensiunea stivei, dar cre#te memoria necesar" pentru program.
Evident, !innd cont de varietatea aplica!iilor ct #i de varietatea
implement"rilor hard, nu este posibil" enun!area unei "re!ete" dup" care s"
proced"m! Fiecare aplica!ie va trebui s" fie tratat" adecvat, m"sura n care
implement"m prin rutine, direct n programul principal, sau n rutinele de servire a
ntreruperilor, func!iunile sistemului va depinde esen!ial de coordonata "timp",
respectiv, de m"sura n care putem ndeplini restric!iile specifice unui sistem de
comand" #i control n timp real.
Proiectarea programelor pentru un sistem impune ca proiectantul s"
considere n strns" corela!ie dou" aspecte: cel specific procesului #i cel ce !ine de
specificitatea procesorului.

3
Link-editorul realizeaz" cuplarea mai multor module de program memorate n fi#iere
obiect distincte #i aloc" zonele de memorie necesare programelor #i variabilelor utilizate de
c"tre acestea. Link-editorul favorizeaz" dezvoltarea structurat" a programelor precum #i
reutilizarea unor module de program n aplica!ii distincte.
4
Convertorul OBJ-IntelHEX, realizeaz" conversia din format OBJ (cod ma#in"), ntr-un
format ce con!ine: adresa de locatare, num"rul de octe!i ai liniei respective, tipul datelor
(cod sau date), #irul de coduri, suma de control corespunz"toare tuturor informa!iilor liniei
respective #i terminatorul de linie format din caracterele CR, LF.
5
Depanatorul permite execu!ia pas cu pas, sau secven!" dup" secven!", a unui program
aflat n faza de testare cu scopul de a releva interac!iunea acestuia cu procesul. n general
acest program func!ioneaz" npreun" cu un sistem de dezvoltare #i dispune de un monitor -
programul de baz" ce ofer" func!iuni de depanare pe sistemul de dezvoltare-
6
Emulatorul este programul care permite simularea func!iunilor #i instruc!iunilor
microcontroller-ului pe un alt sistem de calcul gazd". El poate prezenta unele restric!ii n
special n ceea ce prive#te posibilit"!ile de simulare a ntreruperilor. Acest program poate s"
func!ioneze att pe un calculator gen PC, ct chiar pe microcontroller-ul ce face obiectul
aplica!iei, atunci cnd acesta o permite. n aceast" din urm" situa!ie, sistemul cu
microcontroller are drept consol" chiar un PC, ce este conectat serial la sistemul cu
microcontroller. Emulatorul rezident pe circuit permite o simulare avansat" a
func!ionalit"!ii sistemului putndu-se verifica att func!ionarea programelor ct #i aceea a
rutinelor de servire a ntreruperilor.
7
Mediul de simulare este utilizat n cazul unor aplica!ii extrem de complexe, caz n care
practic sistemul ce implementeaz" aplica!ia este dezvoltat cu facilit"!i de depanare. Un
astfel de sistem formeaz" un mediu de simulare. El include att facilit"!i soft (att pe
sistemul gazd" ("host"), ct #i pe cel !int" ("target")), ct #i facilit"!i hard ce !in de existen!a
unor generatoare de semnal programabile, care s" ofere excita!iile adecvate.
MICROCONTROLLERE
44
De#i varietatea sistemelor este deosebit de larg", totu#i putem considera c",
n general, dou" clase de sisteme sunt preponderente, iar la limit" acestea sunt
unicele ntlnite n practic", #i anume:
sisteme de reglare, sisteme ce ndeplinesc una sau mai multe func!ii
scop, care sunt me!inute n limite de varia!ie prestabilite, #i
sisteme de control, respectiv sisteme ce implementeaz" un automat cu
un num"r finit de st"ri
Tot aici trebuie s" subliniem deosebit de strnsa leg"tur" ce apare ntre
aspectele "hard" ale sistemului #i aspectele "soft" ale acestuia. Aceast" leg"tur"
trebuie s" fie permanent n aten!ia proiectantului, el trebuie s"-#i "nchipuie" cum
!i n ce se traduce execu"ia fiec#rei instruc"iuni !i de asemenea, mai important,
s# "in# cont de sincroniz#rile ce apar n "via"a sistemului" ntre func"ionarea
unit#"ii centrale !i procesul reglat. Spre deosebire de programarea n limbaje de
nalt nivel sau nivel mediu, n cazul nostru rezultatele program"rii se traduc prin
ac!iuni specifice n cadrul sistemului, sistemul de ntreruperi jucnd un rol esen!ial.
Interac!iunile, n acest caz sunt uneori mai greu de vizualizat, de aceea n timp s-a
dezvolat o ampl" varietate de unelte de dezvoltare care sprijin" proiectantul de soft
n realizarea acestuia.
Prin sistem de dezvoltare se n!elege acel sistem ce include procesorul
mpreun" cu memoria aferent", (SRAM #i EPROM/Flash ) #i care dispune de
porturi, eventual de posibilitatea de generare de semnale, spa!iu pentru "cablarea"
unor subsisteme adi!ionale specifice (interfe!e analog digitale #i digital-analogice,
driver-e de putere, etc.) #i de programe "monitor
8
" rezidente n memoria fix" a sa,
ce implementeaz" dispozitivul logic "consol"" drept leg"tur" cu PC-ul. Aceste
programe pot dispune #i de alte rutine, cum ar fi un asamblor/dezasamblor ce
permite scrierea sau modificarea "on-line" a programelor ce ruleaz" pe sistem.
Sistemul dispune de "uneltele soft" ce ajut" la asamblarea programelor,
editarea acestora precum #i a datelor din memoria sistemului de dezvoltare, darea
n execu!ie a programului, oprirea acestuia n puncte prestabilite ("break points"),
vizualizarea st"rii registrelor generale, etc. Toate acestea presupun existen!a unui
dispozitiv logic, "consol"", care asigur" controlul sistemului, fie de o consol"
propriu-zis", fie, mai des, de c"tre un PC ce este conectat serial la sistem.
Aspecte specifice de programare apar #i ca urmare a arhitecturii
procesorului CISC, RISC sau SISC. Aceste aspecte sunt "detalii" extrem de
importante n programare, c"ci ele duc la modificarea stilului de proiectare a
programelor.
S" analiz"m pe rnd aceste aspecte.
Prin analiza necesit"!ilor impuse de implemetarea comenzii #i controlului
unui sistem, va trebui s" n!elegem urm"toarele.

8
Monitorul este acel grup de programe, rezident n memoria PROM/EPROM a unui sistem
de dezvoltare, care dispune de un set minimal de func!iuni ce ajut" la proiectarea #i
depanarea pe plac" a programelor scrise n cod ma#in".
2. Programarea sistemelor cu MC 45
Analiza necesit!"ilor de comand! #i control pe care le impune sistemul.
$. Canale digitale de transfer a informa!iilor - (vom avea n vedere,
num"rul acestora, #i modul n care ele pot fi grupate). Este bine s"
asigur"m corespunz"tor fiec"rei linii de comand", sau de achizi!ie
digital" cte un bit corespunz"tor n cadrul unor loca!ii de memorie ce
reflect" permanent starea acestora.
2. Canale analogice de transfer al informa!iilor - vor necesita alocarea
unui num"r de linii de ie#ire (este cazul convertoarelor digital-
analogice), respectiv un num"r de linii de intrare (este cazul
convertoarelor analog-digitale) ce este func!ie de tipul de convertor,
respectiv de interfa!a acestuia cu microsistemul.
3. Necesit"!ile de control a timpului - (frecven!ei, perioadei sau
ntrzierii) n cadrul sistemului sunt implementate prin utilizarea
judicioas" a canalelor temporizatoare.
Fiecare dintre aceste necesit"!i le vom exemplifica n continuare, urmnd
ca la capitolul de aplica!ii s" concretiz"m aceste exemple n programe mai ample.
Spre exemplu: dac" avem de comandat dou" motoare pas cu pas tetrafazate
(MPP) cu aceea#i frecven"! de comand" #i n acela#i sens, este evident c" vom
aloca liniile aceluia#i port drept linii de comand" ale acestuia. De ce? C"ci astfel
realiz"m dou" obiective: maximiz"m utilizarea liniilor unui port de 8 bi!i, a#a cum
sunt majoritatea, pe microcontroller-ele pe 8 bi!i, dar totodat" simplific"m
rezolvarea soft a comenzii, noi dedicnd astfel doar o loca!ie de memorie
(STATUS_MPP), drept copie a st"rii liniilor de comand" dedicate motoarelor.
Totodat" !innd cont c" majoritatea controller-elor dispun de instruc!iuni de rotire
(dreapta/stnga) a informa!iilor, comanda n secven!" simpl" a MPP nu va
presupune dect cteva instruc!iuni:
Ini!ializarea contorului de pa#i (STEPS$ #i STEPS2)
Ini!ializarea loca!iei de stare a MPP-urilor (STATUS)
Ini!ializarea timer-ului corespunz"tor frecven!ei de comand" a MPP
(SPEED_L, SPEED_H)
Definirea rutinei de servire a ntreruperilor, corespunz"toare canalului
temporizator (ISR_T0).
Aceast" rutin" va roti informa!ia din byte-ul de stare corespunz"tor, va
copia aceast" informa!ie la port #i n final va decrementa contorul de pa#i.
Se vor testa cele dou" loca!ii ce re!in num"rul de pa#i STEPS$ #i STEPS2
iar atunci cnd s-au executat pa#ii programa!i, comanda va fi ntrerupt".
Prezent"m n continuare acest program implementat pentru
microcontroller-e din familia 805$. Instruc!iunile acestui microcontroller sunt
prezentate n capitolul curent.
$ DSEG
0030 2 STATUS_MPP DATA 30H
;Loca!ia memoraz" starea comenzilor pentru MPP (secven!" simpl")
003$ 3 STEPS$ DATA 3$H ;Loca!ie nr. pa#i MPP$
MICROCONTROLLERE
46
0032 4 STEPS2 DATA 32H ;Loca!ie nr. pasi MPP2
0033 5 SPEED_L DATA 33H ;Loca!ie low(CT)timer 0
0034 6 SPEED_H DATA 34H ;Loca!ie high(CT)timer 0
7 BSEG
00$0 8 SENS BIT $0H ;Bit "sens de rota!ie MPP"
00$$ 9 COMMAND BIT $$H ;Bit comand" MPP
;Setarea acestui bit genereaz" ini!ierea mi#c"rii MPP. Pentru aceasta trebuie s"
;ini!ializ"m n prealabil: STEPS$, STEPS2, SPEED_L, SPEED_H #i SENS.
;Bitul SENS este setat la rotirea spre stnga #i resetat la rotirea spre dreapta
$0 CSEG
$$ EXTRN CODE(INIT) ;Declara!ie rutina INIT extern"
0000 $2 BOOT:
0000 020054 $3 JMP MAIN
0003 $4 ISR_EXT0: ;nceputul tabelei vectorilor de ntrerupere
0003 02000E $5 JMP ISR_T0
000B $6 ORG 0BH
000B $7 ISR_TIMER0:
000B 02000E $8 JMP ISR_T0
000E C0D0 $9 ISR_T0: PUSH PSW ;Salvare PSW n stiv"
00$0 C0E0 20 PUSH ACC ;Salvare Acumulator
00$2 D2D3 2$ SETB PSW.3 ;Comutare n bancul $ de registre generale
00$4 E53$ 22 MOV A,STEPS$ ;ncarc" n A nr.pa#i MPP$
00$6 B4000C 23 CJNE A,#0,CONT_0$ ;Test STEP$=0?
00$9 E532 24 MOV A,STEPS2 ;Da!
00$B B40026 25 CJNE A,#0,CONT_02 ;Test STEP2=0?
00$E C28C 26 CLR TR0 ;Anulare func!ionare timer $
0020 D0E0 27 END_ISR: POP ACC ;Da! Ie#ire ISR
0022 D0D0 28 POP PSW ;Refacere stare registre generale
0024 32 29 RETI ;Ie#ire din ISR
0025 E532 30 CONT_0$: MOV A,STEPS2 ;STEP$<>0
0027 B400$2 3$ CJNE A,#0,CONT_03 ;Test STEP2=0?
002A E530 32 MOV A,STATUS_MPP ;Da! STEP$<>0, STEP2=0
002C 540F 33 ANL A,#0FH ;Mascheaz" bi!ii corespunz"tori MPP 2
002E $53$ 34 DEC STEPS$ ;Actualizeaz" contor de pa#i MPP$
0030 20$006 35 EXEC_STEP: JB SENS,LEFT ;Test sens rota!ie MPP
0033 03 36 RR A ;Rote#te informa!ia de comand" la dreapta
0034 F590 37 EXEC_BOOTH: MOV P$,A ;Scrie comanda c"tre MPP
0036 02004C 38 JMP REPRG_T0
0039 23 39 LEFT: RL A ;Rote#te informa!ia de comand" la dreapta
003A 80F8 40 JMP EXEC_BOOTH
003C E530 4$ CONT_03: MOV A,STATUS_MPP ;STEP$<>0, STEP2<>0
003E $53$ 42 DEC STEPS$
0040 $532 43 DEC STEPS2 ;Actualizare informa!ie de pa#i
0042 80EC 44 JMP EXEC_STEP
2. Programarea sistemelor cu MC 47
0044 E530 45 CONT_02: MOV A,STATUS_MPP ;STEP2<>0, STEP$=0
0046 54F0 46 ANL A,#0F0H ;Mascheaz" bi!ii corespunz"tori MPP $
0048 $532 47 DEC STEPS2
004A 80E4 48 JMP EXEC_STEP
004C 85338A 49 REPRG_T0: MOV TL0,SPEED_L
004F 85348C 50 MOV TH0,SPEED_H ;Reprogrameaz" timer0
0052 80CC 5$ JMP END_ISR
0054 52 MAIN:
0054 $20000 F 53 CALL INIT ;Execut" rutina de ini!ializare sistem
0057 20$$02 54 LOOP: JB COMMAND,START_MPP
005A 80FB 55 JMP LOOP
005C D28C 56 START_MPP: SETB TR0 ;Valideaz" temporizare T0
005E C2$$ 57 CLR COMMAND ;Anuleaz" comanda0060 80F5
58 JMP LOOP ;Cicleaz" (A#teapt"!)
END
n cazul n care realiz"m controlul unui semnal analogic cu ajutorul
sistemului format din microcontroller #i convertor digital-analog de $2 bi!i avnd
drept interfa!" o interfa!" paralel", vom dedica $2 linii din cadrul a dou" porturi
acestui scop.
ntr-un mod analog, putem defini #i opera!iile de citire a informa!iilor de
stare att cele corespunz"toare unor m"rimi analogice ct #i cele corespunz"toare
m"rimilor digitale. Vom dedica fiec"rui semnal analogic loca!ii de memorie avnd
o l"!ime a cuvntului cel pu!in egal" cu rezolu!ia convertorului ( $ byte pentru o
rezolu!ie de 8 bi!i, 2 bytes pentru rezolu!ii mai mari de 8 bi!i #i pn" la $6 bi!i,
respectiv 3 bytes pentru rezolu!ii cuprinse ntre $7 #i 24 de bi!i, etc.)
Deci, num"rul de linii dedicate transferului de informa!ii va depinde de
interfa!a convertorului, iar memoria alocat" re!inerii st"rii corespunz"toare m"rimii
va fi mai mare sau egal" cu rezolu!ia convertorului, vorbim de ceea ce ndeob#te se
nume#te "alinierea" datelor, respectiv asigur"m uniformitatea dimensiunii loca!iilor
de memorie dedicate variabilelor sistemului ceea ce u#ureaz" accesul la informa!ie
prin folosirea unor indec#i adecva!i.
Necesit"!ile de control a timpului sunt satisf"cute prin dedicarea unor
canale temporizatoare/num"r"toare. Aici apar cele mai delicate probleme, mai ales
n cazul unor sisteme ce controleaz" procese cu constante de timp mici. n acest
caz critic, este necesar s" aloc"m pentru controlul ntrzierii respective un canal
temporizator separat, s" minimiz"m num"rul de instruc!iuni ale rutinei de servire a
ntreruperilor #i s" analiz"m, iar apoi s" set"m cu aten!ie priorit"!ile stabilite la
arbitrarea ntreruperilor. Va trebui ca sistemul nostru s" satisfac" cerin!elor impuse
de teorema e#antion"rii att la achizi!ia de semnal ct #i n comand", ceea ce
presupune ca frecven!a minim" de e#antionare s" fie mai mare dect dublul
frecven!ei maxime ce intervine n cadrul procesului reglat.
Nu trebuie s" uit"m c" n cazul unui sistem controlat de c"tre un
microcontroller paralelelismul n ac"iune #i interac"iunea cu procesul se mbin"
MICROCONTROLLERE
48
continuu, ceea ce indeob#te poart" denumirea de "concuren"!". Aceast" proprietate
are un rolul esen!ial n cazul unui sistem dedicat (ncapsulat - "embedded").
Deseori, pentru sisteme relativ lente putem g"si o perioad" minim" de
temporizat, rutina de servire a ntreruperilor, corespunz"toare acesteia putnd fi
utilizat" pentru controlul mai multor comenzi, ce prezint" constante de timp
multipli ai temporiz"rii de baz". Dac" acest semnal de ceas l folosim pentru
analiza st"rii globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem
de operare
9
n timp real, specific. Un program monitor, (supervizor) va putea
analiza periodic starea sistemului #i va decla#a task-ul, rutina adecvat" st"rii. n
acest caz, construind uneltele minimale #i anume task
$0
-uri, rutine
$$
#i subrutine
$2
vom putea scrie mult mai u#or programe pentru sisteme distincte, asigurnd astfel
un grad de portabilitate
$3
ridicat al aplica!iilor.
Implementarea program"rii structurate presupune decelarea acelor ac!iuni
repetabile #i executate cu parametri diferi!i n mai multe etape din evolu!ia
sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruc!iuni
apelabile din programul principal.
Un rol esen!ial l joac" #i modul n care realiz"m gestiunea resurselor de
memorie. Acestea sunt dedicate ctorva scopuri #i anume:
$. Salveaz" starea sistemului. n acest sens dispunem de zone de memorie
accesibile de byte #i pe bit, zon" numit" de obicei "vector de stare".
Dimensiunea acestei memorii este specific" aplica!iei.
2. Salveaz" temporar informa!iile din registrele generale la apelarea rutinelor sau
la execu!ia rutinelor de servire a ntreruperilor, n general implementarea
acestei memorii se face utiliznd un pointer memorat ntr-un registru special al
unit"!ii centrale numit "Stack Pointer", mecanismul de acces fiind implementat
hard pentru fiecare microcontroller. Respectiva memorie poart" denumirea de
"stiv"" #i poate fi plasat" la orice adres" valid" de memorie(intern" sau extern"
microcontroller-ului), dimensiunea ei avnd un caracter dinamic.
3. Salveaz" informa!iile ce sunt achizi!ionate, transferate sau prelucrate de c"tre
sistem formnd ceea ce ndeob#te se nume#te "buffer" sau memorie tampon.

9
Prin sistem de operare n timp real n!elegem ansamblul de rutine ce ofer" principalele
rutine de comand" #i control a sistemului, cu condi!ia respect"rii teoremei de e#antionare
att n comad" ct #i n control
$0
Prin task n!elegem acele unit"!i de program executabile independent #i care de regul"
implementeaz" o singur" func!iune ce este apelat" de c"tre planificatorul (n cazul nostru,
programul principal) sistemului.
$$
Rutinele implementeaz" por!iuni mici de program, ce trateaz" evenimente ce apar n
func!ionarea sistemului. Sunt caracterizate prin rapiditate n execu!ie #i de regul" sunt
asociate unui anumit eveniment decelabil de c"tre planificatorul sistemului de operare sau
decla#ate de c"tre o cerere de ntreruperi.
$2
sunt por!iuni de program apelate de c"tre task-uri, #i pot fi: dedicate, cazul celor activate
de c"tre un "anumit" task, comune, cele apelate de c"tre mai multe task-uri #i re-entrante,
cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile.
$3
Prin portabilitate n!elegem gradul de reutilizare a programelor scrise pentru un anume
sistem la o clas" larg" de sisteme analoge celui ini!ial.
2. Programarea sistemelor cu MC 49
Aceasta este organizat" dup" principii ce pot diferi: FIFO prima dat" memorat"
este #i prima dat" extras", (First In First Out) sau ultima dat" memorat" este
prima dat" extras" LIFO (Last In First Out), etc. Dimensiunea zonei de
memorie este adecvat" aplica!iei #i fluxurilor informa!ionale vehiculate. Tot n
aceast" categorie putem ncadra acele zone de "memorie comun"", utilizate de
c"tre task-uri diferite ce ruleaz" pe sistem, zon" prin intermediul c"reia sunt
pasate informa!ii de la un task la altul n scopul sincroniz"rii acestora. De
asemenea n cazul unor sisteme multiprocesor se implementeaz" stive circulare
de mesaje ce asigur" arbitrarea accesului procesoarelor la zona de memorie
comun", implementndu-se a#a numita c"su!" po#tal" ("Mail Box"), etc.
Dimensiunea acestor zone poate fi att variabil" ct #i fix".
2.1.2 Instruc#iuni ale MC
Este evident c" n cazul program"rii microsistemelor un rol deosebit de
important l joac" setul de instruc!iuni al microcontroller-ului. Dac" n limbajele de
nivel mediu sau nalt, limbajele prezint" un caracter independent de structura
procesorului, limbajele ma#in" sunt limbaje specifice. Aceasta presupune un grad
de detaliere mult mai ridicat ceea ce implic" #i cunoa#terea registrelor interne #i a
flag-urilor indicatoare de condi!ie specifice unit"!ii centrale, cunoa#terea structurii
interne, respectiv a memoriei interne #i a modului n care aceasta este organizat",
cunoa#terea porturilor de intrare/ie#ire #i a canalelor num"r"toare/temporizatoare.
Cu toate acestea, reprezentarea grafic" a evolu!iei unui sistem cap"t" o
r"spndire din ce n ce mai larg", ea oferind o reprezentare general" a algoritmilor
de func!ionare ai sistemelor.
Spre exemplu, reprezentarea EBNF (Extended Backus-Naur Form)
utilizeaz" simbolurile terminale
$4
#i neterminale
$5
care sunt conectate n diagrame
(grafuri) sintactice ce formeaz" un graf orientat. n cadrul acestor grafuri s"geata
exprim" o formulare sintactic" acceptat". Pot fi ntlnite urm"toarele reprezent"ri:
succesiunea, ramifica!ia sau alternativa #i bucla sau repeti!ia. Corespunz"tor
acestor formul"ri, limbajele de programare ale microcontroller-elor, ofer"
instruc!iuni (reprezentabile ca "atomi" lexicali) ce implementeaz" traiectoriile
definte cu ajutorului grafului de fluen!". Trebuie men!ionat c" n setul de ac!iuni se
disting cteva clase de instruc!iuni prezente la toate microcontroller-ele, #i anume:
$. Instruc!iuni ce pot fi succesive (pot fi n#irate unele dup" altele) #i care
realizeaz" n general fie un transfer de informa!ie, fie o opera!ie artmetico-
logic", fie o alt" ac!iune la nivelul unit"!ii centrale.

$4
Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompu#i n
continuare.
$5
Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri
terminale.
MICROCONTROLLERE
50
2. Instruc!iuni de decizie (test), care implementeaz" o ramifica!ie a grafului, n
general, la nivelul limbajului ma#in", aceastea sunt instruc!iuni ce
implementeaz" dou" alternative (deci sunt de tip binar). n cazul
microcontroller-elor nu ntlnim dect bifurca!ii.
3. Instruc!iuni de tip repetitiv, sau instruc!iuni ce implementeaz" o bucl" de
program #i care sunt reprezentate prin instruc!iuni de test ce se execut" fie la
nceputul, fie la sfr#itul unui bloc de program
Vom exemplifica pentru dou" familii de microcontroller-e (Intel 805$ #i
PIC -"middle range") cele mai sus afirmate, urmnd ca n prezentarea de detaliu a
familiilor de procesoare s" trat"m exhaustiv aceste instruc!iuni
$6
.
Familia 805$ Familia PIC "middle range"
Mnemonic Ac!iunea Mnemonic Ac!iunea
MOV A,<src> A <- <src> MOVF f,d d=0 W <- <f>
MOV <dest>,A <dest> <- A d=$ W <- <f>
MOV <dest>,<src> <dest> <- <src> MOVWF <f> <- W
MOV DPTR,#data$6 DPTR <-data$6 MOVLW W <- data8
PUSH <src> INC SP,@SP <- <src>
POP <dest> DEC SP,<dest> <- @SP
XCH A,<byte> A <-> <byte>
XCHD A,@Ri A <-> <@Ri>
MOVX A,@Ri A <- @Ri
MOVX @Ri,A @Ri <- A
MOVX A,@DPTR A <- @DPTR
MOVX @DPTR,A @DPTR <- A
MOVX A,@DPTR A<-@DPTR
SWAP A A[high] <-> A[low] SWAP f,d d=0f[high] <->f[low]
ANL A,<byte> A <- <byte> ANDWF f,d d=0 W<-W * <f>
ANL <byte>,A <byte> <- A d=$ f<-W * <f>
ANL
$7
< byte > <-data8 <byte><- data8 ANDLW
$8
k
$9
W <- W*k
ADD A,<byte> A<-A+<byte> ADDWF f,d d=0 W<-W+f
ADDC A,<byte> A<-A+<byte>+C
20
d=$ f<-W+f
ADDLW
2$
k W <- W+k

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

2$
ADDWF execut" func!ia aritmetic" adunare ntre operanzi, analog avem SUBLW pentru
sc"dere #i respectiv ADDLF/SUBLW pentru adunare/sc"dere data pe 8 bi!i
MICROCONTROLLERE
52
Familia 805$ Familia PIC "middle range"
Mnemonic Ac!iunea Mnemonic Ac!iunea
MUL AB A[low]<-
AxBB[high]<-AxB
DIV AB A<- int(AxB) A<-
mod(AxB)
RR A A
0
->A
7
A
7
->A
6 .
RRF A
0
->A
7
A
7
->A
6 .
RRC A A
0
->C C->A
7 .
RL A A
7
->A
0
A
0
->A
$ .
RLF A
7
->A
0
A
6
->A
7 .
RLC A A
7
->C A
6
->A
7 .
JMP addr
22
PC
23
<-addr GOTO addr PC <-addr
CALL addr @SP <- PCPC <- addr CALL addr @SP <- PCPC <- addr
RET PC <- @SP RETURN
RETI
24
PC <- @SP RETFIE
RETLW k PC<-@SP, W<-k
SETB b
25
b <- $ BSF f,b f
b
<-$
CLR b b <- 0 BCF f,b f
b
<-0
INC A A <-A+$ INCF f <- f + $
INC DPTR DPTR<- DPTR +$
DEC A A <- A-$ DECF f <- f - $
DEC < byte> Byte<-byte-$
Instruc!iunile mai sus prezentate fac parte din prima categorie. Lista
complet" de instruc!iuni este detaliat" pe CD la capitolele corespunz"toare celor
dou" microcontroller-e. Urmeaz" instruc!iunile de decizie:
Familia 805$ Familia PIC "middle range"
Mnemonic Ac!iunea Mnemonic Ac!iunea
JB addr_rel b=$ =>PC<-PC+addr_rel BTFSC f,b f
B
=0 =>PC<-PC+2
Salt peste instr. urm"toare
JNB addr_rel
26
b=0 =>PC<-PC+addr_rel BTFSS f,b f
B
=$ =>PC<-PC+2
Salt peste instr. urm"toare
JZ addr_rel A=0 =>PC<-PC+addr_rel
JNZ addr_rel A0 =>PC<-PC+addr_rel
JC addr_rel C=$ =>PC<-PC+addr_rel
JNC addr_rel C=0 =>PC<-PC+addr_rel
JBC bit,addr_rel b=$ =>PC<-
PC+addr_rel,b <- 0
Ultimul tip de instruc!iuni, cel de ciclare este ilustrat doar prin cteva
exemple:

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

27
Prin "mapare" n!elegem definirea unei func!iuni surjective ce are drept mul!ime de
defini!ie mul!imea porturilor #i celorlalte dispozitie periferice #i ca domeniu al valorilor un
subdomeniu din spa!iul de adrese corespunz"tor memoriei interne a microcontroller-ului.
MICROCONTROLLERE
54
Vom descrie pe rnd care sunt elementele necesare #i ce rezult" la
parcurgerea fiec"rei etape n cadrul procesului de proiectare a programelor de
aplica!ie n cazul utiliz"rii uneletelor specifice procesoarelor 805$.
Asamblarea fi#ierelor surs" scrise n limbaj ma#in" #i salvate ca fi#iere
Figura 2. 1 Etapele proiect"rii programelor pentru un sistem dedicat
EDITAREA
FI$IERELOR
SURS% (asamblare)
(FORMAT ASCII)
EDITAREA
FI$IERELOR SURS%
(n limbaj C)
(FORMAT ASCII)
ASAMBLAREA
FI$IERELOR
SURS%
COMPILAREA
FI$IERELOR
SURS%
BIBLIOTECI
(DIVERSE)
LINK-EDITAREA
CONVERSIA FI$IERELOR
OBIECT N FI$IERE FORMAT
INTEL-HEX
TRANSFERUL FI$IERELOR PE
SISTEMUL DE DEZVOLTARE $I
DEPANAREA APLICA!IEI
SCRIEREA PROGRAMULUI DE
FUNC!IONARE N MEMORIA
EPROM/FLASH A SISTEMULUI
FI$IER SURS%
MACRO
ASSEMBLER
A51
FI$IER OBIECT
RELOCATABIL
FI$IER
LISTING
Figura 2.2 Rolul macro/asamblorului n generarea fi#ierelor obiect
2. Programarea sistemelor cu MC 55
ASCII este descris" n figura 2.2.
n cazul utiliz"rii unor module de program scrise n C, fi#ierele surs" vor fi
compilate rezultnd n urma compil"ri acelea#i fi#iere ca #i n cazul asambl"rii.
n figura 2.3 prezent"m care sunt fi#ierele de intrare #i cele de ie#ire n
cazul utiliz"rii programului link-editor
Dup" "legarea" utiliznd link-editorul a modulelor de program rezult"
module obiect absolute care vor fi cu ajutorul debbuger-ului, sau al unui simulator
sau al unui emulator, nc"rcate #i testate pentru a se eviden!ia intercorela!iile ce se
stabilesc ntre programe #i sistemul controlat.
Pentru transferul fi#ierelor fie c"tre sistemul de dezvoltare, fie c"tre un
programatorul universal este necesar s" ob!inem plecnd de la fi#ierul obiect
absolut fi#iere n formate transferabile. Aceast" func!ie este ndeplinit" de
convertorul OHS5$. (vezi figura 2.4)
Programul LIB5$ ce face parte din modulul de programe specifice
microcontroller-elor 805$ #i el permite generarea unor biblioteci cu module de
program, ad"ugarea #i extragerea unor module din bibliotec".
FI$IERUL OBIECT 1
FI$IERUL OBIECT 2
FI$IERUL OBIECT n
BIBLIOTECA
LINK -EDITORUL
SPECIFIC
PROCESOARELOR
8051
MODULUL OBIECT
ABSOLUT
FI$IERUL CU REFERIN!E
NCRUCI$ATE
Figura 2.3 Rolul link-editorului n generarea fi#ierelor obiect absolute
FI$IERUL OBIECT
ABSOLUT
CONVERTORUL
OHS51
FI$IERUL FORMAT
INTEL - HEX
FI$IERUL SIMBOLIC
DIGITAL RESEARCH
HEX
FI$IERUL N FORMAT
MICROTEK
Figura 2. 4 Rolul convertorului object - IntelHEX
MICROCONTROLLERE
56
2.1.3 Instrumente software de proiectare: MC 8051
Structura general" a unei liniii de program scris n limbaj de asamblare are
forma:
[Etichet":] mnemonic805$ [operand][,operand] [;comentariu] <CR><LF>
28
drept separator de cmp sunt utilizate caracterele spa!iu sau tabulatorul.
Prin etichet" n!elegem #irul de caractere ASCII ce se sfr#e#te prin caracterul ":".
Operanzii pot fi clasifica!i astfel:
Simboluri speciale de asamblare (nume de registre sau flag-uri)
Simboluri ale programului (Segment, extern, local, public)
Adrese indirecte
Adrese interne ale microcontroller-ului
Adrese ale bi!ilor semnificativi ai microcontroller-ului
Adrese de interes din cadrul programului (n general adrese de salt)
Exemple:
START: ;Aceasta este o etichet"
JMP MAIN ;Aceasta este o instruc!iune de salt
LOOP:
DJNZ R7,LOOP
;R7 este simbolul corespunz"tor registrului R7, LOOP este simbolul corespunz"tor
;adresei de salt (acesta este un comentariu)
Utilizarea etichetelor nu este op!ional" atunci cnd la adresele
corespunz"toare acestora se face referire n program. Ele sunt de asemenea utile
pentru a da o mai mare lizibilitate programelor. mpreun" cu comentariile ofer" un
real ajutor att pentru proiectant ct #i pentru cel ce analizeaz" ulterior programele.
Numerele care sunt utilizate n cadrul programelor surs" pot fi scrise n
urm"toarele formate:
Baza Sufix Caractere acceptate Exemple
Hexazecimal" H, h 0,$,,9,A,B,C,D,E,F $234H, 0E7H
29
, 0A345h
Zecimal D,d 0,$,2,3,4,5,6,7,8,9 $234, $234D,023d
Octal O,o 0,$,2,34,5,6,7 $23O, 256O,$$$Q,$25q
Binar B,b 0,$ $$0$$$0$B
$irurile sunt expresii ce includ maximum dou" caractere ncadrate ntre apostrof-
uri.
Exemple: 'A' evaluat ca 004$H
'AB' evaluat ca 4$42H
'ab' evaluat ca 6$62H, etc.

28
<CR> reprezint" -returul de car ("Carriage Return" ), iar <LF> sfr#itul de linie ("Line
Feed")
29
Caracterele scrise n format hexazecimal care ncep printr-o cifr" exprimabil" ca un
alfanumeric vor fi scrise cu 0 n fa!a acesteia. Acest caracter este ignorat la asamblare.
2. Programarea sistemelor cu MC 57
Simboluri: reprezint" valori numerice, adrese sau nume de registre ce permit mai
buna lizibilitate a programelor. Atributele ce pot fi date simbolurilor sunt:
TYP: cu valorile CODE, DATA, BIT sau TYPELESS sau REGISTER
SEGMENT: orice simbol con!ine #i untip de segment.
SCOPE: exprim" validitatea simbolului, ea poate fi local (valabil" doar n rutina
sau segment de program n care este specificat", public, caz n care n toate
modulele de program poate fi referit #i este recunoscut, external, caz n care
definirea simbolului este realizat" ntr-un alt fi#ier surs" sau address symbol,
VALUE: reprezint" valoarea numeric" corespunz"toare simbolului, aceasta
depinde de adresa tipului de simbol respectiv.
CHANGEALE: Aceste simboluri pot fi redefinite prin intermediul directivei SET.
Simbolurile care nu au fost definite utiliznd directiva SET nu pot fi redefinite
Asamblorul A5$.EXE admite drept nume de simboluri #irurile de caractere de pn"
la 3$ de caractere, primul trebuind s" fie obligatoriu un caracter alfanumeric:
'A','a','Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric.
Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce
definesc resurse ale microcontroller-ului respectiv. Iat" cteva dintre acestea: A
=acumulatorul, R0,R$,..R7 sunt registre generale ale bancului curent, DPTR este
simbolul corespunz"tor registrului de adresare "Data Pointer", C este flag-ul de
transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la nmul!ire #i
mp"r!ire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente.
Operatorii aritmetici recunoscu!i sunt:
Operatorul Exemplu Semnifica!ia
+, - +5 +$ +0Ah Semnul num"rului
+,- 2+$0-$ Reprezint" operatorul aplicat
* $234H*5 Repezint" operatorul de multiplicare
/ 45/9 Repezint" operatorul de mp"r!ire
MOD $7 MOD 5 Reprezint" operatorul de mp"r!ire ntreag"
^ 2^3 Reprezint" operatorul de exponen!iere
( ) (2+5)*34 Precizeaz" preceden!a opera!iilor
Operatori binari utiliza!i sunt:
Operator Exemplu Semnifica!ie
NOT NOT 5 Complementul lui 5
HIGH HIGH $234H Selecteaz" partea mai semnificativ", respectiv
$2H
LOW LOW $234H Selecteaz" partea mai pu!in semnificativ",
respectiv 34H a num"rului $234H
MICROCONTROLLERE
58
Operator Exemplu Semnifica!ie
SHR,
SHL
2 SHL 4 Exprim" deplasarea spre dreapta, respectiv stnga
a bi!ilor num"rului 2 cu 4 (ranguri)
AND 0FEH AND $4H Reprezint" SI -ul logic ntre cei doi operanzi
OR 0FEH OR $4H Reprezint" SAU -ul logic ntre cei doi operanzi
XOR 0FEH XOR $4H Reprezint" SAU-EXCLUSIV ntre cei doi
operanzi
Operatorii rela!ionali sunt acei operatori ce compar" doi operanzi.
Rezultatul compara!iei este ADEV%RAT sau FALS, valori ce sunt returnate n
urma efectu"rii opera!iei. Dintre ace#ti operatori amintim:
Operator Exemplu Semnifica!ie
>= ,GTE 8>=$7 Mai mare sau egal. Valoarea returnat": FALS
<= ,LTE 8 LTE 45 Mai mic sau egal. Valoarea returnat": ADEV%RAT
<> , NE 8 NE 45 Nu este egal. Valoarea returnat": ADEV%RAT
= , EQ 8 EQ 45 Egal. Valoarea returnat": FALS
< , LT 8 LT 45 Mai mic dect. Valoarea returnat" ADEV%RAT
> , GT 8 GT 45 Mai mare dect. Valoarea returnat" FALS
Preceden!a operatorilor este cea cunoscut" #i la alte limbaje de programare,
parantezele, apoi operatorii unari, adunarea #i sc"derea, nmul!irea #i mp"r!irea,
deplasarea, operatorii logici #i n final operatorii rela!ionali.
Datele imediate, respectiv valorile numerice incluse n cadrul instruc!iunii
sunt reprezentate cu avnd caracterul '#' n fa!". Exemple:
MOV A,#0ABH ;ncarc" n A valoarea ABH, respectiv $7$D
MOV DPTR,#8000H ;ncarc" valoarea 8000H n DPTR
ANL A,#$28
;Realizeaz" opera!ia &I logic ntre valoarea memorat" n acmulator #i valoarea
;$28D
MOV R0,#DAT ;ncarc" n registru R0, valoarea simbolului DAT
Adresarea datelor poate fi f"cut" n dou" moduri distincte:
$. Direct caz n care informa!ia de adres" este specificat" chiar n codul
ma#in" respectiv
2. Indirect, caz n care simbolul inclus n codul ma#in" reprezint" adresa
la care este memorat operandul utilizat de c"tre instruc!iune. Pot fi
utiliza!i: registrele R0 #i R$ sau registrul DPTR. Spa!iul de adrese este
func!ie de tipul de microcontroller.
Exemplele incluse pe CD detaliaz" loca!iile #i adresele de memorie
inclusiv cele corespunz"toare simolurilor corespunz"toare fanioanelor
microcontroller-elor din familia 805$.
Directivele de asamblare admise sunt prezentate n enumerarea de mai jos:
SEGMENT permite declararea unui segment ce poate fi relocatat. Sintaxa este:
2. Programarea sistemelor cu MC 59
Nume_segment_relocatabil SEGMENT Tip_segment [Tip_relocatabil]
EQU permite specificarea unei valori pentru o variabil" utilizat" n faza
de asamblare
SET permite specificarea unei valori pentru o variabil" utilizat" n faza
de asamblare, valoare ce poate fi ulterior modificat"
DATA reprezint" zona de memorie intern" avnd adresele ntre 0 #i $27
IDATA reprezint" zona adresabil" indirect din memoria intern" a
microcontroller-ului 0 la $27 sau 0 la 255 inclusiv.
XDATA reprezint" zona adresabil" pe byte situat" n memoria extern"
microcontroller-ului
BIT reprezint" zona adresabil" pe bit situat" ntre 20H #i 27H inclusiv
CODE reprezint" spa!iul alocat codului (programelor executabile)
Rezervarea spa!iului de memorie este realizat" prin intermediul
dispozi!iilor:
[Nume_bloc_memorie:] DS Dimensiune bloc de memorie
[Nume_variabil"_byte:] DB Valoare de ini!ializare byte
[Nume_variabil"_cuvnt:] DW Valoare de ini!ializare cuvnt
[Nume_variabil"_bit:] DBIT Valoare bloc bi!i
Dispozi!iile ce pot fi incluse se pot adresa #i link-editorului, ele trebuind s"
fie specificate n programul surs". Acestea sunt:
PUBLIC directiv" ce declar" o variabil" sau bloc de memorie "vizibil"" n toate
modulele de program surs".
EXTRN directiv" ce precizeaz" faptul c" variabila specificat" se afl" n alt modul
de program, implicit alt fi#ier surs". Se precizeaz" tipul acestei variabile ce poate fi
numele unei rutine,deci este de tipul CODE sau o variabil" din memorie, deci
DATA.
NAME directiv" ce define#te numele unui modul de program
Dintre dispozi!iile de control a asambl"rii men!ion"m:
ORG adres" Dispozi!ie ce specific" adresa de la care se locateaz" codul scris n
continuare
END Indic" sfr#itul unui modul de program
RSEG Indic" nceputul zonei registrelor generale (000H)
CSEG Indic" nceputul memoriei de program (000H)
DSEG Indic" nceputul zonei memoriei de date (memoria intern" - 000H)
XSEG Indic" nceputul zonei de memorie externe a microsistemului
ISEG Indic" nceputul zonei de memorie interne adresabile indirect
BSEG Indic" nceputul zonei adresabile pe bit
USING Specific" bancul de registre generale utilizat
D"m n continuare doar un exemplu ce ilustreaz" cum func!ioneaz" cteva
dintre aceste directive.
LOC OBJ LINE SOURCE
0020 $ VAL EQU 20H ;Ini!ializeaz" variabila byte VAL cu 20H
00$0 2 VAL$ EQU $6 ;Ini!ializeaz" variabila byte VAL$ cu $6
3 DSEG
MICROCONTROLLERE
60
0000 4 DS $0H ;Rezerv" $5 bytes n zona RAM intern"
00$0 5 REG23: DS $$H
;Rezerv" blocul REG23 de $7 bytes n zona RAM
002$ 6 BITI: DS 0$H ;Rezerv" $ byte cu numele BITI
0030 7 VAL2 SET VAL+VAL$ ;In!ializeaz" variabila VAL2
;func!ie de variabilele VAL, VAL$. Variabila poate fi redefinit" n program
REG 8 COUNTER SET R0
;Define#te variabila COUNTER ce poate fi redefinit" n program
9 BSEG AT BITI+8
;Seteaz" adresa de la care definim zona utilizator accesibil" pe bit
0029 $0 BIT_0: DBIT $ ;Define#te bitul BIT_0
002A $$ BIT_$: DBIT VAL2 ;Define#te func!ie de VAL2 bitul BIT_$
0008 $2 VAL2 SET 8H ;Redefine#te variabila VAL2
0008 $3 BIT_2 BIT VAL2 ;Define#te bitul BIT_2
$4 XSEG AT 80H
;Define#te zona memorie externe utilizator ncepnd de la adresa 80H
0080 $5 STACK$ DATA 80H ;Define#te pointer-el STACK$
$6 CSEG ;Define#te nceputul zonei "memorie de program"
0000 $7 START CODE 00H ;Define#te tipul memoriei
0000 020003 $8 JMP MAIN ;Instruc!iune de salt
0003 $9 ISR0 CODE START+3 ;Define#te adres" coresp. ISR0
000B 20 ISR$ CODE START+0BH ; Define#te adres" coresp. ISR0
0003 2$ MAIN: ;Adres" de salt (definit" de eticheta MAIN)
0003 85808$ 22 MOV SP,STACK$ ;Ini!ializare cu STACK$ a SP
23 END ;Sfr#it program surs"
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
BITI . . . D ADDR 002$H A
BIT_0. . . B ADDR 0025H.$ A
BIT_$. . . B ADDR 0025H.2 A
BIT_2. . . B ADDR 002$H.0 A
COUNTER. . REG R0
ISR0 . . . C ADDR 0003H A
ISR$ . . . C ADDR 000BH A
MAIN . . . C ADDR 0003H A
REG23. . . D ADDR 00$0H A
SP . . . . D ADDR 008$H A
STACK$ . . D ADDR 0080H A
START. . . C ADDR 0000H A
VAL. . . . N NUMB 0020H A
VAL$ . . . N NUMB 00$0H A
VAL2 . . . N NUMB 0008H A
2. Programarea sistemelor cu MC 6$
Al"turi de dispozi!iile mai sus men!ionate, pentru u#urarea proiect"rii
programelor sunt admise o serie de macro-instruc!iuni, specifice asamblorului, care
asigur" asamblarea condi!ionat" a fi#ierelor surs" de program. Dintre avantajele pe
care un astfel de stil n programare le are, amintim:
Reduce substan!ial frecven!a erorilor acolo unde acelea#i secven!e de
instruc!iuni sunt utilizate.
Scopul simbolurilor utilizate n MACRO-uri este limitat doar la macro-ul
respectiv
Este util n special pentru crearea unor tabele de coduri simple.
Iat" aceste directive:
Nume_macro MACRO [list"_parametrii_formali]
30
LOCAL Nume_simbol
3$
[,Nume_Simbol$][]
REPT Num"r_repeti!ii
32
[Etichet":] IRP parametru_formal <list">
[Etichet":] IRPC parametru_formal,parameru_actual
EXITMcomand" terminarea buclei macro curente
Exemple:
Am specificat deasupra liniei de defini!ie elementele acesteia:
Nume defini!ie MACRO Cuvnt cheie Parametrul MACRO
$ CLR_MEM MACRO DIMENS
2 MOV R0,#DIMENS ;ncarc" n R0 valoarea DIMENS
3 LOOP: ;Eticheta de definire a buclei
4 MOV @R0,#00H ;Scrie la adresa memorat" n R0:00H
5 DJNZ RO,LOOP ;Testeaz" #i cicleaz" pn" R0=0
6 ENDM ;Sfr#it MACRO CLR_MEM
; Macro-ul realizeaz" umplerea cu zero a memoriei interne de la adresa 000H #i
; pn" la adresa DIMENS
7 REP_OK: ;Define#te o etichet" de recunoa#tere
8 REPT 2 ;Define#te factorul de repeti!ie
9 MOV R0,#$ ;ncarc" n R0 valoarea $
$0 MOV A,@R0 ;Transfer" de la adresa $ informa!ia n A
$$ ENDM ;Sfr#it surs" program generat repetitiv
0000 780$ $2+$ MOV R0,#$ ;Programul generat (4 instruc!iuni)
0002 E6 $3+$ MOV A,@R0
0003 780$ $4+$ MOV R0,#$
0005 E6 $5+$ MOV A,@R0
0006 $6 IRP_EX: ;Exemplu de generare succesiune instruc!iuni
$7 IRP X,<2,3> ;Definire variabil" X

30
Parametri formali sunt variabile utilizate drept parametri n cadrul MACRO-ului
3$
Variabil"/simbol utilizat n spa!iul macro-ului
32
Variabil" ce precizeaz" de cte ori se insereaz" n codul surs" blocul de instruc!iuni
cuprins ntre REPT #i ENDM
MICROCONTROLLERE
62
$8 MOV R0,X ;Definire instruc!iune ce include X
$9 INC R0 ;Instruc!iune de incrementare;
20 ENDM ;Sfr#it macro defini!ie repetitiv" variabil"
0006 A802 2$+$ MOV R0,2 ;Cod generat cu prima valoare X
0008 08 22+$ INC R0
0009 A803 23+$ MOV R0,3 ;Cod generat cu a doua valoare X
000B 08 24+$ INC R0
000C 25 IRPC_EX:
;Macro defini!ie repetivit" ce utilizeaz" variabila X dnd valorile 2,5 #i 9
26 IRPC X,<259> ;Setare valori variabil" X
27 MOV @R0,X ;Definire instruc!iune
28 ENDM Sfr#it macro defini!ie repetitiv"
000C A602 29+$ MOV @R0,2 ;Definire instruc!iune cu valoarea X($)
000E A605 30+$ MOV @R0,5;Definire instruc!iune cu valoarea X(2)
00$0 A609 3$+$ MOV @R0,9;Definire instruc!iune cu valoarea X(3)
32 END
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
IRPC_EX. . C ADDR 000CH A
IRP_EX . . C ADDR 0006H A
REP_OK . . C ADDR 0000H A
Urm"toarele caractere sunt considerate caractere speciale n cazul macro-
asamblorului A5$.EXE:
& concateneaz" textul cu parametrii "dummy"
este utilizat pentru a introduce delimitatorii n text cum ar fi : , #i spa!iul
(blank)
; delimiteaz" de la el pn" la sfr#itul liniei zona ce nu va fi procesat" de c"tre
asamblor
! este folosit pentru a indica asamblorului c" urm"torul caracter special va fi
considerat literal.
NUL este cuvntul cheie utilizat ca expresie a "non valorii", c"ci orice alt
caracter, inclusiv blank-ul ar fi interpretat de c"tre asamblor n cadrul unor
expresii logice cum ar fi IF.
Apelarea unei expresii MACRO impune o anumit" sintax", #i anume:
[etichet":] Nume_Macro [Parametri_actuali]
Ordinea parametrilor avut n vedere la definirea MACRO-ului trebuie
respectat" ntotdeauna la apelarea sa. Ea este singurul element ce asigur"
recunoa#terea corect" a parametrilor n cadrul macro-ului.
2. Programarea sistemelor cu MC 63
Asamblorul admite caracterul $ plasat n prima coloan" a unei linii drept
caracter "primar" de control. El va fi urmat, nu neaparat imediat, de diverse cuvinte
cheie, cum sunt:
$ XREF/NOXREF activeaz"/inhib" lista de referin!" cu variabilele utilizate de
program
$ TITLE define#te titlul programului, care poate fi format dintr-un #ir de caractere
(maximum 60) ce urmeaz" cuvntului cheie
$ MOD5$/NOMOD5$ Define#te/redefine#te setul de registre. Implicit asamblorul
execut" asamblarea considernd c" programul este scris pentru un microcontroller
standard 805$, n celelalte situa!ii va trebui s" inhib"m op!iunea prin dispozi!ia:
$ NOMOD5$, urmat" de dispozi!ia $ INCLUDE
$ MACRO/NOMACRO activeaz"/inhib" procesorul de MACRO-uri
$ DEBUG/NODEBUG include sau nu informa!iile de depanare necesare debug-
erului sau emulatorului
$ DATE (30,02,00) cuvntul cheie este urmat de un #ir ce exprim" data (maximum
9 caractere)
$ OBJECT: nume_fi#ier indic" numele fi#ierului ce va include rezultatul
asambl"rii, respectiv fi#ierul cu codul obiect
$ REGISTERBANK/NOREGISTERBANK (Num"rul/numerele bancurilor de
registre utilizate)
$ INCLUDE (Nume_fi#ier_cu_defini!ii_registre) permite specificarea ntre
paranteze a fi#ierului ce define#te structura de registre specific" procesorului pentru
care a fost scris programul
$ LIST/NOLIST indic" liniile din cadrul fi#ierului surs" ce nu vor fi listate n
fi#ierul listing rezultat n urma asambl"rii
Utiliznd dispozi!iile de asamblare condi!ionat" putem scrie compact #i
incluznd toate variantele de implementare programe. n acest scop asamblorul
pune la dispozi!ia programatorului urm"toarele dispozi!ii de asamblare
condi!ionat".
$SET/RESET (<var$>[,<var2>], ) sau (<var>=<valoare_numerica>[,])
$ IF expresie numeric" ce va fi analizat" dac" este sau nu adev"rat", n caz
afirmativ va fi asamblat programul ce urmeaz" dispozi!iei pn" la ntlnirea
dispozi!iei $ ENDIF
Alte dou" op!iuni pot completa dispozi!ia IF cu alternative la aceasta. Un
exemplu va fi edificator:
LOC OBJ LINE SOURCE
$ $DEBUG
;Dispozi!ie de generare a simbolorilor pentru depanarea programului
2 $SET (A=$)
;Define#te variabila A pentru comanda macro assembler-ului. Variabilei trebuie s"
;i se atribuie o valoare atunci cnd este invocat" opera!ia de asamblare a codului
;surs"
3 $IF A=$ ;Testare variabil" A, Dac" este adev"rat"
;condi!ia, se execut" asamblarea instruc!iunii urm"toare
MICROCONTROLLERE
64
0000 E599 4 MOV A,SBUF;Instruc!iune de asamblat cnd A=$
5 $ELSEIF B=2
MOV R0,SBUF
$ELSE ;Alternativ" la bifurca!ia IF
MOV R$,SBUF ;Instruc!iune alternativ asamblat"
$ENDIF ;Sfr#it bifurca!ie IF. ELSE.
$0 $RESET (A)
;Eliberare memorie corespunz"toare variabilei A
$$ $SET (B=2) ;Setare valoare pentru variabila B
$2 $IF A=$
MOV A,SBUF
$ELSEIF B=2
;Dispozi!ie macroasamblor de testare iterativ" tip IF. Este utilizat" pentru
;simularea instruc!iunilor de tip CASE .. ON ELSE
0002 A899 $5 MOV R0,SBUF
$6 $ELSE
MOV R$,SBUF
$ENDIF
$9 $RESET (B)
20 $IF A=$
MOV A,SBUF
$ELSEIF B=2
MOV R0,SBUF
$ELSE
0004 A999 25 MOV R$,SBUF
26 $ENDIF
27 END
n ncheiere prezent"m sintaxa liniei de comand" DOS ce invoc" execu!ia
programului asamblor:
A5$ Nume_fi#ier_surs".a5$ [PRINT:CO:]
Utilizarea link-editorului se face tot din mediul DOS , linia de comand"
avnd structura:
L5$ list"_fi#iere_de_intrare [TO nume_fi#ier_ie#ire] [list"_controale]<CR,LF>
Sau:
L5$ fi#ier_de_comenzi <CR,LF>
Lista include nume de fi#iere ce sunt separate prin caracterul ","
Numele fi#ierului de ie#ire trebuie precizat atunci cnd dorim ca fi#ierul cu
extensia logic" ".M5$" s" fie specificat de c"tre utilizator. n caz contrar, acest
fi#ier va lua numele primului fi#ier de lista fi#ierelor de intrare.
Fi#ierul de comenzi poate con!ine n format ASCII aceia#i parametri ca #i
cei din linia de comand". Informa!ii suplimentare g"si!i n cadrul CD-ului.
2. Programarea sistemelor cu MC 65
Un program deosebit de important este manager-ul de biblioteci LIB5$.
Acest program asigur" crearea unei biblioteci de func!ii #i actualizarea
acesteia. Linia de comand" cu care este invocat programul are structura:
LIB5$ [<comanda>]<CRLF>
Comenzile admise sunt:
Comanda Func!iunea
ADD Adaug" un nou modul de program n bibliotec"
CREATE Genereaz" o bibliotec" de func!ii (ini!ial goal")
DELETE &terge din bibliotec" un modul de program
EXIT Revine n mediul DOS
HELP Ofer" scurte indica!ii asupra comenzilor
LIST Afi#eaz" modulele #i simbolurile publice nume ale bibliotecilor
Comanda de ad"ugare (ADD) are sintaxa:
ADD nume_fi#ier [(nume_modul$,nume_modul2,)] TO nume_bibliotec"
<CRLF>
Comanda de #tergere (DELETE) are sintaxa
DELETE nume_bibliotec" (nume_modul) <CRLF>
Sistemele de dezvoltare sunt deosebit de diverse. Ele dispun n afar" de
microcontroller #i de alte elemente cum sunt porturile suplimentare, de obicei
porturi de tip "registru" pe ie#iri #i "buffer"-e pe intr"ri. Avnd n vedere
caracteristicile specifice microcontrollerelor selec!ia porturilor este realizat" n
spa!iul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru
microcontroller-ele Atmel seriile 89Atxxxx ($05$,205$,405$), ci variantele
89Atxx (5$,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas,
etc. n figura 2.5 prezent"m un sistem de dezvoltare dotat cu un monitor Franklin
ce are implementat" o consol" via interfa!a serial". Sistemul dispune de 2 porturi
de ie#ire $ port de intrare, precum #i un port de comunica!ie cu un afi#or cu cristale
lichide (LCD) #i un decodificator pentru circuite de intrare/ie#ire cu 8 linii de
selec!ie.
Sistemul permite dezvoltarea unei aplica!ii care poate include toate
elementele unui sistem dedicat. Evident dac" se dore#te, pot fi ad"ugate
convertoare analog-digitale #i digital analoge, precum circuite de interfa!" diverse.
Avantajul principal al acestui sistem const" n aceea c" el permite
conectarea microcontroller-ului la procesul controlat ceea ce face ca utilizatorul s"
poat" analiza, depana sau chiar reproiecta anumite programe chiar n contextul dat,
avnd la dispozi!ie toate semnalele de excita!ie reale.
MICROCONTROLLERE
66
Zona de dezvoltare
Microcontroller
Memorii EPROM /SRAM
Porturi de ie&ire
Porturi de intrare
Memorie EEPROM
Figura 2. 5 Sistem de dezvoltare cu microcontroller PCB80C552
Programul monitor "mt.exe"func!ioneaz" mpreun" cu monitorul Franklin
#i prezint" cteva comenzi:
A [adres"] <CR,LF> Asambleaz" cod 805$ de la adresa specificat"
BD [ALL] < num"r_break_point> Invalideaz" toate break point-urile sau cel
specificat prin num"r ce reprezint" chiar indexul acestuia
BE [ALL] < num"r_break_point> Valideaz" break point-urile.
BK [ALL] <num"r_break_point> &terge toate break point-urile sau doar cel
specificat
BL Listeaz" break point-urile setate
BS <adres">Seteaz" (stabili#te) un break point la adresa precizat"
DB (Display Bits) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil"
pe bit ntre adresele de start #i stop
DD (Display Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie
accesibil" pe octet ntre adresele de start #i stop aflat" n memoria intern" a MC
DI (Display Indirect Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie
accesibil" pe octet indirect ntre adresele de start #i stop
DX (Display Extended Data) <adres"_start> <adres"_stop> Afi#eaz" zon"
memorie accesibil" pe octet plasat" n afara MC, ntre adresele de start #i stop
2. Programarea sistemelor cu MC 67
DC (Display Code) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie
accesibil" pe octet n memoria de program #i plasat" ntre adresele de start #i stop
FILLB/FILLD/FILLI/FILLX/FILLC <adres"_start> <adres"_stop> <valoare>
Directiv" de umplere zon" de memorie, cu acelea#i semnifica!ii ca #i la Dispozi!ia
Display pentru diversele zone de memorie
G <adres"_start> <adres"_break> Dispozi!ie de execu!ie program ntre adresa de
start #i cea de break
? Dispozi!ie de help "on-line"
H<num"r$><num"r2> Dispozi!ie de calcul n hexazecimal valoare sum"/diferen!"
num"r$, num"r2
T <adres"_start> execut" pas cu pas instruc!iunile programului cu afi#area tuturor
registrelor microcontroller-ului
X[<nume_registru>] afi#eaz" to!i/registrul specificat
F$ tast" special" ce permite ie#irea din program
F2 tast" special" care permite nc"rcarea programelor n format Intel-HEX via
interfa!a serial" (consola)
F3 tast" special" ce permite salvarea n cadrul unui fi#ier al c"rui nume este
specificat de c"tre operator a caracterelor recep!ionate via interfa!a serial"
(consola)
2.1.4 Instrumente software de proiectare: MC PIC
Firma Microchip care produce microcontroller-ele PIC a adus pe pia!"
produsul MPLAB drept mediu integrat de dezvoltare/simulare (IDE Integrated
Development Environment) pentru procesoarele sale precum #i Starter-Kit-ul
corespunz"tor fiec"rui microcontroller. Mediul MPLAB cuprinde urm"toarele
componente:
Editorul fi#ierelor surs"
Asamblorul
Compilatorul C
Linkeditorul
Editorul de stimuli
StarterPIC sistemul de dezvoltare minimal pentru dezvoltarea aplica!iilor
Simulatorul/Emulatorul microcontroller-elor PIC pentru diversele familii
Programatorul microcontrollerelor ce dispun de memorie EPROM,
EEPROM sau Flash.
Asamblorul este oferit att integrat n mediu ct #i separat att versiunea
DOS ct #i versiunea Windows pe $6 bi!i.
Mediul integrat dispune de ferestre ce permit att editarea programului
surs", vizualizarea fi#ierului list rezultat n urma asambl"rii, fereasta ce
vizualizeaz" memoria intern" de program #i de date a microcontroller-ului,
MICROCONTROLLERE
68
fereastra cu registrele acestuia (zona SFR) #i fereastra "trace", ce urm"re#te
evolu!ia programului #i cea corespunz"toare memoriei EEPROM de care
microcontroller-ele din familia PIC dispun.
Meniurile mediului integrat sunt n num"r de 3 #i anume:cel corespunz"tor
func!iunilor de editare #i salvare fi#iere #i proiecte, cel corespunz"tor proces"rii
fi#ierelor surs", respectiv asambl"rii sau compil"rii, al link-edit"rii fi#eirelor obiect
#i cel corespunz"tor test"rii/simul"rii programelor scrise, ce permite execu!ia pas
cu pas, admite editarea #i administrarea de stimuli sistemului precum #i n final,
programarea microcontroller-ului respectiv.
n ceea ce nsemn" dispozi!iile de asamblorului MPASM, apar mici
deosebiri fa!" de asamblorul A5$.EXE. n continuare vom prezenta cteva dintre
aceste deosebiri, o list" complet" de referin!" o pute!i g"si pe CD.
Sistemul de numera#ie Sintaxa Exemple
Zecimal D'<digi!i>, .<digi!i> D'$23', .255
Hexazecimal H'<digi!i>', 0x< digi!i > H'EF' , 0xE32A
Octal O'< digi!i >' O'$234'
Binar B'< digi!i >' B'$$0$00$$'
Caracter (ASCII) '<caracter>', A'<caracter>' 'V', A'u'
Etichetele sunt exprimate prin #iruri de caractere #i ele identific" punctele
de salt sau cele la care sunt plasate rutinele scrise.
Directiva Descriere Sintaxa
CONSTANT Define#te un simbol drept
constant" n program
Constant<etichet">=[<expresie>,
<etichet">=<expresie>,..]
#DEFINE Define#te text de substitu!ie #define <nume> [<arg>,<arg>,..]
EQU Define#te o constant" <etichet"> equ <expresie>
#INCLUDE Include un fi#ier surs" include <nume_fi#ier>
PROCESSOR Define#te tipul procesorului Processor <tip_procesor>
SET Asigneaz" o valoare unei
variabile (poate fi apoi
redefinit")
<etichet"> set <expresie>
#UNDEFINE Renun!" la defini!ia anterior
precizat" prin #DEFINE
#undefine <etichet">
VARIABLE Declar" un simbol drept
variabil"
variable <etichet">[=expresie]
IF Define#te o macro-
instruc!iune de decizie
if <expresie>
WHILE Realizeaz" buclarea atta
timp ct condi!ia testat" la
nceput este adev"rat"
while <>expresie
2. Programarea sistemelor cu MC 69
Directiva Descriere Sintaxa
BANKISEL Selecteaz" un banc de
memorie intern" pentru acces
indirect
bankisel <etichet">
RES Rezerv" spa!iu de memorie res <num"r_de_loca!ii>
FILL Umple o zon" de memorie cu
o anume informa!ie
fill <expresie>,<num"r_loca!ii>
DA mpacheteaz" n memoria de
program un #ir
<etichet"> da
<expresie>[,<expresie>,]
DATA Creaz" o valoare numeric"
sau una text
data <expresie>[,<expresie>..],
data <text>[,<text>,..]
DB Declar" un byte db <expresie>[,<expresie$>,..]
DE Declar" o dat" n EEPROM de <expresie>[,<expresie$>,..]
DT Define#te o tabel" dt <expresie>[,<expresie$>,..]
DW Declar" o dat" un cuvnt dw <expresie>[,<expresie$>,..]
MACRO Define#te un MACRO <etichet"> macro [<argument>,
<argument$>,..]
EXITM Ie#ire dintr-unMACRO Exitm
GLOBAL Export" defini!ia unei
etichete
global <etichet">
__MAXRAM Specific" adresa maxim"
pentru memoria RAM
__maxram <expresie>
Op!iunile de link-editorului MPLINK atunci cnd este invocat sunt:
/o nume_fi#ier specific" fi#ierul de ie#ire
/m nume_fi#ier specific" generarea fi#ierului "hart"" nume_fi#ier
/l pathlist specific" (adun")calea la fi#ierul bibliotec" ce este link-at
/k pathlist specific" (adun") calea la fi#ierul script utilizat de linker
/n length specific" num"rul de linii llistate pe pagin"
/h , /? afi#eaz" fi#ierul de ajutor corespunz"tor link-erului
/a hexformat specific" formatul HEX pentru fi#ierele de ie#ire
/q iese din link-are
/d evit" crearea fi#ierului listing absolut
3
MICROCONTROLLERE MOTOROLA
(MC cu arhitectur! CISC)
Motorola a dezvoltat cteva tipuri de unit!"i centrale, la care s-au ata#at o
multitudine de interfe"e, ob"innd astfel foarte multe tipuri de circuite, compatibile
din punct de vedere software. Motorola a creat astfel posibilitatea producerii a
nenum!rate variante de MC, care s! acopere ct mai multe din aplica"iile
utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated
Circuit). Spre deosebire de familia 805$ unde pe nucleul creat de INTEL, firme
constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de
MC, ob"innd astfel o unitate n diversitate.
Schema bloc simplificat! a unui MC din familia Motorola este dat! n
figura 3.$.
Unitatea central!
6805, 6808...
Memorie ROM,
EPROM sau OTP
Memorie RAM
Memorie
EEPROM
Magistrala de date #i
adrese
+V
DD
(+5V/+3V)
RESET
IRQ
Oscilator
Port A Port B Port C
Porturi cu func"ii
speciale (timer, CAN,
SPI, SCI)
Figura 3." Schema bloc a unui microcontroller Motorola
3. Microcontrollere Motorola 7"
Porturile I/O pot fi de uz general, dar liniile porturilor pot fi utilizate #i de
interfe"ele speciale. n continuare vor fi prezentate blocurile din structura MC
Motorola 6805.
3." MC M68HC05
3."." Memoria intern!
MC din familia Motorola, ca #i toate circuitele MC, sunt echipate cu
memorie RAM, ROM #i EPROM (OTP). Fiecare din memorii are o capacitate
specific! fiec!rui tip particular de circuit. Memoria poate fi format! din $76 304
octe"i de RAM, 240 octe"i de ROM #i 7600 7744 octe"i de memorie programabil!
(EPROM sau OTP.
Memoria RAM este folosit! pentru stocarea temporar! a datelor. n modul
de lucru bootstrap (specific MC Motorola), memoria RAM poate fi nc!rcat! cu
informa"ie de tip program prin portul SCI, urmnd ca programul s! fie executat din
RAM. Memoria ROM este folosit! pentru a stoca programe. Modulul ROM
con"ine #i programul care coordoneaz! nc!rcarea RAM prin portul SCI. Memoria
EPROM (OTP), ca #i memoria ROM, con"ine programe #i variabile specifice
aplica"iei cu diferen"a c! acestea sunt nscrise de utilizator, nu de fabricant.
n acela#i spa"iu de adresare se afl! memoria de diferite tipuri, registre I/O
#i registre de control #i stare, privite ca loca"ii de memorie. Pentru a #ti adresa la
care se afl! fiecare element se utilizeaz! o reprezentare numit! harta memoriei.
Harta memoriei pentru un membru al familiei 6805 (MC68HC705J$A) este dat! n
tabelul 3.$. Pentru a putea lucra cu un MC particular trebuie studiat! alocarea
(maparea) memoriei din catalog pentru acel MC, tabelul 3.$ este doar orientativ.
Tabelul 3.1
Maparea memoriei la MC68HC05J"A
Con"inut Adresa (H)
Date port A 0000
Date port B 000$
Nefolosit 0002-0003
DDR pentru port A 0004
DDR pentru port B 0005
72 MICROCONTROLLERE
Con"inut Adresa (H)
Nefolosit 0006-0007
Stare #i control pentru timer 0008
Registru num!r!tor pentru timer 0009
Stare #i control a ntreruperilor 000A
Nefolosit 000B-00$$
Nefolosit 00$2-00$7
Registru de programare a EPROM 00$8
Nefolosit 00$9-00$F
Nefolosit 0020-00BF
RAM utilizator sau stiv! (64 octe"i) 00C0-00FF
Nefolosit (5$2 octe"i) 0$00-02FF
EPROM ($232 octe"i) 0300-07CF
Nefolosit (30 octe"i) 07D0-07ED
Test ROM (2 octe"i) 07EE-07EF
Registru COP 07F0
Registru de m!#ti 07F$
Rezerva"i 07F2-07F7
Vector pentru timer (octet semnificativ) 07F8
Vector pentru timer 07F9
Vector pentru IRQ (octet semnificativ) 07FA
Vector pentru IRQ 07FB
Vector pentru SWI (octet semnificativ) 07FC
Vector pentru RESET (octet semnificativ) 07FE
Vector pentru RESET 07FF
3.".2 Unitatea central!
Unitatea central! realizeaz! prelucrarea datelor pe 8 bi"i la o frecven"!
intern! de 2MHz (tact extern de 4MHz), are o magistral! de adrese de $$-$4 bi"i #i
con"ine registre #i unitatea aritmetic! #i logic!, figura 3.2. n general, la MC
Motorola, bus-ul de adrese #i de date nu este disponibil n exterior.
Unitatea central! are o arhitectur! cu bus unic pentru date #i instruc"iuni
(von Neumann) #i con"ine urm!toarele registre:
Registrul Acumulator (Accumulator - A) este un registru pe 8 bi"i de uz general.
El nu este afectat de Reset.
Registrul index (Index Register - X) este un registru pe 8 bi"i folosit la adres!rile
indexate. Nu este afectat de Reset.
Registrul indicator de stiv! (Stack Pointer - SP) este un registru de $3 bi"i care
con"ine adresa urm!toarei loca"ii libere n stiv!. Dup! Reset indicatorul de stiv!
devine 00FFh.
3. Microcontrollere Motorola 73
Registrul num!r!tor de program (Program Counter - PC) este un registru de $3
bi"i care con"ine adresa urm!toarei instruc"iuni de executat. Dup! execu"ia
instruc"iunii registrul este incrementat. Un salt sau o ntrerupere determin!
nc!rcarea PC cu alt! valoare dect adresa urm!toarei loca"ii. Dup! Reset registrul
PC este nc!rcat cu con"inutul loca"iilor 3FFEh #i 3FFFh (la MC68HC705J$A).
Registrul de condi#ii (Condition Code Register - CCR) este un registru de 8 bi"i
(din care sunt folosi"i 5) cu urm!toarea semnifica"ie:
Bitul 0 -LSB, (Carry/Borrow Flag) pozi"ionat dac! o adunare produce un
transport sau dac! la o sc!dere este nevoie de mprumut.
Bitul $ (Zero Flag), pozi"ionat dac! rezultatul unei opera"ii este zero.
Bitul 2 (Negative Flag), pozi"ionat dac! rezultatul unei opera"ii este
negativ (bitul 7 este $).
Bitul 3 (Interrupt Mask Bit) cnd este $ sunt invalidate ntreruperile. Dac!
apare o ntrerupere cnd acest bit este $, ea este memorat! pn! bitul
devine 0; atunci se salveaz! registrele UC n stiv!. Dup! Reset bitul este
setat n $ #i poate fi pozi"ionat n 0 cu instruc"iunea CLI.
Bitul 4 (Half-Carry) este pozi"ionat cnd apare un transport de la bitul 3
spre 4 n acumulator la o opera"ie de adunare cu sau f!r! Carry. Este util la
opera"ii BCD.
Unitatea aritmetic! #i logic! realizeaz! opera"iile aritmetice #i logice
definite de setul de instruc"iuni. Multe din instruc"iunile aritmetice se bazeaz! pe
algoritmul de la adunare. Astfel, o nmul"ire este realizat! printr-un #ir de adun!ri
#i deplas!ri succesive #i dureaz! $$ perioade de clock.
Unitatea central! 6805
Acumulator
Registru index
Indicator de stiv!
Num!r!tor de program (PC)
Registru de condi"ii
UAL
Unitatea aritmetic! #i logic!
Figura 3.2. Unitatea central! 6805
74 MICROCONTROLLERE
Ini#ializarea unit!#ii centrale
Un Reset duce unitatea central! ntr-o stare determinat! (la o adres!
cunoscut!). Un Reset poate fi declan#at de o surs! intern! sau de o surs! extern!
astfel:
extern, prin pinul de RESET, activ pe 0;
extern, Power On Reset (POR), la pornirea sursei de alimentare.
Circuitul POR asigur! o ntrziere de 4064 tacte de la momentul n
care oscilatorul devine activ #i dac! semnalul RESET extern este
inactiv, procesorul ncepe s! lucreze;
intern, de c!tre ceasul de gard!, Computer Operating Properly (COP).
ncercarea de a executa o instruc"iune de la o adres! ilegal!. Dac!
unitatea central! ncearc! s! execute o instruc"iune care nu este n
EPROM sau RAM se genereaz! un RESET pentru a proteja MC de
scrieri sau citiri din zone necontrolate.
3.".3 Moduri de adresare
Unitatea central! folose#te 8 moduri de adresare pentru o ct mai mare
flexibilitate n utilizare:
$. adresare inerent! - instruc"iunile nu au operand, cum este ntoarcerea din
ntrerupere (RTI) sau STOP. Instruc"iunile inerente au lungimea de un octet.
2. adresare imediat! - instruc"iunile au un operand, care este o valoare imediat
utilizabil! ntr-o opera"ie cu acumulatorul sau cu registrul index. Instruc"iunile
au doi octe"i, primul fiind codul, iar al doilea valoarea imediat!.
3. adresare direct! - instruc"iunile pot avea acces la primele 256 de loca"ii de
memorie. Instruc"iunile sunt pe doi octe"i, primul este codul iar al doilea este
octetul cel mai pu"in semnificativ al adresei operandului; octetul cel mai
semnificativ este considerat implicit 00h.
4. adresare extins! - instruc"iunile sunt pe trei octe"i #i pot adresa orice loca"ie
de memorie. Primul octet este codul, al doilea este adresa (parte HIGH) iar al
treilea este adresa (partea LOW).
5. adresare indexat! f!r! offset - instruc"iunile au un octet #i pot avea acces la
loca"ii cu adresa variabil! din registrul index (care con"ine partea LOW a
adresei). Pentru partea HIGH se folose#te 00h, a#a nct aceesul este n zona
0000-00FFh.
6. adresare indexat! cu offset pe 8 bi#i - instruc"iunile au doi octe"i, fiind
accesibile loca"ii cu adresa variabil! n zona primelor 5$$ loca"ii. Unitatea
central! adun! octetul din instruc"iune la registrul index (f!r! semn) #i se
ob"ine adresa efectiv! a operandului. Un exemplu de utilizare al acestui mod de
adresare este selectarea unui element k dintr-un tabel de n elemente. Valoarea
3. Microcontrollere Motorola 75
k este n registrul index, iar adresa nceputului tabelului este al doilea octet al
instruc"iunii.
7. adresare indexat! cu offset pe "6 bi#i - instruc"iunile au trei octe"i, fiind
accesibile toate loca"iile. UC adun! f!r! semn registrul index la cei doi octe"i
din instruc"iune #i se ob"ine adresa efectiv! a operandului (primul octet dup!
codul instruc"iunii este octetul HIGH).
8. adresare relativ! este folosit! n instruc"iunile de salt. La un salt relativ, se
adun! (cu semn) octetul care urmeaz! dup! codul instruc"iunii la con"inutul
registrului Program Counter. Se pot face salturi relative n gama $27 de octe"i
nainte sau napoi.
3.".4 Setul de instruc#iuni
Unitatea central! MC68HC05 are 6$ de instruc"iuni (mai mult de 200 de
coduri). Cteva dintre instruc"iunile mai importante, clasificate dup! tipul opera"iei,
sunt enumerate n continuare.
Opera#ii registru- memorie
ADD, ADC - adun! con"inutul unei loca"ii de memorie la acumulator (f!r!
sau cu transport)
AND - #i ntre memorie cu acumulator
CMP - compar! memorie cu acumulator
EOR - sau exclusiv memorie cu acumulator
CPX - compar! registru index cu memoria
LDA, LDX - ncarc! acumulator (registru index) cu un octet din memorie
ORA - sau logic ntre acumulator #i memorie
SBC, SUB - sc!dere cu sau f!r! mprumut
STA, STX - salvare acumulator (registru index) n memorie
MUL - nmul"ire
Opera#ii de tip cite$te- modific!- scrie
ASL,ASR, LSL, LSR - deplasare aritmetic! (logic!) stnga (dreapta)
BSET, BCLR - setare sau resetare bit
CLR - resetare registru
COM - complement fa"! de $
NEG - complement fa"! de 2 (negare)
ROL, ROR - rota"ie stnga (dreapta) prin Carry
TST- - test pentru zero sau negativ
Opera#ii de salt
BCC, BCS - dac! bitul Carry este 0 sau $
BEQ, BNE - dac! este egal (sau nu)
BHCC, BHCS - dac! bitul Half Carry este 0 sau $
BHI, BHS - dac! este mai mare ori mai mare sau egal
BLO, BLS - dac! este mai mic ori mai mic sau egal
76 MICROCONTROLLERE
BIH, BIL - dac! linia de ntrerupere extern! este $ sau 0
BMI, BPL - dac! este negativ (sau pozitiv)
BMC, BMS - dac! masca de ntrerupere este 0 sau $
BRA, JMP - salt necondi"ionat
BSR, JSR - salt la subrutin!
Manipulare la nivel de bit
BCLR, BSET - nscrierea unui bit cu 0 (sau cu $)
BRCLR, BRSET - salt dac! un bit este 0 (sau cu $)
Opera#ii de control
CLC, SEC - nscriere cu 0 (cu$) a bitului de Carry
CLI, SEI nscriere cu 0 (cu $) a m!#tii pentru ntrerupere
NOP - nu se execut! nici o opera"ie
RTI, RTS - ntoarcere din ntrerupere (subrutin!)
STOP, WAIT - se opre#te oscilatorul CPU #i se a#teapt! o ntrerupere
extern! (se valideaz! ntreruperile)
SWI - ntrerupere software
TAX, TXA - transfer! acumulatorul n registrul index (sau invers)
3.".5 Sistemul de ntreruperi
Unitatea central! poate fi ntrerupt! din programul curent de urm!toarele
surse:
un 0 logic aplicat din exterior pinului nIRQ;
un $ logic aplicat din exterior la pinii PA3-PA0 ai portului I/O PA,
dac! aceste ntreruperi sunt validate;
o ntrerupere de la timer-ul sistemului (TOF Timer Overflow sau RTIF
Real Time Interrupt), dac! ntreruperea este validat!;
instruc"iunea de ntrerupere software SWI.
Dac! o ntrerupere vine n timp ce UC execut! o instruc"iune, instruc"iunea
n curs este terminat! #i apoi se consider! ntreruperea. ntreruperile pot fi
invalidate global n registrul condi"iilor de program (CCR) #i individual pentru
fiecare surs! n parte. Un Reset inhib! toate ntreruperile pentru ca procesul de
ini"ializare s! nu poat! fi ntrerupt.
La apari"ia unei ntreruperi, unitatea central! termin! instruc"iunea n curs,
apoi salveaz! n stiv! registrele UC, invalideaz! ntreruperile pentru ca o nou!
ntrerupere s! nu deranjeze servirea ntreruperii curente. Cererile de ntrerupere
sunt memorate #i servite dup! servirea ntreruperii curente. n PC se transfer!
vectorul de ntrerupere #i se execut! rutina de servire a ntreruperii. Rutina se
termin! cu instruc"iunea RTI care restaureaz! registrele UC din stiv!. Vectorii de
ntrerupere pentru fiecare dintre sursele enumerate mai sus sunt stoca"i n memorie
la adresele:
3. Microcontrollere Motorola 77
timer 07F8h #i 07F9h;
nIRQ sau PA 07FAh #i 07FBh;
instruc"iunea SWI 07FCh #i 07FDh;
Reset (POR, RESET din exterior, COP sau adres! ilegal!) 07Feh #i 07FFh.
Adresele vectorilor pentru fiecare tip de MC se g!sesc n harta memoriei
furnizat! de produc!tor.
Unele MC din familie au #i alte interfe"e care pot #i ele s! solicite
ntreruperi, a#a cum poate cere circuitul timer.
Pn! la servirea ntreruperii trece un anumit interval de timp (tacte), timp
necesar pentru ca UC s! termine instruc"iunea curent! #i s! salveze n stiv!
registrele. Acest timp este numit Interrupt Latency #i poate fi orict de lung dac!
ntreruperile nu sunt validate. Cea mai lung! instruc"iune este MUL, care dureaz!
$$ tacte, iar unitatea central! are nevoie de 9 tacte pentru a salva registrele n stiv!,
deci cel mai lung timp de a#teptare pentru servirea unei ntreruperi este de 20 de
tacte. Acest timp trebuie s! fie luat n calcul n momentul realiz!rii unei aplica"ii n
timp real. Dac! survine o a doua ntrerupere, timpul de a#teptare pentru servirea ei
poate fi prea lung. O solu"ie ar fi validarea ntreruperilor n timpul servirii primei
ntreruperi. n acest caz trebuie avut grij! ca stiva s! fie destul de mare pentru a
permite salvarea a dou! seturi de registre.
3.".6 Interfe#e $i periferice on-chip
Blocurile func"ionale integrate n circuitul MC sunt de o deosebit!
importan"! n implementarea unei aplica"ii. Este n egal! m!sur! important s! fie
cunoscute #i bine st!pnite att capabilit!"ile unit!"ii centrale ct #i ale interfe"elor
cu care este echipat MC aceast! cunoa#tere conduce la o exploatare performant!
a resurselor.
a. Porturi paralele I/O
Porturile paralele I/O sunt forma cea mai simpl! a interfe"elor.
MC68HC705C8 dispune de 3$ de linii I/O digitale de uz general grupate n patru
porturi. Porturile A, B, #i C sunt porturi de cte opt bi"i fiecare; sensul transferului
pe fiecare linie (intrare sau ie#ire) poate fi stabilit prin program. Fiec!rei linii i este
asociat un bit ntr-un registru de direc"ie (DDR Data Direction Register).
Organizarea porturilor de opt bi"i (A,B #i C) este identic!.
Portul D dispune de #apte linii (f!r! PD6); acestea pot fi folosite doar ca
linii de intrare. O particularitate a acestui port este faptul c! pinii corespunz!tori
sunt folosi"i fie de portul D, fie de porturile seriale SPI #i SCI, n func"ie de starea
de activare nscris! n registrele de comand! ale porturilor seriale SPI #i SCI.
Liniile I/O pot fi citite sau scrise de unitatea central! cu instruc"iuni
specifice. Liniile pot fi apelate grupat, la nivel de port sau individual, la nivel de
78 MICROCONTROLLERE
bit. Pentru a economisi timpul unit!"ii centrale, interfe"ele pot lucra cu unitatea
central! prin intermediul ntreruperilor.
b. Portul serial asincron SCI (Serial Communications Interface)
SCI este un transmi"!tor receptor asincron universal (UART) cu
posibilitatea lucrului full-duplex. Pentru un transfer bidirec"ional sunt suficien"i doi
pini. Cu circuite de transla"ie de nivel RS232 se pot face transferuri la distan"e
suficient de mari. Se poate programa una din 32 viteze de transmisie #i lungimea
caracterului; se pot valida separat transmi"!torul #i receptorul; se pot genera
ntreruperi n diferite situa"ii; se poate detecta eroare de cadrare la recep"ie.
Formatul datelor este ca la orice transmisie asincron! (RS232 sau RS422).
Linia este n stare MARK, iar transmisia unui caracter este semnalat! de trecerea
liniei n stare SPACE pe durata bitului de START. Urmeaz! 8 sau 9 bi"i de date #i
un bit de STOP.
Datele care se doresc a fi transmise sunt scrise n registrul de date al SCI
(SCDR), apoi se valideaz! transmisia prin pozi"ionarea bitului TE (Transmit
Enable) n registrul de control al SCI (SCCR2). Dup! ce cuvntul a fost transmis,
se pozi"ioneaz! bitul TDRE (Transmit Data Register Empty) n registrul de stare
SCSR (SCI Status Register). Se indic! astfel c! poate fi transmis un nou cuvnt. Se
pot transmite caractere speciale, cum ar fi BREAK, care "ine linia n stare SPACE
(se transmite un #ir de 0) dac! se pozi"ioneaz! bitul SBK n SCCR2 sau un caracter
care "ine linia n stare MARK.
Golirea registrului de date semnalizat! de TDRE sau de TC (Transmission
Complete) din SCDR poate genera o ntrerupere.
Datele sunt recep"ionate n SCDR, la recep"ia complet! fiind pozi"ionat
bitul RDRF (Receive Data Register Full) n SCSR. Pentru eliminarea recep"iilor
false fiecare bit de start este e#antionat #i citit de $6 ori; orice nepotrivire a
e#antioanelor duce la respingerea acestui bit. Dac! nu se recep"ioneaz! bitul de
STOP se anun"! o eroare de cadrare prin pozi"ionarea bitului FE n SCR.
ntreruperile la recep"ie pot fi generate dac! bitul RDRF din SCSR indic!
recep"ia unui caracter, dac! este o eroare de vitez! de recep"ie (prin recep"ia unui
caracter nainte ca cel precedent s! fi fost citit) sau dac! s-a recep"ionat un caracter
special format numai din valori de $.
Structura registrului de control SCCR$ este:
Bit 7 este al 9-lea bit recep"ionat dac! s-a definit o transmisie pe 9 bi"i
Bit 6 este al 9-lea bit de transmis dac! s-a definit o transmisie pe 9 bi"i
Bit 4 comand! lungimea caracterului, 8 sau 9 bi"i
Bit 3 este un bit de trezire care comand! ce fel de condi"ie treze#te SCI
Structura registrului de control SCCR2 este:
Bit 7 - TIE Transmit Interrupt Enable - valideaz! ntreruperile cerute de TDRE
Bit 6 - TCIE Transmit Complete Interrupt Enable - valideaz! ntreruperile
cerute de TC
Bit 5 - RIE Receive Interrupt Enable - valideaz! ntreruperile cerute de RDRF
3. Microcontrollere Motorola 79
Bit 4 - ILIE Idle Interrupt Enable Bit -valideaz! ntreruperile cerute de
caracterul #ir de $
Bit 3 - TE Transmit Enable - valideaz! transmisia
Bit 2 - RE Receive Enable - valideaz! recep"ia
Bit $ - RWU Receiver Wakeup Enable - pune receptorul n stare de a#teptare
Bit 0 - SBK Send Break - trimite caracterul BREAK
Structura registrului de stare SCSR este:
Bit 7 - TDRE Transmit Data Register Empty - registru de transmisie gol
Bit 6 - TC Transmission Complete - transmisie complet!
Bit 5 - RDRF Receive Data Register Full - registru de recep"ie plin
Bit 4 - IDLE - s-a recep"ionat un #ir de $
Bit 3 - OR Receiver overrun - eroare de vitez! de recep"ie
Bit 2 - NF Receiver Noise - s-au detectat perturba"ii n datele citite (prin
e#antionarea bitului de START)
Bit $ - FE Framing Error - eroare de cadrare.
Registrul ratei de transfer este descris n tabelul 3.2.
Tabelul 3.2
Con#inutul registrului ratei de transfer
Bit 5 Bit 4 Ceas pentru transfer Bit 2 Bit $ Bit 0 Rata de transfer
0 0 ceas intern 0 0 0 ceas de transfer
0 $ ceas intern /3 0 0 $ ceas de transfer/2
$ 0 ceas intern/4 0 $ 0 ceas de transfer/4
$ $ ceas intern/$3 0 $ $ ceas de transfer/8
$ 0 0 ceas de transfer/$6
$ 0 $ ceas de transfer/32
$ $ 0 ceas de transfer/64
$ $ $ ceas de transfer/$28
Rata de transfer se ob"ine printr-o dubl! divizare, nti se ob"ine un ceas de
transfer prin divizarea ceasului intern, apoi se divizeaz! ceasul de transfer. Se pot
astfel ob"ine diferite rate de transfer, de exemplu 4800 Baud (4808) la un ceas de
2MHz prin divizarea nti cu $3, apoi cu $.
c. Portul serial SPI (Serial Peripheral Interface)
Cu acest port se poate realiza o comunica"ie sincron! simpl!, folosit! de
regul! pentru a transfera date ntre circuite pe acela#i montaj cu MC. Un transfer
bidirec"ional necesit! 3 pini, unul dintre ei fiind alocat ceasului de transmisie
generat de masterul SPI. Cu SPI se pot realiza transferuri #i ntre microcontroller-e.
Transferurile pot fi full duplex.
Registrele care controleaz! transferul SPI sunt registrul de control (SPICR
- SPI Control Register) #i registrul de stare (SPISR - SPI Status Register). Un
transfer SPI poate fi ini"iat doar de un master. Master-ul scrie un octet n registrul
80 MICROCONTROLLERE
de transmisie SPI (SPDR - SPI Data Register) de unde datele merg ntr-un registru
de deplasare n care sunt serializate #i de unde sunt transmise sincron cu ceasul de
transmisie. Transmisia se termin! dup! 8 tacte, cnd se pozi"ioneaz! bitul SPIF.
nainte ca master-ul s! trimit! un nou octet trebuie s! se reseteze bitul SPIF prin
citirea registrul de stare SPSR. n slave datele intr! n registrul de deplasare cu
tactul de recep"ie, acela#i cu cel de transmisie. Cnd au intrat 8 bi"i, caracterul este
transferat n registrul de date SPDR. Pentru a se evita erorile de vitez! (sau de
suprascriere - Overrun) trebuie ca octetul din SPDR s! fie citit nainte ca un alt
octet s! fie transmis din registrul de deplasare.
Pozi"ionnd bitul MSTR din registrul SPCR n $, MC lucreaz! n mod
master. n acest mod pinii au urm!toarea semnifica"ie:
SCK (Serial Clock) este ie#ire de tact pentru sincronizare;
MOSI (Master Output Slave Input) este ie#irea serial!;
MISO (Master Input Slave Output) este intrarea serial!;
nSS (Slave Select) protejeaz! MC dac! dou! circuite sunt master.
Acest semnal activ dezactiveaz! la cel!lalt port SPI modul master,
#terge bitul MSTR #i pozi"ioneaz! bitul de eroare (MODF Mode Fault
Flag).
Cu bitul MSTR=0 se valideaz! modul slave, n care pinii au semnifica"ia:
SCK (Serial Clock) este intrarea de tact pentru sincronizare de la
master;
MOSI (Master Output Slave Input) este intrarea serial!;
MISO (Master Input Slave Output) este ie#irea serial!;
nSS (Slave Select) valideaz! SPI pentru modul slave.
n figura 3.3 este ar!tat! o conexiune SPI n care sunt legate un circuit master #i
mai multe circuite slave.
SPI
MISO
MOSI
SCK
/SS
MC master
Port I/O
0
$
2
nSS SCK MOSI MISO
Dispozitiv slave
nSS SCK MOSI MISO
Dispozitiv slave
+$
Figura 3.3 Conexiune SPI
3. Microcontrollere Motorola 8"
Circuitele slave sunt validate pe rnd cu semnale dintr-un port de ie#ire
auxiliar.
Pentru a putea adapta transmisiei seriale ct mai multe echipamente
seriale, se poate programa faza #i polaritatea ceasului de sincronizare cu bi"ii
CPOL #i CPHA din SPCR.
n SPI pot s! apar! urm!toarele erori:
mai multe MC master conectate (Mode Fault Error)
scrierea n SPDR n timpul unei transmisii (coliziune), are ca urmare
nscrierea bitului WCOL n SPSR;
omiterea citirii SPDR nainte ca urm!torul octet s! soseasc! (suprascriere).
O ntrerupere poate fi generat! n urm!toarele situa"ii:
registrul de date este gol sau plin (la transmisie respectiv la recep"ie) se
semnaleaz! cu SPIF care poate genera o ntrerupere dac! ntreruperea este
validat! cu SPIE;
la apari"ia unei erori Mode Fault semnalat! cu MODF, dac! ntreruperea
este validat! cu SPIE.
d. Timer
Circuitele de timp care echipeaz! MC Motorola sunt foarte variate. De la
cel mai simplu (MC68HC05J) care poate genera 2 ntreruperi periodice: una cu
frecven"a fix! #i una cu frecven"a variabil!, #i pn! la cel mai complex (MC68332)
care con"ine un temporizator cu propria lui unitate aritmetic! #i logic! proiectat
special pentru controlul motoarelor cu ardere intern!.
Un timer tipic (de la MC68HC705J$A), nu cel mai simplu dar nici cel mai
complex, are schema bloc dat! n figura 3.4.
Ceasul de intrare n timer este ceasul de magistral! (frecven"a cristalului/2)
care, dup! o divizare cu 4, constituie tact pentru un num!r!tor de 8 bi"i. Valoarea
acestui registru num!r!tor poate fi citit! de UC n oricare moment la loca"ia 09h
(TCR Timer Counter Register). UC nu poate s! modifice valoarea acestui registru.
Cnd num!r!torul trece de la FFh la 00h este pozi"ionat bitul TOF (Timer Overflow
Flag) n registrul de stare al timer-ului (TCSR Timer Control and Status Register).
Starea acestui bit poate fi citit! de UC n oricare moment. Dac! bitul TOIE (Timer
Overflow Interrupt Enable) din registrul de stare TCSR este $, n momentul trecerii
de la FFh la 00h se genereaz! o ntrerupere, numit! ntrerupere de dep!#ire
(Overflow Interrupt).
Ie#irea num!r!torului de 8 bi"i constituie tact pentru un alt num!r!tor de 7
bi"i. Ie#irea de la oricare dintre cei mai semnificativi 4 bi"i ai acestui ultim
num!r!tor (selectat! de unul din cei doi bi"i RT$ #i RT0 din registrul de control
TCSR) poate fi folosit! pentru generarea unei ntreruperi, numit! de timp real
(Real Time Interrupt) care nscrie bitul RTIF (Real Time Interrupt Flag) din
TCSR. Se genereaz! o ntrerupere dac! bitul RTIE (Real Time Interrupt Enable)
este $.
82 MICROCONTROLLERE
Ultimul nivel al timer-ului este un num!r!tor de 3 bi"i folosit pentru cesul
de gard! (COP Computer Operating Properly). Dac! este validat! verificarea COP,
trebuie ca programatorul s! reseteze COP nainte de expirarea perioadei
programate pentru comanda unui RESET al UC. Perioada de timp n care COP
trebuie resetat depinde de RT$ #i RT0. n tabelul 3.3 sunt date perioadele de
ntrerupere #i perioadele n care COP trebuie resetat. Perioadele corespund unui
tact de 2MHz:
Tabelul 3.3
Perioade de ntrerupere $i perioade de reset programabile cu un tact de 2 MHz.
RT$ RT0 Perioada de ntrerupere Perioada n care COP trebuie resetat
0 0 8.2ms 57.3ms
0 $ $6.4ms $$4.7ms
$ 0 32.8ms 229.4ms
$ $ 65.5ms 458.8ms
Un reset al COP se poate realiza prin scrierea bitului 0 de la adresa 07F0h
(COPR COP Register).
MC din seria 68705 sunt echipate cu un timer care are posibilitatea de
captur! #i comparare. Captura poate nregistra momentul la care apare un
eveniment extern (o tranzi"ie pe pinul TCAP). n acest moment memoreaz!
con"inutul registrelor timer-ului n registrele de captur!. Memorarea registrelor
timer-ului la tranzi"ii de aceea#i polaritate a TCAP poate determina perioada unui
Xtal/2
Divizare
cu 4
Num!r!tor de 8 bi"i MSB
TCR (Timer Counter Register) la adresa 0009h
TCSR registru de control #i stare a timerului
TOF RTIF TOIE RTIE TOFR RTIFR RT$ RT0
Num!r!tor de 7 bi"i Selec"ie ie#ire
Num!r!tor de 3 bi"i
COP
Generare de Reset
intern al UC
Figura 3.4 Timer 6805
3. Microcontrollere Motorola 83
semnal, iar la tranzi"ii de polaritate opus! poate determina l!"imea unui impuls.
Polaritatea de declan#are este programabil!. Prin comparare se poate genera un
semnal de ie#ire cnd num!r!torul timerului atinge o valoare selectat!. La fiecare 4
tacte se compar! valoarea num!r!torului cu cea scris! n registrul de comparare.
Dac! este egalitate se genereaz! un semnal TCMP.
e. Portul PWM
Modula"ia impulsurilor n l!"ime (Pulse Width Modulation) are multe
aplica"ii, mai ales n comanda motoarelor de curent continuu sau a surselor de
alimentare. Din acest motiv unele MC includ n structura lor un modulator PWM
ca interfa"!.
Circuitul MC68HC05D9 con"ine 5 canale PWM de cte 6 bi"i care sunt
realizate cu ajutorul unui num!r!tor de 6 bi"i, un registru de control PWM #i 5
registre de date care formeaz! 5 linii PWM ce sunt disponibile la pinii portului D
(figura 3.5).
n registrul de mod sunt 5 bi"i care valideaz! modulul PWM astfel nct
semnalele PWM s! fie livrate pe la pinii portului D. Tot n registrul de mod mai
este un bit, SCIB, care selecteaz! dac! la adresa 000Dh s! fie date pentru PWM
sau rata de divizare pentru SCI. Dac! nu sunt folosite ca ie#iri PWM, liniile
portului D pot fi folosite ca intr!ri/ie#iri obi#nuite. Registrul de mod PWM se afl!
la adresa 0008h.
Num!r!tor de 6
bi"i
PWM4 (000Dh)
PWM3 (000Ch)
PWM2 (000Bh)
PWM$ (000Ah)
PWM0 (0009h)
R
E
G
I
S
T
R
U
D
E
M
O
D
P
W
M
PWM 4
PWM 3
PWM 2
PWM $
PWM 0
Figura 3.5 Structura modulului PWM la familia 6805
0008h
84 MICROCONTROLLERE
Dac! se ncarc! registrul de date cu 00h semnalul la ie#ire va fi tot timpul
zero. nscrierea valorii 20h n registrul de date are ca rezultat un semnal cu factor
de umplere 50% la ie#irea corespunz!toare, iar nc!rcarea valorii 3Fh va determina
un semnal cu factor de umplere de 63/64.
f. Portul USB (MC68HC05JB4)
MC68HC05JB4 con"ine un convertor A/D #i o interfa"! USB, ceea ce l
face ideal pentru achizi"ia de date #i transferul lor c!tre un calculator PC-AT.
Datorit! structurii USB, este posibil! realizarea unui punct central de prelucrare
echipat cu PC #i multe puncte de achizi"ie echipate cu acest MC.
Modulul USB implementeaz! standardul USB $.0, de mic! vitez!, la
$,5Mbps, cu 3 puncte de cap!t (End Point). MC con"ine #i transceiverul USB.
Schema bloc a modului USB este dat! n figura 3.6.
Transceiverul are o ie#ire diferen"ial! care poate lucra cu 3 st!ri pentru a
permite transferul de date bidirec"ional de tip full-duplex. Receptorul trebuie s! fie
de asemenea cu intr!ri diferen"iale.
Comanda interfe"ei USB se realizeaz! prin intermediul a 3 registre de
comand! iar starea poate fi citit! dintr-un registru de stare. Exist! un registru de
adres! #i 24 de registre de date. Modul de func"ionare n ntreruperi este programat
prin registrul de ntreruperi. Interfa"a USB poate lucra n modul de economie de
energie dac! nu exist! trafic pe linii un anumit interval de timp. Apari"ia unei date
la recep"ie sau emisia unei date de c!tre UC produce ie#irea din starea inactiv!.
Logica de
control USB
Registre USB
BUS INTERN
Transceiver
Stabilizator 3,3V
D-
D+
Cablu USB
MC
Figura 3.6 Structura intern! a portului USB
spre HUB sau
alt dispozitiv
3. Microcontrollere Motorola 85
g. Interfa#a LCD
MC6805 DragonKat este denumirea unui MC din familia 6805 care
con"ine o interfa"! pentru un afi#or cu cristale lichide.
Interfa"a pentru LCD con"ine:
logica de control pentru sincronizare;
RAM-ul de display care stocheaz! datele pentru display printr-o
coresponden"! $ la $ a bi"ilor (fiecare bit din memorie are
corespondent un punct pe LCD). Memoria este organizat! n cuvinte
de 5 bi"i #i poate fi scris! sau citit!;
registru de date este folosit pentru a stoca datele din memoria RAM a
LCD;
generator de tensiune care con"ine un divizor de tensiune pentru
alimentarea segmentelor #i a planului din spate;
driver pentru planul din spate;
driver pentru segmente.
Structura unui afi#aj LCD este ar!tat! n figura 3.7.
Un punct este aprins cnd o linie Bpi #i una SEGi sunt active. Pentru
caracterul A, memoria RAM de display are con"inutul din tabelul 3.4.
Tabelul 3.4
Con#inutul memoriei pentru afi$area caracterului A
Adresa Bit0 Bit$ Bit2 Bit3 Bit4
200 0 0 $ 0 0
20$ 0 $ 0 $ 0
202 $ 0 0 0 $
203 $ 0 0 0 $
204 $ $ $ $ $
205 $ 0 0 0 $
206 $ 0 0 0 $
207 0 0 0 0 0
Segmente (SEG 0-39)
Planul
din spate
(BP 0-$5)
Figura 3.7 Afi#aj LCD
86 MICROCONTROLLERE
Punctul de sus a lui A de exemplu, se scrie cu BP0 #i SEG2 active.
Semnalele SEG #i BP sunt periodice #i baleiaz! tot timpul afi#ajul pentru a men"ine
punctele aprinse. Frecven"a semnalelor de aprindere a punctelor este de 32kHz, iar
frecven"a unui cadru este de 62,5Hz.
Dimensiunea panourilor LCD difer!, de aceea difer! #i consumul de
curent. Tensiunea spre afi#aj este ob"inut! prin nserierea unor rezisten"e, nseriere
care poate fi comandat! soft.
Schema bloc a interfe"ei pentru LCD este dat! n figura 3.8
3.".7 Managementul puterii
Instruc"iunea STOP plaseaz! UC n modul de lucru cu consum minim de
energie. Ceasul intern este oprit #i toate procesele interne sunt oprite, inclusiv
timer-ul. ntreruperile externe sunt validate automat n registrul CCR. Sunt #terse
registrele aferente timer-ului #i canalului SCI, dar celelalte registre #i memoria nu
sunt alterate. Unitatea central! poate fi trezit! din STOP doar de o ntrerupere
extern!.
Instruc"iunea WAIT plaseaz! UC ntr-un mod de lucru cu consum redus de
energie. R!mn active timer-ul #i canalul serial SCI. Orice ntrerupere validat!,
primit! din exterior sau de la temporizator sau SCI, trezesc unitatea central!.
Registru de
date LCD
(40bi"i)
RAM pentru display $28x5bit
Magistrala intern! de
adrese si date
Driver de segmente
Driver
pentru
planul
din
spate
BP0-BP$5
SEG0-SEG39
Registru
de control
Figura 3.8 Schema bloc a intefe"ei LCD
3. Microcontrollere Motorola 87
ntreruperile sunt validate automat. Toate registrele #i memoria r!mn cu datele
avute la intrarea n starea WAIT.
3.".8 Autoverificarea
MC are 2 moduri de operare: normal #i auto-verificare. Modul de operare
este selectat de nivelul logic pe pinul IRQ n momentul unui RESET. n modul
normal de operare ncepe rularea unui program din EPROM, deci EPROM-ul
trebuie sa fie programat dac! a fost ales modul normal de operare. n modul
autotest MC ruleaz! un program con"inut n ROM n zona de memorie 3F00h-
3FDEh. Autotestul comunic! rezultatele la pinii PC3-PC0, unde se pot conecta
LED-uri.
3.".9 Programarea EPROM
Unele MC din familie con"in ROM, a#a cum este MC68HC05D9 care
con"ine $6K octe"i de PROM sau MC68HC05D24 care con"ine 24K octe"i de
ROM. Modelul MC68HC05D32 are 32K octe"i memorie EPROM, cu posibilitatea
de #tergere UV. nscrierea memoriei se face cu ajutorul unei tensiuni suplimentare
de $5V (Vpp). Circuitele MC68HC705C8A con"in 8K EPROM sau OTP. Memoria
EPROM sau OTP se poate programa cu ajutorul unui modul special, construit de
Motorola, sau folosind un montaj n care progamul se ncarc! n MC dintr-o
memorie EPROM extern! sau cu orice programator care poate s! adreseze #i s!
pun! date pe liniile de date (figura 3.9
MC68xx
PA
PA0-
PA7
PB
PB0-
PB7
PC
PC0-
PC4
A0-A7
D0-D7
A8-A$2
Vpp
+$5V la
nscriere
SCI
PD
PD$
PD0
Circuite de
modificare de
nivel RS232
TxD RxD
Figura 3.9 Schema unui programator EPROM (sau OTP)
88 MICROCONTROLLERE
Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A$2)
se stabilesc la portul C (PC0-PC4). Liniile cu datele de nscris se stabilesc la portul
B. Registrul folosit pentru programarea EPROM-ului este registrul de programare
(PROG).
Bit 2- LAT (Latch Enable Bit), pozi"ionat n $, comand! ca liniile de
adrese #i date s! fie bufferate pentru ca n urm!torul ciclu s! se fac! o
scriere a EPROM-ului;
Bit 0 (PGM) valideaz! tensiunea Vpp pentru programarea EPROM-ului.
Se pune problema cum se poate ca un MC care nu a fost programat s!
lucreze sub comanda unui program ca s! poat! avea acces la programarea unui
registru. Pentru programare MC trebuie s! lucreze n modul bootstrap, mod n care
MC intr! prin for"area liniei IRQ n timpul unui RESET. Programe simple
utilizator pot fi introduse n RAM prin interfa"a SCI (Serial Communications
Interface) #i rulate. Programul se transmite prin interfa"a serial!, dup! care se
ruleaz! programul din RAM. Parametrii comunica"iei implici"i la Reset sunt 8 bi"i
de date #i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint!
num!rul total de octe"i care vor fi trimi#i. Con"inutul EPROM-ului poate fi
verificat prin citirea lui tot prin SCI. Con"inutul EPROM-ului se poate ascunde, a#a
nct s! nu mai poat! fi citit din exterior, prin pozi"ionarea unui bit de securizare n
registrul de op"iuni (adresa $FDFh).
3.2 MC M68HC08
Familia 6808 urmeaz! n timp familiei 6805, binen"eles cu mbun!t!"iri
care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu
cele din familia descris! n subcapitolul anterior (3.$). Ca mbun!t!"iri ale UC 6805
pot fi men"ionate:
indicatorul de stiv! este un registru de $6 bi"i ($3 la 6805);
registrul de index este de $6 bi"i, exist! posibilitatea manipul!rii separat a
octetului superior #i a celui inferior (8 bi"i la 6805);
frecven"a intern! CPU standard este de 8MHz (2MHz la 6805);
se pot adresa 64K octe"i memorie de date sau program (2K-$6K la 6805),
are $6 moduri de adresare (8 la 6805) #i 78 de noi coduri de instruc"iuni;
se pot face mut!ri de date ntre loca"ii de memorie f!r! intermediul
acumulatorului;
UC poate executa mp!r"iri de operanzi de 2 octe"i la operanzi de $ octet;
operarea secven"ial! a UC poate fi oprit! de dou! tipuri de evenimente:
reset sau ntreruperi. Sursele de Reset suplimentare fa"! de 6805 sunt:
3. Microcontrollere Motorola 89
-detectarea unui cod de instruc"iune inexistent!;
-tensiune de alimentare sub o limit! acceptat!
(LVI, Low Voltage Inhibit).
sistemul de ntreruperi admite un num!r maxim de $28 de surse de
ntrerupere: reset, SWI #i IRQ0-IRQ$25. Unele dintre aceste cereri de
ntrerupere sunt accesibile la pin. ntreruperea software are cea mai mare
prioritate. n mod WAIT ceasul UC este oprit, dar celelalte module au
ceas, astfel nct orice ntrerupere treze#te UC. n mod STOP toate
ceasurile sunt oprite #i doar o ntrerupere extern! poate trezi UC.
Schema bloc a unui MC 6808 este prezentat! n figura 3.$0.
3.2." Unitatea central! 6808
Unitatea central! 6808 admite 2 moduri de lucru: un mod utilizator #i un
mod monitor ROM. Modul de lucru poate fi alese prin pozi"ionarea unui pin din
exterior (IRQ) n $ sau 0 n timpul unui RESET. Modul monitor creeaz!
posibilitatea leg!rii MC cu un calculator gazd! printr-un canal serial, transferarea
Port A Port C Port B
ADC
Port D Port E
Seriale
Port F
Timer
Port G Port H
Tastatur!
Unitatea central!
6805, 6808...
Memorie ROM sau
FLASH
(4096bytes)
Memorie RAM
($28bytes)
Memorie
EEPROM
Magistral! de date #i
adrese
+V
DD
(+5V
sau +3V)
RESET
IRQ
Oscilator
Monitor ROM (960bytes)
Figura 3."0 Schema bloc a unui MC din familia 6808
90 MICROCONTROLLERE
software-ului de pe calculatorul gazd! n MC #i execu"ia lui din RAM. Pentru MC
echipate cu EEPROM n mod monitor se poate programa EEPROM-ul. Leg!tura
serial! ntre calculator #i MC este RS232 prin intermediul pinilor unui port I/O. n
mod monitor MC poate s! execute programe din RAM cu ajutorul unor comenzi
simple monitor, toate func"iile MC fiind valide. n modul monitor COP este
invalidat. Transferul de date este bidirec"ional. Fiecare comand! spre MC este
urmat! de un r!spuns ecou al MC. Comenzile monitorului sunt:
READ - cite#te o loca"ie de memorie (se trimite cod+2 octe"i de adres!
#i se returneaz! con"inutul loca"iei),
WRITE - scrie o loca"ie de memorie (se trimite cod+2 octe"i de
adres!+octetul de scris)
IREAD - citire indexat!, cite#te urm!torii 2 octe"i din memorie fa"! de
ultima adres! accesat!
IWRITE - scriere indexat!, scrie urm!torii 2 octe"i din memorie fa"! de
ultima adres! accesat!
READSP - cite#te indicatorul de stiv!
RUN - ruleaza program
Viteza de transfer implicit! ntre MC #i calculator este de 4800bps cu pinul
PTC3 "inut la $ n timpul resetului #i 9600bps cu pinul PTC3 "inut la 0 n timpul
resetului.
3.2.2 Interfe#e $i periferice on-chip
a. Porturi paralele I/O
MC 6808 poate gestiona 8 porturi I/O (A,B,C,D,E,F,G,H) cu linii care pot
fi programate ca ie#iri sau intr!ri. Liniile nefolosite trebuie legate la mas! sau la
tensiunea de alimentare pentru a preveni defectarea circuitului prin desc!rc!ri
electrostatice sau consumul excesiv de curent.
Fiec!rui port i corespunde un registru de direc"ie (DDR) prin care se
programeaz! sensul de transfer al pinului. Unele porturi au semnifica"ii duble, dac!
liniile lor sunt folosite #i de alte interfe"e:
portul B poate fi folosit ca 8 linii de intrare n convertorul A/D (ADC);
portul C este un port de 6 bi"i, bitul 2 se poate folosi pentru a furniza n
exterior ceasul sistemului;
portul D poate avea dou! linii folosite ca intr!ri pentru timer (Bit 6 #i
Bit 4);
portul E poate fi folosit ca #i canal SPI #i SCI;
portul F este un port de 7 bi"i care poate fi folosit ca intr!ri/ie#iri pentru
timer;
3. Microcontrollere Motorola 9"
portul G este un port de 3 bi"i, liniile pot fi folosite ca interfa"! pentru
tastatur!;
portul H este un port de 2 bi"i, liniile pot fi folosite ca interfa"! pentru
tastatur!.
b. Convertorul analog digital (ADC)
Convertorul A/D este un convertor pe 8 bi"i cu aproxim!ri succesive care
poate face conversii continuu sau la primirea unei comenzi. Sfr#itul conversiei
poate fi semnalizat cu un bit indicator (flag) sau poate cere o ntrerupere. Ceasul de
conversie poate fi selectat. Un MC are 8 canale de conversie cu intr!ri multiplexate
analogic.
Intr!rile pentru ADC se fac pe pinii portului de uz general PTB7-PTB0.
Selec"ia canalului se face pentru a stabili care pin este intrare analogic!. Ceilal"i
pini pot fi folosi"i ca intr!ri/ie#iri de uz general. Dac! valoarea citit! este VREFH,
atunci valoarea digital! va fi FFh, iar dac! este VREFL atunci valoarea digital! va
fi 00h. Aceste tensiuni, mpreun! cu tensiunea de alimentare pentru blocul analogic
al MC sunt furnizate din exterior. Schema bloc a convertorului este dat! n figura
3.$$.
Registrele ADC sunt:
registru de control $i stare al ADC (ADSCR), care con"ine:
Bit 7 COCO/IDMAS, conversie complet! sau selec"ie ntrerupere DMA. Dac!
ntreruperile sunt invalidate (AIEN=0), COCO este pozi"ionat de fiecare dat!
cnd se termin! o conversie. n modul de conversie continu! datele se
suprascriu n registrul de date dup! fiecare conversie #i COCO este pozi"ionat
doar dup! prima conversie. Dac! ntreruperile sunt validate (AIEN=$), IDMAS
selecteaz! dac! ntreruperea solicit! #i un transfer DMA.
Bit 6 AIEN (ADC Interrupt Enable) valideaz! ntreruperile la sfr#itul unei
conversii.
ADC
Registru de date ADR
Selec"ie
canal
ADSCR
Intr!ri
analogice
Cerere de
ntrerupere
Ceas de conversie
Figura 3."" Schema bloc a convertorului analog digital
92 MICROCONTROLLERE
Bit 5 ADCO (ADC Continous Conversion), dac! este setat se face conversie
continu!.
Bit4-0 ADCH4-0 selecteaz! unul din cele 8 canale de conversie
registru de date (ADR)
registru de ceas (ADCLK) care con"ine:
Bit 7-5 ADIV2-0 formeaz! rata de divizare a ceasului de conversie de la
ADICLK (000) la ADICLK/$6 ($00).
Bit 4 ADICLK selecteaz! ca ceas de conversie ceasul intern sau un ceas
generat de timer.
O conversie ncepe dup! scrierea registrului ADSCR. Rezultatul conversiei
este stocat n registrul de date (ADR) #i la terminarea conversiei se pozi"ioneaz!
bitul COCO. Dac! se opteaz! pentru conversie continu!, dup! prima conversie
urmeaz! alta, care rescrie registrul de date. Dac! sunt validate ntreruperile,
sfr#itul conversiei poate cere ntrerupere c!tre UC sau poate face #i o cerere
DMA.
c. Interfa#a extern! msCAN08 (Motorola Scalable CAN)
Protocolul CAN a fost definit de BOSCH n $99$ pentru utilizarea pe o
magistral! la autoturisme, unde s! ndeplineasc! condi"ii specifice: procesare n
timp real, fiabilitate ntr-un mediu perturbat #i pre" mic. Caracteristici ale
magistralei msCAN08 sunt:
transmisie serial! sincron! cu blocuri ntre 0-8 octe"i;
viteza de transfer pn! la $MBps;
transferul serial se face pe 2 linii, o intrare (RxCAN) #i o ie#ire
TxCAN).
Cuplarea la magistral! nu se face direct, ci prin transceiver-e care pot
suporta un curent important #i care pot detecta dac! un MC are o linie defect! care
ar for"a magistrala la conectare direct! (figura 3. $2).
MC $
msCAN08
TxCAN RxCAN
MC 2
msCAN08
TxCAN RxCAN
Transceiver Transceiver
Magistrala
Figura 3."2. Cuplarea la magistrala CAN
3. Microcontrollere Motorola 93
O implementare modern! trebuie s! respecte dou! condi"ii:
orice dispozitiv CAN poate s! transmit! un #ir de mesaje f!r! s!
elibereze magistrala ntre mesaje. Arbitrarea magistralei se va face
doar dup! ce s-a terminat transmiterea mesajului.
mesajele sunt astfel organizate nct cel mai prioritar mesaj va fi trimis
naintea celor care stau de mai mult timp n coada de a#teptare.
Aceste cerin"e pot fi ndeplinite cu o schem! de transmisie cu buffere
duble. Chiar #i a#a, unitatea central! nu are ntotdeauna timp s! aranjeze datele n
buffer, a#a nct la 6808 s-a realizat o arhitectur! cu 3 buffere.
Mesajul recep"ionat este stocat ntr-o stiv! FIFO cu 2 nivele. Exist! 2
buffere de recep"ie de $3 octe"i aranjate ntr-o singur! arie de memorie, astfel nct
registrul de date recep"ionate are o singur! adres!. Registrul RxBG (Background
Receive Buffer) prime#te datele seriale #i le transfer! n RxFG (Foreground
Receive Buffer) care poate fi adresat de unitatea central!. Dac! mesajul recep"ionat
este corect (are un identificator valid) se pozi"ioneaz! bitul RxF (Receiver Full
Flag) #i se genereaz! o cerere de ntrerupere. n acest timp n registrul RxBG se
recep"ioneaz! un nou cadru. Schema bloc pentru recep"ie #i transmisie este dat! n
figura 3.$3.
Pentru a mic#ora num!rul de ntreruperi solicitate UC de c!tre receptor s-a
introdus un filtru de acceptare. Datele msCAN au o anumit! structur!, primii bi"i
RxBG
RxFG
RxF
Date spre
CPU
RxCAN
TxCAN
Tx0
Tx$
Tx2
TxE 0
Date de
la CPU
TxE $
TxE 2
PRIO
PRIO
PRIO
Filtru
Figura 3."3 Schema bloc de receptie, emisie CAN
94 MICROCONTROLLERE
fiind de identificare a cadrului #i de adres! a destina"iei. Este posibil ca interfa"a
CAN s! verifice ace#ti primi bi"i #i s! fac! transferul din RxBG n RxFG numai
dac! mesajul este destinat acestui MC.
Cnd ambele registre de recep"ie sunt pline #i se recep"ioneaz! date se
genereaz! o eroare de suprascriere. Se abandoneaz! recep"ia noilor caractere, se
semnalizeaz! eroarea, dar transmi"!torul r!mne func"ional.
Transmiterea mesajelor se face cu o structur! de 3 buffere, fiecare de $3
octe"i. Un registru suplimentar TBPR (Transmit Buffer Priority Register) stabile#te
prioritatea mesajelor. Fiecare buffer de transmisie semnaleaz! UC faptul c! este
gol prin pozi"ionarea unui bit TXE (Transmit Buffer Empty) n registrul de stare
CTFLG (CAN Transmitter Flag Register). Bitul TXE poate cere o ntrerupere
pentru ca UC s! poat! renc!rca bufferul de transmisie care s-a golit. Dac! mai
mult de un registru este plin #i gata de transmisie, se face apel la registrul de
priorit!"i pentru arbitrare. Fiecare buffer de transmisie are o zon! de 8 bi"i (PRIO)
n care programul utilizator scrie prioritatea mesajului cnd se transmite mesajul de
la UC (cea mai mic! valoare reprezentnd cea mai mare prioritate).
Dac! se transmite un mesaj cu prioritate mai mare #i se dore#te
abandonarea mesajului curent, se solicit! aceasta cu bitul ABTRQ (Abort Request
Flag) n registrul de control al transmisiei CTCR (Transmission Control Register).
Dac! solicitarea de abandonare este posibil!, interfa"a CAN va pozi"iona bitul
ABTAK (Abort Request Acknowledge) #i TXE pentru a se putea transmite mesajul
prioritar.
d. Interfa#a cu tastatura
Interfa"a cu tastatura const! n 5 linii independente de intrare n MC care
pot solicita ntreruperi mascabile. Func"ionarea acestei interfe"e este asistat! de
urm!toarele registre:
registrul de stare $i control al tastaturii (KBSCR) con"ine:
Bit 3 - indicatorul existen"ei unei ntreruperi, KEYF. Bitul este $ dac! se
afl! n curs de servire o ntrerupere de la tastatur!;
Bit 2 - confirmare, ACKK. Dac! acest bit este pozi"ionat se #terge bufferul
ntreruperilor de la tastatur!;
Bit $ - validarea ntreruperilor de la tastatur!, IMASKK. Dac! acest bit are
valoarea 0 sunt validate ntreruperile;
Bit 0 - modul de ntrerupere, MODEK. Dac! bitul este $ se poate cere o
ntrerupere cu un front c!z!tor sau cu un nivel 0; dac! bitul este 0 se poate
cere o ntrerupere doar cu front c!z!tor.
registrul de validare a ntreruperilor de la tastatur! care cu bi"ii
Bit 4 - Bit 0 valideaz! pinul portului I/O ca cerere de ntrerupere de la
tastatur! sau ca port standard.
3. Microcontrollere Motorola 95
3.2.3 Programarea memoriei EEPROM
Circuitele din familia 6808 pot avea 5$2 octe"i de memorie EEPROM care
poate fi #tears! #i renscris! f!r! o tensiune extern! suplimentar!. Memoria
programat! poate fi protejat! mpotriva unor scrieri sau #tergeri accidentale.
Starea unui bit neprogramat este $ logic. Programarea lui nseamn!
trecerea n stare 0. Programarea pote fi f!cut! n mod redundant, adic! primii 256
de octe"i s! fie identici cu urm!torii.
Registrele EEPROM sunt:
registrul de control al EEPROM EEPROM Control Register (EECR):
Bit 7 EEBCLK, validare ceas intern pentru EEPROM; selecteaz! cesul
folosit pentru programarea EEPROM: ceasul intern sau un oscilator RC
intern.
Bit 5 EEOFF; invalideaz! EEPROM-ul n modurile de lucru cu
economie de energie.
Bit4, Bit 3 - EERAS $, EERAS 0; stabilesc opera"ia care se execut!
conform tabelului 3.5.
Tabelul 3.5
Programarea opera#iilor n registru de control
EEBPx EERAS$ EERAS0 Opera"ia
0 0 0 Programare de octet
0 0 $ %tergere de octet
0 $ 0 %tergere bloc
0 $ $ %tergere global!
$ X X Nu se executa programare/stergere
Bit 2 - EELAT; dac! este setat, comand! memorarea datelor #i adreselelor
pentru scriere iar dac! este 0, se face citire din EEPROM.
Bit 0 EEPGM; dac! este setat, valideaz! scrierea sau #tergerea.
Pozi"ionarea lui EEPGM trebuie s! fie precedat! n alt pas de pozi"ionarea
lui EELAT.
registrul EEPROM nevolatil (EENVR):
Bit 7 EERA, arie redundant!; configureaz! memoria n dou! jum!t!"i
redundante.
Bit 4 - CON0; stabile#te dac! se valideaz! securitatea memoriei (cu 0) sau
nu.
Bit 3-0 EEBP3-0, bi"i de protec"ie; dac! ace#ti bi"i sunt $, blocul de
memorie este protejat la scriere.
registrul de configura#ie a ariei, EEACR se poate citi ceea ce a fost nscris n
registrul EENVR. Din ra"iuni de siguran"! a informa"iei, datele de configurare a
96 MICROCONTROLLERE
EEPROM se scriu ntr-un registru nevolatil, EENVR. La un RESET, datele din
EENVR se scriu ntr-un registru volatil corespondent (EEACR).
n modul de economie de energie STOP nu se poate face nscrierea sau
#tergerea memoriei EEPROM.
Pentru nscrierea EEPROM se parcurg urm!torii pa#i:
se reseteaz! EERAS$ #i EERAS0 (#i se seteaz! EELAT n EECR)
se scrie octetul n EEPROM
se seteaz! EEPGM
se a#teapt! un timp pentru ca programarea s! poat! fi executat!
se reseteaz! EEPGM
se a#teapt! un timp pentru ca tensiunea de programare s! scad!
se reseteaz! EELAT
O #tergere pe bloc sau global! se face cu bi"ii EERAS ca n tabelul 3.5,
orice adres! din bloc fiind posibil!. mp!r"irea n blocuri este EEBP0 (0800h-
087Fh), EEBP$ (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh).
n modul redundant EEBP2 #i 3 nu au nici o semnifica"ie.
3.3 MC PE "6 BI%I - 68"6
Unitatea central! 68$6 este o unitate central! cu magistrala de date de $6
bi"i #i o magistral! de adrese pe 20 de bi"i care permite adresarea a $Moctet de
memorie. UC con"ine 2 registre acumulator de $6 bi"i #i 3 registre index de $6 bi"i
pe lng! registrele clasice. Unitatea central! poate executa instruc"iuni pe 8 bi"i, pe
$6 bi"i sau pe 32 de bi"i. Toate instruc"iunile de la UC 68$$ pot fi executate de
68$6, dar cu alt num!r de tacte, deci cu alt! vitez!. Unitatea central! func"ioneaz!
la maximum $6MHz. Tehnologia de fabrica"ie permite func"ionarea #i la viteze mai
mici, chiar n regim static (ca #i celelalte UC). Unitatea central! con"ine facilit!"i
DSP (Digital Signal Processing), fiind posibile nmul"iri cu numere frac"ionare.
UC permite $0 tipuri de adresare, din care 6 sunt preluate de la 68$$.
Pentru p!strarea compatibilit!"ii, registrul PC #i indicatorul de stiv! sunt de
$6 bi"i, dar apare un registru nou, numit K, ce re"ine extensiile de la $6 bi"i la 20 de
bi"i pentru registrul PC #i SP. n structura UC mai apar #i registrele pentru
nmul"iri, 2 registre de $6 bi"i (H #i I) #i unul de 36 de bi"i pentru rezultat (MAC).
Pentru comunica"ia ntre MC sau pentru adresarea memoriei externe s-a
standardizat un bus extern, numit IMB (Intermodule Bus), cu $6 linii de date #i 24
linii de adres!, la care s-a aliniat #i 68$6. Acest bus este de tip asincron, permi"nd
transfer pe 8 sau $6 bi"i n urma unui protocol (handshake).
3. Microcontrollere Motorola 97
3.3." Modulul de integrare (SIM, System Integration
Module)
Acest modul, ap!rut de la 68$$, grupeaz! blocurile care controleaz!
sistemul #i cuprinde:
Modul pentru configurarea sistemului #i protec"ie:
$. un monitor de bus; reseteaz! sistemul dac! apar cicluri de
magistral! mai lungi de 8-64 tacte de ceas sistem;
2. un monitor de HALT; pozi"ioneaz! un bit n registrul de stare
al RESET-ului cnd a ap!rut o instruc"iune de HALT pe bus;
3. un monitor de ntreruperi; supravegheaz! apari"ia unei arbitr!ri
n timpul unui ciclu de ntrerupere;
4. un ceas de gard! (watch dog);
Modul pentru sintetizarea ceasului; poate fi realizat! din mai multe
surse; dintr-o surs! intern! cu ajutorul unei bucle PLL, dintr-o surs!
extern! cu ajutorul buclei PLL sau direct dintr-o surs! extern!.
Modul de formare a bus-ului extern
Modul de test
3.3.2 Interfe#e
Interfe"ele seriale sunt grupate sub forma unui modul serial cu coad! de
a#teptare (QSM Queued Serial Module) care con"ine o interfa"! serial! SPI #i una
SCI. Coada de a#teptare este format! n RAM #i are dimensiunea de $6 cuvinte de
8-$6 bi"i fiecare. Transmisia acestui #ir de date poate fi executat! automat, f!r!
interven"ia unit!"ii centrale. Modulul QSM este cuplat pe bus-ul IMB.
Convertorul analog numeric (ADC) este un convertor cu aproxima"ii
succesive cu rezolu"ia programabil! de 8-$0 bi"i, cu 8 canale multiplexate.
Convertorul este conectat pe bus-ul IMB.
Pentru date importante (cum ar fi cele din stiv!) exist! o memorie RAM
static de $K octet care la c!derea tensiunii de alimentare este alimentat! de la un
pin special, unde se poate conecta o baterie.
Timer-ul are $$ canale, din care 2 sunt folosite pentru generarea
semnalelor PWM.
Circuitul este capsulat n capsule de $32 sau $44 pini.
Schema bloc a circuitului este dat! n figura 3.$4.
98 MICROCONTROLLERE
3.4 MC PE 32 DE BI%I - 68300
MC 68300 este asem!n!tor arhitectural cu MC pe $6 bi"i. n jurul UC sunt
grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8
canale, un modul de comunica"ie serial! cu coad! de a#teptare (QSM), 5$2 octe"i
RAM static, 3,5K octe"i RAM care pot fi folosi"i #i de timer (TPURAM), un modul
de timp (TPU, Time Processor Unit), pn! la 6 porturi I/O de uz general #i 2
module flash EEPROM.
Ceasul intern al sistemului este de maximum $6MHz.
Unitatea central! CPU32 este compatibil! soft cu procesoarele din familia
68000. Ea con"ine $6 registre generale de 32 de bi"i cu care se poate lucra pe 8, $6
sau 32 de bi"i, un PC de 32 de bi"i, un SP de 32 de bi"i, un registru de stare #i alte
registre.
Unitatea central!
68$6
Memorie
SRAM
($024 octe"i)
Magistral! de date #i
adrese IMB
QSM
(SCI, SPI)
Port C
Timer
Port E
Port F
Port ADC
SIM
IMB
Port QS
Port GP
PWM
Figura 3."4 Schema bloc MC 68$6
3. Microcontrollere Motorola 99
Timer-ul este o unitate microprogramat! care poate lucra separat de UC, #i
care con"ine propriul RAM. Timer-ul este format din $6 canale independente.
Fiecare poate executa o func"ie de timp #i poate fi programat independent.
Memoria flash EEPROM serve#te la stocarea nevolatil! a informa"iilor
cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent.
Memoria EEPROM este foarte rapid!, ea poate r!spunde n 4 tacte. MC este
echipat cu 2 module de flash EEPROM, unul de $6K octe"i #i unul de 48K octe"i.
Memoria EEPROM poate fi configurat! pentru a lucra n modul bootstrap.
Memoria EEPROM poate fi #tears! doar neselectiv (n ntregime) #i are nevoie de
o alimentare special!.
3.5 DATE COMPARATIVE PENTRU MC
MOTOROLA CISC
Tabelul 3.6 arat! principalele performan"e, comparativ, pentru MC din
familia Motorola:
Tabelul 3.6
Tabel comparativ pentru MC Motorola - CISC
MC Magistrala de
date
Frecven"
a
(MHz)
Linii I/O Interfe"e
speciale
Pre"
(USD)
6805 8 2 3$ 6 $.9
6808 8 8 48 6 2.$
68$6 $6 $6 48 6 8.25
68300 32 $6 48 6 $7.5
4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua genera!ie de MC "i este cel mai
folosit "i cel mai bine vndut MC din lume. n 1976 Intel a prezentat familia de
microcontroller-e MCS48 care este compus# din 8048, 8748 "i 8035. A ap#rut
astfel pentru prima dat# pe pia!# un microcalculator complet pe un singur chip. MC
includea o unitate central# pe 8 bi!i, memorie ROM sau EPROM de 1024x8bi!i,
RAM 64x8 bi!i, porturi I/O "i timere. n etapa a doua, INTEL a lansat familia
MCS-51 format# din MC 8051, 8751 "i 8031. INTEL recomand# ca punerea la
punct a aplica!iei s# fie realizat# pe MC 8751 care este prev#zut cu memorie
EPROM (4K octe!i). Memoria poate fi programat# cu orice programator, dar se
recomand# utilizarea programatorului de la INTEL (UPP, Universal PROM
Programmer). Pentru produse n serie mare se recomand# 8051, care are memorie
ROM, programat# de furnizor la comanda beneficiarului "i care revine la un pre! de
cost mult mai mic. MC 8031 nu con!ine ROM, dar se poate ata"a n exterior ROM,
PROM sau EPROM, direct sau multiplexat.
8051 este un MC foarte puternic "i u"or de programat. Ca dovad#, n
tabelul 4.1 se prezint# cteva modele oferite de diferi!i furnizori, echivalente cu
8051:
Tabel 4.1
Modele echivalente 8051 oferite de diferi!i produc"tori
Varianta Nr.
pini
Produ-
c#tor
RAM Mem.
program
Observa!ii
8031 40 To!i 128 64K Procesor de baz#, UART, Tmr0+1
8051 40 To!i 128 4K Procesor de baz#, UART, Tmr0+1
80C51GB 68 Intel 256 64Kx 8051+PCA, 8bA/D
87C51GB 68 Intel 256 8K 8051+PCA, 8bA/D
SABC502 40 Siemens 256 64Kx 8052+XRAM+WDog
80C552 68 Philips 256 64Kx 10bA/D, i2c, CC,PWM
83CL580 56, Philips 256 6K LV 8052+A/DC+i2c+WDog
80C320 40 Dallas 256 64Kx Fast, 2UART
89S8252 40. Atmel 256 10K FLASH 8k, WDog
89C55 40. Atmel 256 20KF FLASH,fast, LV
4. Familia MCS-51 101
PCA- arie programabil! de num!r!toare (programmable counter array)
LV- tensiune redus! 3,3V (low voltage)
PWM- modularea impulsurilor n l!"ime (pulse width modulation)
CC- intrare #i comparare (capture/compare)
i2c- Interfa"a I
2
C (Philips)
Tmr- timer
Un tabel cu mai multe exemple este disponibil pe discul care nso!e"te
cartea.
4.1 STRUCTURA #I FUNC$IONAREA
Schema bloc intern# este dat# n Fig. 4.1.
Unitatea central# este o unitate aritmetic# "i logic# pe 8 bi!i care con!ine
urm#toarele registre:
Magistral# de date
Gener
ator de
Timer
Unitatea central#
Acumulator A
Ind. Stiv# SP
Nr. program PC
Adrese
I
n
Figura 4.1 Schema bloc a unui MC 8051
ROM
(EPROM)
RAM
P0 P1 P2 P3
Controlle
r de
102 MICROCONTROLLER-e
acumulator A - 8 bi!i;
registrul de stare PSW (Program Status Word) - 8 bi!i;
registrul B (8 bi!i) folosit n opera!iile de nmul!ire "i mp#r!ire;
indicatorul de stiv# (Stack Pointer) - 8 bi!i;
un registru num#r#tor de date (DPTR Data Pointer) - 16 bi!i - care poate fi
manipulat "i ca 2 registre de cte 8 bi!i (DPH "i DPL) "i serve"te ca baz# n
salturi indirecte sau n transferuri externe;
num#r#torul de program (PC Program Counter) - 16 bi!i.
Memoria pentru program (ROM) este separat# "i distinct# de memoria
pentru date, are alte mecanisme de adresare "i alte semnale de comand#. MC poate
lucra att cu memoria pe chip ct "i cu memorie extern#; exist# astfel posibilitatea
de a m#ri capacitatea memoriei de lucru. Memoria extern# este adresat# automat
dac# adresa din instruc!iune este n afara zonei de memorie intern#.
Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bi!i. Fiecare
linie poate fi programat# individual ca linie de intrare, de ie"ire sau bidirec!ional#.
Unele linii au semnifica!ii alternative. Portul 0 este folosit "i ca magistral#
multiplexat# de adrese "i date, iar pentru transferuri care au nevoie de adrese de 16
bi!i, se folose"te portul P2 pentru octetul cel mai semnificativ de adres#. Liniile
portului 3 sunt folosite ca cereri de ntrerupere (2 linii), intr#ri/ie"iri pentru timer (4
linii) "i linii seriale (2).
8051 are 2 timere de 16 bi!i, fiecare poate fi programat separat. Timerele
pot fi utilizate pentru a m#sura intervale de timp, pentru a determina lungimea unor
impulsuri, ca num#r#toare, etc. Rezolu!ia este de 1s, intervalul maxim de timp
fiind de 65,536ms.
Portul serial UART este un port serial full duplex cu rata de transfer pn#
la 115Kbaud. Portul serial poate fi folosit att pentru comunica!ii cu echipamente
periferice ct "i comunica!ii ntre circuite.
Controllerul de ntreruperi admite ntreruperi de la 5 surse:
de la portul serial (dac# s-a transmis sau recep!ionat un caracter);
de la timere (cnd s-a nregistrat o dep#"ire);
de la 2 pini de intrare.
Fiecare surs# poate fi validat# sau invalidat# individual. Prioritatea poate fi
programat#. Fiecare surs# are asociat# o adres# n memoria program (tabelul 4.2).
Tabelul 4.2
Adresele de salt pentru ntreruperi
Sursa de ntrerupere Adresa de
salt
Sursa de ntrerupere Adresa de salt
RESET 0000h Extern 1 0013h
Extern 0 0003h Timer 1 001Bh
Timer 0 000Bh Port serial 0023h
4. Familia MCS-51 103
4.1.1 Descrierea semnalelor la pini
Vcc- tensiunea de alimentare, +5V;
Vss- mas#;
PORT 0
*
- este un port pe 8 bi!i bidirec!ional cu drena n gol. Este port de date "i
adrese (octetul cel mai pu!in semnificativ) pentru memoria extern#. De asemenea
portul 0 prime"te octe!ii pentru programarea EPROM-ului intern iar n timpul
verific#rii programului din EPROM, datele pot fi citite tot prin portul 0.
PORT 1*- este un port pe 8 bi!i bidirec!ional, cu drena n gol. n timpul
program#rii "i test#rii EPROM-ului, la portul 1 se stabile"te octetul cel mai pu!in
semnificativ de adres#. Pinii P1.0/T2 "i P1.1/T2X au func!ii duble. Astfel T2 este
intrare extern# n Timerul 2 iar T2X este intrarea de comand# a unei capturi n
Timer-ul 2.
PORT 2*- este un port de 8 bi!i bidirec!ional. n timpul program#rii "i test#rii
EPROM-ului la portul 2 se stabile"te octetul cel mai semnificativ de adres#. Pentru
adresarea memoriei externe pe 16 bi!i portul 2 genereaz# partea mai semnificativ#
a octetului de adres#. La adresare memoriei externe pe 8 bi!i portul 2 este registrul
cu func!ii speciale P2.
PORT 3*- este un port de 8 bi!i bidirec!ional. Pinii portului 3 au semnifica!ie
alternativ# (tabelul 4.3).
Tabelul 4.3
Semnifica!ia dubl" a pinilor de la PORT 3
Pin Semnifica!ie
P3.0 RXD-intrare serial# a porului pentru recep!ie
P3.1 TXD-ie"ire serial# a portului pentru emisie
P3.2 /INT0-ntrerupere extern# pentru Timer 0
P3.3 /INT1-ntrerupere extern# pentru Timer 1
P3.4 T0-intrare extern# n Timer 0
P3.5 T1-intrare extern# n Timer 1
P3.6 /WR-strob pentru scrierea memoriei de date extern#
P3.7 /RD-strob pentru citirea memoriei de date extern#
RST este o intrare de RESET. Dac# semnalul de intrare r#mne n HIGH pe
perioada a doi cicli ma"in# n timp ce oscilatorul func!ioneaz#, are loc ini!ializarea
MC.
ALE/PROG ALE (Address Latch Enable) valideaz# octetul cel mai pu!in
semnificativ de adres# n timpul accesului la memoria extern# (PORT0). PROG

*
Ie"irile sunt bufferate "i pot suporta pn# la 4 intr#ri LS TTL. Pinii programa!i ca ie"iri n
stare HIGH pot fi folosi!i ca intr#ri. Ca pini de intrare, dac# au fost for!a!i n LOW din
exterior, ace"tia furnizeaz# curent.
104 MICROCONTROLLER-e
este semnal de intrare pentru impulsul de programare n timpul program#rii
EPROM-ului.
/PSEN (Program Store Enable) valideaz# citirea programelor din memoria
program extern#. Nu se activeaz# la citirea datelor din memoria extern# de date.
/EA/VP /EA (External Acces Enable) valideaz# n stare HIGH memoria program
intern#, iar n stare LOW valideaz# memoria program extern#. La VP se aplic#
tensiunea de 21V n timpul program#rii EPROM-ului.
XTAL1, XTAL2 se conecteaz# cristalul de cuar! sau un oscilator extern.
4.1.2 Gestionarea memoriei
MC8051 au spa!ii diferite de adresare pentru memoria program "i memoria
de date. Spa!iul maxim de adresare este de 64K att la memoria program ct "i la
cea de date. Un extras din datele de catalog arat# tipurile "i dimensiunea memoriei
pentru diferite circuite din familie (tabelul 4.4).
Tabelul 4.4
Echiparea cu memorie a diferitelor circuite 8051
MC Memorie intern# de program Memorie intern# de date
8031AH - 128bytes RAM
8051AH 4Kx8 ROM 128bytes RAM
8751H 4Kx8 EPROM 128bytes RAM
8032AH - 256bytes RAM
8052AH 8Kx8 ROM 256bytes RAM
8752BH 8Kx8 EPROM 256bytes RAM
a. Gestionarea memoriei de date (RAM)
Memoria intern# este mapat# n spa!iul de adresare 00H - FFH (256bytes).
Ea poate fi "umbrit# multiplu"; aceea"i adres# poate fi atribuit# mai multor arii de
memorie (intern# SRAM, intern# extins# SRAM, ariei registrelor programabile,
memoriei externe de program sau de date). Umbrirea este realizat# fie utiliznd
semnale hard (PSEN, nRD, nWR), fie utiliznd instruc!iuni specifice ce se refer#
strict la unul dintre tipurile de memorie (MOVC sau MOVX). n zona 80H -FFH
sunt registrele speciale (SFR) care sunt adresabile direct. Zona 00H-7FH poate fi
adresat# direct sau indirect. Memoria extern# se afl# ntre adresele 0000H-FFFFH.
Validarea folosirii memoriei de date se realizeaz# cu semnalele nRD "i nWR.
Aceste semnale (nRD "i nWR) se folosesc "i pentru selec!ia datelor din portul 0,
unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE.
Informa!ia poate fi accesat# cu adresare pe 8 sau pe 16 bi!i.
4. Familia MCS-51 105
b. Gestionarea memoriei program (ROM, EPROM)
Se poate folosi memoria ROM intern# (nEA n stare HIGH) sau cea
extern# (nEA n stare LOW). Strobul pentru citirea memoriei externe este semnalul
PSEN. Toate citirile se fac cu adresare pe 16 bi!i.
4.1.3 Circuitele timer
MC 8051 are 2 num#r#toare de 16 bi!i, iar 8052 3 num#r#toare. n modul
de func!ionare ca temporizator registrul este incrementat la fiecare ciclu cu un
impuls la 1/12 din frecven!a oscilatorului. n modul de func!ionare ca num#r#tor,
registrul este incrementat la fiecare tranzi!ie din 1 n 0 la pinul extern
corespunz#tor T0, T1 "i T2. Rata maxim# de num#rare este 1/24 din frecven!a
oscilatorului.
Programarea func!ion#rii timer-elor se face cu registrul TMOD din SFR,
cu structura: pentru num#r#torul 1: GATE1, C/-T1 - M11, M01,
pentru num#r#torul 2: GATE2, C/-T2 - M12, M02, unde:
GATE - gestioneaz# controlul. Cnd GATE=1, timer-ul este activat doar
ct timp pinul nINT corespunz#tor este n HIGH "i "i bitul TR din registrul SFR
(TCON) este 1.
C/-T - selecteaz# operarea ca timer (LOW) sau counter (HIGH)
M1 "i M0 au semnifica!ia din tabelul 4.5.
Tabelul 4.5
Programarea modului de operare cu bi!ii M0 %i M1
M1 M0 Modul de operare
0 0 Timer pe 13 bi!i (Mod 0)
0 1 Timer/Counter pe 16 bi!i (Mod 1)
1 0 TL0 este timer/counter pe 8 bi!i "i TH0 este timer pe 8 bi!i (Mod 2)
1 1 Timer/Counter 1 oprit (Mod 3)
Semnifica!ia bi!ilor din registrul special TCON este:
TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde:
TF0, TF1- indicatorul de dep#"ire al timer-ului 0, respectiv 1. Este setat la
dep#"ire ca num#r#tor sau teporizator "i este resetat cnd se
apeleaz# rutina de ntrerupere a timerului corespunz#tor;
TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri
num#r#toarele/ temporizatoarele;
IE0, IE1 - indicator de activare a ntreruperii pe front;
IT0, IT1 - controlul activ#rii ntreruperii (pe nivel IT=0, sau pe front
IT=1).
Pentru MC care au al treilea timer exist# registrul T2CON cu structura:
106 MICROCONTROLLER-e
TF2, EXF2, RCLK, TCLK, EXEN2, TR2, C/-T2, CP/RL2, unde:
TF2 - indicator de dep#"ire;
EXF2 - indic# apari!ia unui eveniment la pinii de control extern;
RCLK - cnd este setat, portul serial folose"te ca "i tact de recep!ie
semnalul de dep#"ire generat de timerul 2;
TCLK - cnd este setat, portul serial folose"te ca "i tact de emisie semnalul
de dep#"ire generat de timerul 2;
EXEN2- indicator de activare extern#;
TR2 - porne"te/ opre"te timerul 2
C/-T2 - selecteaz# func!ionarea ca timer sau num#r#tor;
CP/RL2 - indicator pentru memorare.
4.1.4 Interfa!a serial" UART
Portul serial este de tip asincron, full-duplex. Portul serial poate opera n 4
moduri:
Modul 0: datele seriale sunt transferate n ambele sensuri prin RXD. TXD
furnizeaz# ceasul de transmisie. Rata transferului este 1/12 din frecven!a de
oscila!ie.
Modul 1: transmisie asincron#, se transmit date prin TXD, se recep!ioneaz# prin
RXD n formatul 1 bit de start, 8 bi!i de date, 1 bit de stop, cu rata de transfer
variabil# (programabil#) cu un timer.
Modul 2: ca la modul 1, dar se transmite "i un al 9-lea bit de date care poate fi bitul
de paritate, cu rata de transfer egal# cu frecven!a oscilatorului divizat# cu 32 sau cu
64.
Modul 3: ca la modul 2, cu rata de transfer variabil# (programabil#) cu un timer.
Registrul de control al portului serial SCON (din registrele SFR):
SM0, SM1, SM2, REN, TB8, RB8, TI, RI;
SM0, SM1 programeaz# modul de lucru al portului serial conform
tabelului 4.6.
Tabelul 4.6
Programarea modului serial cu bitii SM0 si SM1
SM0 SM1 Mod
0 0 Mod 0
0 1 Mod 1
1 0 Mod 2
1 1 Mod 3
4. Familia MCS-51 107
SM2 - activeaz# posibilitatea de lucru multiprocesor n modurile 2 "i 3,
prin transmisia bitului special 9;
REN - activare/ dezactivare recep!ia;
TB8 - al 9-lea bit ce se transmite n modurile 2 "i 3;
RB8 - al 9-lea bit ce se recep!ioneaz# n modurile 2 "i 3;
TI - indicator de ntrerupere a transmisiei;
RI - indicator de ntrerupere a recep!iei.
4.1.5 Sistemul de ntreruperi
MC 8051 dispun de 5 nivele de ntrerupere, iar 8052 de 6 nivele. Exist# 2
surse externe, INT0 "i INT1, care pot fi active pe nivel sau pe front n func!ie de
bi!ii IT0 "i IT1 din registrul special TCON. Indicatoarele de ntrerupere sunt bi!ii
IE0 "i IE1 care se seteaz# automat cnd apare o ntrerupere "i se reseteaz# cnd s-a
ncheiat tratarea ntreruperii.
ntreruperile generate de timere sunt date de bi!ii TF0 "i TF1 din registrul
TCON. Ace"ti bi!i sunt seta!i cnd apare o dep#"ire n num#r#toarele/
temporizatoarele 0 "i 1. ntreruperea pentru timerul 2 va fi generat# de un SAU
ntre TF2 "i EXF2. Rutina de servire a ntreruperii va determina care dintre ace"ti
bi!i a cerut ntrerupere prin citirea registrului T2CON.
ntreruperea de port serial este generat# de un SAU logic ntre RI "i TI. .
Rutina de servire a ntreruperii va determina care dintre ace"ti bi!i a cerut
ntrerupere prin citirea registrului SCON.
Fiecare din sursele de ntrerupere pot fi activate sau dezactivate prin
setarea sau resetarea unui bit din registrul SFR numit IE, cu structura:
EA, X, ET2, ES, ET1, EX1, ET0, EX0, unde:
EA - dezactiveaz# toate ntreruperile cu IE=0. Cu IE=1 sunt validate
ntreruperile "i se pot masca individual;
ET2 - mascare ntrerupere pentru timer-ul 2;
ES - mascare ntrerupere port serial;
ET1 - mascare ntrerupere timer 1;
EX1 - mascare ntrerupere extern# INT1;
ET0 - mascare ntrerupere timer 0;
EX0 - mascare ntrerupere extern# INT0.
ntreruperilor pot fi tratate conform unei ierarhii implicite sau nivelul
priorit#!ilor poate fi programat n registrul SFR numit IP.
priorit#!i implicite:
IE0 (cea mai mare prioritate), TF0, IE1, TF1, RI+TI, TF2+EXF2.
structura registrului IP:
X, X, PT2, PS, PT1, PX1, PT0, PX0, unde:
108 MICROCONTROLLER-e
PT2 - stabile"te nivelul de prioritate pentru ntreruperea timerului 2;
PS - stabile"te nivelul de prioritate pentru ntreruperea portului serial;
PT1 - stabile"te nivelul de prioritate pentru ntreruperea timerului 1;
PX1 - stabile"te nivelul de prioritate pentru ntreruperea extern# 1;
PT0 - stabile"te nivelul de prioritate pentru ntreruperea timerului 0;
PX0 - stabile"te nivelul de prioritate pentru ntreruperea extern# 0.
Nivelul priorit#!ii poate fi programat n HIGH sau LOW. O ntrerupere
LOW poate fi ntrerupt# de o ntrerupere LOW dar nu poate fi ntrerupt# de o
ntrerupere HIGH. O ntrerupere HIGH nu poate fi ntrerupt#.
4.1.6 Operarea cu economie de energie
8051 are dou# moduri de operare cu putere redus#; modul inactiv (Idle) "i
modul cu tensiune sc#zut# (Power Down).
n modul inactiv oscilatorulfunc!ioneaz#, dar nu se execut# nici o
instruc!iune. Timerele "i portul serial func!ioneaz# "i orice ntrerupere de la ele
readuc circuitul n stare normal#. Un RESET hardware readuce circuitul n stare
normal#. Starea CPU se p#streaz# n ntregime: indicator de stiv#, Program
Counter, registre etc.
n modul cu tensiune sc#zut# oscilatorul intern este oprit "i toate func!iile
sunt oprite. Se p#streaz# doar RAM-ul intern "i registrele speciale. Singura
modalitate de a ie"i din aceast# stare este prin RESET hardware. n aceast# stare
tensiunea de +5V poate fi redus#.
Modurile de operare cu economie de energie pot fi comandate prin
registrul SFR PCON, care are structura: PD, IDL unde:
PD - bit pentru modul cu tensiune sc#zut#;
IDL - bit pentru modul inactiv.
4.1.7 Formarea unor semnale externe
RESET-ul se comand# pe intrarea RST a MC. Con!inutul registrelor
speciale SFR va fi adus la 00H, cu excep!ia SBUF care va fi nedeterminat "i PCON
care va fi 0XXX0000 n binar. RAM-ul intern nu este afectat. La pornirea
sistemului se poate realiza un RESET automat cu un montaj ca n figura 4.2.
RST
V
CC
R (4-10K)
C (10)
Figura 4.2 Circuit pentru formarea semnalului RESET
4. Familia MCS-51 109
Ca "i generator de tact se poate folosi oscilatorul intern la intr#rile X1 "i
X2, ca n figura 4.3.
Circuitul poate fi folosit "i cu un tact extern, legnd X2 la mas#, iar la X1
se leag# un oscilator extern.
4.1.8 Programarea EPROM-ului intern
Pentru a fi programat circuitul trebuie s# fie alimentat "i s# aib# cuplat
generatorul de tact pentru c# transferul de date se face prin bus-ul intern al
circuitului. Adresa pentru EPROM-ul de programat trebuie s# fie aplicat# la portul
1 "i pinii P2.0-P2.3 ai portului 2, iar octetul de date de programat se aplic# la portul
0. Ceilal!i pini ai portului 2, precum "i semnalele RST, /PSEN, /EA/Vpp trebuie s#
aib# urm#toarele nivele (tabelul 4.6).
Tabeul 4.6
Condi!ii pentru opera!iile de programare, verificare, setare bit siguran!"
Opera!ia RST nPSEN ALE
/EA/VP
P
P2.7 P2.6
Programare 1 0 impuls la 0 pentru
50ms
Vpp 1 0
Verificare 1 0 1 1 0 0
Setarea bitului
de siguran!#
1 0 impuls la 0 pentru
50ms
VPP 1 1
Semnalul ALE este un impuls la 0 pentru 50 ms pentru a efectua
programarea. Tensiunea Vpp este de +21V pentru 8751H "i de -12,75V pentru
8752BH (A se consulta cu aten!ie foile de catalog). Sursa de tensiune pentru Vpp
trebuie s# fie foarte bine filtrat# "i stabilizat# deoarece chiar "i un mic impuls de
tensiune poate produce v#t#marea circuitului.
Verificarea programului se poate face dac# bitul de siguran!# nu a fost
programat. Citirea se face n acelea"i condi!ii ca "i scrierea, cu excep!ia lui ALE
care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citi
X1
X2
Figura 4.3 Circuit pentru folosirea generatorului intern de tact
110 MICROCONTROLLER-e
neautorizat con!inutul EPROM-ului se programeaz# un a"a numit bit de siguran!#
care odat# programat nu mai permite nici un acces electric la memoria EPROM.
Odat# programat, acest bit se poate "terge doar prin "tergerea ntregii memorii
EPROM.
$tergerea EPROM-ului se poate face la lumin# ultraviolet#
(2537Angstrom), cu cel pu!in 15W.sec/cm
2
, adic# o expunere de 20-30 min. la
distan!a de 2-3cm la o lamp# de ultraviolete cu 12W/cm
2
.
Programarea rapid# (Quick Pulse Programming) poate fi aplicat# la
circuitele 875XBH, "i are ca rezultat posibilitatea program#rii unui circuit n numai
25 secunde. Programarea se poate face cu o tensiune Vpp mai mic# (12,75V).
Semnalul ALE are forma unor impulsuri multiple, 25 de impulsuri de 100 s.
4.2 PROGRAMAREA MC DIN FAMILIA MCS-51
8051 are 111 instruc!iuni din care 64 sunt executate ntr-un singur ciclu.
4.2.1 Setul de instruc!iuni 8051
Instruc!iuni pentru transferul de date:
Transferuri generale:
MOV - efectueaz# un transfer pe bit sau pe octet de la surs# la
destina!ie.
PUSH - incrementeaz# registrul SP (Stack Pointer) "i transfer# un octet
de la surs# la loca!ia din stiv# adresat# de SP.
POP - transfer# un operand pe un octet de la loca!ia din stiv# adresat#
de SP la destina!ie "i decrementeaz# SP.
Transferuri specifice acumulatorului:
XCH - mut# octetul din surs# n acumulator.
XCHD - mut# bi!ii LOW din octetul din surs# n acumulator.
MOVX - mut# un octet ntre memoria extern# de date "i acumulator.
Adresa memoriei de date extern# poate fi specificat# n registrul
dublu DPTR.
MOVC - se cite"te un octet din memoria extern# de program n acumulator.
Transferuri de adrese:
MOV DPTR, #data, ncarc# imediat 16 bi!i de date n registrul dublu
DPTR.
Instruc!iuni aritmetice:
4. Familia MCS-51 111
Adunare:
INC - adun# operandul cu 1 "i pune rezultatul ca nou operand.
ADD - adun# acumulatorul cu operandul surs# "i pune rezultatul n A.
ADDC - adunare ca la ADD dar se adun# "i bitul CY (Carry) din PSW.
DAA - ajustare zecimal#, corecteaz# suma care rezult# din adunarea a
doi operanzi zecimali cu maxim 2 cifre.
Sc#dere:
SUBB - sc#dere cu mprumut, scade operandul din acumulator, apoi
scade CY "i pune rezultatul n A.
DEC - scade 1 din operand "i pune rezultatul ca nou operand.
nmul!ire:
MUL - execut# o nmul!ire f#r# semn ntre acumulator "i registrul B,
rezultatul ob!inut fiind pe 2 octe!i (octetul cel mai semnificativ se
pune n B). Dac# to!i bi!ii din octetul cel mai semnificativ al
rezultatului sunt 0 bitul OV "i CY din PSW se pun la 0.
mp#r!ire:
DIV - execut# mp#r!irea f#r# semn a con!inutului registrului A la
con!inutul registrului B. Partea ntreag# a rezultatului se pune n A,
iar partea frac!ionar# n B.
Instruc!iuni pentru opera!ii logice:
Instruc!iuni logice cu un singur operand:
CLR - reseteaz# A orice bit adresabil direct.
SETB - seteaz# orice bit adresabil direct.
CPL - complementeaz# con!inutul lui A, f#r# a afecta PSW.
RL - rota!ie stnga a acumulatorului.
RLC - rota!ie stnga a A prin CY.
RR - rota!ie dreapta a A.
RRC - rota!ie dreapta a A prin CY.
SWAP - inverseaz# niblurile n A.
Instruc!iuni logice cu 2 operanzi:
ANL - $I logic.
ORL - SAU logic.
XRL - SAU EXCLUSIV logic.
Instruc!iuni de control:
Apeluri "i salturi necondi!ionate:
ACAL - este o instruc!iune pe 2 octe!i de apelare a unui subprogram care
se folose"te atunci cnd adresa de salt este cuprins# n 2K ai
paginii curente. Cmpul de adres# de 11 bi!i este concatenat cu cei
mai semnificativi 5 bi!i din PC.
LCALL- este o instruc!iune pe trei octe!i de apelare a unui subprogram care
adreseaz# to!i cei 64K ai memoriei.
RET - transfer# controlul la adresa de ntoarcere care a fost n prealabil
salvat# n stiv# "i decrementeaz# registrul SP cu 2.
112 MICROCONTROLLER-e
AJMP - este un salt necondi!ionat la adresa specificat#analog cu ACALL.
LJMP - este un salt necondi!ionat la adresa specificat# analog cu LCALL.
SJMP - este un salt necondi!ionat scurt n cadrul a 256 de octe!i.
Salturi condi!ionate:
JZ - execut# salt dac# acumulatorul este 0.
JNZ - execut# salt dac# acumulatorul nu este 0.
JC - execut# salt dac# bitul de CY (Carry) este 1.
JNC - execut# salt dac# bitul de CY este 0.
JB - execut# salt dac# bitul adresat este 1.
JNB - execut# salt dac# bitul adresat este 0.
JBC - execut# salt dac# bitul adresat este 1 "i apoi "terge bitul adresat.
CJNE - compar# primul operand cu al doilea operand "i face salt dac#
ace"tia nu sunt egali.
DJNZ - decrementeaz# operandul surs# "i pune rezultatul n operandul
destina!ie. Dac# rezultatul nu este 0 se execut# salt.
ntreruperi:
RETI - ca "i RET, dar activeaz# ntreruperile.
4.2.2 Modurile de adresare
Adresare prin registre - programatorul are acces la 8 registre de lucru, notate R0-
R7. Cei mai pu!in semnificativi 3 bi!i ai codului instruc!iunii indic# unul dintre
aceste registre. Se poate forma astfel o instruc!iune de un singur octet. De exemplu
adunarea registrului R0 cu R1, cu rezultatul n acumulator:
MOV A,R0
ADD A,R1
Adresare direct" - se pot adresa loca!ii din RAM, porturi I/O sau registrele cu
func!ii speciale. La codul instruc!iunii se adaug# un octet care reprezint# loca!ia
care se folose"te. De exemplu se adun# con!inutul loca!iei 30 din RAM la
con!inutul loca!iei 40, cu rezultatul n loca!ia 40:
MOV A,30h
ADD A,40h
MOV 40h,A
Adresare indirect" prin registre - introdus# pentru a putea lucra cu variabile al
c#ror loc n RAM se modific# n cursul rul#rii programelor. Ca registre index se
folosesc registrele R0 "i R1, al c#ror con!inut indic# adresa n RAM. Cel mai pu!in
semnificativ bit al codului instruc!iunii indic# registrul care este folosit ca index. n
limbajul de asamblare al lui 8051, adresarea indirect# se reprezint# cu @. De
exemplu se adun# con!inutul loca!iei adresat# de registrul R0 cu con!inutul loca!iei
adresat# de registrul R1, cu rezultatul n acumulator:
MOV A,@R0
4. Familia MCS-51 113
ADD A,@R1
Adresare imediat" - folosit# cnd operandul este o constant# cu o valoare
cunoscut#, care se specific# n codului instruc!iunii. n limbajul de asamblare al lui
8051 constanta este precedat# de semnul #. De exemplu adunarea lui 15 cu 18
zecimal, cu rezultatul n acumulator:
MOV A,#15
ADD A,#18
4.3 ECHIP&RI SPECIALE CU MEMORIE
4.1.1 Memoria EEPROM (Philips 80C851)
Memoria EEPROM are dimensiunea de 256 octe!i, poate re!ine
informa!iile minimum 10 ani "i poate fi supus# la 10.000 de cicluri de
"tergere/scriere. Circuitul con!ine multiplicatorul de tensiune pentru "tergere "i
scriere.
Comunica!ia ntre UC "i EEPROM se realizeaz# cu ajutorul a 5 registre:
EADRH (adresa F3h), EADRL (adresa F2h) sunt dou# registre pentru
adresare, primul pentru partea LOW a adresei, cel#lalt pentru partea HIGH (pentru
implement#ri viitoare "i pentru adresarea bi!ilor de securitate).
EDAT (adresa F4h) este registrul de date n care se stocheaz# octetul de
scris sau octetul citit. Sunt posibile "i "tergeri pe bloc de date, caz n care
con!inutul acestui registru nu conteaz#.
ETIM (adresa F5h) este un registru pentru timer necesar pentru a adapta
timpul de citire/ scriere la frecven!a sistemului "i trebuie nc#rcat cu valori func!ie
de tactul sistemului "i de caracteristicile EEPROM-ului.
ECNTRL (adresa F6h) este registrul de control care:
stabile"te modurile de lucru: scriere, citire, "tergere pe octet, "tergere pe
bloc;
con!ine un bit care semnaleaz# c# este n curs o scriere sau "tergere.
Schema bloc a modulului este dat# n figura 4.4.
Secven!iatorul asigur# secven!a de timp corespunz#toare pentru scriere sau
"tergere. Datele "i adresele se transfer# prin intermediul registrelor de pe
magistral#.
114 MICROCONTROLLER-e
O citire se poate realiza simplu:
Citire: MOV EADRL,#20H
MOV A,EDAT
Ca urmare a acestei secven!e de program, con!inutul loca!iei 20h este citit
n acumulator.
Memoria EEPROM este protejat# cu un octet la adresa 8000h. Se poate
valida securitatea cu urm#toarea secven!# de program, cu scrierea activat#:
Activare securitate:
MOV EADRH,#80H
MOV EADRL,#00H
MOV EDAT,#FFH
Acest octet nu mai poate fi modificat prin soft. Programul din EEPROM
nu mai poate fi citit sau modificat cu instruc!iuni MOVC din memorii externe, ci
doar executat.
4.3.2 Memoria FLASH cu programare paralel" (Atmel
AT89C55)
Multe MC compatibile 8051 sunt echipate cu memorie FLASH. Unul
dintre acestea este AT89C55 care este echipat cu 20K octe!i memorie FLASH care
Figura 4.4 Schema bloc a modulului EEPROM
BUS INTERN
CPU
EEPROM
EDATA EADRH EADRL
Secven!iator
ECNTRL ETIM
4. Familia MCS-51 115
poate fi programat# "i "tears# (EPROM) n maximum 1000 de cicluri de
scriere/"tergere.
Programarea memoriei FLASH se poate face cu o tensiune mare, de +12V
a"a nct se pot folosi inscriptoarele de EPROM sau se poate face cu +5V, pentru
ca programarea s# fie posibil# n sistemul gazd#. AT89C55 este fabricat cu
memoria "tears# (plin# cu FFh) "i gata de a fi programat#.
Programarea memoriei se face astfel:
! pe liniile de adres# se stabile"te adresa loca!iei de programat;
! pe liniile de date se stabile"te octetul de nscris;
! se aplic# un front pe /EA/Vpp la +12V (pentru programarea cu 12V);
! se aplic# un impuls ALE//PROG.
Starea program#rii este indicat# de bitul RDY//BSY (P3.4), linia fiind
LOW n timpul program#rii "i HIGH cnd programarea s-a terminat.
Dup# nscriere se poate face verificarea a ceea ce s-a nscris, prin adresare
"i citirea octetului de date.
Toat# memoria FLASH se poate "terge electric aplicnd semnalele de
comand# corespunz#toare (din tabelul care exist# n foile de catalog) "i aplicnd
apoi un impuls ALE//PROG de 10ms. Asem#n#tor se programeaz# (programare
paralel#) "i circuitul 89C51 de la Philips.
4.3.3 Memoria FLASH cu programare paralel" %i serial"
ISP (Philips 89C51RC)
O facilitate interesant# "i util# o au MC care au nscris n ROM un mic
program monitor care poate s# gestioneze nscrierea memoriei FLASH prin canalul
serial. Modul de nscriere serial se nume"te In-System Programming (ISP) "i este
realizat printr-un canal serial cu liniile TxD "i RxD "i liniile de alimentare de +5V
"i mas#, precum "i tensiunea necesar# nscrierii memoriei FLASH, +Vpp. Softul
care gestioneaz# canalul serial este un monitor nscris n ROM. Dup# programarea
memoriei FLASH, ROM-ul poate fi invalidat. Programul monitor determin# rata
de transfer cu care i se trimit date "i transmite n ecou ce a recep!ionat. Dup#
transmiterea caracterului pentru stabilirea ratei de transfer, se transmite un octet de
identificare care stabile"te natura datelor care urmeaz#. Num#rul de octe!i care
urmeaz# este limitat la 16. n foile de catalog sunt explicate comenzile care pot fi
date pe acest# cale. Programul monitor ocup# 1K "i ROM-ul se nume"te Boot
ROM.
La aceast# memorie FLASH timpul de acces este de 100ns, timpul necesar
nscrierii unei loca!ii este de 20ms, iar "tergerea se realizeaz# n 3 secunde.
116 MICROCONTROLLER-e
4.4 INTERFE$E #I PERIFERICE ON CHIP
SPECIALE
4.4.1 Convertorul A/D
Circuitul analogic de intrare const# ntr-un multiplexor analogic "i un
convertor A/D de 8 bi!i cu aproxima!ii succesive. Tensiunea de referin!# pentru
convertor "i masa analogic# sunt conectate prin pini speciali. O conversie poate
avea loc n 24 sau 48 de cicli ma"in#, programabil, ceea ce nseamn# un timp de
conversie de 24s la un tact de 12MHz.
Convertorul este controlat de registrul de control ADCON care selecteaz#
"i canalul de conversie. Terminarea conversiei este semnalizat# cu un bit tot n
ADCON, iar rezultatul conversiei este stocat n registrul ADCH. O conversie poate
fi declan"at# n 3 feluri:
start n operare normal# "i revenire n operare normal#;
start n operare normal# revenire n mod inactiv (Idle);
intrare n mod inactiv "i declan"area unei conversii din exterior prin pinul
STDAC.
Cu registrul ADCON (C4h) se poate programa:
selec!ia canalului analogic dorit;
se poate programa ca o conversie s# fie declan"at# de pinul extern STADC;
se poate declan"a o conversie;
con!ine un bit care semnaleaz# c# s-a terminat conversia. Cu acest bit se
poate solicita o cerere de ntrerupere;
se poate selecta viteza de conversie la viteza maxim# (24 cicli) sau mai
mic# (48 de cicli).
4.4.2 Interfa!a PWM
Circuitul este prev#zut cu un canal PWM la care frecven!a de repeti!ie este
programat# cu un registru de prescalare (PWMP- adresa FEh) care genereaz# un
ceas pentru un num#r#tor de 8 bi!i. Con!inutul num#r#torului este comparat cu cel
al registrului PWM0 (adresa FCh); dac# num#rul este mai mare ie"irea /PWM0
este LOW, dac# este mai mic sau egal /PWM0 este HIGH. Factorul de umplere
poate fi astfel modificat ntre 1/255 "i 255/255.
4. Familia MCS-51 117
4.1.3 Interfa!a I
2
C (Siemens P80CL580)
Portul serial I
2
C are 2 linii, date seriale (SDA) pe pozi!ia liniei P1.7 "i ceas
serial (SCK) pe pozi!ia bitului P1.6. Interfa!a lucreaz# n 4 moduri:
transmi!#tor MASTER
receptor MASTER
transmi!#tor SLAVE
receptor SLAVE
Aceste func!ii pot fi controlate de registrul S1CON (Serial Control
Register) "i S1STA (Serial Status Register). Cu datele se lucreaz# prin S1DAT
(Data Shift Register) iar adresa se stabile"te n S1ADR (Slave Address Register),
figura 4.5.
Cu registrul de control S1CON (registru SFR la adresa DBh) se pot
programa:
ceasul serial de transfer n mod MASTER (SCK), care este n func!ie de tactul
sistemului "i poate fi de maximum 100kHz;
se poate selecta dac# liniile I/O (P1.6 "i P1.7) au semnifica!iile generale sau
speciale pentru I
2
C;
B
U
S
I
N
T
E
R
N
S1DAT
Generare ceas
Arbitrare "i
sincronizare
S1CON
S1STA
S1ADR
SDA
SCK
Figura 4.5 Interfa!# I
2
C
118 MICROCONTROLLER-e
se poate porni transferul prin generarea de condi!ii de START repetate (mod
MASTER) sau verificarea bus-ului "i generarea de START doar dac# bus-ul
este liber (mod SLAVE);
se poate opri transferul prin generarea unei condi!ii de STOP;
se pot valida ntreruperile care se genereaz# n urm#toarele condi!ii: s-a generat
o condi!ie de START, s-a recep!ionat adresa proprie, un octet s-a transmis sau
s-a recep!ionat;
se poate insera un ACK, (nivel LOW pe SDA) dup# recep!ia unui caracter sau
a adresei proprii.
Registrul de stare S1STA (D9h - registru Read Only) poate fi folosit pentru
generarea unei ntreruperi "i saltul la o rutin# de servire.
n registrul de date S1DAT (DAh) se nscrie octetul care se transmite sau
se recep!ioneaz#; cel mai semnificativ bit se transmite sau se recep!ioneaz# primul.
n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se
stabile"te adresa dispozitivului SLAVE cu care dore"te un transfer de date.
Observa!ie: convertorul AD, interfa!a I
2
C "i canalul PWM0 pot lucra n
modurile cu economie de energie. Convertorul, interfa!a I
2
C "i canalul PWM0
r#mn active n modul Idle al UC "i pot genera o ntrerupere sau un RESET,
terminnd astfel modul inactiv al UC.
4.4.4 Interfa!a USB (EZ-USB seria 2100)
Familia EZ-USB de la Anchor Chips ( www.anchorchips.com )
echipeaz# MC-ul lor echivalent cu 8051 cu un modul USB inteligent, destinat
leg#turii USB de mare vitez# (12Mbps). Modulul USB inteligent admite
instruc!iuni avansate, de aceea punerea la punct a lucrului cu USB devine mai
rapid#. MC este echipat cu RAM care poate fi nc#rcat# de la un PC. Din acest
motiv circuitul nu mai are ROM. Circuitul mai con!ine "i o interfa!# I2C, precum "i
linii I/O de uz general. Tot ca un avantaj se poate men!iona c# bus-ul de date "i
adrese nemultiplexat este accesibil la pini speciali, ceea ce nseamn# c# nu se
sacrific# pini I/O pentru cuplarea unor componente exterioare "i nici nu este nevoie
de latch-uri pentru separarea datelor de adrese.
Schema bloc a acestui MC este dat# n figura 4.6.
Modulul USB realizeaz# n timpul ini!ializ#rii o enumerare "i alocare de
adrese a dispozitivelor USB conectate. Aceast# opera!ie este posibil# ca urmare a
mut#rii unei secven!e de program din RAM-ul MC n RAM-ul modulului USB.
nc#rcarea programului n RAM se poate face att de la un sistem PC ct "i
de la un EEPROM serial prin interfa!a I2C sau clasic, prin conectarea unei memorii
ROM externe. Opera!ia de enumerare ini!ial# permite identificarea unui
corespondent USB "i creeaz# posibilitatea nc#rc#rii programelor de la sistemul
gazd# chiar prin USB.
4. Familia MCS-51 119
4.4.5 Aria de num"r"toare programabil" (PCA)
Aria de num#r#toare programabil# este un circuit special de timp format
din 5 module de 16 bi!i cu posibilitatea de captur# "i compara!ie care se adaug#
timerelor obi"nuite ale MC. Fiecare modul poate fi programat individual s# lucreze
n unul din modurile:
captur# pe front pozitiv sau negativ;
timer;
canal PWM;
ceas de gard# (doar modulul 4).
Fiecare timer are un pin asociat din portul 1, ca n figura 4.7.
8051
BUS INTERN
RAM
4-8 Kocte!i
Interfa!a cu memoria
extern# (nemultiplexat#)
Interfa!a USB inteligent#
2K octe!i FIFO memorie
proprie
PIO
(24 linii)
Transceiver USB
D+
Interfa!# I
2
C
SCK SDA
Figura 4.6 Schema bloc a unui MC cu interfa!# USB
120 MICROCONTROLLER-e
Timerul comun pentru toate modulele este un timer obi"nuit. El poate
func!iona cu diferite tacte programate n registrul SFR CMOD cu 2 bi!i, conform
tabelului 4.7.
Tabelul 4.7
Programarea tactului pentru timer
CPS1 CPS0 Tact pentru timer
0 0 frecven!a oscilatorului/12
0 1 frecven!a oscilatorului/4
1 0 Semnalul de dep#"ire de la timerul 0 standard
1 1 De la un pin extern (ECI, P1.2)
Fiecare modul are asociat un registru de comand# (CCAPM0-CCAPM4)
care controleaz# modul de operare al modulului:
se poate valida ca o coinciden!# n modul s# genereze o ntrerupere;
se poate valida modul PWM;
se poate valida ca ie"irea P1.x s# schimbe starea dac# a ap#rut o
coinciden!# ntre con!inutul modulului "i con!inutul timerului;
se poate programa pe care front al intr#rii P1.x s# se fac# num#rarea
impulsurilor externe.
Fiecare modul mai are asociat un registru de 16 bi!i (cte dou# de 8 bi!i;
CCAP0H-CCAP5H "i CCAP0L-CCAP5L) care stocheaz# valoarea num#rat# la
apari!ia unei coinciden!e. n mod PWM aceste registre controleaz# factorul de
umplere.
Func!ionarea PCA:
Temporizator/
Num#r#tor (Baza de
timp pentru modulele
PCA)
Modul 0 (16 bi!i)
Modul 1 (16 bi!i)
Modul 2 (16 bi!i)
Modul 3 (16 bi!i)
Modul 4 (16 bi!i)
P1.3
P1.4
P1.5
P1.6
Figura 4.7 Structura ariei de timp programabile (PCA)
4. Familia MCS-51 121
n modul de captur#, cnd apare o tranzi!ie pe intrarea extern# P1.x, se
ncarc# valoarea la care a ajuns timerul comun n registrele de date
(CCAPxH "i CCAPxL). n acest moment se poate genera o
ntrerupere;
n mod timer, con!inutul registrelor de date este incrementat de la
intrarea extern#. Cnd se ajunge la o valoare egal# cu cea stocat# n
timerul comun poate fi generat# o ntrerupere;
n mod PWM fiecare modul poate fi folosit ca un canal independent.
Frecven!a semnalului PWM este aceea"i "i depinde de sursa timerului
comun. Factorul de umplere se poate modifica prin registrul CCAPxL;
n mod ceas de gard# utilizatorul ncarc# registrul CCAPxH "i
CCAPxL. Cnd timerul comun ajunge la o valoare egal# cu cea stocat#
de utilizator se genereaz# un RESET intern. Pentru ca s# nu se ajung#
la RESET ntr-un progam rulat normal, utilizatorul trebuie periodic s#
schimbe valoarea din timer sau s# reseteze ceasul de gard#.
4.4.6 MC cu interfa!" pentru RAM nevolatil - NVRAM
(Dallas DS5000FP)
Un astfel de MC poate adresa o memorie extern# SRAM (ntre 8K "i 64K)
care poate fi f#cut# nevolatil# prin alimentarea cu baterii. O baterie cu litiu poate
func!iona cca. 10 ani. Transferul de date cu memoria NVRAM se face pe un bus
separat pentru a nu mic"ora num#rul de linii I/O.
Circuitul nu are ROM pentru programul utilizator, programul fiind stocat
n NVRAM, programarea se realizeaz# n sistem, prin interfa!a serial# a MC. La
acest tip de MC programul se poate schimba chiar "i n timpul func!ion#rii.
Programul se poate nc#rca ini!ial prin interfa!a serial#, sub comanda unui program
existent ntr-un ROM intern numit Boot ROM (sau BOOTSTRAP LOADER
ROM) care este apoi invalidat "i devine invizibil la adresare.
4.4.7 Interfa!a LCD (PHILIPS P83C434)
n jurul unui nucleu 8051 a fost construit un MC specializat pentru
comanda panourilor LCD. R#mn disponibile pentru uz general 12 linii I/O.
Modulul LCD are 24 de linii pentru comanda segmentelor, din care 2 pot fi folosite
pentru comanda planurilor din spate. Afi"ajul poate fi comandat cu tensiuni
variabile ob!inute intern prin divizarea tensiunii de alimentare cu rezisten!e.
Schema bloc a MC este dat# n figura 4.8.
122 MICROCONTROLLER-e
MC se poate folosi la comanda afi"oarelor cu pn# la 4 planuri n spate.
Cele 24 de linii de comand# a segmentelor pot comanda 12 caractere numerice
formate cu 7 segmente sau 88 de elemente grafice. Func!ionarea afi"ajului poate fi
mai bine n!eleas# n cazul concret al unui singur plan n spate, pentru 2 elemente
al#turate ale afi"ajului, figura 4.9.
Primul element este aprins pentru c# ntre segment "i planul din spate este
o diferen!# de poten!ial, iar al doilea este stins pentru c# nu exist# o diferen!# de
poten!ial.
Comanda modulului de afi"are se face cu 12 registre LCD0-LCD11
(adrese 9Ah-BFh) care con!in configura!ia segmentelor stinse/aprinse pentru
fiecare plan din spate.
Nucleu
8051
12
linii
I/O
Modul LCD
S00-S21
S22/BP3
S23/BP2
BP1
BP0
Figura 4.8 MC cu modul de comand# LCD
VDD
BP0
VSS
S00
S01
2 elemente de afisaj,
(primul aprins, al doilea stins) Figura 4.9 Comanda a doua elemente al#turate ale afi"ajului LCD
4. Familia MCS-51 123
4.4.8 MC specializat pentru TV %i video (PHILIPS 83C145)
Acest MC este construit n jurul unui nucleu 8051 "i are 8-16Kocte!i ROM
sau OTP, 256 octe!i RAM, controller pentru vizualizare pe ecran (On Screen
Display OSD), 3 ie"iri video digitale, memorie RAM pentru display de 128x10
bi!i, generator de caractere (ROM 60 caractere x 18 linii x 14 puncte), 8 canale
PWM de 6 bi!i "i un canal PWM de precizie de 14 bi!i, convertor numeric
analogic. Nu se poate conecta memorie extern#. Schema bloc este dat# n figura
4.10.
Ceasul canalelor PWM se formeaz# din tactul sistemului divizat cu 4.
Acest tact este aplicat tuturor canalelor PWM "i unui num#r#tor de 14 bi!i.
Canalele de 6 bi!i utilizeaz# doar partea mai pu!in semnificativ# a num#r#torului de
14 bi!i. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii
acestui registru cu con!inutul num#r#torului, ie"irea PWM schimb# starea.
Structura canalelor PWM este reprezentat# n figura 4.11.
Convertorul numeric analogic este folosit pentru a realiza conversia analog
numeric# soft (figura 4.12). Circuitul are 3 intr#ri analogice care pot fi comutate pe
rnd la intrarea unui comparator de tensiune. La cealalt# intrare a comparatorului
se aplic# ie"irea convertorului numeric analogic. Cnd intr#rile sunt egale, valoarea
aplicat convertorului numeric analogic este chiar valoarea numeric# a semnalului
analogic de intrare.
Nucleu 8051
(f#ra memorie)
Porturi I/O
P3 P2 P1(4b) P0
8x6bit PWM
14bit PWM
Magistral# de date
ROM
RAM
On Screen Display OSD
RAM 128x10
ROM 60 x 18 x 14
Figura 4.10 Schema bloc a unui MC specializat TV/video
DAC
124 MICROCONTROLLER-e
Modulul OSD are rolul de a suprapune text pe o imagine de televiziune.
Intr#rile n acest bloc sunt:
2 ceasuri video;
semnalul de sincronizare orizontal#;
Num#r#tor 14 bi!i
Canal PWM0 (6 bi!i)
Canal PWM7 (6 bi!i)
Canal PWM8 (14 bi!i)
P1.3
P0.6
Tact= f/4
Registru SFR PWM0
Registru SFR PWM7
Registru TDACL, TDACH
Fig. 4.11 Structura canalelor PWM (ale MC specializat TV/video)
MUX
ANALOGIC
P1.0
P1.1
DAC (4 bit)
Comparator
Figura 4.12 Convertorul analog numeric (al MC specializat TV/video)
4. Familia MCS-51 125
semnalul de sincronizare vertical#.
Modulul OSD poate fi echipat cu EPROM, ceea ce nseamn# c#
generatorul de caractere poate fi programat. Modulul OSD permite 8 moduri de
scriere umbrit# a caracterului, culoarea caracterului este selectabil#, culoarea
fondului este selectabil#.
4.4.9 MC cu arie configurabil" (TRISCEND E5)
Firma TRISCEND a realizat un MC compatibil 8051 care con!ine o arie de
por!i configurabil# (Configurable System-on-Chip CSOC). Acest MC integreaz#
pe un singur chip un MC de uz general 8051, un bloc de RAM de mari dimensiuni
"i o arie de module configurabile, toate acestea conectate ntre ele printr-un bus de
mare vitez#. Programarea ariei se face prin programul de ini!ializare "i se poate
relua de ori cte ori.
Descrierea pe scurt a circuitului: ruleaz# la o frecven!# de 40MHz "i are
echipare standard (256 octe!i RAM, ceas de gard#, trei timere, 2 canale DMA,
interfa!# serial# UART, 64K octe!i RAM) "i are n plus 3200 de module
configurabile (CSL Configurable System Logic - ceea ce nseamn# cam 40.000 de
por!i).
Conectarea ntre modulele cofigurabile "i restul sistemului, respectiv liniile
I/O se realizeaz# prin magistrala CSI (Configurable System Interconnect), cu 8 bi!i
de date bidirec!ional, 32 de bi!i de adres#, rata de transfer de maxim 40MBps.
Magistrala CSI permite lucrul multi master, master putnd fi unitatea central#
8051, canalele DMA sau interfa!a JTAG.
Interfa!a cu exteriorul poate fi realizat# cu maxim 315 linii I/O (depinde
de variant# "i capsul#), exist# "i posibilitatea conect#rii memoriei externe, iar un
modul de interfa!# IEEE 1149.1 JTAG permite testarea sistemului. Liniile I/O au
caracteristici programabile (curent de ie"ire, histerezis la intrare etc.). Schema bloc
este dat# n figura 4.13.
Interfa!a cu memoria extern# permite legarea direct# a unei memorii de
256K x 8 bi!i (de regul# FLASH) pentru nscrierea ini!ial# a programului n MC.
nscrierea ini!ial# poate fi realizat# la RESET din aceast# memorie FLASH extern#
n mod paralel, dar poate fi realizat# prin citirea programului prin interfa!a serial#
de la un PROM serial. Programul poate fi executat din FLASH sau poate fi copiat
prin interfa!a serial# n RAM "i executat de acolo.
Modul serial elibereaz# pini I/O care pot fi astfel folosi!i n alte scopuri.
Procedura de nc#rcare poate s# nu fie reluat# dac# RAM-ul se alimenteaz# cu
baterie.
Cu aria de module configurabile se pot realiza sisteme la cerere. Fiecare
modul poate ndeplini diverse func!ii, combina!ionale sau secven!iale.
126 MICROCONTROLLER-e
Modulele configurabile sunt aranjate ntr-o matrice, a c#rei dimensiuni
depind de varianta de circuit. Modulele sunt grupate cte dou#, pentru a putea
mp#r!i resursele. Schema bloc a unui nod din matrice este dat# n figura 4.14.
PIO PIO PIO
8051
CPU
256 x 8 RAM
Ceas de gard#
3 x Timer
UART
Controller de
ntreruperi
2x DMA
BUS CSI
RAM
64Kocte!i
Interfa!a cu
memoria
extern#
Interfa!a
JTAG
Matrice CSL
Figura 4.13 Schema bloc a unui MC TRISCEND E5
Matrice
de
leg#turi
Matrice
de
leg#turi
Matrice
de
leg#turi
Matrice
de
leg#turi
Modul CSL
Modul CSL
Linii lungi de
adres#
Linii lungi I/O
Linii
scurte de
inter-
conectare
Figura 4.14 Schema bloc a unui modul de arie configurabil#
4. Familia MCS-51 127
Structura unei celule este dat# n figura 4.15.
Structura por!ilor poate fi programat# la ini!ializare "i reprogramat# de ori
cte ori. O celul# poate ndeplini una din func!iile:
logic# (ie"irea 1);
aritmetic#;
de memorare (ie"irea 2);
de magistral#;
secven!ial#.
Testarea JTAG se poate realiza cu un calculator conectat la interfa!a
JTAG. Pinii folosi!i sunt:
TCK ceas de testare (intrare n MC);
TMS comanda modului de test, intrare n MC, activ pe 0;
TDI date seriale de intrare n MC;
TDO date seriale de ie"ire din MC.
n modul de testare nu este nevoie ca MC s# aib# o memorie extern#. Prin
leg#tura JTAG se poate programa matricea CSL "i se poate observa modul de
rulare al programului de c#tre MC prin intercalarea de break point-uri, rularea pas
cu pas, citirea registrelor interne etc.
4.5 SISTEM MINIMAL CU 8051
Schema electric# simplificat# a unui sistem minimal cu 8051 este dat# n
figura 4.16.
Bistabil D
D Q
EN
T
Intr#ri
1 Ie"iri
2
Figura 4.15 Structura unei celule configurabile
Por!i
configurabile
prin
programare
128 MICROCONTROLLER-e
Sistemul minimal con!ine RAM cu capacitatea de 32KB, selectat cu PSEN
(care indic# faptul c# nu este acces la memoria program) "i /RD pentru o citire sau
/WR pentru o scriere n RAM.
Bus-ul de date "i adrese este comun pentru AD0-AD7. Adresele se separ#
cu un latch validat de semnalul ALE. Liniile de date sunt validate cu /RD sau /WR.
Memoria program EPROM este op!ional#, (este necesar# pentru modelele
care nu au EPROM sau OTP intern, de exemplu 8031) fiind selectat# cu semnalul
PSEN. Dac# exist# EPROM extern /EA=LOW, iar dac# se folose"te EPROM-ul
intern /EA=HIGH.
Circuitul se completeaz# cu un generator de tact "i dou# componente
pentru realizarea RESET-ului, ca n unul din subcapitolele anterioare.
Pentru dezvolt#ri se poate folosi portul P1, care este liber, "i canalul serial.
Dac# num#rul liniilor I/O nu este suficient, se poate folosi un expander cum este
de exemplu 8243, care poate extinde 4 linii la 4x4 linii bidirec!ionale (figura 4.17).
BUS
DATE
D0-D7
BUS
ADRESE
A0-A15
/A15
/WR
8051
X1 AD0-AD7
P0
X2
RST
ALE
P2
A8-A15
P1 /RD
/WR
LATCH
ADRESE
RAM
STATIC 32K
A0-A14
CS D0-D7
/WE
OE
EPROM
A0-A14
CS D0-D7
/OE
A15
/PSEN
Port I/O liber
PSEN /RD
Figura 4.16 Sistem minimal cu 8051
4. Familia MCS-51 129
4.6 DATE COMPARATIVE PENTRU MC DIN
FAMILIA MCS-51
Tabelul 4.8
Tabel comparativ pentru MC din familia MCS -51
MC Magistrala de
date
Frecven!
a
(MHz)
Linii
I/O
Interfe!e
speciale
Pre!
(USD)
PHILIPS
P87C51
8 16 32 2 4
PHILIPS
S87C552
8 16 48 5 35
PHILIPS XA-G3 16 30 32 2 90
TRISCEND E5 8 40 128 2 27
INTL 87C196 16 20 53 6 18
8051
X1
P0
X2
RST
P2.3
P2.2
P2.1
P2.0
P1
P2.5
P2.4
8243
P4
P23 P5
P22
P21
P20 P6
/CS
PROG P7
Figura 4.17 Expandarea liniilor I/O cu circuitul 8243
130 MICROCONTROLLER-e
5
MICROCONTROLLER-E RISC
5.1 MICROCONTROLLER PIC
ncepem prezentarea MC cu arhitectur! RISC cu microcontrollerul PIC.
Produc!torul plasat cel mai bine pe pia"a MC PIC este Microchip
(www.microchip.com). Un alt produc!tor important de MC PIC este Motorola.
Exist! mai multe familii de MC PIC; PIC#2, PIC#6, PIC#7.
5.1.1 PIC12
MC PIC#2 sunt MC cu pre"uri mici $i u$or de utilizat datorit! arhitecturii
RISC. MC are un num!r de 33 de instruc"iuni cu un grad mare de ortogonalitate,
din care majoritatea se execut! ntr-un singur ciclu, iar cele de salt n dou! cicluri.
Spa"iul mic ocupat (capsul! de 8 pini) fac aceste MC foarte potrivite aplica"iilor
miniatur! precum $i aplica"iilor casnice. Pentru a putea fi realizat! o $i mai mare
economie de spa"iu, circuitul de RESET este integrat. Sunt disponibile circuite cu
OTP, cu EPROM sau EEPROM inclus, care fac posibil! att realizarea seriilor
mari ct $i a prototipurilor sau a aplica"iilor cu elemente care se modific! (de
exemplu aplica"ii de asigurare a securit!"ii cu coduri variabile). Aceste MC admit o
frecven"! de pn! la 4MHz.
MC PIC#2 are o arhitectur! Harvard, cu magistrale diferite pentru date $i
pentru instruc"iuni. Acest lucru permite ca magistrala de instruc"iuni s! fie mai
mare (de #2 bi"i) $i ca urmare majoritatea instruc"iunilor pot fi de un cuvnt $i pot
fi executate ntr-un singur ciclu.
Unitatea central! este o unitate pe 8 bi"i care poate realiza func"ii
aritmetice $i booleene: adunare, sc!dere, deplasare $i opera"ii logice cu date care se
g!sesc n registrul de lucru (W) $i n oricare registru de uz general. Setul de
instruc"iuni are un mare grad de ortogonalitate, ceea ce reduce mult timpul
necesitat de realizarea unei aplica"ii. O opera"ie poate afecta bi"ii de stare: Carry
5. Microcontroller-e RISC 131
(C), Digit Carry (C ) $i Zero (Z). Num!r!torul de program (PC) este un registru de
#2 bi"i, ceea ce nseamn! c! poate adresa un spa"iu de 2K cuvinte de #2 bi"i.
Schema bloc a acestui MC este dat! n figura 5.#.
Setul de registre localizat n RAM con"ine registre cu func"ii speciale $i
registre de uz general. Registrele generale pot fi apelate direct sau indirect, prin
intermediul registrului special FSR (File Select Register). Registrele $i adresele lor
sunt date n tabelul 5.# (pentru circuitul PIC#2C509).
Tabelul 5.1
Setul de registre PIC12C509
Registru Adresa(H) Registru Adresa(H)
INDF 00 FSR 04
TMR0 0# OSCCAL 05
PCL 02 GPIO 06
STATUS 03 Registre
generale
07-#F
SDA
date
SCL
tact
Magistral! de date $i adrese
Unitate central!
PC
ALU
Memoria de date
RAM 25 x 8 bi"i sau
4# x 8 bi"i
(set de registre )
Memoria program
ROM/OTP/EPROM
5#2 x #2 bi"i sau
#024 X #2 bi"i
M
A
G
I
S
T
R
A
L
A
I
N
S
T
R.
.
W
Timer Ceas de
gard!
Timer pt.
RESET
EEPROM serial
#6 x 8
PIO
Figura 5.1 PIC#2 Schema bloc
132 MICROCONTROLLER-e
Stiva este de #2 bi"i $i este realizat! hard. Nu exist! indicator de stiv! $i nu
sunt instruc"iuni de PUSH $i POP, lucrul cu stiva fiind automat la instruc"iunile
CALL $i RETLW. Stiva admite o adncime de 2 nivele.
Setul de instruc"iuni pentru acest MC este dat n tabelul 5.2.
Tabelul 5.2
Setul de instruc!iuni PIC 12
Mnemonic!-operanzi Descriere
ADDWF f,d Adun! W cu f
ANDWF f,d %I LOGIC ntre W $i f
CLRF f Face n f to"i bi"ii 0
CLRW Face n W to"i bi"ii 0
COMF f,d Complementeaz! f
DECF f,d Decrementeaz! f
DECFSZ f,d Decrementeaz! f $i trece mai departe dac! este 0
INCF f,d Incrementeaz! f
INCFSZ f,d Incrementeaz! f $i trece mai departe dac! este 0
IORWF f,d SAU W cu f
MOVF f,d Mut! f
MOVWF f Mut! W n f
NOP Nici o opera"ie
RLF f,d Rota"ie la stnga prin Carry
RRF f,d Rota"ie la dreapta prin Carry
SUBWF f,d Sc!dere W din f
SWAPF f,d Schimb! f
XORWF f,d SAU EXCLUSIV W cu f
BCF f,b Bitul b din f este f!cut 0
BSF f,b Bitul b din f este f!cut #
BTFSC f,b Se testeaz! bitul b din f $i face salt dac! bitul este 0
BTFSS f,b Se testeaz! bitul b din f $i face salt dac! bitul este #
ANDLW k %I ntre W $i constanta k
CALL k Chemare subrutin!
CLRWDT k Resetare ceas de gard!
GOTO k Salt necondi"ionat
IORLW k SAU ntre W $i k
MOVLW k nc!rcare imediat! a constantei k n W
OPTION k nc!rcare registru de op"iuni
RETLW k ntoarcere din subrutin! cu plasarea k n W
SLEEP Intrarea n mod inactiv
TRIS f nc!rcarea registrului TRIS
XORLW k SAU EXCLUSIV ntre k $i W
5. Microcontroller-e RISC 133
Dac! valoarea bitului d este 0, rezultatul se stocheaz! n W iar dac! este #,
rezultatul se stocheaz! n f.
Registrul de op"iuni (OPTION) este un registru special de configurare.
Registrul TRIS este folosit pentru a controla liniile I/O. Un # n TRIS pune linia
corespunz!toare n nalt! impedan"!, iar un 0 valideaz! linia.
Liniile de intrare/ie$ire pot fi programate ca intr!ri sau ie$iri cu registrul
special GPIO. Pinii pot avea semnifica"ii duble. La RESET toate liniile se definesc
ca intr!ri. Unii pini pot trezi MC din starea inactiv! (Wake up). Opera"iile de
intrare ie$ire se fac prin intermediul registrului GPIO, de exemplu instruc"iunea:
BCF GPIO,5 ;stabile$te un 0 pe linia 5 de ie$ire
Modulul timer 0 poate fi utilizat n urm!toarele moduri:
temporizator/num!r!tor pe 8 bi"i;
num!r!tor pentru prescalare de 8 bi"i;
ceas din exterior sau din interior.
Schema bloc a temporizatorului cu semnalele de comand! este dat! n
figura 5.2.
Cu bitul TOC5 se alege sursa tactului, extern! (de la un pin cu semnifica"ie
dubl!) sau intern!. Tacul merge direct la timer sau prin registrul de prescalare
(registru de 8 bi"i), programabil cu bitul PSA. Registrul de prescalare poate fi
nc!rcat cu bi"ii PS2, PS# $i PS0. To"i ace$ti bi"i de comand! se afl! n registrul de
op"iuni. Registrul de prescalare poate fi folosit $i de ceasul de gard!, dar nu
simultan cu timerul 0.
Memoria EEPROM cu care sunt echipate anumite circuite din familie
poate fi de #6 octe"i, poate fi supus! la peste # mil. de cicluri de scriere/$tergere $i
poate re"ine informa"ia mai mult de 40 de ani. Transmisia se face serial sincron pe
dou! fire, unul de tact (SCL) $i unul de date, bidirec"ional (SDA), mapate n
registrul GPIO ca bit 6 $i bit 7, f!r! a avea conexiune n exterior. Protocolul pentru
Fosc/4
(intern)
GP2
(TOCKI)
(extern)
TOC5
Prescalare
Tact f!r!
sau cu
prescalare
PS2 PS# PS0 PSA
TIMER
Magistrala de date
Figura 5.2 Schema bloc a temporizatorului PIC#2
Alegere
tact
134 MICROCONTROLLER-e
transferul de date poate avea loc doar dac! magistrala de date nu este ocupat!, cu
SDA $i SCL=#. Un START este determinat de frontul SDA din # n 0, iar un front
SDA din 0 n # reprezint! un STOP. Data trebuie s! fie stabil! pe SDA pe durata
unui impuls de tact SCL (o tranzi"ie din # n 0, urmat! de una din 0 n #).
Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei.
Pentru a asigura siguran"a rul!rii corecte a programului, circuitul este
echipat cu un ceas de gard!, care poate fi resetat printr-o instruc"iune special!,
asigurnd o ntrziere de #8ms pn! s! declan$eze un RESET.
Familia PIC#2 are posibilitatea de lucru ntr-un mod cu economie de
energie, numit SLEEP. n modul SLEEP oscilatorul este oprit, iar pinii I/O $i
p!streaz! starea. Intrarea n SLEEP se face cu o instruc"iune special!. MC poate fi
scos din acest mod de lucru printr-un front aplicat la pin extern sau de ceasul de
gard!.
Ca $i mod de generare a tactului extern, circuitul poate lucra n mai multe
feluri:
cu cristal extern conectat la GP5/OSC# $i GP4/OSC2 dup! o schem!
standard;
cu generator de tact extern, cuplat ntre GP5/OSC# $i mas!;
pentru aplica"ii care nu sunt critice la timp, se poate conecta n exterior
la GP5 un grup RC, cu R (3k-#00k) la +5V $i C (20pF) la mas!;
MC are un generator intern de 4MHz, a c!rui frecven"! poate fi
modificat! prin scrierea registrului OSCCAL.
Alegerea sursei tactului, precum $i activarea ceasului de gard! se fac cu un
registru de configurare (de #2 bi"i) care nu este accesibil utilizatorului, fiind o
informa"ie scris! n PROM/ EPROM la adresa FFFh.
Un RESET poate fi generat de una din urm!toarele surse:
-la conectarea tensiunii de alimentare, POR Power On Reset;
-un RESET extern /MCLR pe pinul GP3;
-un RESET cnd circuitul este n mod SLEEP pe /MCLR;
-de la ceasul de timp real n operare normal!;
-de la ceasul de timp real n mod SLEEP;
-trezirea din mod SLEEP prin schimbarea st!rii unui pin extern.
Identificarea sursei de RESET se face prin pozi"ionarea unor bi"i n
registrul de stare, registru al c!rui con"inut nu se modific! prin RESET.
Memoria poate fi programat! n circuit (variantele cu EPROM).
Aceasta se realizeaz! simplu, cu 2 linii, una de date $i una de tact, conform
figura 5.3.
5. Microcontroller-e RISC 135
Intrarea n mod programare se face cu GP# $i GP0 "inu"i la 0 pe un front
cresc!tor al /MCLR.
Pentru a sublinia dimensiunea $i simplitatea de utilizare a acestui MC, n
figura 5.4 este repreyentat! capsula circuitului.
5.1.2 PIC16
Cu o arhitectur! asem!n!toare familiei PIC#2, aceste MC au cteva
mbun!t!"iri:
35 de instruc"iuni fa"! de 33;
frecven"a maxim! 20MHz fa"! de 4;
posibilitatea de lucru n ntreruperi, cu 7 surse interne $i o surs!
extern!;
stiv! automat! cu 8 nivele;
#3 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer
$i cu o linie de putere pentru comanda direct! a unui LED;
Inscriptor
(ex. Calc. PC)
+5V
GND
Vpp
CLK
D I/O
PIC#2C5xx
Vdd
Vss
/MCLR/Vpp
GP#
GP0
Figura 5.3 Conexiune pentru programarea EPROM
PIC#2C
# 8
2 7
3 6
4 5
Vss
GP0
GP#
GP2/T0CKI
Vdd
GP5/OSC#
GP4/OSC2
GP3/MCLR/Vpp
Figura 5.4 Capsula PIC#2
136 MICROCONTROLLER-e
magistrala de instruc"iuni este pe #4 bi"i, fa"! de #2 bi"i;
memoria ROM este de 5#2 x #4 cuvinte pn! la 2K x #4 cuvinte;
memoria RAM este de 80-#28 de octe"i.
Aceste MC sunt livrate n capsule cu 20 de pini.
ntreruperile sunt controlate de un registru de comand! a ntreruperilor care
poate valida sau invalida global sistemul de ntreruperi $i individual pe fiecare
linie. Fiecare interfa"! care poate cere ntrerupere are ata$at un bit care poate fi
testat pentru a determina sursa ntreruperii.
Datorit! posibilit!"ii de lucru n ntreruperi, timerul 0, care func"ioneaz! la
fel ca la PIC#2 poate cere ntrerupere la trecerea num!r!torului de la FFh la 00h.
ntreruperea poate fi mascat!.
Pentru cre$terea siguran"ei n func"ionare familia PIC#6 are integrat un
circuit de protec"ie care genereaz! un RESET la sc!derea tensiunii de alimentare
(Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de
comand!.
MC din familia PIC #6 pot fi echipate cu o diversitate mult mai mare de
interfe"e, cum ar fi comparatoare, convertoare ADC $i DAC, USART, I
2
C, SPI,
PWM etc. Circuitul PIC#6C64x este echipat cu 2 comparatoare analogice. Intr!rile
lor sunt multiplexate cu pinii I/O 0-3 $i cu o referin"! de tensiune care poate fi
folosit! pentru comaparatoare. Cu un registru de comand! n zona registrelor cu
func"ii speciale se poate programa modul de comparare. Se poate programa ca
ie$irea comparatoarelor s! cear! ntrerupere. Comparatoarele pot fi programate s!
lucreze cu referin"! extern! sau intern!. n modul SLEEP comparatoarele r!mn
active $i pot trezi circuitul. Dac! curentul consumat de comparatoare n mod
SLEEP este prea mare, ele pot fi dezactivate prin registrul de comand!. Modulul
care genereaz! referin"a de tensiune este un grup de #6 rezisten"e care divizeaz!
tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau
invalidat pentru economia de energie.
Circuitul PIC#6C7#x este echipat cu convertor A/D $i un bloc suplimentar
de timere. Convertorul A/D este un convertor cu aproxima"ii succesive pe 8 bi"i, cu
4 intr!ri analogice multiplexate $i cu circuit de e$antionare-memorare. Tensiunea
de referin"! poate fi cea de alimentare sau o referin"! extern! la un pin I/O cu
semnifica"ie dubl!. Convertorul A/D poate lucra $i n modul SLEEP, pentru acest
mod de lucru fiind integrat n circuit un oscilator propriu pentru convertor.
Convertorului i sunt ata$ate 3 registre, 2 de comand! $i unul de date. Cu registrele
de comand! se poate programa:
selec"ia tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu);
selec"ia canalului analogic;
un bit pentru START conversie;
un bit pentru terminare conversiei - poate fi citit $i testat prin program,
sau poate cere o ntrerupere;
un bit pentru oprirea convertorului pentru a nu mai consuma curent,
dac! nu este folosit n mod SLEEP.
5. Microcontroller-e RISC 137
Modulul suplimentar de timere este numit CCP (Capture Compare PWM),
dup! func"iile pe care le poate ndeplini (un MC poate avea unul sau mai multe
module CCP). Modulul CCP con"ine un registru de #6 bi"i $i folose$te timerele
suplimentare # $i 2. Modurile de lucru posibile pentru modulul CCP sunt:
mod captur" - la apari"ia unui eveniment la pinul exterior 3, registrul
CCP se ncarc! cu valoarea din timerul #. Un eveniment poate fi un
front cresc!tor, unul descresc!tor, la fiecare 4 sau #6 fronturi
cresc!toare (prescalare). n momentul evenimentului se poate cere o
ntrerupere.
mod comparare - registrul CCP este permanent comparat cu
con"inutul timerului #. Dac! apare o coinciden"!, se semnalizeaz! prin
schimbarea st!rii pinului extern 3. n acela$i moment se poate cere o
ntrerupere.
mod PWM - se folosesc 2 timere, # $i 2, unul pentru a determina
perioada semnalului $i cel!lalt factorul de umplere. Ie$irea PWM se
face tot la pinul 3.
5.1.3 PIC17
PIC#7 are urm!toarele mbun!t!"iri fa"! de PIC#6:
58 de instruc"iuni fa"! de 38;
frecven"a maxim! 33MHz fa"! de 20;
stiv! automat! cu #6 nivele fa"! de 8;
33 de linii I/O cu posibilitatea stabilirii individuale a sensului de
transfer $i cu o linie de putere pentru comanda direct! a unui LED;
magistrala de instruc"iuni este pe #6 bi"i, fa"! de #4 bi"i;
memoria ROM este de 2048 x #6 cuvinte;
memoria RAM este de 232 de octe"i;
magistralele de date, $i adrese (multiplexate) sunt accesibile la pin;
unitatea central! poate executa nmul"iri;
sunt admise ## surse de ntreruperi fa"! de 8.
Aceste MC sunt livrate n capsule cu 44 de pini.
Schema bloc este dat! n figura 5.5.
%i circuitele din familia PIC#7 pot fi echipate cu o gam! larg! de interfe"e.
138 MICROCONTROLLER-e
Sistemul de timere este compus din mai multe timere:
Timer 0 este un num!r!tor de #6 bi"i cu surs! de num!rare extern! sau
intern!. Poate lucra cu un registru de prescalare care d! un tact divizat
cu #/# pn! la #/256;
Timer # este un timer pe 8 bi"i care poate lucra mpreun! cu Timerul 2
pentru a forma un timer pe #6 bi"i. Poate lucra n regim de num!rare a
unor evenimente externe. Timerul are asociat un registru, deci poate
lucra n regim de comparare;
Timer 2 este la fel cu timerul #. Timerul # $i 2 pot lucra n mod PWM;
Timer 3 este pe #6 bi"i, cu un registru asociat.
Modulul USART poate fi configurat s! lucreze n mod serial asincron full-
duplex (pentru a transfera date cu un terminal sau un PC), sau n mod sincron full-
duplex (de ex. pentru a lucra cu memorii externe EEPROM).
Magistrala de date $i adrese
Unitate central!
PC
ALU
Memoria de date
RAM 232 x 8 bi"i
Memoria program
ROM/OTP/EPROM
2K x #6 bi"i
M
A
G
I
S
T
R
A
L
A
I
N
S
T
R
.
W
Timer
Ceas de
gard!
Control
ler de
ntrerup
Timer pt.
RESET
PIO
Port C $i D Port B Port A
STIVA
#6 x #6 bi"i
3 x
TIMER
UART
Figura 5.4 Schema bloc PIC#7
5. Microcontroller-e RISC 139
Observa!ie: este de remarcat la MC din familia PIC faptul c! nu au nevoie de
componente externe pentru RESET $i pentru ceas, ceea ce poate fi un avantaj.
5.2 MC ATMEL
Foarte bine plasate pe pia"! n zona aplica"iilor low cost sunt MC ale firmei
ATMEL. Firma fabric! $i MC echivalente 805#.
5.2.1 Familia AVR
Aceste MC sunt realizate de produc!tor n diverse variante, ncepnd cu
modelele low cost AT90S2323, AT90S#200 $i terminnd cu modele complexe
AT90S44#4, AT90S85#5, diferen"ele ntre acestea constnd n principal n
m!rimea $i tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM $i a
facilit!"ilor oferite la interfa"a cu utilizatorul.
Seria de MC ATMEL este sus"inut! de o campanie puternic! de promovare
astfel nct produc!torul ofer! gratuit software de dezvoltare ce include asamblor,
debugger, documenta"ie, exemple $i note de aplica"ie pe site-ul s!u
www.atmel.com. Softul este disponibil att n variant! ce ruleaz! sub sistemul de
operare MS-DOS ct $i n varianta WINDOWS.
Toate MC din familie au o arhitectur! Harvard, adic! au spa"ii de adres! $i
magistrale diferite pentru memoria de date $i memoria program. Dispun de o
prelucrare de tip pipe line a instruc"iunilor (n 2 trepte) astfel nct n timp ce o
instruc"iune este executat!, cealalt! se afl! n ciclu de aducere din memorie (fetch)
$i astfele se execut! cte o instruc"iune n fiecare ciclu.
Schema bloc a unui circuit din familie este dat! n figura 5.5.
Unul dintre cele mai mici MC este AT90S2323. Circuitul se alimenteaz!
(n func"ie de variant!) la 5V sau la 3V $i func"ioneaz! pn! la frecven"a de
#0MHz. Curentul absorbit este de 2,4mA n stare activ!, 0,5mA n stare inactiv! $i
#A n starea Power Down. n principal, circuitul este compus din:
unitatea central!, n arhitectur! RISC cu ##8 instruc"iuni, majoritatea
de un ciclu $i 32 de registre de uz general;
blocul de memorie, compus din memoria de program (FLASH de 2K
octe"i care suport! n jur de #000 de program!ri) $i din memoria de
date (#28 octe"i de RAM) $i #28 octe"i de EEPROM, care suport! n
jur de #00.000 de program!ri;
140 MICROCONTROLLER-e
interfe"ele sunt reprezentate de un timer de 8 bi"i cu prescalare, un
timer pentru ceasul de gard! $i o interfa"! serial! SPI pentru
programarea n circuit. Liniile I/O sunt de regul! cu semnifica"ie
dubl!.
Unitatea central! poate executa majoritatea opera"iilor ntr-un ciclu, ceea
ce nseamn! c! operanzii sunt n registrele generale, are loc opera"ia $i rezultatul
este stocat n unul dintre registre. Se pot realiza $i adres!ri indirecte cu 6 dintre cele
32 de registre, grupate cte 2 (ca s! formeze registre de #6 bi"i); registrele duble
sunt referite cu X, Y, Z. Se pot face opera"ii ntre registre sau cu o constant!.
Instruc"iunile au formatul pe #6 bi"i, iar indicatorul de program PC este pe #0 bi"i.
Memoria de date poate fi accesat! tot ca registre, n acela$i spa"iu. Spa"iul
I/O con"ine 64 de adrese unde se g!sesc registrele de control $i de stare ale
interfe"elor. Stiva este definit! n RAM, deci exist! un registru indicator de stiv!
SP de 8 bi"i. O imagine sugestiv! a spa"iilor de memorie $i I/O este dat! n figura
5.6.
Magistral! de date
Unitate central!
PC
ALU
Memoria de date
RAM #28 octe"i
EEPROM #28 de octe"i
Memoria program
FLASH 2K octe"i
32 registre de
uz general
SPI Ceas de
gard!
Timer
Port B
Oscilator
Controller de
ntreruperi
Figura 5.5 MC din familia AVR schema bloc
5. Microcontroller-e RISC 141
Memoria EEPROM dispune de un spa"iu propriu de adresare, n care
fiecare octet dintr-o loca"ie poate fi citit sau scris. Accesul se face specificnd
adresa, data $i comanda n registre speciale.
Acest MC permite 5 moduri de adresare:
adresare direct! - adresa operandului este con"inut! n instruc"iune. Se
pot executa instruc"iuni cu un registru sau ntre 2 registre. Este
accesibil astfel tot spa"iul de date;
adresare indirect! - adresa operandului este n X, Y sau Z;
adresare indirect! cu deplasament - adresa oprandului este rezultatul
adun!rii registrelor Y sau Z cu adresa de 6 bi"i con"inut! n
instruc"iune. Se acoper! astfel doar 63 de loca"ii fa"! de baza dat! de
registrele Y sau Z;
adresare indirect! cu pre decrementare - registrele X, Y sau Z sunt
decrementate nainte de adresare;
adresare indirect! cu post incrementare.
Setul de instruc"iuni este dat n tabelul 5.3.
000h
3FFh
Memoria program
FLASH
#Kx #6 bi"i
00h
#Fh
60h
32 registre de lucru
64 registre I/O
SRAM
#28 octe"i
EEPROM
#28 octe"i
00h
7Fh
Figura 5.6 Harta spa"iilor de memorie $i I/O
142 MICROCONTROLLER-e
Tabelul 5.3
Setul de instruc!iuni al familiei AVR
Mnemonic! Operanzi Opera"ie Opera"ie
ADD Rd,Rr Rd=Rd+Rr Sum!
ADC Rd,Rr Rd=Rd+Rr+C Sum! plus carry
SUB Rd,Rr Rd=Rd-Rr Diferen"!
SUBI Rd,K Rd=Rd-K Diferen"! cu o constatnt!
SBC Rd,Rr Rd=Rd-Rr-C Diferen"! cu carry
SBCI Rd,K Rd=Rd-K-C Dif. cu const. $i carry
AND Rd,Rr Rd=Rd*Rr SI logic
ANDI Rd,K Rd=Rd*K SI logic cu const.
OR Rd,Rr Rd=Rd v Rr SAU logic
ORI Rd,K Rd=Rd v K SAU logic cu const.
EOR Rd,Rr Rd=RdRr SAU exclusiv
COM Rd Rd=$FF-Rd Complement fa"! de #
NEG Rd Rd=$00-Rd Complement fa"! de 2
SBR Rd,K Rd=Rd v K Set bit K n registru
CBR Rd,K Rd=Rd*(FFh-K) Clear bit K n registru
INC Rd RD=Rd+# Increment
DEC Rd Rd=Rd-# Decrement
TST Rd Rd=Rd * Rd Test de 0 sau -
CLR Rd Rd=RdRd Clear registru
SER Rd Rd=$FF Set registru
RJMP k PC=PC+k+# Salt relativ la k
RCALL k PC=PC+k+# Salt la subrutin!
RET PC=STACK Return din subrutin!
RETI PC=STACK Ret. din subrutin! de tratare a
ntreruperii
CPSE Rd,Rr if (RD=Rr) PC=PC+2
or 3
Compar! , skip dac! egal
CP Rd,Rr Rd-Rr Compar!
CPC Rd,Rr Rd-Rr-C Compar! cu carry
CPI Rd,K Rd-K Compar! cu constat!
SBRC Rr,b if (Rr(b)=0) PC=Pc+2
or 3
Skip dac! bitul b din Rr este 0
SBRS Rr,b if (Rr(b)=#) PC=Pc+2
or 3
Skip dac! bitul b din Rr este #
SBIC P,b if (P(b)=0) PC=Pc+2
or 3
Skip dac! bitul B din I/O este 0
SBIS P,b if (P(b)=#) PC=Pc+2
or 3
Skip dac! bitul B din I/O este #
5. Microcontroller-e RISC 143
Mnemonic! Operanzi Opera"ie Opera"ie
BRBS s,k if(SREG(s)=#)
PC=PC+k+#
Salt dac! SF este#
BRBC s,k if(SREG(s)=0)
PC=PC+k+#
Salt dac! SF este 0
BREQ k if (Z=#) PC=PC+k+# Salt: egalitate
BRNE k if (Z=0) PC=PC+k+# Salt: diferit
BRCS k if (C=#) PC=PC+k+# Salt: carry setat
BRCC k if (C=0) PC=PC+k+# Salt: carry este zero
BRSH k if (C=0) PC=PC+k+# Salt: mai mare sau egal
BRLO k if (C=#) PC=PC+k+# Salt: mai mic
BRMI k if (N=#) PC=PC+k+# Salt: minus
BRPL k if (N=0) PC=PC+k+# Salt: plus
BRGE k if (NV=0)
PC=PC+k+#
Salt : mai mare sau egal, cu
semn
BRLT k if (NV=#)
PC=PC+k+#
Salt : mai mic dect 0, cu semn
BRHS k if (H=#) PC=PC+k+# Salt dac! CF este setat
BRHC k if (H=0) PC=PC+k+# Salt dac! CF este zero
BRTS k if (T=#) PC=PC+k+# Salt dac! T este setat
BRTC k if (T=0) PC=PC+k+# Salt dac! T este zero
BRVS k if (V=#) PC=PC+k+# Salt dac! este overflow
BRVC k if (V=0) PC=PC+k+# Salt dac! nu este overflow
BRIE k if (I=#) PC=PC+k+# Salt dac! ntreruperea e
activat!
BRID k if (I=0) PC=PC+k+# Salt dac! ntreruperea e
dezactivat!
LD Rd,Z Rd=(Z) Incarc! registru indirect
ST Z,Rr (Z)=Rr Stocheaz! registru indirect
MOV Rd,Rr Rd=Rr Mut! Rr n Rd
LDI Rd,K Rd=K Mut! constanta K n Rd
IN Rd,P Rd=P IN din portul P
OUT P,Rr P=Rr OUT la portul P
SBI P,b I/O (p,B)=# Set bit b din portul P
CBI P,b I/O (p,B)=0 Reset bit b din portul P
LSL Rd Rd(n+#)=Rd(n),Rd(
0)=0
Shift logic stnga
LSR Rd Rd(n)=Rd(n+#),Rd(
7)=0
Shift logic dreapta
ROL Rd Rd(0)=C,Rd(n+#)=
Rd(n),
C=Rd(7)
Rotire spre stnga prin carry
144 MICROCONTROLLER-e
Mnemonic! Operanzi Opera"ie Opera"ie
ROR Rd Rd(7)=C,Rd(n)=Rd(
n+#),
C=Rd(0)
Rotire spre dreapta prin carry
ASR Rd Rd(n)=Rd(n+#),
n=0..6
Shift aritmetic spre dreapta
SWAP Rd Rd(3..0)=Rd(7..4),
Rd(7..4)=Rd(3..0)
Inverseaz! jum!t!"ile
BSET s SREG(s)=# Seteaz! flag s
BCLR s SREG(s)=0 Reseteaz! flagul s
BST Rr,b T=Rr(b) Stocheaz! bitul b din Rr n T
BLD Rd,b Rd(b)=T Incarc! T n bitul b din Rd
SEC C=# Seteaz! Carry flag
CLC C=0 Reset Carry flag
SEN N=# Seteaz! Negative flag
CLN N=0 Reseteaz! Negative flag
SEZ Z=# Seteaz! Zero flag
CLZ Z=0 Reseteaz! Zero flag
SEI I=# Activeaz! ntrerupere
CLI I=0 Dezactiveaz! ntrerupere
SES S=# Seteaz! flagul de semn
CLS S=0 Reseteaz! flagul de semn
SEV V=# Seteaz! flagul overflow
complement fa"! de 2
CLV V=0 Reseteaz! flagul overflow
complement fa"! de 2
SET T=# Seteaz! T n SREG
CLT T=0 Reseteaz! T n SREG
SEH H=# Seteaz! Half Carry Flag n
SREG
CLH H=0 Reseteaz! Half Carry Flag n
SREG
NOP No operation
SLEEP Sleep
WDR Watch dog reset
Anumite modele au $i o instruc"iune de nmul"ire, MUL.
MC AVR au 3 surse de ntrerupere:
de la RESET, (din exterior, la punerea sub tensiune sau de la ceasul de
gard!);
de la un pin extern;
de la timer, la o dep!$ire.
5. Microcontroller-e RISC 145
ntreruperile pot fi mascate cu 2 registre de 8 bi"i, GIMSK- General
Interrupt Mask $i TIMSK- Timer/Counter Interrupt Mask. La primirea unei
ntreruperi se invalideaz! sistemul de nteruperi. Totu$i este posibil! primirea nc!
a unei ntreruperi n timp ce este servit! prima, dac! se revalideaz! sistemul de
ntreruperi. R!spunsul la o cerere de ntrerupere dureaz! minimum 4 cicluri, timp
n care PC este salvat n stiv!, SP este incrementat cu 2 $i se seteaz! invalidarea
ntreruperilor.
Sursele de RESET pot fi:
la punerea sub tensiune (Power On Reset), dac! tensiunea cre$te $i
atinge un anumit prag;
de la un pin extern, dac! un nivel LOW este prezent mai mult de 50ns;
de la ceasul de gard! dac! este validat $i a expirat perioada de timp
pentru care a fost programat s! a$tepte o ini"ializare.
Dup! RESET execu"ia programului ncepe de la adresa 000h. Un RESET
porne$te un num!r!tor care contorizeaz! un anumit num!r de impulsuri ale
ceasului intern al circuitului. Contorul stabile$te durata impulsului RESET intern
pentru ca acesta s! fie suficient de lung pentru ini"ializarea tuturor circuitelor
interne, figura 5.7.
Nu mai este astfel necesar! nici o component! exterioar! pentru semnalul
de RESET.
MC admite moduri de lucru cu economie de energie:
modul adormit (Power Down), n care se intr! prin execu"ia
instruc"iunii SLEEP. Dac! n modul SLEEP apare o ntrerupere
extern!, una de la ceasul de gard! sau un RESET, acestea sunt
executate, circuitul trezindu-se. n acest mod de lucru este oprit
Power On Reset
RESET
Vcc
/RESET
Ceas de gard!
Oscilator RC
intern
Num!r!tor
S Q
R /Q
SAU
LOGIC
Reset
Figura 5.7 Circuit intern pentru generarea semnalului RESET
146 MICROCONTROLLER-e
oscilatorul extern. Trezirea dureaz! un interval de timp egal cu cel
necesar pentru un RESET.
modul inactiv, n care se intr! cu aceea$i instruc"iune, dar pozi"ionnd
un bit din registrul de control. n acest mod unitatea central! este
oprit!, dar timerul, ceasul de gard! $i sistemul de ntreruperi continu!
s! func"ioneze. O ntrerupere intern!, una extern! sau un RESET
trezesc circuitul.
Circuitul admite ca surse de tact:
un cristal de cuar" sau un rezonator ceramic, pentru aplica"ii cu
preten"ii la stabilitatea frecven"ei, (elemente conectate la pinii Xtal# $i
Xtal2);
un generator extern la un pin I/O (PB3);
generatorul RC intern, la #MHz.
Selec"ia sursei ceasului pentru tact intern sau extern se face cu un bit n
memoria FLASH. Circuitul este programat implicit pentru tact extern. Lucrul cu
ceas intern determin! posibilitatea utiliz!rii acestor MC cu componente externe
extrem de pu"ine.
Timerul care echipeaz! circuitele AT902323 este un timer pe 8 bi"i cu un
registru de prescalare pe #0 bi"i. Timerul poate fi folosit cu tact intern (tactul
sistemului divizat cu 8, 64, 256 sau #024) sau cu tact extern. Sursa de tact pentru
timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Func"ionarea
timerului este controlat! de bi"i din din dou! registre (registru de m!$ti pentru
ntreruperi $i registru de control al timerului). La dep!$ire, num!r!torul poate cere
o ntrerupere.
Ceasul de gard! are ca $i tact un oscilator separat, integrat n MC $i
este complet separat de timer. Ca $i timerul, ceasul de gard! are posibilitatea
de prescalare. Controlul ceasului de gard! se face cu registrul WDTCR
(Watchdog Timer Control Register). Pentru a evita dezactivarea
ntmpl!toare a ceasului de gard!, acesta trebuie dezactivat cu o secven"! de
program specific!.
EEPROM este accesibil n spa"iul I/O, prin urm!toarele registre:
registru de adrese EEPROM;
registru de date EEPROM;
registru de control EEPROM, care comand! sensul transferului.
MC ATMEL AVR au linii I/O de uz general (AT902323 are 3 linii,
AT902343 are 5 linii, iar modelul AT90S#200 dispune de dou! porturi: B de 8 bi"i
$i D de 7 bi"i). Fiecare linie de port poate fi configurat! independent fa"! de
celelalte, att ca linie de intrare ct $i ca linie de ie$ire. De asemenea n modul de
utilizare ca linie de intrare, fiecare linie poate fi configurat! cu un rezistor de pull-
up intern ( valoarea aprox 40K ). Fiecare linie de ie$ire poate sus"ine un curent de
20mA (max 40mA valoare limit! absolut!) astfel nct se poate folosi direct la
5. Microcontroller-e RISC 147
comandarea de LED-uri. Fiec!rui port i este alocat un registru de sens, (DDRx,
Port x Data Direction). Pinii I/O admit semnifica"ii duble.
Programarea memoriei FLASH $i EEPROM se poate face serial, ntr-un
mod cu tensiune mare (#2V) $i un mod cu tensiune joas!. Circuitele vin de la
fabricant gata de a fi nscrise (au con"inutul FFh n fiecare loca"ie). n modul de
programare cu tensiune nalt!, tensiunea de #2V valideaz! programarea, nu are un
rol func"ional. Modul de programare n cele 2 variante este ar!tat n figura 5.8.
La programarea cu tensiune mare se poate programa memoria FLASH
(intrarea pe PB#) $i memoria de date EEPROM (intrarea pe PB0). Pentru
programarea memoriei FLASH se trimite nti adresa apoi data (octetul LOW apoi
cel HIGH). Confirmarea se ob"ine prin trecerea lui PB2 n HIGH. Memoria
EEPROM se programeaz! trimi"nd nti adresa apoi octetul de date, confirmarea
fiind pe pinul PB2. Orice loca"ie poate fi citit! folosind instruc"iunea de citire $i
adresa, ob"innd pe pinul PB2 con"inutul respectiv. Tactul serial este activ pe front
cresc!tor. Scrierea, citirea $i unele comenzi speciale ($tergerea ntregii memorii,
scrierea bi"ilor de securitate etc.) se comand! prin trimiterea naintea adresei a
codului serial al comenzii respective (se g!se$te n foile de catalog).
La programarea cu tensiune mic! se poate programa memoria FLASH $i
memoria EEPROM tot serial, prin interfa"a SPI. Datele se nscriu pe frontul
cresc!tor a lui SCK. n acest mod de lucru, confirmarea scrierii unei loca"ii se face
prin trimiterea n ecou a octetului scris. Comenzile se trimit la fel, prin coduri
seriale.
Un programator pentru astfel de MC (mod de programare cu tensiune
mare) se poate realiza simplu, folosind interfa"a CENTRONICS a unui PC, figura
5.9.
Programare cu
tensiune mare
Programare cu
tensiune mic"
AT902323
/RESET Vcc
XTAL#/PB3 PB2
PB#
PB0
#2V
Ceas de
programare
serial
AT902323
/RESET Vcc
XTAL#/PB3 PB2
PB#
PB0
GND
Tact
4,5-5,5V
Date seriale de
ie$ire
Instruc"iuni seriale
de intrare
Date seriale de
intrare
2,7-6,0V
SCK
MISO
MOSI
Figura 5.8 Programarea serial! a memoriei EPROM (FLASH)
148 MICROCONTROLLER-e
Memoria este prev!zut! cu posibilitatea de protec"ie a programelor
nscrise. Astfel, exist! 2 bi"i de blocare n FLASH care nu pot fi $ter$i dect prin
$tergerea ntregului program. Ace$ti doi bi"i pot comanda:
dezactivarea unor viitoare program!ri ale memoriei FLASH sau
EEPROM;
dezactivarea unor viitoare program!ri ale memoriei FLASH sau
EEPROM $i blocarea verific!rii.
Memoria mai este prev!zut! cu 2 bi"i care nu pot fi $ter$i (fuzibili) care pot
comanda:
dezactivarea modului serial de programare;
sursa intern! sau extern! pentru tact.
Modelul ATiny #0 este echipat cu un comparator analogic, care compar!
valoarea analogic! de la pinul PB0 cu cea de la pinul PB#. Ie$irea comparatorului
poate declan$a o ntrerupere. Comparatorul este controlat de un registru de control
$i stare.
Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe #0 bi"i.
Acest model este un MC cu o echipare superioar!: un timer suplimentar de #6 bi"i
cu posibilitatea de comparare, captur! $i generare PWM, un comparator analogic,
un canal UART, un convertor A/D pe #0 bi"i cu 6 canale $i un sistem de ntreruperi
care admite #4 surse de ntrerupere din care 2 externe. Acest circuit are $i
posibiliataea de programare paralel!, deoarece are suficiente linii I/O. Schema bloc
a acestui MC este dat! n figura 5.#0.
AT902323
/RESET Vcc
XTAL#/PB3 PB2
PB#
GND PB0
4,5-5,5V
INTERFA&A
CENTRONICS
STB
D0
D#
ACK
#2V
Figura 5.9 Programarea unui circuit AVR folosind interfa"a CENTRONICS
5. Microcontroller-e RISC 149
Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bi"i
de date, cu generarea de rat! de transfer. Canalul serial poate cere ntrerupere la
transmisie complet!, registru de transmisie gol sau recep"ie complet!. Recep"ia $i
transmisia se fac ca $i la celelalte MC, cu un registru de deplasare pentru
serializare/deserializare $i un registru de date. Se poate realiza $i o comunica"ie
serial! multiprocesor (Multi- Processor Communication Mode), prin transmisia n
mesaj nti a adresei unui destinatar $i apoi a mesajului propriu-zis. Se poate astfel
realiza o comunica"ie n care un procesor este MASTER iar celelalte SLAVE.
Canalul serial este controlat de un registru de comand! $i stare.
Comparatorul analogic, pe lng! ntreruperea pe care o poate genera, poate
s! declan$eze o captur! la timerul de #6 bi"i la acest tip de MC.
Convertorul A/D este un convertor cu aproxima"ii succesive cu e$antionare
memorare $i cu un bloc de multiplexare analogic! pe 6 canale la intrare.
Convertorul poate lucra cu conversie singular! sau conversie continu!. Convertorul
are pini de alimentare separa"i din exterior $i un pin pentru conectarea tensiunii de
referin"!. Ca $i tact de conversie, convertorul accept! tactul sistemului divizat cu
un registru de prescalare. Tactul se poate ncadra n valorile optime 50-200kHz.
Magistrala de date
Unitate central!
PC
ALU
Memoria de date
RAM #28 octe"i
EEPROM #28 de octe"i
Memoria program
FLASH 2K octe"i
SPI
Ceas
de
gard!
Timer
Port B
32 registre de
uz general
Timer #6b UART
Controller de ntreruperi
Oscilator intern
ADC
Port C
Comparator
Port D
RESET
Figura 5.10 MC AT90S4433 Schema bloc
150 MICROCONTROLLER-e
La terminarea unei conversii convertorul poate cere o ntrerupere. Schema bloc a
convertorului este dat! n figura 5.##.
Prin registrul ADMUX se comand! cu 3 bi"i selec"ia unui canal din cele 6.
Registrul de control $i stare ADCSR poate declan$a o conversie prin pozi"ionarea
unui bit. Func"ionarea convertorului poate fi validat!/invalidat!. Prin registrul de
control se poate programa $i rata de prescalare. Pentru a mic$ora perturba"iile
introduse de unitatea central! n timpul achizi"iei de date se poate comanda UC n
stare inactiv!. Dup! efectuarea conversiei ntreruperea de la convertor va trezi UC
(ADC Noise Canceler Function).
nscrierea memoriei FLASH $i EEPROM se poate face $i n mod paralel,
ceea ce nseamn! o vitez! mai mare de scriere $i un plus de simplitate la
programare. Semnalele folosite n acest mod de programare sunt date n figura
5.#2.
Pentru nscrierea sau citirea datelor se folosesc 8 linii cu semnifica"ii duble
din porturile PC $i PB. /OE stabile$te dac! este vorba de scriere sau citire. Scrierea
se face cu strobul /WR. BS selecteaz! octetul mai semnificativ sau mai pu"in
semnificativ. Semnalele XA0 $i XA# stabilesc dac! se ncarc! memoria FLASH,
sau o adres! a EEPROM, un octet de date sau o comand!. Sunt posibile 9 comenzi:
Multiplexor
analogic
Convertor Analog
Digital cu aprox.
succesive
ADMUX
ADCH, ADCL (#0b)
BUS INTERN
Cerere de
ntrerupere
Selec"ie
canal
START Date
Intr!ri
analogice
E$antionare
Memorare
ADCSR
Registru de
prescalare
CK
Figura 5.11 Convertorul analog-numeric
Tact
conversie
5. Microcontroller-e RISC 151
$tergere memorie, scriere bi"i de securitate, scriere bi"i fuzibili, scriere FLASH,
scriere EEPROM, citire bi"i de identificare, citire bi"i fuzibili $i de securitate, citire
FLASH, citire EEPROM. Modul de scriere paralel poate fi u$or realizat prin
intermediul interfe"ei CENTRONICS; citirea pentru verificare este mai complicat!.
Modelele AT90S44#4 $i AT90S85#5 dispun de posibilitatea conect!rii n
exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la
portul A magistrala de adrese (octet mai pu"in semnificativ) $i magistrala de date
multiplexate, iar la portul C octetul mai semnificativ al magistralei de adrese. De
asemenea sunt disponibile $i semnalele ALE (Address Latch Enable), /RD $i /WR.
5.2.2 Familia ARM
Un nucleu cu arhitectur! RISC de mare performan"! este ARM7DMI. Este
conceput cu o arhitectur! von Neumann, cu magistrala de date pe 32 de bi"i, avnd
2 seturi de instruc"iuni (ARM pe 32 de bi"i $i THUMB pe #6 bi"i). Spa"iul adresabil
este de 4G.
O schem! bloc sumar! a acestui nucleu este dat! n figura 5.#3.
Structura UC este pipe line pe 3 nivele; extragere cod, decodificare $i
execu"ie. UC poate lucra cu date pe 8, #6 sau 32 de bi"i $i poate executa nmul"iri
ntr-un singur ciclu. Nucleul are integrat $i circuitul de testare JTAG $i un emulator
n circuit.
Setul de instruc"iuni THUMB pe #6 bi"i este un subset al setului pe
32 de bi"i, cele mai uzual folosite instruc"iuni. n acest fel se salveaz! spa"iu
de memorare $i se c$tig! vitez! de prelucrare.
AT90S4433
PD# Vcc
PD2 PC,PB
PD3
PD4
PD5
PD6
RESET
XTAL
+5V
8 linii de date,
bidirec"ionale
RDY/BSY
/OE
/WR
BS
XA0
XA#
+#2V
tact
Figura 5.12 Semnale folosite la nscrierea paralel! a memoriei EEPROM (FLASH)
152 MICROCONTROLLER-e
Pentru a asigura un grad mare de paralelism n UC, exist! mai multe
magistrale de leg!tur!. Instruc"iunile sunt analizate $i distribuite decodoarelor
corespunz!toare (THUMB sau ARM). UC este echipat! cu un set de 32 de registre
$i registre suplimentare pentru nmul"ire. Pentru a se putea conecta o varietate ct
mai mare de interfe"e, magistralele sunt accesibile prin distribuitor n mai multe
forme: unidirec"ional, bidirec"ional, multiplexat etc.
Unitate central! ARM
37 registre de 32 bi"i
ALU pe 32 de bi"i
Bus A
Magistrala
de adrese
Registru de date (32)
Decodor
THUMB
Decodor
ARM
Bus B
Bus C
Registru pt. adrese
Magistrala de
date (32)
Emulator n
circuit
(Ice Breaker)
Distribuitor
de
magistrale
Controller
JTAG
Figura 5.13 MC ARM schema bloc
6
CRITERII DE PROIECTARE
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC
Sunt multe aspecte de care trebuie !inut seama la alegerea unui MC pentru
o anumit" aplica!ie. Alegerea unui MC potrivit poate duce la succesul proiectului,
a#a cum o alegere nepotrivit" poate duce la e#ecul proiectului. Fiecare cititor
trebuie s" adapteze aceste criterii nevoilor sale #i scalei proprii de valori.
Obiectivul urm"rit n alegerea unui MC este ob!inerea calit"!ii dorite cu un
cost ct mai sc"zut. Calit"!ile dorite nseamn" performan!", fiabilitate, calit"!i EMC
(de compatibilitate electromagnetic" cu mediul), iar costul total include costurile
cercet"rii, proiect"rii, construc!iei, test"rii, repar"rii produsului.
n primul rnd se pune problema stabilirii func!iei pe care MC trebuie s-o
ndeplineasc" n sistem. Alegerea din catalog a unui MC trebuie f"cut" n ideea a
ct mai pu!in hardware suplimentar (din motive economice). Procesul de c"utare
este dificil din cauza num"rului foarte mare de tipuri de MC disponibile pe pia!".
Munca de c"utare este ajutat" de bazele de date din Internet, a#a cum este baza de
date de la www.questlink.com . Dup" stabilirea MC optim se verific" pre!urile,
dac" este disponibil, suportul acordat de fabricant, existen!a uneltelor de
dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea
de a fi g"sit pe pia!" (optenabilitatea), mai ales n zone n care circula!ia m"rfurilor
este destul de greoaie.
Criteriile pentru alegerea unui MC sunt, n ordinea importan!ei:
$.Posibilitatea folosirii n aplica!ia dat"
! este suficient un MC sau sunt necesare circuite suplimentare;
! liniile I/O sunt suficiente (un num"r prea mic nseamn" c" aplica!ia nu se
poate face cu acest MC, iar un num"r prea mare nseamn" un cost excesiv);
! exist" toate interfe!ele solicitate de aplica!ie: I/O serial, convertoare A/D,
D/A #i nu exist" interfe!e n plus;
! exist" capacitatea de memorare suficient": RAM, ROM;
! MC are viteza suficient" pentru aceast" aplica!ie. Se verific" timpul
necesar rul"rii programului care trebuie s" fie mai mic dect intervalul de
timp n care trebuie s" reac!ioneze MC;
154 MICROCONTROLLERE
! alimentarea MC poate fi f"cut" din aplica!ie (este posibil ca aplica!ia s" fie
portabil", atunci este nevoie de un MC care s" func!ioneze la 3V;
! pre!ul acestui MC este bun (acceptabil) pentru aplica!ia respectiv".
2. Optenabilitatea MC
! trebuie s" fie disponibil n cantit"!i suficiente;
! trebuie s" fie n produc!ia actual", dar #i n viitor pentru posibilitatea
aprovizion"rii n viitor;
! disponibilitatea unor accesorii (convertoare A/D, D/A, alimentatoare etc).
3.Disponibilitatea suportului de dezvoltare
! asambloare;
! compilatoare;
! debuggere;
! module de evaluare;
! emulatoare n circuit;
! analizoare logice;
4. Suport din partea constructorului
! documenta!ie tehnic";
! buletine de aplica!ii;
! service prin telefon (BBS);
! rapoarte despre probleme de func!ionare;
! software de utilizare;
! dac" MC este folosit #i de al!i utilizatori, atunci sunt formate grupuri de
lucru care pot oferi ajutor.
5.Seriozitatea constructorului
! dac" este demonstrat" competen!a lui ;
! stabilitate #i fiabilitatea MC realizate;
! viteza de livrare;
! num"r de ani ca #i constructor #i rezultate financiare.
Un argument pentru alegerea unui tip de MC este existen!a unui modul de
evaluare. Pentru a promova propriile MC, mul!i furnizori au creat Kit-uri de
evaluare care con!in pl"ci de evaluare #i un soft minimal cu care se poate nv"!a
utilizarea MC #i se pot pune la punct aplica!ii. Un kit con!ine de regul" un program
monitor pentru calculator PC, un program de transfer al datelor spre placa de
evaluare (prin interfa!a RS232 sau CENTRONICS), un asamblor #i un compilator
C. Toate kiturile sunt nso!ite de documenta!ie. Cteva din modulele de evaluare
sunt:
Motorola EVBU, EVB, EVM, EVS sunt echipate cu MC 68HC$$.
Dallas Semiconductor DS5000TK sunt echipate cu MC Dallas din seria
DS5000.
Philips #i CEIBO DS750 sunt echipate cu 87C75x, echivalent cu 805$.
6. Criterii de proiectare 155
American Educational Systems AES-5$(805$), AES-$$(68HC$$), AES-
88(8088) con!in o tastatur", un afi#aj cu LCD #i documenta!ie.
Firma Texas Instruments pune la dispozi!ia celor interesa!i un set de
accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS #i unelte de
dezvoltare (CDT). Aplica!ia poate fi scris" n limbajul C, de exemplu pe un PC
(utiliznd orice editor) #i codul pentru TMS va fi generat de link editor. Codul
poate ajunge la MC prin intermediul interfe!ei seriale RS232. XDS analizeaz"
softul creat, (chiar n domeniul timp) #i permite punerea la punct (chiar rularea lui
pas cu pas).
Exist" firme specializate n construirea unor module de evaluare cu diferite
MC, a#a cum este de exemplu PHYTEC (www.phytec.de).
Fiecare furnizor de MC pune la dispozi!ia clien!ilor un Kit de start (Starter
Kit), care este un instrument foarte valoros pentru a putea ncepe lucrul cu un
anumit tip de MC. Kit-ul de start con!ine o plac" cu soclu #i hard-ul aferent pentru
programarea ini!ial" a MC, uneori programarea EPROM-ului, interfa!a #i cablul de
leg"tur" la PC, documenta!ie #i programe (asamblor, link editor, debugger) dar nu
con!ine de regul" un MC. Pre!ul unui astfel de Kit porne#te de la $00USD
(www.schuricht.de , www.farnell.com ).
Un alt argument pentru alegerea unui MC este comoditatea folosirii lui.
Unele MC, a#a cum este Motorola 68HC$$A8P$ are nscris n ROM un program
monitor (numit Buffalo). Pentru punerea n func!iune este nevoie doar de o
leg"tur" serial" RS232 cu un PC (este nevoie de o conversie de nivel) #i se poate
lucra de pe PC cu monitorul MC, rulnd programele n RAM-ul MC #i stocndu-le
n EEPROM. Pe Internet exist" subprograme scrise n Buffalo. Un alt MC,
8052AH-BASIC con!ine un BASIC. MC Dallas din seria DS5000 are nevoie doar
de un cristal pentru oscilator #i este gata de lucru. MC con!ine memorie RAM
static alimentat" de la o baterie #i programul #i datele sunt astfel nevolatile.
6.2 ALGORITMUL PROIECT!RII SISTEMELOR
CU MC
Ne permitem s" prezent"m o organigram", (figura 6.$) ce ncearc" s"
sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s" le
urm"reasc" n dezvoltarea soft-ului dedicat unei aplica!ii. Trebuie s" men!ion"m c"
etapele 3,4 #i 5 pot fi iterate. Ele duc la perfec!ionarea func!ion"rii sistemului.
156 MICROCONTROLLERE
ANALIZA CERIN"ELOR PROCESULUI CONTROLAT:
NECESIT%&ILE DE CONTROL CORESPUNZ%TOARE
SEMNALELOR ANALOGICE 'I DIGITALE
ANALIZA CERINTELOR LEGATE DE COMANDA 'I
CONTROLUL NTRZIERILOR 'I FRECVEN&EI
ANALIZA STRUCTURII HARDWARE:
ATRIBUIREA RESURSELOR HARDWARE PENTRU PROCESAREA
SEMNALELOR DIGITALE SI ANALOGICE DIN PROCES
ANALIZA CERIN&ELOR LEGATE DE SINCRONIZAREA
FUNC&ION%RII UC N CADRUL PROCESULUI
ATRIBUIREA RESURSELOR SISTEMULUI DE NTRERUPERI
SEMNALELOR MAI SUS ANALIZATE
ANALIZA POSIBILELOR INTERFEREN&E DINTRE SISTEMUL
CONCEPUT 'I MEDIUL AMBIANT
START
PROIECTAREA PROGRAMELOR DE APLICA"IE :
DEFINIREA VARIABILELOR DEDICATE MEMOR%RII ST%RII
SISTEMULUI 'I CELOR CE SUNT NECESARE DESERVIRII
FLUXURILOR INFORMA&IONALE
DEFINIREA FUNC"IUNILOR CORESPUNZ!TOARE FIEC!REI
RUTINE DE SERVIRE A NTRERUPERILOR
DEFINIREA ROLULUI FIEC%REI RUTINE PRIN PRECIZAREA:
PARAMETRILOR DE INTRARE, A FUNC!IUNII PROPRIU-ZISE,
A TIMPULUI DE EXECU!IE "I A VARIABILELOR "I
SEMNALELOR REZULTATE N URMA EXECU!IEI RUTINEI
DEFINIREA ROLULUI PROGRAMULUI PRINCIPAL
PROIECTAREARUTINELOR DE SERVIRE A NTRERUPERILOR, A
RUTINELOR 'I A PROGRAMULUI PRINCIPAL
PROCESAREA FI'IERELOR REZULTATE N URMA PROIECT%RII:
ASAMBLAREA
LINK-EDITAREA
CONVERSIA OBJ INTEL-HEX
DEPANAREA PROGRAMELOR
TESTAREA SISTEMULUI
SIMULAREA FUNC&ION%RII SISTEMULUI
DEPANAREA PE SISTEMUL DE DEZVOLTARE A APLICA&IEI
Figura 6.1 Organigrama (form" simplificat") proiect"rii unui sistem
dedicat
6. Criterii de proiectare 157
6.3 PROIECTAREA SISTEMELOR CU MC N
VEDEREA SIGURAN"EI N EXPLOATARE
Tendin!a produc"torilor de MC de a sc"dea pre!urile duce la r"spndirea
din ce n ce mai mare a MC #i la crearea a noi #i noi aplica!ii. Mic#orarea
dimensiunilor duce la cre#terea frecven!ei de lucru. Cu ct frecven!a cre#te, cu att
cre#te posibilitatea interferen!elor electromagnetice (EMI) #i se pune problema
proiect"rii n vederea compatibilit"!ii electromagnetice (EMC).
Apar dou" categorii de probleme: aplica!ia poate genera perturba!ii
(conduse sau radiate) sau poate fi susceptibil" la perturba!ii (conduse sau radiate).
Descoperirea unor probleme de EMI n faza final" de produc!iei a aplica!iei poate
fi costisitoare deoarece s-ar putea s" fie necesar" reproiectarea aplica!iei; de aceea
este necesar ca proiectarea ini!ial" s" se fac" n vederea EMC.
Perturba!iile sunt generate de armonicile semnalelor digitale din circuit.
Ele pot fi radiate de buclele de cablaj care se comport" ca #i antene sau sunt
conduse spre sursa de alimentare. Orice cale inductiv" sau capacitiv" pe traseul
acestor armonici poate provoca vrfuri de tensiune sau c"deri de tensiune. Pentru
un sistem cu MC perturba!iile sunt generate de regul" de cablaj, deoarece circuitele
integrate au dimensiuni prea mici pentru a putea emite. Semnalul cu frecven!a cea
mai mare este tactul sistemului generat cu un circuit oscilant cu cuar!. Datorit"
faptului c" forma semnalului este apropiat" de forma sinusoidal", con!inutul de
armonici este mic. Dac" tactul este adus din exterior, se impune aten!ie m"rit"
pentru a reduce buclele de circuit emisive.
Pentru un sistem care are memorii externe cuplate la MC, liniile de transfer
pot fi emisive, deoarece frecven!ele de tranzi!ie sunt mari.
Susceptibilitatea sistemelor cu MC este creat" de natura sincron" a MC.
Un tact cu nivel electric insuficient poate produce o eroare. Erorile sistemelor cu
MC pot fi grupate n:
$. aplica!ia are o eroare dar se corecteaz";
2. aplica!ia are o eroare dar o ntrerupere sau un RESET corecteaz"
func!ionarea;
3. aplica!ia are o eroare #i oprind #i repornind sistemul, eroarea dispare;
4. aplica!ia are o eroare permanent" datorat" unei componente defecte.
Problemele din categoria $ #i 2 pot s" nici nu fie observate de beneficiar.
Performan!ele EMC pot fi mbun"t"!ite acordnd aten!ie deosebit"
urm"toarelor aspecte de proiectare:
desenul cablajului imprimat;
ceasul de gard"
programarea defensiv"
158 MICROCONTROLLERE
6.3.1 Cablajul imprimat
Orice perturba!ii pe liniile de alimentare pot produce o func!ionare
defectuoas" a sistemului. De aceea se recomand" utilizarea unui cablaj multistrat la
care masa #i alimentarea sunt plane interne. La aplica!iile cu pre! mic, o cale
important" de a reduce pre!ul este folosirea cablajului dublu placat sau chiar simplu
placat. La aceste tipuri de cablaj traseele de mas" #i +5V trebuie s" fie ct mai late
pentru a avea o impedan!" ct mai mic". Decuplarea cu condensatoare a MC
trebuie s" fie realizat" ct mai aproape de circuit.
n unele aplica!ii care trebuie s" fie foarte ieftine se folose#te alimentarea
MC de la re!eaua de c.a. f"r" transformator, cu un redresor monoalternan!" (figura
6.2).
n acest caz se creeaz" o linie de mic" impedan!" spre mas" prin re!eaua de
alimentare de la V
DD
. La acest tip de alimentare se recomad" decuplarea liniilor de
frecven!" nalt" spre linia de +5V.
Un circuit critic este cel de generare a tactulului. Orice impuls parazit care
apare modific" factorul de umplere de 50% al semnalului de tact #i instruc!iunea nu
se execut" corect, circuitul ie#ind din program. O astfel de situa!ie singular" poate
fi rezolvat" de ceasul de gard" care comand" un RESET, dup" care MC ruleaz" din
nou corect. Se recomand" ca toate componentele aferente gener"rii tactului s" fie
situate ct mai aproape de circuit, iar dac" este posibil toate traseele s" fie
nconjurate de un traseu lat de gard". Se recomand" o decuplare a cristalului la
linia de cea mai mic" impedan!" (de regul" masa) cu condensatori SMD. Se
recomand" s" se p"streze o distan!" mare ntre liniile de frecven!" mare #i circuitul
de tact.
Este de asemenea important" protec!ia pinilor de intrare, cum ar fi RESET
sau IRQ. Un pin n aer poate comuta dac" n vecin"tatea lui sunt linii de nalt"
MC
V
DD
V
SS
Re!ea
220V
DZ
5V
0,$
Mas" flotant"
Figura 6.2 Schema simpl" de alimentare de la re!ea
6. Criterii de proiectare 159
frecven!". Se recomand" decuplarea acestor pini cu condensatori $-$0nF ct mai
aproape de circuit.
6.3.2 Ceasul de gard#
Folosirea ceasului de gard" este foarte util" n cre#terea siguran!ei n
func!ionare. Majoritatea MC au un ceas de gard" integrat, iar dac" nu, un ceas de
gard" extern poate fi u#or realizat cu un monostabil redeclan#abil.
Redeclan#area ceasului de gard" trebuie f"cut" n programul principal, nu
n subrutine. Pentru a putea folosi corect ceasul de gard" trebuie analizat" cu
aten!ie durata normal" a programului pe ramura cea mai lung".
6.3.3 Programarea defensiv#
Prin metodele de programare defensiv" se poate mbun"t"!i mult siguran!a
n func!ionare f"r" nici un hardware suplimentar. Cteva din cele mai eficiente
metode sunt:
renc"rcarea periodic" a registrelor care comand" pinii I/O #i a celor
mai importante registre. Pinii I/O sunt leg"tura MC cu exteriorul, de
aceea ei sunt supu#i perturba!iilor. Readucerea lor la nivele corecte
mic#oreaz" probabilitatea ca o perturba!ie s" se propage n circuit.
citirea repetat" a semnalelor de intrare mic#oreaz" riscul unei citiri
gre#ite. De exemplu citirea de 3 ori la rnd a unui pin care este legat la
o tast". Dac" s-a citit aceea#i valoare de fiecare dat" se elimin"
posibilitatea unei perturba!ii.
dac" exist" loca!ii n RAM nefolosite, dup" fiecare etap" de rulare a
programului se scrie un bit n RAM. nainte de rularea unei rutine
critice se verific" valoarea stocat" n RAM #i rutina se execut" doar n
cazul n care valoarea din RAM este corect".
dac" ntr-o aplica!ie exist" memorie nefolosit", aceasta se umple cu
instruc!iuni de salt ntr-un loc cunoscut pentru ca un salt neprev"zut n
memorie datorat unei perturba!ii s" fie anulat de saltul n locul
cunoscut.
Folosirea watchdog-ului n faza de testare #i chiar n aceea de
fiabilizare a func!ion"rii sistemului. Implic", postarea (memorarea ntr-
o zon" specific") st"rilor succesive prin care trece sistemul, scrierea
unei rutine de analiz" a st"rilor #i de directare a programelor c"tre
starea ultim" postat", rutin" apelat" la fiecare "warm reset", sau chiar
160 MICROCONTROLLERE
la fiecare reset al sistemului. Pot fi implementate soft #i alte func!iuni
care s" permit" men!inerea coeren!ei sistemului!
7
APLICA!II
7." IMPLEMENTAREA UNEI APLICA!II
SIMPLE DE COMAND# $I CONTROL
DIGITAL
S! se comande utiliznd un sistem dotat cu microcontroller un piston
hidraulic (actuator) ntr-o mi"care de avans "i alta de retragere, comenzi transmise
prin intermediul unei linii de conexiune seriale. Frecven#a de transfer pe interfa#a
serial! va fi de $9200 bauds (bi#i pe secund!), iar frecven#a de ceas a sistemului va
fi de $$059000Hz. Cuvintele de comand! "i control sunt formate dintr-un singur
caracter n format ASCII "i comenzile pot con#ine "i parametrii.
L"
L2
Ev" Ev2
p
R
Figura 7." Structura actuatorului electro-hidraulic
"62 MICROCONTROLLERE
Cuvintele cheie admise de c!tre sistem pentru controlul s!u sunt:
A - comand! de avans a pistonului, respectiv comand! mi"carea de la
limitatorul $ c!tre limitatorul 2
R - comada de retragere a pistonului, respectiv comand! mi"carea de la
limitatorul 2 c!tre limitatorul $
S - comand! de citire a st!rii actuatorului care va ntoarce urm!toarele
ecouri:
$. D - preg!tit s! recep#ioneze comand! (reaDy)
2. B - ocupat cu execu#ia unei comenzi (Busy)
P comand! de aflare a pozi#iei actuatorului (Position), care va
ntoarce urm!toarele ecouri:
$. E avansat, actuatorul atinge limitatorul 2
2. I retras, actuatorul atinge limitatorul $
3. M actuator aflat n mi"care
Structura electro-hidraulic! a sistemului de comand! "i control include
elementele din figura $. "i anume:
pompa de presiune pentru circuitul hidraulic, care porne"te simultan cu
comand! dorit!; comanda pompei este realizat! de c!tre sistem n
logic! pozitiv! ($ logic = pompa ac#ionat!, 0 logic = pompa oprit!).
dou! electro-valve cu dou! c!i care asigur! accesul presiunii c!tre
camerele pistonului hidraulic comandate tot n logic! pozitiv!, ceea ce
nseamn! c! aplicnd un $ logic pe linia de comand!, nalta presiune a
pompei are acces c!tre camera corespunz!toare a pistonului, iar
aplicnd un 0 logic pe linia de comand! presiunea din camera
pistonului este eliberat! c!tre rezervorul de fluid.
dou! limitatoare de cap!t de curs! care func#ioneaz! n logic! negativ!
"i care permit detectarea st!rii actuatorului.
interfa#a serial! RS232C cu care sistemul de comand! este conectat la
sistemul ierarhic superior, spre exemplu la un PC.
7. Aplica#ii "63
7."." Varianta de implementare cu microcontroller CISC
Proiectarea elementelor electronice ale sistemului o vom face utiliznd
circuitul AT89C205$, care este dotat cu 2 Ko memorie EEPROM (Flash) care
permite stocarea programelor de comand! "i control. Sunt necesare att
amplificatoarele n comuta#ie pentru comanda electrovalvelor "i a pompei de
presiune ct "i circuitele de intrare ce se prezint! sub forma unor trigger-e Schmidt,
pentru formarea semnalelor de la limitatoarele $ "i 2. Structura gndit! este
prezentat! n figura 7.2.
Implementarea software a sistemului implic! scrierea programelor care s!
permit! execu#ia func#iunilor sistemului propus. Ca sistem determinist, acesta
trebuie s! aibe o stare ini#ial! bine definit!, de aceea vom considera c! aceasta
corespunde pozi#iei cu pistonul retras aflat pe limitatorul L$, dar pe lng! aceste
elemente ce #in de procesul n care sistemul este utilizat, va trebui s! analiz!m "i s!
set!m parametrii ini#iali ai microcontroller-ului. Pentru aceasta, vom urm!ri starea
ini#ial! a UC, prezentat! n catalogul produsului (vezi figura 7.3), iar apoi va trebui
ca s! scriem rutina de ini#ializare de sistem pentru a preciza complet starea
microcontroller-ului.
Organizarea programelor care determin! func#iunile sistemului ilustreaz!
principiile program!rii structurate, astfel: programul de ini#ializare este apelat din
programul principal, func#iunile sistemului, cea de comunica#ie serial!, cele de
comand! avans "i retragere piston, cele de specificare a st!rii sistemului "i cele de
oprire pe limitatoare a acestuia sunt specificate prin rutine de servire a
ntreruperilor (ISR Interrupt Service Routines).
A
T
8
9
C
2
0
5
"
Tx
Rx
Ev
Ev
p
L"
L2
P3.
P3.
P3.
P3.
P3.
P3.
P3.
Figura 7. 2 Schema conect!rii microcontrolerului la aplica#ie
"64 MICROCONTROLLERE
". Rutina de ini%ializare, INIT, va realiza urmatoarele:
Umple toate loca#iile memoriei interne a microcontroller-ului cu 0.
(Fill Memory with zero)
Aduce n pozitia de referin#! (pistonul atinge limitatorul L$) sistemul.
Programeaz! urm!toarele registre de func#ii speciale (SFR Special
Functions Registers)
! PSW (Program Status Word Register)
! PCON (Power On Control Regsiter)
! TMOD (Timers Mode Register)
! TCON (Timers Control Register)
! SCON (Serial Control Register)
! IE (Interuppt Enable Register)
Intr! n bucla de a"teptare a comenzilor de la sistemul ierarhic
superior, comenzi ce vor fi transmise via interfa#a serial!.
2. Rutinele de serive a ntreruperilor vor fi concepute pentru a
implementa func%iunile ce necesit& sincronizarea func%ion&rii sistemului
cu elementele externe acestuia ce sunt fie comandate fie reprezint! senzori
sau traductoare ale sale. Astfel, va trebui s! satisfacem urm!toarele:
! Func#ia de recep#ie a mesajelor de comand! sau a cererilor de date de
stare din partea sistemului ierarhic superior. Implementarea acesteia se
refer! la interfa#a serial! a sistemului "i necesit! analiza mesajului
receptionat, comanda corespunz!toare a sistemului sau emiterea
ecoului la comenzile Cerere de Stare (Status Request) din partea
sistemului ierarhic superior.
Figura 7. 3 Valorile de RESET ale microcontroller-ului AT89C205$
Numele SFR Valori de RESET
PC 00H
ACC 00H
B 00H
PSW 00H
SP 07H
DPTR 00H
P0-P3 FFH
IP xx000000B
IE 0xx00000B
TMOD 00H
SCON 00H
SBUF Nedeterminat
PCON 0xxx0000B
7. Aplica#ii "65
! Func#ia de oprire la atingerea limitatoarelor a comenzii actuatorului
electrico-hidraulic.
3. Programul principal, este gndit s& a'tepte o comad! din partea
sistemului ierarhic superior sau s! a"tepte ndeplinirea acesteia.
OBSERVATIE: Aceast! organizare a programelor poate fi utilizat! mai ales
atunci cnd sistemul controlat nu este unul extrem de rapid, respectiv noi, prin
intermediul microcontroller-ului putem ndeplini restric#iile impuse unui sistem de
comand! n timp real, adic! putem oferi semnalele de comand! "i cele de control
ca oportune, respectiv ele verific! teorema e"antion!rii a lui Shannon.
n ceea ce nsemn! implementarea, putem alege ntre dou! variante:
a) Cea mai sus men#ionat! care permite ca scrierea func#iunilor de comand! s! fie
facut! direct n cadrul ISR
b) Cea prin care rutinele de servire a ntreruperilor ISR consemneaz! modific!rile
de stare n cadrul sistemului n zona dedicat! variabilelor de stare, iar
programul principal analizeaz! ciclic starea sistemului, "i func#ie de aceasta
execut! comenzile corespunz!toare ei.
Prima variant!, reflect! principiile program!rii structurate, fiecare ISR
asigur! implementarea unei func#iuni. Aceast! variant! permite cea mai rapid!
reac#ie din partea sistemului, permite ierarhizarea reac#iilor n raport cu cerin#ele
impuse de e"alonarea n timp a acestora, dar necesit! o ra#ional! atribuire a liniilor
de ntrerupere corespunz!tor evenimentelor principale din sistem "i este aplicabil!
n special n cadrul unor sisteme de mic! amploare.
A doua variant! asigur! analiza st!rii sistemului n cadrul programului
principal, analiza fiind implementat! prin intermediul unor instruc#iuni de decizie,
majoritatea calate pe bit, transferul informa#iilor se face prin utilizarea unei zone
comune de memorie ce formeaz! leg!tura dintre lumea extern! (elementele aflate
n afara sistemului sau cele comandate: actuator, pomp!, electrovalve, limitatoare,
etc) "i func#iunile pe care sistemul este obligat s! le implementeze. Aceasta
variant! permite controlul unor sisteme ample cu multe surse de ntrerupere "i
multe elemente de comand! "i control- dar viteza de reac#ie este variabil! neputnd
fi anticipat! aprioric, c!ci evenimentele ce au loc n afara sistemului vor fi
consemnate sincron (adic! foarte curnd dup! producerea lor), dar analiza "i reac#ia
sistemului la acestea va apare mai trziu, func#ie de instruc#iunea curent! pe care
sistemul o execut! la momentul producerii evenimentului respectiv.
S! analiz!m pe rnd care vor fi informa#iile pe care va trebui s! le scriem
n cadrul SFR pentru a ini#ializa sistemul.
PSW
CY AC F0 RS" RS0 OV F" P
MSB LSB
"66 MICROCONTROLLERE
CY carry flag este setat atunci cnd n urma unei instruc#iuni aritmetico-logice
apare o opera#ie de transport sau mprumut
AC Auxiliary Flag utilizat tot n cadrul unor instruc#iuni aritmetico-logice
F0 User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific
RS$ "i RS0 codific! natura (binar) bancul #int! de registre generale astfel:
00 specific! bancul 0 de registre generale
0$ specifica bancul $ de registre generale
$0 specifica bancul 2 de registre generale
$$ specifica bancul 3 de registre generale
OV este setat auotmat la apari#ia unei dep!"iri n cadrul unei opera#ii de transfer a
datelor
F$ User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific
P Parity Flag specific! paritatea byte-ului de informa#ie prelucrat
PCON
SMOD - - - GF" GF0 PD IDL
SMOD (Serial Mode) setat (dac! este fixat pe $ logic) multiplic! cu 2 frecven#a de
emisie/recep#ie serial! a datelor
GF" (General Flag 1), este un bit ce poate fi scris sau citit de c!tre utilizator prin
program
GF0 (General Flag 0), este un bit ce poate fi scris sau citit de c!tre utilizator prin
program
PD (Power Down Flag) Setarea acestui bit trece microcontroller-ul n starea de
putere redus! blocnd func#ionarea oscilatorului intern "i aducnd n starea high
FFH ie"irile porturilor sale. Informa#iile stocate n memoria intern! a procesorului,
abstrac#ie f!cnd cele din registrele speciale (SFR) sunt men#inute, chiar cnd
tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul n curs
va fi oprit imediat dup! efectuarea instruc#iunii curente n care a ap!rut setarea
acestui flag. Acest flag are preceden#! n raport cu flag-ul IDL (Idle) atunci cnd
cele dou! flag-uri sunt setate simultan.
Ie"irea din starea PD se face prin aplicarea unui semnal de Reset.
IDL (IDLE Flag) Setarea acestui flag duce la trecerea ntr-o stare de consum redus
a microcontroller-ului, stare n care frecven#a de ceas a sistemului este aplicat!
doar elementelor periferice, controller-ul de ntreruperi, interfa#a serial!, timer-ele
etc. Porturile r!mn n starea anterioar! set!rii bitului IDL, iar semnalele ALE "i
PSEN# trec n $ logic. Revenirea n stare de lucru se poate realiza pe dou! c!i:
Prin generarea extern! a unei ntreruperi, aceasta va reseta flag-ul IDL iar la
terminarea ei, prin program, dup! instruc#iunea RETI putem seta din nou acest
flag, sau printr-un Reset hardware, caz n care durata minim! a impulsului de Reset
trebuie s! dep!"easc! 24 de ciclii de ceas.
Aceste dou! st!ri Power Down "i Idle Mode sunt st!ri n care consumul
microcontroller-ului este redus "i pot fi exploatate atunci cnd aplica#ia pe care
vrem s! o realizam corespunde unui aparat portabil care trebuie s! protejeze la
maximum resursele energetice.
7. Aplica#ii "67
TMOD
GATE C/T# M" M0 GATE C/T# M" M0
Timer " Timer0
Registrul TMOD nu poate fi accesat dect pe byte, deci scrierea unei informa#ii n
acest registru poate fi f!cut! prin instructiuni de tipul:
MOV TCON,#nnH sau
MOV @R0,#nnH unde R0=#TCON. Aten#ie, aceast! instructiune poate scrie
n memoria intern! extins!, dac! microcontroller-ul prezint! o astfel de memorie
(vezi PCB80C552 "i alte analoge lui).
Modurile de func#ionare ale canalelor temporizatoare/num!r!toare sunt n num!r
de 4 "i sunt codate natural prin simpla scriere a num!rului binar corespunz!tor
canalului n bi#ii 0 "i $ pentru Timer0 sau 4 "i 5 pentru Timer$. Iat! care sunt
aceste moduri:
Modul 0, permite temporizarea
$
sau num!rarea impulsurilor
2
aplicate la intrarea
canalului respectiv dispunnd de: un divizor cu 2
5
=32 (prescale) "i apoi divizarea
programat! cu o constant! de timp ce poate fi format! din orice num!r
reprezentabil pe 8 bi#i, deci cuprins ntre 0 "i 255, 0 corespunde unei diviz!ri cu
256. Num!ratoarele canalului temporizator num!ra n sens direct, adic! fiecare
front negativ al unui impuls aplicat la intrare determin! incrementarea
num!r!torului. L!#imea minim! a unui impuls este de $/24 din frecven#a de ceas a
sistemului. Structura canalului temporizator num!r!tor este dat! n figura 4.
Modul ", asigur! temporizarea sau num!rarea impulsurilor aplicate pe intrarea
canalului, constanta de timp fiind un num!r cuprins ntre 0 "i 65535 cu 0
corespunz!tor lui 65536.
Modul 2, permite divizarea frecven#ei de intrare sau num!rarea impulsurilor
aplicate cu un num!r reprezentabil pe 8 biti, aceasta constant! este re#inuta n TH
x
"i este renc!rcat! automat n TL
x
atunci cnd canalul num!r!tor efectueaz!
tranzi#ia de stare din $$$$$$$$B n 00000000B.
Modul 3, este diferit la canalul 0 n raport cu canalul $. Pentru canalul 0 setarea
acestui mod permite mp!r#irea celor dou! num!r!toare TL0 "i TH0 ntre pinii de
comand! ai canalelor 0 "i $. Temporizatoarele/num!r!toarele canalului 0 low pot fi
comandate de c!tre pinii corespunzatori canalului 0 (TL0), "i
temporizatoarele/num!r!toarele canalului 0 high de c!tre pinii corespunz!tori ai
canalului $ (TH0). Dac! program!m canalul $ n modul 3 aceasta duce la blocarea
acestuia "i re#inerea informa#iilor de la momentul respectiv. Utilizarea canalului 0

$
Prin temporizare se n#elege m!surarea unui interval de timp ca multiplu al frecven#ei de
ceas a sistemului (microcontroller-ului). In acest caz impulsurile num!rate de canalul
respectiv provin de la ceasul de sistem, care n cazul circuitului AT89C205$ este divizat cu
$2 "i aplicat pe intrarea de num!rare.
2
Num!rarea impulsurilor ce sunt aplicate pe o intrare accesibil! din exterior (vezi pinii T0
sau T$). Aceste impulsuri pot proveni de la o surs! extern! de semnal.
"68 MICROCONTROLLERE
n modul 3 va permite multiplicarea canalelor temporizatoare/num!r!toare cu un
canal de temporizare/ num!r!toare de 8 bi#i
TCON
TF" TR" TF0 TR0 IE" IT" IE0 IT0
Registrul TCON (Timer Control) permite modificarea set!rilor bit cu bit,
semnifica#ia acestora o detaliem n continuare:
TF
x
, exprim! starea canalului temporizator corespunz!tor. Setarea se realizeaz!
hardware, automat la trecerea de la starea $$$$B la starea 00..00B a
num!r!toarelor canalului respectiv (overflow).
Bi#ii TR
x
seta#i/reseta#i permit sau respectiv inhib! soft poarta de control ce asigur!
accesarea num!r!toarelor de c!tre semnalul de intrare al canalului respectiv.
Bi#ii IE
x
se seteaz! automat (hardware) atunci cnd un front descresc!tor apare pe
linia de ntreruperi externe corespunz!toare "i sunt reseta#i tot automat la servirea
ntreruperii. (la intrarea n ISR).
Bi#ii IT
x
seta#i/reseta#i stabilesc dac! intr!rile corespunz!toare ntreruperilor
externe de stare vor fi sensibile pe frontul descresc!tor al semnalului, respectiv pe
nivelul logic zero. n cazul n care bi#ii respectivi (IT
x
) sunt reseta#i, dac! semnalul
extern aplicat pe intr!rile INT
x
este de durat! mai mare dect durata ISR
corespunz!toare, la sfr"itul ISR se va genera o nou! ntrerupere corespunz!toare
respectivului canal.
Figura 7. 4 Structura canalului temporizator al microcontrolerului AT89C205$
7. Aplica#ii "69
SCON
SM0 SM" SM2 REN TB8 RB8 TI RI
SM0 'i SM" seteaz! unul dintre cele patru moduri distincte n care interfa#a UART
a microcontroller-ului poate func#iona. Detalierea acestor moduri este realizat! n
continuare:
Modul 0, corespunz!tor combina#iei 00 a bi#ilor respectivi, permite serializarea
octe#ilor ce sunt transmi"i "i receptiona#i semi-duplex pe linia RxD. Linia TxD este
utilizat! pentru transferul semnalului de ceas serial, n acest caz $/$2 din frecven#a
de ceas a microcontroller-ului.
Modul ", corespunz!tor combina#iei $0 a bi#ilor respectivi, asigur! transferul full-
duplex asincron al informa#iilor, respectiv $ bit de start (0), 8 bi#i de date "i n final
un bit de stop ($). Frecven#a de transmisie este variabil!, ea fiind setat! de c!tre
canalul $ temporizator corespunz!tor frecven#ei de apari#ie a st!rii overflow.
Modul 2, corespunz!tor combina#iei 0$ a bi#ilor respectivi, asigur! transferul
asincron al informa#iilor cu $ bit de start (0), 8 bi#i de date, un bit programabil, care
poate fi chiar bitul de paritate "i un bit de stop ($). La transmisie bitul 9 este re#inut
n loca#ia TB8, iar la recep#ie acesta este memorat n RB8. Rata de transfer este
programabil! la $/32 sau $/64 din frecven#a de ceas a sistemului.
Modul 3, corespunz!tor combina#iei $$ a bi#ilor respectivi, asigur! transferul
asincron al informaiilor ntr-un format analog celui din modul 2 cu excep#ia
faptului c! rata de transfer este variabil! "i setat! de c!tre frecven#a programat!
pentru canalul $ al circuitului temporizator intern al microcontroller-ului.
Bitul SM2 permite validarea unui mod special de comunica#ie via interfa#a serial!
USART "i anume a modului prin care pe acela"i bus pot fi prezente mai multe
sisteme care pot recepta informa#ia. n acest caz, al 9-lea bit poate fi utilizat ca bit
de specificare a tipului de informa#ii ce sunt transmise. Astfel, setnd bitul SM2,
poate fi generat! o ntrerupere atunci cnd "i bitul al 9-lea transmis este $ (spre
exemplu), ceea ce va determina analiza de c!tre sistemul receptor a informa#iilor "i
rejectarea acestora atunci cnd cuvntul de adresare respectiv nu corespunde
propriei adrese.
Bitul REN permite validarea ntreruperilor la recep#ie atunci cnd este setat, ceea
ce face ca la recep#ia bitului de stop, corespunz!tor formatului de transmisie
specificat, s! se genereze o ntrerupere "i totodat! s! se seteze bitul RI.
Bitul TI este setat harware la ncheirea transferului unei informa#ii via interfa#a
serial!, caz n care dac! ntreruperile corespunz!toare acesteia au fost validate are
loc transferul programului c!tre ISR corespunzatoare. Resetarea acestui bit cade n
responsabilitatea programatorului, acesta trebuind s-o efectueze n cadrul ISR.
Bitul RI semnaleaz! recep#ia complet! a unit!#ii de informa#ie, via interfa#a
UART. La recep#ia bitului de stop, flag-ul RI este automat (hardware) setat.
Programatorul are obliga#ia ca n ISR corespunz!toare recep#iei datelor s! "tearg!
bitul RI, pentru a reancla"a mecanismul de semnalizare a recep#iei datelor pe
UART.
"70 MICROCONTROLLERE
IE
EA - - SI TF" IE" TF0 IE0
Acest registru specific! sursele de ntreruperi admise de microcontroller care vor
putea genera ntreruperi. Astfel:
IE0 corespunde liniei ntreruperii externe de stare INT0
TF0 corespunde st!rii timer 0 overflow
IE$ corespunde liniei ntreruperii externe de stare INT$
TF$ corespunde st!rii timer $ overflow
SI corespunde ntreruperilor ce provin de la unitatea UART integrat! pe
microcontroller.
Registrul IE permite validarea individual! a acestora, dar pentru ca o ntrerupere s!
se declan"eze este necesar ca bitul EA s! fie obligatoriu setat. Priorit!#ile n
servirea ntreruperilor sunt stabilite de c!tre programator, fiind permise dou! nivele
de prioritizare a ntreruperilor: unul superior (high) setat prin nscrierea unui $
logic n dreptul sursei de ntrerupere respective (vezi structura pe surse de
ntreruperi a registrului IP - Interuppt Priority Register, este analog! celei a
registrului IE), "i restul inferior (low). Sursa de prioritate nalt! va fi capabil! s!
ntrerup! o rutin! de servire ISR corespunz!toare unei surse de nivel de prioritate
low, dar nu "i invers.
Dac! simultan apar mai multe ntreruperi avnd acela"i nivel de prioritate (low),
ordinea de analiz! a cererilor se face de la IE0 c!tre SI.
Odat! ncheiat! analiza structurii SFR s! specific!m informa#iile adecvate
aplica#iei noastre. Iat!-le:
In PSW vom scrie: 00000000B.
In PCON vom scrie: "0000000B set!m SMOD pentru multiplicarea cu doi a
frecven#ei de emisie pe interfa#a serial!.
In TMOD vom scrie: 00$00000B, respectiv vom programa n modul 2
temporizatorul $ cu autorenc!rcarea constantei de timp, iar canalul 0 l vom
men#ine n modul 0.
Constanta de timp o vom calcula dup! ce vom seta "i parametrii interfe#ei UART,
respectiv vom transmite 8 bi#i/caracter, la $9200 bauds, cu un bit de start "i unul de
stop. n consecin#! n SCON vom scrie:
SCON : 0"0"0000B, adic! vom alege modul $ de func#ionare "i vom valida
recep#ia caracterelor pe interfa#a serial!.
n acest caz, calculul constantei de timp se va face utiliznd formula:
Baud Rate=2
SMOD
/32*f
CLK
/($2*(256-TH
$
)). Rezult!, nlocuind n formul! valoarea
de 253, respectiv FDH, respectiv """"""0"B ce va trebui nc!rcat! n TH$ drept
constanta de timp.
n registrul IE vom scrie informa#ia: "00"0000B corespunz!toare st!rii ini#iale a
sistemului cnd acesta va trebui doar s! accepte recep#ia comenzilor de la sistemul
ierarhic superior.
7. Aplica#ii "7"
Iat! rutina de ini#ializare a sistemului:
INIT:
MOV R0,#7FH
;ncarc! n registrul R0 limita superioar! a memoriei interne
LOOP0: MOV @R0,#0H
;Scrie ndirect 0 n loca#ia adresat! prin pointer-ul R0
DJNZ R0,LOOP0
;Efectueaz! umplerea cu zero a memoriei interne a controller-ului
LOOP$:
JNB P3.2,START_POSITION
;Testare stare piston, Dac! atinge limitatorul L$, sistemul este n pozi#ia de
;referin#!
SETB P3.6
SETB P3.5
CLR P3.7
;Comand! Electrovalva $ "i pompa, "i anuleaz! comanda pentru Electrovalva 2
JMP LOOP$
START_POSITION:
SETB STATUS0
MOV PSW,#00H
MOV PCON,#80H
MOV TMOD,#20H
MOV TH$,0FDH
SETB TR$
MOV SCON,#50H
MOV IE,#90H
;Setarea st!rii ini#iale a microcontroller-ului implic! validarea doar a ntreruperilor
;UART
RET
Rutina de servire a ntreruperilor corespunz!toare UART va trebui s!
realizeze urm!toarele:
$. S! citeasc! informa#ia recep#ionat! de pe linia serial!.
2. S! analizeze informa#ia, "i func#ie de aceasta s! reac#ioneze astfel:
Dac! este vorba de o comand! s! ini#ieze execu#ia acesteia.
Dac! este vorba de o cerere de stare a microcontroller-ului din partea
sistemului ierarhic superior s! ini#ieze transferul acesteia.
Pentru a rezolva aceast! func#iune va trebui s! introducem o variabil!
local! de stare STATUS, avnd structura prezentat! mai jos, actualizat! de fiecare
dat! cnd are loc o schimbare a st!rii de c!tre rutinele de servire a ntreruperilor ce
asigur! sincronizarea func#ion!rii unit!#ii centrale.
"72 MICROCONTROLLERE
STATUS
- - - - - CDA L2 L"
Bitul L$ este setat la atingerea limitatorului L$, n rest este resetat
Bitul L2 este setat la atingerea limitatorului L2, n rest este resetat
Bitul CDA este setat la ini#ierea unei comenzi de avans sau retragere "i
resetat n rest, la sfr"itul mi"c!rii.
Rutina de servire a ntreruperilor din partea UART (ISR_SI) asigur!
tratarea fiec!rui cuvnt de comand! dintre cele admise de protocolul instituit.
Loca#iile STATUS asigur! memorarea st!rii sistemului. n acest sens,
asamblorul permite rezervarea de spa#iu de memorie n zona de adrese 20H la 2FH,
respectiv bi#ii de la 00H la 7FH.
;Variabile de stare ale actuatorului electo-hidraulic.
STATUS0 BIT 20H
STATUS$ BIT 2$H
STATUS2 BIT 22H
;Rutina de servire a ntreruperilor generate de UART
;Aten#ie UART genereaz! o unic! ntrerupere att la recep#ie ct "i la transmisie
ISR_SI:
JB RI,RECEPTIE
TRANSMISIE:
CLR TI
;%terge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru
;reanclan"area ntreruperilor la transferul unui nou caracter
JB RI,RECEPTIE ;Retestare recep#ie caracter de c!tre UART
RETI
RECEPTIE:
MOV A,SBUF ;Cite"te caracterul recep#ionat n registrul ACC
CJNE A,#'A',ISR_SI_$
CDA_AVANS:
SETB P3.7 ;Comand! Electrovalva$
CLR P3.6 ;Blocheaz! Electrovalva2
SETB P3.5 ;Comand! pompa de presiune
;Comand! mi"carea de avans a actuatorului ac#ionnd Electrovalva$ "i pompa.
CLR STATUS0
;Reseteaz! starea consemnat! anterior, respectiv actuator retras
SETB STATUS2 ;Consemneaz! comanda actuatorului
SETB IE.$
;Valideaz! "i ntreruperile corespunz!toare limitatorului 2
JMP END_ISR_SI
ISR_SI_$:
CJNE A,#'R',ISR_SI_2
SETB P3.6 ;Comand! Electrovalva2
CLR P3.7 ;Blocheaz! Electrovalva$
7. Aplica#ii "73
SETB P3.5 ;Comand! pompa de presiune
;Comand! mi"carea de retragere a actuatorului ac#ionnd Electrovalva 2 "i pompa.
CRL STATUS$
; Reseteaz! starea consemnat! anterior, respectiv actuator avansat
SETB STATUS2 ;Consemneaz! comand! actuatorului
SETB IE.0
;Valideaz! "i ntreruperile corespunz!toare limitatorului $
JMP END_ISR_SI
;Testare cereri de stare din partea sistemului ierarhic superior
;Ecoul la acestea const! ntr-un caracter ce define"te starea curent! a sistemului
ISR_SI_2:
CJNE A,#'S',ISR_SI_3
JB STATUS2,ISR_SI_4
MOV SBUF,#'D'
;Transmite ecoul corespunz!tor st!rii reaDy - preg!tit
JMP END_ISR_SI
ISR_SI_3:
CJNE A,#'P',END_ISR_SI
;n cazul n care codul nu corespunde protocolului stabillit, - cuvntul recep#ionat
;nu este unul dintre cuvintele cheie- el va fi ignorat
JB STATUS0,LIM$
JB STATUS$,LIM2
MOV SBUF,#'M'
;Transmite ecoul actuator n mi"care (pozi#ie intermediar!)
JMP END_ISR_SI
LIM$:
MOV SBUF,#'I' ;Transmite ecoul actuator retras
JMP END_ISR_SI
LIM2:
MOV SBUF,#'E' ;Transmite ecoul actuator avansat
END_ISR_SI:
CLR RI ;Reseteaza flag-ul recep#ie caracter
RETI
ISR_SI_4:
MOV SBUF,#'B'
JMP END_ISR_SI
Vom descrie n continuare rutinele de servire a ntreruperilor ce asigur!
oprirea comenzilor de avans "i retragere a actuatorului electro-hidraulic.
Corespunz!tor fiec!rei linii de ntreruperi externe vom scrie cte o rutin!
(ISR_EXT0 "i respectiv ISR_EXT$)
ISR_EXT0:
CLR IE.0
;Sterge flag-ul de validare a ntreruperilor corespunz!tor sursei
"74 MICROCONTROLLERE
CLR P3.6 ;%terge comada corespunz!toare lui Ev2
CLR P3.5 ;%terge comanda corespunz!toare pompei
CLR STATUS2
;%terge bitul ce consemneaz! mi"carea actuatorului
SETB STATUS0
;%eteaz! bitul ce specific! starea "actuator retras"
RETI
ISR_EXT$:
CLR IE.2
;%terge flag-ul de validare a ntreruperilor corespunz!tor sursei
CLR P3.7 ;%terge comada corespunz!toare lui Ev$
CLR P3.5 ;%terge comand! corespunz!toare pompei
CLR STATUS2
;%terge bitul ce consemneaz! mi"carea actuatorului
SETB STATUS$
;Seteaz! bitul ce specific! starea "actuator avansat"
RETI
Programul principal al sistemului va include doar o rutin! de a"teptare a
unui eveniment. Iat!-l:
ORG 0H
JMP MAIN
JMP ISR_EXT0 ;Saltul la rutina de ntreruperi corespunz!toare lui L$
ORG $3H
JMP ISR_EXT$ ;Saltul la rutina de ntreruperi corespunz!toare lui L2
ORG 23H
JMP ISR_SI ;Saltul la rutina de ntreruperi corespunz!toare UART
ORG $00H
$INCLUDE INIT
$INCLUDE SERIAL
$INCLUDE EXT$&2
;Dispozi#ii de inserare a programelor anterioare n cadrul programului principal
MAIN:
CALL INIT
;Construim tabela cu salturile la rutinele de servire a ntreruperilor sau la
programul principal
JMP $ ;Instruc#iunea asigur! saltul permanent la ea ns!"i
Urmare a scrierii programului, memoria de program a sistemului dup!
parcurgerea etapelor de asamblare, link-editare "i conversie OBJ->HEX (IntelHEX
code), va cuprinde n ordine, ncepnd de la adresa 0 instruc#iunea de salt la
programul principal, instruc#iunile de salt c!tre rutinele de servire a ntreruperilor "i
rutinele de servire a ntreruperilor "i programul principal n ordinea specificat! prin
dispozi#iile INCLUDE. Odat! nscris n memoria flash a procesorului, sistemul este
gata s! satisfac! func#iunile specificate n raport cu protocolul stabilit.
7. Aplica#ii "75
7.".2 Varianta de implementare cu microcontroller RISC.
Implementarea aceleia"i aplica#ii utiliznd procesorul PIC$6F84 presupune
urm!toarele:
$. Implementarea interfe#ei cu aplica#ia, respectiv comanda celor dou!
electrovalve "i a pompei de presiune
2. Implementarea controlului cursei pistonului, adic! achizi#ia semnalelor
digitale de la cele dou! limitatoare
3. Implementarea interfe#ei seriale ce asigur! conexiunea c!tre nivelul
ierarhic superior, pentru aplica#ia noastr!.
Vom analiza pe scurt care sunt principalele elemente caracteristice ale
procesorului ales. Structura acestuia este prezentat! n figura 7.5.
Dispune de $3 linii utilizabile ca linii de intrare/ie"ire cu capabilitate
ridicat! n curent (pn! la 20 mA, fiecare). Arhitectura procesorului este Harvard,
cu l!#imea magistralei de date de 8 bi#i "i a celei corespunz!toare memoriei de
program de $4 bi#i. Dispune de $Ko memorie de program (flash sau EPROM), de
Figura 7. 5 Structura microcontroler-ului PIC$6F86
"76 MICROCONTROLLERE
Figura 7. 7 Structura cuvntului instruc#iune
IND ADR IND ADR
TMR0 OPTION
PCL PLC
STATUS STATUS
FSR FSR
PORT A TRIS A
PORT B TRIS B
EEDATA EECON$
EEADR EECON2
PCLATCH PCLATCH
INTCON INTCON
68 x 8 GPR Mapped
Figura 7. 6 Registrele microcontroler-ului
PIC$6F84
2x$28 bytes memorie SRAM
organizat! n dou! zone, zona SFR
(Special Function Regsiter) "i zona
GPR (General Purpose Register) "i
de 64 bytes memorie EEPROM ce
poate fi nscris! "i stears! prin
program. Dispune de un canal
temporizator/num!r!tor ce poate
ndeplini func#ia de Watch Dog de 8
bi#i cu un prescaler de 5 bi#i.
Controller-ul de ntreruperi intern
admite 4 surse de ntreruperi: una
extern! (RB0/INT, una de la canalul
TMR0 (timer overflow), una de la
portul B comun! pentru 4 dintre
liniile portului care genereaz! o
ntrerupere la schimbarea nivelului
logic de semnal pe ele "i o
ntrerupere intern! generat! la
scrierea datelor n EEPROM. Stiva
microcontroller-ului este mai
deosebit!, respectiv este
implementat! ntr-o zon! special!
a memoriei interne "i are
maximum 8 nivele nefiind permis!
citirea sau nscrierea acesteia prin
adresare direct!. Procesorul nu
dispune de instruc#iuni PUSH sau
POP "i astfel doar prin instruc#iuni
de tipul CALL, GOTO, RETURN,
RETFIE "i RETLW putem
introduce, respectiv extrage
informa#ii la nivelul stivei. O
observa#ie important! de care va
trebui s! #inem cont, este aceea c!
nu este prev!zut nici un indicator
de dep!"ire a dimensiunii stivei,
ceea ce poate duce la grave erori
atunci cnd num!rul de apeluri
sau de instruc#iuni GOTO este
mai mare de 8.
Instruc#iunile procesorului
au o l!#ime de $4 bi#i "i ele
includ att codul respectiv ct "i operanzii aferen#i acestuia, respectiv adresa
7. Aplica#ii "77
registrului din zona file Register "i/sau indexul bitului corespunz!tor loca#iei
respective.
Instruc#iunile de salt, cum ar fi, CALL "i GOTO sunt singurele care
dureaz! mai mult de un ciclu instruc#iune "i care necesit! modificarea con#inutului
PC-ului.
Setul de instruc#iuni al procesorului este ortogonal, ceea ce presupune c!
modalitatea de acces la orice loca#ie de memorie este identic! att la scriere ct "i
la citire, att pentru zona GPR ct "i pentru zona SFR.
n cazul opera#iilor calate pe bit, instruc#iunile vor citi nti tot registrul,
vor opera pe bitul selectat ( specificat ) "i vor ntoarce napoi rezultatul n registrul
specificat.
Uniformitatea n tratare att la nivel de bit ct "i la nivel de octet, precum
"i a registrelor de uz general "i special "i a porturilor permite reducerea
semnificativ! a opera#iilor de transfer intermediar care sunt specifice procesoarelor
CISC.
Este de men#ionat c! Work Register (W Register), func#ioneaz! ca
acumulator "i particip! la majoritatea instruc#iunilor att cele de transfer direct ct
"i la cele de transfer indirect via un registru de adresare INDR -, adic! un registru
ce memoreaz! adresa surs! sau destina#ie a informa#iilor.
Iat! cteva instruc#iuni pe care n cadrul programului le vom utiliza.
Prezentarea lor o facem pentru c! ele prezint! tr!s!turi specifice n raport cu cele
de la microcontroller-ul Atmel.
Aceste instruc#iuni le vom putea clasifica a"a n :
Instruc%iuni de transfer, aritmetico-logice 'i de redirectare a
programului, cum ar fi:
Pot con#ine drept parametri pn! la trei valori "i anume:
Prin k (8 bi#i) specific!m o valoare imediat! ce este inclus! n corpul
instruc#iunii
Prin f (8 bi#i) specific!m adresa din zona de memorie File Register la
care face referire instruc#iunea.
Prin b specific!m bitul la care face referire instruc#iunea (valoare pe 3
bi#i)
Falg-ul d specific! registrul destina#ie n care se stocheaz! rezultatul
opera#iei sau al transferului, dac! acesta este 0, atunci rezultatul este
re#inut n regsitrul W, altfel el este re#inut n registrul f din File
Register.
MOVF f,d Transfer data ntre W "i registrul f cu indicarea registrului de
memorare a rezultatului.
MOVWF f Transfer data din W n registrul f
MOVLW k Transfer valoare imediat! k (specificat! n cadrul instruc#iunii) n
registrul W.
SWAPF f,d Comutare semi-bytes n cadrul registrului f cu re#inerea
rezultatului n W sau f func#ie de d.
ANDWF f,d SI-LOGIC, ntre informa#iile din W "i f, bitul d are acela"i rol,
"78 MICROCONTROLLERE
ANDLW k SI-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W.
Rezultatul este re#inut n W.
ADDWF f,d Adunarea informa#iilor din W "i f, bitul d specific! destina#ia
rezultatului.
ADDLW k Adunarea ntre valoarea specificat! k "i valoarea stocat! n W.
Rezultatul este stocat n registrul W.
SUBWF f,d Sc!derea informa#iile din W "i f cu acela"i rol pentru flag-ul d
SUBLW k SI-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W.
Rezultatul este stocat n registrul W.
IORWF f,d SAU-LOGIC, ntre informa#iile din W "i f, bitul d are acela"i rol,
IORLW k SAU-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W.
Rezultatul este re#inut n W.
XORWF f,d SAU-EXCLULSIV, ntre informa#iile din W "i f, bitul d are
acela"i rol,
XORLW k SAU-EXCLUSIV, ntre valoarea specificat! k "i valoarea stocat!
n W. Rezultatul este re#inut n W.
CALL k Apel rutin! k ($$/$3 bi#i specifica#i prin instruc#iune)
GOTO k Salt la adresa k ($$/$3 bi#i specifica#i prin instruc#iune)
RETURN Revenire din subrutin!
RETFIE Revenire din subrutina de tratare a ntreruperilor
RETLW k Revenire din subrutin! cu nc!rcarea unei valori literale n W.
Instruc#iunilede setare/resetare bytes sau bi#i, cele de rotire pot fi ncadrate
n categoria curent!, unele dintre acestea le vom detalia, avnd n vedere
particularit!#ile pe care ele le prezint!. Spre exemplu, instruc#iunea :
RRF f,d nu face altceva dect s! deplaseze c!tre dreapta cu o pozi#ie
informa#ia din registrul f, rezultatul fiind re#inut conform valorii lui d, n W sau
chiar n registrul f. La fiecare deplasare, bitul 0 este mutat n bitul de C (de
transport), iar acesta este transferat n bitul 7 al registrului f, etc.
Analog, func#ioneaz! "i instruc#iunea RLF f,d , caz n care bitul C (de
transport) va fi copiat n bitul 0 al registrului f "i bitul 7 al aceluia"i registru fi
memorat n C.
Instruc%iuni de decizie:
BTFSS Test bit "i salt peste instruc#iunea urm!toare dac! acesta este $
logic
BTFSC Test bit "i salt peste instruc#iunea urm!toare dac! acesta este 0
logic
Instruc%iuni ce permit execu%ia repetitiv& a unui "ir de opera#ii:
DECFSZ f,d Decrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este
zero rezultatul. Valoarea rezultat este re#inut! func#ie de flag-ul d n W d=0 sau f
d=$.
7. Aplica#ii "79
INCFSZ f,d Incrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este
zero rezultatul. Valoarea rezultatului este re#inut! func#ie de flag-ul d n W d=0 sau
f d=$.
Restul instruc#iunilor de resetare sau setare pe bit "i byte, cele de
incrementare "i decrementare, cele de complementare "i instruc#iunea NOP sunt
furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip).
Vom utiliza instruc#iunile de deplasare la dreapta prin bitul de carry pentru
emularea UART.
Registrele generale ale microcontroller-ului asigur! pe de-o parte
implementarea func#iunilor de control pentru program, iar pe de alt! parte permit
memorarea datelor "i transferul comenzilor c!tre mediul extern. Iat! structura celor
mai importante dintre acestea.
STATUS
IRP RP" RP0 T0# PD# Z DC C
IRP este bitul care selecteaz! bancul de registre ( la adresarea indirect!) valoarea 0
corespunde intervalului de adrese 00H la FFH, iar valoarea $ corespunde
intervalului $00H la $FFH.
RP",RP0 corespunde selec#iei bancului de registre (la adresarea direct!) selec#ie
astfel:
00 corespunde intervalului de adrese 00H la 7FH
0$ corespunde intervalului de adrese 80H la FFH
$0 corespunde intervalului de adrese $00H la $7FH
$$ corespunde intervalului de adrese $80H la $FFH
T0# (time out bit), exprim! dep!"irea capacit!#ii de num!rare a canalului 0,
respectiv tranzi#ia de stare de la FFH spre 00H.
PD# (Power Down), odat! setat exprim! trezirea sistemului, la pornirea acestuia
sau dup! execu#ia instruc#iunii CLRWDT. n rest bitul de mai sus este resetat.
Z (Zero flag), este setat la ntlnirea coinciden#ei a dou! valori numerice sau cnd
rezultatul opera#iei aritmetico-logice este zero. n rest, acesta este resetat.
DC (Digital Carry), exprim! transportul sau mprumutul la nivel de semibyte.
Setat la apari#ia transportului, resetat la apari#ia unui mprumut.
C (Carry), este setat la apari#ia unui transport la nivel de byte, "i resetat n rest.
OPTION
RBPU# INTEDG TOCS TOSE PSA PS2 PS" PS0
RBPU#, (Pull up bits port B),setat exprim! invalidarea func#iunii pull-up pentru
liniile portului B, iar resetat, asigur! func#ia pull-up pentru aceste linii.
INTEDG (Interrupt Edge Select) setat permite generarea ntreruperilor pe frontul
cresc!tor, iar resetat realizeaz! generarea ntreruperii pe frontul descresc!tor.
TOCS (TMR0 Source Clock), selecteaz! sursa impulsurilor ce sunt num!rate de
c!tre canalul 0 num!r!rtor/temporizator, setat permite num!rarea impulsurilor
externe, aplicate la pinul RA4, resetat selecteaz! frecven#a intern! de ceas divizat!
cu 4.
"80 MICROCONTROLLERE
TOSE (TMR0 Source Edge Select), setat realizeaz! incrementarea num!r!torului
canalului pe frontul negativ, iar resetat incrementeaz! impulsurile pe frontul
pozitiv.
PSA, (Prescaler Assignemet Bit), setat asigneaz! prescaler-ul pentru WDT (Watch
Dog Timer), resetat l rezerv! pentru canalul TMR0.
PS2, PS", PS0 (Bi#i de selec#ie a constantei de divizare a prescaler-ului), dup! cum
urmeaz!:
000H reprezint! $/2 ptr. TMR0 "i $/$ pentru WDT
00$H reprezint! $/4 ptr. TMR0 "i $/2 pentru WDT
0$0H reprezint! $/8 ptr. TMR0 "i $/4 pentru WDT
0$$H reprezint! $/$6ptr. TMR0 "i $/8 pentru WDT
$00H reprezint! $/32 ptr. TMR0 "i $/$6 pentru WDT
$0$H reprezint! $/64 ptr. TMR0 "i $/32 pentru WDT
$$0H reprezint! $/$28 ptr. TMR0 "i $/64 pentru WDT
$$$H reprezint! $/256 ptr. TMR0 "i $/$28 pentru WDT
Structura canalului temporizator/num!r!tor este ilustrat! n figura 7.8.
ntreruperile n cazul microcontroller-ului PIC$6F84 au un singur
vector, "i anume cel plasat la adresa 004H din memoria de program, iar cum
sursele de ntreruperi sunt n num!r de patru este necesar s! implement!m n cadrul
rutinei de servire programul de identificare "i apoi de tratare a acestora. Registrul
INTCON, este cel ce d! posibilitatea utilizatorului s! valideze sau invalideze att
decla"area ntreruperilor de la diverse surse, ct "i s! valideze sau invalideze global
ntreruperile.
INTCOM
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF
GIE, (Global Interrupt Enable), permite setat s! valideze acele cereri de
ntrerupere ce apar dac! acestea au fost validate "i individual, respectiv resetat
inhib! orice cerere de ntrerupere.
EEIE (EEPROM Interrupt Enable) setat valideaz! ntreruperile la opera#iile de
scriere sau citire a EEPROM-ului intern, resetat ignor! acestecereri de ntrerupere
TOIE (TMR0 Overflow Enable), setat valideaz! ntreruperile corespunz!toare
dep!"irii la canalul temporizator/num!r!tor, resetat acestea sunt ignorate
Figura 7. 8 Structura canalului temporizator la circuitul PIC$6F84
7. Aplica#ii "8"
INTE (External Interrupt Enable), valideaz! ntreruperile datorate varia#iei
semnalului aplicat pe intrarea RB0 atunci cnd este setat, respectiv resetat le ignor!
RBIE (B Register Interrupt Enable), setat valideaz! ntreruperile datorate
schimb!rii st!rii uneia dintre intr!rile portului RB7, RB6, RB5 sau RB4 al
microcontroller-ului, respectiv, resetat ignor! schimb!rile de stare la nivelul
portului RB
TOIF (Timer Overflow Interrupt Flag), este setat hard la apari#ia st!rii dep!"ire
a capacit!#ii num!r!torului corespunz!tor canalului 0, resetat n rest.
INTF (Interrupt Flag) setat hard la apari#ia unei ntreruperi la nivelul liniei RB0,
n rest resetat.
RBIF (B Port Interrupt Flag), setat hard, atunci cnd una sau mai multe linii ale
portului B au schimbat starea, resetat n rest.
Ca observa#ie general! trebuie re#inut c! bi#ii de stare prezen#i n structura
registrului INTCON sunt seta#i hard (prin mecanismul implementat n cadrul
microcontroller-ului) "i programatorul, n cadrul rutinei de servire a ntreruperilor,
va trebui s!-i reseteze, pentru a putea detecta urm!toarea condi#ie de decla"are a
ntreruperilor.
Registrele EEDATA (EEPROM Data Register), re#ine data de nscris sau
de "ters din/n EEPROM, EEADR (EEPROM address), re#ine adresa de memorie
la care, sau de la care se face: scrierea, respectiv citirea datelor "i registrele
EECON$ "i EECON2 permit efectuarea memor!rii datelor n memoria EEPROM
asignnd comenzile de scriere WR sau citire "i cele de validare.
Avnd imaginea registrelor procesorului s! gndim cum am putea utiliza
acest microcontroller pentru transferul datelor "i implementarea func#iunilor
actuatorului electro-hidraulic.
Observ!m un fapt mai pu#in mbucur!tor: circuitul nu dispune de o
interfa#! serial! implementat! hard, deci
va trebui s! o emul!m soft.
n ceea ce nseamn!
implementarea controlului, observ!m c!
portul B este deosebit de util el detectnd
automat varia#ia nivelului logic pe liniile
RB4 la RB7. n figura 7.9 d!m schema
electric! de conectare propus!, schem! n
care am ignorat eventualele circuite
amplificatoare n comuta#ie sau
formatoare de implus.
Pentru liniile RxD "i respectiv
TxD, vom folosi liniile portului B "i
anume RB6 (aten#ie vom utiliza "i
facilitatea de generare a ntreruperilor la
schimbarea nivelului logic pe aceast!
intrare, n acest sens vom folosi
posibilitatea pe care aceast! linie o ofer!,
P
I
C

"
6
F
8
4
RxD PB0
TxD PB"
p
Ev"
PA0
PB4
PB3
PB2
L2
L"
Ev2
PB5
Figura 7. 9 Schema de conectare
"82 MICROCONTROLLERE
de generare a ntreruperii la sesizarea bitului de START n cazul transmisiei
seriale), respectiv RB$ pentru transmisie.
Principalele idei n baza c!rora vom emula interfa#a serial! sunt
urm!toarele:
program!m timer0 astfel nct acesta s! genereze cte o ntrerupere cu
frecven#a ct mai apropiat! de frecven#a de transfer serial a
informa#iilor.
transfer!m cu ocazia servirii ntreruperii corespunz!toare, cte un bit "i
rotim informa#ia respectiv! pentru a simula felul n care decurge
transferul serial pe un UART implementat hard.
vom stabili rata de transfer serial!, programnd corespunz!tor timer-ul
0 pentru aceasta. Iat! cum se realizeaz! acest lucru:
Formula de calcul -aproximativ!
3
- pentru stabilirea frecven#ei de transfer,
dac! presupunem utilizarea unui microcontroller ce func#ioneaz! la f
Clk
=$0MHz va
fi:
) 256 (
$
4 CT PS
f
BR
Clk

= ,
unde BR este rata de tranmisie serial! (o vom stabili la $9200 Bauds), f
Clk
este
frecven#a de ceas a sistemului, PS este factorul de divizare al prescaler-ului, iar CT
este constanta de timp nc!rcat! de c!tre programator. Formula nu #ine cont de
erorile datorate momentului de timp la care are loc renc!rcarea constantei de timp
"i de timpul necesar microcontroller-ului pentru a intra n ISR.
n cazul nostru, vom ob#ine: $30 valoarea produsului PS*(256-CT).
Considernd pentru PS valoarea $, deci nu utiliz!m prescaler-ul, vom
nscrie n registrul corespunz!tor timer-ului 0, valoarea 7EH.
Aten#ie, este de observat c! timer-ul num!r! n sens direct, deci valoarea
corespunz!toare este dat! de diferen#a ntre valoarea la care se realizeaz!
consemnarea dep!"irii capacit!#ii canalului "i valoarea dorit!.
Eroarea datorat! rotunjirii valorii corespunz!toare ratei de transfer va fi de
0,$6%.
4
Pentru a implementa aceast! func#ie, vom folosi cteva loca#ii de memorie
"i anume:
CHR_TRS: loca#ie ce memoreaz! octetul de transmis
CHR_REC: loca#ie ce re#ine octetul recep#ionat
RI bit ce specific! recep#ia complet! a caracterului pe linia serial!

3
Formula este aproximativ! c!ci ea nu #ine cont de timpii necesari execu#iei instruc#iunilor
din cadrul rutinei de servire a ntreruperilor, timpi care de altfel pot fi diferi#i, func#ie de
starea n care este gasit procesorul la ancla"area ntreruperii
4
Formula de calcul a erorii va fi:
p
p r
Err


= unde
r
este valoarea programat!, iar

p
este valoarea teoretic!.
7. Aplica#ii "83
TI bit ce exprim! transmisia complet! a caracterului pe linia serial!
R bit ce exprim! transferul n curs la recep#ie (este utilizat de ISR).
T bit ce exprim! transferul n curs la transmisie(este utilizat de ISR).
Transferul se va efectua semi-duplex, cu 8 bi#i/caracter, un bit de start "i
unul de stop. Structura byte-ului de stare este cea de mai jos:
SI_STARE
T R TI RI END C2 C" C0
Unde:
END are semnifica#ia de sfr"it transmisie sau recep#ie byte
C2,C$,C0 sunt bi#ii utiliza#i pentru contorul de bi#i, transmi"i sau
recep#iona#i
Astfel, la transmisie vom face urm!toarele:
Transfer!m la loca#ia CHR_TRS octetul de transmis "i set!m flag-ul
INT_TRS.
Reset!m linia TxD (respectiv bitul corespunz!tor ei, adic! RB$)
semnaliznd bitul de start (Break pentru transmisie).
Set!m bitul T, ce exprim! ocuparea CPU (Central Processing Unit) cu
transferul serial.
Ini#iem ceasul de transmisie, adic! program!m TMR0 n scopul
gener!rii ntreruperilor
Vom nscrie bitul corespunz!tor la fiecare ntrerupere pn! la
transferul complet al celor 8 bi#i.
Set!m linia RB$, cel pu#in pentru o perioad! de ceas, (bitul de stop),
set!m bitul TI ce exprim! ncheierea transmisiei caracterului (buffer
de transmisie gol) pentru programul principal "i reset!m bitul T -
elibernd astfel UC de task-ul de serializare a informa#iilor.
La recep#ie este necesar s! parcurgem urm!toarele etape:
La apari#ia schimb!rii de stare pe bitul RB0, set!m bitul ce
consemneaz! ocuparea interfe#ei seriale, respectiv bitul R.(recep#ie n
curs).
Pe fiecare ntrerupere de timp vom citi (e"antiona) linia serial! la
recep#ie RB0 "i vom scrie n Carry Flag bitul citit "i vom deplasa la
dreapta prin carry byte-l CHR_REC ce va con#ine ceea ce recept!m.
Dup! 8 cicli de temporizare, vom seta bitul RI, ce specific! pentru
programul principal, recep#ia complet! a caracterului (caracter
recep#ionat disponibil), resetnd n acela"i timp bitul CHR_REC. Va
fi necesar s! invalid!m ntreruperile corespunz!toare canalului 0
temporizator, respectiv TMR0.
Avnd n vedere structura de registre ale procesorului, precum "i faptul c!
punctul de intrare n rutina de servire a ntreruperilor este unic, va trebui ca aceasta
"84 MICROCONTROLLERE
s! implementeze absolut toate func#iunile ce impun sincronizarea CPU cu mediul
extern. De aceea, programul principal va ini#ializa sistemul "i nu va face dect s!
a"tepte ntreruperile "i s! dea comenzile corespunz!toare informa#iilor recep#ionate
din mediul extern dup! prealabila memorare "i analiz! a acestora (informa#iile
provin de la interfa#a serial! sau sunt culese din proces).
Byte-ul de stare a sistemului va avea aceea"i structur! ca "i n cazul
implement!rii anterioare. n plus, avnd n vedere variabilele care controleaz!
starea interfe#ei seriale UART, am mai introdus loca#ia INT_TRS ce re#ine cererea
de transfer a unui caracter.
Iat! n continuare programul ce implementeaz! aplica#ia:
list p=$6f84
#include p$6f84.inc
ORG 0x00
START GOTO MAIN
ORG 0x04
ISR ;Salvare stare microcontroller PIC, respectiv W "i STATUS
MOVWF TEMP_WORK ;TEMP_WORK <-W
MOVF STATUS,W ; W <- STATUS
MOVWF TEMP_WORK$ ;TEMP_WORK$ <- W
BTFSC INTCON,INTF
;Testare apari#ie bit de start pe RxD
GOTO PRIM_CHR
;Directare spre rutina ce ini#iaz! recep#ia serial! a caracterelor
BTFSC INTCON,RBIF
;Testare modificare stare L$ sau L2
GOTO LIMITATORI
;Directare spre rutina de tratare corespunz!toare atingerii limitatorilor de curs!
BTFSC INTCON,T0IF ;Testare dep!"ire contor TMR0
GOTO REC_TRS
;Directare spre rutina corespunz!toare dep!"irii contorului de timp corespunz!tor
MOVF INTCON,W ; W <- INTCON
ANDLW 0xF8 ;Resetez contorul de bi#i
MOVF INTCON,F ; INTCON <- W
END_ISR ;Refac starea microcontroller-ului
MOVF TEMP_WORK$,W
MOVWF STATUS
MOVF TEMP_WORK,W
RETFIE
PRIM_CHR
BCF INTCON,INTE
;Invalidez INTE Nu accept alte ntreruperi de la RxD. Revalidarea se va face doar
;la sfr"itul recep#iei complete a caracterului curent, odat! cu setarea flag-ului RI)
MOVLW 3/2*CT
7. Aplica#ii "85
;Incarc n W: 3/2 din constanta de timp corespunz!toare perioadei de transmisie
;serial! a datelor (vezi diagrama de timp)
;De ce? C&ci e'antionarea liniei RxD se face ct mai aproape de mijlocul
;perioadei de ceas a UART.
MOVF TMR0,F ; TMR0 <- W
BSF SI_STARE,6
;Setez indicatorul "n recep#ie" respectiv flag-ul R
MOVF SI_STARE,W
;ncarc n W vectorul de stare: W <- SI_STARE
ANDLW 0xF8
;Resetez bi#ii 0,$ si 2, respectiv contorul de bi#i la recep#ie
MOVF SI_STARE,F ; SI_STARE <- W
;Se poate introduce n acest punct testul de "overrun" la recep#ie
BCF INTCON,INTF
;Resetez flag-ul INTE corespunz!tor liniei RxD
GOTO END_ISR
LIMITATORI
BCF INTCON,RBIF
;Resetez flag-ul indicator al ntreruperii datorate varia#iei st!rii liniilor RB4-RB7
BTFSS PORTB,4 ;Testare atingere limitator L$?
;Da! A fost atins!
GOTO L$_ATINS
;Nu!
BTFSS PORTB,5 ;Testare atingere limitator L2?
;Da! A fost atins!
GOTO L2_ATINS
;Ignorare ntrerupere la schimbarea de stare, respectiv ignorare fronturi pozitive
;ale semnalelor de la limitatoarele $ "i 2
GOTO END_ISR
L"_ATINS
BCF PORTB,3 ;Opre"te comanda Ev2
BCF PORTA,0
;Opre"te comanda pompa de fluid. Actualizare stare sistem n vectorul STARE
BSF STARE,0 ;Atins limitator L$ pozi#ie retras
BCF STARE,2 ;Oprit! mi"care actuator
GOTO END_ISR
L2_ATINS
BCF PORTB,2 ;Opre"te comanda Ev$
BCF PORTA,0
;Opre"te comanda pompa de fluid Actualizare stare sistem n vectorul STARE
BSF STARE,$ ;Atins limitator L2 pozi#ie avansat
BCF STARE,2 ;Oprit! mi"carea actuatorului
GOTO END_ISR
REC_TRS
"86 MICROCONTROLLERE
BTFSC SI_STARE,6
;Test ntrerupere de la TMR0 la recep#ia caracterelor?
;Da! Intrerupere la recep#ia caracterelor
GOTO RECEPTIE
;Nu!
BTFSC SI_STARE,7
;Test ntrerupere de la TMR0 la transmisia caracterelor?
;Da! Intrerupere la transmisia caracterelor
GOTO TRANSMISIE
;Nu! Eroare, refacem doar flag ce semnaleaz! ntreruperea coresp. lui TMR0
BCF INTCON,T0IF
GOTO END_ISR
RECEPTIE
BTFSS PORTB,0
;E"antionare linie RxD (linia RxD este linia RB0) ;Da, linia este zero!
GOTO REC_ZERO
;Nu, Setez carry flag
BSF STATUS,C
;Setez bitul 0 din STATUS register care este Carry Flag
GOTO REC_CONT
REC_ZERO
BCF STATUS,C
;Resetez bitul 0 din STATUS register care este Carry Flag
REC_CONT
RRF CHR_REC,F
;Rotesc prin Carry loca#ia (file register REC_CHR) Bitul de Carry
; va ajunge n pozi#ia bitului 7 din REC_CHR "i dup! 8 bi#i recepta#i pe pozi#ia 0
INCF SI_STARE,F
;Incrementez contorul din SI_STARE "i l salvez n el nsu"i
BTFSS SI_STARE,3
;Testez atingerea recep#iei celui de-al 8-lea bit al caracterului
GOTO END_REC_BIT
END_REC_CHR
BCF SI_STARE,6
;Resetez flag-ul ce indic! starea "n recep#ie caracter"
BSF SI_STARE,4
;Setez flag-ul RI, "Caracter recep#ionat disponibil"
BCF INTCON,T0IF
;Resetez flag-ul ce semnalizeaz! "overflow" canal temporizator
BCF INTCON,T0IE
;Invalidez ntreruperile corespunz!toare canalului temporizator
BCF SI_STARE,3
;Resetez contor num!r!tor bi#i recep#iona#i
GOTO END_ISR
7. Aplica#ii "87
END_REC_BIT
MOVWF CT
;ncarc constanta de temporizare n W
MOVF TMR0,F ;O transfer c!tre TMR0
BCF INTCON,T0IE
;Resetez flag-ul corespunz!tor ntreruperilor de la TMR0 Reanclan"are TMR0
GOTO END_ISR
TRANSMISIE
BTFSC SI_STARE,3
;Test corespunz!tor ncheierii transferului datelor ce formeaz! caracterul (8 bi#i)
GOTO TEST_END_TRS
CONT_TRS
BTFSC CHR_TRS,0
GOTO SET_BIT_TRS
BCF PORTB,$ ;Scriu 0 logic pe linia TxD
GOTO TRS_BITI
SET_BIT_TRS
BSF PORTB,$ ;Scriu $ logic pe linia TxD
TRS_BITI
RRF CHR_TRS,F
;Rotesc bi#ii caracterului de transmis n bufferul de transmisie
MOVLW CT
MOVF TMR0,F
;Rencarc constanta de timp corespunz!toare frecven#ei de transmisie pe UART
BCF INTCON,T0IF
;Resetez flag-ul indicator timer "overflow"
BSF INTCON,T0IE
;Validez ntreruperile ptr. canalul temporizator
INCF SI_STARE
;Incrementez contorul de bi#i la transmisie
GOTO END_ISR
TEST_END_TRS
BTFSC SI_STARE,0
;Testez dac! este de transmis bitul de STOP
GOTO END_TRS
TRS_STOP_BIT
BSF PORTB,$
;Scriu $ logic pe linia serial!, corespunz!tor bitului de STOP
GOTO TRS_BITI
END_TRS
BCF INTCON,T0IE
;Invalidez ntreruperilor corespunz!toare TMR0
BCF INTCON,T0IF
;%terg flag-ul indicator de ntrerupere
"88 MICROCONTROLLERE
MOVLW 0x76
;Maschez bitul T, "i bi#ii contorului de bi#i ai UART
ANDWF SI_STARE,F
;Realizez resetarea bi#ilor 7,3 "i 0 din SI_STATUS
BSF SI_STARE,5
;Setez TI, indic! "buffer transmisie gol"
GOTO END_ISR
INIT
MOVLW 0x0C
MOVWF FSR
NEXT
CLRF INDF
INCF FSR
BTFSC FSR,6
GOTO NEXT
BTFSC FSR,4
GOTO NEXT
;Umple cu 0 memoria SRAM a microcontroller-ului de la adresa 0x0C la 0x4F
BCF STATUS,RP0 ;Select bank 0
MOVLW 0x02
MOVF PORTB,F
MOVLW 0x0$
MOVF PORTA,F
BSF STATUS,RP$ ;Select bank $
MOVLW 0x3$
MOVWF TRISB
MOVLW 0x00
MOVWF TRISA
BCF STATUS,RP0 ;Ini#ializeaz! porturile A "i B
RETURN
;********************************************************
MAIN CALL INIT
LOOP BTFSC SI_STARE,4
;Testare dac! a fost recep#ionat un caracter pe UART
CALL EXEC_CDA
;Execu#ie comanda venit! pe UART de la PC
CONTINUE0
BTFSC INT_TRS,0
;Testare dac! este de transmis un caracter via UART
CALL INIT_TRS
CONTINUE"
GOTO LOOP
EXEC_CDA
MOVLW 0x4$ ;ncarc comanda 'A' - avans
7. Aplica#ii "89
XORWF CHR_REC,W
;Testez identitatea ntre caracterul recep#ionat "i 'A'
BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC
GOTO AVANS ;Execut! avans
MOVLW 0x52 ;ncarc comanda 'R' - retragere
XORWF CHR_REC,W
;Testez identitatea ntre caracterul receptionat "i 'r'
BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC
GOTO RETRAGERE
MOVLW 0x53 ;Incarc comanda 'S' - stare
XORWF CHR_REC,W
;Testez identitatea ntre caracterul recep#ionat "i 'S'
BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC
GOTO REQ_STARE
MOVLW 0x50 ;ncarc comanda 'P' - pozi#ie
XORWF CHR_REC,W
;Testez identitatea ntre caracterul recep#ionat "i 'P'
BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC
GOTO POZITIE
END_EXEC_CDA
BCF SI_STARE,4
;Resetez flag corespunz!tor caracterului recep#ionat.Acesta a fost citit "i interpretat
RETURN
AVANS
BSF PORTB,2 ;Comand! Ev$
BSF PORTA,0 ;Comand! pompa
BCF STARE,0 ;Resetez stare sistem L$ atins
BSF STARE,2 ;Setez starea "actuator n mi"care"
GOTO END_EXEC_CDA
RETRAGERE
BSF PORTB,3 ;Comand! Ev$
BSF PORTA,0 ;Comanda pompa
BCF STARE,$ ;Resetez staresistem L$ atins
BSF STARE,2 ;Setez starea "actuator in mi"care"
GOTO END_EXEC_CDA
REQ_STARE
BTFSS STARE,2 ;Testez atingere limitator L$
;Da! Consemneaz! stare "i ini#iaz! emisie ecou
GOTO READY
BUSY
MOVLW 0x42 ; W <-'B' Busy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini#iere transmisie
GOTO END_EXEC_CDA
"90 MICROCONTROLLERE
READY
MOVLW 0x44 ; W <-'D' reaDy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini#iere transmisie
GOTO END_EXEC_CDA
POZITIE
BTFSC STARE,0
GOTO LIM$
BTFSC STARE,$
GOTO LIM2
BTFSC STARE,2
GOTO MOVE
GOTO END_EXEC_CDA
LIM"
MOVLW 0x49 ; W <-'I' retras (L$ Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini#iere transmisie
GOTO END_EXEC_CDA
LIM2
MOVLW 0x45 ; W <-'E' avansat (L2 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini#iere transmisie
GOTO END_EXEC_CDA
MOVE
MOVLW 0x4C ;W <-'M' in mi"care
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0 ;Ini#iere transmisie
GOTO END_EXEC_CDA
INIT_TRS
BTFSS SI_STARE,5 ;Testez dac! TI este activ,
;n acest caz nu am voie s! ini#iez o nou! transmisie, voi a"tepta!
GOTO END_INIT_TRS
BCF PORTB,$ ;Scriu 0 logic pe linia TxD
MOVLW CT
MOVF TMR0,F ;ncarc constanta de timp nTMR0
BSF SI_STARE,7 ;Set "transmisie n curs"
BSF INTCON,T0IE
;Validez ntreruperile corespunz!toare canalului TMR0
END_INIT_TRS
RETURN
STARE DB 0x00 ;Vectorul de stare al actuatorului
;Bit 0 L$ atins
;Bit $ L2 atins
;Bit 2 n mi"care
7. Aplica#ii "9"
SI_STARE DB 0x00 ;Vectorul stare corespunz!tor UART
CHR_REC DB 0x00 ;Loca#ie ce re#ine caracterul recep#ionat
CHR_TRS DB 0x00 ;Loca#ie ce re#ine caracterul de transmis
TEMP_WORK DB 0x00 ;Loca#ie ce memoreaz! W pe durata ISR
TEMP_WORK" DB 0x00
;Loca#ie ce memoreaz! STATUS register pe durata ISR
INT_TRS DB 0x00
;Loca#ia memoreaz! n bitul 0 cererea de transmisie a unui caracter.
CT EQU 0x7E ;Constanta de timp coresp. ceasului UART
n text toate etichetele la care se face referire sunt scrise cu caractere
ngro"ate. Pentru a avea imaginea modului n care assembler-ul plaseaz! codul
nostru, d!m pe CD "i partea referitoare la locatare din listing-ul rezultat n urma
asambl!rii. Aceast! list! este dat! cu titlu informativ pentru a putea sesiza
modalitatea n care sunt asignate automat loca#iile de memorie, variabilelor.
n final vom face o scurt! analiz! comparativ! a solu#iilor avute n vedere
la implementarea aplica#iei.
Criteriul Atmel AT89C205$ PIC$6F84
Procesorul:
Arhitectura
Setul de instruc#iuni
Registre de uz general
Memoria intern!
Num!r intr!ri/ie"iri:
Linii de comand! "i control
Canale temporizatoare
WatchDog
UART
Sistemul de ntreruperi
Alte facilit!#i speciale
Tensiune alimentare
Programarea controller-ului
Memoria de program
Facilit!#i energetice
Von Neumann
CISC
5
4 bancuri a cte 8 registre
fiecare
$28 bytes
$5 I/O
2 (4 moduri de programare)
$ canal (8 bi#i) 256 valori
$ canal sincron/asincron
Vectorizat
6
Dispune de 2 intr!ri
analogice
7
2,7 la 5 V
Flash Reprogramabil
2 Kbytes (CISC)
Low Power "i IDLE mode
8
Harvard
RISC
9
2 Bancuri File Registres a cte
68 de bytes fiecare
Este organizat! sub forma "File
Registrers"
$3 I/O
$ (2 moduri de programare)
$ canal (8 bi#i) $6 valori
NU
Cu unic! adres! de servire
NU
2 la 6 V
Programare flash tip
ICSP
$0
$024 x $4 bi#i (RISC)
PowerDown
$$
"i IDLE mode

5
Complex Set Instruction Computer, deci microcontroller cu un set vast de instruc#iuni
6
Prin sistem de ntreruperi vectorizat n#elegem capacitatea dispozitivului respectiv de a
realiza automat, la servirea unei ntreruperi saltul la o adres! specific! sursei de ntreruperi
"92 MICROCONTROLLERE
Facilit&%i software:
Assembler
Compilaror C
Link-editor
Translator INTEL-HEX code
Emulator
Mediu integrat
A5$, SAM5$, etc. Extrem de
multe variante de asambloare,
Compilatoare C5$ "i altele
L5$
DA
DA
NU
MASM macro-asamblor,
integrabil n mediul MPLAB
DA
MPLINK
DA
DA
DA (MPLAB)
Aspecte economice:
Pre#/bucat!
Optenabilitate:
Seria produsului:
7,24 DM (Hoepping
Elektronik)
DA
Nu avem date precise
8,03 DM (ASA Micros)
DA
Nu avem date precise
Grad de pregatire
proiectant:calat pentru
microcontroller-ul respectiv Nu avem date precise Nu avem date precise
Suport de dezvoltare
"2
: DA DA
Strategia firmei: NU NU
Timpul preconizat pentru
dezvoltarea aplica%iei NU NU
Ce concluzii putem trage n urma analizei acestui tablou cu caracteristici
ale celor dou! procesoare "i nu numai?
Putem stabili factori de pondere corespunz!tori fiec!rui parametru (ace"ti
factori trebuie preciza#i de c!tre fiecare proiectant n parte) "i putem calcula
coeficientul de eficien#! al implement!rii produsului.
Un aspect deseori esen#ial l constituie preg!tirea proiectan#ilor, experien#a
lor anterioar! "i timpul n care se preconizeaz! dezvoltarea aplica#iei. Rubricile la
care nu se poate r!spunde de la nceput (vezi cele ce con#in NU) pot influen#a
substan#ial eficien#a deciziei, c!ci, spre exemplu, preg!tirea unui specialist n
domeniu presupune timp "i bani suplimentari pe care nu ntotdeauna i avem. (vezi
rubrica strategia firmei).

7
Intr!rile pot fi conectate intern ca intr!ri inversoare/neinversoare ale unui comparator
analogic, ie"irea acestuia fiind accesibil! soft, ca bitul 6 al portului 3 al microcontroller-ului
8
Mod de func#ionare n care procesorul consum! pu#in c!ci reduce tensiunea de alimentare
pe liniile porturilor "i opre"te execu#ia instruc#iunilor. Accept! ntreruperile ca modalitate
de ie"ire din stare dat!
9
Reduced Set Instruction Computer, deci microcontroller cu set redus de instruc#iuni
$0
ICSP prescurtare a In Circuit Serial Programming, este facilitatea prin care utiliznd
drept linii de conexiune liniile microcontroller-ului se poate realiza programarea memoriei
flash a circuitului f!r! ajutorul unui programator specializat
$$
Mod de func#ionare n care procesorul nu execut! instruc#iuni "i se izoleaz! electric n
raportul cu procesul controlat. Ie"irea din starea dat! se face doar printr-un RESET hard.
$2
Exprim! existen#a att a sistemelor de dezvoltare, a resurselor de programare: asamblor,
link-editor, translator, emulator, simulator ct "i a programelor de proiectare asistat! a
implement!rii.
7. Aplica#ii "93
Alte informa#ii privind microcontroller-ele familiei PIC de la Microchip
g!si#i la urm!toarele adrese:
Don McKenzie: http://www.dontronics.com/dtlinks.html
Adam Davis: http://www.ubasics.com/adam/pic/piclinks.shtml
Sam Powell: http://come.to/thepicarchive
Brian Lane: http://www.nexuscomputing.com/~picarchive/
Richard Spencer: http://engmtasd.derby.ac.uk
Michael Covington: ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/
Steve Walz: ftp://ftp.armory.com/pub/user/rstevew/PIC/DaveTait/
http://www.tinaja.com/pic500.html
Iar pentru familia I805$ la adresele:
www.8052.com
www.intel.com
www.atmel.com
www.philips.com
www.hitachi.com
7.2 IMPLEMENTAREA INTERFE!ELOR LA
PROCES
n acest paragraf vom aborda cteva aplica#ii care presupun folosirea
convertoarelor analog-digitale "i a celor digital-analoge n aplica#ii de comand! "i
control.
n acest sens vom exemplifica interfa#area sistemelor cu urm!toarele tipuri
de convertoare:
$. Convertoarele analog digitale controlabile serial
2. Convertoarele analog digitale controlabile paralel
3. Convertoarele analog digitale complexe
4. Convertoarele digital analoge controlabile serial
5. Convertoarele digital analoge controlabile serial.
Vom prezenta pentru fiecare dintre aceste cazuri att aspectele legate de
implementarea hardware, inclusiv caracteristicile convertoarelor, ct "i aspectele ce
#in de implementarea software.
"94 MICROCONTROLLERE
7."." Convertoare A/D controlabile serial
Pentru primul exemplu, am ales un convertor reprezentativ pentru
domeniul achizi#iei de semnale din cadrul instala#iilor industriale, "i anume:
ADS7822, convertor cu regsitru de aproxima#ii succesive a c!rui schem! o d!m n
figura 7.$0.
Convertorul prezint! un amplificator de instrumenta#ie pe intrare la care
ambele intr!ri sunt accesibile din exterior. Registrul cu aproxima#ii succesive SAR
(Succesive Aproximation Register), controlat de c!tre semnalele de interfa#are
CS#/SHDN declan"eaz! "i apoi controleaz! procesul de conversie, aplicnd
succesiv combina#iile ce implementeaz! metoda diviz!rii intervalului n aflarea
valorii digitale corespunz!toare semnalului de pe intrare. Domeniul de m!surare
este setat de c!tre valoarea tensiunii sursei de referin#! externe ce aplic! tensiunea
stabilizat! pe intrarea V
REF
. Comparatorul ntoarce la fiecare tact al convertorului
rezultatul compara#iei "i astfel mpreun! cu logica de control realizeaz! trecerea la
testarea urm!torului bit. Convertorul va realiza n $2 ciclii testarea fiec!rui bit de
informa#ie sincron cu semnalul de ceas DCLOCK, ncepnd cu al $,5-lea impuls de
ceas (perioad! de e"antionare, caracteristic! acestui convertor) dup! care
informa#ia va fi disponibil! bit de bit ncepnd cu bitul cel mai semnificativ pe
ie"irea D
OUT
a circuitului. L!#imea implusurilor (durata acestora), nu trebuie s!
fie mai mic! de 400ns, circuitul acceptnd astfel frecven#e de ceas cuprinse ntre
Figura 7. "0 Schema bloc a circuitului ADS7822 convertor analog - digital cu registru
de aproxima#ii succesive
7. Aplica#ii "95
$0KHz "i $,2 MHz, ceea ce corespunde unor rate de e"antionare a semnalului
analogic cuprinse ntre:625 Hz "i respectiv 75kHz.
Impulsurile corespunz!toare de ceas sunt oferite de conexiunile pe care le
vom realiza ntre convertor "i microcontroller. Am ales tot microcontroller-ul
Atmel, avnd n vedere simplitatea schemei ce implementeaz! aplica#ia "i faptul c!
acesta prezint! dou! canale num!r!toare temporizatoare ceea ce favorizeaz!
aplica#ia. Timing-ul este prezentat n figura $$, iar schema de conectare n figura
$2.
Vom utiliza canalul $ al circuitului drept generator al ratei de transmisie
serial! a datelor, iar canalul 0 drept generator al frecven#ei de ceas necesar!
convertorului A/D.
Formarea semnalului DCLOCK va fi realizat! soft, prin generarea ratei de
achizi#ie, programnd corespunz!tor canalul respectiv. Aici este momentul s!
facem cteva comentarii.
Figura 7. "" Timing-ul (e"alonarea n timp) semnalelor de comand! pentru circuitul
ADS7822
P".5
P".4
P".7
CS#
DCLOCK
D
OUT
RxD
TxD
A
T
8
9
C
2
0
5
"
A
D
S
7
8
2
2
Figura 7. "2 Structura sistemului de achizi#ie schem! simplificat!
"96 MICROCONTROLLERE
Dac! microcontroller-ul func#ioneaz! la o frecven#! de ceas de 24MHz,
teoretic frecven#a maxim! pentru semnalul DCLOCK ar trebui s! fie de $MHz, dar
va trebui s! #inem cont de alte cteva am!nunte, "i anume:
ntrzierea datorat! procesului de servire a ntreruperilor, care n acest
care este de minimum 7 s.
De ntrzierea datorat! execu#iei instruc#iunilor rutinei de servire a
ntreruperilor
De ntrzierile (care pot fi aleatorii) datorate proceselor de schimb de
informa#ie concurente procesului de achizi#ie, cum ar fi procesul de
transfer serial al datelor c!tre sistemul ierarhic superior, alte procese ce
concur! la buna func#ionare a sistemului, etc.
n final, vom specifica cum se calculeaz! frecven#a maxim! de ceas
corespunz!toare achizi#iei de semnal.
n figura 7.$3 d!m structura principalelor fluxuri de informa#ie n cadrul
sistemului propus.
Proiectarea programelor n cazul astfel specificat, implic!:
Ini#ializarea de sistem, ceea ce presupune:
Resetarea memoriei sistemului,
Setarea valorilor corespunz!toare frecven#ei de achizi#ie,
Scrierea rutinelor de servire a ntreruperilor
Implementarea transferului semnalului de ceas c!tre convertorul A/D
Implementarea achizi#iei datelor de la convertor
START
INI&IALIZAREA
SISTEMULUI
S-A PRODUS UN
EVENIMENT
A"teapt!
Servire ntrerupere
corespunz!toare UART,
respectiv RI sau TI
Servire ntrerupere
corespunz!toare canalului T0
Implementeaz! achizi#ia
ntrerupere
ntrerupere
Figura 7. "3 Structura soft-ului aferent sistemului
7. Aplica#ii "97
Implementarea buffer-elor de intrare/ie"ire
Implementarea transferului serial al datelor, la frecven#a "i n condi#iile
dorite.
Scrierea programului principal, care are ca principal rol, rolul de a
a"tepta producerea unor evenimente.
D!m n continuare programul ce implementeaz! aplica#ia.
;Rutina de servire a ntreruperilor corespunz!toare achizi#iei de semnal
;Realizeaz! achizi#ia unei date n cadrul ei, necesit! urm!toarele loca#ii:
CT_H EQU $$H
CT_L EQU 00H
SET_UART EQU 5CH ;Setarea parametrilor interfe#ei seriale
SET_TIMER EQU 2$H
;Setarea modului de func#ionare pentru timer-ele microcontroller-ului
SET_T$ EQU 0FDH
;Setarea constantei de timp pentru rata de transfer a UART
DSEG
ORG 24H
STATUS DATA 00H
CONTOR DATA 00H ;Loca#ia memoreaz! nr. de pasi la achizi#ie
DATA_REC DATA 00H ;Loca#ia memoreaz! comanda venita via UART
DATA_LSB DATA 00H ;Loca#ie byte mai pu#in semnificativ
DATA_MSB DATA 00H ;Loca#ie byte mai semnificativ
BSEG
TRS_MSB BIT $0H
;Specific! necesitatea transferului celui mai semnificativ byte al datei achizi#ionate
REC_EN BIT $$H
;Specific! recep#ia complet! a unui caracter, caz n care programul principal l va
;analiza genernd ecourile specifice comenzii primite
;Rutina de servire a ntreruperilor corespunz!toare canalului 0 temporizator
;In cadrul programului principal se vor seta:
;rata de e"antionare prin setarea constantei de timp
;modul de achizi#ie: $.un singur punct / 2. puncte multiple
CSEG
ORG 0H
JMP MAIN
ORG 0BH
ISR_T0:
(24) PUSH PSW ;Salvez contextul respectiv registrele PSW "i ACC
(24) PUSH ACC
("2) SETB PSW.3
;Schimb bancul tin#! de registre generale cu bancul$
("2) MOV TH0,#CT_H
("2) MOV TL0,#CT_L
"98 MICROCONTROLLERE
;Rencarc! constantele de timp "i redecla"eaz! temporizarea corespunz!toare
("2) CLR IE.$ ;Reseteaz! flag-ul de ntrerupere corespunz!tor
canalului 0
("2) SETB P$.5
("2) CLR P$.5 ;Activeaz! CS# pentru accesul la convertor
("2) CLR P$.4
;Reseteaz! DCLOCK pentru $ ms. Formeaz! DCLOCK =0
("2) SETB P$.5 ;Formeaz! DCLOCK =$
("2) CLR P$.5 ;Formeaza DCLOCK =0
;S-a ncheiat perioada de e"antionare pentru convertor. Urmeaz! citirea datelor
;Aceasta presupune urm!toarele: DCLOCK=$, Incrementeaz! contor,DCLOCK=0,
;Cite"te data. Num!rul de cicluri este de $3 avnd n vedere c! prima valoare citit!
;de la CAD este 0
("2) MOV R0,#8 ;Initializez contor
("2) MOV A,#00H;Resetez ACC
LOOP_MSB:
"80/"2="5 S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus
("2) SETB P$.4 ;Formeaza DCLOCK =$
("2) CLR P$.4 ;Formeaza DCLOCK =0
(24) JNB P$.7,CLR_BIT8
("2) SETB ACC.0
CLR_BIT8:
("2) RL A
(24) DJNZ R0,LOOP_MSB
("2) MOV DATA_MSB,A;Salvez bi#ii 4 la $2 achizi#iona#i
("2) MOV R0,#4 ;Ini#ializez contor
("2) MOV A,#00H;Resetez ACC
"80/"2=28,5 S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus
LOOP_LSB:
("2) SETB P$.4 ;Formeaza DCLOCK =$
("2) CLR P$.4 ;Formeaza DCLOCK =0
(24) JNB P$.7,CLR_BIT0
SETB ACC.0
CLR_BIT0:
("2) RL A
(24) DJNZ R0,LOOP_LSB
("2) MOV DATA_MSB,A;Salvez bi#ii 0 la 3 n DATA_LSB
;Am achizi#ionat to#i cei $2 bi#i oferi#i de ADS7822
"80/"2="4,5 S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus
("2) SETB P$.5 ;Inactivez CS#
;Formez rezultatul conversiei
("2) MOV A,DATA_MSB
("2) SWAP A
(24) PUSH ACC
7. Aplica#ii "99
("2) ANL A,#0F0H ;Maschez LSB=bi#ii 4-7 ai LSB
("2) ORL A,DATA_LSB
("2) MOV DATA_LSB,A ;Formez primii 8 bi#i ai datei convertite
(24) POP ACC
("2) ANL A,#0FH ;Maschez cel mai seminificativ semibyte
("2) MOV DATA_MSB,A;Formez urm!torii 4 bi#i -cei mai
;semnificativi
(24) POP PSW ;Refac starea PSW dinaintea intr!rii n ntreruperi
(24) POP ACC ;Refac starea ACC dinaintea intr!rii n ntreruperi
(24) RETI
"80/"2=8,5 S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus
66,5 S ESTE TIMPUL TOTAL CORESPUNZ#TOR ISR _T0
;Rutina de servire a ntreruperilor corespunz!toare UART
;Sistemul va transmite date doar la cererea sistemului ierarhic superior "i
;numai maximum doi bytes
ORG 23H
ISR_SI:
(24) JB RI,REC ;Testare dac! a fost recep#ionat un caracter
TRS: ;NU! Intrerupere la transmisie
("2) CLR TI
("2) JNB TRS_MSB,END_TRS;Test dac! mai sunt de transmis date
("2) MOV SBUF,DATA_MSB ;Transfer MSB data achizi#ionat!
("2) CLR TRS_MSB
END_TRS:
(24) RETI
REC:
("2) CLR RI
("2) MOV DATA_REC,SBUF ;Scriu data n buffer-ul de recep#ie
("2) SETB REC_EN ;Specific recep#ia unui caracter
(24) RETI
MAIN:
CALL INIT ;Rutina de initializarea a sistemului
LOOP:
JNB REC_EN,LOOP
ANALIZA:
MOV A,#'A' ;Incarc! primul caracter utilizat drept comanda
CJNE A,DATA_REC,CONTINUE0
CALL INIT_ACHIZITIE
JMP LOOP
CONTINUE0:
;Aici pot fi inserate celelate teste pentru comenzile pe care le instituim prin
protocol
;
NOP
200 MICROCONTROLLERE
INIT_ACHIZITIE:
;Rutina de initiere a achizitiei datelor trebuie sa valideze intreruperile
;corespunzatoare canalului 0 si sa incarce constanta de timp corespunzatoare
;ratei de esantionare
MOV TH0,#CT_H
MOV TL0,#CT_L
SETB TR0
SETB T0
RET
INIT:
;Rutina de ini#iere de sistem. Nu mai detaliem ini#ializarea memoriei
MOV IE,#90H ;Ini#ializez ntreruperile corespunz!toare UART
MOV PSW,#0 ;Ini#ializez PSW
MOV SCON,#SET_UART ;Ini#ializez UART
MOV TMOD,#SET_TIMER
;Setez modurile de func#ionare ale timer-elor
MOV TL$,#0
MOV TH$,#SET_T$ ;Setez constantele de timp
RET
S! observ!m c! dac! calcul!m timpul de execu#ie corespunz!tor
instruc#iunilor rutinei de servire a ntreruperilor la achizi#ia datelor n cazul unei
frecven#e de ceas de 24 MHz ob#inem o durat! de 66,5 s, adic! frecven#a maxim!
de achizi#ie este de: $5.037 Hz. Putem constata c! "i n situa#ia n care am utilizat
facilit!#ile hard de sincronizare, respectiv sistemul de ntreruperi totu"i viteza de
achizi#ie este puternic legat! de modul de implementare prin program a acesteia,
deci acest aspect va trebui cu cea mai mare grij! analizat "i proiectat.
Observ!m c! dac! am fi utilizat la achizi#ia datelor de la convertorul
analog-digital facilitatea interfe#ei UART a microcontroller-ului (vezi modul 0 de
func#ionare) am fi putut cre"te frecven#a maxim! de achizi#ie aproape de limita
superioar! corespunz!toare convertorului analog-digital. n acest caz, observ!m c!
ar fi fost necesar s! recep#ion!m sincron doi octe#i, ceea ce ar fi dus la consumarea
unui timp de aproximativ $6 ciclii de ceas, adic! la 24 MHz timpul de achizi#ie ar
fi fost de 8s, ceea ce corespunde unei rate de e"antionare de $25000Hz ceea ce
evident c! dep!"e"te frecven#a maxim! admisibil! a convertorului. Evident, n
acest caz am fi renun#at la utilizarea UART drept port de leg!tur! cu sistemul
ierarhic superior.
7. Aplica#ii 20"
7.".2 Interfa%area paralel& a convertoarelor A/D
n acest scop vom utiliza convertorul ADS782$ convertor cu registru de
aproxima#ii succesive de $6 bi#i. Cteva date tehnice importante: frecven#a maxim!
$00 kHz, domeniul tensiunilor de intrare: 0 la 5 V, poate utiliza att o referin#! de
tensiune intern!, ct "i una extern!, poate fi conectat direct la un bus de sistem.
Schema bloc a sa este prezentat! n figura 7.$4.
Pentru a-l putea conecta, este necesar s! cunoa"tem care este modul de
func#ionare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur!
citirea rezultatului sau declan"area conversiei, semnalul CS# permite trecerea bus-
ului din starea High Impedance ntr-una din st!rile $ sau 0 logic, semnalul BYTE
permut! magistralele low/high de ie"ire, iar linia BUSY# semnaleaz! situa#ia n
care convertorul se g!se"te n faza de e"antionare "i conversie a semnalului
analogic.
Pentru a realiza conversia de semnal va trebui s! cunoa"tem care este
succesiunea de semnale de comand!. Combina#iile posibile sunt prezentate n
tabelul I.
Figura 7. "4 Structura convertorului analog-digital ADS782$, cu ie"ire paralel! de date
202 MICROCONTROLLERE
Astfel aplicnd
simultan un 0 logic pe
liniile CS# "i R/C# "i
men#innd cel pu#in 40
ns linia R/C# n zero
logic realiz!m
e"antionarea "i
conversia semnalului
analogic. Semnalul
BUSY va sta n zero
logic din momentul
ini#ierii conversiei "i
pn! la momentul la
care aceasta s-a
ncheiat. Convertorul l
va aduce automat pe $
logic, moment la care
valoarea numeric!
corespunz!toare
semnalului de intrare va
fi valid! pe ie"irea
convertorului.
Linia BYTE va permuta bi#ii inferiori "i superiori ai rezultatului. Astfel dac!
BYTE=0, pinii de ie"ire ai convertorului de la 6 la $3 vor scoate semi-byte-ul mai
semnificativ, pentru ca dac! BYTE = $, aceia"i pini s! re#in! cei mai pu#ini 8 bi#i ai
rezultatului conversiei.
Structura schemei electrice este gndit! pentru procesorul AT89C205$, n
urma analizei resurselor pe care acesta le posed!, precum "i a necesit!#ilor datorate
convertorului analog-digital ADS782$ (figura 7.$5).
A
T
8
9
C
2
0
5
"
A
D
S
7
8
2
"
P3.4
P3.5
P3.7
CS#
R/C#
BYTE
P3.2
BUSY
P$.0-7 6-$3
TxD
RxD
Figura 7. "5 Schema de conectare
7. Aplica#ii 203
Strategia urmat! va consta n:
$. declan"area conversiei prin resetarea liniilor CS# "i R/C#
2. trecerea dup! mai mult de 40 ns a semnalului R/C#n $ logic
3. citirea rezultatului atunci cnd linia BUSY# va trece n $ logic.
Pentru implementarea achizi#iei vom putea folosi att unul ct "i
cel!lalt dintre controller-e.
S! analiz!m avantajele "i dezavantajele acestor implement!ri.
Legnd liniile CS#, R/C# "i BYTE la portul 3 al microcontroller-ului nu
afect!m func#ionalitatea acestuia c!ci cele dou! canale temporizatoare le vom
folosi, unul pentru generarea ratei de e"antionare a semnalului analogic, iar cel!lalt
drept generator al frecven#ei de ceas pe linia serial! de date a UART.
Liniile portului P$ sunt direct conectate la liniile 6 la $3 ale convertorului.
E"alonarea n timp a evolu#iei semnalelor este dat! n figura 7.$6.
Semnalul byte permut! pe acela"i grup de 8 linii de ie"ire byte-ul mai semnificativ
cu cel mai pu#in semnificativ, func#ie de nivelul logic $, respectiv 0 logic.
Pentru achizi#ia datelor va trebui s! aloc!m resursele disponibile ale
microcontroller-ului astfel:
$. rutina de servire a ntreruperilor corespunz!toare semnalului BUSY, astfel
ca pe frontul pozitiv al acestuia s! se declan"eze rutina de servire. (vezi
declan"area se face pe frontul descresc!tor, iar starea de interes la achizi#ie
este starea corespunz!toare frontului cresc!tor, deci am introdus un inversor).
2. rutina de start al conversiei A/D rutina de servire corespunz!toare
ntreruperilor timer overflow de la canalul 0.
3. vom scrie rutina de servire a ntreruperilor corespunz!toare UART
Figura 7. "6 E"alonarea n timp a semnalelor de comand! pentru interfa#a
ADS782$
204 MICROCONTROLLERE
4. vom proiecta rutina de ini#ializare
5. vom scrie programul principal de func#ionare ce cuprinde rutina de analiz!
a informa#iilor vehiculate prin UART
Programul ce implementeaz! aceast! aplica#ie a considerat urm!torul
protocol:
Caracterul A reprezint! comanda de achizi#ie necondi#ionat! a datei
Caracterul C reprezint! comanda de achizi#ie continu! cu o rata fix!
de e"antionare, aprioric stabilit! prin constantele de timp CT_L "i
CT_H a datelor
Caracterul D reprezint! comanda de transfer a datei achizi#ionate via
interfa#a UART.
D!m n continuare programul:
CT_L EQU 00H
CT_H EQU 80H
CT_SMOD EQU 2$H ;
CT_ST EQU 55H ;
CT_SSCON EQU 5CH ;
;Valori pentru constanta de timp necesara la declansarea conversiei semnalului
analogic
DSEG
BSEG
RX BIT $0H ;Specifica receptia unui caracter
TX BIT $$H ;Specifica necesitatea transferului DATA_LSB
DE BIT $2H ;Specifica existenta unei date achizitionate
DATA_UART DATA 30H ;Locatie data receptionata pe UART
DATA_LSB DATA 3$H ;Locatie LSB data achizitionata
DATA_MSB DATA 32H ;Locatie MSB data achizitionata
CSEG
;ISR_EXT0 Rutina de servire a intreruperilor corespunzatoare achizitiei de la CAD
ORG 0H
JMP MAIN
JMP ISR_EXT0
ORG 0BH
JMP ISR_T0
ORG 23H
JMP ISR_SI
ISR_EXT0:
PUSH PSW ;Salveaza starea UC
SETB PSW.3
;Seteaza bancul $ de regsitrii generali, ca registrii "tinta"
MOV DATA_MSB,P$ ;Salveaza partea mai
semnificativa a datei
7. Aplica#ii 205
SETB P3.7 ;Comanda switch-area bytes: LSB <-
>MSB
MOV DATA_LSB,P$;Salveaza partea mai putin semnificativa a
datei
SETB DE
POP PSW ;Reface starea UC
RETI ;Iese din ISR
;ISR_T0 Rutina de servire a intreruperilor corespunzatoare frecventei de
esantionare
ISR_T0:
PUSH ACC ;Salveaza acumulatorul
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0
POP ACC ;Reface acumulatorul
SETB P3.5 ;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizare
RETI ;Iese din ISR
;ISR_SI Rutina de servire a intreruperilor corespunzatoare UART
ISR_SI:
JB RI,RECEPTIE ;Testare intrerupere la receptie
;NU! Intrerupere la transmisie
TRANSMISIE:
CLR TI ;Sterg flag pentrua reanclasa intreruperea
JB TX,SCRIE ;Test daca trebuie sa transmit si LSB
;NU!
RETI ;Iesire din ISR
SCRIE:
MOV SBUF,DATA_LSB ;Scriu LSB
CLR TX ;Sterg flag atentionare transfer via UART
a LSB
RETI ;Iesire din ISR
RECEPTIE:
CLR RI ;Sterg flag receptie data pe UART
MOV DATA_UART,SBUF ;Citesc data receptionata pe linia
seriala
SETB RX ;Semnalez receptia si citirea datei
RETI
;Programul principal de functionare a sistemului
MAIN:
CALL INIT
LOOP:
206 MICROCONTROLLERE
MOV A,DATA_UART
CJNE A,'A',TEST$
;Comanda SOC ("Start Of Conversion")
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ;
SETB P3.5
TEST$:
CJNE A,'C',TEST2
MOV A,P3
ANL A,#0E7H
MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ;
POP ACC ;Reface acumulatorul
SETB P3.5 ;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizare
SETB TR0 ;Validez impulsurile catre temporizator -
canalul 0-
SETB IE.$ ;Validarea intreruperilor "timer 0
overflow"
TEST2:
CJNE A,'D',FINAL
SETB DE
FINAL:
JNB DE,LOOP
INIT_TRS:
JB TI,INIT_TRS
MOV SBUF,DATA_MSB
SETB TX
CLR DE
JMP LOOP
INIT:
MOV R0,7FH
LP:
MOV @R0,#0H
DJNZ R0,LP
;Reseteaza memoria interna a controller-ului
MOV SP,#60H
MOV TMOD,#CT_SMOD
MOV TCON,#CT_ST
MOV SCON,#CT_SSCON
MOV IE,#9$H
MOV P3,#0FFH
7. Aplica#ii 207
RET
END
Locatarea variabilelor "i a registrelor utilizate de c!tre aplica#ie este dat! pe CD.
7.".3 Convertoare A/D complexe
Sistemele de achizi#ie ce cuprind convertoare analog-digitale complexe
sunt utilizate n aplica#ii cum ar fi achizi#ia semnalelor n tensometrie, n domeniul
medical, n domeniile ce necesit! frecven#e de e"antionare relativ reduse (de
maximum c#iva KHz) "i rezolu#ii ridicate (de la $8 la 24 de bi#i).
Dintre realiz!rile tehnologice actuale ne vom opri asupra circuitului
ADS$2$$, cap de serie al convertoarelor de nalt! rezolu#ie al firmei Burr-
Brown/Texas Instruments.
Structura acestuia este prezentat! n figura 7.$7.
Circuitul ADS$2$0/$2$$ este un convertor analog-digital cu un domeniul
de intrare deosebit de larg.
Ofer! o rezolu#ie de 24 de bi#i, cu facilitatea de autocalibrare "i de
multiplexare intern! diferen#ial! pentru 4 canale distincte n cazul ADS$2$$.
Circuitul posed! un amplificator cu amplificare programabil! digital
(PGA), un modulator sigma-delta de ordinul 2, un filtru digital programabil care
Figura 7. "7 Structura convertorului sigma/delta ADS$2$0
208 MICROCONTROLLERE
include un microcontroller ce dispune de regi"trii de instruc#iuni, comenzi, precum
"i de regi"trii de date, offset "i calibrare la cap!t de scal!.
Referin#a de tensiune este intern! "i setabil! digital cu valori de pn! la
2,5V. Func#ionarea detaliat! a convertorului este prezentat! n foaia sa de
catalog. (www.burr-brown.com) unde sunt detaliate "i modurile sale de
func#ionare. Dou! sunt tipice: master mode (MODE=$) -caz n care convertorul are
ini#iativa transferului datelor achizi#ionate imediat dup! faza de ini#ializare "i slave-
mode, (MODE=0)caz n care ini#iativa "i frecevn#a de ceas sunt oferite de c!tre
controller-ul magistralei de conexiune.
n figura 7.$8 d!m diagramele de timp pentru cazul n care circuitul este
conectat ca element slave (pinul MODE este plasat pe 0 logic) pe bus.
Schema de conectare aleas! permite realizarea tuturor modurilor de
func#ionare pentru convertor, respectiv att a modului "slave" ct "i a modului
"master". De asemenea prin controlul liniei CS# este posibil! inserarea mai multor
convertoare pe acela"i bus "i adresarea acestora. n figura 7.$9 este prezentat!
aceast! schem!.
Figura 7. "8 Diagramele de timp corespunz!toare interfe#ei seriale
Figura 7. "9 Schema electric! simplificat! a interfe#ei CAD-ADS$2$0 microcontroller I805$
7. Aplica#ii 209
Pentru a putea scrie programele de ini#ializare "i cele de achizi#ie este
necesar s! cunoa"tem structura regi"trilor interni ai convertorului.
Registrul de instruc#iuni este cel prin intermediul c!ruia se controleaz!
transferul informa#iilor "i are structura:
INSTR
R/W# MB" MB0 0 A3 A2 A" A0
Bitul R/W# specific! tipul opera#iei: de citire/scriere respectiv $/0 logic.
Bi#ii MB$ "i MB2 codific! num!rul de octe#i de comand! pe care circuitul i va
recep#iona, via interfa#a serial!: combina#ia 00 corespunde unui octet, 0$ la doi
octe#i, $0 la 3 octe#i "i $$ la 4 octe#i transmi"i succesiv.
Bi#ii A3,A2,A$,A0 adreseaz! regi"trii interni ai convertorului, conform tabelului
al!turat.
Circuitul este astfel conceput nct dup! fiecare sesiune de scriere
adreseaz! implicit, din nou, regsitrul de instruc#iuni.
Odat! decla"at!, spre exemplu achizi#ia datelor, acestea vor fi emise
autonom, func#ie de set!rile stabilite.
Registrele de comenzi permit setarea parametrilor de achizi#ie pentru
convertorul analog-digital. ntre ace"tia amintim: rata de e"antionare n
concordan#! cu frecven#a de decimare "i c"tigul amplificatorului de pe intrare
ob#inute pe convertor, canalul selectat, formatul datelor, sursa pentru tensiunea de
referin#! "i modul de achizi#ie: unipolar sau bipolar, ordinea de emisie a datelor
ncepnd cu LSB (Last Signifiant Bit) sau cu MSB (Most Signifiant Bit). Setarea
modurilor de func#ionarese face conform structurii de bi#i de comand! urm!tori.
2"0 MICROCONTROLLERE
Byte 3 (MSB)
BIAS REF DF U/B# BD MSB SDL DRDY/
DSYNC#
O = Off " = On " =comp 2 0=
Bipolar
0= MSB 0=MSB 0=SDIO 0
Valorile trecute pe a doua linie sunt cele implicite.
Pentru valoarea 0 a bitului BIAS, tensiunea de referin#! este de 2,5V, iar pentru
valoarea $ ea este $,33*2,5V adic! aproximativ 3,3V.
Un $ logic pe bitul REF asigur! utilizarea sursei interne de referin#!, iar 0
aduce n starea de mare impedan#! aceast! surs!, permitnd utilizarea unei
surse de referin#! externe.
DF exprim! formatul datelor, 0 implic! formatul datelor n complement fa#! de
doi +FSR=7FFFFFH, 0=000000H, iar -FSR=800000H (FSR este abrevierea
scalei complete "Full Scale Range").
U/B# exprim! cnd este 0 achizi#ia bipolar! a datelor, iar cnd este $ exprim!
achizi#ia unipolar! a acestora.
BD exprim! ordinea de transfer a bytes, setnd bitul ordinea este cresc!toare
de la LSB c!tre MSB "i invers dac!-l reset!m.
MSB exprim! cine este primul bit emis n cadrul fiec!rui byte, $ implic!
transferul nti al bitului cel mai nesemnificativ, iar 0 implic! transferul nti al
bitului cel mai semnificativ.
SDL comand! utilizarea a unei linii bidirec#ionale seriale (SDIO) dac! este
resetat, respectiv a dou! linii seriale dac! este setat (SDIO pentru comenzi "i
SOUOT pentru date)
DRDY# exprim! resetat prezen#a datelor (Data Ready), iar setat exprim! date
invalide.
Byte 2
MD2 MD" MD0 G2 G" G0 CH" CH0
Acest byte seteaz!, modurile de func#ionare, codate binar de la 0 la 7, valorile
c"tigului "i selecteaz! canalul de intrare pentru achizi#ia de semnal.
Modurile de func#ionare codate binar sunt n ordine, ncepnd de la 000H
urm!toarele:
$. Normal,
2. "Self calibration" calibrare automat!,
3. Calibrare de offset,
4. Calibrare la cap!t de scal!,
5. "Pseudo-calibrare",
6. Calibrare n fundal "background calibration",
7. "Sleep" "i
8. Rezervat -neutilizat.
7. Aplica#ii 2""
Byte "
SF2 SF" SF0 DR"2 DR"" DR"0 DR9 DR8
SF2, SF$, SF0 selecteaz! una dintre valorile modului turbo de func#ioare a
circuitului, iar valorile DR$2 la DR0 seteaz! frecven#a de decimare pentru filtrul
digital al convertorului.
Byte 0
DR7 DR6 DR5 DR4 DR3 DR2 DR" DR0
n modul de conectare ce utilizeaz! liniile SDIO "i SDOUT convertorul
poate fi controlat dinamic, respectiv poate lucra n modul de citire continu!,
admitnd n acela"i timp comenzi prin intermediul liniei SDIO "i genernd date via
linia SDOUT. (vezi documenta#ia firmei Burr - Brown, memorat! pe CD)
Implementarea unui ciclu descriere a comenzilor n modul slave presupune
ndeplinirea urm!torilor pa"i:
$. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic
2. A"teapt! ca CS# s! treac! la rndul s!u n zero logic
3. Genereaz! 8 cicluri de ceas pentru a trece n instruction register data de
configurare via SDIO
4. Genereaz! n ciclii de ceas de transmisie pentru nscrierea regi"trilor #int! ai
comenzilor (vezi documenta#ia la ADS$2$0 ads$2$0.pdf de la Burr-Brown)
5. Ads$2$0 pune pe $ logic DRDY
Repet! pa"ii 3 la 5 pn! la transmiterea tuturor cuvintelor de comand!
c!tre ADS$2$0, dup! care intr! n ciclul/ciclurile de citire a datelor, ceea ce
presupune:
$. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic
2. A"teapt! ca CS# s! treac! la rndul s!u n zero logic
3. Dac! este n modul citire continu! (Continous Read), trece la pasul 5
4. Microcontroller-ul genereaz! 8 ciclii de ceas "i transfer! cuvntul de
control n registrul de instruc#iuni via SDIO
5. Dac! utiliz!m SDIO drept linie bidirec#ional! vom urm!rii evolu#ia
acesteia n continuare, dac! nu, atunci linia SDIO trece n starea de
mare impedan#!
6. Microcontroller-ul emite n ciclii de ceas (n multiplu de 8) "i
transmite/recep#ioneaz! informa#ia din registrul specificat prin
instruc#iunea de la punctul 4. Recep#ia acestor bi#i se face pe linia
SDOUT sau SDIO dup! caz.
7. SDOUT sau SDIO intr! n starea de mare impedan#!, dup! ce a
transmis informa#ia comandat!
2"2 MICROCONTROLLERE
8. Testare dac! mai sunt de transmis alte comenzi sau cereri de date.
Dac! da da da da se reia ciclul de la punctul 2. CS# r!mne inactiv $0,5 ciclii
de ceas.
Programul de mai jos prezint! cteva rutine, ca de transfer a unui cuvnt de
comand!, precum "i cea de citire a unei date format! din trei octe#i. Programarea
microcontroller-ului va fi specific! pentru fiecare aplica#ie n parte, ea trebuind s!
realizeze adaptarea parametrilor convertorului n raport cu rezolu#ia "i rata de
e"antionare impuse de aplica#ie.
Programul de func#ionare permite:
$. Sincronizarea transferului comenzilor c!tre CAD;
2. Generarea soft "i emiterea semnalului de ceas (SCLK), c!tre CAD
3. Transferul informa#iilor de ini#ializare "i a comenzilor c!tre CAD
4. Recep#ia datelor corespunz!toare semnalului analogic convertit
Iat! acest program:
ORG 28H
PROG: DB 0$$00$00B ;Cuvnt de instruc#iuni
DB 0$0000$0B ;Cuvnt de C-d! nr. 3
DB 00000000B ;Cuvnt de C-d! nr. 2
DB 00000000B ;Cuvnt de C-d! nr. $
DB 00000000B ;Cuvnt de C-d! nr. 0
;Cuvntul de instruc#iuni asigur! scrierea cuvintelor de comand! 3, 2, $ "i 0
DB $$000000
;Cuvntul asigur! citirea celor 3 regi"trii corespunz!tori valorii semnalului
analogic convertit
BUFFER: DS 03H
CAD: JB P$.0,CAD ;Testeaz! starea CAD, respectiv DRDY#=0
MOV R$,#04H
MOV R0,#PROG
;Preg!te"te transmiterea a 5 octe#i c!tre CAD, ce sunt: cuvntul de instruc#iuni "i
;cele 4 cuvinte de comand!. Cuvintele sunt memorate ncepnd de la adresa PROG
LOOP_$: MOV A,@R0
CALL SERIAL_OUT
INC R0
DJNZ R$,LOOP_$
CAD$: JB P$.0,CAD$ ;Testeaz! starea CAD, respectiv DRDY#=0
MOV A,@R0
CALL SERIAL_OUT
LOOP_2: JB P$.0,LOOP_2
;A"teapt! conversia datelor de c!tre CAD, semnalul DRDY# va fi resetat
MOV R$,#03H
MOV R0,#BUFFER
;Preg!te"te citirea celor 3 bytes de date, corespunz!tori semnalului analogic
LOOP_3:
7. Aplica#ii 2"3
CALL SERIAL_IN
MOV @R0,A
INC R0
DJNZ R$,LOOP_3
;ncheie un ciclu complet Ini#ializare comand! "i achizi#ie data convertit!
SERIAL_OUT: CLR P$.3
MOV R7,#08H
RL A
RL A
LOOP_OUT:
JB ACC.2,SET_OUT
CLR P$.2
JMP CLOCK_OUT
SET_OUT: SETB P$.2
CLOCK_OUT: SETB P$.3
CRL P$.3 ;Genereaz! semnalul SCLK
RL A
DJNZ R7,LOOP_OUT ;Transfer! un octet c!tre CAD
RET
SERIAL_IN: CLR P$.3
MOV R7,#08H
LOOP_IN:
JB P$.$,SET_IN
CLR ACC.0
JMP CLOCK_IN
SET_IN: SETB ACC.0
CLOCK_IN: SETB P$.3
CRL P$.3
RL A
DJNZ R7,LOOP_IN ;Recepteaz! un octet de la CAD
RET
7.".4 Convertor D/A controlabil serial
Aplica#ia pe care o vom descrie n continuare se refer! la comanda unui
convertor digital - analog cu intrare serial!, cum ar fi cele utilizate n cadrul
aparaturii audio de nalt! performan#!. Vom exemplifica aceasta prin circuitul
PCM56 convertor digital-analog de $6 bi#i. Structura convertorului este dat! n
figura 7.20. Cteva dintre caracteristicile convertorului sunt: domeniul dinamic de
peste 96 dB FSR, nu necesit! componente externe, $6 bi#i rezolu#ie, eroare liniar!
sub 0,00$%, timp de stabilire $,5 ms, opereaz! cu tensiuni ntre 5V "i $2V. LE
2"4 MICROCONTROLLERE
"Latch Enable", l!c!tuie"te informa#ia serial receptat! "i o aplic! convertorului la
momentul valid!rii l!c!tuirii.
Data este intrarea de "Date", ce sunt transmise n format complement fa#!
de 2, sincron cu semnalul de ceas "Clock". Am!nunte privind fronturile "i
sincronizarea datelor "i timming-ul corespunz!tor transferului unei date sunt
prezentate n figura 7.2$. Se constat! c! datele sunt transmise ncepnd cu cel mai
semnificativ octet, frontul negativ realizeaz! deplasarea acestora la dreapta bit de
bit. Frontul pozitiv reprezint! frontul pe care data este memorat! n registrul de
deplasare aflat pe intrarea convertorului digital-analog PCM56. Intrarea LE trebuie
s! stea pe $ logic cel pu#in un ciclu de ceas, ea plasndu-se pe durata transferului
serial al datelor pe 0 logic. La sfr"itul transferului ea va fi trecut! n $ logic pentru
cel pu#in $,5 perioade de ceas.
Figura 7. 2" Diagramele de timp ce ilustreaz! comanda convertorului PCM65
Figura 7. 20 Structura convertorului PCM56 (Fabricat de Burr-Brown)
7. Aplica#ii 2"5
Utiliznd microcontroller-ul AT89C205$ vom conecta liniile P$.7 la linia
Clock, P$.6 la linia Date, iar P$.5 la linia LE. D!m mai jos rutina care realizeaz!
comanda convertorului.
CT_TMOD EQU 2$H
;Setare mod functionare canale temporizatoare:
; canalul 0 utilizat pentru rata de e"antionare comand! programat n modul $
; canalul $ utilizat pentru rata de transfer serial programat n modul 2
CT_TCON EQU 50H
;Setez flag-urile de dezinhibare a num!r!rii pentru canalele 0 & $
CT_SCON EQU 90H
;Setez modul $ de transfer serial UART 8 bi#i pilotat cu rata variabil! de c!tre
;canalul $ temporizator
CT_LOW0 EQU 00H
CT_HIGH0 EQU 00H
CT_LOW$ EQU 0FDH
;Constanta de timp corespunz!toare ratei de 9600 Baud la f
ceas
=$$,059MHz
LEN_BUFFER EQU 20H ;Lungime prestabilit! a blocului
;de date de transferat. CONTOR_B este mai mic sau egal cu LEN_BUFFER
BSEG
REC BIT 0H
;Flag-ul setat exprim! recep#ia complet! a unui caracter via UART
RANG_DATA BIT $H
;Flag ce exprima byte-ul care este transferat c!tre CDA
DSEG
DATA_CDA: DS LEN_BUFFER ;Buffer bloc date
DATA_LOW DATA 00H ;LSB corespunz!tor datei de convertit D/A
DATA_HIGH DATA 00H ;MSB corespunz!tor datei de convertit D/A
;Loca#ii corespunz!toare datei transferate c!tre CDA n modul transfer cuvnt
DATA_SI DATA 00H ;Buffer de recep#ie a datelor (comenzi) via UART
CONTOR_B DATA 00H ;M!rime bloc de date de transferat c!tre CDA
POINTER_D SET DATA_CDA
CSEG
ORG 000H
BOOT:
JMP MAIN
ORG 0BH
ISRT0:
JMP ISR_T0
ORG 23H
ISRSI:
JMP ISR_SI
;Rutina corespunde transferului unui cuvnt c!tre CDA
ISR_T0: PUSH PSW
PUSH ACC ;Salvez starea microcontroller-ului
2"6 MICROCONTROLLERE
SETB PSW.3 ;Utilizez bancul $ de regi"trii generali
CLR P$.5
;Invalidez LE, => Posibilitate de scriere in buffer-ul de serializare al CDA
MOV R7,08H
;ncarc contor al bi#ilor de serializat corespunz!tor MSB
MOV A,DATA_HIGH ;ncarc MSB
LOOP_CDA$: RL A ;Rotesc informa#ia din Acumulator
CLR P$.7 ;Reset semnal Clock c!tre CDA
JB ACC.0,SET_BIT_CDA
CLR P$.6 ;Reset DATA c!tre CDA
CLK_CDA: SETB P$.7 ;Set semnal Clock c!tre CDA
DJNZ R7,LOOP_CDA$
JMP CONT
SET_BIT_CDA: SETB P$.6 ;Set DATA c!tre CDA
JMP CLK_CDA ;Am transmis MSB c!tre CDA, urmeaz! LSB
CONT: MOV R7,08H
MOV A,DATA_LOW
LOOP_CDA2: RL A
CLR P$.7 ;Reset semnal Clock c!tre CDA
JB ACC.0,SET_BIT_CDA$
CLR P$.6 ;Reset DATA c!tre CDA
CLK_CDA$: SETB P$.7 ;Set semnal Clock c!tre CDA
DJNZ R7,LOOP_CDA$
SETB P$.5
;L!c!tuiesc informa#ia transferat! serial n buffer-ul de ie"ire al CDA
CLR P$.5
;Revalidez accesul la buffer-ul de intrare (serial) al CDA
POP ACC
POP PSW ;Refac starea UC dinaintea intreruperii de timp
RETI
SET_BIT_CDA$:
SETB P$.6 ;Set DATA catre CDA
JMP CLK_CDA$
ISR_SI:
JB RI,RECEPTIE
TRANSMITE:
CLR TI
RETI
RECEPTIE:
MOV DATA_SI,SBUF
CLR RI
SETB REC
RETI
MAIN:
7. Aplica#ii 2"7
MOV R0,#7FH
LP:
MOV @R0,#00H
DJNZ R0,LP
;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului
MOV SP,70H
;Setez adresa pentru stiva sistemului
CALL INIT
;Realizez initializarile canalelor temporizatoare si a interfetei seriale
MOV IE,#92H
;Validez ntreruperile corespunz!toare canalului 0 temporizator "i UART
LOOP:
;Se va particulariza programul func#ie de protocolul dorit "i func#ie de
;particularit!#ile sistemului
JNB REC,LOOP
;Testare caracter recep#ionat "i comanda corespunzatoare codului asignat
; ................
CLR REC
;Reancla"are analiz! a unui eventual nou caracter recep#ionat via UART
JMP LOOP
INIT:
MOV TMOD,CT_TMOD
MOV TCON,CT_TCON
MOV TL0,#CT_LOW0
MOV TH0,#CT_HIGH0
MOV TL$,#CT_LOW$
SETB 0D7H
;Dublez rata de transfer serial a informa#iilor =>PCON.7=SCON=$
RET
END
7.".5 Programarea unui sistem de dozare gravimetric&
dotat cu microcontroller
Aplica#ia pe care o prezent!m reprezint! un cntar electronic necesar
dozarii materiilor prime pulverulente, bazat pe utilizarea unei balan#e electronice
ce prezint! o doz! tensometric! compensat! complet cu ajutorul c!reia se
determin! greutatea ansamblului cntar "i pulbere (figura 7.22).
Sistemul electronic de dozare a materiilor prime pulverulente este format
din dou! subsisteme principale:
$. Subsistemul mecanic, sub forma unui cntar diferen#ial de precizie
2"8 MICROCONTROLLERE
2. Subsistemul electronic de m!surare a tensiunii ap!rute n reazemul
c!tre sistemul de referin#! fix format din cadrul cntarului.
Principiul de func#ionare al cntarului dozator este acela de transformare a
greut!#ii corespunz!toare materiilor prime pulverulente n semnal electric prin
intermediul unui captor de for#! (Philips PR62$$). Acesta ofer! un semnal de
tensiune n diagonala unei pun#i tensometrice rezistive care este alimentat! de la o
surs! de tensiune de referin#!. Sensibilitatea senzorului este de 2mV/V, rezultnd la
o nc!rcare egal! cu cea maxim admis!, "i cu o tensiune de alimentare a pun#ii de
5V rezult! o diferen#! maxim! de tensiune de $0mV pe diagonala pun#ii de
m!surare.
Prelucrarea semnalului analogic de la captorul tensometric este realizat! n
dou! trepte de amplificare "i filtrare. Pentru semnalul amplificat, - domeniul de
varia#ie este 0-$0V el fiind aplicat unui convertor analog-digital ADS7805
(analog convertorului ADS782$), de $6 bi#i cel converte"te n semnal digital.
Sistemul digital este coordonat de c!tre un microcontroller de 8 bi#i Philips
PCB80C552 (analog unuia Intel 805$), ce dispune de 40 de linii digitale de
intrare/ie"ire, la care se adaug! 3 canale num!r!toare/temporizatoare, precum "i un
convertor analog/digital de $0 bi#i intern precum "i dou! ie"iri PWM (Pulse Width
Modulation). Microcontroller-ul posed! dou! interfe#e seriale, una standard UART
CONVERTOR
ANALOG-DIGITAL
PORT
INTRARE
AFISAJ SI
TASTATUR#
SISTEM DIGITAL
CU MICRO-
CONTROLLER
Captor
Tensometric
PREAMPLIFICATOR
AMPLIFICATOR
CNTAR
DIFERENTIAL
(PARTEA MECANIC#)
Figura 7. 22 Structura dozatorului gravimetric
7. Aplica#ii 2"9
(Universal Asyncronus Receiver Transmiter), "i una I
2
C care asigur! o rat! de
transfer mai bun! de 4Mbi#i/secund!. Memoria intern! a controller-ului este de 256
de bytes la care se adaug! regi"trii de func#ii speciale (Special Function Registers).
Sistemul dispune de dou! afi"oare, unul cu LED-uri cu "apte segmente,
necesar afi"!rii greut!#ii m!surate, iar al doilea cu LCD-uri 2x$6 caractere necesar
pentru ghidarea prin intermediul mesajelor a operatorului, precum "i o tastatur! cu
$2 taste multifunc#ionale.
Memoria sistemului este de 64Kbytes, dintre care 32Kbytes EPROM "i
32Kbytes SRAM.
Subsistemul mecanic asigur! transmiterea greut!#ii materiilor prime
pulverulente c!tre captorul tensometric prin demultiplicarea efortului pe acesta.
Factorul de demultiplicare al cntarului are expresia:

+ +
=
) ( 2
$
b a
a , unde:
a,b "i sunt dimensiuni ale bra#elor cntarului diferen#ial. Pentru dimensiunile de
a=78 mm, b=300 mm "i =$50 mm, factorul k va fi: k=0,08,
Subsistemul electronic de m!surare include captorul de for#! ce traduce
reac#iunea normal! aplicat! asupra sa n semnal electric de tensiune.
Iat! principalele caracteristici ale elementelor subsistemului:
Captorul de for#!: clas! de precizie: D$, respectiv 0,05% eroare integral!
de m!surare, (aceasta include toate erorile cea de zero, de neliniaritate, cea
corespunz!toare varia#iei temperaturii, etc). Rezisten#a de intrare a captorului $200
, rezisten#a de ie"ire 1200 , rezisten#a de izola#ie a m!rcilor captorului n raport
cu masa acestuia mai bun! 5000M. Tensiunea de alimentare a pun#ii
tensometrice este de 5V cc, ob#inu#i de la o surs! de tensiune REF02 (Burr Brown)
avnd o stabilitate excelent! n domeniul de temperaturi de la - $0 la +85C.
Preamplificatorul de semnal este implementat cu ajutorul unui circuit
INA$$4(Burr Brown), amplificator de m!surare integrat ce nu necesit! dect o
singur! rezisten#! extern! de setare a amplific!rii. Dintre caracteristicile sale
amintim: domeniu de tensiuni de alimentare: 2,25V la $8V, tensiune maxim! de
offset 50V, drift maxim 0,25V/C, CMRR mai bun de $$5dB, curent maxim de
polarizare pe intr!ri 2nA, domeniu temperaturilor de func#ionare ntre -40 "i
+85C, este protejat la scurtcircuit pe ie"ire, "i la supratensiuni pe intrare.
Circuitului i s-a setat o amplificare de $000.
Amplificatorul de semnal: este implementat cu acela"i tip de amplificator
ca "i preamplificatorul, amplificarea acestuia fiind de $,$3$6.
Convertorul analog-digital ADS7805, cu urm!toarele caracteristici: $6 bi#i
rezolu#ie, eroarea maxim! integral! 2-3 LSB (Last Signifiant Bit), f!r! coduri lips!,
necesit! doar tensiunea de 5V pe alimentare, domeniul de intrare $0V, codarea n
format complement fa#! de 2, rata de e"antionare maxim! $00 kHz, ie"irea
220 MICROCONTROLLERE
convertorului pe $6 bi#i se poate cupla direct la magistrala de date a sistemului
digital, domeniul temperaturilor de func#ionare 40 la +85C.
$3
Sistemul digital: asigur! comanda "i controlul de ansamblu, permite
implementarea func#iunilor de m!surare, prelucrare, memorare, dozare "i afi"are a
greut!#ii materiilor prime pulverulente.
Unitatea central! PCB80C552, dispune de o memorie intern! de 256 bytes,
iar sistemul de o memorie extern! de 64Kbytes( 32K EPROM /32KSRAM). Pentru
a se realiza func#iunile sistemului s-au ad!ugat porturi digitale de ie"ire "i intrare
de cte 8 bi#i fiecare, implementate cu circuitele 74LS374, 74LS574, respectiv
74LS244 "i 74LS574 care au o capabilitate n curent la ie"ire de 20-24mA/ie"ire.
Afi"ajul cu LCD-uri este implementat cu circuitul LTN2$$, circuit ce posed! un
microcontroller, memorie intern! "i un generator de caractere necesar afi"!rii a
pn! la 5$2 caractere diferite. Capacitatea acestuia este de 2x$6 caractere. Afi"orul
cu LED-uri este clasic, transferul informa#iilor binare c!tre acesta realizndu-se
serial (vezi schema pe CD). S-a prev!zut o plac! special! de ie"iri numerice pe
relee (4 buc!#i cu cte 2 contacte fiecare de cte 8 A), "i 8 intr!ri digitale izolate
galvanic. Tastatura sistemului cuprinde $2 taste scanate soft de c!tre procesor.
Dintre func#iunile pe care sistemul le implementeaz! amintim:
Dozarea n fluxul tehnologic a materiilor prime pulverulente
Filtrarea automat! a datelor de m!surare prin medierea unei serii de
e"antioane.
Tararea automat! realizat! la nceputul procesului de dozare, sau la
cereera operatorului.
Alte func#iuni implementate:
Presetare greutate de dozat
Presetare tempozare la sfr"itul procesului de dozare ( rezolu#ie $
secund!, domeniu 0 la 999s)
Presetare tempozare pentru pornirea amestec!torului ( rezolu#ie $
secund!, domeniu 0 la 999s)
Presetare tempozare la sfr"itul procesului de golire a cntarului (
rezolu#ie $ secund!, domeniu 0 la 999s)
Determinare TARA
Afi"are presetare greutate de dozat
Afi"are preset!ri temporiz!ri
Setare constant! de calibrare
Afi"are constant! de calibrare

$3
ATEN!IE: se recomand! buffer-area ie"irii convertorului cu buffer-e n tehnologie
Shotky pentru a nu permite traversarea convertorului de c!tre glich-uri ce pot apare pe
partea analogic! de prelucrare a informa#iilor. Ace"ti parazi#i pot afecta func#ionarea
corect! a sistemului!
7. Aplica#ii 22"
Transfer serial n format binar a greut!#ii m!surate n fazele de dozare
"i golire a cntarului (formatul datelor: asincron, rata 9600 Bauds, 8
bi#i/cuvnt, f!r! paritate, 2 bi#i de stop)
Sistemul permite reglarea anumitor parametrii ai s!i, precum: cantitatea
dozat!, temporiz!rile corespunz!toare diferitelor faze ale procesului de dozare.
Utiliznd sistemul de ntreruperi al procesorului putem declan"a procesul
de conversie la intervale de timp prestabilite pentru convertorul analog-digital de
semnal asigurnd e"antionarea uniform! a semnalului de greutate.
Programul complet de func#ionare al sistemului este nscris pe CD unde
este dat! "i schema sistemului utilizat pentru aceast! aplica#ie.
n continuare prezent!m cteva rutine care implementeaz! comanda unui
afi"or LCD, comanda unui afi"or realizat cu afi"oare cu cte 7 segmente (5
afi"oare), rutina de nmul#ire a dou! cifre de cte $6 bi#i fiecare "i explic!m modul
de utilizare a canalului "Watch Dog" pentru a evita ag!#area sistemului n cazul
apari#iei unor zgomote parazite la nivelul magistralei de sistem.
Scrierea c!tre un modul de afi"are LCD (LTN2$$, conectat la un port
paralel de adres! $00H), implic! realizarea unor ntrzieri necesare procesului de
transfer al datelor "i comenzilor. Implementarea acestora s-a realizat soft
(ntrziere prin execu#ia de instruc#iuni), c!ci pe de-o parte nu este critic! durata
temporizat!, iar pe de alt! parte n cadrul aplica#iei canalele
temporizatoare/num!r!toare au fost dedicate altor procese ce necesit! o precizie
mai ridicat!. Am utilizat MACRO-uri pentru scrierea acestor programe. n cadrul
rutinelor de ntrziere am avut grij! s! reanclan"!m periodic temporizatorul
"Watch Dog", pentru a evita generarea unui RESET al sistemului.
;Rutine pentru afisarea pe LCD
EXTERN WAIT
WAITVL MACRO
;Macro ce realizeaz! o ntrziere de
LOCAL B_0,B_$,B_2 ;Etichete definite local n cadrul MACRO
MOV R5,#20H ("2) ;Ini#ializeaz! R5 cu valoarea de ciclare 32
B_$: MOV R6,#0FFH ("2) ;Ini#ializeaz! R6 cu valoarea de ciclare 255
B_0: MOV R7,#0FFH ("2) ;Ini#ializeaz! R6 cu valoarea de ciclare 255
B_2: DJNZ R7,B_2 (24) ;Decrementeaz! contoare pe rnd
DJNZ R6,B_0 (24) ;Decrementeaz! contoare pe rnd
ORL PCON,#$0H("2)
MOV T3,#00H ("2)
DJNZ R5,B_$ (24) ;Decrementeaz! contoare pe rnd
ENDM
n partea dreapt! a mnemonicelor s-au men#ionat num!rul de perioade de
ceas necesare execu#iei instuc#iunilor. Considernd frecven#a de ceas egal! cu $2
MHz, vom ob#ine temporizarea de: 4,$92secunde.
Men#ion!m c! regi"trii R5, R6 "i R7 sunt utiliza#i drept contoare
WAITL MACRO
222 MICROCONTROLLERE
LOCAL B_0,B_$,B_2
MOV R6,#04H
B_0: MOV R7,#0FFH
B_2: DJNZ R7,B_2
;Anclansare WATCH DOG
ORL PCON,#$0H
MOV T3,#00H
DJNZ R6,B_0
ENDM ;Temporizarea de: 0,002048secunde.
;Registrul este pointer-ul n buffer-ul de mesaj de scris la afi"or LCD
;Registrul DPTR este pointer-ul c!tre portul microsistemului la care se afl! afi"orul
;LCD
BUCLA:
MOV A,#0 ;Pointer la buffer-ul de mesaj
MOVC A,@A+DPTR ;Rutina de scriere mesaj la LCD
INC DPTR
MOV R0,DPL
MOV R$,DPH
MOV DPL,R3
MOV DPH,R4
WAIT
ORL PCON,#$0H ; Setare flag corespunz!tor WATCH DOG
MOV T3,#00H ;Anclan"are WATCH DOG: scrie constanta
MOVX @DPTR,A ;Scrie caracterul c!tre LCD
MOV DPL,R0
MOV DPH,R$
DJNZ R2,BUCLA
MOV DPL,R3
MOV DPH,R4
MOV A,#2
MOVX @DPTR,A
;Scrie comanda de avans cu un caracter la afi"orul LCD
WAIT
RET
;Rutin! de scriere a mesajelor c!tre afi"orul LCD
;MESAJ$ "i MESAJ2 adresele de nceput pentru mesajele de afi"at pe primul
;respectiv, pe al doilea rnd al afi"ajului
LCD_PRINT MACRO #MESAJ$,#MESAJ2
MOV DPTR,#$00H ;Adresa de scriere la LCD
MOV A,#$ ;Selec#ie func#ie:
MOVX @DPTR,A ;DISPLAY / CLEAR LCD
WAITL
MOV A,#80H ;Selec#ie func#ie Cursor plasat pe:
MOVX @DPTR,A ;RNDUL $
7. Aplica#ii 223
WAIT
MOV R2,#$0H;ncarc! contor caractere ce vor fi afi"ate pe r-dul $
MOV DPTR,#$0$H ;ncarc! adresa de scriere c!tre afi"orul LCD
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ$ ;ncarc! pointer c!tre mesajul de afi"at
MOV R0,DPL
MOV R$,DPH
WAITL
CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.)
WAITL
MOV DPTR,#$00H
MOV A,#0C0H
MOVX @DPTR,A; Comand! saltul la rndul 2 al afi"orului
WAIT
MOV DPTR,#$0$H
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ2 ;ncarc! pointer c!tre mesajul de afi"at
MOV R0,DPL
MOV R$,DPH
MOV R2,#$0H ;Contor de caractere Rnd 2
WAITL
CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.)
WAITL
ENDM
n continuare prezent!m rutina de nmul#ire ntreag! a dou! valori
memorate n loca#iile OP$ "i OP2 (loca#ii de $6 bi#i fiecare). n loca#iile MREZ$,
MREZ2, MREZ3 "i MREZ4 (8 bi#i fiecare), n ordinea cresc!toare a rangului, vom
ob#ine rezultatul nmul#irii. Rutina va genera produsul celor doi operanzi, iar flag-
ul C va fi afectat la dep!"irea buffer-ului rezultat.
Notnd cu N$H "i N$L, respectiv cu N2H "i N2L octe#ii corespunz!tori
celor dou! numere, acestea pot fi scrise astfel: N$=256*N$H+N$L, iar
N2=256*N2H+N2L. (N$L=LOW($),N2L=LOW(N2), iar N$H=HIGH(N$)
N2L=HIGH(N2)).
nmul#indu-le ob#inem:
N$*N2=65536*N$H*N2H+256*(N$H*N2L+N2H*N$L)+N$L*N2L. Execu#ia
acestei nmul#iri se va face ncepnd de la dreapta spre stnga, #inndu-se cont de
eventualul bit de transport ce poate apare la execu#ia opera#iilor.
M$6:
MOV B,OP$L ;ncarc! n B pe N$L
MOV A,OP2L ;ncarc! n A pe N2L
MUL AB ;Execut! N$L*N2L
224 MICROCONTROLLERE
MOV MREZ$,A ;Re#ine LSB rezultat din nmul#irea
N$L*N2L
MOV MREZ2,B ;Re#ine MSB rezultat din nm. N$L*N2L
MOV A,OP2H
MOV B,OP$L
MUL AB ;Execut! produsul: N2H*N$L
ADD A,MREZ2 ;Adun!: LSB(N2H*N$L)+MSB(N$L*N2L)
MOV MREZ2,A ;Salveaz! rezultatul
MOV A,B ;Transfer! n registrul A=MSB(N2H*N$L)
ADDC A,MREZ3 ;Adun! cu transport n A=MSB(N2H*N$L)
MOV MREZ3,A ;Transfer! rezultat n MREZ3
MOV A,OP$H
MOV B,OP2L
MUL AB ;Execut! produsul:N$H*N2L
ADD A,MREZ2
;Adun!: LSB(N$H*N2L)+LSB(LSB(N2H*N$L)+MSB(N$L*N2L))
MOV MREZ2,A ;Transfer! rezulatul n MREZ2
MOV A,B ;Transfer! MSB(N$H*N2L) n registrul A
ADDC A,MREZ3
MOV MREZ3,A
;Re#ine n MREZ3,MREZ2 "i MREZ$ expresia calculat!:
;256*(N$H*N2L+N2H*N$L)+N$L*N2L
;De observat c! mul#irea cu 256 este specificat! prin loca#ia n care rezultatele sunt
;salvate, dup! regula rangul cel mai ridicat este plasat la o adres! mai mare
MOV A,OP$H
MOV B,OP2H
MUL AB ;Execut! produsul N$H*N2H
ADD A,MREZ3
MOV MREZ3,A ;Salvez LSB(N$H*N2H)
MOV A,B
ADDC A,MREZ4
MOV MREZ4,A ;Salvez MSB(N$H*N2H)
RET
NR_OCT DATA $3H ;Index octe#i serializa#i
SERBUF DATA 2$H ;Loca#ie octet de serializat c!tre afi"oare
;Loca#iile E3 "i E4 reprezint! bi#ii 3, respectiv 4 ai Acumulatorului
SERPIN$ BIT 0E3H ;Ie"ire clock registru intrare serial!/ie"ire paralel!
SERPIN0 BIT 0E4H ;Ie"ire date registru de deplasare (MMC40$5)
BIT_0 BIT 8 ;Bitul 0 al loca#iei SERBUF (2$H)
BIT_$ BIT 9 ;Bitul $ al loca#iei SERBUF (2$H)
BIT_2 BIT 0AH ;Bitul 2 al loca#iei SERBUF (2$H)
BIT_3 BIT 0BH ;Bitul 3 al loca#iei SERBUF (2$H)
BIT_4 BIT 0CH ;Bitul 4 al loca#iei SERBUF (2$H)
BIT_5 BIT 0DH ;Bitul 5 al loca#iei SERBUF (2$H)
7. Aplica#ii 225
BIT_6 BIT 0EH ;Bitul 6 al loca#iei SERBUF (2$H)
BIT_7 BIT 0FH ;Bitul 7 al loca#iei SERBUF (2$H)
BUF_AF: DB 0$H,23H,45H,67H,89H;Zon! memorare informa#ii
DB $$H,$$H,$$H,$$H,$$H ;de afi"at.
DB 22H,22H,22H,22H,22H ;Valori de TEST
DB 33H,33H,33H,33H,33H
; Refresh afi"oare
MOV SP,#70H ;Setare adres! de baz! stiv!
MOV NR_OCT,#0 ;ni#ializare contor
MOV DPTR,#(BUF_AF-$) ;Ini#ializare pointer
LOOP_BY: INC DPTR ;Incrementare pointer
MOVXA,@DPTR ;Cite"te primul caracter (num!r)
MOV SERBUF,A
PUSH DPH
PUSH DPL ;Re#ine n stiv! DPTR
MOV DPTR,#$20H
;ncarc! n DPTR adresa portului pentru afi"oarele cu 7 segmente
Bi#ii 3 "i 4 sunt folosi#i pentru transferul semnalelor de CLOCK "i respectiv DATE
CLR SERPIN$ ;Pune pe zero linia de CLOCK
MOV C,BIT_7 ;Transfer! n C falg bitul 7 al datei de serializat
MOV SERPIN0,C ;Scrie bitul respectiv ca bit 4 al reg.A
MOVX@DPTR,A;Scrie la portul de adres! $20H primul bit MSB
SETB SERPIN$
MOVX@DPTR,A ;Pune linia CLOCK pe $ logic
;Repet! pa"ii corepunz!tori bitului 7 pentru bitul 6 al datei de transmis
CLR SERPIN$
MOV C,BIT_6
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul 5
MOV C,BIT_5
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul 4
MOV C,BIT_4
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul 3
226 MICROCONTROLLERE
MOV C,BIT_3
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul 2
MOV C,BIT_2
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul $
MOV C,BIT_$
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
CLR SERPIN$ ;Idem bitul 0
MOV C,BIT_0
MOV SERPIN0,C
MOVX@DPTR,A
SETB SERPIN$
MOVX@DPTR,A
,0;Reface din stiv! pointer-ul de adresare pentru buffer-ul de date
POP DPL
POP DPH
INC NR_OCT ;Incrementeaz! contorul de transfer octe#i
MOV A,NR_OCT
CJNE A,#5,LOP_BY ;5 reprezint! num!rul de afi"oare 7 seg.
;Testeaz! dac! au fost serializate toate informa#iile
JMP EXIT ;Ie"ire din rutin!
LOP_BY: JMP LOOP_BY
EXIT:
n leg!tur! cu utilizarea canalului Watch Dog (WD) trebuie s! ar!t!m
urm!toarele: a"a cum s-a precizat n capitolele $, 2 "i 4 rolul acestui canal
temporizator const! n generarea unui RESET-hard atunci cnd el atinge
starea"overflow", respectiv are loc tranzi#ia de la $$$$$$$$B la 00000000B.
nc!rcnd o anume constant! de timp exprimabil! pe 8 bi#i, putem
modifica intervalul de timp dup! care, dac! nu este renc!rcat! constanta,
respectivul canal temporizator va genera semnalul de RESET.
n cazul nostru, sistemul a prezentat o "sensibilitate" ini#ial! relativ
important! la zgomotele din mediul industrial. De aceea am adoptat urm!toarea
solu#ie: am setat la 256*$6s perioada temporizat! de c!tre WatchDog "i periodic
n programul de func#ionare, am reanclan"at WD prin renc!rcarea constantei de
7. Aplica#ii 227
timp mai sus precizate. Cum sistemul este un sistem de comand! "i control
(comanda elementelor auxiliare ale dozatorului care realizeaz! umplerea automat!
a sa, precum "i un sistem de m!surare, c!ci sistemul cnt!re"te o anumit! cantitate
ce este prescris! pe fluxul tehnologic), cu un num!r de 8 st!ri, acestea au fost
numerotate "i stocate mpreun! cu restul variabilelor att n memoria intern! ct "i
n cea extins! a microcontroller-ului. Actualizarea st!rii s-a realizat de fiecare dat!
imediat dup! ce starea respectiv! a ap!rut. Rutina de ini#ializare a sistemului a fost
modificat! astfel nct dup! fiecare RESET, s! analizeze starea sistemului "i
func#ie de aceasta s! realizeze saltul la nceputul programului corespunz!tor st!rii.
Enumer!m st!rile principale ale sistemului "i variabilele ce sunt modificate
n concordan#! cu acestea.
0=stare a"teptare programare / comand! sistem Variabilele: DOZ=0 "i PRG=0
$=stare programare sistem de la tastatur! implic! Variabilele: PRG=$ "i DOZ=0
2=stare dozare: Variabilele: PRG=0 "i DOZ=$
3=stare temporizare$ Variabilele PRG=0 "i DOZ=0
4=stare temporizare2 Variabilele PRG=0 "i DOZ=0
5=stare temporizare3 Variabilele PRG=0 "i DOZ=0
6=stare aseptare comand! manual! de golire
7=stare temporizare la comanda clapei de golire
8 stare de temporizare pentru blocarea clapetei de golire
Sistemul este supervizat de un calculator de proces ce asigur! integrarea sa
pe linia tehnologic!, dar poate func#iona "i autonom, caz n care operatorul poate
interveni pentru a goli manual containerul dozatorului.
Prezent!m n continuare acea parte din programul de func#ionare ce
realizeaz! directarea corespunz!toare a execu#iei dup! ce s-a generat semnalul de
RESET.
MAIN:
ANL IE,#00H ;Invalidate ntreruperile
MOV DPTR,#HPRT_O2
MOV A,#00H
MOV PORT_O2,A
;Opre"te motor ce introduce materie pulverulent! n cntar - comanda este dictat!
;de fluxul tehnologic specific
MOV R0,#7FH
INIT_$:MOV @R0,#00H
DJNZ R0,INIT_$ ;Ini#ializare memorie intern! cu 0
ORL TCON,#0CH
;Valideaz! activarea ntreruperilor exeterne de stare $ pe front - se evit! astfel
;reanclan"area ntreruperilor n cazul cnd nivelul semnalului r!mne prea mult
;timp n 0 logic.
MOV SP,#6EH ;Pozi#ionare stiv! sistem la adresa 6EH
;Testare stare sistem - este executat! pentru o eventual! resetare ca urmare a
;ac#iunii Watch Dog-ului, care genereaz! ceea ce se cheam! "Warm Boot"
228 MICROCONTROLLERE
MOV R0,#0D0H ;Loca#ia D0 re#ine STAREA sistemului
$4
MOV A,@R0
;Starea 0 corespunde situa#iei de RESET la pornirea sistemului "COLD RESET"
CJNE A,#5AH,PRIM_RESET ;n caz de COLD RESET
;Valoarea 5AH la loca#ia D0H exprim! execu#ia unui "Warm Boot" ca urmare a
;for#!rii de c!tre WD a unui semnal de RESET pentru sistem.
MOV PORT_O$,#03h
;Reprezint! traiectoria programului n caz de Warm RESET
MOV DPTR,#HPRT_O$
MOV A,PORT_O$
MOVX@DPTR,A ;Comand! de refacere stare port "port0$" de
comand!
ERR_RESET:
MOV R0,#90H
MOV R$,#57H
MOV R2,#23
;Preg!tire registre pentru transferul pe bloc al informa#iilor de stare
;Registrul R0 este pointer-ul surs!, registrul R$ este pointer-ul destina#ie "i
;registrul R2 este contorul utilizat pentru transferul blocului de date de stare (23D -
;lungimea acestuia), din memoria intern! extins!
$5
n memoria SRAM ncepnd de
;la adresa 57H
ERR_LOOP$:
MOV A,@R0 ;Copiaz! informa#ie surs! n registrul A
MOV @R$,A ;Slaveaz! registrul A n memoria intern!
INC R$
INC R0 ;Incrementeaz! pointerii
DJNZ R2,ERR_LOOP$ ;Execut& copiere bloc de la 90H
la 57H
ORL PCON,#$0H
MOV T3,#00H ;Anclan"are WATCH DOG
;Aceast! opera#ie trebuie realizat! periodic la execu#ia programului pentru a
;preveni generarea unui semnal de RESET
MOV A,STARE ;Loca#ia re#ine ultima stare postat!.
Indexarea ;st!rilor este f!cut! natural n ordinea de apari#ie a acestora
;Postarea indexului st!rii se face ntotdeauna dup! ce starea respectiv! a fost atins!.

$4
Am plasat n zona de memorie intern! extins! o copie a tuturor variabilelor de stare
importante, c!ci pe de-o parte memoria RAM intern! a fost utilizat! pn! la limita ei fizic!,
iar pe de alt! parte memoria extins! poate fi cu o probabiliate net mai redus! afectat! de
erori, c!ci ea este accesat! doar prin instruc#iunea MOV @R0,A (deci indirect)
$5
Procesorul 80C552 prezint! o memorie intern! extins! (256 bytes), dintre care primii $28
sunt identici cu cei ai procesoarelor 805$, iar urm!torii sunt "umbri#i" de zona SFR a UC.
Accesarea lor poate fi f!cut! doar indirect prin intermediul registrului R0.
7. Aplica#ii 229
CJNE A,#00,ERR_RESET2 ;Testare "COLD RESET"
$6
-stare 0
JMP ERR_RESET$
ERR_RESET2:
CJNE A,#0$H,ERR_RESET3 ;Testare - stare $
JMP ERR_RESET$ ;Revenire la starea $
ERR_RESET3:
CJNE A,#02H,ERR_RESET4 ;Testare stare 2 -
MOV DPTR,#ERR_END_DOZ ;Stare DOZARE
PUSH DPL
PUSH DPH
SETB DOZ
;Se reia procesul de dozare cu considerarea greut!#ii dozate pn! la momentul
;apari#iei incidentului
$7
JMP ERR_DOZ
ERR_RESET4:
CJNE A,#03H,ERR_RESET5 ;Testare stare 3
JMP ERR_TEMPO$
ERR_RESET5:
CJNE A,#04H,ERR_RESET6 ;Testare stare 4
JMP ERR_WAIT_STGOL
ERR_RESET6:
CJNE A,#05H,ERR_RESET7 ;Testare stare 5
JMP ERR_TEMPO3
;Eroare aparut! n bucla de a"teptare ap!sare buton pentru golirea containerului
ERR_RESET7:
CJNE A,#06H,ERR_RESET8 ;Testare stare 6
JMP ERR_TEMPO2
ERR_RESET8:
CJNE A,#07H,ERR_RESET9 ;Testare stare 7
JMP GOLIRE
ERR_RESET9:
CJNE A,#08H,ERR_RESET$ ;Testare stare 8
JMP ERR_TEMPO_GOL
PRIM_RESET: ;Programul de ini#ializare la Cold Reset
MOV R2,#7FH
MOV R0,#0FFH
INIT_2: MOV @R0,#00H

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

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