Sunteți pe pagina 1din 235

PREFA

Se consider anul 1971, cnd INTEL a anunat 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 puin simplificat pentru a putea fi implementat, la vremea
aceea, pe un singur chip n siliciu. Iniial, microprocesorul nu a fost un computeron-a-chip, dei n timp a ajuns la acest stadiu; conceptul de microprocesor s-a
dezvoltat i spre alte implementri 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 msur 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 fiina 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 funcie de aplicare/utilizare.
Aplicaiile care nu sunt, n sensul clasic, sisteme digitale de calcul sunt n general
implementate pe baz de microprocesor sau DSP. Implementrile 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.
Fora 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
aprut implementrile pe baz de circuite ASIC (Application Specific Integrated
Circuits). Spre deosebire de sistemele pe baz de microcontroller, unde
funcionarea dorit se obine, n software, printr-un anumit program, la sistemele
pe baz de circuite ASIC funcionarea dorit se obine prin structurarea hardwareului cu un anumit program. Alegerea ntre o implementare pe baz de
microcontroller, o implementare pe baz de circuit ASIC sau una combinat
depinde de aplicaia respectiv i de cerinele impuse.
Prezenta carte constituie un material, dar fr a absolutiza, pentru
abordarea sistemelor pe baz de microcontroller. Materialul prezentat i CD-ul

VI

MICROCONTROLLERE

alturat asigur un traseu de la descrierea funcionrii unui microcontroller generic,


dar i cu exemplificri 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 faa avalanei 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 Braov, program care a avut printre obiective i sprijinul dezvoltrii 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 specialiti 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
tranziie, cum este a noastr, care dorete s se impun, formarea de personal care
s tie s proiecteze/implementeze/exploateze sisteme pe baz de microcontroller
este o necesitate prioritar.
Mulumim tuturor celor care ne-au sprijinit, colegilor Catedrei de
Electronic i Calculatoare, d-l asist. ing. Rzvan Brtucu 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 Braov precum i studenilor aceleiai universiti.

Braov, Ianuarie 2001

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 APLICAIE _____________________________ 43
2.1.1 Generaliti __________________________________________________ 43
2.1.2 Instruciuni 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 instruciuni ___________________________________________ 76
3.1.5 Sistemul de ntreruperi _________________________________________ 77
3.1.6 Interfee 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 Interfee i periferice on-chip ____________________________________ 91
3.2.3 Programarea memoriei EEPROM ________________________________ 96
3.3 MC PE 16 BII - 6816_______________________________________________ 97
3.3.1 Modulul de integrare (SIM, System Integration Module) ______________ 98
3.3.2 Interfee_____________________________________________________ 98
3.4 MC PE 32 DE BII - 68300 ___________________________________________ 99
3.5 DATE COMPARATIVE PENTRU MC MOTOROLA CISC_____________________ 100

VIII

MICROCONTROLLERE

FAMILIA MCS-51 _____________________________________________________ 101


4.1 STRUCTURA I FUNCIONAREA _______________________________________ 102
4.1.1 Gestionarea memoriei_________________________________________ 104
4.1.2 Circuitele timer ______________________________________________ 104
4.1.3 Interfaa 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 instruciuni 8051 ______________________________________ 108
4.2.2 Modurile de adresare _________________________________________ 110
4.3 ALTE INTERFEE I PERIFERICE ON-CHIP ______________________________ 111
4.3.1 Interfaa I2C (Siemens P80CL580) _______________________________ 111
4.3.2 Aria de numrtoare 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 PROIECTRII SISTEMELOR CU MC __________________________ 143
6.3 PROIECTAREA SISTEMELOR CU MC N VEDEREA SIGURANEI N EXPLOATARE __ 145
6.3.1 Cablajul imprimat ____________________________________________ 146
6.3.2 Ceasul de gard______________________________________________ 147
6.3.3 Programarea defensiv ________________________________________ 147
APLICAII___________________________________________________________ 149
7.1 IMPLEMENTAREA UNEI APLICAII 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 INTERFEELOR LA PROCES ___________________ 181
7.2.1 Convertoare A/D controlabile serial ______________________________ 182
7.2.2 Interfaarea 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 evoluia istoric a operaiei 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 stri de la un proces sau un aspect al mediului
nconjurtor. La nceput un controller era un echipament de mari dimensiuni. Dup
apariia microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de
miniaturizare a continuat, toate componentele necesare unui controller au fost
integrate pe acelai chip. S-a nscut astfel calculatorul pe un singur chip specializat
pentru implementarea operaiilor de control; acesta este microcontroller-ul. Un
microcontroller este un circuit realizat pe un singur chip care conine tipic:

unitatea central;
generatorul de tact (la care trebuie adugat din exterior un cristal de cuar
sau n aplicaii mai puin pretenioase, un circuit RC);
memoria volatil (RAM);
memoria nevolatil (ROM/PROM/EPROM/EEPROM);
dispozitive I/O seriale i paralele;
controller de ntreruperi, controller DMA, numrtoare/temporizatoare
(timers), covertoare A/D i D/A, etc.;
periferice.

Preul unui MC este redus din cauza cantitilor mari n care se fabric.
Preul mic al MC aduce cu sine i micorarea preului sistemelor de control (se
micoreaz inclusiv costul proiectrii).
Diferenele dintre microprocesor i unitatea central a MC se atenueaz n
timp. Astfel, marii constructori de procesoare au realizat nite circuite care s-ar
putea numi super-microcontroller-e, aa cum sunt Motorola 68EC300, INTEL
386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.

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 funcia.
Importana MC este dovedit incontestabil de piaa care este n continu
cretere. Astfel, evoluia vnzrilor de MC n lume se reflrct n tabelele 1.1 i 1.2.
Tabelul 1.1
Evoluia vnzrilor MC n lume (n milioane dolari)

MC

'90

'92

'94

'96

'97

'98

4-bit
8-bit
16-bit

1393
2077
192

1596
2862
340

1761
4689
810

1849
6553
1628

1881
7529
2191

1856
8423
2969

'99
(estimat)
1816
9219
3678

'00
(estimat)
1757
9715
4405
Tabelul 1.2

Evoluia vnzrilor MC n lume (n milioane buci)

MC

'90

'92

'94

'96

'97

'98

4-bit
8-bit
16-bit

778
588
22

979
843
45

1063
1449
106

1100
2123
227

1096
2374
313

1064
2556
419

'99
(estimat)
1025
2681
501

'00
(estimat)
970
2700
585

Principalii productori de microprocesoare au realizat n 1994 i 1995


urmtoarele cifre de afaceri (tabelul 1.3).
Tabelul 1.3
Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microprocesoare
(n milioane dolari)

Productor
Intel
AMD
Motorola
IBM
TI
Cyrix
Hitachi
NEC
LSI Logic
IDT

1994
10800
881
781
468
219
210
188
100
58
45

1995
8036
992
827
297
202
240
66
82
51
25

1. Descriere general

n prezent datele arat modificri de structur; de exemplu cifra de afaceri


a AMD se apropie de cea a lui INTEL. Cifra de afaceri, ca ordin de mrime, era
deja n anii 1994, 1995 apropiat de cea realizat din vnzri de microprocesoare
(tabelul 1.4).
Tabelul 1.4
Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microcontrollere
(n milioane dolari)

Productor
Motorola
NEC
Mitsubishi
Hitachi
Intel
TI
Philips
Matsushita
Lucent (AT&T)
Toshiba

1.2

1994
1781
1421
945
899
835
807
524
500
492
400

1995
1511
1208
708
782
605
534
345
413
275
328

SCHEMA BLOC GENERAL

Vom defini un microcontroller pornind de la o reprezentare simplificat a


sa n interaciune cu mediul (figura 1.1).
Programe

Memoria

Intrri

Unitatea
central
de
prelucrare

Ieiri

Generator de
tact
Figura 1.1 Schema simplificat a unui microcontoller

MICROCONTROLLERE

Ca intrri se folosesc de regul semnale provenind de la comutatoarele


individuale sau de la traductoare (de temperatur, de presiune, foto, traductoare
specializate). Intrrile pot fi digitale sau analogice. Intrrile digitale vehiculeaz
semnale discrete, informaia "citit" fiind informaia ce se eantioneaz la
momentul citirii liniei respective. Intrrile analogice vehiculeaz informaii
exprimabile prin funcii continue de timp. "Citirea" acestora de ctre
microcontroller presupune prezena unor circuite capabile s prelucreze aceste
informaii, fie comparatoare analogice, fie convertoare analog-numerice, ale cror
ieiri sunt citite de ctre MC.
Ieirile sunt fie analogice, caz n care reprezint de fapt ieiri ale
convertoarelor numeric-analogice, fie sunt digitale, caz n care informaia este n
general memorat pe acestea pn la o nou scriere operat de ctre UC la un port
al MC. Ieirile pot comanda dispozitive de afiare, relee, motoare, difuzoare, etc.
O structur mai detaliat, care include blocurile principale, este
reprezentat n figura 1.2.

Bus de
adrese
Intrri
digitale

Memorie pentru
programe

Bus de
date

Memorie pentru
date

Dispozitive I/O

Reset

Unitatea centrala de prelucrare


(UCP)

Oscilator

Figura 1.2 Schema bloc a unui microcontroller

Ieiri
digitale

1. Descriere general

Se poate distinge o prim diferen fa de calculatoarele personale, unde


intrrile se fac de regul de la tastatur i ieirile pe monitorul TV sau la
imprimant. Dac un calculator personal este folosit pentru a prelucra informaii i
a afia rezultatele pe monitor sau hrtie, un MC comand un proces.
Un element important, fr de care un MC nu poate funciona, 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 acelai chip mai conine
memorie i o serie de interfee. Natura i complexitatea aplicaiei n care este
folosit MC determin performanele unitii centrale, capacitatea de memorie i
tipul interfeelor ce compun structura intern a MC.

1.3

ARHITECTURA MC

Arhitectura unui MC definete atributele sistemului aa cum sunt ele


vzute de un programator n limbaj de asamblare. Deoarece un microcontroller este
un caz particular de calculator, (calculator specializat pentru operaii 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 ieire. 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. Unitile de intrare i ieire 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. Mrimea acestor magistrale constituie una dintre caracteristicile cele mai
importante ale unui MC. Prin magistrala de adrese unitatea central de prelucrare
(UCP) selecteaz o locaie de memorie sau un dispozitiv I/O, iar pe magistrala de
date se face schimbul de informaie ntre UCP i memorie sau dispozitivele I/O.
ntre UCP i memorie sunt transferate att date ct i instruciuni. Acestea se pot
transfera pe o singur magistral de date sau pe magistrale de date diferite.
Arhitectura von Neumann prevede existena unui bus unic folosit pentru
circulaia datelor i a instruciunilor. Cnd un controller cu o astfel de arhitectur
adreseaz memoria, bus-ul de date este folosit pentru a transfera nti codul
instruciunii, apoi pentru a transfera date. Accesul fiind realizat n 2 pai, este
destul de lent.
Arhitectura Harvard prevede un bus separat pentru date i instruciuni.
Cnd codul instruciunii se afl pe bus-ul de instruciuni, pe bus-ul de date se afl

MICROCONTROLLERE

datele instruciunii anterioare. Structura MC este mai complex, dar performanele


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 funcionare. n
regimuri speciale de funcionare, numite diferit la diferitele tipuri de MC,
semnalele magistralelor de adrese i de date sunt accesibile la nivel de pin
sacrificnd funciile iniiale ale pin-ilor respectivi. Totodat este necesar s fie
livrate n exterior i semnale de comand (cel puin comand de scriere WR i
comand de citire RD). Aceast facilitate este util pentru extensii de memorie
sau pentru a ataa sistemului interfee suplimentare. Ea nu este posibil n mod
normal de funcionare deoarece aceasta ar presupune existena unui numr 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-51 este un exemplu
pentru acces multiplexat la magistrale. Accesul se face n doi pai; n primul pas se
conecteaz liniile de adres la pinii portului sacrificat, iar n al doilea pas se
conecteaz datele la aceiai pini. Pentru a putea utiliza informaia 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 raiunea meninerii unui numr ct mai mic de pini la capsul. MC
mai puin performante (ex. - MC low cost) nu au magistralele interne accesibile la
nivel de pin.
Ca urmare a celor prezentate se poate aprecia performana unui MC din
punct de vedere al magistralei interne dup urmtoarele 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 seciunea responsabil cu efectuarea
operaiilor aritmetice i logice asupra operanzilor ce i sunt furnizai. Modul de
implementare a operaiilor este transparent pentru utilizator; important pentru
utilizatorul de MC este repertoriul operaiilor implementate pentru a aprecia
posibilitatea implementrii optime a aplicaiei particulare de control. De asemenea
este important timpul de execuie al fiecrei operaii pentru a aprecia dac timpul
necesar procesrii complete satisface cerinele de timp ale aplicaiei.
Unitatea ce control este responsabil cu decodificarea codului operaiei
coninut de codul unei instruciuni. Pe baza decodificrii unitatea de control

1. Descriere general

elaboreaz semnale pentru comanda celorlalte blocuri funcionale pentru a finaliza


executarea unei instruciuni. Modul de implementare al acestui bloc este de
asemenea transparent utilizatorului.
Unitatea central de prelucrare conine un set de registre interne, similare
unor locaii de memorie, folosite pentru memorarea unor date des apelate sau
pentru programarea unor anumite funcii. 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 operaiei aritmetice sau logice.
PC (Program Counter) registru numrtor de program - este registrul
care stocheaz adresa urmtoarei instruciuni de executat. Dup un RESET
(iniializarea MC), registrul PC se ncarc dintr-o locaie de memorie numit vector
de reset. Aceast locaie conine adresa primei instruciuni de executat. PC este
incrementat automat la execuia unei instruciuni.
SP (Stack Pointer) registrul indicator de stiv - coninutul acestui registru
indic adresa curent a stivei. Stiva reprezint o zon de memorie accesibil rapid
n care se depun temporar informaii importante n desfurarea programului. Stiva
este definit de obicei n RAM. Implementarea accesului presupune existena unui
registru de adresare (SP) i a mecanismului de memorare declanat de instruciuni
specifice (instruciunile PUSH/POP).
Un aspect important ce se reflect n arhitectura unui MC este modul de
programare. Prin arhitectur nelegem felul n care sunt dispuse "resursele" unui
MC. Cu ct structura, funcionalitatea i accesul la acestea sunt mai profund
standardizate i simetrizate, cu att numrul de instruciuni de care dispune MC
este mai redus i viteza de execuie a programelor crete.
Conceptul CISC (Complex Instruction Set Computer) pe baza cruia sunt
construite majoritatea MC, prevede existena unui numr mare de instruciuni (tipic
>80), ceea ce face mai uoar munca programatorului. Multe din instruciuni sunt
specializate, adic se pot folosi doar n anumite moduri de adresare sau cu anumite
registre.
Evoluia MC este spre arhitectura RISC (Reduced Instruction Set
Computer), n cadrul creia un MC are un numr mic de instruciuni. Avantajele
sunt un chip mai mic, cu un numr de pini mai mic, cu un consum mai redus i cu
o vitez mai mare. Instruciunile sunt simetrice, adic pot fi folosite la fel n orice
mod de adresare sau cu orice registru, nu au excepii sau restricii.
n prezent un MC este cu mai mult dect o arhitectur RISC, el este cu o
arhitectur SISC (Specific ISC). Instruciunile sunt specifice pentru a lucra optim
cu dispozitivele I/O, permit manipularea la nivel de bit i sunt mai puine
instruciuni de uz general, aa cum ntlnim la microprocesoarele 8086, 68000 etc.
n general MC cu arhitectur CISC dispun de un numr redus de registre.
Acestea au funcii determinate (acumulator, registru index,etc), iar MC cu
arhitectur RISC dispun de un numr 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)

MICROCONTROLLERE

Registrele interne pot avea diferite dimensiuni, astfel registrele acumulator


au dimensiunea egal cu cea a magistralei de date (8, 16 sau 32 bii). Registrul
numrtor 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 permind 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 informaii, care sunt stocate n diferite tipuri
de memorii. Instruciunile care controleaz funcionarea MC trebuie stocate ntr-o
memorie nevolatil, unde informaiile se pstreaz 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 funcionrii.
Memoria RAM (Random Access Memory) este o memorie volatil care
poate fi citit sau scris de unitatea central. Locaiile 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 puin RAM. Memorie
RAM static alimentat de la baterie se folosete pentru stocarea nevolatil a
cantitilor mari de date, la o vitez de acces mare i cu un numr nelimitat de
tergeri i renscrieri.
Memoria ROM (Read Only Memory) este cea mai ieftin i cea mai simpl
memorie i se folosete la stocarea programelor n faza de fabricaie. Unitatea
central poate citi informaiile, dar nu le poate modifica.
Memoria PROM (Programmable Read Only Memory) este similar cu
memoria ROM, dar ea poate fi programat de ctre utilizator. Dup posibilitile 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 radiaia ultraviolet. tergerea este neselectiv, adic se poate terge
doar ntreaga informaie i nu numai fragmente. Memoria poate fi tears i
renscris de un numr finit de ori. Programarea EPROM-ului necesit o procedur
special, iar MC cu EPROM au nevoie de regul pentru nscrierea EPROM-ului de
o tensiune auxiliar, de 12 V de exemplu. Unele MC au incluse circuite de
programare a memoriei EPROM, cu ajutorul crora unitatea central poate
programa memoria EPROM. n timpul programrii memoria EPROM nu este
conectat la magistrala de date i adrese. Unele MC sunt prevzute cu mod special
de lucru, n care sunt vzute din exterior ca nite memorii EPROM obinuite i pot
fi astfel programate cu orice programator.

1. Descriere general

OTP (One Time Programmable PROM) se folosete 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 fr fereastr, care este mult mai ieftin. Memoria
nu se poate terge sau reprograma. Preul unui MC cu OTP este mic, viteza este
bun, dar aplicaiile sunt lipsite de flexibilitate.
Memoria EEPROM (Electrically Erasable Programmable Read Only
Memory) poate fi tears electric de ctre unitatea central, n timpul funcionrii.
tergerea este selectiv, iar pentru renscriere trebuie parcuri mai muli pai.
Memoria EEPROM echipeaz multe MC, fiind ieftin. n memoria EEPROM se
memoreaz un mic numr de parametri care se schimb din timp n timp. Memoria
este lent i numrul de tergeri/scrieri este limitat (tipic 10 000).
Memoria FLASH este o memorie asemntoare EPROM i EEPROM n
sensul c poate fi tears i reprogramat n sistemul n care este folosit (fr 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 locaii, utilizatorul
poate s tearg doar ntregul coninut.
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 aplicaiei;
ISP (In System Programming) presupune posibilitatea de
reprogramare n funcionare 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 fr ca acesta s fie scos din autovehicul.

n funcie de numrul aplicaiilor n care urmeaz s fie folosit MC se


recomand folosirea MC cu ROM pentru volum mare de producie (ROM se
nscrie cu masc la fabricant), OTP pentru volum mic de producie i EPROM
pentru prototipuri.
Tipul de memorie i capacitatea memoriei din echiparea unui MC sunt
caracteristici particulare fiecrui tip de circuit. Printre alte diferene, aceti
parametri sunt diferii pentru membrii unei aceleiai familii de MC. Se vor
prezenta date concrete pentru exemplificare ntr-un tabel recapitulativ la sfritul
capitolului (tabelul 1.6).
Pentru a aprecia un MC sub aspectul componentei memorie este necesar s
se considere urmtoarele caracteristici:

varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM


/EEPROM /FLASH;
capacitatea memoriei aflat pe chip;
uurina 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 nsi particularitatea unui MC:
aceea de a interaciona cu mediul n procesul de control pe care l conduce.
Dispozitivele I/O implementeaz funcii speciale degrevnd unitatea
central de toate aspectele specifice de comand i control n funcia respectiv.
Exist o varietate mare de dispozitive I/O; dispozitivele I/O conduc operaii
generale de comunicaie (transfer serial sau paralel de date), funcii generale de
timp (numrare de evenimente, generare de impulsuri), operaii de conversie
analog/numeric, funcii de protecie, funcii speciale de comand, i enumerarea
poate continua. Parte din resurse acoper funciile de control propriu-zis, iar o parte
asigur funciile necesare aplicaiilor n timp real (sistemul de ntreruperi, timer).
Din aceast mare varietate, parte din dispozitive se gsesc n configuraia
tuturor MC sau sunt foarte des ntlnite, iar o alt parte de dispozitive o regsim
doar n MC construite pentru a optimiza aplicaii cu un grad mare de
particularitate. n acest capitol, n continuare, vor fi prezentate dispozitive des
ntlnite n echiparea MC. n capitolele urmtoare, pe msur ce vor fi prezentate
exemple de MC, vor fi descrise i o serie de dispozitive I/O speciale ce intr n
componena acestora.
Dispozitivele I/O sunt vzute de unitatea central ca porturi. Exist dou
filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de ctre unitatea
central. Porturile sunt mapate fie n spaiul de memorie, fie ntr-un spaiu 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 spaiu comun cu
memoria, ceea ce atrage dup sine reducerea numrului de locaii de memorie. MC
de la Intel folosesc un semnal care indic dac la adresa curent se apeleaz o
locaie de memorie sau un dispozitiv I/O.
Avantajele maprii n spaii separate:

Metoda nu este susceptibil de a provoca erori soft deoarece se


folosesc instruciuni diferite pentru a accesa memoria i dispozitivele
I/O;
Dispozitivele I/O nu ocup spaiu de memorie;
Decodificatorul de adrese pentru dispozitivele I/O este mai simplu
deoarece spaiul de adresare al dispozitivelor I/O este mai mic.

Dezavantaje ale maprii n spaii separate:

instruciunile I/O sunt mai puin flexibile n comparaie cu


instruciunile de lucru cu memoria;
instruciunile I/O nu permit folosirea modurilor de adresare folosite n
lucrul cu memoria.

Avantajul maprii n spaiu comun:

1. Descriere general

11

toate instruciunile de lucru cu memoria i toate modurile de adresare


sunt utilizabile i n tratarea dispozitivelo I/O (programarea operaiilor
I/O este foarte flexibil);

Dezavantajele maprii n acelai spaiu:

este susceptibil la erori software;


spaiul de adresare disponibil pentru memorie este mai mic.

Avantajul maprii ntr-un spaiu comun este acela c se poate opera cu


porturile la fel ca i cu o locaie de memorie; multe operaii aritmetice i logice
folosesc operanzi direct de la port, datele pot fi mutate ntre porturi cu o singur
instruciune, coninutul unui port poate fi citit, incrementat i rezultatul scris din
nou la port de asemenea cu o singur instruciune.
Se contureaz trei direcii de evoluie a MC din punct de vedere al
resurselor disponibile pe chip. O direcie este dezvoltarea de MC de uz general care
sunt puse la dispoziia utilizatorului pentru a realiza aplicaii de la A la Z. O a
doua direcie o reprezint dezvoltarea de MC specializate care dispun de resurse
specifice unui anume gen de aplicaii (automobile, telecomunicaii, Internet,
acionri electrice, etc). Pentru aceste MC specializate att structura hardware ct i
instruciunile sunt specifice i sunt calate pe un gen particular de aplicaii. 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 bii ntre
MC i mediu. Numrul de bii transferai ca urmare a executrii unei instruciuni
depinde de organizarea particular a porturilor n cadrul MC; unele porturi sunt
organizate pe 8 bii, altele pe un numr mai mare de bii. Sensul transferului, I
(input) sau O (output) este programabil i se stabilete de obicei ntr-un registru de
sens. Pentru a veni n ntmpinarea cerinelor specifice de interaciune cu mediul
sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor
paralele I/O. Mecanismul presupune o structur hardware corespunztoare i
instruciuni pentru manipularea informaiei la nivel de bit (un operand este un bit).
Astfel, la execuia unei instruciuni orientat pe bit, exist posibilitatea de a
transfera un singur bit, de a masca bii care nu sunt folosii ntr-o operaie
particular i de a efectua operaii logice pe un singur bit al unui port paralel I/O.
Datorit capabilitii de manipulare la nivel de bit la descrierea caracteristicilor
sistemului paralel I/O se specific numrul total de linii I/O.
MC68HC705C8 dispune de 31 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 bii fiecare i pun

12

MICROCONTROLLERE

la dispoziie n total 24 de linii care pot fi folosite fie ca intrri, fie ca ieiri. Portul D
dispune de 7 linii care pot fi folosite doar ca intri.

Circuitul de interfa al portului paralel este responsabil de corectitudinea


transferului cu dispozitivul I/O. n acest scop se foloseste una din urmtoarele
metode de sincronizare:

Transfer direct (brute-force method) n cadrul acestei metode interfaa are


doar rolul de a transfera semnalele de la unitatea central spre dispozitivul I/O
(dac este o operaie de ieire) sau de la dispozitivul I/O la unitatea central
(dac este o operaie de intrare). Se folosete acest tip de transfer dac se
citete nivelul unui potenial, dac se comand la ieire un nivel logic (pentru
comanda unor LED-uri, de exemplu).
Transfer strobat (strobe method) aceast metod folosete semnale de
strobare pentru a indica starea stabil a semnalelor la porturile de intrare sau de
ieire. ntr-o operaie de intrare, dispozitivul de intrare genereaz semnalul de
strobare cnd datele sunt stabile la pinii portului de intrare al interfeei.
Stocarea informaiei n registrul de date al interfeei se face cu semnalul de
strobe. Daca este vorba de o operaie de ieire, cnd semnalele de date sunt
stabile, interfaa elaboreaz semnal de strobare cu care dispozitivul I/O preia
efectiv datele. Aceat metod poate fi folosit dac interfaa i dispozitivul I/O
lucreaz la viteze comparabile.
Transfer cu protocol (handshake method) exist cazuri n care vitezele de
lucru ale celor dou pri implicate n transfer sunt mult diferite i metodele
mai sus amintite nu ofer cadrul potrivit pentru transferul datelor. Soluia este
ca interfaa 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 cellalt de dispozitivul I/O. Tranzaciile de protocol difer pentru
operaii de intrare i de ieire.

n figura 1.3 este ilustrat organizarea portului A al unui circuit particular


(MC68HC705C8).
Bit 7
DDRA7
0

PA7

DDRA6 DDRA5
0

PA6

PA5

Bit 0

DDRA4

DDRA3

DDRA2

DDRA1

DDRA0

PA3

PA2

PA1

PA0

PA4

Starea registrelor de ieire nu este influenat de Reset

Figura 1. 3 Organizarea portului paralel A (MC68HC705C8)

13

1. Descriere general

Registrul DDRA (Data Direction Register port A) este un registru de 8 bii


ca i registrul de date PA al portului A . Sub fiecare din registre este reprezentat
starea iniial a registrelor (dup reset). n cazul particular considerat, portului PA
este implicit port de intrare.
O structur posibil de circuit pentru o linie bidirecional de scriere/citire
la porturi este redat n figura 1.4. Se poate constata modul n care acioneaz bitul
din registrul de sens asupra circuitului driver de ieire.
Bit
DDR

Bit port ieire


(latch)

pin
I/O

[1]

[1] Buffer de ieire

[3]
[2]

[2] Buffer de intrare


(activ pentru DDR=0)
[3]Buffer de intrare
(activ pentru DDR=1)

Figura 1.4 Circuit bidirecional de scriere/citire la portul paralel

n partea stng a diagramei sunt reprezentate legturile spre magistrala


intern de date a MC. n funcie de natura operaiei efectuate (citire sau scriere) i
de valoarea bitului din registrul de direcie sunt posibile operaiile exprimate n
tabelul 1.5.
Tabelul 1.5
Funciile unui pin I/O

Operaie
scriere

Bit DDR
0

scriere

citire
citire

0
1

Funcie pin I/O


Pinul I/O este n mod intrare;
datele pentru scriere vor fi nscrise n latch-ul de ieire
Datele pentru scriere sunt nscrise n latch-ul de ieire
i transferate de buffer-ul [1] pinului I/O
Este citit starea pinului I/O
Pinul I/O este n mod ieire; este citit informaia din
latch-ul de ieire.

Se poate observa c o linie de ieire a unui port paralel este mai mult dect
un latch simplu; totodat, informaia nscris n latch-ul de ieire nu se schimb
dect dac se efectueaz o nou operaie de scriere la port.
Unele porturi paralele sunt considerate cvasi-bidirecionale, ceea ce
nseamn c o linie poate fi folosit n acelai timp ca ieire i ca intrare. Aceast
flexibilitate este considerat de interes n aplicaii i este posibil printr-un truc.

14

MICROCONTROLLERE

Figura 1.5 reprezint structura unei linii cvasi-bidirecionale. Trucul const n


exploatarea facilitilor unui etaj de ieire cu drena n gol (open-drain) care n acest
exemplu este pevzut cu o rezisten conectat intern la sursa de alimentare.
Citire latch

VCC
Pull-up
intern

Bus intern

Scriere latch

CLK

pin
I/O
n1

Citire pin
Figura 1.5 Structura unei linii cvasi-bidirecionale

Fiecare linie poate fi folosit independent ca intrare sau ca ieire. 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 n1 s fie blocat. Dac nu este ataat nimic la
pin, rezistena intern de pull-up va determina citirea unui unu logic la pin. Dac
linia este forat exterior n zero logic, etajul va genera curent prin rezistena de
pull-up, iar informaia citit va fi un zero logic. Exist structuri mai complicate
care n unele situaii necesit conectarea n exterior a unei rezistene de pull-up.
Pentru a interaciona cu mediul unui MC i sunt necesare multe conexiuni
la nivel de pin, ceea ce nseamn un circuit cu un numr mare de pini. Din
considerente de fiabilitate i economice se caut reducerea numrului de pini ai
unui circuit integrat. n aceast situaie a fost necesar un compromis n urma cruia
s-a ajuns la soluia prin care se atribuie unui pin funcii multiple (dou sau mai
multe). Pinii astfel sacrificai sunt pinii portului paralel. La pinii porturilor paralele
sunt accesibile celelalte resurse ale circuitului; pot fi amintite conexiunile
interfeelor 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 situaii n care este necesar extensia
resurselor (extensia memoriei, spre exemplu) caz n care este necesar accesul la
magistralele interne. Pentru rezolvarea acestei probleme sunt folosii tot pinii
porturilor paralele. Din nou, pentru economie de pini sacrificai, aceiai pini sunt
folosii consecutiv pentru a vehicula adrese i apoi date. Deoarece adresele folosesc
liniile doar ca ieiri, adresa este disponibil la pinii portului paralel n timpul
primului ciclu de ceas al execuiei unei instruciuni. Adresa este memorat n
circuite exterioare (n latch-uri). n al doilea ciclu de ceas se vehiculeaz pe aceste

1. Descriere general

15

linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este
numit mod expandat de lucru.
Pentru a evalua capabilitatea porturilor paralele se recomand considerarea
urmtoarelor nsuiri:

Numrul de linii I/O;


Posibilitatea de a programa sensul liniilor I/O;
Alte resurse accesibile prin funcii multiple la liniile I/O;
Posibilitatea accesului la magistralele interne
Aspecte electrice de interfaare.

Module de comunicaii seriale


Comunicaia serial este o metod bine agreat i n contextul MC
deoarece ofer compatibilitate cu o gam extins de dispozitive i necesit un
numr minim de fire, implicit un numr minim de conexiuni (pini puini).
n transferul serial de date este necesar s se cunoasc nceputul i sfritul
informaiei transferate. Pentru a identifica cele dou coordonate emitorul i
receptorul trebuie s fie sincronizai. Sincronizarea se poate realiza prin trei
metode, dintre care numai dou sunt folosite n MC, urmnd s le considerm doar
pe acestea n continuare. Oricare din metode presupune c durata unui bit este
aceeai att la emitor ct i la receptor (este folosit acelai semnal de ceas pentru
serializarea informaiei). Numrul de bii transmii ntr-o secund reprezint rata
de transfer numit baud rate; aceasta se msoar n bii/secund (bps). Durata unui
bit este 1/(baud rate).
Modulul serial asincron
Prima metod considerat este transferul serial asincron. Modulul serial
asincron este referit ca UART (Universal Asynchronous Receiver Transmiter).
ntr-un transfer serial asincron nceputul fiecrui byte este marcat de o tranziie a
liniei meninut pe durata corespunztoare unui bit. Sfritul este marcat de
asemenea de un bit de stop; bitul de stop const n meninerea liniei pe durata unui
bit ntr-o stare predefinit. ntre bitul de start i bitul de stop sunt transferai biii de
informaie. O secven complet este compus dintr-un bit de start, opt sau nou
bii de date i un bit de stop, n total 10 sau 11 uniti de cod. Interfaa serial
asincron poate fi implementat n dou moduri ntr-un MC.
Cea mai puin costisitoare soluie din punct de vedere al cheltuielilor de
resurse hardware este un program care s genereze secvena de transfer ca i
componen i ca durat a fiecrui bit. Programul trebuie s msoare durata
fiecrui bit. Soluia este costisitoare din punct de vedere al timpului consumat n
rularea programului.

16

MICROCONTROLLERE

A doua soluie de implementare a interfeei seriale este i cea mai des


ntlnit n MC. Interfaa este realizat cu un modul hardware specializat. Unitatea
central nscrie informaia de transferat ntr-un registru al interfeei dup care
sarcina serializrii i a generrii secvenei este finalizat de ctre hardware-ul
interfeei. n cazul recepiei interfaa preia secvena recepionat, extrage
elementele de sincronizare i nscrie datele efective ntr-un registru. Datele
recepionate sunt accesibile unitii centrale n acest registru al interfeei. n cazul
n care registrul de transmisie este gol sau registrul de recepie este plin interfaa
semnalizeaz starea i poate chiar suspenda temporar execuia programului
principal prin ntreruperi hardware. O schem bloc simplificat a unei interfee
seriale asincrone este reprezentat n figura 1.6.
Cerere de ntrerupere ctre UC

Magistrala intern

Registru de
prescalare

Buffer
transmisie

Buffer
recepie

Baud rate

Registru de
deplasare la
transmisie

Registru de
deplasare la
recepie

TxD

RxD

Selecie ceas

CLK

Figura 1.6 Schema bloc a UART

Ceasul pentru generarea ratei de transfer poate fi intern sau extern. n cazul
n care se selecteaz ceas intern, acesta se formeaz din ceasul unitii centrale cu o
prescalare. Pentru ca rata de transfer s fie programabil ceasul prescalat se
divizeaz n continuare folosind un numrtor al unui timer din resursele proprii.
Interfaa UART dispune de un registru de stare i un registru de control cu ajutorul
crora se pot prgrama modul de lucru, parametrii de comunicaie, selectarea
ceasului, divizarea ceasului.
Conexiunile interfeei seriale asincrone sunt disponibile la pini cu funcii
multiple la unul din porturile paralele.

1. Descriere general

17

Modulul serial sincron


Urmtoarele 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 recepionate s se poat extrage semnalul de ceas. Aceast
metod nu este folosit n MC.
Transferul serial sincron este folosit pentru comunicaii locale ntre
procesoare sau cu dispozitivele periferice. n transferul sincron datele transferate
sunt nsoite de semnalul de clock. Semnalul de clock este transferat pe o linie
dedicat. Transferul serial sincron necesit trei conexiuni: emisie, recepie i clock.
Interfaa hardware este mai simpl dect la transferul asincron. Protocolul dintre
emitor i receptor include o scurt perioad de sincronizare la iniierea unui
transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face
prin bitul de start al fiecrui 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 1Mbps.
ntr-o conexiune serial sincron unul din dispozitive este master iar
cellalt este slave. Un transfer poate fi iniiat doar de un master. Master-ul scrie un
octet n registrul de transmisie de date al interfeei 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 recepionat pe linia SCK. La umplerea
registrului de deplasare datele sunt transferate n registrul de recepie de date.
Conexiunile interfeei seriale sincrone sunt disponibile la pini cu funcii
multiple la unul din porturile paralele. Pinii asociai unei conexiuni seriale sincrone
sunt urmtorii:
MISO Master In Slave Out Pinul MISO este configurat ca intrare ntr-un
master i ieire dintr-un slave. MISO este conexiunea prin care se transmit date
ntr-un sens (de la slave la master). Ieirea 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 ieire dintr-un
master i intrare ntr-un slave. MOSI este cea de-a doua conexiune prin care se
transmit date n cellalt sens (de la master la slave).
SCK Serial Clock Pinul SCK este ieire 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 informaie.
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 tranzacii n care este implicat. Pentru un dispozitiv master,

18

MICROCONTROLLERE

intrarea nSS se conecteaza permanent la 1 logic; n cazul n care la master, intrarea


nSS devine 0, se seteaza un flag de eroare (MODF) n registrul de stare al interfeei
seriale sincrone. Pinul nSS al unui master poate fi configurat i ca ieire de uz
general prin setarea unui bit n registrul de sens DDRD. Ceilali trei pini, amintii
anterior, sunt dedicai interfeei sincrone atta timp ct este validat.
n sistemele care folosesc funcia serial sincron exist un master i unul
sau mai multe dispozitive slave. Exist mai multe soluii de interconectare; acestea
vor fi prezentate n continuare.
n cazul n care n sistem este un singur slave, conexiunea este fcut ca n
figura 1.7.
MASTER
Registru de
deplasare (8b)

generator
clock

SLAVE
MISO

MOSI

MOSI

MISO

SCK

SCK

Registru de
deplasare (8b)

+5V
nSS
nSS
Figura 1.7 Conexiune serial sincron master-slave

Interfaa serial sincron permite interconectarea mai multor dispozitive,


dintre care unul singur este master. Exist dou soluii pentru o conexiune multislave. n una din ele master-ul folosete ieiri de porturi pentru a selecta
dispozitivul slave cu care se face transferul; n cealalt soluie, toate dispozitivele
slave sunt selectate i sunt legate n inel. Conexiunea cu selecia fiecrui dispozitiv
slave este reprezentat n figura 1.8.
Un alt mod de a realiza o conexiune serial sincron n care exist mai
mult dect un slave este reprezentat n figura 1.9. Acest tip de conexiune difer de
precedentul prin urmtaorele:

Pinul MISO al fiecrui 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.
Intrrile nSS ale tuturor dispozitivelor slave sunt conectate la mas. Nu
este necesar comanad de selecie de la master n aceast conexiune.

19

1. Descriere general

MASTER

SLAVE 0

SLAVE 1

RD

RD

SLAVE k
RD

MOSI SCK MISO nSS MOSI SCK MISO nSS MOSI SCK MISO nSS

SCK
MOSI
RD

MISO
+5V

nSS
PB0
PB1
PBk

Figura 1.8 Conexiune serial sincron single-master multi-slave (varianta 1)

MASTER

SLAVE 0

SLAVE 1

RD

RD

MOSI SCK MISO nSS

MOSI SCK MISO nSS

SLAVE k
RD

MOSI SCK MISO nSS

SCK
MOSI
RD

MISO
+5V
nSS
Figura 1.9 Conexiune serial sincron single-master multi-slave (varianta 2)

Conexiunea din figura 1.9 folosete un numr minim de pini pentru a


controla un numr 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.
Interfaa serial sincron este folosit pentru a comunica cu periferice cum
ar fi un simplu registru de deplasare, un sistem de afiare LCD sau un sistem de
conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfaa

20

MICROCONTROLLERE

direct periferice cu standarde diferite, provenite de la diveri productori.


Conexiunea serial sincron poate fi folosit i pentru a extinde numrul de
intrri/ieiri acolo unde acesta este limitat de numrul de pini ai capsulei MC.
Interfeele seriale amintite sunt ntlnite n MC cu urmtoarele 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 distane mici cu viteze de pn la 4 Mbps
SCI+ este similar cu SCI, are n plus suport pentru comunicaii seriale
sincrone. Dispune de o ieire 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 aplicaiilor pentru care s-a nscut microcontroller-ul implic o
multitudine de funcii de timp puse la dispoziia utilizatorului prin module de timp
numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai
mult sau mai puin complex. Un sistem timer obinuit pune la dispoziie un set de
funcii implementate pe baza unui numrtor liber central i a unor blocuri
funcionale pentru fiecare funcie n parte. Timer-ul are n structura sa, dintre toate
celelalte subsisteme, cele mai multe registre. Toate funciile unui timer pot genera
ntreruperi independente; fiecare are controlul propriu i propriul vector de
ntrerupere.
Modulele timer complexe sunt construite cu arii de numrare programabile
(PCA). Pentru aplicaii speciale n timp real s-au construit module timer cu unitate
aritmetic i logic proprie.
Timer-ul este folosit pentru a msura timpul i pentru a genera semnale cu
perioade i frecvene dorite. Timer-ele nu sunt doar circuite cu funcii de
temporizare; n modulul timer sunt implementate cteva mecanisme care pun la
dispoziia utilizatorului funcii specifice. Mecanismul de comparare permite
controlul unor semnale de ieire; mecanismul de captur permite monitorizarea
unor semnale de intrare; numrtoarele interne permit generarea de referine de
timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini
software, .a. Timer-ul poate fi folosit practic pentru orice funcie de timp, inclusiv
generarea unor forme de und sau conversii D/A simple. Funciile oferite de un
timer sunt:
1. Captur la intrare (IC - input capture) - aceast funcie se bazeaz pe
posibilitatea de a stoca valoarea numrtorului principal la momentul apariiei
unui front activ al unui semnal extern. Facilitatea permite msurarea limii
unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit i ca
referin de timp pentru declanarea altor operaii.

21

1. Descriere general

2. Comparare la ieire (OC - output compare) - se compar la fiecare impuls de


ceas valoarea numrtorului principal cu cea a unui registru. Dac se constat
egalitate, n funcie de programarea anterioar pot avea loc urmtoarele
evenimente: declanarea unei aciuni la un pin de ieire (opional), setarea unui
flag ntr-un registru sau generarea unei ntreruperi pentru unitatea central
(opional). Funcia 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 depirea unui
interval limit ntre doua execuii. Aceste sarcini sunt lansate ca rutine de
tratare a ntreruperii generate de timer.
4. COP (computer operating properly) watchdog aceast funcie este folosit
pentru a reseta sistemul n cazul n care din erori de programare (bugs) sau
erori n desfurarea programului datorate perturbaiilor mediului, registrul
COP nu este accesat ntr-un interval de timp prescris.
5. Acumulare de pulsuri (pulse accumulator) este funcia folosit pentru a
numra evenimentele ce apar ntr-un interval de timp determinat sau pentru a
msura durata unui impuls.
Numrtorul liber
n figura 1.10 sunt prezentate elementele de baz din componena unui
timer, partea de numrtor liber.
TOI

Cerere de
ntrerupere

TOF
TCNT(H)

Clock
MC

:
1,4,8,16

TCNT(L)

Numrtor
16 biti

La RTI, COP i
acumulator de impulsuri

Figura 1.10 Schema bloc a unui timer (MC 68HC11) numrtorul liber

Numrtorul este pilotat de un clock provenit din clock-ul unitii centrale


divizat cu un factor de regul programabil. Numrtorul este nscris cu 0 doar la
reset, iar n rest este un registru de tip read-only. Cnd numrtorul tranziioneaz
din starea FFFFh n starea 0000h, se seteaza flag-ul TOF (timer overflow) aflat

22

MICROCONTROLLERE

ntr-un registru neoperaional asociat modulului timer. Pentru a autoriza generarea


unei ntreruperi este necesar s fie setat un flag de autorizare (TOI).
Factorul de divizare a clock-ului este stabilit ntr-un registru asociat.
Registrul TCNT de 16 bii permite citirea strii numrtorului. Se
recomand citirea numrtorului folosind o instruciune care opereaz pe 16 bii; n
acest fel ambii octei ai numrtorului aparin aceleiai stri de numrare. Dac se
fac dou citiri, accesnd pe rnd partea mai semnificativ i partea mai puin
semnificativ, cele dou informaii nu vor aparine aceleiai faze de numrare.
Captura la intrare
Unele aplicaii necesit cunoaterea localizrii n timp a momentului n
care are loc un eveniment. ntr-un calculator, timpul fizic este reprezentat prin
coninutul unui numrtor, iar apariia unui eveniment este reprezentat printr-o
tranziie de semnal. Momentul apariiei evenimentului poate fi nregistrat prin
memorarea strii numrtorului.
Funcia de captur la intrare este implementat de un circuit care are
schema bloc reprezentat n figura 1.11.
ICxI

Cerere de
ntrerupere

Latch
16 bii

ICxF

Detector de
tranziii

Pin
ICx

TICx
Figura 1.11 Funcia de captur la intrare schema bloc

Timpul fizic este reprezentat de valoarea coninut de numrtorul liber.


La apariia unui eveniment materializat printr-o tranziie la pinul ICx, coninutul
numrtorului liber este preluat n latch-ul de 16 bii din blocul de captur.
Utilizatorul poate s valideze funcia de captur, poate s aleag frontul activ al
tranziiei i poate s autorizeze generarea unei ntreruperi ctre 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 intrrilor de
captur sunt vectorizate, fiecrei ntreruperi i este alocat o poziie bine definit n
tabela vecorilor de ntrerupere.
Funcia de captur are multe aplicaii, cteva din ele descrise pe scurt n
continuare:

1. Descriere general

23

1. Localizarea momentului apariiei unui eveniment - funcia de captur este


foarte util n cazul n care este necesar cunoaterea momentelor la care au
avut loc evenimentele. Numrul de evenimente monitorizate sub acest aspect
este limitat de numrul de canale de captur ale MC.
2. Msurarea perioadei pentru msurarea perioadei unui semnal necunoscut se
procedeaz la determinarea timpului scurs ntre dou tranziii consecutive de
acelai fel; dou fronturi pozitive consecutive sau dou fronturi negative
consecutive.
3. Msurarea limii unui impuls Pentru a msura limea unui impuls se
msoara timpul scurs ntre un front pozitiv i frontul negativ ce i urmeaz.
Deoarece numrtorul liber este un numrtor pe 16 bii, intervalul maxim
msurabil cu un ciclu de numrare este limitat la de 216 ori periada unui clock
(clock-ul numrtorului). Dac se msoar intervale mai mari, se va lua n
considerare i numrul de tranziii de la valoarea maxim la 0 a numrtorului
liber.
4. Generarea unei ntreruperi Fiecare canal de captur poate genera opional o
ntrerupere dac se detecteaz la intrarea de captur frontul stabilit a fi activ.
5. Numrarea unor evenimente considernd c un eveniment este reprezentat de
o tranziie de semnal, cu funcia de captur la intrare folosit n combinaie cu
funcia de comparare la ieire, pot fi contorizate evenimentele ce apar ntr-un
interval de timp stabilit. La apariia unui eveniment se genereaz o ntrerupere;
n rutina de servire a ntreruperii se incrementeaz un contor de evenimente
realiznd astfel nregistrarea numrului de apariii. Sfritul intervalului de
contorizare este stabilit cu ajutorul funciei de comparare la ieire.
6. Referin de timp aplicaia folosete n combinaie funcia de captur la
intrare i funcia de comparare la ieire. Dac utilizatorul dorete s activeze un
semnal de ieire la un interval dorit dup detectarea unui eveniment, se va
folosi funcia de captur la intrare pentru a stabili momentul apariiei
evenimentului de referin. Se va aduna la valoarea numrtorului reinut la
captur un numr dorit de cicluri de numrare i se va transfera aceast valoare
registrului de comparare. Cnd numrtorul liber atinge valoarea
comparatorului se va genera o ntrerupere n rutina creia se va activa ieirea
dorit.
Comparare la ieire
Scema bloc a componentei care realizez funcia de comparare este
reprezentat n figura 1.12.
Un canal de comparare const dintr-un comparator pe 16 bii, un registru
de comparare pe 16 bii, un circuit de generare de ntreruperi, o ieire de comparare

24

MICROCONTROLLERE

i o logic de comand. Un sistem timer dispune de mai multe canale de comparare


(68HC11 are cinci canale de comparare).
Cerere de

OCxI

ntrerupere
Comparator
16 bii

OCxF

TOCx
Ctrl.
pin

Pin
OCx

Figura 1.12 Funcia de comparare la ieire schema bloc

Principala aplicaie a unei funcii de comparare este ntreprinderea unei


aciuni la un moment de timp viitor bine determinat, cnd numrtorul liber atinge
o anumit valoare. Aciunea ntreprins ar putea fi comutarea unui semnal,
acionarea unui ntreruptor electronic, aprinderea unui LED, etc. Pentru a folosi
funcia de comparare este necesar parcurgerea urmtoarei secvene:
1. se copiaz valoarea din numrtorul liber (coninutul registrului TCNT);
2. se adaug la copie o valoare determinat de ntrzierea dorit;
3. se transfer rezultatul n registrul de comparare.
Aciunea dorit la pinul ieirii de comparare se specific anterior de ctre
utilizator ntr-un registru asociat modulului. Comparatorul compar valoarea
numrtorului liber TCNT cu valoarea din registrul de comparare la fiecare clock.
Dac se constat egalitate, se activeaz aciunea 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
Funcia RTI este folosit pentru a genera periodic ntreruperi; ntreruperile
pot fi folosite pentru a comuta ntre aplicaii n sisteme multitasking sau pentru a
declana periodic execuia unei secvene. Perioada apariiilor ntreruperilor n timp
real este programabil. Ca rezoluie, funcia de ntrerupere nu este la fel de
performant ca i funcia de comparare.

25

1. Descriere general

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 opional. n cazul n care se folosete, programul utilizator trebuie s reseteze
periodic un registru COP; dac nu are loc resetarea, unitatea centrala decide c a
aprut o problem n rularea programului i reseteaz sistemul pentru a preveni o
desfurare necontrolat a programului.
Funcia ceasului de gard poate fi realizat folosind un canal timer de uz
general sau, situaia ntlnit n mod obinuit la MC, ceasul de gard este un timer
dedicat, folosit doar pentru funcia gard. Structura unui modul watchdog este
reprezentat n figura 1.13
Clock

Numrtor

RESET

INIT
Registru de
prescalare

Registru de
control

BUS INTERN

Figura 1.13 Schema bloc a unui modul watchdog

Ceasul de gard este un timer simplu compus dintr-un numrtor al crui


ceas de numrare este programabil printr-un registru de prescalare. Dac circuitul
este activat, numrtorul numr continuu. Dac numrtorul ajunge la valoarea
cea mai mare (FFFFh, dac este un numrtor de 16 bii). se genereaz un RESET
ctre unitatea central. Este sarcina programatorului s scrie periodic n registrul de
control un cuvnt care s iniializeze numrtorul. 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 numrate evenimente exprimate prin pulsuri sau pot fi
numrate chiar pulsuri interne, provenite de la clock-ul unitii centrale.
1. Numrare de evenimente numrtorul de 8 bii este incrementat la fiecare
front activ detectat la un pin. Un eveniment poate fi orice, segmente de
program, cicluri ale unui semnal de intrare, uniti de timp, etc. Pentru a fi
numrate n acumulatorul de impulsuri, acestea trebuiesc transformate n
tranziii.

26

MICROCONTROLLERE

2. Numrare gardat numrtorul de 8 bii funcioneaz n regim liber de


numrare avnd la intrarea de clock un semnal provenit din clock-ul unitii
centrale divizat cu un factor constant. O aplicaie uzual n acest mod de
funcionare este msurarea duratei unui puls (impuls singular). Numrtorul
este nscris cu 0 la nceputul pulsului, iar la sfritul pulsului se citete valoarea
sa.
Module PWM
Un semnal PWM (Puls Width Modulation) este folosit n multe aplicaii;
comanda motoarelor de curent continuu sau comanda surselor de alimentare pot fi
amintite ca principale aplicaii. n figura 1.14 este reprezentat un semnal PWM.
T2

Factorul de umplere este


T2/T1

T1
Fig. 1.14 Semnal PWM

Semnalul PWM este un semnal periodic la care se poate modifica n mod


controlat factorul de umplere. Modulele timer au resursele necesare generrii unui
semnal cu factor de umplere variabil. Deoarece, dup cum am mai amintit,
semnalul PWM este utilizat n aplicaii exist module timer dedicate acestei
funcii; modulele PWM. Un modul PWM poate genera mai multe semnale
modulate. Structura unui canal PWM este reprezentat n figura 1.15.
Comparator pe 8 bii

PWM

Numrtor
Registru prescalare

PWM

clock
intern

BUS INTERN

Fig. 1.15 Schema bloc a canalului PWM

Registrul de prescalare genereaz clock-ul pentru un numrtor. Clock-ul


de numrare este programabil. Coninutul numrtorului este comparat cu cel al

1. Descriere general

27

registrului PWM. Ct timp rezultatul comparaiei este mai mic sau egal, se va
genera un unu logic la ieirea PWM. Dac rezultatul comparaiei este mai mare, se
va genera la ieirea PWM un zero logic. Dac registrele comparate sunt de opt bii
factorul de umplere poate fi ntre 1/256 i 1. Un canal PWM odat programat va
genera la ieire semnalul periodic continuu, fr intervenia unitii centrale.
Ca i la celelalte componente funcionale, n ceea ce privete global
modulele timer (includem i modulele watchdog i PWM) vor fi prezentate n
ncheiere cteva criterii de apreciere:

numrul de canale timer i dimensiunea registrului de numrare;


flexibilitaea timere-lor, mecanisme implementate;
existena unui ceas de gard (watchdog);
numrul de canale PWM i dimensiunea registrului PWM.

Module A/D i D/A


Intrrile/ieirile analogice i convertoarele A/D nu sunt considerate ca
parte definit n contextul unui calculator; aceste elemente sunt importante n
schimb atunci cnd considerm un microcontroller. Prezena modulelor A/D i
D/A n structura unui MC contribuie la putereaacestuia n aplicaii deoarece
interfaarea cu mediul presupune necesitatea de a prelucra sau de a elabora mrimi
analogice.
Convertoarele A/D sunt des ntlnite printre perifericele on-chip.
Convertoarele D/A nu sunt ntlnite n mod uzual printre unitile componente
deoarece sunt relativ uor 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 aproximaii
succesive sau mai rar, convertoare cu integrare. nsuirile convertoarelor nu sunt
deosebite; sunt convertoare lente n comparaie cu cele implementate n circuite
independente. Timpii de conversie obinuii sunt plasai n intervalul 10s-25s.
Rezoluia este de 8, 10 sau 12 bii iar precizia de +/-1/2LSB. Modulul de conversie
este prevzut i cu un multiplexor analogic, astfel sunt disponibile mai multe
canale de intrare. Unele MC sunt echipate i cu circuit de eantionare/memorare. n
cazul n care circuitul de eantionare/memorare lipsete, semnalul analogic trebuie
meninut constant pe durata unei conversii. Tensiunea de referin necesar
convertorului poate fi generat n circuit sau dac nu, este necesar s fie furnizat
din exterior.
n continuare, n figura 1.16 este prezentat o schem bloc simpl a unui
modul de conversie A/D. Circuitul analogic de intrare const ntr-un multiplexor
analogic, un circuit de eantionare/memorare i un convertor A/D cu aproximaii
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 unitii centrale.

28

MICROCONTROLLERE

ADC0
ADC1
ADC2
ADC3

Mux
analogic

Selecie
canal

E/nM

Convertor Analog Digital

START

pin
start

STOP
Date

Registru de control

Registru de date
bus intern

Figura 1. 16 Schema bloc a modului de conversie A/D

Modulul A/D folosete un registru de control prin care se selecteaz


canalul de conversie i modul de lucru pentru circuitul de eantionare/memorare.
Declanarea 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 conine ntotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie
citit nainte de terminarea urmtoarei conversii, n caz contrar se pierde informaia
Conversia poate fi declanat intern, considernd bitul asociat din registrul
de control, sau din exterior printr-un semnal de comand aplicat la pin.
Declanarea unei conversii la un moment de timp dorit, fr intervenia unitii
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 recepionarea unei comenzi de
ncheiere. Un alt mod de operare este conversia ciclic n care modulul execut pe
rnd conversia fiecrui canal, dup care se oprete. 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, opional, se poate genera o ntrerupere ctre unitatea central.
n aplicaii 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


funcionrii unitii centrale cu evenimentele. Acest mecanism asigur
implementarea unui rspuns prompt i specific al sistemului la orice cerere de

1. Descriere general

29

ntrerupere. Muli dintre productori au realizat pentru diversele familii de


microcontroller-e variante constructive care difer uneori substanial unele fa de
altele, scopul fiind fie acela al simplificrii sistemului, fie acela al asigurrii unor
faciliti ct mai adecvate aplicaiilor pentru care au fost proiectate respectivele
microcontroller-e.
nc din anii 1980-1985 s-a conturat un principiu care se confirm i
astzi: "fiecare funciune complex cu procesorul ei", respectiv "fiecare funciune a
unui sistem de comand cu rutina ei de servire a ntreruperilor".
Evenimentele, sunt acele stri din funcionarea sistemului care trebuie
avute n vedere la controlul acestuia. Ele trebuie s declaneze, cu o ntrziere
minim, un rspuns adecvat din partea sistemului, rspunsul trebuind s fie descris
de ctre proiectant prin instruciuni 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 informaii de stare a sistemului, informaii ce
rezult fie urmare a prelucrrii de ctre UC a datelor, (evenimente ce genereaz aa
numitele ntreruperi interne), fie urmare interaciunii sistemului cu mediul
nconjurtor (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
corespunztoare fiecrui ciclu instruciune eventualele cereri de ntrerupere postate
pe parcursul execuiei instruciunii curente.
Ca orice sisteme deterministe, sistemele digitale dotate cu microcontrollere sunt ancorate, n funcionarea lor, ntr-un spaiu multidimensional ce are drept
dimensiuni parametrii proprii i cei reglai de ctre sistem ("mrimile de stare") i
timpul. Sistemul de ntreruperi este informat asupra evoluiei acestora prin canale
de transfer a informaiilor generale (porturi, canale temporizatoare/numrtoare)
sau specifice (interfee specializate UART, SPI, SCI, USB, I2C, etc), el dispune de
o unitate de analiz a informaiilor ("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 oprete execuia de
ctre UC a programului curent i realizeaz declanarea rutinei adecvate de servire
a ntreruperilor.
Realizarea strilor generatoare de cereri de ntrerupere este urmat de
analiza acestora de ctre CI. Aceast analiz presupune urmtoarele:

Identificarea sursei generatoare a cererii de ntrerupere;


Determinarea ordinii de servire a cererilor de ntrerupere, n cazul
apariiei simultane a mai multor astfel de cereri.

Ambele etape pot fi implementate att hard ct i soft, neexcluzndu-se


posibilitatea unor implementri mixte.
Identificarea sursei generatoare de ntrerupere se face prin corelaia 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 instruciune a rutinei de servire a ntreruperilor. Aceast


situaie este ntlnit la majoritatea microcontroller-elor, dar exist i excepii, cum
ar fi microcontroller-ele familiilor PIC "low range" i "middle range" de la firma
Microchip, la care orice cerere de ntrerupere genereaz execuia unei rutine al
crei nceput este plasat la o adres unic, fix de memorie.
Determinarea ordinii de servire, sau analiza prioritii cererilor de
ntrerupere, presupune scanarea n faza de analiz a tuturor canalelor de transfer
pentru cererile de ntrerupere sau a regitrelor 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 uniti de memorare a prioritilor (registre de setare a
prioritilor pe dou sau mai multe nivele) i instituirea unor reguli de arbitrare.
Fiecare dintre aceste nivele va fi scanat distinct, n ordinea descresctoare a
prioritilor, majoritatea CI prezentnd doar dou nivele de prioritate: prioritar i
mai puin prioritar.
n procesul de scanare, primul canal "activ" - care genereaz o cerere de
ntrerupere - va fi cel ce va fi "servit", respectiv va declana procesul de execuie a
rutinei de servire a ntreruperilor corespunztoare.
Sunt ntlnite att microcontroller-e care permit ntreruperea unei rutine de
servire a ntreruperilor de ctre o alt cerere de ntrerupere mai prioritar
(ndeobte cunoscut ca sistem de ntreruperi "rentreruptibil"), ct i
microcontroller-e care nu permit o astfel de aciune.
Muli productori pun la dispoziia proiectantului cte un flag de
validare/invalidarea global a ntreruperilor, ceea ce permite ca utilizatorul s
modifice cum dorete mecanismul de aciune la apariia unui ntreruperi: permite
sau inhib o ntrerupere prioritar aprut ulterior uneia mai puin 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 informaia de
validare a canalelor ntreruptoare ("registre de validare a ntreruperilor" sau
"registre de mascare a ntreruperilor"), un canal corespunztor 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
execuia unor instruciuni de resetare a sa, ceea ce presupune pe de-o parte, luarea
n considerare prin program a strii semnalate, iar pe de alt parte, asigur
reanclanarea mecanismului de ntrerupere, pentru situaia n care starea respectiv
se repet.
Domeniul de adrese de memorie (SRAM sau PROM) n care sunt plasate
instruciunile de start a rutinelor de servire a ntreruperilor poart denumirea de
"tabel a vectorilor de ntrerupere".

31

1. Descriere general

Unele microcontroller-e prezint o tabel a vectorilor de ntrerupere cu


adrese fixe, specifice canalelor ntreruptoare, spre exemplu I8051, Atmel, PIC,
altele permit plasarea tabelei vectorilor de ntrerupere la adrese de memorie ce sunt
stabilite de ctre proiectant, este cazul, spre exemplu, micocontroller-elor din
familia Z80 (Z8413, Z8414, Z8415, etc.)
n prima situaie, plasarea la adres fix a tabelei vectorilor de ntrerupere,
poate fi privit ca o restricie n dezvoltarea unor programe de aplicaie, 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 instruciuni de salt ca prime instruciuni corespunztoare canalelor
ntreruptoare. Exemplificm aceasta pentru familia 8051.
Tabela vectorilor de ntrerupere este cuprins ntre adresele: 0003H i
0023H. Programul de translatare va trebui s se prezinte astfel:
CSEG
ORG

00H

JMP

MAIN

;Adresa de salt la progamul principal

ORG

03H

;Adresa din tabela vectorilor de ntrerupere


;corespunztoare ntreruperilor externe de
;stare - canal 0 -

JMP

NEW_ADDR_ISR0 ;Noua adresa a rutinei (poate fi plasat n


;memoria RAM extern)

ORG

0BH

JMP

NEW_ADDR_ISR1 ;Noua adresa a rutinei (poate fi ;plasat n


;memoria RAM extern)

ORG

13H

JMP

NEW_ADDR_ISR2

ORG

1BH

JMP

NEW_ADDR_ISR3

START:
;

ISR_EXT0:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare
ntreruperilor
datorate
;depirii capacitii de numrarea a canalului
;0 numrtor/temporizator

ISR_T0:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare ntreruperilor externe de
;stare -canal 1 -

ISR_EXT1:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare
ntreruperilor
datorate
;depirii capacitii de numrarea a canalului
;1 numrtor/temporizator

ISR_T1:
;
;

32

MICROCONTROLLERE

ORG

23H

;Adresa din tabela vectorilor de ntrerupere


;corespunztoare ntreruperilor provenite de la
;UART

ISR_SI:
JMP
NEW_ADDR_ISR4
;
NEW_ADDR_ISR0:
;Aici se vor plasa instruciunile corespunztoare rutinei de servire a ntreruperilor de la
;sursa extern corespunztoare canalului 0.
NEW_ADDR_ISR1:
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor datorate
;depirii de numrare la timer 0.
NEW_ADDR_ISR2:
;Aici se vor plasa instruciunile corespunztoare rutinei de servire a ntreruperilor de la
;sursa extern corespunztoare canalului 1.
NEW_ADDR_ISR3:
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor datorate
;depirii de numrare la timer 1.
NEW_ADDR_ISR4
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor provenite
;de la UART.

Plasnd n memoria RAM aceast tabel este posibil s realizm ceea ce se


cheam "servire dinamic a ntreruperilor". Acest procedeu de servire a
ntreruperilor permite implemenarea uoar a comenzii unui automat secvenial cu
un numr finit de stri. (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 plasm rutina de servire a ntreruperii
(ISR).
n figura 1.17 prezentm cazul unui automat cu un numr de trei stri
distincte, fiecare rutin de servire a ntreruperilor (ISR) va rescrie adresa rutinei de
servire corespunztoare evenimentului urmtor n tabela vectorilor de ntrerupere.
Este evident c aceast tabel trebuie s fie locatat n memoria RAM a sistemului.
Primul
eveniment

ISR corespunztoare
evenimentului 1
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR2
Al treilea
eveniment

Al doilea
eveniment

ISR corespunztoare
evenimentului 2

ISR corespunztoare
evenimentului 3
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR1

Scrie n Tabela Vectorilor de


ntrerupere, adresa ISR3

Figura 1.17 Servirea dinamic a ntreruperilor ntr-un automat cu trei stri

33

1. Descriere general

Un exemplu tipic n acest sens l reprezint tastaturile ce prezint butoane


multi-funciune. S presupunem cazul butonului unic: START/STOP al unui utilaj.
Vom exemplifica procedeul de servire dinamic prin programul care comut
funciunile butonului din START n STOP i invers. Programul este conceput
pentru un microcontroller din familia 8051.
CSEG
ORG

00H

JMP

MAIN

BOOT:
ISR_EXT0:
JMP
BUTON
;S-a considerat c prima linie de ntreruperi externe de stare reprezint canalul de transfer al
;informaiilor corespunztor butonului START/STOP
;

;nstruciunea corespunztoare etichetei BUTON este plasat n memoria RAM a


;sistemului de comand
BUTON:
JMP
BUTON_START
;
BUTON_START:
;
MOV DPTR,#BUTON+1
;ncarc adresa din tabela vectorilor de ntrerupere
MOV A,#LOW(BUTON_STOP)
MOVX @DPTR,A
INC
DPTR
MOV A,#HIGH(BUTON_STOP)
MOVX @DPTR,A
;Schimb adresa de salt ctre rutina urmtoare n schema de comutare a rutinelor
;Ultima rutin din schem trebuie s indice drept adres de salt prima dintre rutine
RETI
BUTON_STOP:
;
MOV DPTR,#BUTON+1
;ncarc adresa din tabela vectorilor de ntrerupere
MOV A,#LOW(BUTON_START)
MOVX @DPTR,A
INC
DPTR
MOV A,#HIGH(BUTON_START)
MOVX @DPTR,A
;Schimb adresa de salt ctre rutina urmtoare n schema de comutare a rutinelor
;Ultima rutin din schem trebuie s indice drept adres de salt prima dintre rutine
RETI
MAIN:
;
;Trebuiesc incluse instruciunile corespunztoare programului principal
END

34

MICROCONTROLLERE

n cazul sistemelor 8051 sau 68xx-68xxx, tabela vectorilor de ntrerupere


este ampl incluznd variate canale ntreruptoare. Astfel, pentru ntreruperile
externe de stare se dispune de dou linii de intrare INT0# i INT1#, CI putnd fi
setat s reacioneze fie pe front (cel negativ), fie pe nivel logic (cel sczut -low),
pentru canalele numrtoare temporizare dispunem pentru fiecare de adrese de
servire corespunztoare strilor de depire a capacitii canalului ("overflow"), iar
pentru unitatea UART dispunem de un vector unic att la recepie 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 rspunsului la cererea respectiv.

1.5

MANAGEMENTUL PUTERII

Pentru aplicaiile 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 esenial n cazul alimentrii de
la baterii. Prin intrarea n starea de economie de energie memoria RAM nu-i
schimb coninutul i ieirile nu-i schimb valorile logice. Sistemul de economie
de energie ofer dou moduri de operare care difer prin numrul 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 instruciuni care
determin intrarea n mod Wait sau Stop. MC Intel intr n mod Idle sau Power
Down prin controlul unor bii din registrul PCON (Power Control Register).
n ambele moduri de operare este ngheat funcionarea unitii centrale.
n mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage
dup sine blocarea tuturor funciilor interne. Timer-ul va nghea i interfeele
seriale i vor opri activitatea. Sistemul de ntreruperi, dup caz, este dezactivat
(MC Intel) sau poate s ramn activ (MC Motorola). Coninutul memoriei i al
registrelor interne nu este alterat, iar liniile I/O rmn neschimbate. Din aceast
stare se poate iei fie doar cu Reset la MC Intel. La MC Motorola se poate iei 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 aceleai condiii n care a fost abandonat
(numrtoarele timere-lor continu din starea pe care au avut-o la intrare n mod
Stop).
n mod Idle (Wait) este ngheat doar funcionarea unitii centrale,
celelalte funcii folosite rmn active (timer-ul, interfeele seriale i sistemul de
ntreruperi). Starea unitii centrale i a tuturor registrelor este pstrat ct timp

1. Descriere general

35

MC se menine n mod Idle (Wait). Pinii de port pstreaz starea pe care au avut-o
la intrarea n acest mod. Din modul Idle se poate iei prin Reset sau la sesizarea
unei ntreruperi interne sau externe.
Consumul de energie este minim atunci cnd sunt activate cele mai puine
funcii. Consumul minim de energie se obine n modul de operare Power Down
(Stop). n modul Idle (Wait) consumul este redus faa de regimul de operare
normal dar este mai mare dect n mod Power Down (Stop). n acelai timp,
consumul n mod Idle (Wait) este cu att mai redus cu ct sunt mai puine funcii
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 iniiativ actual pentru modernizarea metodelor de
economie de energie n sistemele cu microprocesoare. Se intenioneaz obinerea
unui consum de energie (pentru un calculator PC) de o treime din cel actual i un
timp de ieire din starea inactiv mai mic de 5 secunde. Informaii despre aceast
iniativ se gasesc la adresa www.microsoft.com/hwedev/onnow.htm
Un alt aspect important al alimentrii 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
funcioneze 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 unitii centrale i foreaz 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 unitii centrale i genereaz o ntrerupere dac se constat c
aceasta este mai mic dect un minim predefinit. ntreruperea foreaz executarea
unei rutine de oprire neforat.

1.6

SCHEMA BLOC A UNUI MC

Cu elementele prezentate pn la acest punct schema bloc a unui MC poate


fi dezvoltat (n comparaie cu cele prezentate n figura 1.1. i figura 1.2);
rezultatul este ilustrat n figura 1.18.

36

MICROCONTROLLERE

UNITATE CENTRAL
UAL

Registre
interne

Memorie
pentru
programe

Unitate de control

Memorie
pentru
date

BUS INTERN

Controller de
ntreruperi
Controller DMA

RS
reg.
de
stare

RC
reg. de
comenzi

RD
reg.
de
date

DISPOZITIV I/O (1, 2, n)

Intrri/ieiri
de date
Seriale/Paralele

Figura 1.18 Schema bloc generalizat a unui microcontroller

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 funcionale.
Unitatea central execut instruciunile pe care le primete prin magistrala
de date din memoria program. Structura Harvard este posibil i rspndit la MC
pentru c de regul instruciunile 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-51) sau multiplexate (MC pe 16 sau 32 de bii).
Fiecare MC are un controller de ntreruperi care admite att intrri 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 ctre unitatea central. Registrele modulelor I/O pot fi vzute de UC ca
locaii de memorie (la familia Motorola) sau ca dispozitive de I/O ntr-un spaiu de

1. Descriere general

37

adresare separat (MCS 51). Sub numele de dispozitiv I/O, ntr-o abordare
generalizat, sunt cuprinse principalele interfee ale MC (timer, canal serial UART)
i linii I/O grupate n porturi paralele de uz general. Acelai nume generic poate
acoperi i interfeele speciale ntlnite n configuraii 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 totui


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, aceeai pentru toi membrii unei familii, i o serie de
interfee i periferice. Din punct de vedere al programatorului, toi membrii unei
familii folosesc acelai set de instruciuni, permit aceleai moduri de adresare i
folosesc aceleai registre. Diferena ntre membrii unei familii const n primul
rnd n echiparea chip-ului cu memorie (tip de memorie i capacitatea memoriei).
Alte diferene pot fi gsite la frecvena de clock pentru unitatea central sau n
interfeele 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 nsuirilor caracteristice i considernd
numele productorului ca fiind unul din elementele reprezentative pentru o familie.
INTEL 4048 a fost primul MC aprut pe pia, avnd o structur Harvard
modificat, cu 64-256 octei de RAM i este nc folosit n multe aplicaii datorit
preului sczut.
INTEL 8051 (MCS-51) este a doua generaie de MC i, n prezent, este
familia care se vinde cel mai bine; este fabricat i de muli ali productori. Acest
MC are o arhitectur Harvard modificat cu spaiu de adresare diferit pentru
program (<64K din care 4-8K pe chip) i date (<64K din care 128-256 octei pe
chip, cu adresare indirect). Dispozitivele I/O au un spaiu propriu de adresare.
8051 dispune de un procesor boolean prin care se pot executa operaii complexe la
nivel de bit, iar n funcie de rezultate se pot face salturi. Pentru 8051 exist foarte
mult software, att contra cost ct i gratuit.
INTEL 80C196 (MCS-96) este a treia generaie de MC propus de
INTEL. 80C196 este un MC pe 16 bii care admite un tact pn la 50MHz. Acest
MC conine blocuri aritmetice pentru nmulire i mprire, lucreaz cu 6 moduri
de adresare, convertor A/D, canal de comunicaii 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 numrtoare/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 nvare. Un alt avantaj este un spaiu 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, numrtoare/
temporizatoare, controller de ntreruperi, refresh pentru RAM dinamic, gestionarea
alimentrii (Power Management).
65C02/W65C816S/W65C134S (Western Design Center). WDC a creat
procesorul pe 8 bii 65C02 folosit n calculatoarele Apple, Commodore i Atari
urmat de procesorul pe 16 bii W65C816S i un MC pe 8 bii 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, 16 instruciuni i era furnizat ntr-o
capsul mic (16 pini). El a fost eliminat de pe pia de noile MC RISC.
Motorola 6805 se bazeaz pe procesorul 6800 i este asemntor cu 6502
produs de WDC. Are o arhitectur von Neumann n care instruciunile, datele,
dispozitivele I/O mpart acelai spaiu de adresare. Stiva este limitat la 32 de
poziii din cauza indicatorului de stiv pe 5 bii. 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 bii
de date i 16 bii de adres, cu o arhitectur ca i 6805. 68HC11 are inclus
memorie EEPROM sau OTP, linii digitale I/O, numrtoare/temporizatoare,
convertoare A/D, generatoare PWM, acumulator de impulsuri, canale seriale de
comunicaii 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
asemntoare MC INTEL 80386EX.
PIC (MicroChip) sunt primele MC RISC aprute, cu un numr mic de
instruciuni (tipic 33, fa de 8048 care are 90). Simplitatea arhitecturii (Harvard)
duce la realizarea unui chip de mici dimensiuni, cu puini 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 faciliti legate de structur) PIC16C5xx, PIC16C6xx i PIC17Cxx, din care linia 16C6xx este cotat cel
mai bine pe pia.
COP400 (National Semiconductor) este un MC pe 4 bii care are 512o-2K
ROM, i 32x4- 160x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare
2,3V-6,0V. Sunt echipate cu numrtoare/temporizatoare i magistral

1. Descriere general

39

MICROWIRE. Aceste MC se fabric n peste 60 de modele echivalente i sunt


primele MC care au un pre sub 0,5USD/bucat.
COP800 (National Semiconductor) este un MC de 8 bii care conine
MICROWIRE, UART, RAM, ROM, numrtoare/temporizatoare de 16 bii,
controller de ntreruperi, comparator, ceas de gard, monitor de tact, generator
PWM, transmisie n infrarou, convertor A/D cu 8 canale cu prescalare (admite i
intrri difereniale), protecie la scderea tensiunii de alimentare, mod de ateptare
i HALT, un trigger SCHMITT i circuit de trezire cu mai multe intrri (MultiInput-WakeUp). Eficiena este dat i de un set puternic de instruciuni, majoritatea
fiind de un singur octet i executate ntr-un singur ciclu. Exist i variante pentru
uz militar.
HPC (National Semiconductor) sunt MC pe 16 bii de mare performan,
cu o arhitectur von Neumann. Unitatea central poate executa nmuliri i
mpriri. Conin n structur funciile 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 aplicaii n
telecomunicaii, n sisteme de securitate, imprimante LASER, hard discuri, frne
ABS i aplicaii militare.
Proiectul PIRANHA (National Semiconductor) este un proiect de realizare
a unui MC RISC, primul MC dedicat aplicaiilor integrate. Acest MC are
avantajele arhitecturii RISC, deci puine instruciuni, simplitate, modularitate.
Z8 (Zilog) a fost unul dintre primele MC. Modelul iniial avea UART,
numrtoare/temporizatoare, DMA, 40 de linii digitale I/O, controller de
ntreruperi. Modelul Z8671 avea n ROM un BASIC simplu. Modelul Z86C95 are
o structur Harvard, faciliti 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 posibilitile lui
Z80, avnd n plus 2 canale DMA, canal de comunicaii sincrone i asincrone,
numrtoare/temporizatoare i controller de ntreruperi. Unele versiuni includ
EPROM, RAM i PIO (Programmable Input Output). Ruleaz instruciunile lui
Z80, dar n mai puine cicluri i are instruciuni n plus. Exist variante care
funcioneaz pn la 18MHz.
TMS370 (Texas Instruments) este similar cu 8051. Conine RAM, ROM
(OTP sau EEPROM), 2 numrtoare/temporizatoare de 16 bii, 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 nmuliri i
mpriri. 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 aplicaii spaiale.
MuP21 (Forth) este un MC care are puterea de calcul a unui procesor
INTEL 80486 (100MIPS) la un pre mult mai mic. Are integrat un coprocesor
video care gestioneaz o memorie video, deci se poate ataa direct un monitor TV.
Acest MC a fost creat ca s ruleze programul OKAD (program de proiectare VLSI)
i execut acest lucru de 10 ori mai repede ca un 486. Mup21 are 40 de pini.

40

MICROCONTROLLERE

F21 (Forth) a fost conceput pentru aplicaii multimedia i procesare


paralel. Viteza ajunge la 250MIPS datorit structurii care conine procesoare de
prelucrare analogic i procesor de interfa la reeaua de calculatoare.
Tabelul 1.6 prezint caracteristicile de baz pentru civa reprezentani din
dou familii de MC foarte populare; 68HC11 de la Motorola i 8051 de la Intel.
Tabelul 1.6
Caracteristici principale pentru MC din dou familii reprezentative
(68HC11 i 8051)

Circuit

RAM

M68HC11A0

256

M68HC11A1

256

M68HC11A2

M68HC11A8

256

M68HC11E1

512

M68HC11E9

512

M68HC11F1

1024

I 8035
I 8039
I 8041
I 8748

64
128
64
64

I 8051
I 8751

128
128

ROM/
(E)EPROM
512
EEPROM
2048
EEPROM
8K ROM
512
EEPROM
512
EEPROM
12K ROM
512
EEPROM
512
EEPROM
1024 ROM
1024
EPROM
4096 ROM
4096
EPROM

Clock

I/O

A/D

Timer

0.476 s

4x8
1x6
4x8
1x6
4x8
1x6
4x8
1x6

4/8

4/8

4/8

4/8

4x8
1x6
4x8
1x6

4/8

2.5 s
1.4 s
2.5 s
2.5 s

4x8
1x6
3X8
3X8
3X8
3X8

2
2
2
2

1 s
1 s

4X8
4X8

2
2

0.476 s
0.476 s
0.476 s
0.476 s
0.476 s
0.476 s

1. Descriere general

1.8

41

CLASIFICAREA MC

Se pot considera multe criterii de clasificare a MC; de exemplu dup


dimensiunea magistralelor, dup interfeele pe care le au incluse n configuraie,
dup aplicaiile n care se folosesc, dup furnizor etc. O clasificare sumar a celor
mai uzuale MC, dup compatibilitatea software, este:
MC cu arhitectur CISC
Compatibile 8051
MOTOROLA 68xx
Compatibile x86
COP8 (National Semiconductor)
TMS370 (Texas Instruments)
ST (Thomson)
Alte arhitecturi (MC low cost) HITACI - 4bii, Z8 - 8 bii
MC cu arhitectur RISC

Super H - Hitachi
PIC - MicroChip
AVR i ARM - Atmel

2
PROGRAMAREA SISTEMELOR CU MC

2.1

PROIECTAREA PROGRAMELOR DE
APLICAIE

2.1.1 Generaliti
Dezvoltarea aplicaiilor cu microsisteme presupune pe lng proiectarea
circuitelor electronice aferente acestora i specificarea n concordan cu aceasta,
prin instruciuni, a funciunilor pe care sistemul trebuie s le realizeze.
Prin faptul c microsistemele dispun de circuite microprogramabile,
structura acestora va fi adaptat aplicaiei specifice prin rularea programelor de
iniializare a sistemului, programe care duc la o configurare particular, specific.
Deci, una dintre funciunile de baz pe care microsistemele dotate cu
microcontroller-e trebuie s o implementeze o reprezint chiar propria configurare
-iniializare-, cci avnd drept suport aceeai structur, un sistem realizeaz noi
funciuni ca urmare a programrii iniiale sau pe parcurs.
O problem practic ce este pus la programarea microsistemelor o
reprezint organigrama pe care trebuie s o utilizm la proiectarea programelor de
funcionare. Aceasta variaz n raport cu "uneltele" soft avute la dispoziie:
asamblor1, compilator2, link-editor3, convertor OBJ-HEX4, depanator5, emulator6,
mediu de simulare7, etc.

Asamblorul este acel program ce convertete fiierul surs -fiier de tip text (ASCII) ce
conine instruciuni ale microcontroller-ului sub form de mnemonice, n fiier obiect,
respectiv ntr-un fiier ce conine codurile main corespunztoare instruciunilor
specificate n cadrul fiierului surs
2
Compilatorul este acel program ce convertete fiierul surs, scris n limbaj evoluat, n
fiier obiect.

2. Programarea sistemelor cu MC

43

Metodologia proiectrii se bazeaz pe analiza structurat a aplicaiei, pe


separarea ct mai raional a funciunilor sistemului n raport cu necesitile 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
fiecrei funciuni, ceea ce duce la generarea unui program ce prezint multe apeluri
de funciuni, utilizeaz o stiv relativ extins, dar care folosete eficient memoria
sistemului i stilul de proiectare a programelor care specific prin macro-uri fiecare
funciune n cadrul programului principal i minimizeaz astfel numrul de apeluri,
implicit reduce dimensiunea stivei, dar crete memoria necesar pentru program.
Evident, innd cont de varietatea aplicaiilor ct i de varietatea
implementrilor hard, nu este posibil enunarea unei "reete" dup care s
procedm! Fiecare aplicaie va trebui s fie tratat adecvat, msura n care
implementm prin rutine, direct n programul principal, sau n rutinele de servire a
ntreruperilor, funciunile sistemului va depinde esenial de coordonata "timp",
respectiv, de msura n care putem ndeplini restriciile specifice unui sistem de
comand i control n timp real.
Proiectarea programelor pentru un sistem impune ca proiectantul s
considere n strns corelaie dou aspecte: cel specific procesului i cel ce ine de
specificitatea procesorului.
3

Link-editorul realizeaz cuplarea mai multor module de program memorate n fiiere


obiect distincte i aloc zonele de memorie necesare programelor i variabilelor utilizate de
ctre acestea. Link-editorul favorizeaz dezvoltarea structurat a programelor precum i
reutilizarea unor module de program n aplicaii distincte.
4
Convertorul OBJ-IntelHEX, realizeaz conversia din format OBJ (cod main), ntr-un
format ce conine: adresa de locatare, numrul de octei ai liniei respective, tipul datelor
(cod sau date), irul de coduri, suma de control corespunztoare tuturor informaiilor liniei
respective i terminatorul de linie format din caracterele CR, LF.
5
Depanatorul permite execuia pas cu pas, sau secven dup secven, a unui program
aflat n faza de testare cu scopul de a releva interaciunea acestuia cu procesul. n general
acest program funcioneaz npreun cu un sistem de dezvoltare i dispune de un monitor programul de baz ce ofer funciuni de depanare pe sistemul de dezvoltare6
Emulatorul este programul care permite simularea funciunilor i instruciunilor
microcontroller-ului pe un alt sistem de calcul gazd. El poate prezenta unele restricii n
special n ceea ce privete posibilitile de simulare a ntreruperilor. Acest program poate s
funcioneze att pe un calculator gen PC, ct chiar pe microcontroller-ul ce face obiectul
aplicaiei, atunci cnd acesta o permite. n aceast din urm situaie, 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
funcionalitii sistemului putndu-se verifica att funcionarea programelor ct i aceea a
rutinelor de servire a ntreruperilor.
7
Mediul de simulare este utilizat n cazul unor aplicaii extrem de complexe, caz n care
practic sistemul ce implementeaz aplicaia este dezvoltat cu faciliti de depanare. Un
astfel de sistem formeaz un mediu de simulare. El include att faciliti soft (att pe
sistemul gazd ("host"), ct i pe cel int ("target")), ct i faciliti hard ce in de existena
unor generatoare de semnal programabile, care s ofere excitaiile adecvate.

MICROCONTROLLERE

44

Dei varietatea sistemelor este deosebit de larg, totui 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 funcii


scop, care sunt meinute n limite de variaie prestabilite, i
sisteme de control, respectiv sisteme ce implementeaz un automat cu
un numr finit de stri

Tot aici trebuie s subliniem deosebit de strnsa legtur ce apare ntre


aspectele "hard" ale sistemului i aspectele "soft" ale acestuia. Aceast legtur
trebuie s fie permanent n atenia proiectantului, el trebuie s-i "nchipuie" cum
i n ce se traduce execuia fiecrei instruciuni i de asemenea, mai important,
s in cont de sincronizrile ce apar n "viaa sistemului" ntre funcionarea
unitii centrale i procesul reglat. Spre deosebire de programarea n limbaje de
nalt nivel sau nivel mediu, n cazul nostru rezultatele programrii se traduc prin
aciuni specifice n cadrul sistemului, sistemul de ntreruperi jucnd un rol esenial.
Interaciunile, 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 nelege 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, spaiu pentru "cablarea"
unor subsisteme adiionale specifice (interfee analog digitale i digital-analogice,
driver-e de putere, etc.) i de programe "monitor8" rezidente n memoria fix a sa,
ce implementeaz dispozitivul logic "consol" drept legtur 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 execuie a programului, oprirea acestuia n puncte prestabilite ("break points"),
vizualizarea strii registrelor generale, etc. Toate acestea presupun existena unui
dispozitiv logic, "consol", care asigur controlul sistemului, fie de o consol
propriu-zis, fie, mai des, de ctre 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, cci ele duc la modificarea stilului de proiectare a
programelor.
S analizm pe rnd aceste aspecte.
Prin analiza necesitilor impuse de implemetarea comenzii i controlului
unui sistem, va trebui s nelegem urmtoarele.
8

Monitorul este acel grup de programe, rezident n memoria PROM/EPROM a unui sistem
de dezvoltare, care dispune de un set minimal de funciuni ce ajut la proiectarea i
depanarea pe plac a programelor scrise n cod main.

2. Programarea sistemelor cu MC

45

Analiza necesitilor de comand i control pe care le impune sistemul.


1. Canale digitale de transfer a informaiilor - (vom avea n vedere,
numrul acestora, i modul n care ele pot fi grupate). Este bine s
asigurm corespunztor fiecrei linii de comand, sau de achiziie
digital cte un bit corespunztor n cadrul unor locaii de memorie ce
reflect permanent starea acestora.
2. Canale analogice de transfer al informaiilor - vor necesita alocarea
unui numr de linii de ieire (este cazul convertoarelor digitalanalogice), respectiv un numr de linii de intrare (este cazul
convertoarelor analog-digitale) ce este funcie de tipul de convertor,
respectiv de interfaa acestuia cu microsistemul.
3. Necesitile de control a timpului - (frecvenei, perioadei sau
ntrzierii) n cadrul sistemului sunt implementate prin utilizarea
judicioas a canalelor temporizatoare.
Fiecare dintre aceste necesiti le vom exemplifica n continuare, urmnd
ca la capitolul de aplicaii s concretizm aceste exemple n programe mai ample.
Spre exemplu: dac avem de comandat dou motoare pas cu pas tetrafazate
(MPP) cu aceeai frecven de comand i n acelai sens, este evident c vom
aloca liniile aceluiai port drept linii de comand ale acestuia. De ce? Cci astfel
realizm dou obiective: maximizm utilizarea liniilor unui port de 8 bii, aa cum
sunt majoritatea, pe microcontroller-ele pe 8 bii, dar totodat simplificm
rezolvarea soft a comenzii, noi dedicnd astfel doar o locaie de memorie
(STATUS_MPP), drept copie a strii liniilor de comand dedicate motoarelor.
Totodat innd cont c majoritatea controller-elor dispun de instruciuni de rotire
(dreapta/stnga) a informaiilor, comanda n secven simpl a MPP nu va
presupune dect cteva instruciuni:

Iniializarea contorului de pai (STEPS1 i STEPS2)


Iniializarea locaiei de stare a MPP-urilor (STATUS)
Iniializarea timer-ului corespunztor frecvenei de comand a MPP
(SPEED_L, SPEED_H)
Definirea rutinei de servire a ntreruperilor, corespunztoare canalului
temporizator (ISR_T0).

Aceast rutin va roti informaia din byte-ul de stare corespunztor, va


copia aceast informaie la port i n final va decrementa contorul de pai.
Se vor testa cele dou locaii ce rein numrul de pai STEPS1 i STEPS2
iar atunci cnd s-au executat paii programai, comanda va fi ntrerupt.
Prezentm n continuare acest program implementat pentru
microcontroller-e din familia 8051. Instruciunile acestui microcontroller sunt
prezentate n capitolul curent.
1
DSEG
0030 2 STATUS_MPP
DATA 30H
;Locaia memoraz starea comenzilor pentru MPP (secven simpl)
0031 3 STEPS1
DATA 31H ;Locaie nr. pai MPP1

46

0032
0033
0034

MICROCONTROLLERE

4 STEPS2
DATA 32H ;Locaie nr. pasi MPP2
5 SPEED_L
DATA 33H ;Locaie low(CT)timer 0
6 SPEED_H
DATA 34H ;Locaie high(CT)timer 0
7
BSEG
0010 8 SENS
BIT 10H
;Bit "sens de rotaie MPP"
0011 9 COMMAND
BIT 11H
;Bit comand MPP
;Setarea acestui bit genereaz iniierea micrii MPP. Pentru aceasta trebuie s
;iniializm n prealabil: STEPS1, STEPS2, SPEED_L, SPEED_H i SENS.
;Bitul SENS este setat la rotirea spre stnga i resetat la rotirea spre dreapta
10 CSEG
11 EXTRN CODE(INIT) ;Declaraie rutina INIT extern
0000
12 BOOT:
0000 020054 13
JMP MAIN
0003
14
ISR_EXT0:
;nceputul tabelei vectorilor de ntrerupere
0003 02000E 15
JMP ISR_T0
000B
16
ORG 0BH
000B
17
ISR_TIMER0:
000B 02000E 18
JMP ISR_T0
000E C0D0 19
ISR_T0: PUSH PSW
;Salvare PSW n stiv
0010 C0E0
20
PUSH ACC
;Salvare Acumulator
0012 D2D3 21
SETB PSW.3 ;Comutare n bancul 1 de registre generale
0014 E531
22
MOV A,STEPS1
;ncarc n A nr.pai MPP1
0016 B4000C 23
CJNE A,#0,CONT_01 ;Test STEP1=0?
0019 E532
24
MOV A,STEPS2
;Da!
001B B40026 25
CJNE A,#0,CONT_02 ;Test STEP2=0?
001E C28C 26
CLR TR0
;Anulare funcionare timer 1
0020 D0E0
27
END_ISR: POP ACC
;Da! Ieire ISR
0022 D0D0
28
POP PSW
;Refacere stare registre generale
0024 32
29
RETI
;Ieire din ISR
0025 E532
30
CONT_01: MOV A,STEPS2
;STEP1<>0
0027 B40012 31
CJNE A,#0,CONT_03 ;Test STEP2=0?
002A E530
32
MOV A,STATUS_MPP ;Da! STEP1<>0, STEP2=0
002C 540F
33
ANL A,#0FH ;Mascheaz biii corespunztori MPP 2
002E 1531
34
DEC STEPS1 ;Actualizeaz contor de pai MPP1
0030 201006 35
EXEC_STEP: JB SENS,LEFT ;Test sens rotaie MPP
0033 03
36
RR A
;Rotete informaia de comand la dreapta
0034 F590
37
EXEC_BOOTH: MOV P1,A ;Scrie comanda ctre MPP
0036 02004C 38
JMP REPRG_T0
0039 23
39
LEFT: RL A ;Rotete informaia de comand la dreapta
003A 80F8
40
JMP EXEC_BOOTH
003C E530
41 CONT_03: MOV A,STATUS_MPP ;STEP1<>0, STEP2<>0
003E 1531
42
DEC STEPS1
0040 1532
43
DEC STEPS2
;Actualizare informaie de pai
0042 80EC
44
JMP EXEC_STEP

2. Programarea sistemelor cu MC

0044 E530
0046 54F0
0048 1532
004A 80E4
004C 85338A
004F 85348C
0052 80CC
0054
0054 120000
0057 201102
005A 80FB
005C D28C
005E C211

47

45
46
47
48
49
50

CONT_02: MOV A,STATUS_MPP ;STEP2<>0, STEP1=0


ANL A,#0F0H ;Mascheaz biii corespunztori MPP 1
DEC STEPS2
JMP EXEC_STEP
REPRG_T0:
MOV TL0,SPEED_L
MOV TH0,SPEED_H
;Reprogrameaz timer0
51 JMP END_ISR
52 MAIN:
F 53 CALL INIT
;Execut rutina de iniializare sistem
54 LOOP:
JB COMMAND,START_MPP
55 JMP LOOP
56 START_MPP: SETB TR0 ;Valideaz temporizare T0
57 CLR COMMAND ;Anuleaz comanda0060 80F5
58 JMP LOOP ;Cicleaz (Ateapt!)

END
n cazul n care realizm controlul unui semnal analogic cu ajutorul
sistemului format din microcontroller i convertor digital-analog de 12 bii avnd
drept interfa o interfa paralel, vom dedica 12 linii din cadrul a dou porturi
acestui scop.
ntr-un mod analog, putem defini i operaiile de citire a informaiilor de
stare att cele corespunztoare unor mrimi analogice ct i cele corespunztoare
mrimilor digitale. Vom dedica fiecrui semnal analogic locaii de memorie avnd
o lime a cuvntului cel puin egal cu rezoluia convertorului ( 1 byte pentru o
rezoluie de 8 bii, 2 bytes pentru rezoluii mai mari de 8 bii i pn la 16 bii,
respectiv 3 bytes pentru rezoluii cuprinse ntre 17 i 24 de bii, etc.)
Deci, numrul de linii dedicate transferului de informaii va depinde de
interfaa convertorului, iar memoria alocat reinerii strii corespunztoare mrimii
va fi mai mare sau egal cu rezoluia convertorului, vorbim de ceea ce ndeobte se
numete "alinierea" datelor, respectiv asigurm uniformitatea dimensiunii locaiilor
de memorie dedicate variabilelor sistemului ceea ce uureaz accesul la informaie
prin folosirea unor indeci adecvai.
Necesitile de control a timpului sunt satisfcute prin dedicarea unor
canale temporizatoare/numrtoare. 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 alocm pentru controlul ntrzierii respective un canal
temporizator separat, s minimizm numrul de instruciuni ale rutinei de servire a
ntreruperilor i s analizm, iar apoi s setm cu atenie prioritile stabilite la
arbitrarea ntreruperilor. Va trebui ca sistemul nostru s satisfac cerinelor impuse
de teorema eantionrii att la achiziia de semnal ct i n comand, ceea ce
presupune ca frecvena minim de eantionare s fie mai mare dect dublul
frecvenei maxime ce intervine n cadrul procesului reglat.
Nu trebuie s uitm c n cazul unui sistem controlat de ctre un
microcontroller paralelelismul n aciune i interaciunea cu procesul se mbin

48

MICROCONTROLLERE

continuu, ceea ce indeobte poart denumirea de "concuren". Aceast proprietate


are un rolul esenial n cazul unui sistem dedicat (ncapsulat - "embedded").
Deseori, pentru sisteme relativ lente putem gsi o perioad minim de
temporizat, rutina de servire a ntreruperilor, corespunztoare acesteia putnd fi
utilizat pentru controlul mai multor comenzi, ce prezint constante de timp
multipli ai temporizrii de baz. Dac acest semnal de ceas l folosim pentru
analiza strii globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem
de operare9 n timp real, specific. Un program monitor, (supervizor) va putea
analiza periodic starea sistemului i va declaa task-ul, rutina adecvat strii. n
acest caz, construind uneltele minimale i anume task10-uri, rutine11 i subrutine12
vom putea scrie mult mai uor programe pentru sisteme distincte, asigurnd astfel
un grad de portabilitate13 ridicat al aplicaiilor.
Implementarea programrii structurate presupune decelarea acelor aciuni
repetabile i executate cu parametri diferii n mai multe etape din evoluia
sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruciuni
apelabile din programul principal.
Un rol esenial l joac i modul n care realizm gestiunea resurselor de
memorie. Acestea sunt dedicate ctorva scopuri i anume:
1. Salveaz starea sistemului. n acest sens dispunem de zone de memorie
accesibile de byte i pe bit, zon numit de obicei "vector de stare".
Dimensiunea acestei memorii este specific aplicaiei.
2. Salveaz temporar informaiile din registrele generale la apelarea rutinelor sau
la execuia rutinelor de servire a ntreruperilor, n general implementarea
acestei memorii se face utiliznd un pointer memorat ntr-un registru special al
unitii 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 informaiile ce sunt achiziionate, transferate sau prelucrate de ctre
sistem formnd ceea ce ndeobte se numete "buffer" sau memorie tampon.
9

Prin sistem de operare n timp real nelegem ansamblul de rutine ce ofer principalele
rutine de comand i control a sistemului, cu condiia respectrii teoremei de eantionare
att n comad ct i n control
10
Prin task nelegem acele uniti de program executabile independent i care de regul
implementeaz o singur funciune ce este apelat de ctre planificatorul (n cazul nostru,
programul principal) sistemului.
11
Rutinele implementeaz poriuni mici de program, ce trateaz evenimente ce apar n
funcionarea sistemului. Sunt caracterizate prin rapiditate n execuie i de regul sunt
asociate unui anumit eveniment decelabil de ctre planificatorul sistemului de operare sau
declaate de ctre o cerere de ntreruperi.
12
sunt poriuni de program apelate de ctre task-uri, i pot fi: dedicate, cazul celor activate
de ctre un "anumit" task, comune, cele apelate de ctre mai multe task-uri i re-entrante,
cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile.
13
Prin portabilitate nelegem gradul de reutilizare a programelor scrise pentru un anume
sistem la o clas larg de sisteme analoge celui iniial.

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 aplicaiei i fluxurilor informaionale vehiculate. Tot n
aceast categorie putem ncadra acele zone de "memorie comun", utilizate de
ctre task-uri diferite ce ruleaz pe sistem, zon prin intermediul creia sunt
pasate informaii de la un task la altul n scopul sincronizrii 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 aa numita csu potal ("Mail Box"), etc.
Dimensiunea acestor zone poate fi att variabil ct i fix.

2.1.2 Instruciuni ale MC


Este evident c n cazul programrii microsistemelor un rol deosebit de
important l joac setul de instruciuni al microcontroller-ului. Dac n limbajele de
nivel mediu sau nalt, limbajele prezint un caracter independent de structura
procesorului, limbajele main sunt limbaje specifice. Aceasta presupune un grad
de detaliere mult mai ridicat ceea ce implic i cunoaterea registrelor interne i a
flag-urilor indicatoare de condiie specifice unitii centrale, cunoaterea structurii
interne, respectiv a memoriei interne i a modului n care aceasta este organizat,
cunoaterea porturilor de intrare/ieire i a canalelor numrtoare/temporizatoare.
Cu toate acestea, reprezentarea grafic a evoluiei unui sistem capt o
rspndire din ce n ce mai larg, ea oferind o reprezentare general a algoritmilor
de funcionare ai sistemelor.
Spre exemplu, reprezentarea EBNF (Extended Backus-Naur Form)
utilizeaz simbolurile terminale14 i neterminale15 care sunt conectate n diagrame
(grafuri) sintactice ce formeaz un graf orientat. n cadrul acestor grafuri sgeata
exprim o formulare sintactic acceptat. Pot fi ntlnite urmtoarele reprezentri:
succesiunea, ramificaia sau alternativa i bucla sau repetiia. Corespunztor
acestor formulri, limbajele de programare ale microcontroller-elor, ofer
instruciuni (reprezentabile ca "atomi" lexicali) ce implementeaz traiectoriile
definte cu ajutorului grafului de fluen. Trebuie menionat c n setul de aciuni se
disting cteva clase de instruciuni prezente la toate microcontroller-ele, i anume:
1. Instruciuni ce pot fi succesive (pot fi nirate unele dup altele) i care
realizeaz n general fie un transfer de informaie, fie o operaie artmeticologic, fie o alt aciune la nivelul unitii centrale.
14

Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompui n
continuare.
15
Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri
terminale.

MICROCONTROLLERE

50

2. Instruciuni de decizie (test), care implementeaz o ramificaie a grafului, n


general, la nivelul limbajului main, aceastea sunt instruciuni ce
implementeaz dou alternative (deci sunt de tip binar). n cazul
microcontroller-elor nu ntlnim dect bifurcaii.
3. Instruciuni de tip repetitiv, sau instruciuni ce implementeaz o bucl de
program i care sunt reprezentate prin instruciuni de test ce se execut fie la
nceputul, fie la sfritul unui bloc de program
Vom exemplifica pentru dou familii de microcontroller-e (Intel 8051 i
PIC -"middle range") cele mai sus afirmate, urmnd ca n prezentarea de detaliu a
familiilor de procesoare s tratm exhaustiv aceste instruciuni16.
Familia 8051

Familia PIC "middle range"

Mnemonic

Aciunea

Mnemonic

Aciunea

MOV A,<src>
MOV <dest>,A
MOV <dest>,<src>
MOV DPTR,#data16
PUSH <src>
POP <dest>
XCH A,<byte>
XCHD A,@Ri
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@DPTR
SWAP A
ANL A,<byte>
ANL <byte>,A
ANL 17 < byte > <-data8
ADD A,<byte>
ADDC A,<byte>

A <- <src>
<dest> <- A
<dest> <- <src>
DPTR <-data16
INC SP,@SP <- <src>
DEC SP,<dest> <- @SP
A <-> <byte>
A <-> <@Ri>
A <- @Ri
@Ri <- A
A <- @DPTR
@DPTR <- A
A<-@DPTR
A[high] <-> A[low]
A <- <byte>
<byte> <- A
<byte><- data8
A<-A+<byte>
A<-A+<byte>+C20

MOVF f,d

d=0 W <- <f>


d=1 W <- <f>
<f> <- W
W <- data8

16

MOVWF
MOVLW

SWAP f,d
ANDWF f,d
ANDLW18 k19
ADDWF f,d
ADDLW21 k

d=0f[high] <->f[low]
d=0 W<-W * <f>
d=1 f<-W * <f>
W <- W*k
d=0 W<-W+f
d=1 f<-W+f
W <- W+k

Abrevieri folosite la descrierea instruciunilor pentru procesoarele familiilor 8051 i PIC


middle range:
A registrul acumulator; W registrul de lucru (acumulator); <src> registru surs de
informaie; <dest> registru destinaie al informaiilor; DPTR Data Pointer (8051); @
indicator pentru adresare indirect la memoria extern; d flag indicator al direciei; f
regsitru f din "File Register" la PIC; data16 este o constant numeric pe 16 bii; data8
constant numeric pe 8 bii; SP registru Stack Pointer (8051);
17
Abrevieri (continuare): ANL este AND logic, analog funcionez i instruciunile ORL
(OR logic) i XOR (SAU-EXCLUSIV) logic.
18
ANDWF/ANDLW execut funcia logic AND ntre operanzi, analog avem
IORWF/IORLW execut funcia logic OR, iar XORWF/XORLW execut funcia logic
SAU-EXCLUSIV
19
k constant numeric pe 8 bii
20
Carry Flag sau fanionul indicator al transportului

2. Programarea sistemelor cu MC

21

51

ADDWF execut funcia aritmetic adunare ntre operanzi, analog avem SUBLW pentru
scdere i respectiv ADDLF/SUBLW pentru adunare/scdere data pe 8 bii

MICROCONTROLLERE

52

Familia 8051
Mnemonic
MUL AB

Familia PIC "middle range"


Aciunea

RR A
RRC A
RL A
RLC A
JMP addr22
CALL addr
RET
RETI24

A[low]<AxBB[high]<-AxB
A<- int(AxB) A<mod(AxB)
A0->A7 A7->A6 .
A0->C C->A7 .
A7->A0 A0->A1 .
A7->C A6->A7 .
PC23 <-addr
@SP <- PCPC <- addr
PC <- @SP
PC <- @SP

SETB b25
CLR b
INC A
INC DPTR
DEC A
DEC < byte>

b <- 1
b <- 0
A <-A+1
DPTR<- DPTR +1
A <- A-1
Byte<-byte-1

DIV AB

Mnemonic

Aciunea

RRF

A0->A7 A7->A6 .

RLF

A7->A0 A6->A7 .

GOTO addr
CALL addr
RETURN
RETFIE
RETLW k
BSF f,b
BCF f,b
INCF

PC <-addr
@SP <- PCPC <- addr

DECF

f <- f - 1

PC<-@SP, W<-k
fb <-1
fb <-0
f <- f + 1

Instruciunile mai sus prezentate fac parte din prima categorie. Lista
complet de instruciuni este detaliat pe CD la capitolele corespunztoare celor
dou microcontroller-e. Urmeaz instruciunile de decizie:
Familia 8051

Familia PIC "middle range"

Mnemonic

Aciunea

Mnemonic

Aciunea

JB addr_rel

b=1 =>PC<-PC+addr_rel

BTFSC f,b

JNB addr_rel26

b=0 =>PC<-PC+addr_rel

BTFSS f,b

fB=0 =>PC<-PC+2
Salt peste instr. urmtoare
fB=1 =>PC<-PC+2
Salt peste instr. urmtoare

JZ addr_rel
JNZ addr_rel
JC addr_rel
JNC addr_rel
JBC bit,addr_rel

A=0 =>PC<-PC+addr_rel
A0 =>PC<-PC+addr_rel
C=1 =>PC<-PC+addr_rel
C=0 =>PC<-PC+addr_rel
b=1 =>PC<PC+addr_rel,b <- 0

Ultimul tip de instruciuni, cel de ciclare este ilustrat doar prin cteva
exemple:
22

addr reprezint adresa de salt (adres absolut)


PC este Program Couter-ul (pointer-ul de instruciuni)
24
ntoarcere din rutina de servire a ntreruperilor implic rearmarea sistemului de rspuns
la cererile de ntrerupere
25
b este numrul bit-ului care va fi setat/resetat
26
Abrevieri (continuare): addr_rel repezint adresa relativ de salt specificat n
instruciune
23

2. Programarea sistemelor cu MC

Familia 8051

Familia PIC "middle range"

Mnemonic

Aciunea

CJNE A,<byte>,addr_rel

A<byte> =>PC
<-PC+addr_rel
<byte>data8 =>
PC<-PC+addr_rel
byte <- byte1,PC<PC+addr_rel

CJNE <byte>,#data8,addr_rel
DJNZ <byte>,addr_rel

53

Mnemonic

Aciunea

DECFSZ f,d

f<-f-1, d=0 =>W <- f


f=0 =>PC<-PC+2

INCFSZ f,d

f<-f+1, d=0 => W <f


f=0 =>PC<-PC+2

Menionm n ncheierea acestei enumerri a instruciunilor c n cazul


microcontroller-elor nu exist instruciuni de intrare/ieire, cci porturile
microcontroller-ului sunt "mapate"27 n spaiul de adrese de memorie intern. Ce
rezult din aceasta? Accesul la elementele externe microcontroller-ului se face prin
instruciuni avnd adrese relative la porturile acestuia, adic sunt instruciuni de
transfer n cadrul memoriei interne a microcontroller-ului.
Proiectarea programelor de funcionare ale unui sistem trece prin mai
multe etape ce sunt ilustrate n figura 2.1. Aceast figur nu prezint prima i n
acelai timp una dintre cele mai importante etape ale proiectrii, care const n
analiza sistemic a procesului sau sistemului a crui comand se dorete a fi
implementat.
1.
2.
3.
4.

5.

n cadrul acestei etape trebuie s fie evideniate:


Funciunile sistemului, limea canalelor de comunicaie nesesare transferului
infomaiilor, precum i locaiile de memorie int (destinaie) a acestora
Identificarea acelor canale de transfer a informaiilor care asigur sincronizarea
UC cu procesul condus
Analiza prioritilor ce trebuie s fie atribuite canalelor de transfer la tratarea
informaiilor pentru arespecta teorema eantionrii
Se evideniaz similitudinile ce apar n funcionarea sistemului sunt grupate n
raport cu criterii specifice, funcionale canalele de transfer a informaiilor i
sunt conturate task-urile, rutinele i subrutinele ce implementeaz funciunile
sistemului de comand i control.
Sunt analizate variatele posibiliti de implementare hard a aplicaiei, respectiv
sunt dedicate canalelor informaionale liniile porturilor, canalele
temporizatoare, celelalte resurse diferitelor necesiti 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 obine o implementare a aplicaiei optimal.
27

Prin "mapare" nelegem definirea unei funciuni surjective ce are drept mulime de
definiie mulimea porturilor i celorlalte dispozitie periferice i ca domeniu al valorilor un
subdomeniu din spaiul de adrese corespunztor memoriei interne a microcontroller-ului.

MICROCONTROLLERE

54

Vom descrie pe rnd care sunt elementele necesare i ce rezult la


parcurgerea fiecrei etape n cadrul procesului de proiectare a programelor de
aplicaie n cazul utilizrii uneletelor specifice procesoarelor 8051.
Asamblarea fiierelor surs scrise n limbaj main i salvate ca fiiere

BIBLIOTECI
(DIVERSE)

EDITAREA
FIIERELOR
SURS (asamblare)
(FORMAT ASCII)

EDITAREA
FIIERELOR SURS
(n limbaj C)
(FORMAT ASCII)

ASAMBLAREA
FIIERELOR
SURS

COMPILAREA
FIIERELOR
SURS

LINK-EDITAREA

CONVERSIA FIIERELOR
OBIECT N FIIERE FORMAT
INTEL-HEX
TRANSFERUL FIIERELOR PE
SISTEMUL DE DEZVOLTARE I
DEPANAREA APLICAIEI

SCRIEREA PROGRAMULUI DE
FUNCIONARE N MEMORIA
EPROM/FLASH A SISTEMULUI

Figura 2. 1 Etapele proiectrii programelor pentru un sistem dedicat


FIIER OBIECT
RELOCATABIL

FIIER SURS

MACRO
ASSEMBLER
A51
FIIER
LISTING

Figura 2.2 Rolul macro/asamblorului n generarea fiierelor obiect

2. Programarea sistemelor cu MC

55

ASCII este descris n figura 2.2.


n cazul utilizrii unor module de program scrise n C, fiierele surs vor fi
compilate rezultnd n urma compilri aceleai fiiere ca i n cazul asamblrii.
n figura 2.3 prezentm care sunt fiierele de intrare i cele de ieire n
cazul utilizrii 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, ncrcate i testate pentru a se evidenia intercorelaiile ce se
stabilesc ntre programe i sistemul controlat.
Pentru transferul fiierelor fie ctre sistemul de dezvoltare, fie ctre un
programatorul universal este necesar s obinem plecnd de la fiierul obiect
absolut fiiere n formate transferabile. Aceast funcie este ndeplinit de
convertorul OHS51. (vezi figura 2.4)
Programul LIB51 ce face parte din modulul de programe specifice
microcontroller-elor 8051 i el permite generarea unor biblioteci cu module de
FIIERUL OBIECT 1
FIIERUL OBIECT 2

LINK -EDITORUL
SPECIFIC
PROCESOARELOR
8051

FIIERUL OBIECT n

MODULUL OBIECT
ABSOLUT

FIIERUL CU REFERINE
NCRUCIATE

BIBLIOTECA

Figura 2.3 Rolul link-editorului n generarea fiierelor obiect absolute

program, adugarea i extragerea unor module din bibliotec.

FIIERUL FORMAT
INTEL - HEX
FIIERUL OBIECT
ABSOLUT

CONVERTORUL
OHS51

FIIERUL SIMBOLIC
DIGITAL RESEARCH
HEX
FIIERUL 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:] mnemonic8051 [operand][,operand] [;comentariu] <CR><LF>28
drept separator de cmp sunt utilizate caracterele spaiu sau tabulatorul.
Prin etichet nelegem irul de caractere ASCII ce se sfrete prin caracterul ":".
Operanzii pot fi clasificai 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 biilor semnificativi ai microcontroller-ului
Adrese de interes din cadrul programului (n general adrese de salt)

Exemple:
START:
JMP

MAIN

;Aceasta este o etichet


;Aceasta este o instruciune de salt

LOOP:
DJNZ R7,LOOP
;R7 este simbolul corespunztor registrului R7, LOOP este simbolul corespunztor
;adresei de salt (acesta este un comentariu)
Utilizarea etichetelor nu este opional atunci cnd la adresele
corespunztoare 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
urmtoarele formate:
Baza
Sufix
Caractere acceptate
Exemple
Hexazecimal
H, h
0,1,,9,A,B,C,D,E,F
1234H, 0E7H29, 0A345h
Zecimal
D,d
0,1,2,3,4,5,6,7,8,9
1234, 1234D,023d
Octal
O,o
0,1,2,34,5,6,7
123O, 256O,111Q,125q
Binar
B,b
0,1
11011101B
irurile sunt expresii ce includ maximum dou caractere ncadrate ntre apostrofuri.
Exemple:
'A' evaluat ca 0041H
'AB' evaluat ca 4142H
'ab' evaluat ca 6162H, etc.
28

<CR> reprezint -returul de car ("Carriage Return" ), iar <LF> sfritul 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 faa 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 conine 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 fiier surs sau address symbol,
VALUE: reprezint valoarea numeric corespunztoare 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 A51.EXE admite drept nume de simboluri irurile de caractere de pn
la 31 de caractere, primul trebuind s fie obligatoriu un caracter alfanumeric:
'A','a','Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric.
Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce
definesc resurse ale microcontroller-ului respectiv. Iat cteva dintre acestea: A
=acumulatorul, R0,R1,..R7 sunt registre generale ale bancului curent, DPTR este
simbolul corespunztor registrului de adresare "Data Pointer", C este flag-ul de
transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la nmulire i
mprire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente.
Operatorii aritmetici recunoscui sunt:
Operatorul
Exemplu
Semnificaia
+, +5 +1 +0Ah
Semnul numrului
+,2+10-1
Reprezint operatorul aplicat
*
1234H*5
Repezint operatorul de multiplicare
/
45/9
Repezint operatorul de mprire
MOD
17 MOD 5
Reprezint operatorul de mprire ntreag
^
2^3
Reprezint operatorul de exponeniere
()
(2+5)*34
Precizeaz precedena operaiilor
Operatori binari utilizai sunt:
Operator Exemplu
Semnificaie
NOT
NOT 5
Complementul lui 5
HIGH
HIGH 1234H
Selecteaz partea mai semnificativ, respectiv
12H
LOW
LOW 1234H
Selecteaz partea mai puin semnificativ,
respectiv 34H a numrului 1234H

MICROCONTROLLERE

58

Operator
SHR,
SHL
AND
OR
XOR

Exemplu
2 SHL 4
0FEH AND 14H
0FEH OR 14H
0FEH XOR 14H

Semnificaie
Exprim deplasarea spre dreapta, respectiv stnga
a biilor numrului 2 cu 4 (ranguri)
Reprezint SI -ul logic ntre cei doi operanzi
Reprezint SAU -ul logic ntre cei doi operanzi
Reprezint SAU-EXCLUSIV ntre cei doi
operanzi

Operatorii relaionali sunt acei operatori ce compar doi operanzi.


Rezultatul comparaiei este ADEVRAT sau FALS, valori ce sunt returnate n
urma efecturii operaiei. Dintre aceti operatori amintim:
Operator
>= ,GTE
<= ,LTE
<> , NE
= , EQ
< , LT
> , GT

Exemplu
8>=17
8 LTE 45
8 NE 45
8 EQ 45
8 LT 45
8 GT 45

Semnificaie
Mai mare sau egal. Valoarea returnat: FALS
Mai mic sau egal. Valoarea returnat: ADEVRAT
Nu este egal. Valoarea returnat: ADEVRAT
Egal. Valoarea returnat: FALS
Mai mic dect. Valoarea returnat ADEVRAT
Mai mare dect. Valoarea returnat FALS

Precedena operatorilor este cea cunoscut i la alte limbaje de programare,


parantezele, apoi operatorii unari, adunarea i scderea, nmulirea i mprirea,
deplasarea, operatorii logici i n final operatorii relaionali.
Datele imediate, respectiv valorile numerice incluse n cadrul instruciunii
sunt reprezentate cu avnd caracterul '#' n fa. Exemple:
MOV A,#0ABH
;ncarc n A valoarea ABH, respectiv 171D
MOV DPTR,#8000H ;ncarc valoarea 8000H n DPTR
ANL A,#128
;Realizeaz operaia I logic ntre valoarea memorat n acmulator i valoarea
;128D
MOV R0,#DAT
;ncarc n registru R0, valoarea simbolului DAT
Adresarea datelor poate fi fcut n dou moduri distincte:
1. Direct caz n care informaia de adres este specificat chiar n codul
main respectiv
2. Indirect, caz n care simbolul inclus n codul main reprezint adresa
la care este memorat operandul utilizat de ctre instruciune. Pot fi
utilizai: registrele R0 i R1 sau registrul DPTR. Spaiul de adrese este
funcie de tipul de microcontroller.
Exemplele incluse pe CD detaliaz locaiile i adresele de memorie
inclusiv cele corespunztoare simolurilor corespunztoare fanioanelor
microcontroller-elor din familia 8051.
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 127
IDATA
reprezint zona adresabil indirect din memoria intern a
microcontroller-ului 0 la 127 sau 0 la 255 inclusiv.
XDATA reprezint zona adresabil pe byte situat n memoria extern
microcontroller-ului
BIT
reprezint zona adresabil pe bit situat ntre 20H i 27H inclusiv
CODE reprezint spaiul alocat codului (programelor executabile)
Rezervarea spaiului de memorie este realizat prin intermediul
dispoziiilor:
[Nume_bloc_memorie:]
DS
Dimensiune bloc de memorie
[Nume_variabil_byte:]
DB
Valoare de iniializare byte
[Nume_variabil_cuvnt:]
DW
Valoare de iniializare cuvnt
[Nume_variabil_bit:]
DBIT Valoare bloc bii
Dispoziiile 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 fiier 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 definete numele unui modul de program
Dintre dispoziiile de control a asamblrii menionm:
ORG adres Dispoziie ce specific adresa de la care se locateaz codul scris n
continuare
END Indic sfritul 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
Dm n continuare doar un exemplu ce ilustreaz cum funcioneaz cteva
dintre aceste directive.
LOC OBJ LINE
SOURCE
0020 1 VAL
EQU 20H
;Iniializeaz variabila byte VAL cu 20H
0010 2 VAL1
EQU 16
;Iniializeaz variabila byte VAL1 cu 16
3
DSEG

60

MICROCONTROLLERE

0000 4 DS
10H
;Rezerv 15 bytes n zona RAM intern
0010 5 REG23:
DS
11H
;Rezerv blocul REG23 de 17 bytes n zona RAM
0021 6 BITI:
DS
01H
;Rezerv 1 byte cu numele BITI
0030 7 VAL2
SET VAL+VAL1 ;Inializeaz variabila VAL2
;funcie de variabilele VAL, VAL1. Variabila poate fi redefinit n program
REG 8 COUNTER SET R0
;Definete variabila COUNTER ce poate fi redefinit n program
9
BSEG
AT
BITI+8
;Seteaz adresa de la care definim zona utilizator accesibil pe bit
0029 10 BIT_0:
DBIT 1
;Definete bitul BIT_0
002A 11 BIT_1:
DBIT VAL2 ;Definete funcie de VAL2 bitul BIT_1
0008 12 VAL2
SET 8H
;Redefinete variabila VAL2
0008 13 BIT_2
BIT
VAL2 ;Definete bitul BIT_2
14 XSEG AT 80H
;Definete zona memorie externe utilizator ncepnd de la adresa 80H
0080 15
STACK1 DATA 80H
;Definete pointer-el STACK1
16
CSEG
;Definete nceputul zonei "memorie de program"
0000 17
START CODE 00H
;Definete tipul memoriei
0000 020003 18
JMP MAIN
;Instruciune de salt
0003 19
ISR0 CODE START+3 ;Definete adres coresp. ISR0
000B 20
ISR1 CODE START+0BH ; Definete adres coresp. ISR0
0003 21
MAIN:
;Adres de salt (definit de eticheta MAIN)
0003 858081 22
MOV SP,STACK1 ;Iniializare cu STACK1 a SP
23 END
;Sfrit program surs
SYMBOL TABLE LISTING
------ ----- ------NAME
TYPE
V A L U E ATTRIBUTES
BITI . . .
D ADDR
0021H A
BIT_0. . .
B ADDR
0025H.1 A
BIT_1. . .
B ADDR
0025H.2 A
BIT_2. . .
B ADDR
0021H.0 A
COUNTER. . REG R0
ISR0 . . .
C ADDR
0003H A
ISR1 . . .
C ADDR
000BH A
MAIN . . .
C ADDR
0003H A
REG23. . .
D ADDR
0010H A
SP . . . .
D ADDR
0081H A
STACK1 . .
D ADDR
0080H A
START. . .
C ADDR
0000H A
VAL. . . .
N NUMB
0020H A
VAL1 . . .
N NUMB
0010H A
VAL2 . . .
N NUMB
0008H A

2. Programarea sistemelor cu MC

61

Alturi de dispoziiile mai sus menionate, pentru uurarea proiectrii


programelor sunt admise o serie de macro-instruciuni, specifice asamblorului, care
asigur asamblarea condiionat a fiierelor surs de program. Dintre avantajele pe
care un astfel de stil n programare le are, amintim:

Reduce substanial frecvena erorilor acolo unde aceleai secvene de


instruciuni 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
LOCAL
REPT
[Etichet:]
[Etichet:]

[list_parametrii_formali]30
Nume_simbol31 [,Nume_Simbol1][]
Numr_repetiii32

IRP
parametru_formal <list>
IRPC parametru_formal,parameru_actual
EXITMcomand terminarea buclei macro curente

Exemple:
Am specificat deasupra liniei de definiie elementele acesteia:
Nume definiie MACRO
Cuvnt cheie
Parametrul MACRO
1 CLR_MEM
MACRO
DIMENS
2
MOV
R0,#DIMENS ;ncarc n R0 valoarea DIMENS
3 LOOP:
;Eticheta de definire a buclei
4
MOV
@R0,#00H
;Scrie la adresa memorat n R0:00H
5
DJNZ
RO,LOOP
;Testeaz i cicleaz pn R0=0
6
ENDM
;Sfrit MACRO CLR_MEM
; Macro-ul realizeaz umplerea cu zero a memoriei interne de la adresa 000H i
; pn la adresa DIMENS
7 REP_OK:
;Definete o etichet de recunoatere
8
REPT 2
;Definete factorul de repetiie
9
MOV R0,#1 ;ncarc n R0 valoarea 1
10
MOV A,@R0 ;Transfer de la adresa 1 informaia n A
11 ENDM
;Sfrit surs program generat repetitiv
0000 7801
12+1 MOV R0,#1 ;Programul generat (4 instruciuni)
0002 E6
13+1 MOV A,@R0
0003 7801
14+1 MOV R0,#1
0005 E6
15+1 MOV A,@R0
0006
16 IRP_EX:
;Exemplu de generare succesiune instruciuni
17
IRP
X,<2,3> ;Definire variabil X
30

Parametri formali sunt variabile utilizate drept parametri n cadrul MACRO-ului


Variabil/simbol utilizat n spaiul macro-ului
32
Variabil ce precizeaz de cte ori se insereaz n codul surs blocul de instruciuni
cuprins ntre REPT i ENDM
31

MICROCONTROLLERE

62

18
19
20

MOV R0,X ;Definire instruciune ce include X


INC
R0
;Instruciune de incrementare;
ENDM
;Sfrit macro definiie repetitiv variabil
0006 A802
21+1 MOV R0,2 ;Cod generat cu prima valoare X
0008 08
22+1 INC
R0
0009 A803
23+1 MOV R0,3 ;Cod generat cu a doua valoare X
000B 08
24+1 INC R0
000C
25 IRPC_EX:
;Macro definiie repetivit ce utilizeaz variabila X dnd valorile 2,5 i 9
26
IRPC X,<259>
;Setare valori variabil X
27
MOV @R0,X
;Definire instruciune
28 ENDM
Sfrit macro definiie repetitiv
000C A602 29+1
MOV @R0,2 ;Definire instruciune cu valoarea X(1)
000E A605 30+1
MOV @R0,5;Definire instruciune cu valoarea X(2)
0010 A609 31+1
MOV @R0,9;Definire instruciune 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
Urmtoarele caractere sunt considerate caractere speciale n cazul macroasamblorului A51.EXE:

& concateneaz textul cu parametrii "dummy"


este utilizat pentru a introduce delimitatorii n text cum ar fi : , i spaiul
(blank)
; delimiteaz de la el pn la sfritul liniei zona ce nu va fi procesat de ctre
asamblor
! este folosit pentru a indica asamblorului c urmtorul caracter special va fi
considerat literal.
NUL este cuvntul cheie utilizat ca expresie a "non valorii", cci orice alt
caracter, inclusiv blank-ul ar fi interpretat de ctre 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
recunoaterea 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 definete titlul programului, care poate fi format dintr-un ir de caractere
(maximum 60) ce urmeaz cuvntului cheie
$ MOD51/NOMOD51 Definete/redefinete setul de registre. Implicit asamblorul
execut asamblarea considernd c programul este scris pentru un microcontroller
standard 8051, n celelalte situaii va trebui s inhibm opiunea prin dispoziia:
$ NOMOD51, urmat de dispoziia $ INCLUDE
$ MACRO/NOMACRO activeaz/inhib procesorul de MACRO-uri
$ DEBUG/NODEBUG include sau nu informaiile de depanare necesare debugerului sau emulatorului
$ DATE (30,02,00) cuvntul cheie este urmat de un ir ce exprim data (maximum
9 caractere)
$ OBJECT: nume_fiier indic numele fiierului ce va include rezultatul
asamblrii, respectiv fiierul cu codul obiect
$ REGISTERBANK/NOREGISTERBANK (Numrul/numerele bancurilor de
registre utilizate)
$ INCLUDE (Nume_fiier_cu_definiii_registre) permite specificarea ntre
paranteze a fiierului ce definete structura de registre specific procesorului pentru
care a fost scris programul
$ LIST/NOLIST indic liniile din cadrul fiierului surs ce nu vor fi listate n
fiierul listing rezultat n urma asamblrii
Utiliznd dispoziiile de asamblare condiionat putem scrie compact i
incluznd toate variantele de implementare programe. n acest scop asamblorul
pune la dispoziia programatorului urmtoarele dispoziii de asamblare
condiionat.
$SET/RESET (<var1>[,<var2>], ) sau (<var>=<valoare_numerica>[,])
$ IF expresie numeric ce va fi analizat dac este sau nu adevrat, n caz
afirmativ va fi asamblat programul ce urmeaz dispoziiei pn la ntlnirea
dispoziiei $ ENDIF
Alte dou opiuni pot completa dispoziia IF cu alternative la aceasta. Un
exemplu va fi edificator:
LOC OBJ
LINE SOURCE
1 $DEBUG
;Dispoziie de generare a simbolorilor pentru depanarea programului
2 $SET (A=1)
;Definete variabila A pentru comanda macro assembler-ului. Variabilei trebuie s
;i se atribuie o valoare atunci cnd este invocat operaia de asamblare a codului
;surs
3 $IF A=1
;Testare variabil A, Dac este adevrat
;condiia, se execut asamblarea instruciunii urmtoare

MICROCONTROLLERE

64

0000 E599

4
5

MOV A,SBUF;Instruciune de asamblat cnd A=1


$ELSEIF B=2
MOV R0,SBUF
$ELSE
;Alternativ la bifurcaia IF
MOV R1,SBUF
;Instruciune alternativ asamblat
$ENDIF
;Sfrit bifurcaie IF. ELSE.
10 $RESET
(A)
;Eliberare memorie corespunztoare variabilei A
11 $SET (B=2)
;Setare valoare pentru variabila B
12 $IF A=1
MOV A,SBUF
$ELSEIF B=2
;Dispoziie macroasamblor de testare iterativ tip IF. Este utilizat pentru
;simularea instruciunilor de tip CASE .. ON ELSE
0002 A899
15
MOV R0,SBUF
16 $ELSE
MOV R1,SBUF
$ENDIF
19 $RESET (B)
20 $IF A=1
MOV A,SBUF
$ELSEIF B=2
MOV R0,SBUF
$ELSE
0004 A999
25
MOV R1,SBUF
26 $ENDIF
27 END
n ncheiere prezentm sintaxa liniei de comand DOS ce invoc execuia
programului asamblor:
A51 Nume_fiier_surs.a51 [PRINT:CO:]
Utilizarea link-editorului se face tot din mediul DOS , linia de comand
avnd structura:
L51 list_fiiere_de_intrare [TO nume_fiier_ieire] [list_controale]<CR,LF>
Sau:
L51 fiier_de_comenzi <CR,LF>
Lista include nume de fiiere ce sunt separate prin caracterul ","
Numele fiierului de ieire trebuie precizat atunci cnd dorim ca fiierul cu
extensia logic ".M51" s fie specificat de ctre utilizator. n caz contrar, acest
fiier va lua numele primului fiier de lista fiierelor de intrare.
Fiierul de comenzi poate conine n format ASCII aceiai parametri ca i
cei din linia de comand. Informaii suplimentare gsii n cadrul CD-ului.

2. Programarea sistemelor cu MC

65

Un program deosebit de important este manager-ul de biblioteci LIB51.


Acest program asigur crearea unei biblioteci de funcii i actualizarea
acesteia. Linia de comand cu care este invocat programul are structura:
LIB51 [<comanda>]<CRLF>
Comenzile admise sunt:
Comanda
ADD
CREATE
DELETE
EXIT
HELP
LIST

Funciunea

Adaug un nou modul de program n bibliotec


Genereaz o bibliotec de funcii (iniial goal)
terge din bibliotec un modul de program
Revine n mediul DOS
Ofer scurte indicaii asupra comenzilor
Afieaz modulele i simbolurile publice nume ale bibliotecilor

Comanda de adugare (ADD) are sintaxa:


ADD nume_fiier
<CRLF>

[(nume_modul1,nume_modul2,)]

TO

nume_bibliotec

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 ieiri i "buffer"-e pe intrri. Avnd n vedere
caracteristicile specifice microcontrollerelor selecia porturilor este realizat n
spaiul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru
microcontroller-ele Atmel seriile 89Atxxxx (1051,2051,4051), ci variantele
89Atxx (51,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas,
etc. n figura 2.5 prezentm un sistem de dezvoltare dotat cu un monitor Franklin
ce are implementat o consol via interfaa serial. Sistemul dispune de 2 porturi
de ieire 1 port de intrare, precum i un port de comunicaie cu un afior cu cristale
lichide (LCD) i un decodificator pentru circuite de intrare/ieire cu 8 linii de
selecie.
Sistemul permite dezvoltarea unei aplicaii care poate include toate
elementele unui sistem dedicat. Evident dac se dorete, pot fi adugate
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 dispoziie toate semnalele de excitaie reale.

MICROCONTROLLERE

66

Memorie EEPROM

Porturi de intrare

Zona de dezvoltare
Microcontroller
Memorii EPROM /SRAM

Porturi de ieire

Figura 2. 5 Sistem de dezvoltare cu microcontroller PCB80C552

Programul monitor "mt.exe"funcioneaz mpreun cu monitorul Franklin


i prezint cteva comenzi:
A [adres] <CR,LF> Asambleaz cod 8051 de la adresa specificat
BD [ALL] < numr_break_point> Invalideaz toate break point-urile sau cel
specificat prin numr ce reprezint chiar indexul acestuia
BE [ALL] < numr_break_point> Valideaz break point-urile.
BK [ALL] <numr_break_point> terge toate break point-urile sau doar cel
specificat
BL Listeaz break point-urile setate
BS <adres>Seteaz (stabilite) un break point la adresa precizat
DB (Display Bits) <adres_start> <adres_stop> Afieaz zon memorie accesibil
pe bit ntre adresele de start i stop
DD (Display Data) <adres_start> <adres_stop> Afieaz 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> Afieaz zon memorie
accesibil pe octet indirect ntre adresele de start i stop
DX (Display Extended Data) <adres_start> <adres_stop> Afieaz 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> Afieaz 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 aceleai semnificaii ca i la Dispoziia
Display pentru diversele zone de memorie
G <adres_start> <adres_break> Dispoziie de execuie program ntre adresa de
start i cea de break
? Dispoziie de help "on-line"
H<numr1><numr2> Dispoziie de calcul n hexazecimal valoare sum/diferen
numr1, numr2
T <adres_start> execut pas cu pas instruciunile programului cu afiarea tuturor
registrelor microcontroller-ului
X[<nume_registru>] afieaz toi/registrul specificat
F1 tast special ce permite ieirea din program
F2 tast special care permite ncrcarea programelor n format Intel-HEX via
interfaa serial (consola)
F3 tast special ce permite salvarea n cadrul unui fiier al crui nume este
specificat de ctre operator a caracterelor recepionate via interfaa 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
corespunztor fiecrui microcontroller. Mediul MPLAB cuprinde urmtoarele
componente:
Editorul fiierelor surs
Asamblorul
Compilatorul C
Linkeditorul
Editorul de stimuli
StarterPIC sistemul de dezvoltare minimal pentru dezvoltarea aplicaiilor
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 16 bii.
Mediul integrat dispune de ferestre ce permit att editarea programului
surs, vizualizarea fiierului list rezultat n urma asamblrii, 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 urmrete


evoluia programului i cea corespunztoare memoriei EEPROM de care
microcontroller-ele din familia PIC dispun.
Meniurile mediului integrat sunt n numr de 3 i anume:cel corespunztor
funciunilor de editare i salvare fiiere i proiecte, cel corespunztor procesrii
fiierelor surs, respectiv asamblrii sau compilrii, al link-editrii fieirelor obiect
i cel corespunztor testrii/simulrii programelor scrise, ce permite execuia pas
cu pas, admite editarea i administrarea de stimuli sistemului precum i n final,
programarea microcontroller-ului respectiv.
n ceea ce nsemn dispoziiile de asamblorului MPASM, apar mici
deosebiri fa de asamblorul A51.EXE. n continuare vom prezenta cteva dintre
aceste deosebiri, o list complet de referin o putei gsi pe CD.
Sistemul de numeraie
Zecimal
Hexazecimal
Octal
Binar
Caracter (ASCII)

Sintaxa
D'<digii>, .<digii>
H'<digii>', 0x< digii >
O'< digii >'
B'< digii >'
'<caracter>', A'<caracter>'

Exemple
D'123', .255
H'EF' , 0xE32A
O'1234'
B'11010011'
'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
CONSTANT
#DEFINE
EQU
#INCLUDE
PROCESSOR
SET
#UNDEFINE
VARIABLE
IF
WHILE

Descriere
Definete un simbol drept
constant n program
Definete text de substituie
Definete o constant
Include un fiier surs
Definete tipul procesorului
Asigneaz o valoare unei
variabile (poate fi apoi
redefinit)
Renun la definiia anterior
precizat prin #DEFINE
Declar un simbol drept
variabil
Definete o macroinstruciune de decizie
Realizeaz buclarea atta
timp ct condiia testat la
nceput este adevrat

Sintaxa
Constant<etichet>=[<expresie>,
<etichet>=<expresie>,..]
#define <nume> [<arg>,<arg>,..]
<etichet> equ <expresie>
include <nume_fiier>
Processor <tip_procesor>
<etichet> set <expresie>
#undefine <etichet>
variable <etichet>[=expresie]
if <expresie>
while <>expresie

2. Programarea sistemelor cu MC

Directiva
BANKISEL
RES
FILL
DA
DATA
DB
DE
DT
DW
MACRO
EXITM
GLOBAL
__MAXRAM

Descriere
Selecteaz un banc de
memorie intern pentru acces
indirect
Rezerv spaiu de memorie
Umple o zon de memorie cu
o anume informaie
mpacheteaz n memoria de
program un ir
Creaz o valoare numeric
sau una text
Declar un byte
Declar o dat n EEPROM
Definete o tabel
Declar o dat un cuvnt
Definete un MACRO
Ieire dintr-unMACRO
Export definiia unei
etichete
Specific adresa maxim
pentru memoria RAM

69

Sintaxa
bankisel <etichet>
res <numr_de_locaii>
fill <expresie>,<numr_locaii>
<etichet> da
<expresie>[,<expresie>,]
data <expresie>[,<expresie>..],
data <text>[,<text>,..]
db <expresie>[,<expresie1>,..]
de <expresie>[,<expresie1>,..]
dt <expresie>[,<expresie1>,..]
dw <expresie>[,<expresie1>,..]
<etichet> macro [<argument>,
<argument1>,..]
Exitm
global <etichet>
__maxram <expresie>

Opiunile de link-editorului MPLINK atunci cnd este invocat sunt:


/o nume_fiier
/m nume_fiier
/l pathlist
/k pathlist
/n length
/h , /?
/a hexformat
/q
/d

specific fiierul de ieire


specific generarea fiierului "hart" nume_fiier
specific (adun)calea la fiierul bibliotec ce este link-at
specific (adun) calea la fiierul script utilizat de linker
specific numrul de linii llistate pe pagin
afieaz fiierul de ajutor corespunztor link-erului
specific formatul HEX pentru fiierele de ieire
iese din link-are
evit crearea fiierului listing absolut

3
MICROCONTROLLERE MOTOROLA
(MC cu arhitectur CISC)
Motorola a dezvoltat cteva tipuri de uniti centrale, la care s-au ataat o
multitudine de interfee, obinnd astfel foarte multe tipuri de circuite, compatibile
din punct de vedere software. Motorola a creat astfel posibilitatea producerii a
nenumrate variante de MC, care s acopere ct mai multe din aplicaiile
utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated
Circuit). Spre deosebire de familia 8051 unde pe nucleul creat de INTEL, firme
constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de
MC, obinnd astfel o unitate n diversitate.
Schema bloc simplificat a unui MC din familia Motorola este dat n
figura 3.1.
Memorie ROM,
EPROM sau OTP

+VDD
(+5V/+3V)

Unitatea central
6805, 6808...

RESET
IRQ

Memorie RAM

Oscilator

Memorie
EEPROM

Magistrala de date i
adrese

Port A

Port B

Port C
Porturi cu funcii
speciale (timer, CAN,
SPI, SCI)

Figura 3.1 Schema bloc a unui microcontroller Motorola

71

3. Microcontrollere Motorola

Porturile I/O pot fi de uz general, dar liniile porturilor pot fi utilizate i de


interfeele speciale. n continuare vor fi prezentate blocurile din structura MC
Motorola 6805.

3.1

MC M68HC05

3.1.1 Memoria intern


MC din familia Motorola, ca i toate circuitele MC, sunt echipate cu
memorie RAM, ROM i EPROM (OTP). Fiecare din memorii are o capacitate
specific fiecrui tip particular de circuit. Memoria poate fi format din 176 304
octei de RAM, 240 octei de ROM i 7600 7744 octei 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 ncrcat cu
informaie de tip program prin portul SCI, urmnd ca programul s fie executat din
RAM. Memoria ROM este folosit pentru a stoca programe. Modulul ROM
conine i programul care coordoneaz ncrcarea RAM prin portul SCI. Memoria
EPROM (OTP), ca i memoria ROM, conine programe i variabile specifice
aplicaiei cu diferena c acestea sunt nscrise de utilizator, nu de fabricant.
n acelai spaiu de adresare se afl memoria de diferite tipuri, registre I/O
i registre de control i stare, privite ca locaii 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 (MC68HC705J1A) este dat n
tabelul 3.1. Pentru a putea lucra cu un MC particular trebuie studiat alocarea
(maparea) memoriei din catalog pentru acel MC, tabelul 3.1 este doar orientativ.
Tabelul 3.1
Maparea memoriei la MC68HC05J1A
Coninut
Date port A
Date port B
Nefolosit
DDR pentru port A
DDR pentru port B

Adresa (H)
0000
0001
0002-0003
0004
0005

72

MICROCONTROLLERE

Coninut
Nefolosit
Stare i control pentru timer
Registru numrtor pentru timer
Stare i control a ntreruperilor
Nefolosit
Nefolosit
Registru de programare a EPROM
Nefolosit
Nefolosit
RAM utilizator sau stiv (64 octei)
Nefolosit (512 octei)
EPROM (1232 octei)
Nefolosit (30 octei)
Test ROM (2 octei)
Registru COP
Registru de mti
Rezervai
Vector pentru timer (octet semnificativ)
Vector pentru timer
Vector pentru IRQ (octet semnificativ)
Vector pentru IRQ
Vector pentru SWI (octet semnificativ)
Vector pentru RESET (octet semnificativ)
Vector pentru RESET

Adresa (H)
0006-0007
0008
0009
000A
000B-0011
0012-0017
0018
0019-001F
0020-00BF
00C0-00FF
0100-02FF
0300-07CF
07D0-07ED
07EE-07EF
07F0
07F1
07F2-07F7
07F8
07F9
07FA
07FB
07FC
07FE
07FF

3.1.2 Unitatea central


Unitatea central realizeaz prelucrarea datelor pe 8 bii la o frecven
intern de 2MHz (tact extern de 4MHz), are o magistral de adrese de 11-14 bii i
conine 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 instruciuni
(von Neumann) i conine urmtoarele registre:
Registrul Acumulator (Accumulator - A) este un registru pe 8 bii de uz general.
El nu este afectat de Reset.
Registrul index (Index Register - X) este un registru pe 8 bii folosit la adresrile
indexate. Nu este afectat de Reset.
Registrul indicator de stiv (Stack Pointer - SP) este un registru de 13 bii care
conine adresa urmtoarei locaii libere n stiv. Dup Reset indicatorul de stiv
devine 00FFh.

73

3. Microcontrollere Motorola

Unitatea central 6805


Acumulator

UAL
Unitatea aritmetic i logic

Registru index
Indicator de stiv
Numrtor de program (PC)
Registru de condiii

Figura 3.2. Unitatea central 6805

Registrul numrtor de program (Program Counter - PC) este un registru de 13


bii care conine adresa urmtoarei instruciuni de executat. Dup execuia
instruciunii registrul este incrementat. Un salt sau o ntrerupere determin
ncrcarea PC cu alt valoare dect adresa urmtoarei locaii. Dup Reset registrul
PC este ncrcat cu coninutul locaiilor 3FFEh i 3FFFh (la MC68HC705J1A).
Registrul de condiii (Condition Code Register - CCR) este un registru de 8 bii
(din care sunt folosii 5) cu urmtoarea semnificaie:

Bitul 0 -LSB, (Carry/Borrow Flag) poziionat dac o adunare produce un


transport sau dac la o scdere este nevoie de mprumut.
Bitul 1 (Zero Flag), poziionat dac rezultatul unei operaii este zero.
Bitul 2 (Negative Flag), poziionat dac rezultatul unei operaii este
negativ (bitul 7 este 1).
Bitul 3 (Interrupt Mask Bit) cnd este 1 sunt invalidate ntreruperile. Dac
apare o ntrerupere cnd acest bit este 1, ea este memorat pn bitul
devine 0; atunci se salveaz registrele UC n stiv. Dup Reset bitul este
setat n 1 i poate fi poziionat n 0 cu instruciunea CLI.
Bitul 4 (Half-Carry) este poziionat cnd apare un transport de la bitul 3
spre 4 n acumulator la o operaie de adunare cu sau fr Carry. Este util la
operaii BCD.

Unitatea aritmetic i logic realizeaz operaiile aritmetice i logice


definite de setul de instruciuni. Multe din instruciunile aritmetice se bazeaz pe
algoritmul de la adunare. Astfel, o nmulire este realizat printr-un ir de adunri
i deplasri succesive i dureaz 11 perioade de clock.

74

MICROCONTROLLERE

Iniializarea unitii centrale


Un Reset duce unitatea central ntr-o stare determinat (la o adres
cunoscut). Un Reset poate fi declanat 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 ctre ceasul de gard, Computer Operating Properly (COP).
ncercarea de a executa o instruciune de la o adres ilegal. Dac
unitatea central ncearc s execute o instruciune care nu este n
EPROM sau RAM se genereaz un RESET pentru a proteja MC de
scrieri sau citiri din zone necontrolate.

3.1.3 Moduri de adresare


Unitatea central folosete 8 moduri de adresare pentru o ct mai mare
flexibilitate n utilizare:
1. adresare inerent - instruciunile nu au operand, cum este ntoarcerea din
ntrerupere (RTI) sau STOP. Instruciunile inerente au lungimea de un octet.
2. adresare imediat - instruciunile au un operand, care este o valoare imediat
utilizabil ntr-o operaie cu acumulatorul sau cu registrul index. Instruciunile
au doi octei, primul fiind codul, iar al doilea valoarea imediat.
3. adresare direct - instruciunile pot avea acces la primele 256 de locaii de
memorie. Instruciunile sunt pe doi octei, primul este codul iar al doilea este
octetul cel mai puin semnificativ al adresei operandului; octetul cel mai
semnificativ este considerat implicit 00h.
4. adresare extins - instruciunile sunt pe trei octei i pot adresa orice locaie
de memorie. Primul octet este codul, al doilea este adresa (parte HIGH) iar al
treilea este adresa (partea LOW).
5. adresare indexat fr offset - instruciunile au un octet i pot avea acces la
locaii cu adresa variabil din registrul index (care conine partea LOW a
adresei). Pentru partea HIGH se folosete 00h, aa nct aceesul este n zona
0000-00FFh.
6. adresare indexat cu offset pe 8 bii - instruciunile au doi octei, fiind
accesibile locaii cu adresa variabil n zona primelor 511 locaii. Unitatea
central adun octetul din instruciune la registrul index (fr semn) i se
obine 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
instruciunii.
7. adresare indexat cu offset pe 16 bii - instruciunile au trei octei, fiind
accesibile toate locaiile. UC adun fr semn registrul index la cei doi octei
din instruciune i se obine adresa efectiv a operandului (primul octet dup
codul instruciunii este octetul HIGH).
8. adresare relativ este folosit n instruciunile de salt. La un salt relativ, se
adun (cu semn) octetul care urmeaz dup codul instruciunii la coninutul
registrului Program Counter. Se pot face salturi relative n gama 127 de octei
nainte sau napoi.

3.1.4 Setul de instruciuni


Unitatea central MC68HC05 are 61 de instruciuni (mai mult de 200 de
coduri). Cteva dintre instruciunile mai importante, clasificate dup tipul operaiei,
sunt enumerate n continuare.
Operaii registru- memorie
ADD, ADC - adun coninutul unei locaii de memorie la acumulator (fr
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 - scdere cu sau fr mprumut
STA, STX - salvare acumulator (registru index) n memorie
MUL - nmulire
Operaii de tip citete- modific- scrie
ASL,ASR, LSL, LSR - deplasare aritmetic (logic) stnga (dreapta)
BSET, BCLR - setare sau resetare bit
CLR - resetare registru
COM - complement fa de 1
NEG - complement fa de 2 (negare)
ROL, ROR - rotaie stnga (dreapta) prin Carry
TST- - test pentru zero sau negativ
Operaii de salt
BCC, BCS - dac bitul Carry este 0 sau 1
BEQ, BNE - dac este egal (sau nu)
BHCC, BHCS - dac bitul Half Carry este 0 sau 1
BHI, BHS - dac este mai mare ori mai mare sau egal
BLO, BLS - dac este mai mic ori mai mic sau egal

76

MICROCONTROLLERE

BIH, BIL - dac linia de ntrerupere extern este 1 sau 0


BMI, BPL - dac este negativ (sau pozitiv)
BMC, BMS - dac masca de ntrerupere este 0 sau 1
BRA, JMP - salt necondiionat
BSR, JSR - salt la subrutin
Manipulare la nivel de bit
BCLR, BSET - nscrierea unui bit cu 0 (sau cu 1)
BRCLR, BRSET - salt dac un bit este 0 (sau cu 1)
Operaii de control
CLC, SEC - nscriere cu 0 (cu1) a bitului de Carry
CLI, SEI nscriere cu 0 (cu 1) a mtii pentru ntrerupere
NOP - nu se execut nici o operaie
RTI, RTS - ntoarcere din ntrerupere (subrutin)
STOP, WAIT - se oprete oscilatorul CPU i se ateapt o ntrerupere
extern (se valideaz ntreruperile)
SWI - ntrerupere software
TAX, TXA - transfer acumulatorul n registrul index (sau invers)

3.1.5 Sistemul de ntreruperi


Unitatea central poate fi ntrerupt din programul curent de urmtoarele
surse:

un 0 logic aplicat din exterior pinului nIRQ;


un 1 logic aplicat din exterior la pinii PA3-PA0 ai portului I/O PA,
dac aceste ntreruperi sunt validate;
o ntrerupere de la timer-ul sistemului (TOF Timer Overflow sau RTIF
Real Time Interrupt), dac ntreruperea este validat;
instruciunea de ntrerupere software SWI.

Dac o ntrerupere vine n timp ce UC execut o instruciune, instruciunea


n curs este terminat i apoi se consider ntreruperea. ntreruperile pot fi
invalidate global n registrul condiiilor de program (CCR) i individual pentru
fiecare surs n parte. Un Reset inhib toate ntreruperile pentru ca procesul de
iniializare s nu poat fi ntrerupt.
La apariia unei ntreruperi, unitatea central termin instruciunea 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 instruciunea RTI care restaureaz registrele UC din stiv. Vectorii de
ntrerupere pentru fiecare dintre sursele enumerate mai sus sunt stocai n memorie
la adresele:

3. Microcontrollere Motorola

timer
nIRQ sau PA
instruciunea SWI
Reset (POR, RESET din exterior, COP sau adres ilegal)

77

07F8h i 07F9h;
07FAh i 07FBh;
07FCh i 07FDh;
07Feh i 07FFh.

Adresele vectorilor pentru fiecare tip de MC se gsesc n harta memoriei


furnizat de productor.
Unele MC din familie au i alte interfee care pot i ele s solicite
ntreruperi, aa cum poate cere circuitul timer.
Pn la servirea ntreruperii trece un anumit interval de timp (tacte), timp
necesar pentru ca UC s termine instruciunea 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 instruciune este MUL, care dureaz
11 tacte, iar unitatea central are nevoie de 9 tacte pentru a salva registrele n stiv,
deci cel mai lung timp de ateptare pentru servirea unei ntreruperi este de 20 de
tacte. Acest timp trebuie s fie luat n calcul n momentul realizrii unei aplicaii n
timp real. Dac survine o a doua ntrerupere, timpul de ateptare pentru servirea ei
poate fi prea lung. O soluie ar fi validarea ntreruperilor n timpul servirii primei
ntreruperi. n acest caz trebuie avut grij ca stiva s fie destul de mare pentru a
permite salvarea a dou seturi de registre.

3.1.6 Interfee i periferice on-chip


Blocurile funcionale integrate n circuitul MC sunt de o deosebit
importan n implementarea unei aplicaii. Este n egal msur important s fie
cunoscute i bine stpnite att capabilitile unitii centrale ct i ale interfeelor
cu care este echipat MC aceast cunoatere conduce la o exploatare performant
a resurselor.
a. Porturi paralele I/O
Porturile paralele I/O sunt forma cea mai simpl a interfeelor.
MC68HC705C8 dispune de 31 de linii I/O digitale de uz general grupate n patru
porturi. Porturile A, B, i C sunt porturi de cte opt bii fiecare; sensul transferului
pe fiecare linie (intrare sau ieire) poate fi stabilit prin program. Fiecrei linii i este
asociat un bit ntr-un registru de direcie (DDR Data Direction Register).
Organizarea porturilor de opt bii (A,B i C) este identic.
Portul D dispune de apte linii (fr PD6); acestea pot fi folosite doar ca
linii de intrare. O particularitate a acestui port este faptul c pinii corespunztori
sunt folosii fie de portul D, fie de porturile seriale SPI i SCI, n funcie 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 instruciuni
specifice. Liniile pot fi apelate grupat, la nivel de port sau individual, la nivel de

78

MICROCONTROLLERE

bit. Pentru a economisi timpul unitii centrale, interfeele pot lucra cu unitatea
central prin intermediul ntreruperilor.
b. Portul serial asincron SCI (Serial Communications Interface)
SCI este un transmitor receptor asincron universal (UART) cu
posibilitatea lucrului full-duplex. Pentru un transfer bidirecional sunt suficieni doi
pini. Cu circuite de translaie de nivel RS232 se pot face transferuri la distane
suficient de mari. Se poate programa una din 32 viteze de transmisie i lungimea
caracterului; se pot valida separat transmitorul i receptorul; se pot genera
ntreruperi n diferite situaii; se poate detecta eroare de cadrare la recepie.
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 bii 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 poziionarea bitului TE (Transmit
Enable) n registrul de control al SCI (SCCR2). Dup ce cuvntul a fost transmis,
se poziioneaz 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 poziioneaz 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 recepionate n SCDR, la recepia complet fiind poziionat
bitul RDRF (Receive Data Register Full) n SCSR. Pentru eliminarea recepiilor
false fiecare bit de start este eantionat i citit de 16 ori; orice nepotrivire a
eantioanelor duce la respingerea acestui bit. Dac nu se recepioneaz bitul de
STOP se anun o eroare de cadrare prin poziionarea bitului FE n SCR.
ntreruperile la recepie pot fi generate dac bitul RDRF din SCSR indic
recepia unui caracter, dac este o eroare de vitez de recepie (prin recepia unui
caracter nainte ca cel precedent s fi fost citit) sau dac s-a recepionat un caracter
special format numai din valori de 1.
Structura registrului de control SCCR1 este:
Bit 7 este al 9-lea bit recepionat dac s-a definit o transmisie pe 9 bii
Bit 6 este al 9-lea bit de transmis dac s-a definit o transmisie pe 9 bii
Bit 4 comand lungimea caracterului, 8 sau 9 bii
Bit 3 este un bit de trezire care comand ce fel de condiie trezete 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

79

3. Microcontrollere Motorola

Bit 4 - ILIE Idle Interrupt Enable Bit -valideaz ntreruperile cerute de


caracterul ir de 1
Bit 3 - TE Transmit Enable - valideaz transmisia
Bit 2 - RE Receive Enable - valideaz recepia
Bit 1 - RWU Receiver Wakeup Enable - pune receptorul n stare de ateptare
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 recepie plin
Bit 4 - IDLE - s-a recepionat un ir de 1
Bit 3 - OR Receiver overrun - eroare de vitez de recepie
Bit 2 - NF Receiver Noise - s-au detectat perturbaii n datele citite (prin
eantionarea bitului de START)
Bit 1 - FE Framing Error - eroare de cadrare.
Registrul ratei de transfer este descris n tabelul 3.2.
Tabelul 3.2
Coninutul registrului ratei de transfer

Bit 5
0
0
1
1

Bit 4
0
1
0
1

Ceas pentru transfer


ceas intern
ceas intern /3
ceas intern/4
ceas intern/13

Bit 2
0
0
0
0
1
1
1
1

Bit 1
0
0
1
1
0
0
1
1

Bit 0
0
1
0
1
0
1
0
1

Rata de transfer
ceas de transfer
ceas de transfer/2
ceas de transfer/4
ceas de transfer/8
ceas de transfer/16
ceas de transfer/32
ceas de transfer/64
ceas de transfer/128

Rata de transfer se obine printr-o dubl divizare, nti se obine un ceas de


transfer prin divizarea ceasului intern, apoi se divizeaz ceasul de transfer. Se pot
astfel obine diferite rate de transfer, de exemplu 4800 Baud (4808) la un ceas de
2MHz prin divizarea nti cu 13, apoi cu 1.
c. Portul serial SPI (Serial Peripheral Interface)
Cu acest port se poate realiza o comunicaie sincron simpl, folosit de
regul pentru a transfera date ntre circuite pe acelai montaj cu MC. Un transfer
bidirecional 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 iniiat 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 poziioneaz 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 recepie, acelai cu cel de transmisie. Cnd au intrat 8 bii, 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.
Poziionnd bitul MSTR din registrul SPCR n 1, MC lucreaz n mod
master. n acest mod pinii au urmtoarea semnificaie:

SCK (Serial Clock) este ieire de tact pentru sincronizare;


MOSI (Master Output Slave Input) este ieirea serial;
MISO (Master Input Slave Output) este intrarea serial;
nSS (Slave Select) protejeaz MC dac dou circuite sunt master.
Acest semnal activ dezactiveaz la cellalt port SPI modul master,
terge bitul MSTR i poziioneaz bitul de eroare (MODF Mode Fault
Flag).

Cu bitul MSTR=0 se valideaz modul slave, n care pinii au semnificaia:

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 ieirea serial;
nSS (Slave Select) valideaz SPI pentru modul slave.

n figura 3.3 este artat o conexiune SPI n care sunt legate un circuit master i
mai multe circuite slave.
SPI
MISO
MOSI
SCK
/SS

+1
Port I/O

0
1
2
MC master

nSS SCK MOSI MISO

nSS SCK MOSI MISO

Dispozitiv slave

Dispozitiv slave

Figura 3.3 Conexiune SPI

3. Microcontrollere Motorola

81

Circuitele slave sunt validate pe rnd cu semnale dintr-un port de ieire


auxiliar.
Pentru a putea adapta transmisiei seriale ct mai multe echipamente
seriale, se poate programa faza i polaritatea ceasului de sincronizare cu biii
CPOL i CPHA din SPCR.
n SPI pot s apar urmtoarele 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 urmtorul octet s soseasc (suprascriere).

O ntrerupere poate fi generat n urmtoarele situaii:

registrul de date este gol sau plin (la transmisie respectiv la recepie) se
semnaleaz cu SPIF care poate genera o ntrerupere dac ntreruperea este
validat cu SPIE;
la apariia 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
frecvena fix i una cu frecvena variabil, i pn la cel mai complex (MC68332)
care conine un temporizator cu propria lui unitate aritmetic i logic proiectat
special pentru controlul motoarelor cu ardere intern.
Un timer tipic (de la MC68HC705J1A), 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 (frecvena cristalului/2)
care, dup o divizare cu 4, constituie tact pentru un numrtor de 8 bii. Valoarea
acestui registru numrtor poate fi citit de UC n oricare moment la locaia 09h
(TCR Timer Counter Register). UC nu poate s modifice valoarea acestui registru.
Cnd numrtorul trece de la FFh la 00h este poziionat bitul TOF (Timer Overflow
Flag) n registrul de stare al timer-ului (TCSR Timer Control and Status Register).
Starea acestui bit poate fi citit de UC n oricare moment. Dac bitul TOIE (Timer
Overflow Interrupt Enable) din registrul de stare TCSR este 1, n momentul trecerii
de la FFh la 00h se genereaz o ntrerupere, numit ntrerupere de depire
(Overflow Interrupt).
Ieirea numrtorului de 8 bii constituie tact pentru un alt numrtor de 7
bii. Ieirea de la oricare dintre cei mai semnificativi 4 bii ai acestui ultim
numrtor (selectat de unul din cei doi bii RT1 i RT0 din registrul de control
TCSR) poate fi folosit pentru generarea unei ntreruperi, numit de timp real
(Real Time Interrupt) care nscrie bitul RTIF (Real Time Interrupt Flag) din
TCSR. Se genereaz o ntrerupere dac bitul RTIE (Real Time Interrupt Enable)
este 1.

82

MICROCONTROLLERE

Divizare
cu 4

Numrtor de 8 bii

MSB

TCR (Timer Counter Register) la adresa 0009h


Xtal/2
TCSR registru de control i stare a timerului
TOF RTIF TOIE RTIE TOFR RTIFR RT1 RT0

Numrtor de 7 bii

Numrtor de 3 bii
COP

Selecie ieire

Generare de Reset
intern al UC

Figura 3.4 Timer 6805

Ultimul nivel al timer-ului este un numrtor de 3 bii 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 RT1 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.

RT1
0
0
1
1

RT0
0
1
0
1

Perioada de ntrerupere
8.2ms
16.4ms
32.8ms
65.5ms

Perioada n care COP trebuie resetat


57.3ms
114.7ms
229.4ms
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 tranziie pe pinul TCAP). n acest moment memoreaz
coninutul registrelor timer-ului n registrele de captur. Memorarea registrelor
timer-ului la tranziii de aceeai polaritate a TCAP poate determina perioada unui

83

3. Microcontrollere Motorola

semnal, iar la tranziii de polaritate opus poate determina limea unui impuls.
Polaritatea de declanare este programabil. Prin comparare se poate genera un
semnal de ieire cnd numrtorul timerului atinge o valoare selectat. La fiecare 4
tacte se compar valoarea numrtorului cu cea scris n registrul de comparare.
Dac este egalitate se genereaz un semnal TCMP.
e. Portul PWM
Modulaia impulsurilor n lime (Pulse Width Modulation) are multe
aplicaii, 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 conine 5 canale PWM de cte 6 bii care sunt
realizate cu ajutorul unui numrtor de 6 bii, 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).
R
E
G
I
S
T
R
U

PWM4 (000Dh)

PWM3 (000Ch)
Numrtor de 6
bii

PWM2 (000Bh)

PWM1 (000Ah)

PWM0 (0009h)

PWM 4

PWM 3

D
E

PWM 2

M
O
D

PWM 1

P
W
M

PWM 0

0008h
Figura 3.5 Structura modulului PWM la familia 6805

n registrul de mod sunt 5 bii 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 ieiri PWM, liniile
portului D pot fi folosite ca intrri/ieiri obinuite. Registrul de mod PWM se afl
la adresa 0008h.

84

MICROCONTROLLERE

Dac se ncarc registrul de date cu 00h semnalul la ieire va fi tot timpul


zero. nscrierea valorii 20h n registrul de date are ca rezultat un semnal cu factor
de umplere 50% la ieirea corespunztoare, iar ncrcarea valorii 3Fh va determina
un semnal cu factor de umplere de 63/64.
f. Portul USB (MC68HC05JB4)
MC68HC05JB4 conine un convertor A/D i o interfa USB, ceea ce l
face ideal pentru achiziia de date i transferul lor ctre un calculator PC-AT.
Datorit structurii USB, este posibil realizarea unui punct central de prelucrare
echipat cu PC i multe puncte de achiziie echipate cu acest MC.
Modulul USB implementeaz standardul USB 1.0, de mic vitez, la
1,5Mbps, cu 3 puncte de capt (End Point). MC conine i transceiverul USB.
Schema bloc a modului USB este dat n figura 3.6.
MC
Logica de
control USB

Transceiver

Cablu USB

D+
D-

Registre USB

spre HUB sau


alt dispozitiv

Stabilizator 3,3V

BUS INTERN

Figura 3.6 Structura intern a portului USB

Transceiverul are o ieire diferenial care poate lucra cu 3 stri pentru a


permite transferul de date bidirecional de tip full-duplex. Receptorul trebuie s fie
de asemenea cu intrri difereniale.
Comanda interfeei 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 funcionare n ntreruperi este programat
prin registrul de ntreruperi. Interfaa USB poate lucra n modul de economie de
energie dac nu exist trafic pe linii un anumit interval de timp. Apariia unei date
la recepie sau emisia unei date de ctre UC produce ieirea din starea inactiv.

85

3. Microcontrollere Motorola

g. Interfaa LCD
MC6805 DragonKat este denumirea unui MC din familia 6805 care
conine o interfa pentru un afior cu cristale lichide.
Interfaa pentru LCD conine:

logica de control pentru sincronizare;


RAM-ul de display care stocheaz datele pentru display printr-o
coresponden 1 la 1 a biilor (fiecare bit din memorie are
corespondent un punct pe LCD). Memoria este organizat n cuvinte
de 5 bii i poate fi scris sau citit;
registru de date este folosit pentru a stoca datele din memoria RAM a
LCD;
generator de tensiune care conine un divizor de tensiune pentru
alimentarea segmentelor i a planului din spate;
driver pentru planul din spate;
driver pentru segmente.

Structura unui afiaj LCD este artat n figura 3.7.


Segmente (SEG 0-39)
Planul
din spate
(BP 0-15)

Figura 3.7 Afiaj LCD

Un punct este aprins cnd o linie Bpi i una SEGi sunt active. Pentru
caracterul A, memoria RAM de display are coninutul din tabelul 3.4.
Tabelul 3.4
Coninutul memoriei pentru afiarea caracterului A

Adresa
200
201
202
203
204
205
206
207

Bit0
0
0
1
1
1
1
1
0

Bit1
0
1
0
0
1
0
0
0

Bit2
1
0
0
0
1
0
0
0

Bit3
0
1
0
0
1
0
0
0

Bit4
0
0
1
1
1
1
1
0

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 afiajul pentru a menine
punctele aprinse. Frecvena semnalelor de aprindere a punctelor este de 32kHz, iar
frecvena unui cadru este de 62,5Hz.
Dimensiunea panourilor LCD difer, de aceea difer i consumul de
curent. Tensiunea spre afiaj este obinut prin nserierea unor rezistene, nseriere
care poate fi comandat soft.
Schema bloc a interfeei pentru LCD este dat n figura 3.8
Magistrala intern de
adrese si date

Registru
de control

RAM pentru display 128x5bit

Registru de
date LCD
(40bii)

Driver
pentru
planul
din
spate
BP0-BP15

Driver de segmente

SEG0-SEG39
Figura 3.8 Schema bloc a intefeei LCD

3.1.7 Managementul puterii


Instruciunea 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.
Instruciunea WAIT plaseaz UC ntr-un mod de lucru cu consum redus de
energie. Rmn active timer-ul i canalul serial SCI. Orice ntrerupere validat,
primit din exterior sau de la temporizator sau SCI, trezesc unitatea central.

87

3. Microcontrollere Motorola

ntreruperile sunt validate automat. Toate registrele i memoria rmn cu datele


avute la intrarea n starea WAIT.

3.1.8 Autoverificarea
MC are 2 moduri de operare: normal i auto-verificare. Modul de operare
este selectat de nivelul logic pe pinul IRQ n momentul unui RESET. n 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 coninut n ROM n zona de memorie 3F00h3FDEh. Autotestul comunic rezultatele la pinii PC3-PC0, unde se pot conecta
LED-uri.

3.1.9 Programarea EPROM


Unele MC din familie conin ROM, aa cum este MC68HC05D9 care
conine 16K octei de PROM sau MC68HC05D24 care conine 24K octei de
ROM. Modelul MC68HC05D32 are 32K octei memorie EPROM, cu posibilitatea
de tergere UV. nscrierea memoriei se face cu ajutorul unei tensiuni suplimentare
de 15V (Vpp). Circuitele MC68HC705C8A conin 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
Vpp
+15V la
nscriere

MC68xx
A0-A7

D0-D7

A8-A12

PA
PA0PA7

PB

SCI
PD
PD1
PD0

Circuite de
modificare de
nivel RS232

PB0PB7

PC
PC0PC4

Figura 3.9 Schema unui programator EPROM (sau OTP)

TxD

RxD

88

MICROCONTROLLERE

Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A12)


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), poziionat n 1, comand ca liniile de


adrese i date s fie bufferate pentru ca n urmtorul 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 forarea liniei IRQ n timpul unui RESET. Programe simple
utilizator pot fi introduse n RAM prin interfaa SCI (Serial Communications
Interface) i rulate. Programul se transmite prin interfaa serial, dup care se
ruleaz programul din RAM. Parametrii comunicaiei implicii la Reset sunt 8 bii
de date i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint
numrul total de octei care vor fi trimii. Coninutul EPROM-ului poate fi
verificat prin citirea lui tot prin SCI. Coninutul EPROM-ului se poate ascunde, aa
nct s nu mai poat fi citit din exterior, prin poziionarea unui bit de securizare n
registrul de opiuni (adresa 1FDFh).

3.2

MC M68HC08

Familia 6808 urmeaz n timp familiei 6805, bineneles cu mbuntiri


care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu
cele din familia descris n subcapitolul anterior (3.1). Ca mbuntiri ale UC 6805
pot fi menionate:

indicatorul de stiv este un registru de 16 bii (13 la 6805);


registrul de index este de 16 bii, exist posibilitatea manipulrii separat a
octetului superior i a celui inferior (8 bii la 6805);
frecvena intern CPU standard este de 8MHz (2MHz la 6805);
se pot adresa 64K octei memorie de date sau program (2K-16K la 6805),
are 16 moduri de adresare (8 la 6805) i 78 de noi coduri de instruciuni;
se pot face mutri de date ntre locaii de memorie fr intermediul
acumulatorului;
UC poate executa mpriri de operanzi de 2 octei la operanzi de 1 octet;
operarea secvenial a UC poate fi oprit de dou tipuri de evenimente:
reset sau ntreruperi. Sursele de Reset suplimentare fa de 6805 sunt:

89

3. Microcontrollere Motorola

-detectarea unui cod de instruciune inexistent;


-tensiune de alimentare sub o limit acceptat
(LVI, Low Voltage Inhibit).
sistemul de ntreruperi admite un numr maxim de 128 de surse de
ntrerupere: reset, SWI i IRQ0-IRQ125. 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 trezete UC. n mod STOP toate
ceasurile sunt oprite i doar o ntrerupere extern poate trezi UC.

Schema bloc a unui MC 6808 este prezentat n figura 3.10.


Monitor ROM (960bytes)
Memorie ROM sau
FLASH
(4096bytes)

+VDD (+5V
sau +3V)

Unitatea central
6805, 6808...

RESET
IRQ

Memorie RAM
(128bytes)

Oscilator

Memorie
EEPROM

Port A

Port B

ADC

Magistral de date i
adrese

Port C

Port D

Port E

Port F

Seriale

Timer

Port G

Port H

Tastatur

Figura 3.10 Schema bloc a unui MC din familia 6808

3.2.1 Unitatea central 6808


Unitatea central 6808 admite 2 moduri de lucru: un mod utilizator i un
mod monitor ROM. Modul de lucru poate fi alese prin poziionarea unui pin din
exterior (IRQ) n 1 sau 0 n timpul unui RESET. Modul monitor creeaz
posibilitatea legrii MC cu un calculator gazd printr-un canal serial, transferarea

90

MICROCONTROLLERE

software-ului de pe calculatorul gazd n MC i execuia lui din RAM. Pentru MC


echipate cu EEPROM n mod monitor se poate programa EEPROM-ul. Legtura
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 funciile MC fiind valide. n modul monitor COP este
invalidat. Transferul de date este bidirecional. Fiecare comand spre MC este
urmat de un rspuns ecou al MC. Comenzile monitorului sunt:

READ - citete o locaie de memorie (se trimite cod+2 octei de adres


i se returneaz coninutul locaiei),
WRITE - scrie o locaie de memorie (se trimite cod+2 octei de
adres+octetul de scris)
IREAD - citire indexat, citete urmtorii 2 octei din memorie fa de
ultima adres accesat
IWRITE - scriere indexat, scrie urmtorii 2 octei din memorie fa de
ultima adres accesat
READSP - citete indicatorul de stiv
RUN - ruleaza program

Viteza de transfer implicit ntre MC i calculator este de 4800bps cu pinul


PTC3 inut la 1 n timpul resetului i 9600bps cu pinul PTC3 inut la 0 n timpul
resetului.

3.2.2 Interfee 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 ieiri sau intrri. Liniile nefolosite trebuie legate la mas sau la
tensiunea de alimentare pentru a preveni defectarea circuitului prin descrcri
electrostatice sau consumul excesiv de curent.
Fiecrui port i corespunde un registru de direcie (DDR) prin care se
programeaz sensul de transfer al pinului. Unele porturi au semnificaii duble, dac
liniile lor sunt folosite i de alte interfee:

portul B poate fi folosit ca 8 linii de intrare n convertorul A/D (ADC);


portul C este un port de 6 bii, bitul 2 se poate folosi pentru a furniza n
exterior ceasul sistemului;
portul D poate avea dou linii folosite ca intrri 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 bii care poate fi folosit ca intrri/ieiri pentru
timer;

91

3. Microcontrollere Motorola

portul G este un port de 3 bii, liniile pot fi folosite ca interfa pentru


tastatur;
portul H este un port de 2 bii, liniile pot fi folosite ca interfa pentru
tastatur.

b. Convertorul analog digital (ADC)


Convertorul A/D este un convertor pe 8 bii cu aproximri succesive care
poate face conversii continuu sau la primirea unei comenzi. Sfritul 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 intrri multiplexate
analogic.
Intrrile pentru ADC se fac pe pinii portului de uz general PTB7-PTB0.
Selecia canalului se face pentru a stabili care pin este intrare analogic. Ceilali
pini pot fi folosii ca intrri/ieiri de uz general. Dac valoarea citit este VREFH,
atunci valoarea digital va fi FFh, iar dac este VREFL atunci valoarea digital va
fi 00h. Aceste tensiuni, mpreun cu tensiunea de alimentare pentru blocul analogic
al MC sunt furnizate din exterior. Schema bloc a convertorului este dat n figura
3.11.

Registru de date ADR

ADC
Cerere de
ntrerupere

ADSCR
Selecie
canal

Intrri
analogice

Ceas de conversie

Figura 3.11 Schema bloc a convertorului analog digital

Registrele ADC sunt:


registru de control i stare al ADC (ADSCR), care conine:
Bit 7 COCO/IDMAS, conversie complet sau selecie ntrerupere DMA. Dac
ntreruperile sunt invalidate (AIEN=0), COCO este poziionat 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 poziionat
doar dup prima conversie. Dac ntreruperile sunt validate (AIEN=1), IDMAS
selecteaz dac ntreruperea solicit i un transfer DMA.
Bit 6 AIEN (ADC Interrupt Enable) valideaz ntreruperile la sfritul unei
conversii.

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 conine:
Bit 7-5 ADIV2-0 formeaz rata de divizare a ceasului de conversie de la
ADICLK (000) la ADICLK/16 (100).
Bit 4 ADICLK selecteaz ca ceas de conversie ceasul intern sau un ceas
generat de timer.
O conversie ncepe dup scrierea registrului ADSCR. Rezultatul conversiei
este stocat n registrul de date (ADR) i la terminarea conversiei se poziioneaz
bitul COCO. Dac se opteaz pentru conversie continu, dup prima conversie
urmeaz alta, care rescrie registrul de date. Dac sunt validate ntreruperile,
sfritul conversiei poate cere ntrerupere ctre UC sau poate face i o cerere
DMA.
c. Interfaa extern msCAN08 (Motorola Scalable CAN)
Protocolul CAN a fost definit de BOSCH n 1991 pentru utilizarea pe o
magistral la autoturisme, unde s ndeplineasc condiii 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 octei;


viteza de transfer pn la 1MBps;
transferul serial se face pe 2 linii, o intrare (RxCAN) i o ieire
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 fora magistrala la conectare direct (figura 3. 12).
MC 1

MC 2

msCAN08
TxCAN RxCAN

Transceiver

msCAN08

TxCAN RxCAN
Transceiver

Figura 3.12. Cuplarea la magistrala CAN

Magistrala

93

3. Microcontrollere Motorola

O implementare modern trebuie s respecte dou condiii:

orice dispozitiv CAN poate s transmit un ir de mesaje fr 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 ateptare.

Aceste cerine pot fi ndeplinite cu o schem de transmisie cu buffere


duble. Chiar i aa, unitatea central nu are ntotdeauna timp s aranjeze datele n
buffer, aa nct la 6808 s-a realizat o arhitectur cu 3 buffere.
Mesajul recepionat este stocat ntr-o stiv FIFO cu 2 nivele. Exist 2
buffere de recepie de 13 octei aranjate ntr-o singur arie de memorie, astfel nct
registrul de date recepionate are o singur adres. Registrul RxBG (Background
Receive Buffer) primete datele seriale i le transfer n RxFG (Foreground
Receive Buffer) care poate fi adresat de unitatea central. Dac mesajul recepionat
este corect (are un identificator valid) se poziioneaz bitul RxF (Receiver Full
Flag) i se genereaz o cerere de ntrerupere. n acest timp n registrul RxBG se
recepioneaz un nou cadru. Schema bloc pentru recepie i transmisie este dat n
figura 3.13.
RxBG
RxFG
RxCAN

RxF
Filtru

Date spre
CPU
Tx0

TxE 0

PRIO

Tx1
TxCAN

PRIO

Tx2
PRIO

Date de
la CPU
TxE 1
TxE 2

Figura 3.13 Schema bloc de receptie, emisie CAN

Pentru a micora numrul de ntreruperi solicitate UC de ctre receptor s-a


introdus un filtru de acceptare. Datele msCAN au o anumit structur, primii bii

94

MICROCONTROLLERE

fiind de identificare a cadrului i de adres a destinaiei. Este posibil ca interfaa


CAN s verifice aceti primi bii i s fac transferul din RxBG n RxFG numai
dac mesajul este destinat acestui MC.
Cnd ambele registre de recepie sunt pline i se recepioneaz date se
genereaz o eroare de suprascriere. Se abandoneaz recepia noilor caractere, se
semnalizeaz eroarea, dar transmitorul rmne funcional.
Transmiterea mesajelor se face cu o structur de 3 buffere, fiecare de 13
octei. Un registru suplimentar TBPR (Transmit Buffer Priority Register) stabilete
prioritatea mesajelor. Fiecare buffer de transmisie semnaleaz UC faptul c este
gol prin poziionarea 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 rencrca 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
prioriti pentru arbitrare. Fiecare buffer de transmisie are o zon de 8 bii (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 dorete
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, interfaa CAN va poziiona bitul
ABTAK (Abort Request Acknowledge) i TXE pentru a se putea transmite mesajul
prioritar.
d. Interfaa cu tastatura
Interfaa cu tastatura const n 5 linii independente de intrare n MC care
pot solicita ntreruperi mascabile. Funcionarea acestei interfee este asistat de
urmtoarele registre:
registrul de stare i control al tastaturii (KBSCR) conine:
Bit 3 - indicatorul existenei unei ntreruperi, KEYF. Bitul este 1 dac se
afl n curs de servire o ntrerupere de la tastatur;
Bit 2 - confirmare, ACKK. Dac acest bit este poziionat se terge bufferul
ntreruperilor de la tastatur;
Bit 1 - validarea ntreruperilor de la tastatur, IMASKK. Dac acest bit are
valoarea 0 sunt validate ntreruperile;
Bit 0 - modul de ntrerupere, MODEK. Dac bitul este 1 se poate cere o
ntrerupere cu un front cztor sau cu un nivel 0; dac bitul este 0 se poate
cere o ntrerupere doar cu front cztor.
registrul de validare a ntreruperilor de la tastatur care cu biii
Bit 4 - Bit 0 valideaz pinul portului I/O ca cerere de ntrerupere de la
tastatur sau ca port standard.

95

3. Microcontrollere Motorola

3.2.3 Programarea memoriei EEPROM


Circuitele din familia 6808 pot avea 512 octei de memorie EEPROM care
poate fi tears i renscris fr o tensiune extern suplimentar. Memoria
programat poate fi protejat mpotriva unor scrieri sau tergeri accidentale.
Starea unui bit neprogramat este 1 logic. Programarea lui nseamn
trecerea n stare 0. Programarea pote fi fcut n mod redundant, adic primii 256
de octei s fie identici cu urmtorii.
Registrele EEPROM sunt:
registrul de control al EEPROM EEPROM Control Register (EECR):
Bit 7 EEBCLK, validare ceas intern pentru EEPROM; selecteaz cesul
folosit pentru programarea EEPROM: ceasul intern sau un oscilator RC
intern.
Bit 5 EEOFF; invalideaz EEPROM-ul n modurile de lucru cu
economie de energie.
Bit4, Bit 3 - EERAS 1, EERAS 0; stabilesc operaia care se execut
conform tabelului 3.5.
Tabelul 3.5
Programarea operaiilor n registru de control

EEBPx
0
0
0
0
1

EERAS1
0
0
1
1
X

EERAS0
0
1
0
1
X

Operaia
Programare de octet
tergere de octet
tergere bloc
tergere global
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.
Poziionarea lui EEPGM trebuie s fie precedat n alt pas de poziionarea
lui EELAT.
registrul EEPROM nevolatil (EENVR):
Bit 7 EERA, arie redundant; configureaz memoria n dou jumti
redundante.
Bit 4 - CON0; stabilete dac se valideaz securitatea memoriei (cu 0) sau
nu.
Bit 3-0 EEBP3-0, bii de protecie; dac aceti bii sunt 1, blocul de
memorie este protejat la scriere.
registrul de configuraie a ariei, EEACR se poate citi ceea ce a fost nscris n
registrul EENVR. Din raiuni de siguran a informaiei, 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 urmtorii pai:

se reseteaz EERAS1 i EERAS0 (i se seteaz EELAT n EECR)


se scrie octetul n EEPROM
se seteaz EEPGM
se ateapt un timp pentru ca programarea s poat fi executat
se reseteaz EEPGM
se ateapt un timp pentru ca tensiunea de programare s scad
se reseteaz EELAT

O tergere pe bloc sau global se face cu biii EERAS ca n tabelul 3.5,


orice adres din bloc fiind posibil. mprirea n blocuri este EEBP0 (0800h087Fh), EEBP1 (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh).
n modul redundant EEBP2 i 3 nu au nici o semnificaie.

3.3

MC PE 16 BII - 6816

Unitatea central 6816 este o unitate central cu magistrala de date de 16


bii i o magistral de adrese pe 20 de bii care permite adresarea a 1Moctet de
memorie. UC conine 2 registre acumulator de 16 bii i 3 registre index de 16 bii
pe lng registrele clasice. Unitatea central poate executa instruciuni pe 8 bii, pe
16 bii sau pe 32 de bii. Toate instruciunile de la UC 6811 pot fi executate de
6816, dar cu alt numr de tacte, deci cu alt vitez. Unitatea central funcioneaz
la maximum 16MHz. Tehnologia de fabricaie permite funcionarea i la viteze mai
mici, chiar n regim static (ca i celelalte UC). Unitatea central conine faciliti
DSP (Digital Signal Processing), fiind posibile nmuliri cu numere fracionare.
UC permite 10 tipuri de adresare, din care 6 sunt preluate de la 6811.
Pentru pstrarea compatibilitii, registrul PC i indicatorul de stiv sunt de
16 bii, dar apare un registru nou, numit K, ce reine extensiile de la 16 bii la 20 de
bii pentru registrul PC i SP. n structura UC mai apar i registrele pentru
nmuliri, 2 registre de 16 bii (H i I) i unul de 36 de bii pentru rezultat (MAC).
Pentru comunicaia ntre MC sau pentru adresarea memoriei externe s-a
standardizat un bus extern, numit IMB (Intermodule Bus), cu 16 linii de date i 24
linii de adres, la care s-a aliniat i 6816. Acest bus este de tip asincron, permind
transfer pe 8 sau 16 bii n urma unui protocol (handshake).

3. Microcontrollere Motorola

97

3.3.1 Modulul de integrare (SIM, System Integration


Module)
Acest modul, aprut de la 6811, grupeaz blocurile care controleaz
sistemul i cuprinde:

Modul pentru configurarea sistemului i protecie:


1. un monitor de bus; reseteaz sistemul dac apar cicluri de
magistral mai lungi de 8-64 tacte de ceas sistem;
2. un monitor de HALT; poziioneaz un bit n registrul de stare
al RESET-ului cnd a aprut o instruciune de HALT pe bus;
3. un monitor de ntreruperi; supravegheaz apariia unei arbitrri
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 Interfee
Interfeele seriale sunt grupate sub forma unui modul serial cu coad de
ateptare (QSM Queued Serial Module) care conine o interfa serial SPI i una
SCI. Coada de ateptare este format n RAM i are dimensiunea de 16 cuvinte de
8-16 bii fiecare. Transmisia acestui ir de date poate fi executat automat, fr
intervenia unitii centrale. Modulul QSM este cuplat pe bus-ul IMB.
Convertorul analog numeric (ADC) este un convertor cu aproximaii
succesive cu rezoluia programabil de 8-10 bii, cu 8 canale multiplexate.
Convertorul este conectat pe bus-ul IMB.
Pentru date importante (cum ar fi cele din stiv) exist o memorie RAM
static de 1K octet care la cderea tensiunii de alimentare este alimentat de la un
pin special, unde se poate conecta o baterie.
Timer-ul are 11 canale, din care 2 sunt folosite pentru generarea
semnalelor PWM.
Circuitul este capsulat n capsule de 132 sau 144 pini.
Schema bloc a circuitului este dat n figura 3.14.

98

MICROCONTROLLERE

SIM
Unitatea central
6816

Port C

Port E

IMB
Memorie
SRAM
(1024 octei)

QSM
(SCI, SPI)

Port QS

Port F

Magistral de date i
adrese IMB

Port ADC

Timer

Port GP

PWM

Figura 3.14 Schema bloc MC 6816

3.4

MC PE 32 DE BII - 68300

MC 68300 este asemntor arhitectural cu MC pe 16 bii. n jurul UC sunt


grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8
canale, un modul de comunicaie serial cu coad de ateptare (QSM), 512 octei
RAM static, 3,5K octei RAM care pot fi folosii 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 16MHz.
Unitatea central CPU32 este compatibil soft cu procesoarele din familia
68000. Ea conine 16 registre generale de 32 de bii cu care se poate lucra pe 8, 16
sau 32 de bii, un PC de 32 de bii, un SP de 32 de bii, un registru de stare i alte
registre.

99

3. Microcontrollere Motorola

Timer-ul este o unitate microprogramat care poate lucra separat de UC, i


care conine propriul RAM. Timer-ul este format din 16 canale independente.
Fiecare poate executa o funcie de timp i poate fi programat independent.
Memoria flash EEPROM servete la stocarea nevolatil a informaiilor
cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent.
Memoria EEPROM este foarte rapid, ea poate rspunde n 4 tacte. MC este
echipat cu 2 module de flash EEPROM, unul de 16K octei i unul de 48K octei.
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 performane, comparativ, pentru MC din


familia Motorola:
Tabelul 3.6
Tabel comparativ pentru MC Motorola - CISC

MC

Magistrala
date

6805
6808
6816
68300

8
8
16
32

de Frecven
a
(MHz)
2
8
16
16

Linii I/O Interfee


speciale

Pre
(USD)

31
48
48
48

1.9
2.1
8.25
17.5

6
6
6
6

4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua generaie 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 aprut
astfel pentru prima dat pe pia un microcalculator complet pe un singur chip. MC
includea o unitate central pe 8 bii, memorie ROM sau EPROM de 1024x8bii,
RAM 64x8 bii, 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 aplicaiei s fie realizat pe MC 8751 care este prevzut cu memorie
EPROM (4K octei). 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 conine ROM, dar se poate ataa n exterior ROM,
PROM sau EPROM, direct sau multiplexat.
8051 este un MC foarte puternic i uor de programat. Ca dovad, n
tabelul 4.1 se prezint cteva modele oferite de diferii furnizori, echivalente cu
8051:
Tabel 4.1
Modele echivalente 8051 oferite de diferii productori

Varianta
8031
8051
80C51GB
87C51GB
SABC502

80C552
83CL580
80C320
89S8252
89C55

Nr.
pini
40
40
68
68
40
68
56,
40
40.
40.

Productor
Toi
Toi
Intel
Intel
Siemens
Philips
Philips
Dallas
Atmel
Atmel

RAM Mem.
program
128
64K
128
4K
256
64Kx
256
8K
256
64Kx
256
64Kx
256
6K
256
64Kx
256
10K
256
20KF

Observaii
Procesor de baz, UART, Tmr0+1
Procesor de baz, UART, Tmr0+1

8051+PCA, 8bA/D
8051+PCA, 8bA/D
8052+XRAM+WDog
10bA/D, i2c, CC,PWM
LV 8052+A/DC+i2c+WDog
Fast, 2UART
FLASH 8k, WDog
FLASH,fast, LV

101

4. Familia MCS-51

PCA- arie programabil de numrtoare (programmable counter array)


LV- tensiune redus 3,3V (low voltage)
PWM- modularea impulsurilor n lime (pulse width modulation)
CC- intrare i comparare (capture/compare)
i2c- Interfaa I2C (Philips)
Tmr- timer
Un tabel cu mai multe exemple este disponibil pe discul care nsoete
cartea.

4.1

STRUCTURA I FUNCIONAREA

Schema bloc intern este dat n Fig. 4.1.


ROM
(EPROM)

Adrese

Unitatea central
Acumulator A
Ind. Stiv SP
Nr. program PC

Gener
ator de

RAM

Magistral de date

Timer

Controlle
r de
P0

P1

I
n
P2

P3

Figura 4.1 Schema bloc a unui MC 8051

Unitatea central este o unitate aritmetic i logic pe 8 bii care conine


urmtoarele registre:

102

MICROCONTROLLER-e

acumulator A - 8 bii;
registrul de stare PSW (Program Status Word) - 8 bii;
registrul B (8 bii) folosit n operaiile de nmulire i mprire;
indicatorul de stiv (Stack Pointer) - 8 bii;
un registru numrtor de date (DPTR Data Pointer) - 16 bii - care poate fi
manipulat i ca 2 registre de cte 8 bii (DPH i DPL) i servete ca baz n
salturi indirecte sau n transferuri externe;
numrtorul de program (PC Program Counter) - 16 bii.

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 mri capacitatea memoriei de lucru. Memoria extern este adresat automat
dac adresa din instruciune este n afara zonei de memorie intern.
Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bii. Fiecare
linie poate fi programat individual ca linie de intrare, de ieire sau bidirecional.
Unele linii au semnificaii alternative. Portul 0 este folosit i ca magistral
multiplexat de adrese i date, iar pentru transferuri care au nevoie de adrese de 16
bii, se folosete portul P2 pentru octetul cel mai semnificativ de adres. Liniile
portului 3 sunt folosite ca cereri de ntrerupere (2 linii), intrri/ieiri pentru timer (4
linii) i linii seriale (2).
8051 are 2 timere de 16 bii, fiecare poate fi programat separat. Timerele
pot fi utilizate pentru a msura intervale de timp, pentru a determina lungimea unor
impulsuri, ca numrtoare, etc. Rezoluia 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 comunicaii cu echipamente
periferice ct i comunicaii ntre circuite.
Controllerul de ntreruperi admite ntreruperi de la 5 surse:

de la portul serial (dac s-a transmis sau recepionat un caracter);


de la timere (cnd s-a nregistrat o depire);
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
salt

RESET
Extern 0
Timer 0

0000h
0003h
000Bh

de Sursa de ntrerupere
Extern 1
Timer 1
Port serial

Adresa de salt
0013h
001Bh
0023h

103

4. Familia MCS-51

4.1.1 Descrierea semnalelor la pini


Vcc- tensiunea de alimentare, +5V;
Vss- mas;
PORT 0* - este un port pe 8 bii bidirecional cu drena n gol. Este port de date i
adrese (octetul cel mai puin semnificativ) pentru memoria extern. De asemenea
portul 0 primete octeii pentru programarea EPROM-ului intern iar n timpul
verificrii programului din EPROM, datele pot fi citite tot prin portul 0.
PORT 1*- este un port pe 8 bii bidirecional, cu drena n gol. n timpul
programrii i testrii EPROM-ului, la portul 1 se stabilete octetul cel mai puin
semnificativ de adres. Pinii P1.0/T2 i P1.1/T2X au funcii 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 bii bidirecional. n timpul programrii i testrii
EPROM-ului la portul 2 se stabilete octetul cel mai semnificativ de adres. Pentru
adresarea memoriei externe pe 16 bii portul 2 genereaz partea mai semnificativ
a octetului de adres. La adresare memoriei externe pe 8 bii portul 2 este registrul
cu funcii speciale P2.
PORT 3*- este un port de 8 bii bidirecional. Pinii portului 3 au semnificaie
alternativ (tabelul 4.3).
Tabelul 4.3
Semnificaia dubl a pinilor de la PORT 3

Pin
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Semnificaie
RXD-intrare serial a porului pentru recepie
TXD-ieire serial a portului pentru emisie
/INT0-ntrerupere extern pentru Timer 0
/INT1-ntrerupere extern pentru Timer 1
T0-intrare extern n Timer 0
T1-intrare extern n Timer 1
/WR-strob pentru scrierea memoriei de date extern
/RD-strob pentru citirea memoriei de date extern

RST este o intrare de RESET. Dac semnalul de intrare rmne n HIGH pe


perioada a doi cicli main n timp ce oscilatorul funcioneaz, are loc iniializarea
MC.
ALE/PROG ALE (Address Latch Enable) valideaz octetul cel mai puin
semnificativ de adres n timpul accesului la memoria extern (PORT0). PROG
*

Ieirile sunt bufferate i pot suporta pn la 4 intrri LS TTL. Pinii programai ca ieiri n
stare HIGH pot fi folosii ca intrri. Ca pini de intrare, dac au fost forai n LOW din
exterior, acetia furnizeaz curent.

104

MICROCONTROLLER-e

este semnal de intrare pentru impulsul de programare n timpul programrii


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 programrii EPROM-ului.
XTAL1, XTAL2 se conecteaz cristalul de cuar sau un oscilator extern.

4.1.2 Gestionarea memoriei


MC8051 au spaii diferite de adresare pentru memoria program i memoria
de date. Spaiul 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
8031AH
8051AH
8751H
8032AH
8052AH
8752BH

Memorie intern de program


4Kx8 ROM
4Kx8 EPROM
8Kx8 ROM
8Kx8 EPROM

Memorie intern de date


128bytes RAM
128bytes RAM
128bytes RAM
256bytes RAM
256bytes RAM
256bytes RAM

a. Gestionarea memoriei de date (RAM)


Memoria intern este mapat n spaiul de adresare 00H - FFH (256bytes).
Ea poate fi "umbrit multiplu"; aceeai 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 instruciuni 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 selecia datelor din portul 0,
unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE.
Informaia poate fi accesat cu adresare pe 8 sau pe 16 bii.

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

4.1.3 Circuitele timer


MC 8051 are 2 numrtoare de 16 bii, iar 8052 3 numrtoare. n modul
de funcionare ca temporizator registrul este incrementat la fiecare ciclu cu un
impuls la 1/12 din frecvena oscilatorului. n modul de funcionare ca numrtor,
registrul este incrementat la fiecare tranziie din 1 n 0 la pinul extern
corespunztor T0, T1 i T2. Rata maxim de numrare este 1/24 din frecvena
oscilatorului.
Programarea funcionrii timer-elor se face cu registrul TMOD din SFR,
cu structura:
pentru numrtorul 1: GATE1, C/-T1 - M11, M01,
pentru numrtorul 2: GATE2, C/-T2 - M12, M02, unde:
GATE - gestioneaz controlul. Cnd GATE=1, timer-ul este activat doar
ct timp pinul nINT corespunztor 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 semnificaia din tabelul 4.5.
Tabelul 4.5
Programarea modului de operare cu biii M0 i M1

M1
0
0
1
1

M0
0
1
0
1

Modul de operare
Timer pe 13 bii (Mod 0)
Timer/Counter pe 16 bii (Mod 1)
TL0 este timer/counter pe 8 bii i TH0 este timer pe 8 bii (Mod 2)
Timer/Counter 1 oprit (Mod 3)

Semnificaia biilor din registrul special TCON este:


TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde:
TF0, TF1- indicatorul de depire al timer-ului 0, respectiv 1. Este setat la
depire ca numrtor sau teporizator i este resetat cnd se
apeleaz rutina de ntrerupere a timerului corespunztor;
TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri
numrtoarele/ temporizatoarele;
IE0, IE1 - indicator de activare a ntreruperii pe front;
IT0, IT1 - controlul activrii 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 depire;
EXF2 - indic apariia unui eveniment la pinii de control extern;
RCLK - cnd este setat, portul serial folosete ca i tact de recepie
semnalul de depire generat de timerul 2;
TCLK - cnd este setat, portul serial folosete ca i tact de emisie semnalul
de depire generat de timerul 2;
EXEN2- indicator de activare extern;
TR2 - pornete/ oprete timerul 2
C/-T2 - selecteaz funcionarea ca timer sau numrtor;
CP/RL2 - indicator pentru memorare.

4.1.4 Interfaa 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 frecvena de
oscilaie.
Modul 1: transmisie asincron, se transmit date prin TXD, se recepioneaz prin
RXD n formatul 1 bit de start, 8 bii 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 frecvena 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
0
0
1
1

SM1
0
1
0
1

Mod
Mod 0
Mod 1
Mod 2
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 recepia;
TB8 - al 9-lea bit ce se transmite n modurile 2 i 3;
RB8 - al 9-lea bit ce se recepioneaz n modurile 2 i 3;
TI - indicator de ntrerupere a transmisiei;
RI - indicator de ntrerupere a recepiei.

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 funcie de
biii IT0 i IT1 din registrul special TCON. Indicatoarele de ntrerupere sunt biii
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 biii TF0 i TF1 din registrul
TCON. Aceti bii sunt setai cnd apare o depire n numrtoarele/
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 aceti
bii 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 aceti bii 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
prioritilor poate fi programat n registrul SFR numit IP.
prioriti 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
PS
PT1
PX1
PT0
PX0

- stabilete nivelul de prioritate pentru ntreruperea timerului 2;


- stabilete nivelul de prioritate pentru ntreruperea portului serial;
- stabilete nivelul de prioritate pentru ntreruperea timerului 1;
- stabilete nivelul de prioritate pentru ntreruperea extern 1;
- stabilete nivelul de prioritate pentru ntreruperea timerului 0;
- stabilete nivelul de prioritate pentru ntreruperea extern 0.

Nivelul prioritii 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 sczut (Power Down).
n modul inactiv oscilatorulfuncioneaz, dar nu se execut nici o
instruciune. Timerele i portul serial funcioneaz i orice ntrerupere de la ele
readuc circuitul n stare normal. Un RESET hardware readuce circuitul n stare
normal. Starea CPU se pstreaz n ntregime: indicator de stiv, Program
Counter, registre etc.
n modul cu tensiune sczut oscilatorul intern este oprit i toate funciile
sunt oprite. Se pstreaz doar RAM-ul intern i registrele speciale. Singura
modalitate de a iei 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
IDL

- bit pentru modul cu tensiune sczut;


- bit pentru modul inactiv.

4.1.7 Formarea unor semnale externe


RESET-ul se comand pe intrarea RST a MC. Coninutul registrelor
speciale SFR va fi adus la 00H, cu excepia 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.
VCC
R (4-10K)
RST

C (10)

Figura 4.2 Circuit pentru formarea semnalului RESET

109

4. Familia MCS-51

Ca i generator de tact se poate folosi oscilatorul intern la intrrile X1 i


X2, ca n figura 4.3.
X1

X2

Figura 4.3 Circuit pentru folosirea generatorului intern de tact

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. Ceilali pini ai portului 2, precum i semnalele RST, /PSEN, /EA/Vpp trebuie s
aib urmtoarele nivele (tabelul 4.6).
Tabeul 4.6
Condiii pentru operaiile de programare, verificare, setare bit siguran

Operaia

RST

nPSEN

ALE

Programare

Verificare
1
Setarea bitului 1
de siguran

0
0

impuls la 0 pentru Vpp


50ms
1
1
impuls la 0 pentru VPP
50ms

/EA/VP
P

P2.7

P2.6

0
1

0
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 atenie 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 vtmarea circuitului.
Verificarea programului se poate face dac bitul de siguran nu a fost
programat. Citirea se face n aceleai condiii ca i scrierea, cu excepia lui ALE
care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citi

110

MICROCONTROLLER-e

neautorizat coninutul EPROM-ului se programeaz un aa 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 puin 15W.sec/cm2, adic o expunere de 20-30 min. la
distana de 2-3cm la o lamp de ultraviolete cu 12W/cm2.
Programarea rapid (Quick Pulse Programming) poate fi aplicat la
circuitele 875XBH, i are ca rezultat posibilitatea programrii 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 instruciuni din care 64 sunt executate ntr-un singur ciclu.

4.2.1 Setul de instruciuni 8051


Instruciuni pentru transferul de date:
Transferuri generale:
MOV
- efectueaz un transfer pe bit sau pe octet de la surs la
destinaie.
PUSH - incrementeaz registrul SP (Stack Pointer) i transfer un octet
de la surs la locaia din stiv adresat de SP.
POP
- transfer un operand pe un octet de la locaia din stiv adresat
de SP la destinaie i decrementeaz SP.
Transferuri specifice acumulatorului:
XCH - mut octetul din surs n acumulator.
XCHD - mut biii 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 citete un octet din memoria extern de program n acumulator.
Transferuri de adrese:
MOV DPTR, #data, ncarc imediat 16 bii de date n registrul dublu
DPTR.
Instruciuni aritmetice:

4. Familia MCS-51

Adunare:
INC
ADD
ADDC
DAA

111

- adun operandul cu 1 i pune rezultatul ca nou operand.


- adun acumulatorul cu operandul surs i pune rezultatul n A.
- adunare ca la ADD dar se adun i bitul CY (Carry) din PSW.
- ajustare zecimal, corecteaz suma care rezult din adunarea a
doi operanzi zecimali cu maxim 2 cifre.

Scdere:
SUBB - scdere 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.
nmulire:
MUL - execut o nmulire fr semn ntre acumulator i registrul B,
rezultatul obinut fiind pe 2 octei (octetul cel mai semnificativ se
pune n B). Dac toi biii din octetul cel mai semnificativ al
rezultatului sunt 0 bitul OV i CY din PSW se pun la 0.
mprire:
DIV
- execut mprirea fr semn a coninutului registrului A la
coninutul registrului B. Partea ntreag a rezultatului se pune n A,
iar partea fracionar n B.
Instruciuni pentru operaii logice:
Instruciuni logice cu un singur operand:
CLR - reseteaz A orice bit adresabil direct.
SETB - seteaz orice bit adresabil direct.
CPL - complementeaz coninutul lui A, fr a afecta PSW.
RL
- rotaie stnga a acumulatorului.
RLC - rotaie stnga a A prin CY.
RR
- rotaie dreapta a A.
RRC - rotaie dreapta a A prin CY.
SWAP - inverseaz niblurile n A.
Instruciuni logice cu 2 operanzi:
ANL - I logic.
ORL - SAU logic.
XRL - SAU EXCLUSIV logic.
Instruciuni de control:
Apeluri i salturi necondiionate:
ACAL - este o instruciune pe 2 octei de apelare a unui subprogram care
se folosete atunci cnd adresa de salt este cuprins n 2K ai
paginii curente. Cmpul de adres de 11 bii este concatenat cu cei
mai semnificativi 5 bii din PC.
LCALL- este o instruciune pe trei octei de apelare a unui subprogram care
adreseaz toi 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 necondiionat la adresa specificatanalog cu ACALL.


LJMP - este un salt necondiionat la adresa specificat analog cu LCALL.
SJMP - este un salt necondiionat scurt n cadrul a 256 de octei.
Salturi condiionate:
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
acetia nu sunt egali.
DJNZ - decrementeaz operandul surs i pune rezultatul n operandul
destinaie. 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 R0R7. Cei mai puin semnificativi 3 bii ai codului instruciunii indic unul dintre
aceste registre. Se poate forma astfel o instruciune 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 locaii din RAM, porturi I/O sau registrele cu
funcii speciale. La codul instruciunii se adaug un octet care reprezint locaia
care se folosete. De exemplu se adun coninutul locaiei 30 din RAM la
coninutul locaiei 40, cu rezultatul n locaia 40:
MOV A,30h
ADD A,40h
MOV 40h,A
Adresare indirect prin registre - introdus pentru a putea lucra cu variabile al
cror loc n RAM se modific n cursul rulrii programelor. Ca registre index se
folosesc registrele R0 i R1, al cror coninut indic adresa n RAM. Cel mai puin
semnificativ bit al codului instruciunii indic registrul care este folosit ca index. n
limbajul de asamblare al lui 8051, adresarea indirect se reprezint cu @. De
exemplu se adun coninutul locaiei adresat de registrul R0 cu coninutul locaiei
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 instruciunii. 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

ECHIPRI SPECIALE CU MEMORIE

4.1.1 Memoria EEPROM (Philips 80C851)


Memoria EEPROM are dimensiunea de 256 octei, poate reine
informaiile minimum 10 ani i poate fi supus la 10.000 de cicluri de
tergere/scriere. Circuitul conine multiplicatorul de tensiune pentru tergere i
scriere.
Comunicaia 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, cellalt pentru partea HIGH (pentru
implementri viitoare i pentru adresarea biilor 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
coninutul acestui registru nu conteaz.
ETIM (adresa F5h) este un registru pentru timer necesar pentru a adapta
timpul de citire/ scriere la frecvena sistemului i trebuie ncrcat cu valori funcie
de tactul sistemului i de caracteristicile EEPROM-ului.
ECNTRL (adresa F6h) este registrul de control care:

stabilete modurile de lucru: scriere, citire, tergere pe octet, tergere pe


bloc;
conine un bit care semnaleaz c este n curs o scriere sau tergere.

Schema bloc a modulului este dat n figura 4.4.


Secveniatorul asigur secvena de timp corespunztoare pentru scriere sau
tergere. Datele i adresele se transfer prin intermediul registrelor de pe
magistral.

114

MICROCONTROLLER-e

CPU
Secveniator

ECNTRL

EEPROM

ETIM

EDATA

EADRH

EADRL

BUS INTERN

Figura 4.4 Schema bloc a modulului EEPROM

O citire se poate realiza simplu:


Citire: MOV EADRL,#20H
MOV A,EDAT
Ca urmare a acestei secvene de program, coninutul locaiei 20h este citit
n acumulator.
Memoria EEPROM este protejat cu un octet la adresa 8000h. Se poate
valida securitatea cu urmtoarea 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 instruciuni 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 octei memorie FLASH care

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
aa 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 stabilete adresa locaiei de programat;
! pe liniile de date se stabilete octetul de nscris;
! se aplic un front pe /EA/Vpp la +12V (pentru programarea cu 12V);
! se aplic un impuls ALE//PROG.
Starea programrii este indicat de bitul RDY//BSY (P3.4), linia fiind
LOW n timpul programrii 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 corespunztoare (din tabelul care exist n foile de catalog) i aplicnd
apoi un impuls ALE//PROG de 10ms. Asemntor 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 numete 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 recepionat. Dup
transmiterea caracterului pentru stabilirea ratei de transfer, se transmite un octet de
identificare care stabilete natura datelor care urmeaz. Numrul de octei 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 numete Boot
ROM.
La aceast memorie FLASH timpul de acces este de 100ns, timpul necesar
nscrierii unei locaii este de 20ms, iar tergerea se realizeaz n 3 secunde.

116

MICROCONTROLLER-e

4.4

INTERFEE 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 bii cu aproximaii 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 main, 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 declanat 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 declanarea unei conversii din exterior prin pinul
STDAC.
Cu registrul ADCON (C4h) se poate programa:

selecia canalului analogic dorit;


se poate programa ca o conversie s fie declanat de pinul extern STADC;
se poate declana o conversie;
conine 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 Interfaa PWM


Circuitul este prevzut cu un canal PWM la care frecvena de repetiie este
programat cu un registru de prescalare (PWMP- adresa FEh) care genereaz un
ceas pentru un numrtor de 8 bii. Coninutul numrtorului este comparat cu cel
al registrului PWM0 (adresa FCh); dac numrul este mai mare ieirea /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.

117

4. Familia MCS-51

4.1.3 Interfaa I2C (Siemens P80CL580)


Portul serial I2C are 2 linii, date seriale (SDA) pe poziia liniei P1.7 i ceas
serial (SCK) pe poziia bitului P1.6. Interfaa lucreaz n 4 moduri:
transmitor MASTER
receptor MASTER
transmitor SLAVE
receptor SLAVE
Aceste funcii 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 stabilete n S1ADR (Slave Address Register),
figura 4.5.

S1ADR

SDA

S1DAT
Arbitrare i
sincronizare

SCK

Generare ceas

B
U
S

I
N
T
E
R
N

S1CON

S1STA

Figura 4.5 Interfa I2C

Cu registrul de control S1CON (registru SFR la adresa DBh) se pot


programa:

ceasul serial de transfer n mod MASTER (SCK), care este n funcie de tactul
sistemului i poate fi de maximum 100kHz;
se poate selecta dac liniile I/O (P1.6 i P1.7) au semnificaiile generale sau
speciale pentru I2C;

118

MICROCONTROLLER-e

se poate porni transferul prin generarea de condiii 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 condiii de STOP;
se pot valida ntreruperile care se genereaz n urmtoarele condiii: s-a generat
o condiie de START, s-a recepionat adresa proprie, un octet s-a transmis sau
s-a recepionat;
se poate insera un ACK, (nivel LOW pe SDA) dup recepia 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 recepioneaz; cel mai semnificativ bit se transmite sau se recepioneaz primul.
n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se
stabilete adresa dispozitivului SLAVE cu care dorete un transfer de date.
Observaie: convertorul AD, interfaa I2C i canalul PWM0 pot lucra n
modurile cu economie de energie. Convertorul, interfaa I2C i canalul PWM0
rmn active n modul Idle al UC i pot genera o ntrerupere sau un RESET,
terminnd astfel modul inactiv al UC.

4.4.4 Interfaa 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
legturii USB de mare vitez (12Mbps). Modulul USB inteligent admite
instruciuni avansate, de aceea punerea la punct a lucrului cu USB devine mai
rapid. MC este echipat cu RAM care poate fi ncrcat de la un PC. Din acest
motiv circuitul nu mai are ROM. Circuitul mai conine i o interfa I2C, precum i
linii I/O de uz general. Tot ca un avantaj se poate meniona 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 iniializrii o enumerare i alocare de
adrese a dispozitivelor USB conectate. Aceast operaie este posibil ca urmare a
mutrii unei secvene de program din RAM-ul MC n RAM-ul modulului USB.
ncrcarea programului n RAM se poate face att de la un sistem PC ct i
de la un EEPROM serial prin interfaa I2C sau clasic, prin conectarea unei memorii
ROM externe. Operaia de enumerare iniial permite identificarea unui
corespondent USB i creeaz posibilitatea ncrcrii programelor de la sistemul
gazd chiar prin USB.

119

4. Familia MCS-51

8051

RAM
4-8 Koctei

Interfaa cu memoria
extern (nemultiplexat)

PIO
(24 linii)

BUS INTERN

Interfa I2C

2K octei FIFO memorie


proprie

D+
Interfaa USB inteligent

SCK

Transceiver USB

SDA
Figura 4.6 Schema bloc a unui MC cu interfa USB

4.4.5 Aria de numrtoare programabil (PCA)


Aria de numrtoare programabil este un circuit special de timp format
din 5 module de 16 bii cu posibilitatea de captur i comparaie care se adaug
timerelor obinuite 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.

120

MICROCONTROLLER-e

Temporizator/
Numrtor (Baza de
timp pentru modulele
PCA)

Modul 0 (16 bii)

P1.3

Modul 1 (16 bii)

P1.4

Modul 2 (16 bii)

P1.5

Modul 3 (16 bii)


P1.6
Modul 4 (16 bii)

Figura 4.7 Structura ariei de timp programabile (PCA)

Timerul comun pentru toate modulele este un timer obinuit. El poate


funciona cu diferite tacte programate n registrul SFR CMOD cu 2 bii, conform
tabelului 4.7.
Tabelul 4.7
Programarea tactului pentru timer

CPS1
0
0
1
1

CPS0
0
1
0
1

Tact pentru timer


frecvena oscilatorului/12
frecvena oscilatorului/4
Semnalul de depire de la timerul 0 standard
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 ieirea P1.x s schimbe starea dac a aprut o
coinciden ntre coninutul modulului i coninutul timerului;
se poate programa pe care front al intrrii P1.x s se fac numrarea
impulsurilor externe.

Fiecare modul mai are asociat un registru de 16 bii (cte dou de 8 bii;
CCAP0H-CCAP5H i CCAP0L-CCAP5L) care stocheaz valoarea numrat la
apariia unei coincidene. n mod PWM aceste registre controleaz factorul de
umplere.
Funcionarea PCA:

4. Familia MCS-51

121

n modul de captur, cnd apare o tranziie 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, coninutul 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.
Frecvena semnalului PWM este aceeai 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 fcut nevolatil prin alimentarea cu baterii. O baterie cu litiu poate
funciona cca. 10 ani. Transferul de date cu memoria NVRAM se face pe un bus
separat pentru a nu micora numrul de linii I/O.
Circuitul nu are ROM pentru programul utilizator, programul fiind stocat
n NVRAM, programarea se realizeaz n sistem, prin interfaa serial a MC. La
acest tip de MC programul se poate schimba chiar i n timpul funcionrii.
Programul se poate ncrca iniial prin interfaa 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 Interfaa LCD (PHILIPS P83C434)


n jurul unui nucleu 8051 a fost construit un MC specializat pentru
comanda panourilor LCD. Rmn 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. Afiajul poate fi comandat cu tensiuni
variabile obinute intern prin divizarea tensiunii de alimentare cu rezistene.
Schema bloc a MC este dat n figura 4.8.

122

MICROCONTROLLER-e

S00-S21

12
linii
I/O

Modul LCD
Nucleu
8051

S22/BP3
S23/BP2
BP1
BP0

Figura 4.8 MC cu modul de comand LCD

MC se poate folosi la comanda afioarelor 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. Funcionarea afiajului poate fi
mai bine neleas n cazul concret al unui singur plan n spate, pentru 2 elemente
alturate ale afiajului, figura 4.9.
VDD
BP0
VSS
S00

S01
2 elemente de afisaj,
(primulale
aprins,
al doilea
Figura 4.9 Comanda a doua elemente alturate
afiajului
LCDstins)

Primul element este aprins pentru c ntre segment i planul din spate este
o diferen de potenial, iar al doilea este stins pentru c nu exist o diferen de
potenial.
Comanda modulului de afiare se face cu 12 registre LCD0-LCD11
(adrese 9Ah-BFh) care conin configuraia segmentelor stinse/aprinse pentru
fiecare plan din spate.

123

4. Familia MCS-51

4.4.8 MC specializat pentru TV i video (PHILIPS 83C145)


Acest MC este construit n jurul unui nucleu 8051 i are 8-16Koctei ROM
sau OTP, 256 octei RAM, controller pentru vizualizare pe ecran (On Screen
Display OSD), 3 ieiri video digitale, memorie RAM pentru display de 128x10
bii, generator de caractere (ROM 60 caractere x 18 linii x 14 puncte), 8 canale
PWM de 6 bii i un canal PWM de precizie de 14 bii, convertor numeric
analogic. Nu se poate conecta memorie extern. Schema bloc este dat n figura
4.10.

Nucleu 8051
(fra memorie)

RAM
ROM

On Screen Display OSD


RAM 128x10
ROM 60 x 18 x 14

Magistral de date

Porturi I/O
P3 P2 P1(4b) P0

8x6bit PWM

14bit PWM

DAC

Figura 4.10 Schema bloc a unui MC specializat TV/video

Ceasul canalelor PWM se formeaz din tactul sistemului divizat cu 4.


Acest tact este aplicat tuturor canalelor PWM i unui numrtor de 14 bii.
Canalele de 6 bii utilizeaz doar partea mai puin semnificativ a numrtorului de
14 bii. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii
acestui registru cu coninutul numrtorului, ieirea 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 intrri analogice care pot fi comutate pe
rnd la intrarea unui comparator de tensiune. La cealalt intrare a comparatorului
se aplic ieirea convertorului numeric analogic. Cnd intrrile sunt egale, valoarea
aplicat convertorului numeric analogic este chiar valoarea numeric a semnalului
analogic de intrare.

124

MICROCONTROLLER-e

Registru SFR PWM0


Canal PWM0 (6 bii)

P1.3

Registru SFR PWM7


Numrtor 14 bii
Canal PWM7 (6 bii)
Tact= f/4

Registru TDACL, TDACH

P0.6

Canal PWM8 (14 bii)

Fig. 4.11 Structura canalelor PWM (ale MC specializat TV/video)

P1.0

MUX
ANALOGIC
Comparator

P1.1
DAC (4 bit)

Figura 4.12 Convertorul analog numeric (al MC specializat TV/video)

Modulul OSD are rolul de a suprapune text pe o imagine de televiziune.


Intrrile n acest bloc sunt:

2 ceasuri video;
semnalul de sincronizare orizontal;

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 conine o arie de
pori 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 iniializare i se poate
relua de ori cte ori.
Descrierea pe scurt a circuitului: ruleaz la o frecven de 40MHz i are
echipare standard (256 octei RAM, ceas de gard, trei timere, 2 canale DMA,
interfa serial UART, 64K octei RAM) i are n plus 3200 de module
configurabile (CSL Configurable System Logic - ceea ce nseamn cam 40.000 de
pori).
Conectarea ntre modulele cofigurabile i restul sistemului, respectiv liniile
I/O se realizeaz prin magistrala CSI (Configurable System Interconnect), cu 8 bii
de date bidirecional, 32 de bii de adres, rata de transfer de maxim 40MBps.
Magistrala CSI permite lucrul multi master, master putnd fi unitatea central
8051, canalele DMA sau interfaa JTAG.
Interfaa cu exteriorul poate fi realizat cu maxim 315 linii I/O (depinde
de variant i capsul), exist i posibilitatea conectrii memoriei externe, iar un
modul de interfa IEEE 1149.1 JTAG permite testarea sistemului. Liniile I/O au
caracteristici programabile (curent de ieire, histerezis la intrare etc.). Schema bloc
este dat n figura 4.13.
Interfaa cu memoria extern permite legarea direct a unei memorii de
256K x 8 bii (de regul FLASH) pentru nscrierea iniial a programului n MC.
nscrierea iniial poate fi realizat la RESET din aceast memorie FLASH extern
n mod paralel, dar poate fi realizat prin citirea programului prin interfaa serial
de la un PROM serial. Programul poate fi executat din FLASH sau poate fi copiat
prin interfaa serial n RAM i executat de acolo.
Modul serial elibereaz pini I/O care pot fi astfel folosii n alte scopuri.
Procedura de ncrcare 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 funcii, combinaionale sau secveniale.

126

MICROCONTROLLER-e

Modulele configurabile sunt aranjate ntr-o matrice, a crei dimensiuni


depind de varianta de circuit. Modulele sunt grupate cte dou, pentru a putea
mpri resursele. Schema bloc a unui nod din matrice este dat n figura 4.14.
8051
CPU
256 x 8 RAM
Ceas de gard
3 x Timer
UART
Controller de
ntreruperi
2x DMA

RAM
64Koctei

Interfaa cu
memoria
extern

Interfaa
JTAG

BUS CSI

Matrice CSL
PIO

PIO

PIO

Figura 4.13 Schema bloc a unui MC TRISCEND E5

Matrice
de
legturi

Matrice
de
legturi
Modul CSL

Linii lungi de
adres
Linii
scurte de
interconectare

Modul CSL

Matrice
de
legturi

Matrice
de
legturi
Linii lungi I/O

Figura 4.14 Schema bloc a unui modul de arie configurabil

127

4. Familia MCS-51

Structura unei celule este dat n figura 4.15.


Pori
configurabile
prin
programare

Intrri

1
Bistabil D

Ieiri

EN
T

Figura 4.15 Structura unei celule configurabile

Structura porilor poate fi programat la iniializare i reprogramat de ori


cte ori. O celul poate ndeplini una din funciile:

logic (ieirea 1);


aritmetic;
de memorare (ieirea 2);
de magistral;
secvenial.
Testarea JTAG se poate realiza cu un calculator conectat la interfaa
JTAG. Pinii folosii 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 ieire din MC.

n modul de testare nu este nevoie ca MC s aib o memorie extern. Prin


legtura JTAG se poate programa matricea CSL i se poate observa modul de
rulare al programului de ctre 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.

128

MICROCONTROLLER-e

8051
X1 AD0-AD7

P0

LATCH
ADRESE
/A15

X2
RST

/WR

RAM
STATIC 32K
A0-A14
CS D0-D7
/WE

ALE
P2
A8-A15
P1

OE

BUS
ADRESE
A0-A15

/RD
/WR

PSEN /RD

Port I/O liber

BUS
DATE
D0-D7

EPROM
A0-A14
A15

/PSEN

CS

D0-D7

/OE

Figura 4.16 Sistem minimal cu 8051

Sistemul minimal conine 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 opional, (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 folosete 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 dezvoltri se poate folosi portul P1, care este liber, i canalul serial.
Dac numrul liniilor I/O nu este suficient, se poate folosi un expander cum este
de exemplu 8243, care poate extinde 4 linii la 4x4 linii bidirecionale (figura 4.17).

129

4. Familia MCS-51

8051

8243

X1
P0

P4

X2
RST
P2.3
P2.2
P2.1
P2.0

P23

P5

P22
P21
P20

P6

P2.5
P2.4

/CS
PROG

P7

P1

Figura 4.17 Expandarea liniilor I/O cu circuitul 8243

4.6

DATE COMPARATIVE PENTRU MC DIN


FAMILIA MCS-51

Tabelul 4.8
Tabel comparativ pentru MC din familia MCS -51

MC
PHILIPS
P87C51
PHILIPS
S87C552
PHILIPS XA-G3
TRISCEND E5
INTL 87C196

Magistrala de Frecven
date
a
(MHz)
8
16

Linii
I/O

Interfee
speciale

Pre
(USD)

32

16

48

35

16
8
16

30
40
20

32
128
53

2
2
6

90
27
18

130

MICROCONTROLLER-e

5
MICROCONTROLLER-E RISC

5.1 MICROCONTROLLER PIC


ncepem prezentarea MC cu arhitectur RISC cu microcontrollerul PIC.
Productorul plasat cel mai bine pe piaa MC PIC este Microchip
(www.microchip.com). Un alt productor important de MC PIC este Motorola.
Exist mai multe familii de MC PIC; PIC12, PIC16, PIC17.

5.1.1

PIC12

MC PIC12 sunt MC cu preuri mici i uor de utilizat datorit arhitecturii


RISC. MC are un numr de 33 de instruciuni cu un grad mare de ortogonalitate,
din care majoritatea se execut ntr-un singur ciclu, iar cele de salt n dou cicluri.
Spaiul mic ocupat (capsul de 8 pini) fac aceste MC foarte potrivite aplicaiilor
miniatur precum i aplicaiilor casnice. Pentru a putea fi realizat o i mai mare
economie de spaiu, 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 aplicaiilor cu elemente care se modific (de
exemplu aplicaii de asigurare a securitii cu coduri variabile). Aceste MC admit o
frecven de pn la 4MHz.
MC PIC12 are o arhitectur Harvard, cu magistrale diferite pentru date i
pentru instruciuni. Acest lucru permite ca magistrala de instruciuni s fie mai
mare (de 12 bii) i ca urmare majoritatea instruciunilor pot fi de un cuvnt i pot
fi executate ntr-un singur ciclu.
Unitatea central este o unitate pe 8 bii care poate realiza funcii
aritmetice i booleene: adunare, scdere, deplasare i operaii logice cu date care se
gsesc n registrul de lucru (W) i n oricare registru de uz general. Setul de
instruciuni are un mare grad de ortogonalitate, ceea ce reduce mult timpul
necesitat de realizarea unei aplicaii. O operaie poate afecta biii de stare: Carry

131

5. Microcontroller-e RISC

(C), Digit Carry (C ) i Zero (Z). Numrtorul de program (PC) este un registru de
12 bii, ceea ce nseamn c poate adresa un spaiu de 2K cuvinte de 12 bii.
Schema bloc a acestui MC este dat n figura 5.1.
Memoria program
ROM/OTP/EPROM

512 x 12 bii sau


1024 X 12 bii
M
A
G
I
S
T
R
A
L
A
I
N
S
T
R.

Memoria de date
RAM 25 x 8 bii sau
41 x 8 bii
(set de registre )

Unitate central
ALU

PC

Magistral de date i adrese


SCL
tact
Timer

Ceas de
gard

Timer pt.
RESET

SDA
date

EEPROM serial
16 x 8

PIO

Figura 5.1 PIC12 Schema bloc

Setul de registre localizat n RAM conine registre cu funcii speciale i


registre de uz general. Registrele generale pot fi apelate direct sau indirect, prin
intermediul registrului special FSR (File Select Register). Registrele i adresele lor
sunt date n tabelul 5.1 (pentru circuitul PIC12C509).
Tabelul 5.1
Setul de registre PIC12C509

Registru
INDF
TMR0
PCL
STATUS

Adresa(H)
00
01
02
03

Registru
FSR
OSCCAL
GPIO
Registre
generale

Adresa(H)
04
05
06
07-1F

132

MICROCONTROLLER-e

Stiva este de 12 bii i este realizat hard. Nu exist indicator de stiv i nu


sunt instruciuni de PUSH i POP, lucrul cu stiva fiind automat la instruciunile
CALL i RETLW. Stiva admite o adncime de 2 nivele.
Setul de instruciuni pentru acest MC este dat n tabelul 5.2.
Tabelul 5.2
Setul de instruciuni PIC 12

Mnemonic-operanzi
ADDWF f,d
ANDWF f,d
CLRF f
CLRW
COMF f,d
DECF f,d
DECFSZ f,d
INCF f,d
INCFSZ f,d
IORWF f,d
MOVF f,d
MOVWF f
NOP
RLF f,d
RRF f,d
SUBWF f,d
SWAPF f,d
XORWF f,d
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
ANDLW k
CALL k
CLRWDT k
GOTO k
IORLW k
MOVLW k
OPTION k
RETLW k
SLEEP
TRIS f
XORLW k

Descriere
Adun W cu f
I LOGIC ntre W i f
Face n f toi biii 0
Face n W toi biii 0
Complementeaz f
Decrementeaz f
Decrementeaz f i trece mai departe dac este 0
Incrementeaz f
Incrementeaz f i trece mai departe dac este 0
SAU W cu f
Mut f
Mut W n f
Nici o operaie
Rotaie la stnga prin Carry
Rotaie la dreapta prin Carry
Scdere W din f
Schimb f
SAU EXCLUSIV W cu f
Bitul b din f este fcut 0
Bitul b din f este fcut 1
Se testeaz bitul b din f i face salt dac bitul este 0
Se testeaz bitul b din f i face salt dac bitul este 1
I ntre W i constanta k
Chemare subrutin
Resetare ceas de gard
Salt necondiionat
SAU ntre W i k
ncrcare imediat a constantei k n W
ncrcare registru de opiuni
ntoarcere din subrutin cu plasarea k n W
Intrarea n mod inactiv
ncrcarea registrului TRIS
SAU EXCLUSIV ntre k i W

133

5. Microcontroller-e RISC

Dac valoarea bitului d este 0, rezultatul se stocheaz n W iar dac este 1,


rezultatul se stocheaz n f.
Registrul de opiuni (OPTION) este un registru special de configurare.
Registrul TRIS este folosit pentru a controla liniile I/O. Un 1 n TRIS pune linia
corespunztoare n nalt impedan, iar un 0 valideaz linia.
Liniile de intrare/ieire pot fi programate ca intrri sau ieiri cu registrul
special GPIO. Pinii pot avea semnificaii duble. La RESET toate liniile se definesc
ca intrri. Unii pini pot trezi MC din starea inactiv (Wake up). Operaiile de
intrare ieire se fac prin intermediul registrului GPIO, de exemplu instruciunea:
BCF

GPIO,5

;stabilete un 0 pe linia 5 de ieire

Modulul timer 0 poate fi utilizat n urmtoarele moduri:


temporizator/numrtor pe 8 bii;
numrtor pentru prescalare de 8 bii;
ceas din exterior sau din interior.
Schema bloc a temporizatorului cu semnalele de comand este dat n
figura 5.2.
Fosc/4
(intern)
Tact fr
sau cu
prescalare

Alegere
tact

TIMER

Prescalare
GP2
(TOCKI)
(extern)

Magistrala de date
TOC5

PS2 PS1 PS0

PSA

Figura 5.2 Schema bloc a temporizatorului PIC12

Cu bitul TOC5 se alege sursa tactului, extern (de la un pin cu semnificaie


dubl) sau intern. Tacul merge direct la timer sau prin registrul de prescalare
(registru de 8 bii), programabil cu bitul PSA. Registrul de prescalare poate fi
ncrcat cu biii PS2, PS1 i PS0. Toi aceti bii de comand se afl n registrul de
opiuni. Registrul de prescalare poate fi folosit i de ceasul de gard, dar nu
simultan cu timerul 0.
Memoria EEPROM cu care sunt echipate anumite circuite din familie
poate fi de 16 octei, poate fi supus la peste 1 mil. de cicluri de scriere/tergere i
poate reine informaia mai mult de 40 de ani. Transmisia se face serial sincron pe
dou fire, unul de tact (SCL) i unul de date, bidirecional (SDA), mapate n
registrul GPIO ca bit 6 i bit 7, fr a avea conexiune n exterior. Protocolul pentru

134

MICROCONTROLLER-e

transferul de date poate avea loc doar dac magistrala de date nu este ocupat, cu
SDA i SCL=1. Un START este determinat de frontul SDA din 1 n 0, iar un front
SDA din 0 n 1 reprezint un STOP. Data trebuie s fie stabil pe SDA pe durata
unui impuls de tact SCL (o tranziie din 1 n 0, urmat de una din 0 n 1).
Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei.
Pentru a asigura sigurana rulrii corecte a programului, circuitul este
echipat cu un ceas de gard, care poate fi resetat printr-o instruciune special,
asigurnd o ntrziere de 18ms pn s declaneze un RESET.
Familia PIC12 are posibilitatea de lucru ntr-un mod cu economie de
energie, numit SLEEP. n modul SLEEP oscilatorul este oprit, iar pinii I/O i
pstreaz starea. Intrarea n SLEEP se face cu o instruciune 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/OSC1 i GP4/OSC2 dup o schem


standard;
cu generator de tact extern, cuplat ntre GP5/OSC1 i mas;
pentru aplicaii care nu sunt critice la timp, se poate conecta n exterior
la GP5 un grup RC, cu R (3k-100k) la +5V i C (20pF) la mas;
MC are un generator intern de 4MHz, a crui frecven poate fi
modificat prin scrierea registrului OSCCAL.

Alegerea sursei tactului, precum i activarea ceasului de gard se fac cu un


registru de configurare (de 12 bii) care nu este accesibil utilizatorului, fiind o
informaie scris n PROM/ EPROM la adresa FFFh.
Un RESET poate fi generat de una din urmtoarele 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 strii unui pin extern.
Identificarea sursei de RESET se face prin poziionarea unor bii n
registrul de stare, registru al crui coninut 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.

135

5. Microcontroller-e RISC
Inscriptor
(ex. Calc. PC)

PIC12C5xx

+5V

Vdd

GND

Vss

Vpp

/MCLR/Vpp

CLK

GP1

D I/O

GP0

Figura 5.3 Conexiune pentru programarea EPROM

Intrarea n mod programare se face cu GP1 i GP0 inui la 0 pe un front


cresctor al /MCLR.
Pentru a sublinia dimensiunea i simplitatea de utilizare a acestui MC, n
figura 5.4 este repreyentat capsula circuitului.

Vdd
GP5/OSC1
GP4/OSC2
GP3/MCLR/Vpp

PIC12C
1
2
3
4

8
7
6
5

Vss
GP0
GP1
GP2/T0CKI

Figura 5.4 Capsula PIC12

5.1.2

PIC16

Cu o arhitectur asemntoare familiei PIC12, aceste MC au cteva


mbuntiri:

35 de instruciuni fa de 33;
frecvena maxim 20MHz fa de 4;
posibilitatea de lucru n ntreruperi, cu 7 surse interne i o surs
extern;
stiv automat cu 8 nivele;
13 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer
i cu o linie de putere pentru comanda direct a unui LED;

136

MICROCONTROLLER-e

magistrala de instruciuni este pe 14 bii, fa de 12 bii;


memoria ROM este de 512 x 14 cuvinte pn la 2K x 14 cuvinte;
memoria RAM este de 80-128 de octei.

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 ataat un bit care poate fi
testat pentru a determina sursa ntreruperii.
Datorit posibilitii de lucru n ntreruperi, timerul 0, care funcioneaz la
fel ca la PIC12 poate cere ntrerupere la trecerea numrtorului de la FFh la 00h.
ntreruperea poate fi mascat.
Pentru creterea siguranei n funcionare familia PIC16 are integrat un
circuit de protecie care genereaz un RESET la scderea tensiunii de alimentare
(Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de
comand.
MC din familia PIC 16 pot fi echipate cu o diversitate mult mai mare de
interfee, cum ar fi comparatoare, convertoare ADC i DAC, USART, I2C, SPI,
PWM etc. Circuitul PIC16C64x este echipat cu 2 comparatoare analogice. Intrrile
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
funcii speciale se poate programa modul de comparare. Se poate programa ca
ieirea comparatoarelor s cear ntrerupere. Comparatoarele pot fi programate s
lucreze cu referin extern sau intern. n modul SLEEP comparatoarele rmn
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 referina de tensiune este un grup de 16 rezistene care divizeaz
tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau
invalidat pentru economia de energie.
Circuitul PIC16C71x este echipat cu convertor A/D i un bloc suplimentar
de timere. Convertorul A/D este un convertor cu aproximaii succesive pe 8 bii, cu
4 intrri analogice multiplexate i cu circuit de eantionare-memorare. Tensiunea
de referin poate fi cea de alimentare sau o referin extern la un pin I/O cu
semnificaie 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 ataate 3 registre, 2 de comand i unul de date. Cu registrele
de comand se poate programa:

selecia tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu);
selecia 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 funciile pe care le poate ndeplini (un MC poate avea unul sau mai multe
module CCP). Modulul CCP conine un registru de 16 bii i folosete timerele
suplimentare 1 i 2. Modurile de lucru posibile pentru modulul CCP sunt:

5.1.3

mod captur - la apariia unui eveniment la pinul exterior 3, registrul


CCP se ncarc cu valoarea din timerul 1. Un eveniment poate fi un
front cresctor, unul descresctor, la fiecare 4 sau 16 fronturi
cresctoare (prescalare). n momentul evenimentului se poate cere o
ntrerupere.
mod comparare - registrul CCP este permanent comparat cu
coninutul timerului 1. Dac apare o coinciden, se semnalizeaz prin
schimbarea strii pinului extern 3. n acelai moment se poate cere o
ntrerupere.
mod PWM - se folosesc 2 timere, 1 i 2, unul pentru a determina
perioada semnalului i cellalt factorul de umplere. Ieirea PWM se
face tot la pinul 3.

PIC17
PIC17 are urmtoarele mbuntiri fa de PIC16:

58 de instruciuni fa de 38;
frecvena maxim 33MHz fa de 20;
stiv automat cu 16 nivele fa de 8;
33 de linii I/O cu posibilitatea stabilirii individuale a sensului de
transfer i cu o linie de putere pentru comanda direct a unui LED;
magistrala de instruciuni este pe 16 bii, fa de 14 bii;
memoria ROM este de 2048 x 16 cuvinte;
memoria RAM este de 232 de octei;
magistralele de date, i adrese (multiplexate) sunt accesibile la pin;
unitatea central poate executa nmuliri;
sunt admise 11 surse de ntreruperi fa de 8.

Aceste MC sunt livrate n capsule cu 44 de pini.


Schema bloc este dat n figura 5.5.
i circuitele din familia PIC17 pot fi echipate cu o gam larg de interfee.

138

MICROCONTROLLER-e

Memoria program
ROM/OTP/EPROM

2K x 16 bii

M
A
G
I
S
T
R
A
L
A

Memoria de date
RAM 232 x 8 bii

Unitate central
ALU

PC
STIVA
16 x 16 bii

I
N
S
T
R
.

Magistrala de date i adrese

Timer

Ceas de
gard

Timer pt.
RESET

Control
ler de
ntrerup

3x
TIMER

UART

PIO
Port C i D

Port B

Port A

Figura 5.4 Schema bloc PIC17

Sistemul de timere este compus din mai multe timere:

Timer 0 este un numrtor de 16 bii cu surs de numrare extern sau


intern. Poate lucra cu un registru de prescalare care d un tact divizat
cu 1/1 pn la 1/256;
Timer 1 este un timer pe 8 bii care poate lucra mpreun cu Timerul 2
pentru a forma un timer pe 16 bii. Poate lucra n regim de numrare a
unor evenimente externe. Timerul are asociat un registru, deci poate
lucra n regim de comparare;
Timer 2 este la fel cu timerul 1. Timerul 1 i 2 pot lucra n mod PWM;
Timer 3 este pe 16 bii, cu un registru asociat.

Modulul USART poate fi configurat s lucreze n mod serial asincron fullduplex (pentru a transfera date cu un terminal sau un PC), sau n mod sincron fullduplex (de ex. pentru a lucra cu memorii externe EEPROM).

5. Microcontroller-e RISC

139

Observaie: 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 aplicaiilor low cost sunt MC ale firmei
ATMEL. Firma fabric i MC echivalente 8051.

5.2.1

Familia AVR

Aceste MC sunt realizate de productor n diverse variante, ncepnd cu


modelele low cost AT90S2323, AT90S1200 i terminnd cu modele complexe
AT90S4414, AT90S8515, diferenele ntre acestea constnd n principal n
mrimea i tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM i a
facilitilor oferite la interfaa cu utilizatorul.
Seria de MC ATMEL este susinut de o campanie puternic de promovare
astfel nct productorul ofer gratuit software de dezvoltare ce include asamblor,
debugger, documentaie, exemple i note de aplicaie pe site-ul su
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 spaii de adres i
magistrale diferite pentru memoria de date i memoria program. Dispun de o
prelucrare de tip pipe line a instruciunilor (n 2 trepte) astfel nct n timp ce o
instruciune este executat, cealalt se afl n ciclu de aducere din memorie (fetch)
i astfele se execut cte o instruciune 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 funcie de variant) la 5V sau la 3V i funcioneaz pn la frecvena de
10MHz. Curentul absorbit este de 2,4mA n stare activ, 0,5mA n stare inactiv i
1A n starea Power Down. n principal, circuitul este compus din:

unitatea central, n arhitectur RISC cu 118 instruciuni, majoritatea


de un ciclu i 32 de registre de uz general;
blocul de memorie, compus din memoria de program (FLASH de 2K
octei care suport n jur de 1000 de programri) i din memoria de
date (128 octei de RAM) i 128 octei de EEPROM, care suport n
jur de 100.000 de programri;

140

MICROCONTROLLER-e

interfeele sunt reprezentate de un timer de 8 bii cu prescalare, un


timer pentru ceasul de gard i o interfa serial SPI pentru
programarea n circuit. Liniile I/O sunt de regul cu semnificaie
dubl.
Unitate central
32 registre de
uz general

Memoria program
FLASH 2K octei

Memoria de date

ALU

RAM 128 octei


EEPROM 128 de octei

PC

Magistral de date

SPI

Ceas de
gard

Timer

Oscilator

Controller de
ntreruperi

Port B

Figura 5.5 MC din familia AVR schema bloc

Unitatea central poate executa majoritatea operaiilor ntr-un ciclu, ceea


ce nseamn c operanzii sunt n registrele generale, are loc operaia i rezultatul
este stocat n unul dintre registre. Se pot realiza i adresri indirecte cu 6 dintre cele
32 de registre, grupate cte 2 (ca s formeze registre de 16 bii); registrele duble
sunt referite cu X, Y, Z. Se pot face operaii ntre registre sau cu o constant.
Instruciunile au formatul pe 16 bii, iar indicatorul de program PC este pe 10 bii.
Memoria de date poate fi accesat tot ca registre, n acelai spaiu. Spaiul
I/O conine 64 de adrese unde se gsesc registrele de control i de stare ale
interfeelor. Stiva este definit n RAM, deci exist un registru indicator de stiv
SP de 8 bii. O imagine sugestiv a spaiilor de memorie i I/O este dat n figura
5.6.

141

5. Microcontroller-e RISC

00h
Memoria program
FLASH
1Kx 16 bii

000h

32 registre de lucru

00h
EEPROM
128 octei

1Fh
64 registre I/O

SRAM
128 octei

60h
7Fh

3FFh

Figura 5.6 Harta spaiilor de memorie i I/O

Memoria EEPROM dispune de un spaiu propriu de adresare, n care


fiecare octet dintr-o locaie 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 coninut n instruciune. Se


pot executa instruciuni cu un registru sau ntre 2 registre. Este
accesibil astfel tot spaiul de date;
adresare indirect - adresa operandului este n X, Y sau Z;
adresare indirect cu deplasament - adresa oprandului este rezultatul
adunrii registrelor Y sau Z cu adresa de 6 bii coninut n
instruciune. Se acoper astfel doar 63 de locaii 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 instruciuni este dat n tabelul 5.3.

142

MICROCONTROLLER-e

Tabelul 5.3
Setul de instruciuni al familiei AVR

Mnemonic
ADD
ADC
SUB
SUBI
SBC
SBCI
AND
ANDI
OR
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
RJMP
RCALL
RET
RETI

Operanzi
Rd,Rr
Rd,Rr
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd
Rd
Rd,K
Rd,K
Rd
Rd
Rd
Rd
Rd
k
k

Operaie
Rd=Rd+Rr
Rd=Rd+Rr+C
Rd=Rd-Rr
Rd=Rd-K
Rd=Rd-Rr-C
Rd=Rd-K-C
Rd=Rd*Rr
Rd=Rd*K
Rd=Rd v Rr
Rd=Rd v K
Rd=RdRr
Rd=$FF-Rd
Rd=$00-Rd
Rd=Rd v K
Rd=Rd*(FFh-K)
RD=Rd+1
Rd=Rd-1
Rd=Rd * Rd
Rd=RdRd
Rd=$FF
PC=PC+k+1
PC=PC+k+1
PC=STACK
PC=STACK

Operaie
Sum
Sum plus carry
Diferen
Diferen cu o constatnt
Diferen cu carry
Dif. cu const. i carry
SI logic
SI logic cu const.
SAU logic
SAU logic cu const.
SAU exclusiv
Complement fa de 1
Complement fa de 2
Set bit K n registru
Clear bit K n registru
Increment
Decrement
Test de 0 sau Clear registru
Set registru
Salt relativ la k
Salt la subrutin
Return din subrutin
Ret. din subrutin de tratare a
ntreruperii
if (RD=Rr) PC=PC+2 Compar , skip dac egal

CPSE

Rd,Rr

CP
CPC
CPI
SBRC

Rd,Rr
Rd,Rr
Rd,K
Rr,b

SBRS

Rr,b

SBIC

P,b

if (P(b)=0) PC=Pc+2 Skip dac bitul B din I/O este 0


or 3

SBIS

P,b

if (P(b)=1) PC=Pc+2
or 3

or 3

Rd-Rr
Rd-Rr-C
Rd-K

Compar
Compar cu carry
Compar cu constat
if (Rr(b)=0) PC=Pc+2 Skip dac bitul b din Rr este 0

or 3
if (Rr(b)=1) PC=Pc+2
or 3

Skip dac bitul b din Rr este 1

Skip dac bitul B din I/O este 1

143

5. Microcontroller-e RISC

Mnemonic
BRBS

Operanzi
s,k

Operaie
if(SREG(s)=1)
PC=PC+k+1
if(SREG(s)=0)
PC=PC+k+1

Operaie
Salt dac SF este1

BRBC

s,k

BREQ
BRNE
BRCS
BRCC
BRSH
BRLO
BRMI
BRPL
BRGE

k
k
k
k
k
k
k
k
k

if (Z=1) PC=PC+k+1
if (Z=0) PC=PC+k+1
if (C=1) PC=PC+k+1
if (C=0) PC=PC+k+1
if (C=0) PC=PC+k+1
if (C=1) PC=PC+k+1
if (N=1) PC=PC+k+1
if (N=0) PC=PC+k+1
if (NV=0)
PC=PC+k+1
if (NV=1)
PC=PC+k+1
if (H=1) PC=PC+k+1
if (H=0) PC=PC+k+1
if (T=1) PC=PC+k+1
if (T=0) PC=PC+k+1
if (V=1) PC=PC+k+1
if (V=0) PC=PC+k+1

Salt: egalitate
Salt: diferit
Salt: carry setat
Salt: carry este zero
Salt: mai mare sau egal
Salt: mai mic
Salt: minus
Salt: plus
Salt : mai mare sau egal, cu
semn
Salt : mai mic dect 0, cu semn

BRLT

BRHS
BRHC
BRTS
BRTC
BRVS
BRVC
BRIE

k
k
k
k
k
k
k

BRID

if (I=0) PC=PC+k+1

LD
ST
MOV
LDI
IN
OUT
SBI
CBI
LSL

Rd,Z
Z,Rr
Rd,Rr
Rd,K
Rd,P
P,Rr
P,b
P,b
Rd

LSR

Rd

ROL

Rd

Rd=(Z)
(Z)=Rr
Rd=Rr
Rd=K
Rd=P
P=Rr
I/O (p,B)=1
I/O (p,B)=0
Rd(n+1)=Rd(n),Rd(
0)=0
Rd(n)=Rd(n+1),Rd(
7)=0
Rd(0)=C,Rd(n+1)=
Rd(n),
C=Rd(7)

if (I=1) PC=PC+k+1

Salt dac SF este 0

Salt dac CF este setat


Salt dac CF este zero
Salt dac T este setat
Salt dac T este zero
Salt dac este overflow
Salt dac nu este overflow
Salt dac ntreruperea e
activat
Salt dac ntreruperea e
dezactivat
Incarc registru indirect
Stocheaz registru indirect
Mut Rr n Rd
Mut constanta K n Rd
IN din portul P
OUT la portul P
Set bit b din portul P
Reset bit b din portul P
Shift logic stnga
Shift logic dreapta
Rotire spre stnga prin carry

144

MICROCONTROLLER-e

Mnemonic
ROR

Operanzi
Rd

ASR

Rd

SWAP

Rd

BSET
BCLR
BST
BLD
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLS
SEV

s
s
Rr,b
Rd,b

Operaie
Rd(7)=C,Rd(n)=Rd(
n+1),
C=Rd(0)
Rd(n)=Rd(n+1),
n=0..6
Rd(3..0)=Rd(7..4),
Rd(7..4)=Rd(3..0)
SREG(s)=1
SREG(s)=0
T=Rr(b)
Rd(b)=T
C=1
C=0
N=1
N=0
Z=1
Z=0
I=1
I=0
S=1
S=0
V=1

CLV

V=0

SET
CLT
SEH

T=1
T=0
H=1

CLH

H=0

NOP
SLEEP
WDR

Operaie
Rotire spre dreapta prin carry
Shift aritmetic spre dreapta
Inverseaz jumtile
Seteaz flag s
Reseteaz flagul s
Stocheaz bitul b din Rr n T
Incarc T n bitul b din Rd
Seteaz Carry flag
Reset Carry flag
Seteaz Negative flag
Reseteaz Negative flag
Seteaz Zero flag
Reseteaz Zero flag
Activeaz ntrerupere
Dezactiveaz ntrerupere
Seteaz flagul de semn
Reseteaz flagul de semn
Seteaz
flagul
overflow
complement fa de 2
Reseteaz flagul overflow
complement fa de 2
Seteaz T n SREG
Reseteaz T n SREG
Seteaz Half Carry Flag n
SREG
Reseteaz Half Carry Flag n
SREG
No operation
Sleep
Watch dog reset

Anumite modele au i o instruciune de nmulire, 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 depire.

145

5. Microcontroller-e RISC

ntreruperile pot fi mascate cu 2 registre de 8 bii, GIMSK- General


Interrupt Mask i TIMSK- Timer/Counter Interrupt Mask. La primirea unei
ntreruperi se invalideaz sistemul de nteruperi. Totui este posibil primirea nc
a unei ntreruperi n timp ce este servit prima, dac se revalideaz sistemul de
ntreruperi. Rspunsul 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 crete 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 atepte o iniializare.
Dup RESET execuia programului ncepe de la adresa 000h. Un RESET
pornete un numrtor care contorizeaz un anumit numr de impulsuri ale
ceasului intern al circuitului. Contorul stabilete durata impulsului RESET intern
pentru ca acesta s fie suficient de lung pentru iniializarea tuturor circuitelor
interne, figura 5.7.
Power On Reset

Vcc

SAU
LOGIC

RESET

/RESET

/Q

Ceas de gard

Oscilator RC
intern

Numrtor

Reset

Figura 5.7 Circuit intern pentru generarea semnalului RESET

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 execuia


instruciunii 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

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 aceeai instruciune, dar poziionnd
un bit din registrul de control. n acest mod unitatea central este
oprit, dar timerul, ceasul de gard i sistemul de ntreruperi continu
s funcioneze. 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 aplicaii cu


pretenii la stabilitatea frecvenei, (elemente conectate la pinii Xtal1 i
Xtal2);
un generator extern la un pin I/O (PB3);
generatorul RC intern, la 1MHz.
Selecia 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 utilizrii acestor MC cu componente externe
extrem de puine.
Timerul care echipeaz circuitele AT902323 este un timer pe 8 bii cu un
registru de prescalare pe 10 bii. Timerul poate fi folosit cu tact intern (tactul
sistemului divizat cu 8, 64, 256 sau 1024) sau cu tact extern. Sursa de tact pentru
timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Funcionarea
timerului este controlat de bii din din dou registre (registru de mti pentru
ntreruperi i registru de control al timerului). La depire, numrtorul 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
ntmpltoare a ceasului de gard, acesta trebuie dezactivat cu o secven de
program specific.
EEPROM este accesibil n spaiul I/O, prin urmtoarele 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 AT90S1200 dispune de dou porturi: B de 8 bii
i D de 7 bii). Fiecare linie de port poate fi configurat independent fa de
celelalte, att ca linie de intrare ct i ca linie de ieire. De asemenea n modul de
utilizare ca linie de intrare, fiecare linie poate fi configurat cu un rezistor de pullup intern ( valoarea aprox 40K ). Fiecare linie de ieire poate susine un curent de
20mA (max 40mA valoare limit absolut) astfel nct se poate folosi direct la

147

5. Microcontroller-e RISC

comandarea de LED-uri. Fiecrui port i este alocat un registru de sens, (DDRx,


Port x Data Direction). Pinii I/O admit semnificaii duble.
Programarea memoriei FLASH i EEPROM se poate face serial, ntr-un
mod cu tensiune mare (12V) i un mod cu tensiune joas. Circuitele vin de la
fabricant gata de a fi nscrise (au coninutul FFh n fiecare locaie). n modul de
programare cu tensiune nalt, tensiunea de 12V valideaz programarea, nu are un
rol funcional. Modul de programare n cele 2 variante este artat n figura 5.8.
12V

AT902323
/RESET
XTAL1/PB3

Ceas de
programare
serial

GND
Tact

Vcc
PB2
PB1
PB0

AT902323
/RESET
XTAL1/PB3

Vcc
PB2
PB1
PB0

4,5-5,5V
Date seriale de
ieire
Instruciuni seriale
de intrare
Date seriale de
intrare

2,7-6,0V
SCK

Programare cu
tensiune mare

Programare cu
tensiune mic

MISO
MOSI

Figura 5.8 Programarea serial a memoriei EPROM (FLASH)

La programarea cu tensiune mare se poate programa memoria FLASH


(intrarea pe PB1) 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 obine prin trecerea lui PB2 n HIGH. Memoria
EEPROM se programeaz trimind nti adresa apoi octetul de date, confirmarea
fiind pe pinul PB2. Orice locaie poate fi citit folosind instruciunea de citire i
adresa, obinnd pe pinul PB2 coninutul respectiv. Tactul serial este activ pe front
cresctor. Scrierea, citirea i unele comenzi speciale (tergerea ntregii memorii,
scrierea biilor de securitate etc.) se comand prin trimiterea naintea adresei a
codului serial al comenzii respective (se gsete n foile de catalog).
La programarea cu tensiune mic se poate programa memoria FLASH i
memoria EEPROM tot serial, prin interfaa SPI. Datele se nscriu pe frontul
cresctor a lui SCK. n acest mod de lucru, confirmarea scrierii unei locaii 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 interfaa CENTRONICS a unui PC, figura
5.9.

148

MICROCONTROLLER-e

INTERFAA
CENTRONICS

12V
AT902323

STB

/RESET
XTAL1/PB3

Vcc
PB2

4,5-5,5V

PB1
GND

PB0

D0
D1
ACK

Figura 5.9 Programarea unui circuit AVR folosind interfaa CENTRONICS

Memoria este prevzut cu posibilitatea de protecie a programelor


nscrise. Astfel, exist 2 bii de blocare n FLASH care nu pot fi teri dect prin
tergerea ntregului program. Aceti doi bii pot comanda:

dezactivarea unor viitoare programri ale memoriei FLASH sau


EEPROM;
dezactivarea unor viitoare programri ale memoriei FLASH sau
EEPROM i blocarea verificrii.

Memoria mai este prevzut cu 2 bii care nu pot fi teri (fuzibili) care pot
comanda:

dezactivarea modului serial de programare;


sursa intern sau extern pentru tact.

Modelul ATiny 10 este echipat cu un comparator analogic, care compar


valoarea analogic de la pinul PB0 cu cea de la pinul PB1. Ieirea comparatorului
poate declana o ntrerupere. Comparatorul este controlat de un registru de control
i stare.
Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe 10 bii.
Acest model este un MC cu o echipare superioar: un timer suplimentar de 16 bii
cu posibilitatea de comparare, captur i generare PWM, un comparator analogic,
un canal UART, un convertor A/D pe 10 bii cu 6 canale i un sistem de ntreruperi
care admite 14 surse de ntrerupere din care 2 externe. Acest circuit are i
posibiliataea de programare paralel, deoarece are suficiente linii I/O. Schema bloc
a acestui MC este dat n figura 5.10.

149

5. Microcontroller-e RISC
Oscilator intern
Unitate central

Ceas
de
gard

RESET

32 registre de
uz general

Memoria program
FLASH 2K octei

ALU

Controller de ntreruperi

Memoria de date
RAM 128 octei
EEPROM 128 de octei

PC

Magistrala de date

SPI

ADC

Port B

Port C

Timer

Timer 16b

UART

Comparator

Port D

Figura 5.10 MC AT90S4433 Schema bloc

Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bii
de date, cu generarea de rat de transfer. Canalul serial poate cere ntrerupere la
transmisie complet, registru de transmisie gol sau recepie complet. Recepia 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 comunicaie
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 comunicaie 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 declaneze o captur la timerul de 16 bii la acest tip de MC.
Convertorul A/D este un convertor cu aproximaii succesive cu eantionare
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 separai 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.

150

MICROCONTROLLER-e

La terminarea unei conversii convertorul poate cere o ntrerupere. Schema bloc a


convertorului este dat n figura 5.11.

Intrri
analogice

Multiplexor
analogic

Selecie
canal

Cerere de
ntrerupere

START

ADMUX

Convertor Analog
Digital cu aprox.
succesive

Eantionare
Memorare

ADCSR

Date

Tact
conversie

ADCH, ADCL (10b)

BUS INTERN

Registru de
prescalare

CK

Figura 5.11 Convertorul analog-numeric

Prin registrul ADMUX se comand cu 3 bii selecia unui canal din cele 6.
Registrul de control i stare ADCSR poate declana o conversie prin poziionarea
unui bit. Funcionarea convertorului poate fi validat/invalidat. Prin registrul de
control se poate programa i rata de prescalare. Pentru a micora perturbaiile
introduse de unitatea central n timpul achiziiei de date se poate comanda UC n
stare inactiv. Dup efectuarea conversiei ntreruperea de la convertor va trezi UC
(ADC Noise Canceler Function).
nscrierea memoriei FLASH i EEPROM se poate face i n mod paralel,
ceea ce nseamn o vitez mai mare de scriere i un plus de simplitate la
programare. Semnalele folosite n acest mod de programare sunt date n figura
5.12.
Pentru nscrierea sau citirea datelor se folosesc 8 linii cu semnificaii duble
din porturile PC i PB. /OE stabilete dac este vorba de scriere sau citire. Scrierea
se face cu strobul /WR. BS selecteaz octetul mai semnificativ sau mai puin
semnificativ. Semnalele XA0 i XA1 stabilesc dac se ncarc memoria FLASH,
sau o adres a EEPROM, un octet de date sau o comand. Sunt posibile 9 comenzi:

151

5. Microcontroller-e RISC

tergere memorie, scriere bii de securitate, scriere bii fuzibili, scriere FLASH,
scriere EEPROM, citire bii de identificare, citire bii fuzibili i de securitate, citire
FLASH, citire EEPROM. Modul de scriere paralel poate fi uor realizat prin
intermediul interfeei CENTRONICS; citirea pentru verificare este mai complicat.
RDY/BSY

AT90S4433
PD1

Vcc

/OE

PD2

PC,PB

/WR

PD3

BS

PD4

XA0

PD5

XA1

PD6

+12V

RESET

tact

XTAL

+5V
8 linii de date,
bidirecionale

Figura 5.12 Semnale folosite la nscrierea paralel a memoriei EEPROM (FLASH)

Modelele AT90S4414 i AT90S8515 dispun de posibilitatea conectrii n


exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la
portul A magistrala de adrese (octet mai puin 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 bii, avnd
2 seturi de instruciuni (ARM pe 32 de bii i THUMB pe 16 bii). Spaiul adresabil
este de 4G.
O schem bloc sumar a acestui nucleu este dat n figura 5.13.
Structura UC este pipe line pe 3 nivele; extragere cod, decodificare i
execuie. UC poate lucra cu date pe 8, 16 sau 32 de bii i poate executa nmuliri
ntr-un singur ciclu. Nucleul are integrat i circuitul de testare JTAG i un emulator
n circuit.

Setul de instruciuni THUMB pe 16 bii este un subset al setului pe


32 de bii, cele mai uzual folosite instruciuni. n acest fel se salveaz spaiu
de memorare i se ctig vitez de prelucrare.

152

MICROCONTROLLER-e

Emulator n
circuit
(Ice Breaker)

Unitate central ARM


Magistrala
de
adrese
Registru pt. adrese

Bus C
Distribuitor
de
magistrale

37 registre de 32 bii
Bus A
ALU pe 32 de bii

Controller
JTAG

Bus B

Magistrala de
date (32)

Decodor
ARM

Decodor
Registru de date (32)

THUMB

Figura 5.13 MC ARM schema bloc

Pentru a asigura un grad mare de paralelism n UC, exist mai multe


magistrale de legtur. Instruciunile sunt analizate i distribuite decodoarelor
corespunztoare (THUMB sau ARM). UC este echipat cu un set de 32 de registre
i registre suplimentare pentru nmulire. Pentru a se putea conecta o varietate ct
mai mare de interfee, magistralele sunt accesibile prin distribuitor n mai multe
forme: unidirecional, bidirecional, multiplexat etc.

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 aplicaie. Alegerea unui MC potrivit poate duce la succesul proiectului,
aa cum o alegere nepotrivit poate duce la eecul proiectului. Fiecare cititor
trebuie s adapteze aceste criterii nevoilor sale i scalei proprii de valori.
Obiectivul urmrit n alegerea unui MC este obinerea calitii dorite cu un
cost ct mai sczut. Calitile dorite nseamn performan, fiabilitate, caliti EMC
(de compatibilitate electromagnetic cu mediul), iar costul total include costurile
cercetrii, proiectrii, construciei, testrii, reparrii produsului.
n primul rnd se pune problema stabilirii funciei pe care MC trebuie s-o
ndeplineasc n sistem. Alegerea din catalog a unui MC trebuie fcut n ideea a
ct mai puin hardware suplimentar (din motive economice). Procesul de cutare
este dificil din cauza numrului foarte mare de tipuri de MC disponibile pe pia.
Munca de cutare este ajutat de bazele de date din Internet, aa cum este baza de
date de la www.questlink.com . Dup stabilirea MC optim se verific preurile,
dac este disponibil, suportul acordat de fabricant, existena uneltelor de
dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea
de a fi gsit pe pia (optenabilitatea), mai ales n zone n care circulaia mrfurilor
este destul de greoaie.
Criteriile pentru alegerea unui MC sunt, n ordinea importanei:

1.Posibilitatea folosirii n aplicaia dat


! este suficient un MC sau sunt necesare circuite suplimentare;
! liniile I/O sunt suficiente (un numr prea mic nseamn c aplicaia nu se
poate face cu acest MC, iar un numr prea mare nseamn un cost excesiv);
! exist toate interfeele solicitate de aplicaie: I/O serial, convertoare A/D,
D/A i nu exist interfee n plus;
! exist capacitatea de memorare suficient: RAM, ROM;
! MC are viteza suficient pentru aceast aplicaie. Se verific timpul
necesar rulrii programului care trebuie s fie mai mic dect intervalul de
timp n care trebuie s reacioneze MC;

154

MICROCONTROLLERE

! alimentarea MC poate fi fcut din aplicaie (este posibil ca aplicaia s fie


portabil, atunci este nevoie de un MC care s funcioneze la 3V;
! preul acestui MC este bun (acceptabil) pentru aplicaia respectiv.
2. Optenabilitatea MC
! trebuie s fie disponibil n cantiti suficiente;
! trebuie s fie n producia actual, dar i n viitor pentru posibilitatea
aprovizionrii 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
documentaie tehnic;
buletine de aplicaii;
service prin telefon (BBS);
rapoarte despre probleme de funcionare;
software de utilizare;
dac MC este folosit i de ali utilizatori, atunci sunt formate grupuri de
lucru care pot oferi ajutor.
5.Seriozitatea constructorului
dac este demonstrat competena lui ;
stabilitate i fiabilitatea MC realizate;
viteza de livrare;
numr de ani ca i constructor i rezultate financiare.

Un argument pentru alegerea unui tip de MC este existena unui modul de


evaluare. Pentru a promova propriile MC, muli furnizori au creat Kit-uri de
evaluare care conin plci de evaluare i un soft minimal cu care se poate nva
utilizarea MC i se pot pune la punct aplicaii. Un kit conine de regul un program
monitor pentru calculator PC, un program de transfer al datelor spre placa de
evaluare (prin interfaa RS232 sau CENTRONICS), un asamblor i un compilator
C. Toate kiturile sunt nsoite de documentaie. Cteva din modulele de evaluare
sunt:
Motorola EVBU, EVB, EVM, EVS sunt echipate cu MC 68HC11.
Dallas Semiconductor DS5000TK sunt echipate cu MC Dallas din seria
DS5000.
Philips i CEIBO DS750 sunt echipate cu 87C75x, echivalent cu 8051.

6. Criterii de proiectare

155

American Educational Systems AES-51(8051), AES-11(68HC11), AES88(8088) conin o tastatur, un afiaj cu LCD i documentaie.
Firma Texas Instruments pune la dispoziia celor interesai un set de
accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS i unelte de
dezvoltare (CDT). Aplicaia 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 interfeei 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, aa cum este de exemplu PHYTEC (www.phytec.de).
Fiecare furnizor de MC pune la dispoziia clienilor 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 conine o plac cu soclu i hard-ul aferent pentru
programarea iniial a MC, uneori programarea EPROM-ului, interfaa i cablul de
legtur la PC, documentaie i programe (asamblor, link editor, debugger) dar nu
conine de regul un MC. Preul unui astfel de Kit pornete de la 100USD
(www.schuricht.de , www.farnell.com ).
Un alt argument pentru alegerea unui MC este comoditatea folosirii lui.
Unele MC, aa cum este Motorola 68HC11A8P1 are nscris n ROM un program
monitor (numit Buffalo). Pentru punerea n funciune este nevoie doar de o
legtur 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 conine un BASIC. MC Dallas din seria DS5000 are nevoie doar
de un cristal pentru oscilator i este gata de lucru. MC conine memorie RAM
static alimentat de la o baterie i programul i datele sunt astfel nevolatile.

6.2

ALGORITMUL PROIECTRII SISTEMELOR


CU MC

Ne permitem s prezentm o organigram, (figura 6.1) ce ncearc s


sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s le
urmreasc n dezvoltarea soft-ului dedicat unei aplicaii. Trebuie s menionm c
etapele 3,4 i 5 pot fi iterate. Ele duc la perfecionarea funcionrii sistemului.

156

MICROCONTROLLERE
START

A N A L IZ A C E R IN E L O R P R O C E S U L U I C O N T R O L A T :
N E C E S IT IL E D E C O N T R O L C O R E S P U N Z T O A R E
S E M N A L E L O R A N A L O G IC E I D IG IT A L E
A N A L IZ A C E R IN T E L O R L E G A T E D E C O M A N D A I

C O N TR O L U L N T R Z IE R IL O R I F R E C V E N E I

A N A L IZ A S T R U C T U R II H A R D W A R E :
A T R IB U IR E A R E S U R S E L O R H A R D W A R E P E N TR U P R O C E S A R E A
S E M N A L E L O R D IG IT A L E S I A N A L O G IC E D IN P R O C E S
A N A L IZ A C E R IN E L O R L E G A T E D E S IN C R O N IZ A R E A
F U N C IO N R II U C N C A D R U L P R O C E S U L U I
A T R IB U IR E A R E S U R S E L O R S IS T E M U L U I D E N T R E R U P E R I
S E M N A L E L O R M A I S U S A N A L IZ A T E
A N A L IZ A P O S IB IL E L O R IN T E R F E R E N E D IN T R E S IS T E M U L
C O N C E P U T I M E D IU L A M B IA N T

P R O IE C T A R E A P R O G R A M E L O R D E A P L IC A IE :
D E F IN IR E A V A R IA B IL E L O R D E D IC A T E M E M O R R II S T R II
S IS T E M U L U I I C E L O R C E S U N T N E C E S A R E D E S E R V IR II
F L U X U R IL O R IN F O R M A IO N A L E
D E F IN IR E A F U N C IU N IL O R C O R E S P U N Z T O A R E F IE C R E I
R U T IN E D E S E R V IR E A N T R E R U P E R IL O R
D E F IN IR E A R O L U L U I F IE C R E I R U T IN E P R IN P R E C IZ A R E A :
P A R A M E T R IL O R D E IN T R A R E , A F U N C IU N II P R O P R IU -Z IS E ,
A T IM P U L U I D E E X E C U IE I A V A R IA B IL E L O R I
S E M N A L E L O R R E Z U L T A T E N U R M A E X E C U IE I R U T IN E I
D E F IN IR E A R O L U L U I P R O G R A M U L U I P R IN C IP A L
P R O IE C TA R E A R U T IN E L O R D E S E R V IR E A N T R E R U P E R IL O R , A
R U T IN E L O R I A P R O G R A M U L U I P R IN C IP A L

P R O C E S A R E A F I IE R E LO R R E Z U L T A T E N U R M A P R O IE C T R II:

ASAM B LARE A
L IN K -E D IT A R E A

C O N V E R S IA O B J IN T E L -H E X
D EP AN ARE A PRO GR AM E LO R

T E S T A R E A S IS T E M U L U I
S IM U L A R E A F U N C IO N R II S IS T E M U LU I
D E P A N A R E A P E S IS T E M U L D E D E Z V O L T A R E A A P L IC A IE I

Figura 6.1 Organigrama (form simplificat) proiectrii unui sistem


dedicat

6. Criterii de proiectare

6.3

157

PROIECTAREA SISTEMELOR CU MC N
VEDEREA SIGURANEI N EXPLOATARE

Tendina productorilor de MC de a scdea preurile duce la rspndirea


din ce n ce mai mare a MC i la crearea a noi i noi aplicaii. Micorarea
dimensiunilor duce la creterea frecvenei de lucru. Cu ct frecvena crete, cu att
crete posibilitatea interferenelor electromagnetice (EMI) i se pune problema
proiectrii n vederea compatibilitii electromagnetice (EMC).
Apar dou categorii de probleme: aplicaia poate genera perturbaii
(conduse sau radiate) sau poate fi susceptibil la perturbaii (conduse sau radiate).
Descoperirea unor probleme de EMI n faza final de produciei a aplicaiei poate
fi costisitoare deoarece s-ar putea s fie necesar reproiectarea aplicaiei; de aceea
este necesar ca proiectarea iniial s se fac n vederea EMC.
Perturbaiile 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 cderi de tensiune. Pentru
un sistem cu MC perturbaiile sunt generate de regul de cablaj, deoarece circuitele
integrate au dimensiuni prea mici pentru a putea emite. Semnalul cu frecvena cea
mai mare este tactul sistemului generat cu un circuit oscilant cu cuar. Datorit
faptului c forma semnalului este apropiat de forma sinusoidal, coninutul de
armonici este mic. Dac tactul este adus din exterior, se impune atenie mrit
pentru a reduce buclele de circuit emisive.
Pentru un sistem care are memorii externe cuplate la MC, liniile de transfer
pot fi emisive, deoarece frecvenele de tranziie sunt mari.
Susceptibilitatea sistemelor cu MC este creat de natura sincron a MC.
Un tact cu nivel electric insuficient poate produce o eroare. Erorile sistemelor cu
MC pot fi grupate n:

1. aplicaia are o eroare dar se corecteaz;


2. aplicaia are o eroare dar o ntrerupere sau un RESET corecteaz
funcionarea;
3. aplicaia are o eroare i oprind i repornind sistemul, eroarea dispare;
4. aplicaia are o eroare permanent datorat unei componente defecte.
Problemele din categoria 1 i 2 pot s nici nu fie observate de beneficiar.

Performanele EMC pot fi mbuntite acordnd atenie deosebit


urmtoarelor aspecte de proiectare:

desenul cablajului imprimat;


ceasul de gard
programarea defensiv

158

MICROCONTROLLERE

6.3.1 Cablajul imprimat


Orice perturbaii pe liniile de alimentare pot produce o funcionare
defectuoas a sistemului. De aceea se recomand utilizarea unui cablaj multistrat la
care masa i alimentarea sunt plane interne. La aplicaiile cu pre mic, o cale
important de a reduce preul 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 aplicaii care trebuie s fie foarte ieftine se folosete alimentarea
MC de la reeaua de c.a. fr transformator, cu un redresor monoalternan (figura
6.2).
MC
VDD
Reea
220V

DZ
5V

0,1

VSS
Mas flotant

Figura 6.2 Schema simpl de alimentare de la reea

n acest caz se creeaz o linie de mic impedan spre mas prin reeaua de
alimentare de la VDD. 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 instruciunea nu
se execut corect, circuitul ieind din program. O astfel de situaie 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 generrii 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 pstreze o distan mare ntre liniile de frecven mare i circuitul
de tact.
Este de asemenea important protecia pinilor de intrare, cum ar fi RESET
sau IRQ. Un pin n aer poate comuta dac n vecintatea lui sunt linii de nalt

6. Criterii de proiectare

159

frecven. Se recomand decuplarea acestor pini cu condensatori 1-10nF ct mai


aproape de circuit.

6.3.2 Ceasul de gard


Folosirea ceasului de gard este foarte util n creterea siguranei n
funcionare. Majoritatea MC au un ceas de gard integrat, iar dac nu, un ceas de
gard extern poate fi uor realizat cu un monostabil redeclanabil.
Redeclanarea ceasului de gard trebuie fcut n programul principal, nu
n subrutine. Pentru a putea folosi corect ceasul de gard trebuie analizat cu
atenie durata normal a programului pe ramura cea mai lung.

6.3.3 Programarea defensiv


Prin metodele de programare defensiv se poate mbunti mult sigurana
n funcionare fr nici un hardware suplimentar. Cteva din cele mai eficiente
metode sunt:

rencrcarea periodic a registrelor care comand pinii I/O i a celor


mai importante registre. Pinii I/O sunt legtura MC cu exteriorul, de
aceea ei sunt supui perturbaiilor. Readucerea lor la nivele corecte
micoreaz probabilitatea ca o perturbaie s se propage n circuit.
citirea repetat a semnalelor de intrare micoreaz riscul unei citiri
greite. De exemplu citirea de 3 ori la rnd a unui pin care este legat la
o tast. Dac s-a citit aceeai valoare de fiecare dat se elimin
posibilitatea unei perturbaii.
dac exist locaii 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 aplicaie exist memorie nefolosit, aceasta se umple cu
instruciuni de salt ntr-un loc cunoscut pentru ca un salt neprevzut n
memorie datorat unei perturbaii s fie anulat de saltul n locul
cunoscut.
Folosirea watchdog-ului n faza de testare i chiar n aceea de
fiabilizare a funcionrii sistemului. Implic, postarea (memorarea ntro zon specific) strilor succesive prin care trece sistemul, scrierea
unei rutine de analiz a strilor i de directare a programelor ctre
starea ultim postat, rutin apelat la fiecare "warm reset", sau chiar

160

MICROCONTROLLERE

la fiecare reset al sistemului. Pot fi implementate soft i alte funciuni


care s permit meninerea coerenei sistemului!

7
APLICAII

7.1

IMPLEMENTAREA UNEI APLICAII


SIMPLE DE COMAND I CONTROL
DIGITAL

S se comande utiliznd un sistem dotat cu microcontroller un piston


hidraulic (actuator) ntr-o micare de avans i alta de retragere, comenzi transmise
prin intermediul unei linii de conexiune seriale. Frecvena de transfer pe interfaa
serial va fi de 19200 bauds (bii pe secund), iar frecvena de ceas a sistemului va
fi de 11059000Hz. Cuvintele de comand i control sunt formate dintr-un singur
caracter n format ASCII i comenzile pot conine i parametrii.

L1
Ev1

Ev2

Figura 7.1 Structura actuatorului electro-hidraulic

L2

162

MICROCONTROLLERE

Cuvintele cheie admise de ctre sistem pentru controlul su sunt:

A - comand de avans a pistonului, respectiv comand micarea de la


limitatorul 1 ctre limitatorul 2
R - comada de retragere a pistonului, respectiv comand micarea de la
limitatorul 2 ctre limitatorul 1
S - comand de citire a strii actuatorului care va ntoarce urmtoarele
ecouri:
1. D - pregtit s recepioneze comand (reaDy)
2. B - ocupat cu execuia unei comenzi (Busy)
P comand de aflare a poziiei actuatorului (Position), care va
ntoarce urmtoarele ecouri:
1. E avansat, actuatorul atinge limitatorul 2
2. I retras, actuatorul atinge limitatorul 1
3. M actuator aflat n micare

Structura electro-hidraulic a sistemului de comand i control include


elementele din figura 1. i anume:
pompa de presiune pentru circuitul hidraulic, care pornete simultan cu
comand dorit; comanda pompei este realizat de ctre sistem n
logic pozitiv (1 logic = pompa acionat, 0 logic = pompa oprit).
dou electro-valve cu dou ci care asigur accesul presiunii ctre
camerele pistonului hidraulic comandate tot n logic pozitiv, ceea ce
nseamn c aplicnd un 1 logic pe linia de comand, nalta presiune a
pompei are acces ctre camera corespunztoare a pistonului, iar
aplicnd un 0 logic pe linia de comand presiunea din camera
pistonului este eliberat ctre rezervorul de fluid.
dou limitatoare de capt de curs care funcioneaz n logic negativ
i care permit detectarea strii actuatorului.
interfaa serial RS232C cu care sistemul de comand este conectat la
sistemul ierarhic superior, spre exemplu la un PC.

163

7. Aplicaii

7.1.1 Varianta de implementare cu microcontroller CISC


Proiectarea elementelor electronice ale sistemului o vom face utiliznd
circuitul AT89C2051, care este dotat cu 2 Ko memorie EEPROM (Flash) care
permite stocarea programelor de comand i control. Sunt necesare att
amplificatoarele n comutaie 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 1 i 2. Structura gndit este
prezentat n figura 7.2.
P3.

Rx

P3.

Tx
P3.

AT89C2051

P3.

P3.

P3.
P3.

Ev
Ev
p

L1
L2

Figura 7. 2 Schema conectrii microcontrolerului la aplicaie

Implementarea software a sistemului implic scrierea programelor care s


permit execuia funciunilor sistemului propus. Ca sistem determinist, acesta
trebuie s aibe o stare iniial bine definit, de aceea vom considera c aceasta
corespunde poziiei cu pistonul retras aflat pe limitatorul L1, dar pe lng aceste
elemente ce in de procesul n care sistemul este utilizat, va trebui s analizm i s
setm parametrii iniiali ai microcontroller-ului. Pentru aceasta, vom urmri starea
iniial a UC, prezentat n catalogul produsului (vezi figura 7.3), iar apoi va trebui
ca s scriem rutina de iniializare de sistem pentru a preciza complet starea
microcontroller-ului.
Organizarea programelor care determin funciunile sistemului ilustreaz
principiile programrii structurate, astfel: programul de iniializare este apelat din
programul principal, funciunile sistemului, cea de comunicaie serial, cele de
comand avans i retragere piston, cele de specificare a strii sistemului i cele de
oprire pe limitatoare a acestuia sunt specificate prin rutine de servire a
ntreruperilor (ISR Interrupt Service Routines).

164

MICROCONTROLLERE

Numele SFR
PC
ACC
B
PSW
SP
DPTR
P0-P3
IP
IE
TMOD
SCON
SBUF
PCON

Valori de RESET

00H
00H
00H
00H
07H
00H
FFH
xx000000B
0xx00000B
00H
00H
Nedeterminat
0xxx0000B

Figura 7. 3 Valorile de RESET ale microcontroller-ului AT89C2051

1.

Rutina de iniializare, INIT, va realiza urmatoarele:

2.

Umple toate locaiile memoriei interne a microcontroller-ului cu 0.


(Fill Memory with zero)
Aduce n pozitia de referin (pistonul atinge limitatorul L1) sistemul.
Programeaz urmtoarele registre de funcii 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 ateptare a comenzilor de la sistemul ierarhic
superior, comenzi ce vor fi transmise via interfaa serial.

Rutinele de serive a ntreruperilor vor fi concepute pentru a


implementa funciunile ce necesit sincronizarea funcionrii sistemului
cu elementele externe acestuia ce sunt fie comandate fie reprezint senzori
sau traductoare ale sale. Astfel, va trebui s satisfacem urmtoarele:
! Funcia de recepie a mesajelor de comand sau a cererilor de date de
stare din partea sistemului ierarhic superior. Implementarea acesteia se
refer la interfaa serial a sistemului i necesit analiza mesajului
receptionat, comanda corespunztoare a sistemului sau emiterea
ecoului la comenzile Cerere de Stare (Status Request) din partea
sistemului ierarhic superior.

165

7. Aplicaii

! Funcia de oprire la atingerea limitatoarelor a comenzii actuatorului


electrico-hidraulic.
3.

Programul principal, este gndit s atepte o comad din partea


sistemului ierarhic superior sau s atepte 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 restriciile impuse unui sistem de
comand n timp real, adic putem oferi semnalele de comand i cele de control
ca oportune, respectiv ele verific teorema eantionrii a lui Shannon.
n ceea ce nsemn implementarea, putem alege ntre dou variante:
a) Cea mai sus menionat care permite ca scrierea funciunilor de comand s fie
facut direct n cadrul ISR
b) Cea prin care rutinele de servire a ntreruperilor ISR consemneaz modificrile
de stare n cadrul sistemului n zona dedicat variabilelor de stare, iar
programul principal analizeaz ciclic starea sistemului, i funcie de aceasta
execut comenzile corespunztoare ei.
Prima variant, reflect principiile programrii structurate, fiecare ISR
asigur implementarea unei funciuni. Aceast variant permite cea mai rapid
reacie din partea sistemului, permite ierarhizarea reaciilor n raport cu cerinele
impuse de ealonarea n timp a acestora, dar necesit o raional atribuire a liniilor
de ntrerupere corespunztor evenimentelor principale din sistem i este aplicabil
n special n cadrul unor sisteme de mic amploare.
A doua variant asigur analiza strii sistemului n cadrul programului
principal, analiza fiind implementat prin intermediul unor instruciuni de decizie,
majoritatea calate pe bit, transferul informaiilor se face prin utilizarea unei zone
comune de memorie ce formeaz legtura dintre lumea extern (elementele aflate
n afara sistemului sau cele comandate: actuator, pomp, electrovalve, limitatoare,
etc) i funciunile 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 reacie este variabil neputnd
fi anticipat aprioric, cci evenimentele ce au loc n afara sistemului vor fi
consemnate sincron (adic foarte curnd dup producerea lor), dar analiza i reacia
sistemului la acestea va apare mai trziu, funcie de instruciunea curent pe care
sistemul o execut la momentul producerii evenimentului respectiv.
S analizm pe rnd care vor fi informaiile pe care va trebui s le scriem
n cadrul SFR pentru a iniializa sistemul.
PSW
CY

AC
MSB

F0

RS1

RS0

OV

F1

P
LSB

166

MICROCONTROLLERE

CY carry flag este setat atunci cnd n urma unei instruciuni aritmetico-logice
apare o operaie de transport sau mprumut
AC Auxiliary Flag utilizat tot n cadrul unor instruciuni aritmetico-logice
F0 User definible Flag poate fi scris i citit de ctre utilizator ca indicator specific
RS1 i RS0 codific natura (binar) bancul int de registre generale astfel:
00 specific bancul 0 de registre generale
01 specifica bancul 1 de registre generale
10 specifica bancul 2 de registre generale
11 specifica bancul 3 de registre generale
OV este setat auotmat la apariia unei depiri n cadrul unei operaii de transfer a
datelor
F1 User definible Flag poate fi scris i citit de ctre utilizator ca indicator specific
P Parity Flag specific paritatea byte-ului de informaie prelucrat
PCON
SMOD

GF1

GF0

PD

IDL

SMOD (Serial Mode) setat (dac este fixat pe 1 logic) multiplic cu 2 frecvena de
emisie/recepie serial a datelor
GF1 (General Flag 1), este un bit ce poate fi scris sau citit de ctre utilizator prin
program
GF0 (General Flag 0), este un bit ce poate fi scris sau citit de ctre utilizator prin
program
PD (Power Down Flag) Setarea acestui bit trece microcontroller-ul n starea de
putere redus blocnd funcionarea oscilatorului intern i aducnd n starea high
FFH ieirile porturilor sale. Informaiile stocate n memoria intern a procesorului,
abstracie fcnd cele din registrele speciale (SFR) sunt meninute, chiar cnd
tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul n curs
va fi oprit imediat dup efectuarea instruciunii curente n care a aprut setarea
acestui flag. Acest flag are preceden n raport cu flag-ul IDL (Idle) atunci cnd
cele dou flag-uri sunt setate simultan.
Ieirea 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 frecvena de ceas a sistemului este aplicat
doar elementelor periferice, controller-ul de ntreruperi, interfaa serial, timer-ele
etc. Porturile rmn n starea anterioar setrii bitului IDL, iar semnalele ALE i
PSEN# trec n 1 logic. Revenirea n stare de lucru se poate realiza pe dou ci:
Prin generarea extern a unei ntreruperi, aceasta va reseta flag-ul IDL iar la
terminarea ei, prin program, dup instruciunea RETI putem seta din nou acest
flag, sau printr-un Reset hardware, caz n care durata minim a impulsului de Reset
trebuie s depeasc 24 de ciclii de ceas.
Aceste dou stri Power Down i Idle Mode sunt stri n care consumul
microcontroller-ului este redus i pot fi exploatate atunci cnd aplicaia pe care
vrem s o realizam corespunde unui aparat portabil care trebuie s protejeze la
maximum resursele energetice.

167

7. Aplicaii

TMOD
GATE

C/T#

M1

Timer 1

M0

GATE

C/T#

M1

M0

Timer0

Registrul TMOD nu poate fi accesat dect pe byte, deci scrierea unei informaii n
acest registru poate fi fcut prin instructiuni de tipul:
MOV TCON,#nnH sau
MOV @R0,#nnH
unde R0=#TCON. Atenie, aceast instructiune poate scrie
n memoria intern extins, dac microcontroller-ul prezint o astfel de memorie
(vezi PCB80C552 i alte analoge lui).
Modurile de funcionare ale canalelor temporizatoare/numrtoare sunt n numr
de 4 i sunt codate natural prin simpla scriere a numrului binar corespunztor
canalului n biii 0 i 1 pentru Timer0 sau 4 i 5 pentru Timer1. Iat care sunt
aceste moduri:
Modul 0, permite temporizarea1 sau numrarea impulsurilor2 aplicate la intrarea
canalului respectiv dispunnd de: un divizor cu 25 =32 (prescale) i apoi divizarea
programat cu o constant de timp ce poate fi format din orice numr
reprezentabil pe 8 bii, deci cuprins ntre 0 i 255, 0 corespunde unei divizri cu
256. Numratoarele canalului temporizator numra n sens direct, adic fiecare
front negativ al unui impuls aplicat la intrare determin incrementarea
numrtorului. Limea minim a unui impuls este de 1/24 din frecvena de ceas a
sistemului. Structura canalului temporizator numrtor este dat n figura 4.
Modul 1, asigur temporizarea sau numrarea impulsurilor aplicate pe intrarea
canalului, constanta de timp fiind un numr cuprins ntre 0 i 65535 cu 0
corespunztor lui 65536.
Modul 2, permite divizarea frecvenei de intrare sau numrarea impulsurilor
aplicate cu un numr reprezentabil pe 8 biti, aceasta constant este reinuta n THx
i este rencrcat automat n TLx atunci cnd canalul numrtor efectueaz
tranziia de stare din 11111111B n 00000000B.
Modul 3, este diferit la canalul 0 n raport cu canalul 1. Pentru canalul 0 setarea
acestui mod permite mprirea celor dou numrtoare TL0 i TH0 ntre pinii de
comand ai canalelor 0 i 1. Temporizatoarele/numrtoarele canalului 0 low pot fi
comandate de ctre pinii corespunzatori canalului 0 (TL0), i
temporizatoarele/numrtoarele canalului 0 high de ctre pinii corespunztori ai
canalului 1 (TH0). Dac programm canalul 1 n modul 3 aceasta duce la blocarea
acestuia i reinerea informaiilor de la momentul respectiv. Utilizarea canalului 0

Prin temporizare se nelege msurarea unui interval de timp ca multiplu al frecvenei de


ceas a sistemului (microcontroller-ului). In acest caz impulsurile numrate de canalul
respectiv provin de la ceasul de sistem, care n cazul circuitului AT89C2051 este divizat cu
12 i aplicat pe intrarea de numrare.
2
Numrarea impulsurilor ce sunt aplicate pe o intrare accesibil din exterior (vezi pinii T0
sau T1). Aceste impulsuri pot proveni de la o surs extern de semnal.

168

MICROCONTROLLERE

n modul 3 va permite multiplicarea canalelor temporizatoare/numrtoare cu un


canal de temporizare/ numrtoare de 8 bii

Figura 7. 4 Structura canalului temporizator al microcontrolerului AT89C2051

TCON
TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Registrul TCON (Timer Control) permite modificarea setrilor bit cu bit,


semnificaia acestora o detaliem n continuare:
TFx, exprim starea canalului temporizator corespunztor. Setarea se realizeaz
hardware, automat la trecerea de la starea 1111B la starea 00..00B a
numrtoarelor canalului respectiv (overflow).
Biii TRx setai/resetai permit sau respectiv inhib soft poarta de control ce asigur
accesarea numrtoarelor de ctre semnalul de intrare al canalului respectiv.
Biii IEx se seteaz automat (hardware) atunci cnd un front descresctor apare pe
linia de ntreruperi externe corespunztoare i sunt resetai tot automat la servirea
ntreruperii. (la intrarea n ISR).
Biii ITx setai/resetai stabilesc dac intrrile corespunztoare ntreruperilor
externe de stare vor fi sensibile pe frontul descresctor al semnalului, respectiv pe
nivelul logic zero. n cazul n care biii respectivi (ITx) sunt resetai, dac semnalul
extern aplicat pe intrrile INTx este de durat mai mare dect durata ISR
corespunztoare, la sfritul ISR se va genera o nou ntrerupere corespunztoare
respectivului canal.

169

7. Aplicaii

SCON
SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0 i SM1 seteaz unul dintre cele patru moduri distincte n care interfaa UART
a microcontroller-ului poate funciona. Detalierea acestor moduri este realizat n
continuare:
Modul 0, corespunztor combinaiei 00 a biilor respectivi, permite serializarea
octeilor ce sunt transmii i receptionai semi-duplex pe linia RxD. Linia TxD este
utilizat pentru transferul semnalului de ceas serial, n acest caz 1/12 din frecvena
de ceas a microcontroller-ului.
Modul 1, corespunztor combinaiei 10 a biilor respectivi, asigur transferul fullduplex asincron al informaiilor, respectiv 1 bit de start (0), 8 bii de date i n final
un bit de stop (1). Frecvena de transmisie este variabil, ea fiind setat de ctre
canalul 1 temporizator corespunztor frecvenei de apariie a strii overflow.
Modul 2, corespunztor combinaiei 01 a biilor respectivi, asigur transferul
asincron al informaiilor cu 1 bit de start (0), 8 bii de date, un bit programabil, care
poate fi chiar bitul de paritate i un bit de stop (1). La transmisie bitul 9 este reinut
n locaia TB8, iar la recepie acesta este memorat n RB8. Rata de transfer este
programabil la 1/32 sau 1/64 din frecvena de ceas a sistemului.
Modul 3, corespunztor combinaiei 11 a biilor respectivi, asigur transferul
asincron al informaiilor ntr-un format analog celui din modul 2 cu excepia
faptului c rata de transfer este variabil i setat de ctre frecvena programat
pentru canalul 1 al circuitului temporizator intern al microcontroller-ului.
Bitul SM2 permite validarea unui mod special de comunicaie via interfaa serial
USART i anume a modului prin care pe acelai bus pot fi prezente mai multe
sisteme care pot recepta informaia. n acest caz, al 9-lea bit poate fi utilizat ca bit
de specificare a tipului de informaii ce sunt transmise. Astfel, setnd bitul SM2,
poate fi generat o ntrerupere atunci cnd i bitul al 9-lea transmis este 1 (spre
exemplu), ceea ce va determina analiza de ctre sistemul receptor a informaiilor i
rejectarea acestora atunci cnd cuvntul de adresare respectiv nu corespunde
propriei adrese.
Bitul REN permite validarea ntreruperilor la recepie atunci cnd este setat, ceea
ce face ca la recepia bitului de stop, corespunztor 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 informaii via interfaa
serial, caz n care dac ntreruperile corespunztoare acesteia au fost validate are
loc transferul programului ctre ISR corespunzatoare. Resetarea acestui bit cade n
responsabilitatea programatorului, acesta trebuind s-o efectueze n cadrul ISR.
Bitul RI semnaleaz recepia complet a unitii de informaie, via interfaa
UART. La recepia bitului de stop, flag-ul RI este automat (hardware) setat.
Programatorul are obligaia ca n ISR corespunztoare recepiei datelor s tearg
bitul RI, pentru a reanclaa mecanismul de semnalizare a recepiei datelor pe
UART.

170

MICROCONTROLLERE

IE
EA

SI

TF1

IE1

TF0

IE0

Acest registru specific sursele de ntreruperi admise de microcontroller care vor


putea genera ntreruperi. Astfel:
IE0 corespunde liniei ntreruperii externe de stare INT0
TF0 corespunde strii timer 0 overflow
IE1 corespunde liniei ntreruperii externe de stare INT1
TF1 corespunde strii timer 1 overflow
SI corespunde ntreruperilor ce provin de la unitatea UART integrat pe
microcontroller.
Registrul IE permite validarea individual a acestora, dar pentru ca o ntrerupere s
se declaneze este necesar ca bitul EA s fie obligatoriu setat. Prioritile n
servirea ntreruperilor sunt stabilite de ctre programator, fiind permise dou nivele
de prioritizare a ntreruperilor: unul superior (high) setat prin nscrierea unui 1
logic n dreptul sursei de ntrerupere respective (vezi structura pe surse de
ntreruperi a registrului IP - Interuppt Priority Register, este analog celei a
registrului IE), i restul inferior (low). Sursa de prioritate nalt va fi capabil s
ntrerup o rutin de servire ISR corespunztoare unei surse de nivel de prioritate
low, dar nu i invers.
Dac simultan apar mai multe ntreruperi avnd acelai nivel de prioritate (low),
ordinea de analiz a cererilor se face de la IE0 ctre SI.
Odat ncheiat analiza structurii SFR s specificm informaiile adecvate
aplicaiei noastre. Iat-le:
In PSW vom scrie: 00000000B.
In PCON vom scrie: 10000000B setm SMOD pentru multiplicarea cu doi a
frecvenei de emisie pe interfaa serial.
In TMOD vom scrie: 00100000B, respectiv vom programa n modul 2
temporizatorul 1 cu autorencrcarea constantei de timp, iar canalul 0 l vom
menine n modul 0.
Constanta de timp o vom calcula dup ce vom seta i parametrii interfeei UART,
respectiv vom transmite 8 bii/caracter, la 19200 bauds, cu un bit de start i unul de
stop. n consecin n SCON vom scrie:
SCON : 01010000B, adic vom alege modul 1 de funcionare i vom valida
recepia caracterelor pe interfaa serial.
n acest caz, calculul constantei de timp se va face utiliznd formula:
Baud Rate=2SMOD/32*fCLK/(12*(256-TH1)). Rezult, nlocuind n formul valoarea
de 253, respectiv FDH, respectiv 11111101B ce va trebui ncrcat n TH1 drept
constanta de timp.
n registrul IE vom scrie informaia: 10010000B corespunztoare strii iniiale a
sistemului cnd acesta va trebui doar s accepte recepia comenzilor de la sistemul
ierarhic superior.

7. Aplicaii

171

Iat rutina de iniializare a sistemului:


INIT:
MOV R0,#7FH
;ncarc n registrul R0 limita superioar a memoriei interne
LOOP0:
MOV @R0,#0H
;Scrie ndirect 0 n locaia adresat prin pointer-ul R0
DJNZ R0,LOOP0
;Efectueaz umplerea cu zero a memoriei interne a controller-ului
LOOP1:
JNB P3.2,START_POSITION
;Testare stare piston, Dac atinge limitatorul L1, sistemul este n poziia de
;referin
SETB P3.6
SETB P3.5
CLR P3.7
;Comand Electrovalva 1 i pompa, i anuleaz comanda pentru Electrovalva 2
JMP LOOP1
START_POSITION:
SETB STATUS0
MOV PSW,#00H
MOV PCON,#80H
MOV TMOD,#20H
MOV TH1,0FDH
SETB TR1
MOV SCON,#50H
MOV IE,#90H
;Setarea strii iniiale a microcontroller-ului implic validarea doar a ntreruperilor
;UART
RET
Rutina de servire a ntreruperilor corespunztoare UART va trebui s
realizeze urmtoarele:
1.
S citeasc informaia recepionat de pe linia serial.
2.
S analizeze informaia, i funcie de aceasta s reacioneze astfel:
Dac este vorba de o comand s iniieze execuia acesteia.
Dac este vorba de o cerere de stare a microcontroller-ului din partea
sistemului ierarhic superior s iniieze transferul acesteia.
Pentru a rezolva aceast funciune 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 strii de ctre rutinele de servire a ntreruperilor ce
asigur sincronizarea funcionrii unitii centrale.

172

MICROCONTROLLERE

STATUS
-

CDA

L2

L1

Bitul L1 este setat la atingerea limitatorului L1, n rest este resetat


Bitul L2 este setat la atingerea limitatorului L2, n rest este resetat
Bitul CDA este setat la iniierea unei comenzi de avans sau retragere i
resetat n rest, la sfritul micrii.
Rutina de servire a ntreruperilor din partea UART (ISR_SI) asigur
tratarea fiecrui cuvnt de comand dintre cele admise de protocolul instituit.
Locaiile STATUS asigur memorarea strii sistemului. n acest sens,
asamblorul permite rezervarea de spaiu de memorie n zona de adrese 20H la 2FH,
respectiv biii de la 00H la 7FH.
;Variabile de stare ale actuatorului electo-hidraulic.
STATUS0
BIT
20H
STATUS1
BIT
21H
STATUS2
BIT
22H
;Rutina de servire a ntreruperilor generate de UART
;Atenie UART genereaz o unic ntrerupere att la recepie ct i la transmisie
ISR_SI:
JB
RI,RECEPTIE
TRANSMISIE:

CLR TI
;terge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru
;reanclanarea ntreruperilor la transferul unui nou caracter
JB
RI,RECEPTIE ;Retestare recepie caracter de ctre UART
RETI
RECEPTIE:

MOV A,SBUF ;Citete caracterul recepionat n registrul ACC


CJNE A,#'A',ISR_SI_1
CDA_AVANS:
SETB P3.7 ;Comand Electrovalva1
CLR P3.6 ;Blocheaz Electrovalva2
SETB P3.5 ;Comand pompa de presiune
;Comand micarea de avans a actuatorului acionnd Electrovalva1 i pompa.
CLR STATUS0
;Reseteaz starea consemnat anterior, respectiv actuator retras
SETB STATUS2
;Consemneaz comanda actuatorului
SETB IE.1
;Valideaz i ntreruperile corespunztoare limitatorului 2
JMP END_ISR_SI
ISR_SI_1:
CJNE A,#'R',ISR_SI_2
SETB P3.6
;Comand Electrovalva2
CLR P3.7
;Blocheaz Electrovalva1

7. Aplicaii

173

SETB P3.5
;Comand pompa de presiune
;Comand micarea de retragere a actuatorului acionnd Electrovalva 2 i pompa.
CRL STATUS1
; Reseteaz starea consemnat anterior, respectiv actuator avansat
SETB STATUS2
;Consemneaz comand actuatorului
SETB IE.0
;Valideaz i ntreruperile corespunztoare limitatorului 1
JMP END_ISR_SI
;Testare cereri de stare din partea sistemului ierarhic superior
;Ecoul la acestea const ntr-un caracter ce definete starea curent a sistemului
ISR_SI_2:
CJNE A,#'S',ISR_SI_3
JB
STATUS2,ISR_SI_4
MOV SBUF,#'D'
;Transmite ecoul corespunztor strii reaDy - pregtit
JMP END_ISR_SI
ISR_SI_3:
CJNE A,#'P',END_ISR_SI
;n cazul n care codul nu corespunde protocolului stabillit, - cuvntul recepionat
;nu este unul dintre cuvintele cheie- el va fi ignorat
JB
STATUS0,LIM1
JB
STATUS1,LIM2
MOV SBUF,#'M'
;Transmite ecoul actuator n micare (poziie intermediar)
JMP END_ISR_SI
LIM1:
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 recepie 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.
Corespunztor fiecrei linii de ntreruperi externe vom scrie cte o rutin
(ISR_EXT0 i respectiv ISR_EXT1)
ISR_EXT0:
CLR IE.0
;Sterge flag-ul de validare a ntreruperilor corespunztor sursei

174

MICROCONTROLLERE

CLR P3.6
;terge comada corespunztoare lui Ev2
CLR P3.5
;terge comanda corespunztoare pompei
CLR STATUS2
;terge bitul ce consemneaz micarea actuatorului
SETB STATUS0
;eteaz bitul ce specific starea "actuator retras"
RETI
ISR_EXT1:
CLR IE.2
;terge flag-ul de validare a ntreruperilor corespunztor sursei
CLR P3.7
;terge comada corespunztoare lui Ev1
CLR P3.5
;terge comand corespunztoare pompei
CLR STATUS2
;terge bitul ce consemneaz micarea actuatorului
SETB STATUS1
;Seteaz bitul ce specific starea "actuator avansat"
RETI
Programul principal al sistemului va include doar o rutin de ateptare a
unui eveniment. Iat-l:
ORG 0H
JMP MAIN
JMP ISR_EXT0 ;Saltul la rutina de ntreruperi corespunztoare lui L1
ORG 13H
JMP ISR_EXT1 ;Saltul la rutina de ntreruperi corespunztoare lui L2
ORG 23H
JMP ISR_SI
;Saltul la rutina de ntreruperi corespunztoare UART
ORG 100H
$INCLUDE
INIT
$INCLUDE
SERIAL
$INCLUDE
EXT1&2
;Dispoziii 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 $
;Instruciunea asigur saltul permanent la ea nsi
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 instruciunea de salt la
programul principal, instruciunile de salt ctre rutinele de servire a ntreruperilor i
rutinele de servire a ntreruperilor i programul principal n ordinea specificat prin
dispoziiile INCLUDE. Odat nscris n memoria flash a procesorului, sistemul este
gata s satisfac funciunile specificate n raport cu protocolul stabilit.

175

7. Aplicaii

7.1.2 Varianta de implementare cu microcontroller RISC.


Implementarea aceleiai aplicaii utiliznd procesorul PIC16F84 presupune
urmtoarele:
1. Implementarea interfeei cu aplicaia, respectiv comanda celor dou
electrovalve i a pompei de presiune
2. Implementarea controlului cursei pistonului, adic achiziia semnalelor
digitale de la cele dou limitatoare
3. Implementarea interfeei seriale ce asigur conexiunea ctre nivelul
ierarhic superior, pentru aplicaia noastr.
Vom analiza pe scurt care sunt principalele elemente caracteristice ale
procesorului ales. Structura acestuia este prezentat n figura 7.5.

Figura 7. 5 Structura microcontroler-ului PIC16F86

Dispune de 13 linii utilizabile ca linii de intrare/ieire cu capabilitate


ridicat n curent (pn la 20 mA, fiecare). Arhitectura procesorului este Harvard,
cu limea magistralei de date de 8 bii i a celei corespunztoare memoriei de
program de 14 bii. Dispune de 1Ko memorie de program (flash sau EPROM), de

176

2x128 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/numrtor ce poate
ndeplini funcia de Watch Dog de 8
bii cu un prescaler de 5 bii.
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

MICROCONTROLLERE

IND ADR
TMR0
PCL
STATUS
FSR
PORT A
PORT B

IND ADR
OPTION
PLC
STATUS
FSR
TRIS A
TRIS B

EEDATA
EEADR
PCLATCH
INTCON
68 x 8 GPR

EECON1
EECON2
PCLATCH
INTCON
Mapped

Figura 7. 6 Registrele microcontroler-ului


PIC16F84

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 instruciuni PUSH sau
POP i astfel doar prin instruciuni
de tipul CALL, GOTO, RETURN,
RETFIE i RETLW putem
introduce,
respectiv
extrage
informaii la nivelul stivei. O
observaie important de care va
trebui s inem cont, este aceea c
nu este prevzut nici un indicator
de depire a dimensiunii stivei,
ceea ce poate duce la grave erori
atunci cnd numrul de apeluri
sau de instruciuni GOTO este
Figura 7. 7 Structura cuvntului instruciune
mai mare de 8.
Instruciunile procesorului
au o lime de 14 bii i ele
includ att codul respectiv ct i operanzii afereni acestuia, respectiv adresa

7. Aplicaii

177

registrului din zona file Register i/sau indexul bitului corespunztor locaiei
respective.
Instruciunile de salt, cum ar fi, CALL i GOTO sunt singurele care
dureaz mai mult de un ciclu instruciune i care necesit modificarea coninutului
PC-ului.
Setul de instruciuni al procesorului este ortogonal, ceea ce presupune c
modalitatea de acces la orice locaie de memorie este identic att la scriere ct i
la citire, att pentru zona GPR ct i pentru zona SFR.
n cazul operaiilor calate pe bit, instruciunile 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 operaiilor de transfer intermediar care sunt specifice procesoarelor
CISC.
Este de menionat c Work Register (W Register), funcioneaz ca
acumulator i particip la majoritatea instruciunilor 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 destinaie a informaiilor.
Iat cteva instruciuni pe care n cadrul programului le vom utiliza.
Prezentarea lor o facem pentru c ele prezint trsturi specifice n raport cu cele
de la microcontroller-ul Atmel.
Aceste instruciuni le vom putea clasifica aa n :
Instruciuni de transfer, aritmetico-logice i de redirectare a
programului, cum ar fi:
Pot conine drept parametri pn la trei valori i anume:
Prin k (8 bii) specificm o valoare imediat ce este inclus n corpul
instruciunii
Prin f (8 bii) specificm adresa din zona de memorie File Register la
care face referire instruciunea.
Prin b specificm bitul la care face referire instruciunea (valoare pe 3
bii)
Falg-ul d specific registrul destinaie n care se stocheaz rezultatul
operaiei sau al transferului, dac acesta este 0, atunci rezultatul este
reinut n regsitrul W, altfel el este reinut 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 instruciunii) n
registrul W.
SWAPF f,d
Comutare semi-bytes n cadrul registrului f cu reinerea
rezultatului n W sau f funcie de d.
ANDWF f,d SI-LOGIC, ntre informaiile din W i f, bitul d are acelai rol,

178

MICROCONTROLLERE

ANDLW k
SI-LOGIC ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este reinut n W.
ADDWF f,d Adunarea informaiilor din W i f, bitul d specific destinaia
rezultatului.
ADDLW k
Adunarea ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este stocat n registrul W.
SUBWF f,d
Scderea informaiile din W i f cu acelai 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 informaiile din W i f, bitul d are acelai rol,
IORLW k
SAU-LOGIC ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este reinut n W.
XORWF f,d SAU-EXCLULSIV, ntre informaiile din W i f, bitul d are
acelai rol,
XORLW k
SAU-EXCLUSIV, ntre valoarea specificat k i valoarea stocat
n W. Rezultatul este reinut n W.
CALL k
Apel rutin k (11/13 bii specificai prin instruciune)
GOTO k
Salt la adresa k (11/13 bii specificai prin instruciune)
RETURN
Revenire din subrutin
RETFIE
Revenire din subrutina de tratare a ntreruperilor
RETLW k
Revenire din subrutin cu ncrcarea unei valori literale n W.
Instruciunilede setare/resetare bytes sau bii, cele de rotire pot fi ncadrate
n categoria curent, unele dintre acestea le vom detalia, avnd n vedere
particularitile pe care ele le prezint. Spre exemplu, instruciunea :
RRF f,d
nu face altceva dect s deplaseze ctre dreapta cu o poziie
informaia din registrul f, rezultatul fiind reinut 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, funcioneaz i instruciunea RLF f,d , caz n care bitul C (de
transport) va fi copiat n bitul 0 al registrului f i bitul 7 al aceluiai registru fi
memorat n C.
BTFSS
logic
BTFSC
logic

Instruciuni de decizie:
Test bit i salt peste instruciunea urmtoare dac acesta este 1
Test bit i salt peste instruciunea urmtoare dac acesta este 0

Instruciuni ce permit execuia repetitiv a unui ir de operaii:


DECFSZ f,d Decrementeaz registrul f i sare instruciunea urmtoare dac este
zero rezultatul. Valoarea rezultat este reinut funcie de flag-ul d n W d=0 sau f
d=1.

179

7. Aplicaii

INCFSZ f,d Incrementeaz registrul f i sare instruciunea urmtoare dac este


zero rezultatul. Valoarea rezultatului este reinut funcie de flag-ul d n W d=0 sau
f d=1.
Restul instruciunilor de resetare sau setare pe bit i byte, cele de
incrementare i decrementare, cele de complementare i instruciunea NOP sunt
furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip).
Vom utiliza instruciunile de deplasare la dreapta prin bitul de carry pentru
emularea UART.
Registrele generale ale microcontroller-ului asigur pe de-o parte
implementarea funciunilor de control pentru program, iar pe de alt parte permit
memorarea datelor i transferul comenzilor ctre mediul extern. Iat structura celor
mai importante dintre acestea.
STATUS
IRP

RP1

RP0

T0#

PD#

DC

IRP este bitul care selecteaz bancul de registre ( la adresarea indirect) valoarea 0
corespunde intervalului de adrese 00H la FFH, iar valoarea 1 corespunde
intervalului 100H la 1FFH.
RP1,RP0 corespunde seleciei bancului de registre (la adresarea direct) selecie
astfel:
00 corespunde intervalului de adrese 00H la 7FH
01 corespunde intervalului de adrese 80H la FFH
10 corespunde intervalului de adrese 100H la 17FH
11 corespunde intervalului de adrese 180H la 1FFH
T0# (time out bit), exprim depirea capacitii de numrare a canalului 0,
respectiv tranziia de stare de la FFH spre 00H.
PD# (Power Down), odat setat exprim trezirea sistemului, la pornirea acestuia
sau dup execuia instruciunii CLRWDT. n rest bitul de mai sus este resetat.
Z (Zero flag), este setat la ntlnirea coincidenei a dou valori numerice sau cnd
rezultatul operaiei aritmetico-logice este zero. n rest, acesta este resetat.
DC (Digital Carry), exprim transportul sau mprumutul la nivel de semibyte.
Setat la apariia transportului, resetat la apariia unui mprumut.
C (Carry), este setat la apariia unui transport la nivel de byte, i resetat n rest.
OPTION
RBPU#

INTEDG

TOCS

TOSE

PSA

PS2

PS1

PS0

RBPU#, (Pull up bits port B),setat exprim invalidarea funciunii pull-up pentru
liniile portului B, iar resetat, asigur funcia pull-up pentru aceste linii.
INTEDG (Interrupt Edge Select) setat permite generarea ntreruperilor pe frontul
cresctor, iar resetat realizeaz generarea ntreruperii pe frontul descresctor.
TOCS (TMR0 Source Clock), selecteaz sursa impulsurilor ce sunt numrate de
ctre canalul 0 numrrtor/temporizator, setat permite numrarea impulsurilor
externe, aplicate la pinul RA4, resetat selecteaz frecvena intern de ceas divizat
cu 4.

180

MICROCONTROLLERE

TOSE (TMR0 Source Edge Select), setat realizeaz incrementarea numrtorului


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, PS1, PS0 (Bii de selecie a constantei de divizare a prescaler-ului), dup cum
urmeaz:
000H reprezint 1/2 ptr. TMR0 i 1/1 pentru WDT
001H reprezint 1/4 ptr. TMR0 i 1/2 pentru WDT
010H reprezint 1/8 ptr. TMR0 i 1/4 pentru WDT
011H reprezint 1/16ptr. TMR0 i 1/8 pentru WDT
100H reprezint 1/32 ptr. TMR0 i 1/16 pentru WDT
101H reprezint 1/64 ptr. TMR0 i 1/32 pentru WDT
110H reprezint 1/128 ptr. TMR0 i 1/64 pentru WDT
111H reprezint 1/256 ptr. TMR0 i 1/128 pentru WDT
Structura canalului temporizator/numrtor este ilustrat n figura 7.8.
ntreruperile n cazul microcontroller-ului PIC16F84 au un singur
vector, i anume cel plasat la adresa 004H din memoria de program, iar cum
sursele de ntreruperi sunt n numr de patru este necesar s implementm n cadrul
rutinei de servire programul de identificare i apoi de tratare a acestora. Registrul

Figura 7. 8 Structura canalului temporizator la circuitul PIC16F84

INTCON, este cel ce d posibilitatea utilizatorului s valideze sau invalideze att


declaarea 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 operaiile de
scriere sau citire a EEPROM-ului intern, resetat ignor acestecereri de ntrerupere
TOIE (TMR0 Overflow Enable), setat valideaz ntreruperile corespunztoare
depirii la canalul temporizator/numrtor, resetat acestea sunt ignorate

7. Aplicaii

181

INTE (External Interrupt Enable), valideaz ntreruperile datorate variaiei


semnalului aplicat pe intrarea RB0 atunci cnd este setat, respectiv resetat le ignor
RBIE (B Register Interrupt Enable), setat valideaz ntreruperile datorate
schimbrii strii uneia dintre intrrile portului RB7, RB6, RB5 sau RB4 al
microcontroller-ului, respectiv, resetat ignor schimbrile de stare la nivelul
portului RB
TOIF (Timer Overflow Interrupt Flag), este setat hard la apariia strii depire
a capacitii numrtorului corespunztor canalului 0, resetat n rest.
INTF (Interrupt Flag) setat hard la apariia 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.

PIC 16F84

Ca observaie general trebuie reinut c biii de stare prezeni n structura


registrului INTCON sunt setai 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 urmtoarea condiie de declaare a
ntreruperilor.
Registrele EEDATA (EEPROM Data Register), reine data de nscris sau
de ters din/n EEPROM, EEADR (EEPROM address), reine adresa de memorie
la care, sau de la care se face: scrierea, respectiv citirea datelor i registrele
EECON1 i EECON2 permit efectuarea memorrii 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 funciunilor
actuatorului electro-hidraulic.
Observm un fapt mai puin mbucurtor: circuitul nu dispune de o
interfa serial implementat hard, deci
va trebui s o emulm soft.
L2
PB5
n
ceea
ce
nseamn
L1
PB4
implementarea controlului, observm c
portul B este deosebit de util el detectnd
Ev2
PB3
automat variaia nivelului logic pe liniile
RB4
la RB7. n figura 7.9 dm schema
PB2
Ev1
electric de conectare propus, schem n
care am ignorat eventualele circuite
PA0
p
amplificatoare
n
comutaie
sau
formatoare de implus.
Pentru liniile RxD i respectiv
PB1
TxD
TxD, vom folosi liniile portului B i
anume RB6 (atenie vom utiliza i
PB0
RxD
facilitatea de generare a ntreruperilor la
schimbarea nivelului logic pe aceast
Figura 7. 9 Schema de conectare
intrare, n acest sens vom folosi
posibilitatea pe care aceast linie o ofer,

182

MICROCONTROLLERE

de generare a ntreruperii la sesizarea bitului de START n cazul transmisiei


seriale), respectiv RB1 pentru transmisie.
Principalele idei n baza crora vom emula interfaa serial sunt
urmtoarele:

programm timer0 astfel nct acesta s genereze cte o ntrerupere cu


frecvena ct mai apropiat de frecvena de transfer serial a
informaiilor.
transferm cu ocazia servirii ntreruperii corespunztoare, cte un bit i
rotim informaia respectiv pentru a simula felul n care decurge
transferul serial pe un UART implementat hard.
vom stabili rata de transfer serial, programnd corespunztor timer-ul
0 pentru aceasta. Iat cum se realizeaz acest lucru:

Formula de calcul -aproximativ3- pentru stabilirea frecvenei de transfer,


dac presupunem utilizarea unui microcontroller ce funcioneaz la fClk=10MHz va
fi:

BR =

f Clk
1
,

4 PS (256 CT )

unde BR este rata de tranmisie serial (o vom stabili la 19200 Bauds), fClk este
frecvena de ceas a sistemului, PS este factorul de divizare al prescaler-ului, iar CT
este constanta de timp ncrcat de ctre programator. Formula nu ine cont de
erorile datorate momentului de timp la care are loc rencrcarea constantei de timp
i de timpul necesar microcontroller-ului pentru a intra n ISR.
n cazul nostru, vom obine: 130 valoarea produsului PS*(256-CT).
Considernd pentru PS valoarea 1, deci nu utilizm prescaler-ul, vom
nscrie n registrul corespunztor timer-ului 0, valoarea 7EH.
Atenie, este de observat c timer-ul numr n sens direct, deci valoarea
corespunztoare este dat de diferena ntre valoarea la care se realizeaz
consemnarea depirii capacitii canalului i valoarea dorit.
Eroarea datorat rotunjirii valorii corespunztoare ratei de transfer va fi de
0,16%.4
Pentru a implementa aceast funcie, vom folosi cteva locaii de memorie
i anume:
CHR_TRS:
locaie ce memoreaz octetul de transmis
CHR_REC:
locaie ce reine octetul recepionat
RI
bit ce specific recepia complet a caracterului pe linia serial
3

Formula este aproximativ cci ea nu ine cont de timpii necesari execuiei instruciunilor
din cadrul rutinei de servire a ntreruperilor, timpi care de altfel pot fi diferii, funcie de
starea n care este gasit procesorul la anclaarea ntreruperii

Formula de calcul a erorii va fi:


p

este valoarea teoretic.

Err =

r p
unde
p

este valoarea programat, iar

183

7. Aplicaii

TI
R
T

bit ce exprim transmisia complet a caracterului pe linia serial


bit ce exprim transferul n curs la recepie (este utilizat de ISR).
bit ce exprim transferul n curs la transmisie(este utilizat de ISR).
Transferul se va efectua semi-duplex, cu 8 bii/caracter, un bit de start i
unul de stop. Structura byte-ului de stare este cea de mai jos:
SI_STARE
T

TI

RI

END

C2

C1

C0

Unde:
END are semnificaia de sfrit transmisie sau recepie byte
C2,C1,C0 sunt biii utilizai pentru contorul de bii, transmii sau
recepionai
Astfel, la transmisie vom face urmtoarele:

Transferm la locaia CHR_TRS octetul de transmis i setm flag-ul


INT_TRS.
Resetm linia TxD (respectiv bitul corespunztor ei, adic RB1)
semnaliznd bitul de start (Break pentru transmisie).
Setm bitul T, ce exprim ocuparea CPU (Central Processing Unit) cu
transferul serial.
Iniiem ceasul de transmisie, adic programm TMR0 n scopul
generrii ntreruperilor
Vom nscrie bitul corespunztor la fiecare ntrerupere pn la
transferul complet al celor 8 bii.
Setm linia RB1, cel puin pentru o perioad de ceas, (bitul de stop),
setm bitul TI ce exprim ncheierea transmisiei caracterului (buffer
de transmisie gol) pentru programul principal i resetm bitul T elibernd astfel UC de task-ul de serializare a informaiilor.

La recepie este necesar s parcurgem urmtoarele etape:

La apariia schimbrii de stare pe bitul RB0, setm bitul ce


consemneaz ocuparea interfeei seriale, respectiv bitul R.(recepie n
curs).
Pe fiecare ntrerupere de timp vom citi (eantiona) linia serial la
recepie RB0 i vom scrie n Carry Flag bitul citit i vom deplasa la
dreapta prin carry byte-l CHR_REC ce va conine ceea ce receptm.
Dup 8 cicli de temporizare, vom seta bitul RI, ce specific pentru
programul principal, recepia complet a caracterului (caracter
recepionat disponibil), resetnd n acelai timp bitul CHR_REC. Va
fi necesar s invalidm ntreruperile corespunztoare 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

184

MICROCONTROLLERE

s implementeze absolut toate funciunile ce impun sincronizarea CPU cu mediul


extern. De aceea, programul principal va iniializa sistemul i nu va face dect s
atepte ntreruperile i s dea comenzile corespunztoare informaiilor recepionate
din mediul extern dup prealabila memorare i analiz a acestora (informaiile
provin de la interfaa serial sau sunt culese din proces).
Byte-ul de stare a sistemului va avea aceeai structur ca i n cazul
implementrii anterioare. n plus, avnd n vedere variabilele care controleaz
starea interfeei seriale UART, am mai introdus locaia INT_TRS ce reine cererea
de transfer a unui caracter.
Iat n continuare programul ce implementeaz aplicaia:
list
p=16f84
#include p16f84.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_WORK1 ;TEMP_WORK1 <- W
BTFSC INTCON,INTF
;Testare apariie bit de start pe RxD
GOTO PRIM_CHR
;Directare spre rutina ce iniiaz recepia serial a caracterelor
BTFSC INTCON,RBIF
;Testare modificare stare L1 sau L2
GOTO LIMITATORI
;Directare spre rutina de tratare corespunztoare atingerii limitatorilor de curs
BTFSC INTCON,T0IF ;Testare depire contor TMR0
GOTO REC_TRS
;Directare spre rutina corespunztoare depirii contorului de timp corespunztor
MOVF INTCON,W
; W <- INTCON
ANDLW
0xF8
;Resetez contorul de bii
MOVF INTCON,F
; INTCON <- W
END_ISR
;Refac starea microcontroller-ului
MOVF TEMP_WORK1,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 sfritul recepiei complete a caracterului curent, odat cu setarea flag-ului RI)
MOVLW
3/2*CT

7. Aplicaii

185

;Incarc n W: 3/2 din constanta de timp corespunztoare perioadei de transmisie


;serial a datelor (vezi diagrama de timp)
;De ce? Cci eantionarea 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 recepie" respectiv flag-ul R
MOVF SI_STARE,W
;ncarc n W vectorul de stare: W <- SI_STARE
ANDLW
0xF8
;Resetez biii 0,1 si 2, respectiv contorul de bii la recepie
MOVF SI_STARE,F ; SI_STARE <- W
;Se poate introduce n acest punct testul de "overrun" la recepie
BCF INTCON,INTF
;Resetez flag-ul INTE corespunztor liniei RxD
GOTO END_ISR
LIMITATORI
BCF INTCON,RBIF
;Resetez flag-ul indicator al ntreruperii datorate variaiei strii liniilor RB4-RB7
BTFSS PORTB,4
;Testare atingere limitator L1?
;Da! A fost atins!
GOTO L1_ATINS
;Nu!
BTFSS PORTB,5
;Testare atingere limitator L2?
;Da! A fost atins!
GOTO L2_ATINS
;Ignorare ntrerupere la schimbarea de stare, respectiv ignorare fronturi pozitive
;ale semnalelor de la limitatoarele 1 i 2
GOTO END_ISR
L1_ATINS
BCF PORTB,3
;Oprete comanda Ev2
BCF PORTA,0
;Oprete comanda pompa de fluid. Actualizare stare sistem n vectorul STARE
BSF STARE,0
;Atins limitator L1 poziie retras
BCF STARE,2
;Oprit micare actuator
GOTO END_ISR
L2_ATINS
BCF PORTB,2
;Oprete comanda Ev1
BCF PORTA,0
;Oprete comanda pompa de fluid Actualizare stare sistem n vectorul STARE
BSF STARE,1
;Atins limitator L2 poziie avansat
BCF STARE,2
;Oprit micarea actuatorului
GOTO END_ISR
REC_TRS

186

MICROCONTROLLERE

BTFSC SI_STARE,6
;Test ntrerupere de la TMR0 la recepia caracterelor?
;Da! Intrerupere la recepia 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
;Eantionare 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 locaia (file register REC_CHR) Bitul de Carry
; va ajunge n poziia bitului 7 din REC_CHR i dup 8 bii receptai pe poziia 0
INCF SI_STARE,F
;Incrementez contorul din SI_STARE i l salvez n el nsui
BTFSS SI_STARE,3
;Testez atingerea recepiei 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 recepie caracter"
BSF SI_STARE,4
;Setez flag-ul RI, "Caracter recepionat disponibil"
BCF INTCON,T0IF
;Resetez flag-ul ce semnalizeaz "overflow" canal temporizator
BCF INTCON,T0IE
;Invalidez ntreruperile corespunztoare canalului temporizator
BCF SI_STARE,3
;Resetez contor numrtor bii recepionai
GOTO END_ISR

7. Aplicaii

END_REC_BIT
MOVWF
CT
;ncarc constanta de temporizare n W
MOVF TMR0,F
;O transfer ctre TMR0
BCF INTCON,T0IE
;Resetez flag-ul corespunztor ntreruperilor de la TMR0 Reanclanare TMR0
GOTO END_ISR
TRANSMISIE
BTFSC SI_STARE,3
;Test corespunztor ncheierii transferului datelor ce formeaz caracterul (8 bii)
GOTO TEST_END_TRS
CONT_TRS
BTFSC CHR_TRS,0
GOTO SET_BIT_TRS
BCF PORTB,1
;Scriu 0 logic pe linia TxD
GOTO TRS_BITI
SET_BIT_TRS
BSF PORTB,1
;Scriu 1 logic pe linia TxD
TRS_BITI
RRF CHR_TRS,F
;Rotesc biii caracterului de transmis n bufferul de transmisie
MOVLW
CT
MOVF TMR0,F
;Rencarc constanta de timp corespunztoare frecvenei 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 bii la transmisie
GOTO END_ISR
TEST_END_TRS
BTFSC SI_STARE,0
;Testez dac este de transmis bitul de STOP
GOTO END_TRS
TRS_STOP_BIT
BSF PORTB,1
;Scriu 1 logic pe linia serial, corespunztor bitului de STOP
GOTO TRS_BITI
END_TRS
BCF INTCON,T0IE
;Invalidez ntreruperilor corespunztoare TMR0
BCF INTCON,T0IF
;terg flag-ul indicator de ntrerupere

187

188

MICROCONTROLLERE

MOVLW
0x76
;Maschez bitul T, i biii contorului de bii ai UART
ANDWF
SI_STARE,F
;Realizez resetarea biilor 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
0x01
MOVF PORTA,F
BSF STATUS,RP1 ;Select bank 1
MOVLW
0x31
MOVWF
TRISB
MOVLW
0x00
MOVWF
TRISA
BCF STATUS,RP0 ;Iniializeaz porturile A i B
RETURN
;********************************************************
MAIN
CALL INIT
LOOP
BTFSC SI_STARE,4
;Testare dac a fost recepionat un caracter pe UART
CALL EXEC_CDA
;Execuie comanda venit pe UART de la PC
CONTINUE0
BTFSC INT_TRS,0
;Testare dac este de transmis un caracter via UART
CALL INIT_TRS
CONTINUE1
GOTO LOOP
EXEC_CDA
MOVLW
0x41 ;ncarc comanda 'A' - avans

7. Aplicaii

189

XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'A'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO AVANS
;Execut avans
MOVLW
0x52 ;ncarc comanda 'R' - retragere
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul receptionat i 'r'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO RETRAGERE
MOVLW
0x53
;Incarc comanda 'S' - stare
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'S'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO REQ_STARE
MOVLW
0x50 ;ncarc comanda 'P' - poziie
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'P'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO POZITIE
END_EXEC_CDA
BCF SI_STARE,4
;Resetez flag corespunztor caracterului recepionat.Acesta a fost citit i interpretat
RETURN
AVANS
BSF PORTB,2
;Comand Ev1
BSF PORTA,0
;Comand pompa
BCF STARE,0
;Resetez stare sistem L1 atins
BSF STARE,2
;Setez starea "actuator n micare"
GOTO END_EXEC_CDA
RETRAGERE
BSF PORTB,3
;Comand Ev1
BSF PORTA,0
;Comanda pompa
BCF STARE,1
;Resetez staresistem L1 atins
BSF STARE,2
;Setez starea "actuator in micare"
GOTO END_EXEC_CDA
REQ_STARE
BTFSS STARE,2
;Testez atingere limitator L1
;Da! Consemneaz stare i iniiaz emisie ecou
GOTO READY
BUSY
MOVLW
0x42 ; W <-'B' Busy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA

190

MICROCONTROLLERE

READY
MOVLW
0x44 ; W <-'D' reaDy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
POZITIE
BTFSC STARE,0
GOTO LIM1
BTFSC STARE,1
GOTO LIM2
BTFSC STARE,2
GOTO MOVE
GOTO END_EXEC_CDA
LIM1
MOVLW
0x49 ; W <-'I' retras (L1 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
LIM2
MOVLW
0x45 ; W <-'E' avansat (L2 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
MOVE
MOVLW
0x4C ;W <-'M' in micare
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
INIT_TRS
BTFSS SI_STARE,5 ;Testez dac TI este activ,
;n acest caz nu am voie s iniiez o nou transmisie, voi atepta!
GOTO END_INIT_TRS
BCF PORTB,1
;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 corespunztoare canalului TMR0
END_INIT_TRS
RETURN
STARE
DB
0x00 ;Vectorul de stare al actuatorului
;Bit 0 L1 atins
;Bit 1 L2 atins
;Bit 2 n micare

191

7. Aplicaii

SI_STARE
DB
0x00 ;Vectorul stare corespunztor UART
CHR_REC
DB
0x00 ;Locaie ce reine caracterul recepionat
CHR_TRS
DB
0x00 ;Locaie ce reine caracterul de transmis
TEMP_WORK
DB
0x00 ;Locaie ce memoreaz W pe durata ISR
TEMP_WORK1
DB
0x00
;Locaie ce memoreaz STATUS register pe durata ISR
INT_TRS
DB
0x00
;Locaia 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
ngroate. Pentru a avea imaginea modului n care assembler-ul plaseaz codul
nostru, dm pe CD i partea referitoare la locatare din listing-ul rezultat n urma
asamblrii. Aceast list este dat cu titlu informativ pentru a putea sesiza
modalitatea n care sunt asignate automat locaiile de memorie, variabilelor.
n final vom face o scurt analiz comparativ a soluiilor avute n vedere
la implementarea aplicaiei.
Criteriul

Atmel AT89C2051

PIC16F84

Von Neumann
CISC5
4 bancuri a cte 8 registre
fiecare

Harvard
RISC9
2 Bancuri File Registres a cte
68 de bytes fiecare

Memoria intern

128 bytes

Este organizat sub forma "File


Registrers"

Numr intrri/ieiri:
Linii de comand i control
Canale temporizatoare

15 I/O

13 I/O

2 (4 moduri de programare)
1 canal (8 bii) 256 valori
1 canal sincron/asincron
Vectorizat6
Dispune
de
2
intrri
analogice7
2,7 la 5 V
Flash Reprogramabil

1 (2 moduri de programare)

Procesorul:
Arhitectura
Setul de instruciuni
Registre de uz general

WatchDog
UART
Sistemul de ntreruperi
Alte faciliti speciale
Tensiune alimentare
Programarea controller-ului
Memoria de program
Faciliti energetice

2 Kbytes (CISC)
Low Power i IDLE mode8

1 canal (8 bii) 16 valori


NU
Cu unic adres de servire
NU
2 la 6 V
Programare flash tip
ICSP 10
1024 x 14 bii (RISC)
PowerDown11 i IDLE mode

Complex Set Instruction Computer, deci microcontroller cu un set vast de instruciuni


Prin sistem de ntreruperi vectorizat nelegem capacitatea dispozitivului respectiv de a
realiza automat, la servirea unei ntreruperi saltul la o adres specific sursei de ntreruperi

192
Faciliti software:
Assembler
Compilaror C
Link-editor
Translator INTEL-HEX code
Emulator
Mediu integrat
Aspecte economice:
Pre/bucat
Optenabilitate:
Seria produsului:
Grad
de
pregatire
proiectant:calat
pentru
microcontroller-ul respectiv
Suport de dezvoltare12:
Strategia firmei:
Timpul preconizat pentru
dezvoltarea aplicaiei

MICROCONTROLLERE

A51, SAM51, etc. Extrem de


multe variante de asambloare,
Compilatoare C51 i altele
L51
DA
DA
NU

MASM
macro-asamblor,
integrabil n mediul MPLAB
DA
MPLINK
DA
DA
DA (MPLAB)

7,24
DM
(Hoepping
Elektronik)
DA
Nu avem date precise

8,03 DM (ASA Micros)

Nu avem date precise


DA
NU

Nu avem date precise


DA
NU

NU

NU

DA
Nu avem date precise

Ce concluzii putem trage n urma analizei acestui tablou cu caracteristici


ale celor dou procesoare i nu numai?
Putem stabili factori de pondere corespunztori fiecrui parametru (aceti
factori trebuie precizai de ctre fiecare proiectant n parte) i putem calcula
coeficientul de eficien al implementrii produsului.
Un aspect deseori esenial l constituie pregtirea proiectanilor, experiena
lor anterioar i timpul n care se preconizeaz dezvoltarea aplicaiei. Rubricile la
care nu se poate rspunde de la nceput (vezi cele ce conin NU) pot influena
substanial eficiena deciziei, cci, spre exemplu, pregtirea unui specialist n
domeniu presupune timp i bani suplimentari pe care nu ntotdeauna i avem. (vezi
rubrica strategia firmei).

Intrrile pot fi conectate intern ca intrri inversoare/neinversoare ale unui comparator


analogic, ieirea acestuia fiind accesibil soft, ca bitul 6 al portului 3 al microcontroller-ului
8
Mod de funcionare n care procesorul consum puin cci reduce tensiunea de alimentare
pe liniile porturilor i oprete execuia instruciunilor. Accept ntreruperile ca modalitate
de ieire din stare dat
9
Reduced Set Instruction Computer, deci microcontroller cu set redus de instruciuni
10
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 fr ajutorul unui programator specializat
11
Mod de funcionare n care procesorul nu execut instruciuni i se izoleaz electric n
raportul cu procesul controlat. Ieirea din starea dat se face doar printr-un RESET hard.
12
Exprim existena att a sistemelor de dezvoltare, a resurselor de programare: asamblor,
link-editor, translator, emulator, simulator ct i a programelor de proiectare asistat a
implementrii.

193

7. Aplicaii

Alte informaii privind microcontroller-ele familiei PIC de la Microchip


gsii la urmtoarele 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 I8051 la adresele:
www.8052.com
www.intel.com
www.atmel.com
www.philips.com
www.hitachi.com

7.2

IMPLEMENTAREA INTERFEELOR LA
PROCES

n acest paragraf vom aborda cteva aplicaii care presupun folosirea


convertoarelor analog-digitale i a celor digital-analoge n aplicaii de comand i
control.
n acest sens vom exemplifica interfaarea sistemelor cu urmtoarele tipuri
de convertoare:
1.
2.
3.
4.
5.

Convertoarele analog digitale controlabile serial


Convertoarele analog digitale controlabile paralel
Convertoarele analog digitale complexe
Convertoarele digital analoge controlabile serial
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.

194

MICROCONTROLLERE

7.1.1 Convertoare A/D controlabile serial


Pentru primul exemplu, am ales un convertor reprezentativ pentru
domeniul achiziiei de semnale din cadrul instalaiilor industriale, i anume:
ADS7822, convertor cu regsitru de aproximaii succesive a crui schem o dm n
figura 7.10.

Figura 7. 10 Schema bloc a circuitului ADS7822 convertor analog - digital cu registru


de aproximaii succesive

Convertorul prezint un amplificator de instrumentaie pe intrare la care


ambele intrri sunt accesibile din exterior. Registrul cu aproximaii succesive SAR
(Succesive Aproximation Register), controlat de ctre semnalele de interfaare
CS#/SHDN declaneaz i apoi controleaz procesul de conversie, aplicnd
succesiv combinaiile ce implementeaz metoda divizrii intervalului n aflarea
valorii digitale corespunztoare semnalului de pe intrare. Domeniul de msurare
este setat de ctre valoarea tensiunii sursei de referin externe ce aplic tensiunea
stabilizat pe intrarea VREF. Comparatorul ntoarce la fiecare tact al convertorului
rezultatul comparaiei i astfel mpreun cu logica de control realizeaz trecerea la
testarea urmtorului bit. Convertorul va realiza n 12 ciclii testarea fiecrui bit de
informaie sincron cu semnalul de ceas DCLOCK, ncepnd cu al 1,5-lea impuls de
ceas (perioad de eantionare, caracteristic acestui convertor) dup care
informaia va fi disponibil bit de bit ncepnd cu bitul cel mai semnificativ pe
ieirea DOUT a circuitului. Limea implusurilor (durata acestora), nu trebuie s
fie mai mic de 400ns, circuitul acceptnd astfel frecvene de ceas cuprinse ntre

195

7. Aplicaii

10KHz i 1,2 MHz, ceea ce corespunde unor rate de eantionare a semnalului


analogic cuprinse ntre:625 Hz i respectiv 75kHz.
Impulsurile corespunztoare 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 aplicaia i faptul c
acesta prezint dou canale numrtoare temporizatoare ceea ce favorizeaz
aplicaia. Timing-ul este prezentat n figura 11, iar schema de conectare n figura
12.

Figura 7. 11 Timing-ul (ealonarea n timp) semnalelor de comand pentru circuitul


ADS7822

RxD

P1.5

CS#

P1.7

DOUT

ADS7822

AT89C2051

P1.4 DCLOCK

TxD

Figura 7. 12 Structura sistemului de achiziie schem simplificat

Vom utiliza canalul 1 al circuitului drept generator al ratei de transmisie


serial a datelor, iar canalul 0 drept generator al frecvenei de ceas necesar
convertorului A/D.
Formarea semnalului DCLOCK va fi realizat soft, prin generarea ratei de
achiziie, programnd corespunztor canalul respectiv. Aici este momentul s
facem cteva comentarii.

196

MICROCONTROLLERE

Dac microcontroller-ul funcioneaz la o frecven de ceas de 24MHz,


teoretic frecvena maxim pentru semnalul DCLOCK ar trebui s fie de 1MHz, dar
va trebui s inem cont de alte cteva amnunte, i anume:

ntrzierea datorat procesului de servire a ntreruperilor, care n acest


care este de minimum 7 s.
De ntrzierea datorat execuiei instruciunilor rutinei de servire a
ntreruperilor
De ntrzierile (care pot fi aleatorii) datorate proceselor de schimb de
informaie concurente procesului de achiziie, cum ar fi procesul de
transfer serial al datelor ctre sistemul ierarhic superior, alte procese ce
concur la buna funcionare a sistemului, etc.

n final, vom specifica cum se calculeaz frecvena maxim de ceas


corespunztoare achiziiei de semnal.
n figura 7.13 dm structura principalelor fluxuri de informaie n cadrul
sistemului propus.
Proiectarea programelor n cazul astfel specificat, implic:
START

INIIA LIZA REA


SISTEM ULUI
Ateapt

ntre rupere

ntre rupere

S-A PRODUS UN
EVENIM ENT

Servire ntrerupere
corespunztoare UART,
respectiv RI sau TI

Servire ntrerupere
corespunztoare canalului T0
Implementeaz achiziia

Figura 7. 13 Structura soft-ului aferent sistemului

Iniializarea de sistem, ceea ce presupune:

Resetarea memoriei sistemului,


Setarea valorilor corespunztoare frecvenei de achiziie,
Scrierea rutinelor de servire a ntreruperilor
Implementarea transferului semnalului de ceas ctre convertorul A/D
Implementarea achiziiei datelor de la convertor

197

7. Aplicaii

Implementarea buffer-elor de intrare/ieire


Implementarea transferului serial al datelor, la frecvena i n condiiile
dorite.
Scrierea programului principal, care are ca principal rol, rolul de a
atepta producerea unor evenimente.

Dm n continuare programul ce implementeaz aplicaia.


;Rutina de servire a ntreruperilor corespunztoare achiziiei de semnal
;Realizeaz achiziia unei date n cadrul ei, necesit urmtoarele locaii:
CT_H
EQU 11H
CT_L
EQU 00H
SET_UART
EQU 5CH ;Setarea parametrilor interfeei seriale
SET_TIMER EQU 21H
;Setarea modului de funcionare pentru timer-ele microcontroller-ului
SET_T1
EQU 0FDH
;Setarea constantei de timp pentru rata de transfer a UART
DSEG
ORG 24H
STATUS
DATA 00H
CONTOR
DATA 00H
;Locaia memoreaz nr. de pasi la achiziie
DATA_REC DATA 00H
;Locaia memoreaz comanda venita via UART
DATA_LSB DATA 00H
;Locaie byte mai puin semnificativ
DATA_MSB DATA 00H
;Locaie byte mai semnificativ
BSEG
TRS_MSB
BIT
10H
;Specific necesitatea transferului celui mai semnificativ byte al datei achiziionate
REC_EN
BIT
11H
;Specific recepia complet a unui caracter, caz n care programul principal l va
;analiza genernd ecourile specifice comenzii primite
;Rutina de servire a ntreruperilor corespunztoare canalului 0 temporizator
;In cadrul programului principal se vor seta:
;rata de eantionare prin setarea constantei de timp
;modul de achiziie: 1.un singur punct / 2. puncte multiple
CSEG
ORG 0H
JMP MAIN
ORG 0BH
ISR_T0:
(24)
PUSH PSW ;Salvez contextul respectiv registrele PSW i ACC
(24)
PUSH ACC
(12)
SETB PSW.3
;Schimb bancul tin de registre generale cu bancul1
(12)
MOV TH0,#CT_H
(12)
MOV TL0,#CT_L

198

MICROCONTROLLERE

;Rencarc constantele de timp i redeclaeaz temporizarea corespunztoare


(12)
CLR IE.1
;Reseteaz flag-ul de ntrerupere corespunztor
canalului 0
(12)
SETB P1.5
(12)
CLR P1.5 ;Activeaz CS# pentru accesul la convertor
(12)
CLR P1.4
;Reseteaz DCLOCK pentru 1 ms. Formeaz DCLOCK =0
(12)
SETB P1.5 ;Formeaz DCLOCK =1
(12)
CLR P1.5 ;Formeaza DCLOCK =0
;S-a ncheiat perioada de eantionare pentru convertor. Urmeaz citirea datelor
;Aceasta presupune urmtoarele: DCLOCK=1, Incrementeaz contor,DCLOCK=0,
;Citete data. Numrul de cicluri este de 13 avnd n vedere c prima valoare citit
;de la CAD este 0
(12)
MOV R0,#8 ;Initializez contor
(12)
MOV A,#00H;Resetez ACC
LOOP_MSB:
180/12=15
S este timpul ct dureaz execuia instruciunilor de mai sus
(12)
SETB P1.4 ;Formeaza DCLOCK =1
(12)
CLR P1.4 ;Formeaza DCLOCK =0
(24)
JNB P1.7,CLR_BIT8
(12)
SETB ACC.0
CLR_BIT8:
(12)
RL
A
(24)
DJNZ R0,LOOP_MSB
(12)
MOV DATA_MSB,A ;Salvez biii 4 la 12 achiziionai
(12)
MOV R0,#4 ;Iniializez contor
(12)
MOV A,#00H;Resetez ACC
180/12=28,5
S este timpul ct dureaz execuia instruciunilor de mai sus
LOOP_LSB:
(12)
SETB P1.4 ;Formeaza DCLOCK =1
(12)
CLR P1.4 ;Formeaza DCLOCK =0
(24)
JNB P1.7,CLR_BIT0
SETB ACC.0
CLR_BIT0:
(12)
RL
A
(24)
DJNZ R0,LOOP_LSB
(12)
MOV DATA_MSB,A ;Salvez biii 0 la 3 n DATA_LSB
;Am achiziionat toi cei 12 bii oferii de ADS7822
180/12=14,5
S este timpul ct dureaz execuia instruciunilor de mai sus
(12)
SETB P1.5 ;Inactivez CS#
;Formez rezultatul conversiei
(12)
MOV A,DATA_MSB
(12)
SWAP A
(24)
PUSH ACC

7. Aplicaii

199

(12)
ANL A,#0F0H
;Maschez LSB=biii 4-7 ai LSB
(12)
ORL A,DATA_LSB
(12)
MOV DATA_LSB,A ;Formez primii 8 bii ai datei convertite
(24)
POP ACC
(12)
ANL A,#0FH
;Maschez cel mai seminificativ semibyte
(12)
MOV DATA_MSB,A ;Formez urmtorii 4 bii -cei mai
;semnificativi
(24)
POP PSW ;Refac starea PSW dinaintea intrrii n ntreruperi
(24)
POP ACC ;Refac starea ACC dinaintea intrrii n ntreruperi
(24)
RETI
180/12=8,5
S este timpul ct dureaz execuia instruciunilor de mai sus
66,5
S ESTE TIMPUL TOTAL CORESPUNZTOR ISR _T0
;Rutina de servire a ntreruperilor corespunztoare 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 recepionat un caracter
TRS:
;NU! Intrerupere la transmisie
(12)
CLR TI
(12)
JNB TRS_MSB,END_TRS;Test dac mai sunt de transmis date
(12)
MOV SBUF,DATA_MSB
;Transfer MSB data achiziionat
(12)
CLR TRS_MSB
END_TRS:
(24)
RETI
REC:
(12)
CLR RI
(12)
MOV DATA_REC,SBUF
;Scriu data n buffer-ul de recepie
(12)
SETB REC_EN
;Specific recepia 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 iniiere de sistem. Nu mai detaliem iniializarea memoriei
MOV IE,#90H ;Iniializez ntreruperile corespunztoare UART
MOV PSW,#0 ;Iniializez PSW
MOV SCON,#SET_UART ;Iniializez UART
MOV TMOD,#SET_TIMER
;Setez modurile de funcionare ale timer-elor
MOV TL1,#0
MOV TH1,#SET_T1 ;Setez constantele de timp
RET
S observm c dac calculm timpul de execuie corespunztor
instruciunilor rutinei de servire a ntreruperilor la achiziia datelor n cazul unei
frecvene de ceas de 24 MHz obinem o durat de 66,5 s, adic frecvena maxim
de achiziie este de: 15.037 Hz. Putem constata c i n situaia n care am utilizat
facilitile hard de sincronizare, respectiv sistemul de ntreruperi totui viteza de
achiziie este puternic legat de modul de implementare prin program a acesteia,
deci acest aspect va trebui cu cea mai mare grij analizat i proiectat.
Observm c dac am fi utilizat la achiziia datelor de la convertorul
analog-digital facilitatea interfeei UART a microcontroller-ului (vezi modul 0 de
funcionare) am fi putut crete frecvena maxim de achiziie aproape de limita
superioar corespunztoare convertorului analog-digital. n acest caz, observm c
ar fi fost necesar s recepionm sincron doi octei, ceea ce ar fi dus la consumarea
unui timp de aproximativ 16 ciclii de ceas, adic la 24 MHz timpul de achiziie ar
fi fost de 8s, ceea ce corespunde unei rate de eantionare de 125000Hz ceea ce
evident c depete frecvena maxim admisibil a convertorului. Evident, n
acest caz am fi renunat la utilizarea UART drept port de legtur cu sistemul
ierarhic superior.

7. Aplicaii

201

7.1.2 Interfaarea paralel a convertoarelor A/D

n acest scop vom utiliza convertorul ADS7821 convertor cu registru de


aproximaii succesive de 16 bii. Cteva date tehnice importante: frecvena maxim
100 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.14.

Figura 7. 14 Structura convertorului analog-digital ADS7821, cu ieire paralel de date

Pentru a-l putea conecta, este necesar s cunoatem care este modul de
funcionare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur
citirea rezultatului sau declanarea conversiei, semnalul CS# permite trecerea busului din starea High Impedance ntr-una din strile 1 sau 0 logic, semnalul BYTE
permut magistralele low/high de ieire, iar linia BUSY# semnaleaz situaia n
care convertorul se gsete n faza de eantionare i conversie a semnalului
analogic.
Pentru a realiza conversia de semnal va trebui s cunoatem care este
succesiunea de semnale de comand. Combinaiile posibile sunt prezentate n
tabelul I.

202

MICROCONTROLLERE

Astfel aplicnd
simultan un 0 logic pe
liniile CS# i R/C# i
meninnd cel puin 40
ns linia R/C# n zero
logic
realizm
eantionarea
i
conversia
semnalului
analogic.
Semnalul
BUSY va sta n zero
logic din momentul
iniierii conversiei i
pn la momentul la
care
aceasta
s-a
ncheiat. Convertorul l
va aduce automat pe 1
logic, moment la care
valoarea
numeric
corespunztoare
semnalului de intrare va
fi valid pe ieirea
convertorului.
Linia BYTE va permuta biii inferiori i superiori ai rezultatului. Astfel dac
BYTE=0, pinii de ieire ai convertorului de la 6 la 13 vor scoate semi-byte-ul mai
semnificativ, pentru ca dac BYTE = 1, aceiai pini s rein cei mai puini 8 bii ai
rezultatului conversiei.
Structura schemei electrice este gndit pentru procesorul AT89C2051, n
urma analizei resurselor pe care acesta le posed, precum i a necesitilor datorate
convertorului analog-digital ADS7821 (figura 7.15).
TxD

CS#
R/C#

P3.7

BYTE

P3.2

BUSY

P1.0-7

Figura 7. 15 Schema de conectare

6-13

ADS7821

P3.5

AT89C2051

RxD

P3.4

7. Aplicaii

203

Strategia urmat va consta n:


1. declanarea conversiei prin resetarea liniilor CS# i R/C#
2. trecerea dup mai mult de 40 ns a semnalului R/C#n 1 logic
3. citirea rezultatului atunci cnd linia BUSY# va trece n 1 logic.
Pentru implementarea achiziiei vom putea folosi att unul ct i
cellalt dintre controller-e.
S analizm avantajele i dezavantajele acestor implementri.
Legnd liniile CS#, R/C# i BYTE la portul 3 al microcontroller-ului nu
afectm funcionalitatea acestuia cci cele dou canale temporizatoare le vom
folosi, unul pentru generarea ratei de eantionare a semnalului analogic, iar cellalt
drept generator al frecvenei de ceas pe linia serial de date a UART.
Liniile portului P1 sunt direct conectate la liniile 6 la 13 ale convertorului.
Ealonarea n timp a evoluiei semnalelor este dat n figura 7.16.
Semnalul byte permut pe acelai grup de 8 linii de ieire byte-ul mai semnificativ
cu cel mai puin semnificativ, funcie de nivelul logic 1, respectiv 0 logic.

Figura 7. 16 Ealonarea n timp a semnalelor de comand pentru interfaa


ADS7821

Pentru achiziia datelor va trebui s alocm resursele disponibile ale


microcontroller-ului astfel:
1. rutina de servire a ntreruperilor corespunztoare semnalului BUSY, astfel
ca pe frontul pozitiv al acestuia s se declaneze rutina de servire. (vezi
declanarea se face pe frontul descresctor, iar starea de interes la achiziie
este starea corespunztoare frontului cresctor, deci am introdus un inversor).
2. rutina de start al conversiei A/D rutina de servire corespunztoare
ntreruperilor timer overflow de la canalul 0.
3. vom scrie rutina de servire a ntreruperilor corespunztoare UART

204

MICROCONTROLLERE

4. vom proiecta rutina de iniializare


5. vom scrie programul principal de funcionare ce cuprinde rutina de analiz
a informaiilor vehiculate prin UART
Programul ce implementeaz aceast aplicaie a considerat urmtorul
protocol:
Caracterul A reprezint comanda de achiziie necondiionat a datei
Caracterul C reprezint comanda de achiziie continu cu o rata fix
de eantionare, aprioric stabilit prin constantele de timp CT_L i
CT_H a datelor
Caracterul D reprezint comanda de transfer a datei achiziionate via
interfaa UART.
Dm n continuare programul:
CT_L
CT_H
CT_SMOD
CT_ST
CT_SSCON
;Valori pentru
analogic

EQU
EQU

00H
80H
EQU 21H
;
EQU 55H
;
EQU 5CH ;
constanta de timp necesara la declansarea conversiei semnalului

DSEG
BSEG
RX
BIT
10H
;Specifica receptia unui caracter
TX
BIT
11H
;Specifica necesitatea transferului DATA_LSB
DE
BIT
12H
;Specifica existenta unei date achizitionate
DATA_UART DATA 30H
;Locatie data receptionata pe UART
DATA_LSB DATA 31H
;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 1 de regsitrii generali, ca registrii "tinta"
MOV DATA_MSB,P1
;Salveaza
partea
mai
semnificativa a datei

205

7. Aplicaii

SETB P3.7

;Comanda switch-area bytes: LSB <-

>MSB
MOV DATA_LSB,P1 ;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',TEST1
;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
TEST1:
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 0SETB IE.1
;Validarea
intreruperilor
"timer
0
overflow"
TEST2:
CJNE A,'D',FINAL
SETB DE
FINAL:
JNB DE,LOOP
INIT_TRS:
JB
TI,INIT_TRS
MOV SBUF,DATA_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,#91H
MOV P3,#0FFH

207

7. Aplicaii

RET
END
Locatarea variabilelor i a registrelor utilizate de ctre aplicaie este dat pe CD.

7.1.3 Convertoare A/D complexe


Sistemele de achiziie ce cuprind convertoare analog-digitale complexe
sunt utilizate n aplicaii cum ar fi achiziia semnalelor n tensometrie, n domeniul
medical, n domeniile ce necesit frecvene de eantionare relativ reduse (de
maximum civa KHz) i rezoluii ridicate (de la 18 la 24 de bii).
Dintre realizrile tehnologice actuale ne vom opri asupra circuitului
ADS1211, cap de serie al convertoarelor de nalt rezoluie al firmei BurrBrown/Texas Instruments.
Structura acestuia este prezentat n figura 7.17.

Figura 7. 17 Structura convertorului sigma/delta ADS1210

Circuitul ADS1210/1211 este un convertor analog-digital cu un domeniul


de intrare deosebit de larg.
Ofer o rezoluie de 24 de bii, cu facilitatea de autocalibrare i de
multiplexare intern diferenial pentru 4 canale distincte n cazul ADS1211.
Circuitul posed un amplificator cu amplificare programabil digital
(PGA), un modulator sigma-delta de ordinul 2, un filtru digital programabil care

208

MICROCONTROLLERE

include un microcontroller ce dispune de regitrii de instruciuni, comenzi, precum


i de regitrii de date, offset i calibrare la capt de scal.
Referina de tensiune este intern i setabil digital cu valori de pn la
2,5V. Funcionarea detaliat a convertorului este prezentat n foaia sa de
catalog. (www.burr-brown.com) unde sunt detaliate i modurile sale de
funcionare. Dou sunt tipice: master mode (MODE=1) -caz n care convertorul are
iniiativa transferului datelor achiziionate imediat dup faza de iniializare i slavemode, (MODE=0)caz n care iniiativa i frecevna de ceas sunt oferite de ctre
controller-ul magistralei de conexiune.
n figura 7.18 dm diagramele de timp pentru cazul n care circuitul este
conectat ca element slave (pinul MODE este plasat pe 0 logic) pe bus.

Figura 7. 18 Diagramele de timp corespunztoare interfeei seriale

Schema de conectare aleas permite realizarea tuturor modurilor de


funcionare 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 acelai bus i adresarea acestora. n figura 7.19 este prezentat
aceast schem.

Figura 7. 19 Schema electric simplificat a interfeei CAD-ADS1210 microcontroller I8051

209

7. Aplicaii

Pentru a putea scrie programele de iniializare i cele de achiziie este


necesar s cunoatem structura regitrilor interni ai convertorului.
Registrul de instruciuni este cel prin intermediul cruia se controleaz
transferul informaiilor i are structura:
INSTR
R/W#

MB1

MB0

A3

A2

A1

A0

Bitul R/W# specific tipul operaiei: de citire/scriere respectiv 1/0 logic.


Biii MB1 i MB2 codific numrul de octei de comand pe care circuitul i va
recepiona, via interfaa serial: combinaia 00 corespunde unui octet, 01 la doi
octei, 10 la 3 octei i 11 la 4 octei transmii succesiv.
Biii A3,A2,A1,A0 adreseaz regitrii interni ai convertorului, conform tabelului
alturat.

Circuitul este astfel conceput nct dup fiecare sesiune de scriere


adreseaz implicit, din nou, regsitrul de instruciuni.
Odat declaat, spre exemplu achiziia datelor, acestea vor fi emise
autonom, funcie de setrile stabilite.
Registrele de comenzi permit setarea parametrilor de achiziie pentru
convertorul analog-digital. ntre acetia amintim: rata de eantionare n
concordan cu frecvena de decimare i ctigul amplificatorului de pe intrare
obinute pe convertor, canalul selectat, formatul datelor, sursa pentru tensiunea de
referin i modul de achiziie: unipolar sau bipolar, ordinea de emisie a datelor
ncepnd cu LSB (Last Signifiant Bit) sau cu MSB (Most Signifiant Bit). Setarea
modurilor de funcionarese face conform structurii de bii de comand urmtori.

210

MICROCONTROLLERE

Byte 3 (MSB)
BIAS
O = Off

REF

DF

U/B#

BD

MSB

SDL

DRDY/
DSYNC#

1 = On

1 =comp 2

0=
Bipolar

0= MSB

0=MSB

0=SDIO

Valorile trecute pe a doua linie sunt cele implicite.


Pentru valoarea 0 a bitului BIAS, tensiunea de referin este de 2,5V, iar pentru
valoarea 1 ea este 1,33*2,5V adic aproximativ 3,3V.
Un 1 logic pe bitul REF asigur utilizarea sursei interne de referin, iar 0
aduce n starea de mare impedan aceast surs, 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 achiziia bipolar a datelor, iar cnd este 1 exprim
achiziia unipolar a acestora.
BD exprim ordinea de transfer a bytes, setnd bitul ordinea este cresctoare
de la LSB ctre MSB i invers dac-l resetm.
MSB exprim cine este primul bit emis n cadrul fiecrui byte, 1 implic
transferul nti al bitului cel mai nesemnificativ, iar 0 implic transferul nti al
bitului cel mai semnificativ.
SDL comand utilizarea a unei linii bidirecionale seriale (SDIO) dac este
resetat, respectiv a dou linii seriale dac este setat (SDIO pentru comenzi i
SOUOT pentru date)
DRDY# exprim resetat prezena datelor (Data Ready), iar setat exprim date
invalide.

Byte 2
MD2

MD1

MD0

G2

G1

G0

CH1

CH0

Acest byte seteaz, modurile de funcionare, codate binar de la 0 la 7, valorile


ctigului i selecteaz canalul de intrare pentru achiziia de semnal.
Modurile de funcionare codate binar sunt n ordine, ncepnd de la 000H
urmtoarele:
1. Normal,
2. "Self calibration" calibrare automat,
3. Calibrare de offset,
4. Calibrare la capt de scal,
5. "Pseudo-calibrare",
6. Calibrare n fundal "background calibration",
7. "Sleep" i
8. Rezervat -neutilizat.

211

7. Aplicaii

Byte 1
SF2

SF1

SF0

DR12

DR11

DR10

DR9

DR8

SF2, SF1, SF0 selecteaz una dintre valorile modului turbo de funcioare a
circuitului, iar valorile DR12 la DR0 seteaz frecvena de decimare pentru filtrul
digital al convertorului.
Byte 0
DR7

DR6

DR5

DR4

DR3

DR2

DR1

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 acelai timp comenzi prin intermediul liniei SDIO i genernd date via
linia SDOUT. (vezi documentaia firmei Burr - Brown, memorat pe CD)
Implementarea unui ciclu descriere a comenzilor n modul slave presupune
ndeplinirea urmtorilor pai:
1. Ateapt ca ADS1211 s plaseze DRDY# pe zero logic
2. Ateapt ca CS# s treac la rndul su 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 regitrilor int ai
comenzilor (vezi documentaia la ADS1210 ads1210.pdf de la Burr-Brown)
5. Ads1210 pune pe 1 logic DRDY
Repet paii 3 la 5 pn la transmiterea tuturor cuvintelor de comand
ctre ADS1210, dup care intr n ciclul/ciclurile de citire a datelor, ceea ce
presupune:
1.
2.
3.
4.

Ateapt ca ADS1211 s plaseze DRDY# pe zero logic


Ateapt ca CS# s treac la rndul su n zero logic
Dac este n modul citire continu (Continous Read), trece la pasul 5
Microcontroller-ul genereaz 8 ciclii de ceas i transfer cuvntul de
control n registrul de instruciuni via SDIO
5. Dac utilizm SDIO drept linie bidirecional vom urmrii evoluia
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/recepioneaz informaia din registrul specificat prin
instruciunea de la punctul 4. Recepia acestor bii se face pe linia
SDOUT sau SDIO dup caz.
7. SDOUT sau SDIO intr n starea de mare impedan, dup ce a
transmis informaia comandat

212

MICROCONTROLLERE

8. Testare dac mai sunt de transmis alte comenzi sau cereri de date.
Dac da se reia ciclul de la punctul 2. CS# rmne inactiv 10,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 octei. Programarea
microcontroller-ului va fi specific pentru fiecare aplicaie n parte, ea trebuind s
realizeze adaptarea parametrilor convertorului n raport cu rezoluia i rata de
eantionare impuse de aplicaie.
Programul de funcionare permite:
1. Sincronizarea transferului comenzilor ctre CAD;
2. Generarea soft i emiterea semnalului de ceas (SCLK), ctre CAD
3. Transferul informaiilor de iniializare i a comenzilor ctre CAD
4. Recepia datelor corespunztoare semnalului analogic convertit
Iat acest program:
ORG 28H
PROG: DB
01100100B
;Cuvnt de instruciuni
DB
01000010B
;Cuvnt de C-d nr. 3
DB
00000000B
;Cuvnt de C-d nr. 2
DB
00000000B
;Cuvnt de C-d nr. 1
DB
00000000B
;Cuvnt de C-d nr. 0
;Cuvntul de instruciuni asigur scrierea cuvintelor de comand 3, 2, 1 i 0
DB
11000000
;Cuvntul asigur citirea celor 3 regitrii corespunztori valorii semnalului
analogic convertit
BUFFER:
DS
03H
CAD:
JB
P1.0,CAD
;Testeaz starea CAD, respectiv DRDY#=0
MOV R1,#04H
MOV R0,#PROG
;Pregtete transmiterea a 5 octei ctre CAD, ce sunt: cuvntul de instruciuni i
;cele 4 cuvinte de comand. Cuvintele sunt memorate ncepnd de la adresa PROG
LOOP_1:
MOV A,@R0
CALL SERIAL_OUT
INC
R0
DJNZ R1,LOOP_1
CAD1: JB
P1.0,CAD1
;Testeaz starea CAD, respectiv DRDY#=0
MOV A,@R0
CALL SERIAL_OUT
LOOP_2:
JB
P1.0,LOOP_2
;Ateapt conversia datelor de ctre CAD, semnalul DRDY# va fi resetat
MOV R1,#03H
MOV R0,#BUFFER
;Pregtete citirea celor 3 bytes de date, corespunztori semnalului analogic
LOOP_3:

7. Aplicaii

213

CALL SERIAL_IN
MOV @R0,A
INC
R0
DJNZ R1,LOOP_3
;ncheie un ciclu complet Iniializare comand i achiziie data convertit
SERIAL_OUT: CLR P1.3
MOV R7,#08H
RL
A
RL
A
LOOP_OUT:
JB
ACC.2,SET_OUT
CLR P1.2
JMP CLOCK_OUT
SET_OUT:
SETB P1.2
CLOCK_OUT: SETB P1.3
CRL P1.3
;Genereaz semnalul SCLK
RL
A
DJNZ R7,LOOP_OUT
;Transfer un octet ctre CAD
RET
SERIAL_IN: CLR P1.3
MOV R7,#08H
LOOP_IN:
JB
P1.1,SET_IN
CLR ACC.0
JMP CLOCK_IN
SET_IN:
SETB ACC.0
CLOCK_IN: SETB P1.3
CRL P1.3
RL
A
DJNZ R7,LOOP_IN
;Recepteaz un octet de la CAD
RET

7.1.4 Convertor D/A controlabil serial


Aplicaia pe care o vom descrie n continuare se refer la comanda unui
convertor digital - analog cu intrare serial, cum ar fi cele utilizate n cadrul
aparaturii audio de nalt performan. Vom exemplifica aceasta prin circuitul
PCM56 convertor digital-analog de 16 bii. Structura convertorului este dat n
figura 7.20. Cteva dintre caracteristicile convertorului sunt: domeniul dinamic de
peste 96 dB FSR, nu necesit componente externe, 16 bii rezoluie, eroare liniar
sub 0,001%, timp de stabilire 1,5 ms, opereaz cu tensiuni ntre 5V i 12V. LE

214

MICROCONTROLLERE

Figura 7. 20 Structura convertorului PCM56 (Fabricat de Burr-Brown)

"Latch Enable", lctuiete informaia serial receptat i o aplic convertorului la


momentul validrii lctuirii.

Data este intrarea de "Date", ce sunt transmise n format complement fa


de 2, sincron cu semnalul de ceas "Clock". Amnunte privind fronturile i
sincronizarea datelor i timming-ul corespunztor transferului unei date sunt
prezentate n figura 7.21. Se constat c datele sunt transmise ncepnd cu cel mai
semnificativ octet, frontul negativ realizeaz deplasarea acestora la dreapta bit de

Figura 7. 21 Diagramele de timp ce ilustreaz comanda convertorului PCM65

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 1 logic cel puin un ciclu de ceas, ea plasndu-se pe durata transferului
serial al datelor pe 0 logic. La sfritul transferului ea va fi trecut n 1 logic pentru
cel puin 1,5 perioade de ceas.

7. Aplicaii

215

Utiliznd microcontroller-ul AT89C2051 vom conecta liniile P1.7 la linia


Clock, P1.6 la linia Date, iar P1.5 la linia LE. Dm mai jos rutina care realizeaz
comanda convertorului.
CT_TMOD
EQU 21H
;Setare mod functionare canale temporizatoare:
;
canalul 0 utilizat pentru rata de eantionare comand programat n modul 1
;
canalul 1 utilizat pentru rata de transfer serial programat n modul 2
CT_TCON
EQU 50H
;Setez flag-urile de dezinhibare a numrrii pentru canalele 0 & 1
CT_SCON
EQU 90H
;Setez modul 1 de transfer serial UART 8 bii pilotat cu rata variabil de ctre
;canalul 1 temporizator
CT_LOW0
EQU 00H
CT_HIGH0
EQU 00H
CT_LOW1
EQU 0FDH
;Constanta de timp corespunztoare ratei de 9600 Baud la fceas=11,059MHz
LEN_BUFFER
EQU 20H
;Lungime prestabilit a blocului
;de date de transferat. CONTOR_B este mai mic sau egal cu LEN_BUFFER
BSEG
REC
BIT
0H
;Flag-ul setat exprim recepia complet a unui caracter via UART
RANG_DATA BIT
1H
;Flag ce exprima byte-ul care este transferat ctre CDA
DSEG
DATA_CDA: DS
LEN_BUFFER ;Buffer bloc date
DATA_LOW DATA 00H
;LSB corespunztor datei de convertit D/A
DATA_HIGH DATA 00H
;MSB corespunztor datei de convertit D/A
;Locaii corespunztoare datei transferate ctre CDA n modul transfer cuvnt
DATA_SI
DATA 00H
;Buffer de recepie a datelor (comenzi) via UART
CONTOR_B DATA 00H
;Mrime bloc de date de transferat ctre 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 ctre CDA
ISR_T0:
PUSH PSW
PUSH ACC
;Salvez starea microcontroller-ului

216

MICROCONTROLLERE

SETB PSW.3
;Utilizez bancul 1 de regitrii generali
CLR P1.5
;Invalidez LE, => Posibilitate de scriere in buffer-ul de serializare al CDA
MOV R7,08H
;ncarc contor al biilor de serializat corespunztor MSB
MOV A,DATA_HIGH
;ncarc MSB
LOOP_CDA1: RL
A
;Rotesc informaia din Acumulator
CLR P1.7
;Reset semnal Clock ctre CDA
JB
ACC.0,SET_BIT_CDA
CLR P1.6
;Reset DATA ctre CDA
CLK_CDA:
SETB P1.7
;Set semnal Clock ctre CDA
DJNZ R7,LOOP_CDA1
JMP CONT
SET_BIT_CDA:
SETB P1.6
;Set DATA ctre CDA
JMP CLK_CDA ;Am transmis MSB ctre CDA, urmeaz LSB
CONT:
MOV R7,08H
MOV A,DATA_LOW
LOOP_CDA2: RL
A
CLR P1.7
;Reset semnal Clock ctre CDA
JB
ACC.0,SET_BIT_CDA1
CLR P1.6
;Reset DATA ctre CDA
CLK_CDA1: SETB P1.7
;Set semnal Clock ctre CDA
DJNZ R7,LOOP_CDA1
SETB P1.5
;Lctuiesc informaia transferat serial n buffer-ul de ieire al CDA
CLR P1.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_CDA1:
SETB P1.6
;Set DATA catre CDA
JMP CLK_CDA1
ISR_SI:
JB
RI,RECEPTIE
TRANSMITE:
CLR TI
RETI
RECEPTIE:
MOV DATA_SI,SBUF
CLR RI
SETB REC
RETI
MAIN:

217

7. Aplicaii

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 corespunztoare canalului 0 temporizator i UART
LOOP:
;Se va particulariza programul funcie de protocolul dorit i funcie de
;particularitile sistemului
JNB REC,LOOP
;Testare caracter recepionat i comanda corespunzatoare codului asignat
; ................
CLR REC
;Reanclaare analiz a unui eventual nou caracter recepionat via UART
JMP LOOP
INIT:
MOV TMOD,CT_TMOD
MOV TCON,CT_TCON
MOV TL0,#CT_LOW0
MOV TH0,#CT_HIGH0
MOV TL1,#CT_LOW1
SETB 0D7H
;Dublez rata de transfer serial a informaiilor =>PCON.7=SCON=1
RET
END

7.1.5 Programarea unui sistem de dozare gravimetric


dotat cu microcontroller
Aplicaia pe care o prezentm reprezint un cntar electronic necesar
dozarii materiilor prime pulverulente, bazat pe utilizarea unei balane electronice
ce prezint o doz tensometric compensat complet cu ajutorul creia se
determin greutatea ansamblului cntar i pulbere (figura 7.22).
Sistemul electronic de dozare a materiilor prime pulverulente este format
din dou subsisteme principale:
1. Subsistemul mecanic, sub forma unui cntar diferenial de precizie

218

MICROCONTROLLERE

2. Subsistemul electronic de msurare a tensiunii aprute n reazemul


ctre sistemul de referin fix format din cadrul cntarului.
Principiul de funcionare al cntarului dozator este acela de transformare a
greutii corespunztoare materiilor prime pulverulente n semnal electric prin

AFISAJ SI
TASTATUR

CNTAR
DIFERENTIAL
(PARTEA MECANIC)

Captor
Tensometric

PREAMPLIFICATOR
AMPLIFICATOR

CONVERTOR
ANALOG-DIGITAL

PORT
INTRARE

SISTEM DIGITAL
CU MICROCONTROLLER

Figura 7. 22 Structura dozatorului gravimetric

intermediul unui captor de for (Philips PR6211). Acesta ofer un semnal de


tensiune n diagonala unei puni tensometrice rezistive care este alimentat de la o
surs de tensiune de referin. Sensibilitatea senzorului este de 2mV/V, rezultnd la
o ncrcare egal cu cea maxim admis, i cu o tensiune de alimentare a punii de
5V rezult o diferen maxim de tensiune de 10mV pe diagonala punii de
msurare.
Prelucrarea semnalului analogic de la captorul tensometric este realizat n
dou trepte de amplificare i filtrare. Pentru semnalul amplificat, - domeniul de
variaie este 0-10V el fiind aplicat unui convertor analog-digital ADS7805
(analog convertorului ADS7821), de 16 bii cel convertete n semnal digital.
Sistemul digital este coordonat de ctre un microcontroller de 8 bii Philips
PCB80C552 (analog unuia Intel 8051), ce dispune de 40 de linii digitale de
intrare/ieire, la care se adaug 3 canale numrtoare/temporizatoare, precum i un
convertor analog/digital de 10 bii intern precum i dou ieiri PWM (Pulse Width
Modulation). Microcontroller-ul posed dou interfee seriale, una standard UART

219

7. Aplicaii

(Universal Asyncronus Receiver Transmiter), i una I2C care asigur o rat de


transfer mai bun de 4Mbii/secund. Memoria intern a controller-ului este de 256
de bytes la care se adaug regitrii de funcii speciale (Special Function Registers).
Sistemul dispune de dou afioare, unul cu LED-uri cu apte segmente,
necesar afirii greutii msurate, iar al doilea cu LCD-uri 2x16 caractere necesar
pentru ghidarea prin intermediul mesajelor a operatorului, precum i o tastatur cu
12 taste multifuncionale.
Memoria sistemului este de 64Kbytes, dintre care 32Kbytes EPROM i
32Kbytes SRAM.
Subsistemul mecanic asigur transmiterea greutii materiilor prime
pulverulente ctre captorul tensometric prin demultiplicarea efortului pe acesta.
Factorul de demultiplicare al cntarului are expresia:

=a

1
, unde:
2( a + b ) +

a,b i sunt dimensiuni ale braelor cntarului diferenial. Pentru dimensiunile de


a=78 mm, b=300 mm i =150 mm, factorul k va fi: k=0,08,
Subsistemul electronic de msurare include captorul de for ce traduce
reaciunea normal aplicat asupra sa n semnal electric de tensiune.
Iat principalele caracteristici ale elementelor subsistemului:
Captorul de for: clas de precizie: D1, respectiv 0,05% eroare integral
de msurare, (aceasta include toate erorile cea de zero, de neliniaritate, cea
corespunztoare variaiei temperaturii, etc). Rezistena de intrare a captorului 1200
, rezistena de ieire 1200 , rezistena de izolaie a mrcilor captorului n raport
cu masa acestuia mai bun 5000M. Tensiunea de alimentare a punii
tensometrice este de 5V cc, obinui de la o surs de tensiune REF02 (Burr Brown)
avnd o stabilitate excelent n domeniul de temperaturi de la - 10 la +85C.
Preamplificatorul
de semnal este implementat cu ajutorul unui circuit
INA114(Burr Brown), amplificator de msurare integrat ce nu necesit dect o
singur rezisten extern de setare a amplificrii. Dintre caracteristicile sale
amintim: domeniu de tensiuni de alimentare: 2,25V la 18V, tensiune maxim de
offset 50V, drift maxim 0,25V/C, CMRR mai bun de 115dB, curent maxim de
polarizare pe intrri 2nA, domeniu temperaturilor de funcionare ntre -40 i
+85C, este protejat la scurtcircuit pe ieire, i la supratensiuni pe intrare.
Circuitului i s-a setat o amplificare de 1000.
Amplificatorul de semnal: este implementat cu acelai tip de amplificator
ca i preamplificatorul, amplificarea acestuia fiind de 1,1316.
Convertorul analog-digital ADS7805, cu urmtoarele caracteristici: 16 bii
rezoluie, eroarea maxim integral 2-3 LSB (Last Signifiant Bit), fr coduri lips,
necesit doar tensiunea de 5V pe alimentare, domeniul de intrare 10V, codarea n
format complement fa de 2, rata de eantionare maxim 100 kHz, ieirea

220

MICROCONTROLLERE

convertorului pe 16 bii se poate cupla direct la magistrala de date a sistemului


13
digital, domeniul temperaturilor de funcionare 40 la +85C.
Sistemul digital: asigur comanda i controlul de ansamblu, permite
implementarea funciunilor de msurare, prelucrare, memorare, dozare i afiare a
greutii 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 funciunile sistemului s-au adugat porturi digitale de ieire i intrare
de cte 8 bii fiecare, implementate cu circuitele 74LS374, 74LS574, respectiv
74LS244 i 74LS574 care au o capabilitate n curent la ieire de 20-24mA/ieire.
Afiajul cu LCD-uri este implementat cu circuitul LTN211, circuit ce posed un
microcontroller, memorie intern i un generator de caractere necesar afirii a
pn la 512 caractere diferite. Capacitatea acestuia este de 2x16 caractere. Afiorul
cu LED-uri este clasic, transferul informaiilor binare ctre acesta realizndu-se
serial (vezi schema pe CD). S-a prevzut o plac special de ieiri numerice pe
relee (4 buci cu cte 2 contacte fiecare de cte 8 A), i 8 intrri digitale izolate
galvanic. Tastatura sistemului cuprinde 12 taste scanate soft de ctre procesor.
Dintre funciunile pe care sistemul le implementeaz amintim:

Dozarea n fluxul tehnologic a materiilor prime pulverulente


Filtrarea automat a datelor de msurare prin medierea unei serii de
eantioane.
Tararea automat realizat la nceputul procesului de dozare, sau la
cereera operatorului.
Alte funciuni implementate:
Presetare greutate de dozat
Presetare tempozare la sfritul procesului de dozare ( rezoluie 1
secund, domeniu 0 la 999s)
Presetare tempozare pentru pornirea amestectorului ( rezoluie 1
secund, domeniu 0 la 999s)
Presetare tempozare la sfritul procesului de golire a cntarului (
rezoluie 1 secund, domeniu 0 la 999s)
Determinare TARA
Afiare presetare greutate de dozat
Afiare presetri temporizri
Setare constant de calibrare
Afiare constant de calibrare

13

ATENIE: se recomand buffer-area ieirii convertorului cu buffer-e n tehnologie


Shotky pentru a nu permite traversarea convertorului de ctre glich-uri ce pot apare pe
partea analogic de prelucrare a informaiilor. Aceti parazii pot afecta funcionarea
corect a sistemului!

7. Aplicaii

221

Transfer serial n format binar a greutii msurate n fazele de dozare


i golire a cntarului (formatul datelor: asincron, rata 9600 Bauds, 8
bii/cuvnt, fr paritate, 2 bii de stop)

Sistemul permite reglarea anumitor parametrii ai si, precum: cantitatea


dozat, temporizrile corespunztoare diferitelor faze ale procesului de dozare.
Utiliznd sistemul de ntreruperi al procesorului putem declana procesul
de conversie la intervale de timp prestabilite pentru convertorul analog-digital de
semnal asigurnd eantionarea uniform a semnalului de greutate.
Programul complet de funcionare al sistemului este nscris pe CD unde
este dat i schema sistemului utilizat pentru aceast aplicaie.
n continuare prezentm cteva rutine care implementeaz comanda unui
afior LCD, comanda unui afior realizat cu afioare cu cte 7 segmente (5
afioare), rutina de nmulire a dou cifre de cte 16 bii fiecare i explicm modul
de utilizare a canalului "Watch Dog" pentru a evita agarea sistemului n cazul
apariiei unor zgomote parazite la nivelul magistralei de sistem.
Scrierea ctre un modul de afiare LCD (LTN211, conectat la un port
paralel de adres 100H), implic realizarea unor ntrzieri necesare procesului de
transfer al datelor i comenzilor. Implementarea acestora s-a realizat soft
(ntrziere prin execuia de instruciuni), cci pe de-o parte nu este critic durata
temporizat, iar pe de alt parte n cadrul aplicaiei canalele
temporizatoare/numrtoare 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 reanclanm 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_1,B_2
;Etichete definite local n cadrul MACRO
(12) ;Iniializeaz R5 cu valoarea de ciclare 32
MOV R5,#20H
(12) ;Iniializeaz R6 cu valoarea de ciclare 255
B_1:
MOV R6,#0FFH
(12) ;Iniializeaz R6 cu valoarea de ciclare 255
B_0:
MOV R7,#0FFH
(24) ;Decrementeaz contoare pe rnd
B_2:
DJNZ R7,B_2
(24) ;Decrementeaz contoare pe rnd
DJNZ R6,B_0
ORL PCON,#10H(12)
MOV T3,#00H (12)
(24) ;Decrementeaz contoare pe rnd
DJNZ R5,B_1
ENDM
n partea dreapt a mnemonicelor s-au menionat numrul de perioade de
ceas necesare execuiei instuciunilor. Considernd frecvena de ceas egal cu 12
MHz, vom obine temporizarea de: 4,192secunde.
Menionm c regitrii R5, R6 i R7 sunt utilizai drept contoare
WAITL MACRO

222

MICROCONTROLLERE

LOCAL B_0,B_1,B_2
MOV R6,#04H
B_0:
MOV R7,#0FFH
B_2:
DJNZ R7,B_2
;Anclansare WATCH DOG
ORL PCON,#10H
MOV T3,#00H
DJNZ R6,B_0
ENDM
;Temporizarea de: 0,002048secunde.
;Registrul este pointer-ul n buffer-ul de mesaj de scris la afior LCD
;Registrul DPTR este pointer-ul ctre portul microsistemului la care se afl afiorul
;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 R1,DPH
MOV DPL,R3
MOV DPH,R4
WAIT
ORL PCON,#10H ; Setare flag corespunztor WATCH DOG
MOV T3,#00H
;Anclanare WATCH DOG: scrie constanta
MOVX @DPTR,A
;Scrie caracterul ctre LCD
MOV DPL,R0
MOV DPH,R1
DJNZ R2,BUCLA
MOV DPL,R3
MOV DPH,R4
MOV A,#2
MOVX @DPTR,A
;Scrie comanda de avans cu un caracter la afiorul LCD
WAIT
RET
;Rutin de scriere a mesajelor ctre afiorul LCD
;MESAJ1 i MESAJ2 adresele de nceput pentru mesajele de afiat pe primul
;respectiv, pe al doilea rnd al afiajului
LCD_PRINT
MACRO #MESAJ1,#MESAJ2
MOV DPTR,#100H
;Adresa de scriere la LCD
MOV A,#1
;Selecie funcie:
MOVX @DPTR,A
;DISPLAY / CLEAR LCD
WAITL
MOV A,#80H
;Selecie funcie Cursor plasat pe:
MOVX @DPTR,A
;RNDUL 1

7. Aplicaii

223

WAIT
MOV R2,#10H;ncarc contor caractere ce vor fi afiate pe r-dul 1
MOV DPTR,#101H ;ncarc adresa de scriere ctre afiorul LCD
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ1 ;ncarc pointer ctre mesajul de afiat
MOV R0,DPL
MOV R1,DPH
WAITL
CALL BUCLA ;Rutin de scriere mesaj (lungime mesaj 16 car.)
WAITL
MOV DPTR,#100H
MOV A,#0C0H
MOVX @DPTR,A;
Comand saltul la rndul 2 al afiorului
WAIT
MOV DPTR,#101H
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ2 ;ncarc pointer ctre mesajul de afiat
MOV R0,DPL
MOV R1,DPH
MOV R2,#10H
;Contor de caractere Rnd 2
WAITL
CALL BUCLA ;Rutin de scriere mesaj (lungime mesaj 16 car.)
WAITL
ENDM
n continuare prezentm rutina de nmulire ntreag a dou valori
memorate n locaiile OP1 i OP2 (locaii de 16 bii fiecare). n locaiile MREZ1,
MREZ2, MREZ3 i MREZ4 (8 bii fiecare), n ordinea cresctoare a rangului, vom
obine rezultatul nmulirii. Rutina va genera produsul celor doi operanzi, iar flagul C va fi afectat la depirea buffer-ului rezultat.
Notnd cu N1H i N1L, respectiv cu N2H i N2L octeii corespunztori
celor dou numere, acestea pot fi scrise astfel: N1=256*N1H+N1L, iar
N2=256*N2H+N2L. (N1L=LOW(1),N2L=LOW(N2), iar N1H=HIGH(N1)
N2L=HIGH(N2)).
nmulindu-le obinem:
N1*N2=65536*N1H*N2H+256*(N1H*N2L+N2H*N1L)+N1L*N2L. Execuia
acestei nmuliri se va face ncepnd de la dreapta spre stnga, inndu-se cont de
eventualul bit de transport ce poate apare la execuia operaiilor.
M16:
MOV
B,OP1L
;ncarc n B pe N1L
MOV
A,OP2L
;ncarc n A pe N2L
MUL
AB
;Execut N1L*N2L

224

MICROCONTROLLERE

MOV
MREZ1,A ;Reine LSB rezultat din nmulirea
N1L*N2L
MOV
MREZ2,B ;Reine MSB rezultat din nm. N1L*N2L
MOV
A,OP2H
MOV
B,OP1L
MUL
AB
;Execut produsul: N2H*N1L
ADD
A,MREZ2 ;Adun: LSB(N2H*N1L)+MSB(N1L*N2L)
MOV
MREZ2,A ;Salveaz rezultatul
MOV
A,B
;Transfer n registrul A=MSB(N2H*N1L)
ADDC
A,MREZ3 ;Adun cu transport n A=MSB(N2H*N1L)
MOV
MREZ3,A ;Transfer rezultat n MREZ3
MOV
A,OP1H
MOV
B,OP2L
MUL
AB
;Execut produsul:N1H*N2L
ADD
A,MREZ2
;Adun: LSB(N1H*N2L)+LSB(LSB(N2H*N1L)+MSB(N1L*N2L))
MOV
MREZ2,A ;Transfer rezulatul n MREZ2
MOV
A,B
;Transfer MSB(N1H*N2L) n registrul A
ADDC
A,MREZ3
MOV
MREZ3,A
;Reine n MREZ3,MREZ2 i MREZ1 expresia calculat:
;256*(N1H*N2L+N2H*N1L)+N1L*N2L
;De observat c mulirea cu 256 este specificat prin locaia n care rezultatele sunt
;salvate, dup regula rangul cel mai ridicat este plasat la o adres mai mare
MOV
A,OP1H
MOV
B,OP2H
MUL
AB
;Execut produsul N1H*N2H
ADD
A,MREZ3
MOV
MREZ3,A ;Salvez LSB(N1H*N2H)
MOV
A,B
ADDC
A,MREZ4
MOV
MREZ4,A ;Salvez MSB(N1H*N2H)
RET
NR_OCT
DATA 13H
;Index octei serializai
SERBUF
DATA 21H ;Locaie octet de serializat ctre afioare
;Locaiile E3 i E4 reprezint biii 3, respectiv 4 ai Acumulatorului
SERPIN1
BIT
0E3H ;Ieire clock registru intrare serial/ieire paralel
SERPIN0
BIT
0E4H ;Ieire date registru de deplasare (MMC4015)
BIT_0
BIT
8
;Bitul 0 al locaiei SERBUF (21H)
BIT_1
BIT
9
;Bitul 1 al locaiei SERBUF (21H)
BIT_2
BIT
0AH ;Bitul 2 al locaiei SERBUF (21H)
BIT_3
BIT
0BH ;Bitul 3 al locaiei SERBUF (21H)
BIT_4
BIT
0CH ;Bitul 4 al locaiei SERBUF (21H)
BIT_5
BIT
0DH ;Bitul 5 al locaiei SERBUF (21H)

7. Aplicaii

BIT_6
BIT_7
BUF_AF:

225

BIT
0EH ;Bitul 6 al locaiei SERBUF (21H)
BIT
0FH ;Bitul 7 al locaiei SERBUF (21H)
DB
01H,23H,45H,67H,89H ;Zon memorare informaii
DB
11H,11H,11H,11H,11H ;de afiat.
DB
22H,22H,22H,22H,22H ;Valori de TEST
DB
33H,33H,33H,33H,33H
; Refresh afioare
MOV SP,#70H
;Setare adres de baz stiv
MOV NR_OCT,#0 ;niializare contor
MOV DPTR,#(BUF_AF-1) ;Iniializare pointer
LOOP_BY:
INC
DPTR
;Incrementare pointer
MOVX A,@DPTR
;Citete primul caracter (numr)
MOV SERBUF,A
PUSH DPH
PUSH DPL
;Reine n stiv DPTR
MOV DPTR,#120H
;ncarc n DPTR adresa portului pentru afioarele cu 7 segmente
Biii 3 i 4 sunt folosii pentru transferul semnalelor de CLOCK i respectiv DATE
CLR SERPIN1
;Pune pe zero linia de CLOCK
MOV C,BIT_7 ;Transfer n C falg bitul 7 al datei de serializat
MOV SERPIN0,C
;Scrie bitul respectiv ca bit 4 al reg.A
MOVX @DPTR,A;Scrie la portul de adres 120H primul bit MSB
SETB SERPIN1
MOVX @DPTR,A
;Pune linia CLOCK pe 1 logic
;Repet paii corepunztori bitului 7 pentru bitul 6 al datei de transmis
CLR SERPIN1
MOV C,BIT_6
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 5
MOV C,BIT_5
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 4
MOV C,BIT_4
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 3

226

MICROCONTROLLERE

MOV C,BIT_3
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 2
MOV C,BIT_2
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 1
MOV C,BIT_1
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 0
MOV C,BIT_0
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
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 octei
MOV A,NR_OCT
CJNE A,#5,LOP_BY ;5 reprezint numrul de afioare 7 seg.
;Testeaz dac au fost serializate toate informaiile
JMP EXIT
;Ieire din rutin
LOP_BY:
JMP LOOP_BY
EXIT:
n legtur cu utilizarea canalului Watch Dog (WD) trebuie s artm
urmtoarele: aa cum s-a precizat n capitolele 1, 2 i 4 rolul acestui canal
temporizator const n generarea unui RESET-hard atunci cnd el atinge
starea"overflow", respectiv are loc tranziia de la 11111111B la 00000000B.
ncrcnd o anume constant de timp exprimabil pe 8 bii, putem
modifica intervalul de timp dup care, dac nu este rencrcat constanta,
respectivul canal temporizator va genera semnalul de RESET.
n cazul nostru, sistemul a prezentat o "sensibilitate" iniial relativ
important la zgomotele din mediul industrial. De aceea am adoptat urmtoarea
soluie: am setat la 256*16s perioada temporizat de ctre WatchDog i periodic
n programul de funcionare, am reanclanat WD prin rencrcarea constantei de

7. Aplicaii

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 msurare, cci sistemul cntrete o anumit cantitate
ce este prescris pe fluxul tehnologic), cu un numr de 8 stri, acestea au fost
numerotate i stocate mpreun cu restul variabilelor att n memoria intern ct i
n cea extins a microcontroller-ului. Actualizarea strii s-a realizat de fiecare dat
imediat dup ce starea respectiv a aprut. Rutina de iniializare a sistemului a fost
modificat astfel nct dup fiecare RESET, s analizeze starea sistemului i
funcie de aceasta s realizeze saltul la nceputul programului corespunztor strii.
Enumerm strile principale ale sistemului i variabilele ce sunt modificate
n concordan cu acestea.
0=stare ateptare programare / comand sistem Variabilele: DOZ=0 i PRG=0
1=stare programare sistem de la tastatur implic Variabilele: PRG=1 i DOZ=0
2=stare dozare: Variabilele: PRG=0 i DOZ=1
3=stare temporizare1 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 funciona i autonom, caz n care operatorul poate
interveni pentru a goli manual containerul dozatorului.
Prezentm n continuare acea parte din programul de funcionare ce
realizeaz directarea corespunztoare a execuiei 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
;Oprete motor ce introduce materie pulverulent n cntar - comanda este dictat
;de fluxul tehnologic specific
MOV R0,#7FH
INIT_1:MOV @R0,#00H
DJNZ R0,INIT_1
;Iniializare memorie intern cu 0
ORL TCON,#0CH
;Valideaz activarea ntreruperilor exeterne de stare 1 pe front - se evit astfel
;reanclanarea ntreruperilor n cazul cnd nivelul semnalului rmne prea mult
;timp n 0 logic.
MOV SP,#6EH
;Poziionare stiv sistem la adresa 6EH
;Testare stare sistem - este executat pentru o eventual resetare ca urmare a
;aciunii Watch Dog-ului, care genereaz ceea ce se cheam "Warm Boot"

228

MICROCONTROLLERE

MOV R0,#0D0H
;Locaia D0 reine STAREA sistemului14
MOV A,@R0
;Starea 0 corespunde situaiei de RESET la pornirea sistemului "COLD RESET"
CJNE A,#5AH,PRIM_RESET ;n caz de COLD RESET
;Valoarea 5AH la locaia D0H exprim execuia unui "Warm Boot" ca urmare a
;forrii de ctre WD a unui semnal de RESET pentru sistem.
MOV PORT_O1,#03h
;Reprezint traiectoria programului n caz de Warm RESET
MOV DPTR,#HPRT_O1
MOV A,PORT_O1
MOVX @DPTR,A ;Comand de refacere stare port "port01" de
comand
ERR_RESET:
MOV R0,#90H
MOV R1,#57H
MOV R2,#23
;Pregtire registre pentru transferul pe bloc al informaiilor de stare
;Registrul R0 este pointer-ul surs, registrul R1 este pointer-ul destinaie i
;registrul R2 este contorul utilizat pentru transferul blocului de date de stare (23D ;lungimea acestuia), din memoria intern extins15 n memoria SRAM ncepnd de
;la adresa 57H
ERR_LOOP1:
MOV A,@R0
;Copiaz informaie surs n registrul A
MOV @R1,A
;Slaveaz registrul A n memoria intern
INC R1
INC R0
;Incrementeaz pointerii
;Execut copiere bloc de la 90H
DJNZ R2,ERR_LOOP1
la 57H
ORL PCON,#10H
MOV T3,#00H
;Anclanare WATCH DOG
;Aceast operaie trebuie realizat periodic la execuia programului pentru a
;preveni generarea unui semnal de RESET
MOV A,STARE
;Locaia reine ultima stare postat.
Indexarea ;strilor este fcut natural n ordinea de apariie a acestora
;Postarea indexului strii se face ntotdeauna dup ce starea respectiv a fost atins.

14

Am plasat n zona de memorie intern extins o copie a tuturor variabilelor de stare


importante, cci 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, cci ea este accesat doar prin instruciunea MOV @R0,A (deci indirect)
15
Procesorul 80C552 prezint o memorie intern extins (256 bytes), dintre care primii 128
sunt identici cu cei ai procesoarelor 8051, iar urmtorii sunt "umbrii" de zona SFR a UC.
Accesarea lor poate fi fcut doar indirect prin intermediul registrului R0.

229

7. Aplicaii

CJNE A,#00,ERR_RESET2 ;Testare "COLD RESET"16 -stare 0


JMP ERR_RESET1
ERR_RESET2:
CJNE A,#01H,ERR_RESET3 ;Testare - stare 1
JMP ERR_RESET1
;Revenire la starea 1
ERR_RESET3:
CJNE A,#02H,ERR_RESET4 ;Testare stare 2 MOV DPTR,#ERR_END_DOZ
;Stare DOZARE
PUSH DPL
PUSH DPH
SETB DOZ
;Se reia procesul de dozare cu considerarea greutii dozate pn la momentul
;apariiei incidentului17
JMP ERR_DOZ
ERR_RESET4:
CJNE A,#03H,ERR_RESET5 ;Testare stare 3
JMP ERR_TEMPO1
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 ateptare apsare 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_RESET1 ;Testare stare 8
JMP ERR_TEMPO_GOL
PRIM_RESET:
;Programul de iniializare la Cold Reset
MOV R2,#7FH
MOV R0,#0FFH
INIT_2:
MOV @R0,#00H
16

Este necesar testarea redundant a acestei stri cci apariia semnalelor parazite are
caracter aleator
17
Aceast stare este tratat deosebit de celelalte, cci este necesar o cntrire distinct a
pulberii aflate n buncrul cntarului dozator, iar pe de alt parte trebuie analizat valoarea
curent a greutii 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 depit.

230

MICROCONTROLLERE

DEC R0
DJNZ R2,INIT_2
MOV R0,#0D0H
MOV @R0,#5AH
;ERR_RESET1:
;Iniializare valori prescrise implicite. Reprezint valorile iniiale care asigur
;starea de baz a sistemului dozator.
MOV VAL_PRESCR_L,#40H
MOV VAL_PRESCR_H,#1FH
;Urmeaz instruciunile ce detaliaz aciunea sistemului n fiecare dintre posibilele
stri 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 aplicaiilor dedicate impune o
deosebit rigurozitate. Nu este suficient proiectarea corect din punct de vedere
hardware i software a aplicaiei, sistemul realizat va trebui s fie integrat corect n
mediul, procesul, aplicaia mai larg pentru care a fost construit. Complexitatea
interaciunilor ce apar n "viaa" sistemului nu poate fi n totalitate simulat, ceea
ce face ca etapa de testare "n sistem" o proiectului s aibe o importan esenial.
Nu putem afirma c o anume etap a proiectrii este mai puin important dect
alta, dar prin iterarea raional a etapelor de proiectare, prin testarea cu o colecie
ct mai larg de stimuli a sistemului i prin verificarea sa ntr-un mediu
"zgomotos" putem atinge sigurana necesar funcionari satisfctoare a acestuia.
Este necesar, deseori, s construim nc din faza de proiectare odat cu
programele de funcionare i "uneltele" specifice de testare a sistemului. Aceste
"unelte" nu sunt altceva dect rutine, programe, uneori complexe, ce asigur
validarea corectei funcionri corespunztoare fiecrei etape pe care sistemul o
parcurge n funcionare. Dezvoltarea programelor de testare simultan cu
proiectarea sistemului reduce substanial timpul necesar validrii finale.
Nu trebuie neglijat principiul redundanei funcionale -oglindit att la
nivel fizic (hard) ct i la nivel logic (soft), atunci cnd dorim s realizm un
sistem robust i fiabil. Va trebui s verificm ntotdeauna dac suntem corect
"ancorai" n timp, dac sistemul nostru i menine proprietatea de a fi un sistem
de reglare "n timp real", asta presupune s verificm dac toate informaiile pe
care sistemul de comand le prelucreaz sunt "oportune", deci n concordan cu
teorema eantionrii.
Aplicaiile ce sunt detaliate pe CD-ul ataat lucrrii sunt aplicaii "reale" ce
funcioneaz n cadrul unor ntreprinderi ca: ELCO- SA Tg. Secuiesc, CIMUS SA
Cmpulung i F.S. SA Rnov. Ele au fost "validate" ntr-o perioad de funcionare
ce depete civa ani. Aducem mulumiri celor ce le-au testat i ne-au ajutat la
implementarea acestora, ajutorul lor a fost deosebit de important, iar pentru aceasta
le mulumim

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