Curs Avr

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

Sunteți pe pagina 1din 235

PREFA!

"

Se consider! anul "97", cnd INTEL a anun#at producerea primului microprocesor, ca momentul trecerii de la electronica implementat! cablat la electronica realizat! programat. Primul microprocesor 4004 a fost conceput de M. E. Hoff ca un procesor pu#in simplificat pentru a putea fi implementat, la vremea aceea, pe un singur chip n siliciu. Ini#ial, microprocesorul nu a fost un computeron-a-chip, de$i n timp a ajuns la acest stadiu; conceptul de microprocesor s-a dezvoltat $i spre alte implement!ri specifice: microcontroller, microcalculator, procesor de semnale (DSP). Oricare din aceste circuite, pentru a deveni parte a unui sistem, impune un proces de proiectare care se bazeaz! n egal! m!sur! att pe componenta hardware ct $i pe componenta software. Microprocesorul, sau celelalte variante ale sale, integrat ntr-un sistem aduc acestuia acea performan#!, care atunci cnd este realizat! de fiin#a uman! este referit! ca inteligen#!. n general, microprocesorul este integrat ca unitate central! de procesare n sistemele digitale de calcul. Actual, aproape toate sistemele au o arhitectur! de sistem digital particularizndu-se n func#ie de aplicare/utilizare. Aplica#iile care nu sunt, n sensul clasic, sisteme digitale de calcul sunt n general implementate pe baz! de microprocesor sau DSP. Implement!rile sistemelor pe baz! de microcontroller ori DSP devin simple $i ieftine -pentru c! utilizeaz! deja o component! de serie, devin performante pentru c! utilizeaz! o component! care poate asigura suport pentru inteligen#!, devin flexibile pentru c! utilizeaz! o component! ce poate fi programat!. For#a care a impus sistemele pe baz! de microcontroller const! n programabilitatea unei componente de serie. Pentru sistemele la care o component! de serie, chiar programabil! n software, nu duce la rezultatele cele mai bune au ap!rut implement!rile pe baz! de circuite ASIC (Application Specific Integrated Circuits). Spre deosebire de sistemele pe baz! de microcontroller, unde func#ionarea dorit! se ob#ine, n software, printr-un anumit program, la sistemele pe baz! de circuite ASIC func#ionarea dorit! se ob#ine prin structurarea 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 aplica#ia respectiv! $i de cerin#ele impuse. Prezenta carte constituie un material, dar f!r! a absolutiza, pentru abordarea sistemelor pe baz! de microcontroller. Materialul prezentat $i CD-ul

VI

MICROCONTROLLERE

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

Bra$ov, Ianuarie 200"

CUPRINS

DESCRIERE GENERAL! ________________________________________________ 1 1.1 ISTORIC __________________________________________________________ 1 1.2 SCHEMA BLOC GENERAL! ____________________________________________ 3 1.3 ARHITECTURA MC__________________________________________________ 5 1.3.1 Unitatea central" de prelucrare ____________________________________ 6 1.3.2 Memoria _____________________________________________________ 8 1.3.3 Dispozitive I/O _______________________________________________ 10 1.4 SISTEMUL DE NTRERUPERI___________________________________________ 28 1.5 MANAGEMENTUL PUTERII____________________________________________ 34 1.6 SCHEMA BLOC A UNUI MC____________________________________________ 35 1.7 FAMILII DE MC ___________________________________________________ 37 1.8 CLASIFICAREA MC ________________________________________________ 41 PROGRAMAREA SISTEMELOR CU MC _________________________________ 43 2.1 PROIECTAREA PROGRAMELOR DE APLICA#IE _____________________________ 43 2.1.1 Generalit"$i __________________________________________________ 43 2.1.2 Instruc$iuni ale MC____________________________________________ 50 2.1.3 Instrumente software de proiectare: MC 8051 _______________________ 56 2.1.4 Instrumente software de proiectare: MC PIC ________________________ 67 MICROCONTROLLERE MOTOROLA ___________________________________ 71 3.1 MC M68HC05____________________________________________________ 72 3.1.1 Memoria intern" ______________________________________________ 72 3.1.2 Unitatea central" ______________________________________________ 73 3.1.3 Moduri de adresare ____________________________________________ 75 3.1.4 Setul de instruc$iuni ___________________________________________ 76 3.1.5 Sistemul de ntreruperi _________________________________________ 77 3.1.6 Interfe$e %i periferice on-chip ____________________________________ 78 3.1.7 Managementul puterii__________________________________________ 87 3.1.8 Autoverificarea _______________________________________________ 88 3.1.9 Programarea EPROM __________________________________________ 88 3.2 MC M68HC08____________________________________________________ 89 3.2.1 Unitatea central" 6808 _________________________________________ 90 3.2.2 Interfe$e %i periferice on-chip ____________________________________ 91 3.2.3 Programarea memoriei EEPROM ________________________________ 96 3.3 MC PE 16 BI#I - 6816_______________________________________________ 97 3.3.1 Modulul de integrare (SIM, System Integration Module) ______________ 98 3.3.2 Interfe$e_____________________________________________________ 98 3.4 MC PE 32 DE BI#I - 68300 ___________________________________________ 99 3.5 DATE COMPARATIVE PENTRU MC MOTOROLA CISC_____________________ 100

VIII

MICROCONTROLLERE

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

1
DESCRIERE GENERAL!

1.1

ISTORIC

Privind evolu!ia istoric" a opera!iei de comand" a unui proces putem contura imaginea unui microcontroller (MC - se va folosi n continuare aceast" prescurtare pentru a numi un microcontroller). Un controller este un sistem folosit pentru a comanda #i a prelua st"ri de la un proces sau un aspect al mediului nconjur"tor. La nceput un controller era un echipament de mari dimensiuni. Dup" apari!ia microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de miniaturizare a continuat, toate componentele necesare unui controller au fost integrate pe acela#i chip. S-a n"scut astfel calculatorul pe un singur chip specializat pentru implementarea opera!iilor de control; acesta este microcontroller-ul. Un microcontroller este un circuit realizat pe un singur chip care con!ine tipic: unitatea central"; generatorul de tact (la care trebuie ad"ugat din exterior un cristal de cuar! sau n aplica!ii mai pu!in preten!ioase, un circuit RC); memoria volatil" (RAM); memoria nevolatil" (ROM/PROM/EPROM/EEPROM); dispozitive I/O seriale #i paralele; controller de ntreruperi, controller DMA, num"r"toare/temporizatoare (timers), covertoare A/D #i D/A, etc.; periferice.

Pre!ul unui MC este redus din cauza cantit"!ilor mari n care se fabric". Pre!ul mic al MC aduce cu sine #i mic#orarea pre!ului sistemelor de control (se mic#oreaz" inclusiv costul proiect"rii). Diferen!ele dintre microprocesor #i unitatea central" a MC se atenueaz" n timp. Astfel, marii constructori de procesoare au realizat ni#te circuite care s-ar putea numi super-microcontroller-e, a#a cum sunt Motorola 68EC300, INTEL 386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.

MICROCONTROLLERE

Cu un MC se poate realiza un controller integrat (Embedded Controller, EC). Un controller integrat face parte dintr-un sistem construit cu un anumit scop, altul dect calcule generale. Pe lng" MC, un controller integrat are nevoie de hardware suplimentar pentru a-#i ndeplini func!ia. Importan!a MC este dovedit" incontestabil de pia!a care este n continu" cre#tere. Astfel, evolu!ia vnz"rilor de MC n lume se reflrct" n tabelele $.$ #i $.2.
Tabelul 1.1 Evolu"ia vnz#rilor MC n lume (n milioane dolari)

MC 4-bit 8-bit $6-bit

'90 $393 2077 $92

'92 $596 2862 340

'94 $76$ 4689 8$0

'96 $849 6553 $628

'97 $88$ 7529 2$9$

'98 $856 8423 2969

'99 (estimat) $8$6 92$9 3678

'00 (estimat) $757 97$5 4405


Tabelul 1.2

Evolu"ia vnz#rilor MC n lume (n milioane buc#"i)

MC 4-bit 8-bit $6-bit

'90 778 588 22

'92 979 843 45

'94 $063 $449 $06

'96 $$00 2$23 227

'97 $096 2374 3$3

'98 $064 2556 4$9

'99 (estimat) $025 268$ 50$

'00 (estimat) 970 2700 585

Principalii produc"tori de microprocesoare au realizat n $994 #i $995 urm"toarele cifre de afaceri (tabelul $.3).
Tabelul 1.3 Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microprocesoare (n milioane dolari)

Produc"tor Intel AMD Motorola IBM TI Cyrix Hitachi NEC LSI Logic IDT

$994 $0800 88$ 78$ 468 2$9 2$0 $88 $00 58 45

$995 8036 992 827 297 202 240 66 82 5$ 25

$. Descriere general"

n prezent datele arat" modific"ri de structur"; de exemplu cifra de afaceri a AMD se apropie de cea a lui INTEL. Cifra de afaceri, ca ordin de m"rime, era deja n anii $994, $995 apropiat" de cea realizat" din vnz"ri de microprocesoare (tabelul $.4).
Tabelul 1.4 Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microcontrollere (n milioane dolari)

Produc"tor Motorola NEC Mitsubishi Hitachi Intel TI Philips Matsushita Lucent (AT&T) Toshiba

$994 $78$ $42$ 945 899 835 807 524 500 492 400

$995 $5$$ $208 708 782 605 534 345 4 $3 275 328

1.2

SCHEMA BLOC GENERAL!

Vom defini un microcontroller pornind de la o reprezentare simplificat" a sa n interac!iune cu mediul (figura $.$).
Programe

Memoria

Intr"ri

Unitatea central" de prelucrare Generator de tact

Ie#iri

Figura 1.1 Schema simplificat" a unui microcontoller

MICROCONTROLLERE

Ca intr"ri se folosesc de regul" semnale provenind de la comutatoarele individuale sau de la traductoare (de temperatur", de presiune, foto, traductoare specializate). Intr"rile pot fi digitale sau analogice. Intr"rile digitale vehiculeaz" semnale discrete, informa!ia "citit"" fiind informa!ia ce se e#antioneaz" la momentul citirii liniei respective. Intr"rile analogice vehiculeaz" informa!ii exprimabile prin func!ii continue de timp. "Citirea" acestora de c"tre microcontroller presupune prezen!a unor circuite capabile s" prelucreze aceste informa!ii, fie comparatoare analogice, fie convertoare analog-numerice, ale c"ror ie#iri sunt citite de c"tre MC. Ie#irile sunt fie analogice, caz n care reprezint" de fapt ie#iri ale convertoarelor numeric-analogice, fie sunt digitale, caz n care informa!ia este n general memorat" pe acestea pn" la o nou" scriere operat" de c"tre UC la un port al MC. Ie#irile pot comanda dispozitive de afi#are, relee, motoare, difuzoare, etc. O structur" mai detaliat", care include blocurile principale, este reprezentat" n figura $.2.

Bus de adrese Intr"ri digitale

Memorie pentru programe Memorie pentru date

Bus de date Ie#iri digitale

Dispozitive I/O

Reset

Unitatea centrala de prelucrare (UCP)

Oscilator

Figura 1.2 Schema bloc a unui microcontroller

$. Descriere general"

Se poate distinge o prim" diferen!" fa!" de calculatoarele personale, unde intr"rile se fac de regul" de la tastatur" #i ie#irile pe monitorul TV sau la imprimant". Dac" un calculator personal este folosit pentru a prelucra informa!ii #i a afi#a rezultatele pe monitor sau hrtie, un MC comand" un proces. Un element important, f"r" de care un MC nu poate func!iona, este programul (sau programele), care se stocheaz" n memoria proprie MC. Un MC poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o unitate central", memorie, oscilator pentru tact #i dispozitive I/O. Un MC poate fi privit ca un microprocesor care pe acela#i chip mai con!ine memorie #i o serie de interfe!e. Natura #i complexitatea aplica!iei n care este folosit MC determin" performan!ele unit"!ii centrale, capacitatea de memorie #i tipul interfe!elor ce compun structura intern" a MC.

1.3

ARHITECTURA MC

Arhitectura unui MC define#te atributele sistemului a#a cum sunt ele v"zute de un programator n limbaj de asamblare. Deoarece un microcontroller este un caz particular de calculator, (calculator specializat pentru opera!ii I/O, realizat pe un singur chip), acesta este compus din cele cinci elemente de baz": unitate de intrare, unitate de memorie, unitate aritmetic" #i logic", unitate de control #i unitate de ie#ire. Unitatea de control mpreun" cu unitatea aritmetic" #i logic" compun mpreun" unitatea central" de prelucrare pe care o vom referi n continuare prescurtat cu UCP. Unit"!ile de intrare #i ie#ire vor fi tratate mpreun" #i vor fi referite prescurtat ca sistem I/O. Blocurile componente ale MC sunt legate ntre ele printr-o magistral" intern" (bus). Magistrala vehiculeaz" semnale de adres", de date #i semnale de control. M"rimea acestor magistrale constituie una dintre caracteristicile cele mai importante ale unui MC. Prin magistrala de adrese unitatea central" de prelucrare (UCP) selecteaz" o loca!ie de memorie sau un dispozitiv I/O, iar pe magistrala de date se face schimbul de informa!ie ntre UCP #i memorie sau dispozitivele I/O. ntre UCP #i memorie sunt transferate att date ct #i instruc!iuni. Acestea se pot transfera pe o singur" magistral" de date sau pe magistrale de date diferite. Arhitectura von Neumann prevede existen!a unui bus unic folosit pentru circula!ia datelor #i a instruc!iunilor. Cnd un controller cu o astfel de arhitectur" adreseaz" memoria, bus-ul de date este folosit pentru a transfera nti codul instruc!iunii, apoi pentru a transfera date. Accesul fiind realizat n 2 pa#i, este destul de lent. Arhitectura Harvard prevede un bus separat pentru date #i instruc!iuni. Cnd codul instruc!iunii se afl" pe bus-ul de instruc!iuni, pe bus-ul de date se afl"

MICROCONTROLLERE

datele instruc!iunii anterioare. Structura MC este mai complex", dar performan!ele de vitez" sunt mai bune. Magistralele interne, dup" numele lor, nu sunt accesibile n exterior la nivel de pin. Aceast" stare caracterizeaz" regimul normal de func!ionare. n regimuri speciale de func!ionare, numite diferit la diferitele tipuri de MC, semnalele magistralelor de adrese #i de date sunt accesibile la nivel de pin sacrificnd func!iile ini!iale ale pin-ilor respectivi. Totodat" este necesar s" fie livrate n exterior #i semnale de comand" (cel pu!in comand" de scriere WR #i comand" de citire RD). Aceast" facilitate este util" pentru extensii de memorie sau pentru a ata#a sistemului interfe!e suplimentare. Ea nu este posibil" n mod normal de func!ionare deoarece aceasta ar presupune existen!a unui num"r foarte mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese #i de date pot fi aduse la pin multiplexat sau nemultiplexat. Familia MCS-5$ este un exemplu pentru acces multiplexat la magistrale. Accesul se face n doi pa#i; n primul pas se conecteaz" liniile de adres" la pinii portului sacrificat, iar n al doilea pas se conecteaz" datele la aceia#i pini. Pentru a putea utiliza informa!ia de adresare, adresa se memoreaz" ntr-un latch, de asemenea exterior microcontroller-ului. Complicarea accesului la magistralele interne prin multiplexare este justificat" de asemenea din ra!iunea men!inerii unui num"r ct mai mic de pini la capsul". MC mai pu!in performante (ex. - MC low cost) nu au magistralele interne accesibile la nivel de pin. Ca urmare a celor prezentate se poate aprecia performan!a unui MC din punct de vedere al magistralei interne dup" urm"toarele criterii: dimensiunea magistralei de date; dimensiunea magistralei de adrese; accesibilitatea n exterior la magistrale; magistrale accesibile multiplexat sau nemultiplexat.

1.3.1 Unitatea central# de prelucrare


Unitatea central" de prelucrare este compus" din unitatea aritmetic" #i logic" (UAL) #i din unitatea de control. Unitatea aritmetic" #i logic" este sec!iunea responsabil" cu efectuarea opera!iilor aritmetice #i logice asupra operanzilor ce i sunt furniza!i. Modul de implementare a opera!iilor este transparent pentru utilizator; important pentru utilizatorul de MC este repertoriul opera!iilor implementate pentru a aprecia posibilitatea implement"rii optime a aplica!iei particulare de control. De asemenea este important timpul de execu!ie al fiec"rei opera!ii pentru a aprecia dac" timpul necesar proces"rii complete satisface cerin!ele de timp ale aplica!iei. Unitatea ce control este responsabil" cu decodificarea codului opera!iei con!inut de codul unei instruc!iuni. Pe baza decodific"rii unitatea de control

$. Descriere general"

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

MICROCONTROLLERE

Registrele interne pot avea diferite dimensiuni, astfel registrele acumulator au dimensiunea egal" cu cea a magistralei de date (8, $6 sau 32 bi!i). Registrul num"r"tor de program are dimensiunea egal" cu cea a magistralei de adrese. Registrul indicator de stiv" poate avea dimensiunea mai mic" dect a magistralei de adrese permi!nd localizarea stivei ntr-o zon" restrns" a memoriei RAM. Exist" #i MC cu stiv" automat", acestea nu au nevoie de indicator de stiv" dar au dezavantajul c" nu se pot folosi mai mult de 2-4 nivele de stiv" (MC din familia PIC).

1.3.2 Memoria
MC folosesc diferite tipuri de informa!ii, care sunt stocate n diferite tipuri de memorii. Instruc!iunile care controleaz" func!ionarea MC trebuie stocate ntr-o memorie nevolatil", unde informa!iile se p"streaz" #i dup" oprirea #i repornirea sursei de alimentare. Rezultatele intermediare #i variabilele pot fi nscrise ntr-o memorie volatil", la acestea este important s" se poat" face scrierea /citirea rapid #i simplu n timpul func!ion"rii. Memoria RAM (Random Access Memory) este o memorie volatil" care poate fi citit" sau scris" de unitatea central". Loca!iile din RAM sunt accesibile n orice ordine. Pe chip, memoria RAM ocup" mult loc #i implicit costurile de implementare sunt mari. De aceea un MC include de obicei pu!in RAM. Memorie RAM static alimentat" de la baterie se folose#te pentru stocarea nevolatil" a cantit"!ilor mari de date, la o vitez" de acces mare #i cu un num"r nelimitat de #tergeri #i renscrieri. Memoria ROM (Read Only Memory) este cea mai ieftin" #i cea mai simpl" memorie #i se folose#te la stocarea programelor n faza de fabrica!ie. Unitatea central" poate citi informa!iile, dar nu le poate modifica. Memoria PROM (Programmable Read Only Memory) este similar" cu memoria ROM, dar ea poate fi programat" de c"tre utilizator. Dup" posibilit"!ile de #tergere, aceast" memorie poate fi de mai multe feluri: Memoria EPROM (Erasable PROM) care se poate #terge prin expunere la raze ultraviolete. MC cu EPROM au un mic geam de cuar! care permite ca chip-ul s" fie expus la radia!ia ultraviolet". %tergerea este neselectiv", adic" se poate #terge doar ntreaga informa!ie #i nu numai fragmente. Memoria poate fi #tears" #i renscris" de un num"r finit de ori. Programarea EPROM-ului necesit" o procedur" special", iar MC cu EPROM au nevoie de regul" pentru nscrierea EPROM-ului de o tensiune auxiliar", de $2 V de exemplu. Unele MC au incluse circuite de programare a memoriei EPROM, cu ajutorul c"rora unitatea central" poate programa memoria EPROM. n timpul program"rii memoria EPROM nu este conectat" la magistrala de date #i adrese. Unele MC sunt prev"zute cu mod special de lucru, n care sunt v"zute din exterior ca ni#te memorii EPROM obi#nuite #i pot fi astfel programate cu orice programator.

$. Descriere general"

OTP (One Time Programmable PROM) se folose#te pentru multe serii de MC. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat ntr-o capsul" de material plastic f"r" fereastr", care este mult mai ieftin". Memoria nu se poate #terge sau reprograma. Pre!ul unui MC cu OTP este mic, viteza este bun", dar aplica!iile sunt lipsite de flexibilitate. Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) poate fi #tears" electric de c"tre unitatea central", n timpul func!ion"rii. %tergerea este selectiv", iar pentru renscriere trebuie parcur#i mai mul!i pa#i. Memoria EEPROM echipeaz" multe MC, fiind ieftin". n memoria EEPROM se memoreaz" un mic num"r de parametri care se schimb" din timp n timp. Memoria este lent" #i num"rul de #tergeri/scrieri este limitat (tipic $0 000). Memoria FLASH este o memorie asem"n"toare EPROM #i EEPROM n sensul c" poate fi #tears" #i reprogramat" n sistemul n care este folosit" (f"r" a fi necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesit" fereastr" pentru #tergere. Ca #i EEPROM, memoria FLASH poate fi #tears" #i programat" electric. Memoria FLASH nu permite #tergerea individual" de loca!ii, utilizatorul poate s" #tearg" doar ntregul con!inut. Din punct de vedere al locului #i modului de programare a memoriilor de tip PROM exist" dou" concepte: ICP (In Circuit Programming) programarea memoriei cnd MC se afl" pe placa de cablaj imprimat a aplica!iei; ISP (In System Programming) presupune posibilitatea de reprogramare n func!ionare a sistemului. De exemplu la autovehiculele comandate de MC, schimbarea tipului benzinei sau schimbarea unei legi privitoare la poluare pot fi actualizate n programul MC f"r" ca acesta s" fie scos din autovehicul.

n func!ie de num"rul aplica!iilor n care urmeaz" s" fie folosit MC se recomand" folosirea MC cu ROM pentru volum mare de produc!ie (ROM se nscrie cu masc" la fabricant), OTP pentru volum mic de produc!ie #i EPROM pentru prototipuri. Tipul de memorie #i capacitatea memoriei din echiparea unui MC sunt caracteristici particulare fiec"rui tip de circuit. Printre alte diferen!e, ace#ti parametri sunt diferi!i pentru membrii unei aceleia#i familii de MC. Se vor prezenta date concrete pentru exemplificare ntr-un tabel recapitulativ la sfr#itul capitolului (tabelul $.6). Pentru a aprecia un MC sub aspectul componentei memorie este necesar s" se considere urm"toarele caracteristici: varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM /EEPROM /FLASH; capacitatea memoriei aflat" pe chip; u#urin!a cu care se poate programa (programare n circuit sau nu, necesitatea unor tensiuni de programare suplimentare).

10

MICROCONTROLLERE

1.3.3 Dispozitive I/O


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

Dezavantaje ale map"rii n spa!ii separate:

Avantajul map"rii n spa!iu comun:

$. Descriere general"

11

toate instruc!iunile de lucru cu memoria #i toate modurile de adresare sunt utilizabile #i n tratarea dispozitivelo I/O (programarea opera!iilor I/O este foarte flexibil"); este susceptibil la erori software; spa!iul de adresare disponibil pentru memorie este mai mic.

Dezavantajele map"rii n acela#i spa!iu:

Avantajul map"rii ntr-un spa!iu comun este acela c" se poate opera cu porturile la fel ca #i cu o loca!ie de memorie; multe opera!ii aritmetice #i logice folosesc operanzi direct de la port, datele pot fi mutate ntre porturi cu o singur" instruc!iune, con!inutul unui port poate fi citit, incrementat #i rezultatul scris din nou la port de asemenea cu o singur" instruc!iune. Se contureaz" trei direc!ii de evolu!ie a MC din punct de vedere al resurselor disponibile pe chip. O direc!ie este dezvoltarea de MC de uz general care sunt puse la dispozi!ia utilizatorului pentru a realiza aplica!ii de la A la Z. O a doua direc!ie o reprezint" dezvoltarea de MC specializate care dispun de resurse specifice unui anume gen de aplica!ii (automobile, telecomunica!ii, Internet, ac!ion"ri electrice, etc). Pentru aceste MC specializate att structura hardware ct #i instruc!iunile sunt specifice #i sunt calate pe un gen particular de aplica!ii. Exist" o a treia tendin!" de dezvoltare de MC care dispun de resurse hardware configurabile la utilizator. ntre resursele configurabile se afl" memoria, elemente de logic" programat", module specializate, gen convertoare A/D #i convertoare D/A, #i module de procesare avansat" a datelor.

Porturi paralele
Porturile paralele I/O faciliteaz" transferul simultan al mai multor bi!i ntre MC #i mediu. Num"rul de bi!i transfera!i ca urmare a execut"rii unei instruc!iuni depinde de organizarea particular" a porturilor n cadrul MC; unele porturi sunt organizate pe 8 bi!i, altele pe un num"r mai mare de bi!i. Sensul transferului, I (input) sau O (output) este programabil #i se stabile#te de obicei ntr-un registru de sens. Pentru a veni n ntmpinarea cerin!elor specifice de interac!iune cu mediul sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor paralele I/O. Mecanismul presupune o structur" hardware corespunz"toare #i instruc!iuni pentru manipularea informa!iei la nivel de bit (un operand este un bit). Astfel, la execu!ia unei instruc!iuni orientat" pe bit, exist" posibilitatea de a transfera un singur bit, de a masca bi!i care nu sunt folosi!i ntr-o opera!ie particular" #i de a efectua opera!ii logice pe un singur bit al unui port paralel I/O. Datorit" capabilit"!ii de manipulare la nivel de bit la descrierea caracteristicilor sistemului paralel I/O se specific" num"rul total de linii I/O.
MC68HC705C8 dispune de 3$ de linii I/O digitale de uz general grupate n patru porturi (A, B, C #i D). Porturile A, B, #i C sunt porturi de cte opt bi!i fiecare #i pun

12

MICROCONTROLLERE

la dispozi!ie n total 24 de linii care pot fi folosite fie ca intr"ri, fie ca ie#iri. Portul D dispune de 7 linii care pot fi folosite doar ca int"ri.

Circuitul de interfa!" al portului paralel este responsabil de corectitudinea transferului cu dispozitivul I/O. n acest scop se foloseste una din urm"toarele metode de sincronizare: Transfer direct (brute-force method) n cadrul acestei metode interfa!a are doar rolul de a transfera semnalele de la unitatea central" spre dispozitivul I/O (dac" este o opera!ie de ie#ire) sau de la dispozitivul I/O la unitatea central" (dac" este o opera!ie de intrare). Se folose#te acest tip de transfer dac" se cite#te nivelul unui poten!ial, dac" se comand" la ie#ire un nivel logic (pentru comanda unor LED-uri, de exemplu). Transfer strobat (strobe method) aceast" metod" folose#te semnale de strobare pentru a indica starea stabil" a semnalelor la porturile de intrare sau de ie#ire. ntr-o opera!ie de intrare, dispozitivul de intrare genereaz" semnalul de strobare cnd datele sunt stabile la pinii portului de intrare al interfe!ei. Stocarea informa!iei n registrul de date al interfe!ei se face cu semnalul de strobe. Daca este vorba de o opera!ie de ie#ire, cnd semnalele de date sunt stabile, interfa!a elaboreaz" semnal de strobare cu care dispozitivul I/O preia efectiv datele. Aceat" metod" poate fi folosit" dac" interfa!a #i dispozitivul I/O lucreaz" la viteze comparabile. Transfer cu protocol (handshake method) exist" cazuri n care vitezele de lucru ale celor dou" p"r!i implicate n transfer sunt mult diferite #i metodele mai sus amintite nu ofer" cadrul potrivit pentru transferul datelor. Solu!ia este ca interfa!a #i dispozitivul I/O s" poarte un dialog numit handshake. Sunt necesare dou" semnale de protocol; unul din ele este elaborat de circuitul de interfa!" iar cel"lalt de dispozitivul I/O. Tranzac!iile de protocol difer" pentru opera!ii de intrare #i de ie#ire.

n figura $.3 este ilustrat" organizarea portului A al unui circuit particular (MC68HC705C8).
Bit 7 DDRA7 0 6 5 4 DDRA4 0 3 DDRA3 0 2 DDRA2 0 $ DDRA$ 0 Bit 0 DDRA0 0 DDRA6 DDRA5 0 0

PA7

PA6

PA5

PA4

PA3

PA2

PA$

PA0

Starea registrelor de ie#ire nu este influen!at" de Reset

Figura 1. 3 Organizarea portului paralel A (MC68HC705C8)

$. Descriere general"

13

Registrul DDRA (Data Direction Register port A) este un registru de 8 bi!i ca #i registrul de date PA al portului A . Sub fiecare din registre este reprezentat" starea ini!ial" a registrelor (dup" reset). n cazul particular considerat, portului PA este implicit port de intrare. O structur" posibil" de circuit pentru o linie bidirec!ional" de scriere/citire la porturi este redat" n figura $.4. Se poate constata modul n care ac!ioneaz" bitul din registrul de sens asupra circuitului driver de ie#ire.
Bit DDR

Bit port ie#ire (latch)


[3] [2]

[$]

pin I/O
[$] Buffer de ie#ire [2] Buffer de intrare (activ pentru DDR=0) [3]Buffer de intrare (activ pentru DDR=$)

Figura 1.4 Circuit bidirec!ional de scriere/citire la portul paralel

n partea stng" a diagramei sunt reprezentate leg"turile spre magistrala intern" de date a MC. n func!ie de natura opera!iei efectuate (citire sau scriere) #i de valoarea bitului din registrul de direc!ie sunt posibile opera!iile exprimate n tabelul $.5.
Tabelul 1.5 Func"iile unui pin I/O

Opera!ie scriere scriere citire citire

Bit DDR 0 $ 0 $

Func!ie pin I/O Pinul I/O este n mod intrare; datele pentru scriere vor fi nscrise n latch-ul de ie#ire Datele pentru scriere sunt nscrise n latch-ul de ie#ire #i transferate de buffer-ul [$] pinului I/O Este citit" starea pinului I/O Pinul I/O este n mod ie#ire; este citit" informa!ia din latch-ul de ie#ire.

Se poate observa c" o linie de ie#ire a unui port paralel este mai mult dect un latch simplu; totodat", informa!ia nscris" n latch-ul de ie#ire nu se schimb" dect dac" se efectueaz" o nou" opera!ie de scriere la port. Unele porturi paralele sunt considerate cvasi-bidirec!ionale, ceea ce nseamn" c" o linie poate fi folosit" n acela#i timp ca ie#ire #i ca intrare. Aceast" flexibilitate este considerat" de interes n aplica!ii #i este posibil" printr-un truc.

14

MICROCONTROLLERE

Figura $.5 reprezint" structura unei linii cvasi-bidirec!ionale. Trucul const" n exploatarea facilit"!ilor unui etaj de ie#ire cu drena n gol (open-drain) care n acest exemplu este pev"zut cu o rezisten!" conectat" intern la sursa de alimentare.
Citire latch VCC Pull-up intern D
CLK

Bus intern

Q Q n$

pin I/O

Scriere latch

Citire pin Figura 1.5 Structura unei linii cvasi-bidirec!ionale

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

$. Descriere general"

15

linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este numit mod expandat de lucru. Pentru a evalua capabilitatea porturilor paralele se recomand" considerarea urm"toarelor nsu#iri: Num"rul de linii I/O; Posibilitatea de a programa sensul liniilor I/O; Alte resurse accesibile prin func!ii multiple la liniile I/O; Posibilitatea accesului la magistralele interne Aspecte electrice de interfa!are.

Module de comunica"ii seriale


Comunica!ia serial" este o metod" bine agreat" #i n contextul MC deoarece ofer" compatibilitate cu o gam" extins" de dispozitive #i necesit" un num"r minim de fire, implicit un num"r minim de conexiuni (pini pu!ini). n transferul serial de date este necesar s" se cunoasc" nceputul #i sfr#itul informa!iei transferate. Pentru a identifica cele dou" coordonate emi!"torul #i receptorul trebuie s" fie sincroniza!i. Sincronizarea se poate realiza prin trei metode, dintre care numai dou" sunt folosite n MC, urmnd s" le consider"m doar pe acestea n continuare. Oricare din metode presupune c" durata unui bit este aceea#i att la emi!"tor ct #i la receptor (este folosit acela#i semnal de ceas pentru serializarea informa!iei). Num"rul de bi!i transmi#i ntr-o secund" reprezint" rata de transfer numit" baud rate; aceasta se m"soar" n bi!i/secund" (bps). Durata unui bit este $/(baud rate). Modulul serial asincron Prima metod" considerat" este transferul serial asincron. Modulul serial asincron este referit ca UART (Universal Asynchronous Receiver Transmiter). ntr-un transfer serial asincron nceputul fiec"rui byte este marcat de o tranzi!ie a liniei men!inut" pe durata corespunz"toare unui bit. Sfr#itul este marcat de asemenea de un bit de stop; bitul de stop const" n men!inerea liniei pe durata unui bit ntr-o stare predefinit". ntre bitul de start #i bitul de stop sunt transfera!i bi!ii de informa!ie. O secven!" complet" este compus" dintr-un bit de start, opt sau nou" bi!i de date #i un bit de stop, n total $0 sau $$ unit"!i de cod. Interfa!a serial" asincron" poate fi implementat" n dou" moduri ntr-un MC. Cea mai pu!in costisitoare solu!ie din punct de vedere al cheltuielilor de resurse hardware este un program care s" genereze secven!a de transfer ca #i componen!" #i ca durat" a fiec"rui bit. Programul trebuie s" m"soare durata fiec"rui bit. Solu!ia este costisitoare din punct de vedere al timpului consumat n rularea programului.

16

MICROCONTROLLERE

A doua solu!ie de implementare a interfe!ei seriale este #i cea mai des ntlnit" n MC. Interfa!a este realizat cu un modul hardware specializat. Unitatea central" nscrie informa!ia de transferat ntr-un registru al interfe!ei dup" care sarcina serializ"rii #i a gener"rii secven!ei este finalizat" de c"tre hardware-ul interfe!ei. n cazul recep!iei interfa!a preia secven!a recep!ionat", extrage elementele de sincronizare #i nscrie datele efective ntr-un registru. Datele recep!ionate sunt accesibile unit"!ii centrale n acest registru al interfe!ei. n cazul n care registrul de transmisie este gol sau registrul de recep!ie este plin interfa!a semnalizeaz" starea #i poate chiar suspenda temporar execu!ia programului principal prin ntreruperi hardware. O schem" bloc simplificat" a unei interfe!e seriale asincrone este reprezentat" n figura $.6.
Cerere de ntrerupere c"tre UC

Magistrala intern"

Registru de prescalare

Buffer transmisie

Buffer recep!ie

Baud rate Selec!ie ceas

Registru de deplasare la transmisie

Registru de deplasare la recep!ie

CLK

TxD Figura 1.6 Schema bloc a UART

RxD

Ceasul pentru generarea ratei de transfer poate fi intern sau extern. n cazul n care se selecteaz" ceas intern, acesta se formeaz" din ceasul unit"!ii centrale cu o prescalare. Pentru ca rata de transfer s" fie programabil" ceasul prescalat se divizeaz" n continuare folosind un num"r"tor al unui timer din resursele proprii. Interfa!a UART dispune de un registru de stare #i un registru de control cu ajutorul c"rora se pot prgrama modul de lucru, parametrii de comunica!ie, selectarea ceasului, divizarea ceasului. Conexiunile interfe!ei seriale asincrone sunt disponibile la pini cu func!ii multiple la unul din porturile paralele.

$. Descriere general"

17

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

18

MICROCONTROLLERE

intrarea nSS se conecteaza permanent la $ logic; n cazul n care la master, intrarea nSS devine 0, se seteaza un flag de eroare (MODF) n registrul de stare al interfe!ei seriale sincrone. Pinul nSS al unui master poate fi configurat #i ca ie#ire de uz general prin setarea unui bit n registrul de sens DDRD. Ceilal!i trei pini, aminti!i anterior, sunt dedica!i interfe!ei sincrone atta timp ct este validat". n sistemele care folosesc func!ia serial" sincron" exist" un master #i unul sau mai multe dispozitive slave. Exist" mai multe solu!ii de interconectare; acestea vor fi prezentate n continuare. n cazul n care n sistem este un singur slave, conexiunea este f"cut" ca n figura $.7.
MASTER Registru de deplasare (8b) MISO MOSI generator clock SCK +5V nSS nSS Figura 1.7 Conexiune serial" sincron" master-slave MOSI MISO SLAVE Registru de deplasare (8b)

SCK

Interfa!a serial" sincron" permite interconectarea mai multor dispozitive, dintre care unul singur este master. Exist" dou" solu!ii pentru o conexiune multislave. n una din ele master-ul folose#te ie#iri de porturi pentru a selecta dispozitivul slave cu care se face transferul; n cealalt" solu!ie, toate dispozitivele slave sunt selectate #i sunt legate n inel. Conexiunea cu selec!ia fiec"rui dispozitiv slave este reprezentat" n figura $.8. Un alt mod de a realiza o conexiune serial" sincron" n care exist" mai mult dect un slave este reprezentat n figura $.9. Acest tip de conexiune difer" de precedentul prin urm"taorele: Pinul MISO al fiec"rui slave este conectat la pinul MOSI al dispozitivului slave vecin. Pinul MOSI de la master este n continuare conectat la pinul MOSI de la primul slave. Pinul MISO de la master este conectat cu pinul MISO al ultimului dispozitiv slave. Intr"rile nSS ale tuturor dispozitivelor slave sunt conectate la mas". Nu este necesar" comanad" de selec!ie de la master n aceast" conexiune.

$. Descriere general" SLAVE 0 RD MASTER SCK MOSI RD MISO nSS PB0 PB$ PBk Figura 1.8 Conexiune serial" sincron" single-master multi-slave (varianta $) SLAVE 0 RD MASTER SCK MOSI RD MISO +5V nSS Figura 1.9 Conexiune serial" sincron" single-master multi-slave (varianta 2) MOSI SCK MISO nSS SLAVE $ RD MOSI SCK MISO nSS +5V SLAVE $ RD

19

SLAVE k RD

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

SLAVE k RD

MOSI SCK MISO nSS

Conexiunea din figura $.9 folose#te un num"r minim de pini pentru a controla un num"r mare de dispozitive. Ca dezavantaj, master-ul nu poate selecta un anume slave pentru transferul de date, datele trec prin toate dispozitivele din inel pn" la dispozitivul adresat. Interfa!a serial" sincron" este folosit" pentru a comunica cu periferice cum ar fi un simplu registru de deplasare, un sistem de afi#are LCD sau un sistem de conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfa!a

20

MICROCONTROLLERE

direct periferice cu standarde diferite, provenite de la diver#i produc"tori. Conexiunea serial" sincron" poate fi folosit" #i pentru a extinde num"rul de intr"ri/ie#iri acolo unde acesta este limitat de num"rul de pini ai capsulei MC. Interfe!ele seriale amintite sunt ntlnite n MC cu urm"toarele nume: SCI (Serial Communications Interface) este un subsistem I/O serial indepenent, de tipul full duplex asincron (UART) numit astfel n MC Motorola. SPI (Serial Peripheral Interface) este un modul serial folosit pentru a comunica sincron la distan!e mici cu viteze de pn" la 4 Mbps SCI+ este similar cu SCI, are n plus suport pentru comunica!ii seriale sincrone. Dispune de o ie#ire de ceas folosit" pentru a transfera date n mod sincron cu un periferic de tip SPI. SIOP (Simple I/O Port) este o implemenatre mai simpl" a SPI.

Module Timer
Natura aplica!iilor pentru care s-a n"scut microcontroller-ul implic" o multitudine de func!ii de timp puse la dispozi!ia utilizatorului prin module de timp numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai mult sau mai pu!in complex. Un sistem timer obi#nuit pune la dispozi!ie un set de func!ii implementate pe baza unui num"r"tor liber central #i a unor blocuri func!ionale pentru fiecare func!ie n parte. Timer-ul are n structura sa, dintre toate celelalte subsisteme, cele mai multe registre. Toate func!iile unui timer pot genera ntreruperi independente; fiecare are controlul propriu #i propriul vector de ntrerupere. Modulele timer complexe sunt construite cu arii de num"rare programabile (PCA). Pentru aplica!ii speciale n timp real s-au construit module timer cu unitate aritmetic" #i logic" proprie. Timer-ul este folosit pentru a m"sura timpul #i pentru a genera semnale cu perioade #i frecven!e dorite. Timer-ele nu sunt doar circuite cu func!ii de temporizare; n modulul timer sunt implementate cteva mecanisme care pun la dispozi!ia utilizatorului func!ii specifice. Mecanismul de comparare permite controlul unor semnale de ie#ire; mecanismul de captur" permite monitorizarea unor semnale de intrare; num"r"toarele interne permit generarea de referin!e de timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini software, #.a. Timer-ul poate fi folosit practic pentru orice func!ie de timp, inclusiv generarea unor forme de und" sau conversii D/A simple. Func!iile oferite de un timer sunt: $. Captur" la intrare (IC - input capture) - aceast" func!ie se bazeaz" pe posibilitatea de a stoca valoarea num"r"torului principal la momentul apari!iei unui front activ al unui semnal extern. Facilitatea permite m"surarea l"!imii unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit" #i ca referin!" de timp pentru declan#area altor opera!ii.

$. Descriere general"

21

2. Comparare la ie#ire (OC - output compare) - se compar" la fiecare impuls de ceas valoarea num"r"torului principal cu cea a unui registru. Dac" se constat" egalitate, n func!ie de programarea anterioar" pot avea loc urm"toarele evenimente: declan#area unei ac!iuni la un pin de ie#ire (op!ional), setarea unui flag ntr-un registru sau generarea unei ntreruperi pentru unitatea central" (op!ional). Func!ia este folosit" pentru a genera ntrzieri sau pentru a genera o form" de und" cu valori dorite pentru frecven!" #i pentru factorul de umplere . 3. ntreruperi n timp real (RTI real-time interrupt) ntr-un sistem exist" sarcini care trebuiesc executate periodic sau care nu permit dep"#irea unui interval limit" ntre doua execu!ii. Aceste sarcini sunt lansate ca rutine de tratare a ntreruperii generate de timer. 4. COP (computer operating properly) watchdog aceast" func!ie este folosit" pentru a reseta sistemul n cazul n care din erori de programare (bugs) sau erori n desf"#urarea programului datorate perturba!iilor mediului, registrul COP nu este accesat ntr-un interval de timp prescris. 5. Acumulare de pulsuri (pulse accumulator) este func!ia folosit" pentru a num"ra evenimentele ce apar ntr-un interval de timp determinat sau pentru a m"sura durata unui impuls. Num!r!torul liber n figura $.$0 sunt prezentate elementele de baz" din componen!a unui timer, partea de num"r"tor liber.
TOI

Cerere de ntrerupere

TOF
TCNT(H) TCNT(L)

Clock MC

: $,4,8,$6

Num"r"tor $6 biti

La RTI, COP #i acumulator de impulsuri

Figura 1.10 Schema bloc a unui timer (MC 68HC$$) num"r"torul liber

Num"r"torul este pilotat de un clock provenit din clock-ul unit"!ii centrale divizat cu un factor de regul" programabil. Num"r"torul este nscris cu 0 doar la reset, iar n rest este un registru de tip read-only. Cnd num"r"torul tranzi!ioneaz" din starea FFFFh n starea 0000h, se seteaza flag-ul TOF (timer overflow) aflat

22

MICROCONTROLLERE

ntr-un registru neopera!ional asociat modulului timer. Pentru a autoriza generarea unei ntreruperi este necesar s" fie setat un flag de autorizare (TOI). Factorul de divizare a clock-ului este stabilit ntr-un registru asociat. Registrul TCNT de $6 bi!i permite citirea st"rii num"r"torului. Se recomand" citirea num"r"torului folosind o instruc!iune care opereaz" pe $6 bi!i; n acest fel ambii octe!i ai num"r"torului apar!in aceleia#i st"ri de num"rare. Dac" se fac dou" citiri, accesnd pe rnd partea mai semnificativ" #i partea mai pu!in semnificativ", cele dou" informa!ii nu vor apar!ine aceleia#i faze de num"rare. Captura la intrare Unele aplica!ii necesit" cunoa#terea localiz"rii n timp a momentului n care are loc un eveniment. ntr-un calculator, timpul fizic este reprezentat prin con!inutul unui num"r"tor, iar apari!ia unui eveniment este reprezentat" printr-o tranzi!ie de semnal. Momentul apari!iei evenimentului poate fi nregistrat prin memorarea st"rii num"r"torului. Func!ia de captur" la intrare este implementat" de un circuit care are schema bloc reprezentat" n figura $.$$.
ICxI Cerere de ntrerupere

Latch $6 bi!i TICx

ICxF

Detector de tranzi!ii

Pin ICx

Figura 1.11 Func!ia de captur" la intrare schema bloc

Timpul fizic este reprezentat de valoarea con!inut" de num"r"torul liber. La apari!ia unui eveniment materializat printr-o tranzi!ie la pinul ICx, con!inutul num"r"torului liber este preluat n latch-ul de $6 bi!i din blocul de captur". Utilizatorul poate s" valideze func!ia de captur", poate s" aleag" frontul activ al tranzi!iei #i poate s" autorizeze generarea unei ntreruperi c"tre unitatea central" la detectarea frontului activ. Dac" un canal de captur" nu este validat, pinul de intrare ce i este asociat poate fi folosit ca intrare de uz general. ntreruperile intr"rilor de captur" sunt vectorizate, fiec"rei ntreruperi i este alocat" o pozi!ie bine definit" n tabela vecorilor de ntrerupere. Func!ia de captur" are multe aplica!ii, cteva din ele descrise pe scurt n continuare:

$. Descriere general"

23

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

24

MICROCONTROLLERE

#i o logic" de comand". Un sistem timer dispune de mai multe canale de comparare (68HC$$ are cinci canale de comparare).
OCxI Comparator $6 bi!i TOCx Ctrl. pin Pin OCx Cerere de ntrerupere OCxF

Figura 1.12 Func!ia de comparare la ie#ire schema bloc

Principala aplica!ie a unei func!ii de comparare este ntreprinderea unei ac!iuni la un moment de timp viitor bine determinat, cnd num"r"torul liber atinge o anumit" valoare. Ac!iunea ntreprins" ar putea fi comutarea unui semnal, ac!ionarea unui ntrerup"tor electronic, aprinderea unui LED, etc. Pentru a folosi func!ia de comparare este necesar" parcurgerea urm"toarei secven!e: $. se copiaz" valoarea din num"r"torul liber (con!inutul registrului TCNT); 2. se adaug" la copie o valoare determinat" de ntrzierea dorit"; 3. se transfer" rezultatul n registrul de comparare. Ac!iunea dorit" la pinul ie#irii de comparare se specific" anterior de c"tre utilizator ntr-un registru asociat modulului. Comparatorul compar" valoarea num"r"torului liber TCNT cu valoarea din registrul de comparare la fiecare clock. Dac" se constat" egalitate, se activeaz" ac!iunea specificat" la pinul de comparare #i se seteaz" flag-ul asociat. De asemenea, se va genera o ntrerupere dac" aceasta a fost validat" anterior prin bitul OcxI din registrul pentru validarea ntreruperilor. ntreruperile sunt vectorizate; fiecare canal are o a adres" cunoscut" n tabela vectorilor de ntrerupere. ntreruperile n timp real RTI Func!ia RTI este folosit" pentru a genera periodic ntreruperi; ntreruperile pot fi folosite pentru a comuta ntre aplica!ii n sisteme multitasking sau pentru a declan#a periodic execu!ia unei secven!e. Perioada apari!iilor ntreruperilor n timp real este programabil". Ca rezolu!ie, func!ia de ntrerupere nu este la fel de performant" ca #i func!ia de comparare.

$. Descriere general"

25

COP - Watchdog COP (Computer Operating Properly) este un ceas de gard", numit watchdog, folosit pentru a detecta erorile de program. Folosirea ceasului de gard" este op!ional". n cazul n care se folose#te, programul utilizator trebuie s" reseteze periodic un registru COP; dac" nu are loc resetarea, unitatea centrala decide c" a ap"rut o problem" n rularea programului #i reseteaz" sistemul pentru a preveni o desf"#urare necontrolat" a programului. Func!ia ceasului de gard" poate fi realizat" folosind un canal timer de uz general sau, situa!ia ntlnit" n mod obi#nuit la MC, ceasul de gard" este un timer dedicat, folosit doar pentru func!ia gard". Structura unui modul watchdog este reprezentat" n figura $.$3
Clock Num"r"tor INIT Registru de prescalare Registru de control RESET

BUS INTERN

Figura 1.13 Schema bloc a unui modul watchdog

Ceasul de gard" este un timer simplu compus dintr-un num"r"tor al c"rui ceas de num"rare este programabil printr-un registru de prescalare. Dac" circuitul este activat, num"r"torul num"r" continuu. Dac" num"r"torul ajunge la valoarea cea mai mare (FFFFh, dac" este un num"r"tor de $6 bi!i). se genereaz" un RESET c"tre unitatea central". Este sarcina programatorului s" scrie periodic n registrul de control un cuvnt care s" ini!ializeze num"r"torul. n cazul n care programul a pierdut controlul se va reseta sistemul. Acumulatorul de impulsuri Modulul timer poate s" dispun" de un registru acumulator de impulsuri. n acest registru pot fi num"rate evenimente exprimate prin pulsuri sau pot fi num"rate chiar pulsuri interne, provenite de la clock-ul unit"!ii centrale. $. Num"rare de evenimente num"r"torul de 8 bi!i este incrementat la fiecare front activ detectat la un pin. Un eveniment poate fi orice, segmente de program, cicluri ale unui semnal de intrare, unit"!i de timp, etc. Pentru a fi num"rate n acumulatorul de impulsuri, acestea trebuiesc transformate n tranzi!ii.

26

MICROCONTROLLERE

2. Num"rare gardat" num"r"torul de 8 bi!i func!ioneaz" n regim liber de num"rare avnd la intrarea de clock un semnal provenit din clock-ul unit"!ii centrale divizat cu un factor constant. O aplica!ie uzual" n acest mod de func!ionare este m"surarea duratei unui puls (impuls singular). Num"r"torul este nscris cu 0 la nceputul pulsului, iar la sfr#itul pulsului se cite#te valoarea sa. Module PWM Un semnal PWM (Puls Width Modulation) este folosit n multe aplica!ii; comanda motoarelor de curent continuu sau comanda surselor de alimentare pot fi amintite ca principale aplica!ii. n figura $.$4 este reprezentat un semnal PWM.
T2 Factorul de umplere este T2/T$

T$ 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 gener"rii unui semnal cu factor de umplere variabil. Deoarece, dup" cum am mai amintit, semnalul PWM este utilizat n aplica!ii exist" module timer dedicate acestei func!ii; modulele PWM. Un modul PWM poate genera mai multe semnale modulate. Structura unui canal PWM este reprezentat" n figura $.$5.
Comparator pe 8 bi!i PWM

PWM

Num"r"tor Registru prescalare

clock intern

BUS INTERN

Fig. 1.15 Schema bloc a canalului PWM

Registrul de prescalare genereaz" clock-ul pentru un num"r"tor. Clock-ul de num"rare este programabil. Con!inutul num"r"torului este comparat cu cel al

$. Descriere general"

27

registrului PWM. Ct timp rezultatul compara!iei este mai mic sau egal, se va genera un unu logic la ie#irea PWM. Dac" rezultatul compara!iei este mai mare, se va genera la ie#irea PWM un zero logic. Dac" registrele comparate sunt de opt bi!i factorul de umplere poate fi ntre $/256 #i $. Un canal PWM odat" programat va genera la ie#ire semnalul periodic continuu, f"r" interven!ia unit"!ii centrale. Ca #i la celelalte componente func!ionale, n ceea ce prive#te global modulele timer (includem #i modulele watchdog #i PWM) vor fi prezentate n ncheiere cteva criterii de apreciere: num"rul de canale timer #i dimensiunea registrului de num"rare; flexibilitaea timere-lor, mecanisme implementate; existen!a unui ceas de gard" (watchdog); num"rul de canale PWM #i dimensiunea registrului PWM.

Module A/D $i D/A


Intr"rile/ie#irile analogice #i convertoarele A/D nu sunt considerate ca parte definit" n contextul unui calculator; aceste elemente sunt importante n schimb atunci cnd consider"m un microcontroller. Prezen!a modulelor A/D #i D/A n structura unui MC contribuie la putereaacestuia n aplica!ii deoarece interfa!area cu mediul presupune necesitatea de a prelucra sau de a elabora m"rimi analogice. Convertoarele A/D sunt des ntlnite printre perifericele on-chip. Convertoarele D/A nu sunt ntlnite n mod uzual printre unit"!ile componente deoarece sunt relativ u#or implementate n exterior. Un convertor D/A simplu poate fi realizat folosind un timer n mod PWM #i integrnd pulsul n exterior cu un simplu circuit RC. Convertoarele A/D integrate pe chip sunt convertoare cu aproxima!ii succesive sau mai rar, convertoare cu integrare. nsu#irile convertoarelor nu sunt deosebite; sunt convertoare lente n compara!ie cu cele implementate n circuite independente. Timpii de conversie obi#nui!i sunt plasa!i n intervalul $0s-25s. Rezolu!ia este de 8, $0 sau $2 bi!i iar precizia de +/-$/2LSB. Modulul de conversie este prev"zut #i cu un multiplexor analogic, astfel sunt disponibile mai multe canale de intrare. Unele MC sunt echipate #i cu circuit de e#antionare/memorare. n cazul n care circuitul de e#antionare/memorare lipse#te, semnalul analogic trebuie men!inut constant pe durata unei conversii. Tensiunea de referin!" necesar" convertorului poate fi generat" n circuit sau dac" nu, este necesar s" fie furnizat" din exterior. n continuare, n figura $.$6 este prezentat" o schem" bloc simpl" a unui modul de conversie A/D. Circuitul analogic de intrare const" ntr-un multiplexor analogic, un circuit de e#antionare/memorare #i un convertor A/D cu aproxima!ii succesive. Tensiunea de referin!" pentru convertor #i masa analogic" sunt furnizate din exterior la pini speciali. Clock-ul necesar convertorului este generat intern din clock-ul unit"!ii centrale.

28

MICROCONTROLLERE

ADC0 ADC$ ADC2 ADC3

Mux analogic

E/nM

Convertor Analog Digital

pin start

Selec!ie canal

START

STOP Date

Registru de control bus intern

Registru de date

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

Modulul A/D folose#te un registru de control prin care se selecteaz" canalul de conversie #i modul de lucru pentru circuitul de e#antionare/memorare. Declan#area #i terminarea conversiei sunt semnalizate cu cte un bit tot n registrul de control. Rezultatul conversiei este stocat n registrul de date. Registrul de date va con!ine ntotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit nainte de terminarea urm"toarei conversii, n caz contrar se pierde informa!ia Conversia poate fi declan#at" intern, considernd bitul asociat din registrul de control, sau din exterior printr-un semnal de comand" aplicat la pin. Declan#area unei conversii la un moment de timp dorit, f"r" interven!ia unit"!ii centrale, se poate realiza folosind un timer. Modulul poate fi programat s" execute o conversie a unui canal #i s" se opreasc". Un alt mod de operare al modulului poate fi conversia continu" a unui canal pna la recep!ionarea unei comenzi de ncheiere. Un alt mod de operare este conversia ciclic" n care modulul execut" pe rnd conversia fiec"rui canal, dup" care se opre#te. n acest ultim mod sunt folosite de obicei mai multe registre de date pentru memorarea rezultatelor conversiilor. Rezultatele sunt citite dup" ncheierea unui ciclu. La terminarea unui ciclu de conversiei, op!ional, se poate genera o ntrerupere c"tre unitatea central". n aplica!ii de precizie se recomand" ca pe durata conversiei s" se comute unitatea central" n stare inactiv" pentru ca aceasta s" nu perturbe convertorul.

1.4

SISTEMUL DE NTRERUPERI

Sistemul de ntreruperi reprezint" mecanismul ce asigur" sincronizarea func!ion"rii unit"!ii centrale cu evenimentele. Acest mecanism asigur" implementarea unui r"spuns prompt #i specific al sistemului la orice cerere de

$. Descriere general"

29

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

Ambele etape pot fi implementate att hard ct #i soft, neexcluzndu-se posibilitatea unor implement"ri mixte. Identificarea sursei generatoare de ntrerupere se face prin corela!ia ce este stabilit" ntre canalul de transfer al cererii, registrul/registrele de memorare al acesteia #i adresa de memorie la care este plasat" adresa rutinei de servire a

30

MICROCONTROLLERE

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

$. Descriere general"

31

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

ISR_T0: JMP ; ORG ISR_EXT$: JMP ; ORG $BH ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor datorate ;dep"#irii capacit"!ii de num"rarea a canalului ;$ num"r"tor/temporizator NEW_ADDR_ISR2 $3H ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor externe de ;stare -canal $ NEW_ADDR_ISR$ ;Noua adresa a rutinei (poate fi ;plasat" n ;memoria RAM extern")

ISR_T$: JMP ; ; NEW_ADDR_ISR3

32 ORG ISR_SI: 23H

MICROCONTROLLERE

;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor provenite de la ;UART

JMP NEW_ADDR_ISR4 ; NEW_ADDR_ISR0: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la ;sursa extern" corespunz"toare canalului 0. NEW_ADDR_ISR$: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate ;dep"#irii de num"rare la timer 0. NEW_ADDR_ISR2: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la ;sursa extern" corespunz"toare canalului $. NEW_ADDR_ISR3: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate ;dep"#irii de num"rare la timer $. NEW_ADDR_ISR4 ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor provenite ;de la UART.

Plasnd n memoria RAM aceast" tabel" este posibil s" realiz"m ceea ce se cheam" "servire dinamic" a ntreruperilor". Acest procedeu de servire a ntreruperilor permite implemenarea u#oar" a comenzii unui automat secven!ial cu un num"r finit de st"ri. (spre exemplu: cazul unei linii automate de montaj sau de turnare, etc). Implementarea servirii dinamice a ntreruperilor const" n modificarea succesiv" a adreselor la care plas"m rutina de servire a ntreruperii (ISR). n figura $.$7 prezent"m cazul unui automat cu un num"r de trei st"ri distincte, fiecare rutin" de servire a ntreruperilor (ISR) va rescrie adresa rutinei de servire corespunz"toare evenimentului urm"tor n tabela vectorilor de ntrerupere. Este evident c" aceast" tabel" trebuie s" fie locatat" n memoria RAM a sistemului.
Primul eveniment ISR corespunz"toare evenimentului $ Scrie n Tabela Vectorilor de ntrerupere, adresa ISR2 Al treilea eveniment Al doilea eveniment ISR corespunz"toare evenimentului 2 Scrie n Tabela Vectorilor de ntrerupere, adresa ISR3

ISR corespunz"toare evenimentului 3 Scrie n Tabela Vectorilor de ntrerupere, adresa ISR$

Figura 1.17 Servirea dinamic" a ntreruperilor ntr-un automat cu trei st"ri

$. Descriere general"

33

Un exemplu tipic n acest sens l reprezint" tastaturile ce prezint" butoane multi-func!iune. S" presupunem cazul butonului unic: START/STOP al unui utilaj. Vom exemplifica procedeul de servire dinamic" prin programul care comut" func!iunile butonului din START n STOP #i invers. Programul este conceput pentru un microcontroller din familia 805$.
CSEG ORG BOOT: JMP ISR_EXT0: JMP BUTON ;S-a considerat c" prima linie de ntreruperi externe de stare reprezint" canalul de transfer al ;informa!iilor corespunz"tor butonului START/STOP
;

00H MAIN

;nstruc!iunea corespunz"toare etichetei BUTON este plasat" n memoria RAM a ;sistemului de comand" BUTON: JMP BUTON_START ; BUTON_START: ; MOV DPTR,#BUTON+$ ;ncarc" adresa din tabela vectorilor de ntrerupere MOV A,#LOW(BUTON_STOP) MOVX @DPTR,A INC DPTR MOV A,#HIGH(BUTON_STOP) MOVX @DPTR,A ;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor ;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine RETI BUTON_STOP: ; MOV DPTR,#BUTON+$ ;ncarc" adresa din tabela vectorilor de ntrerupere MOV A,#LOW(BUTON_START) MOVX @DPTR,A INC DPTR MOV A,#HIGH(BUTON_START) MOVX @DPTR,A ;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor ;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine RETI MAIN: ; ;Trebuiesc incluse instruc!iunile corespunz"toare programului principal END

34

MICROCONTROLLERE

n cazul sistemelor 805$ sau 68xx-68xxx, tabela vectorilor de ntrerupere este ampl" incluznd variate canale ntrerup"toare. Astfel, pentru ntreruperile externe de stare se dispune de dou" linii de intrare INT0# #i INT$#, CI putnd fi setat s" reac!ioneze fie pe front (cel negativ), fie pe nivel logic (cel sc"zut -low), pentru canalele num"r"toare temporizare dispunem pentru fiecare de adrese de servire corespunz"toare st"rilor de dep"#ire a capacit"!ii canalului ("overflow"), iar pentru unitatea UART dispunem de un vector unic att la recep!ie ct #i pentru transmisie. n cazul microcontroller-elor PIC (low/middle range) exist" o singur" adres" (plasat" la 0004H) pentru ntreruperi externe, ceea ce impune pentru proiectant s" scrie o rutin" de servire n care analiznd registrul ce memoreaz" cererile de ntrerupere va decide asupra r"spunsului la cererea respectiv".

1.5

MANAGEMENTUL PUTERII

Pentru aplica!iile n care consumul de energie de la sursa de alimentare este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din modulele componente. Economia de energie este esen!ial" n cazul aliment"rii de la baterii. Prin intrarea n starea de economie de energie memoria RAM nu-#i schimb" con!inutul #i ie#irile nu-#i schimb" valorile logice. Sistemul de economie de energie ofer" dou" moduri de operare care difer" prin num"rul componentelor dezactivate. Aceste moduri sunt numite Idle, Power Down la MC Intel #i Wait, Stop la MC Motorola. Intrarea n unul din modurile de operare cu economie de energie se face prin comenzi software. MC Motorola dispun de instruc!iuni care determin" intrarea n mod Wait sau Stop. MC Intel intr" n mod Idle sau Power Down prin controlul unor bi!i din registrul PCON (Power Control Register). n ambele moduri de operare este nghe!at" func!ionarea unit"!ii centrale. n mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage dup" sine blocarea tuturor func!iilor interne. Timer-ul va nghe!a #i interfe!ele seriale #i vor opri activitatea. Sistemul de ntreruperi, dup" caz, este dezactivat (MC Intel) sau poate s" ramn" activ (MC Motorola). Con!inutul memoriei #i al registrelor interne nu este alterat, iar liniile I/O r"mn neschimbate. Din aceast" stare se poate ie#i fie doar cu Reset la MC Intel. La MC Motorola se poate ie#i fie cu Reset, fie la sesizarea unei ntreruperi externe (sistemul de ntreruperi nu este dezactivat). n cazul n care revenirea se face la sesizarea unei ntreruperi externe activitatea intern" este reluat" n acelea#i condi!ii n care a fost abandonat" (num"r"toarele timere-lor continu" din starea pe care au avut-o la intrare n mod Stop). n mod Idle (Wait) este nghe!at" doar func!ionarea unit"!ii centrale, celelalte func!ii folosite r"mn active (timer-ul, interfe!ele seriale #i sistemul de ntreruperi). Starea unit"!ii centrale #i a tuturor registrelor este p"strat" ct timp

$. Descriere general"

35

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

1.6

SCHEMA BLOC A UNUI MC

Cu elementele prezentate pn" la acest punct schema bloc a unui MC poate fi dezvoltat" (n compara!ie cu cele prezentate n figura $.$. #i figura $.2); rezultatul este ilustrat n figura $.$8.

36 UNITATE CENTRAL& UAL Registre interne

MICROCONTROLLERE

Unitate de control

Memorie pentru programe

Memorie pentru date

BUS INTERN

Controller de ntreruperi Controller DMA

RS reg. de stare

RC
reg. de comenzi

RD reg. de date Intr"ri/ie#iri de date Seriale/Paralele

DISPOZITIV I/O ($, 2, n)

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 func!ionale. Unitatea central" execut" instruc!iunile pe care le prime#te prin magistrala de date din memoria program. Structura Harvard este posibil" #i r"spndit" la MC pentru c" de regul" instruc!iunile sunt stocate n memoria ROM, iar datele n cea RAM. Magistrala de date #i cea de adrese pot fi separate sau multiplexate. Magistralele pot s" nu fie disponibile n exterior (Motorola 6805) sau pot fi disponibile n exterior direct (MCS-5$) sau multiplexate (MC pe $6 sau 32 de bi!i). Fiecare MC are un controller de ntreruperi care admite att intr"ri din exterior ct #i de la modulele interne. Unele MC dispun de un controller DMA propriu. Modulele I/O pot fi seriale sau paralele. Fiecare modul transfer" date cu exteriorul prin intermediul registrului de date (RD). Modulul este programat (configurat) de unitatea central" prin intermediul unui registru de comenzi (RC) #i se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera ntreruperi c"tre unitatea central". Registrele modulelor I/O pot fi v"zute de UC ca loca!ii de memorie (la familia Motorola) sau ca dispozitive de I/O ntr-un spa!iu de

$. Descriere general"

37

adresare separat (MCS 5$). Sub numele de dispozitiv I/O, ntr-o abordare generalizat", sunt cuprinse principalele interfe!e ale MC (timer, canal serial UART) #i linii I/O grupate n porturi paralele de uz general. Acela#i nume generic poate acoperi #i interfe!ele speciale ntlnite n configura!ii particulare de MC (convertor A/D, interfa!" serial" sincron", interfa!" LCD, interfa!" USB, etc).

1.7

FAMILII DE MC

Microcontroller-ele se produc ntr-o mare diversitate n care exist" totu#i elemente comune care permit o prezentare sistematic" a produsului. Pe baza unui nucleu comun au fost definite familiile de microcontroller-e; nucleul este constituit dintr-o unitate central", aceea#i pentru to!i membrii unei familii, #i o serie de interfe!e #i periferice. Din punct de vedere al programatorului, to!i membrii unei familii folosesc acela#i set de instruc!iuni, permit acelea#i moduri de adresare #i folosesc acelea#i registre. Diferen!a ntre membrii unei familii const" n primul rnd n echiparea chip-ului cu memorie (tip de memorie #i capacitatea memoriei). Alte diferen!e pot fi g"site la frecven!a de clock pentru unitatea central" sau n interfe!ele on-chip #i perifericele on-chip suplimentare fa!" de cel mai simplu reprezentant al familiei. O diferen!" ntre membrii unei familii poate fi #i modul n care sunt conectate semnalele la pin respectiv tipul capsulei de prezentare a circuitului integrat. n cadrul acestui capitol, n continuare, sunt prezentate cteva familii de microcontroller-e cu sublinierea nsu#irilor caracteristice #i considernd numele produc"torului ca fiind unul din elementele reprezentative pentru o familie. INTEL 4048 a fost primul MC ap"rut pe pia!", avnd o structur" Harvard modificat", cu 64-256 octe!i de RAM #i este nc" folosit n multe aplica!ii datorit" pre!ului sc"zut. INTEL 8051 (MCS-5$) este a doua genera!ie de MC #i, n prezent, este familia care se vinde cel mai bine; este fabricat #i de mul!i al!i produc"tori. Acest MC are o arhitectur" Harvard modificat" cu spa!iu de adresare diferit pentru program (<64K din care 4-8K pe chip) #i date (<64K din care $28-256 octe!i pe chip, cu adresare indirect"). Dispozitivele I/O au un spa!iu propriu de adresare. 805$ dispune de un procesor boolean prin care se pot executa opera!ii complexe la nivel de bit, iar n func!ie de rezultate se pot face salturi. Pentru 805$ exist" foarte mult software, att contra cost ct #i gratuit. INTEL 80C196 (MCS-96) este a treia genera!ie de MC propus" de INTEL. 80C$96 este un MC pe $6 bi!i care admite un tact pn" la 50MHz. Acest MC con!ine blocuri aritmetice pentru nmul!ire #i mp"r!ire, lucreaz" cu 6 moduri de adresare, convertor A/D, canal de comunica!ii serial, controller de ntreruperi cu 8 surse, pn" la 40 de porturi I/O, generator PWM #i ceas de gard".

38

MICROCONTROLLERE

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

de MC PIC: low range, middle range #i high range (care se disting prin dimensiunea cuvntului de program #i prin facilit"!i legate de structur") PIC$6C5xx, PIC$6C6xx #i PIC$7Cxx, din care linia $6C6xx este cotat" cel mai bine pe pia!".
COP400 (National Semiconductor) este un MC pe 4 bi!i care are 5$2o-2K ROM, #i 32x4- $60x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare 2,3V-6,0V. Sunt echipate cu num"r"toare/temporizatoare #i magistral"

$. Descriere general"

39

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

40

MICROCONTROLLERE

F21 (Forth) a fost conceput pentru aplica!ii multimedia #i procesare paralel". Viteza ajunge la 250MIPS datorit" structurii care con!ine procesoare de prelucrare analogic" #i procesor de interfa!" la re!eaua de calculatoare. Tabelul $.6 prezint" caracteristicile de baz" pentru c!iva reprezentan!i din dou" familii de MC foarte populare; 68HC$$ de la Motorola #i 805$ de la Intel.
Tabelul 1.6 Caracteristici principale pentru MC din dou# familii reprezentative (68HC11 $i 8051)

Circuit M68HC$$A0 M68HC$$A$ M68HC$$A2 M68HC$$A8 M68HC$$E$ M68HC$$E9 M68HC$$F$ I 8035 I 8039 I 804$ I 8748 I 805$ I 875$

RAM 256 256 256 5$2 5$2 $024 64 $28 64 64 $28 $28

ROM/ (E)EPROM 5$2 EEPROM 2048 EEPROM 8K ROM 5$2 EEPROM 5$2 EEPROM $2K ROM 5$2 EEPROM 5$2 EEPROM $024 ROM $024 EPROM 4096 ROM 4096 EPROM

Clock 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 2.5 s $.4 s 2.5 s 2.5 s $ s $ s

I/O 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 3X8 3X8 3X8 3X8 4X8 4X8

A/D 4/8 4/8 4/8 4/8 4/8 8 8 -

Timer 9 9 9 9 9 9 9 2 2 2 2 2 2

$. Descriere general"

41

1.8

CLASIFICAREA MC

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

2
PROGRAMAREA SISTEMELOR CU MC

2.1

PROIECTAREA PROGRAMELOR DE APLICA!IE

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

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

2. Programarea sistemelor cu MC

43

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

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

44

MICROCONTROLLERE

De#i varietatea sistemelor este deosebit de larg", totu#i putem considera c", n general, dou" clase de sisteme sunt preponderente, iar la limit" acestea sunt unicele ntlnite n practic", #i anume: sisteme de reglare, sisteme ce ndeplinesc una sau mai multe func!ii scop, care sunt me!inute n limite de varia!ie prestabilite, #i sisteme de control, respectiv sisteme ce implementeaz" un automat cu un num"r finit de st"ri

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

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

2. Programarea sistemelor cu MC

45

Analiza necesit!"ilor de comand! #i control pe care le impune sistemul. $. Canale digitale de transfer a informa!iilor - (vom avea n vedere, num"rul acestora, #i modul n care ele pot fi grupate). Este bine s" asigur"m corespunz"tor fiec"rei linii de comand", sau de achizi!ie digital" cte un bit corespunz"tor n cadrul unor loca!ii de memorie ce reflect" permanent starea acestora. 2. Canale analogice de transfer al informa!iilor - vor necesita alocarea unui num"r de linii de ie#ire (este cazul convertoarelor digitalanalogice), respectiv un num"r de linii de intrare (este cazul convertoarelor analog-digitale) ce este func!ie de tipul de convertor, respectiv de interfa!a acestuia cu microsistemul. 3. Necesit"!ile de control a timpului - (frecven!ei, perioadei sau ntrzierii) n cadrul sistemului sunt implementate prin utilizarea judicioas" a canalelor temporizatoare. Fiecare dintre aceste necesit"!i le vom exemplifica n continuare, urmnd ca la capitolul de aplica!ii s" concretiz"m aceste exemple n programe mai ample. Spre exemplu: dac" avem de comandat dou" motoare pas cu pas tetrafazate (MPP) cu aceea#i frecven"! de comand" #i n acela#i sens, este evident c" vom aloca liniile aceluia#i port drept linii de comand" ale acestuia. De ce? C"ci astfel realiz"m dou" obiective: maximiz"m utilizarea liniilor unui port de 8 bi!i, a#a cum sunt majoritatea, pe microcontroller-ele pe 8 bi!i, dar totodat" simplific"m rezolvarea soft a comenzii, noi dedicnd astfel doar o loca!ie de memorie (STATUS_MPP), drept copie a st"rii liniilor de comand" dedicate motoarelor. Totodat" !innd cont c" majoritatea controller-elor dispun de instruc!iuni de rotire (dreapta/stnga) a informa!iilor, comanda n secven!" simpl" a MPP nu va presupune dect cteva instruc!iuni: Ini!ializarea contorului de pa#i (STEPS$ #i STEPS2) Ini!ializarea loca!iei de stare a MPP-urilor (STATUS) Ini!ializarea timer-ului corespunz"tor frecven!ei de comand" a MPP (SPEED_L, SPEED_H) Definirea rutinei de servire a ntreruperilor, corespunz"toare canalului temporizator (ISR_T0).

Aceast" rutin" va roti informa!ia din byte-ul de stare corespunz"tor, va copia aceast" informa!ie la port #i n final va decrementa contorul de pa#i. Se vor testa cele dou" loca!ii ce re!in num"rul de pa#i STEPS$ #i STEPS2 iar atunci cnd s-au executat pa#ii programa!i, comanda va fi ntrerupt". Prezent"m n continuare acest program implementat pentru microcontroller-e din familia 805$. Instruc!iunile acestui microcontroller sunt prezentate n capitolul curent. $ DSEG 0030 2 STATUS_MPP DATA 30H ;Loca!ia memoraz" starea comenzilor pentru MPP (secven!" simpl") 003$ 3 STEPS$ DATA 3$H ;Loca!ie nr. pa#i MPP$

46

MICROCONTROLLERE

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

0032 0033 0034

2. Programarea sistemelor cu MC

47

0044 E530 0046 54F0 0048 $532 004A 80E4 004C 85338A 004F 85348C 0052 80CC 0054 0054 $20000 0057 20$$02 005A 80FB 005C D28C 005E C2$$

CONT_02: MOV A,STATUS_MPP ;STEP2<>0, STEP$=0 ANL A,#0F0H ;Mascheaz" bi!ii corespunz"tori MPP $ DEC STEPS2 JMP EXEC_STEP REPRG_T0: MOV TL0,SPEED_L MOV TH0,SPEED_H ;Reprogrameaz" timer0 5$ JMP END_ISR 52 MAIN: F 53 CALL INIT ;Execut" rutina de ini!ializare 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" (A#teapt"!)

45 46 47 48 49 50

END n cazul n care realiz"m controlul unui semnal analogic cu ajutorul sistemului format din microcontroller #i convertor digital-analog de $2 bi!i avnd drept interfa!" o interfa!" paralel", vom dedica $2 linii din cadrul a dou" porturi acestui scop. ntr-un mod analog, putem defini #i opera!iile de citire a informa!iilor de stare att cele corespunz"toare unor m"rimi analogice ct #i cele corespunz"toare m"rimilor digitale. Vom dedica fiec"rui semnal analogic loca!ii de memorie avnd o l"!ime a cuvntului cel pu!in egal" cu rezolu!ia convertorului ( $ byte pentru o rezolu!ie de 8 bi!i, 2 bytes pentru rezolu!ii mai mari de 8 bi!i #i pn" la $6 bi!i, respectiv 3 bytes pentru rezolu!ii cuprinse ntre $7 #i 24 de bi!i, etc.) Deci, num"rul de linii dedicate transferului de informa!ii va depinde de interfa!a convertorului, iar memoria alocat" re!inerii st"rii corespunz"toare m"rimii va fi mai mare sau egal" cu rezolu!ia convertorului, vorbim de ceea ce ndeob#te se nume#te "alinierea" datelor, respectiv asigur"m uniformitatea dimensiunii loca!iilor de memorie dedicate variabilelor sistemului ceea ce u#ureaz" accesul la informa!ie prin folosirea unor indec#i adecva!i. Necesit"!ile de control a timpului sunt satisf"cute prin dedicarea unor canale temporizatoare/num"r"toare. Aici apar cele mai delicate probleme, mai ales n cazul unor sisteme ce controleaz" procese cu constante de timp mici. n acest caz critic, este necesar s" aloc"m pentru controlul ntrzierii respective un canal temporizator separat, s" minimiz"m num"rul de instruc!iuni ale rutinei de servire a ntreruperilor #i s" analiz"m, iar apoi s" set"m cu aten!ie priorit"!ile stabilite la arbitrarea ntreruperilor. Va trebui ca sistemul nostru s" satisfac" cerin!elor impuse de teorema e#antion"rii att la achizi!ia de semnal ct #i n comand", ceea ce presupune ca frecven!a minim" de e#antionare s" fie mai mare dect dublul frecven!ei maxime ce intervine n cadrul procesului reglat. Nu trebuie s" uit"m c" n cazul unui sistem controlat de c"tre un microcontroller paralelelismul n ac"iune #i interac"iunea cu procesul se mbin"

48

MICROCONTROLLERE

continuu, ceea ce indeob#te poart" denumirea de "concuren"!". Aceast" proprietate are un rolul esen!ial n cazul unui sistem dedicat (ncapsulat - "embedded"). Deseori, pentru sisteme relativ lente putem g"si o perioad" minim" de temporizat, rutina de servire a ntreruperilor, corespunz"toare acesteia putnd fi utilizat" pentru controlul mai multor comenzi, ce prezint" constante de timp multipli ai temporiz"rii de baz". Dac" acest semnal de ceas l folosim pentru analiza st"rii globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem de operare9 n timp real, specific. Un program monitor, (supervizor) va putea analiza periodic starea sistemului #i va decla#a task-ul, rutina adecvat" st"rii. n acest caz, construind uneltele minimale #i anume task$0-uri, rutine$$ #i subrutine$2 vom putea scrie mult mai u#or programe pentru sisteme distincte, asigurnd astfel un grad de portabilitate$3 ridicat al aplica!iilor. Implementarea program"rii structurate presupune decelarea acelor ac!iuni repetabile #i executate cu parametri diferi!i n mai multe etape din evolu!ia sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruc!iuni apelabile din programul principal. Un rol esen!ial l joac" #i modul n care realiz"m gestiunea resurselor de memorie. Acestea sunt dedicate ctorva scopuri #i anume: $. Salveaz" starea sistemului. n acest sens dispunem de zone de memorie accesibile de byte #i pe bit, zon" numit" de obicei "vector de stare". Dimensiunea acestei memorii este specific" aplica!iei. 2. Salveaz" temporar informa!iile din registrele generale la apelarea rutinelor sau la execu!ia rutinelor de servire a ntreruperilor, n general implementarea acestei memorii se face utiliznd un pointer memorat ntr-un registru special al unit"!ii centrale numit "Stack Pointer", mecanismul de acces fiind implementat hard pentru fiecare microcontroller. Respectiva memorie poart" denumirea de "stiv"" #i poate fi plasat" la orice adres" valid" de memorie(intern" sau extern" microcontroller-ului), dimensiunea ei avnd un caracter dinamic. 3. Salveaz" informa!iile ce sunt achizi!ionate, transferate sau prelucrate de c"tre sistem formnd ceea ce ndeob#te se nume#te "buffer" sau memorie tampon.
Prin sistem de operare n timp real n!elegem ansamblul de rutine ce ofer" principalele rutine de comand" #i control a sistemului, cu condi!ia respect"rii teoremei de e#antionare att n comad" ct #i n control $0 Prin task n!elegem acele unit"!i de program executabile independent #i care de regul" implementeaz" o singur" func!iune ce este apelat" de c"tre planificatorul (n cazul nostru, programul principal) sistemului. $$ Rutinele implementeaz" por!iuni mici de program, ce trateaz" evenimente ce apar n func!ionarea sistemului. Sunt caracterizate prin rapiditate n execu!ie #i de regul" sunt asociate unui anumit eveniment decelabil de c"tre planificatorul sistemului de operare sau decla#ate de c"tre o cerere de ntreruperi. $2 sunt por!iuni de program apelate de c"tre task-uri, #i pot fi: dedicate, cazul celor activate de c"tre un "anumit" task, comune, cele apelate de c"tre mai multe task-uri #i re-entrante, cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile. $3 Prin portabilitate n!elegem gradul de reutilizare a programelor scrise pentru un anume sistem la o clas" larg" de sisteme analoge celui ini!ial.
9

2. Programarea sistemelor cu MC

49

Aceasta este organizat" dup" principii ce pot diferi: FIFO prima dat" memorat" este #i prima dat" extras", (First In First Out) sau ultima dat" memorat" este prima dat" extras" LIFO (Last In First Out), etc. Dimensiunea zonei de memorie este adecvat" aplica!iei #i fluxurilor informa!ionale vehiculate. Tot n aceast" categorie putem ncadra acele zone de "memorie comun"", utilizate de c"tre task-uri diferite ce ruleaz" pe sistem, zon" prin intermediul c"reia sunt pasate informa!ii de la un task la altul n scopul sincroniz"rii acestora. De asemenea n cazul unor sisteme multiprocesor se implementeaz" stive circulare de mesaje ce asigur" arbitrarea accesului procesoarelor la zona de memorie comun", implementndu-se a#a numita c"su!" po#tal" ("Mail Box"), etc. Dimensiunea acestor zone poate fi att variabil" ct #i fix".

2.1.2 Instruc#iuni ale MC


Este evident c" n cazul program"rii microsistemelor un rol deosebit de important l joac" setul de instruc!iuni al microcontroller-ului. Dac" n limbajele de nivel mediu sau nalt, limbajele prezint" un caracter independent de structura procesorului, limbajele ma#in" sunt limbaje specifice. Aceasta presupune un grad de detaliere mult mai ridicat ceea ce implic" #i cunoa#terea registrelor interne #i a flag-urilor indicatoare de condi!ie specifice unit"!ii centrale, cunoa#terea structurii interne, respectiv a memoriei interne #i a modului n care aceasta este organizat", cunoa#terea porturilor de intrare/ie#ire #i a canalelor num"r"toare/temporizatoare. Cu toate acestea, reprezentarea grafic" a evolu!iei unui sistem cap"t" o r"spndire din ce n ce mai larg", ea oferind o reprezentare general" a algoritmilor de func!ionare ai sistemelor. Spre exemplu, reprezentarea EBNF (Extended Backus-Naur Form) utilizeaz" simbolurile terminale$4 #i neterminale$5 care sunt conectate n diagrame (grafuri) sintactice ce formeaz" un graf orientat. n cadrul acestor grafuri s"geata exprim" o formulare sintactic" acceptat". Pot fi ntlnite urm"toarele reprezent"ri: succesiunea, ramifica!ia sau alternativa #i bucla sau repeti!ia. Corespunz"tor acestor formul"ri, limbajele de programare ale microcontroller-elor, ofer" instruc!iuni (reprezentabile ca "atomi" lexicali) ce implementeaz" traiectoriile definte cu ajutorului grafului de fluen!". Trebuie men!ionat c" n setul de ac!iuni se disting cteva clase de instruc!iuni prezente la toate microcontroller-ele, #i anume: $. Instruc!iuni ce pot fi succesive (pot fi n#irate unele dup" altele) #i care realizeaz" n general fie un transfer de informa!ie, fie o opera!ie artmeticologic", fie o alt" ac!iune la nivelul unit"!ii centrale.
$4

Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompu#i n continuare. $5 Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri terminale.

50

MICROCONTROLLERE

2. Instruc!iuni de decizie (test), care implementeaz" o ramifica!ie a grafului, n general, la nivelul limbajului ma#in", aceastea sunt instruc!iuni ce implementeaz" dou" alternative (deci sunt de tip binar). n cazul microcontroller-elor nu ntlnim dect bifurca!ii. 3. Instruc!iuni de tip repetitiv, sau instruc!iuni ce implementeaz" o bucl" de program #i care sunt reprezentate prin instruc!iuni de test ce se execut" fie la nceputul, fie la sfr#itul unui bloc de program Vom exemplifica pentru dou" familii de microcontroller-e (Intel 805$ #i PIC -"middle range") cele mai sus afirmate, urmnd ca n prezentarea de detaliu a familiilor de procesoare s" trat"m exhaustiv aceste instruc!iuni$6. Familia 805$
Mnemonic
MOV A,<src> MOV <dest>,A MOV <dest>,<src> MOV DPTR,#data$6 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 $7 < byte > <-data8 ADD A,<byte> ADDC A,<byte>

Familia PIC "middle range"


Ac!iunea Mnemonic
MOVF f,d MOVWF MOVLW

Ac!iunea
d=0 W <- <f> d=$ W <- <f> <f> <- W W <- data8

A <- <src> <dest> <- A <dest> <- <src> DPTR <-data$6 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

SWAP f,d ANDWF f,d ANDLW$8 k$9 ADDWF f,d ADDLW2$ k

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

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

$6

2. Programarea sistemelor cu MC

5$

2$

ADDWF execut" func!ia aritmetic" adunare ntre operanzi, analog avem SUBLW pentru sc"dere #i respectiv ADDLF/SUBLW pentru adunare/sc"dere data pe 8 bi!i

52

MICROCONTROLLERE

Familia 805$
Mnemonic
MUL AB DIV AB RR A RRC A RL A RLC A JMP addr22 CALL addr RET RETI24 SETB b25 CLR b INC A INC DPTR DEC A DEC < byte>

Familia PIC "middle range"


Ac!iunea Mnemonic Ac!iunea

A[low]<AxBB[high]<-AxB A<- int(AxB) A<mod(AxB) A0->A7 A7->A6 . A0->C C->A7 . A7->A0 A0->A$ . A7->C A6->A7 . PC23 <-addr @SP <- PCPC <- addr PC <- @SP PC <- @SP b <- $ b <- 0 A <-A+$ DPTR<- DPTR +$ A <- A-$ Byte<-byte-$

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

A0->A7 A7->A6 . A7->A0 A6->A7 . PC <-addr @SP <- PCPC <- addr

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

Instruc!iunile mai sus prezentate fac parte din prima categorie. Lista complet" de instruc!iuni este detaliat" pe CD la capitolele corespunz"toare celor dou" microcontroller-e. Urmeaz" instruc!iunile de decizie: Familia 805$
Mnemonic
JB addr_rel JNB addr_rel26 JZ addr_rel JNZ addr_rel JC addr_rel JNC addr_rel JBC bit,addr_rel

Familia PIC "middle range"


Mnemonic
BTFSC f,b BTFSS f,b

Ac!iunea
b=$ =>PC<-PC+addr_rel b=0 =>PC<-PC+addr_rel A=0 =>PC<-PC+addr_rel A0 =>PC<-PC+addr_rel C=$ =>PC<-PC+addr_rel C=0 =>PC<-PC+addr_rel b=$ =>PC<PC+addr_rel,b <- 0

Ac!iunea
fB=0 =>PC<-PC+2 Salt peste instr. urm"toare fB=$ =>PC<-PC+2 Salt peste instr. urm"toare

Ultimul tip de instruc!iuni, cel de ciclare este ilustrat doar prin cteva exemple:
22 23

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

2. Programarea sistemelor cu MC

53

Familia 805$
Mnemonic
CJNE A,<byte>,addr_rel CJNE <byte>,#data8,addr_rel DJNZ <byte>,addr_rel

Familia PIC "middle range"


Ac!iunea
A<byte> =>PC <-PC+addr_rel <byte>data8 => PC<-PC+addr_rel byte <- byte$,PC<PC+addr_rel

Mnemonic

Ac!iunea

DECFSZ f,d INCFSZ f,d

f<-f-$, d=0 =>W <- f f=0 =>PC<-PC+2 f<-f+$, d=0 => W <f f=0 =>PC<-PC+2

Men!ion"m n ncheierea acestei enumer"ri a instruc!iunilor c" n cazul microcontroller-elor nu exist" instruc!iuni de intrare/ie#ire, c"ci porturile microcontroller-ului sunt "mapate"27 n spa!iul de adrese de memorie intern. Ce rezult" din aceasta? Accesul la elementele externe microcontroller-ului se face prin instruc!iuni avnd adrese relative la porturile acestuia, adic" sunt instruc!iuni de transfer n cadrul memoriei interne a microcontroller-ului. Proiectarea programelor de func!ionare ale unui sistem trece prin mai multe etape ce sunt ilustrate n figura 2.$. Aceast" figur" nu prezint" prima #i n acela#i timp una dintre cele mai importante etape ale proiect"rii, care const" n analiza sistemic" a procesului sau sistemului a c"rui comand" se dore#te a fi implementat". $. 2. 3. 4. n cadrul acestei etape trebuie s" fie eviden!iate: Func!iunile sistemului, l"!imea canalelor de comunica!ie nesesare transferului infoma!iilor, precum #i loca!iile de memorie !int" (destina!ie) a acestora Identificarea acelor canale de transfer a informa!iilor care asigur" sincronizarea UC cu procesul condus Analiza priorit"!ilor ce trebuie s" fie atribuite canalelor de transfer la tratarea informa!iilor pentru arespecta teorema e#antion"rii Se eviden!iaz" similitudinile ce apar n func!ionarea sistemului sunt grupate n raport cu criterii specifice, func!ionale canalele de transfer a informa!iilor #i sunt conturate task-urile, rutinele #i subrutinele ce implementeaz" func!iunile sistemului de comand" #i control. Sunt analizate variatele posibilit"!i de implementare hard a aplica!iei, respectiv sunt dedicate canalelor informa!ionale liniile porturilor, canalele temporizatoare, celelalte resurse diferitelor necesit"!i ale sistemului

5.

n final trebuie s" subliniem c" procesul de proiectare este un proces iterativ, care presupune parcurgerea succesiv" de mai multe ori a etapelor de proiectare, pentru a se ob!ine o implementare a aplica!iei optimal".
27

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

54

MICROCONTROLLERE

Vom descrie pe rnd care sunt elementele necesare #i ce rezult" la parcurgerea fiec"rei etape n cadrul procesului de proiectare a programelor de aplica!ie n cazul utiliz"rii uneletelor specifice procesoarelor 805$. Asamblarea fi#ierelor surs" scrise n limbaj ma#in" #i salvate ca fi#iere
EDITAREA FI$IERELOR SURS% (asamblare) (FORMAT ASCII) EDITAREA FI$IERELOR SURS% (n limbaj C) (FORMAT ASCII)

BIBLIOTECI (DIVERSE)

ASAMBLAREA FI$IERELOR SURS%

COMPILAREA FI$IERELOR SURS%

LINK-EDITAREA

CONVERSIA FI $IERELOR OBIECT N FI$ IERE FORMAT INTEL-HEX TRANSFERUL FI$ IERELOR PE SISTEMUL DE DEZVOLTARE $I DEPANAREA APLICA! IEI

SCRIEREA PROGRAMULUI DE FUNC !IONARE N MEMORIA EPROM/FLASH A SISTEMULUI

Figura 2. 1 Etapele proiect"rii programelor pentru un sistem dedicat


FI$IER OBIECT RELOCATABIL

FI$IER SURS%

MACRO ASSEMBLER A51 FI$IER LISTING

Figura 2.2 Rolul macro/asamblorului n generarea fi#ierelor obiect

2. Programarea sistemelor cu MC

55

ASCII este descris" n figura 2.2. n cazul utiliz"rii unor module de program scrise n C, fi#ierele surs" vor fi compilate rezultnd n urma compil"ri acelea#i fi#iere ca #i n cazul asambl"rii. n figura 2.3 prezent"m care sunt fi#ierele de intrare #i cele de ie#ire n cazul utiliz"rii programului link-editor Dup" "legarea" utiliznd link-editorul a modulelor de program rezult" module obiect absolute care vor fi cu ajutorul debbuger-ului, sau al unui simulator sau al unui emulator, nc"rcate #i testate pentru a se eviden!ia intercorela!iile ce se stabilesc ntre programe #i sistemul controlat. Pentru transferul fi#ierelor fie c"tre sistemul de dezvoltare, fie c"tre un programatorul universal este necesar s" ob!inem plecnd de la fi#ierul obiect absolut fi#iere n formate transferabile. Aceast" func!ie este ndeplinit" de convertorul OHS5$. (vezi figura 2.4) Programul LIB5$ ce face parte din modulul de programe specifice microcontroller-elor 805$ #i el permite generarea unor biblioteci cu module de
FI$IERUL OBIECT 1 FI$IERUL OBIECT 2 LINK -EDITORUL SPECIFIC PROCESOARELOR 8051 MODULUL OBIECT ABSOLUT

FI$IERUL OBIECT n BIBLIOTECA

FI$IERUL CU REFERIN!E NCRUCI$ATE

Figura 2.3 Rolul link-editorului n generarea fi#ierelor obiect absolute

program, ad"ugarea #i extragerea unor module din bibliotec".

FI$IERUL FORMAT INTEL - HEX FI$IERUL OBIECT ABSOLUT FI$IERUL SIMBOLIC DIGITAL RESEARCH HEX FI$IERUL N FORMAT MICROTEK

CONVERTORUL OHS51

Figura 2. 4 Rolul convertorului object - IntelHEX

56

MICROCONTROLLERE

2.1.3 Instrumente software de proiectare: MC 8051


Structura general" a unei liniii de program scris n limbaj de asamblare are forma: [Etichet":] mnemonic805$ [operand][,operand] [;comentariu] <CR><LF>28 drept separator de cmp sunt utilizate caracterele spa!iu sau tabulatorul. Prin etichet" n!elegem #irul de caractere ASCII ce se sfr#e#te prin caracterul ":". Operanzii pot fi clasifica!i astfel: Exemple: START: JMP LOOP: DJNZ R7,LOOP ;R7 este simbolul corespunz"tor registrului R7, LOOP este simbolul corespunz"tor ;adresei de salt (acesta este un comentariu) Utilizarea etichetelor nu este op!ional" atunci cnd la adresele corespunz"toare acestora se face referire n program. Ele sunt de asemenea utile pentru a da o mai mare lizibilitate programelor. mpreun" cu comentariile ofer" un real ajutor att pentru proiectant ct #i pentru cel ce analizeaz" ulterior programele. Numerele care sunt utilizate n cadrul programelor surs" pot fi scrise n urm"toarele formate: Baza Sufix Caractere acceptate Exemple Hexazecimal" H, h 0,$,,9,A,B,C,D,E,F $234H, 0E7H29, 0A345h Zecimal D,d 0,$,2,3,4,5,6,7,8,9 $234, $234D,023d Octal O,o 0,$,2,34,5,6,7 $23O, 256O,$$$Q,$25q Binar B,b 0,$ $$0$$$0$B $irurile sunt expresii ce includ maximum dou" caractere ncadrate ntre apostrofuri. Exemple: 'A' evaluat ca 004$H 'AB' evaluat ca 4$42H 'ab' evaluat ca 6$62H, etc.
28

Simboluri speciale de asamblare (nume de registre sau flag-uri) Simboluri ale programului (Segment, extern, local, public) Adrese indirecte Adrese interne ale microcontroller-ului Adrese ale bi!ilor semnificativi ai microcontroller-ului Adrese de interes din cadrul programului (n general adrese de salt) ;Aceasta este o etichet" ;Aceasta este o instruc!iune de salt

MAIN

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

2. Programarea sistemelor cu MC

57

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

58

MICROCONTROLLERE

Operator SHR, SHL AND OR XOR

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

Semnifica!ie Exprim" deplasarea spre dreapta, respectiv stnga a bi!ilor num"rului 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 rela!ionali sunt acei operatori ce compar" doi operanzi. Rezultatul compara!iei este ADEV%RAT sau FALS, valori ce sunt returnate n urma efectu"rii opera!iei. Dintre ace#ti operatori amintim: Operator >= ,GTE <= ,LTE <> , NE = , EQ < , LT > , GT Exemplu 8>=$7 8 LTE 45 8 NE 45 8 EQ 45 8 LT 45 8 GT 45 Semnifica!ie Mai mare sau egal. Valoarea returnat": FALS Mai mic sau egal. Valoarea returnat": ADEV%RAT Nu este egal. Valoarea returnat": ADEV%RAT Egal. Valoarea returnat": FALS Mai mic dect. Valoarea returnat" ADEV%RAT Mai mare dect. Valoarea returnat" FALS

Preceden!a operatorilor este cea cunoscut" #i la alte limbaje de programare, parantezele, apoi operatorii unari, adunarea #i sc"derea, nmul!irea #i mp"r!irea, deplasarea, operatorii logici #i n final operatorii rela!ionali. Datele imediate, respectiv valorile numerice incluse n cadrul instruc!iunii sunt reprezentate cu avnd caracterul '#' n fa!". Exemple: MOV A,#0ABH ;ncarc" n A valoarea ABH, respectiv $7$D MOV DPTR,#8000H ;ncarc" valoarea 8000H n DPTR ANL A,#$28 ;Realizeaz" opera!ia &I logic ntre valoarea memorat" n acmulator #i valoarea ;$28D MOV R0,#DAT ;ncarc" n registru R0, valoarea simbolului DAT Adresarea datelor poate fi f"cut" n dou" moduri distincte: $. Direct caz n care informa!ia de adres" este specificat" chiar n codul ma#in" respectiv 2. Indirect, caz n care simbolul inclus n codul ma#in" reprezint" adresa la care este memorat operandul utilizat de c"tre instruc!iune. Pot fi utiliza!i: registrele R0 #i R$ sau registrul DPTR. Spa!iul de adrese este func!ie de tipul de microcontroller. Exemplele incluse pe CD detaliaz" loca!iile #i adresele de memorie inclusiv cele corespunz"toare simolurilor corespunz"toare fanioanelor microcontroller-elor din familia 805$. Directivele de asamblare admise sunt prezentate n enumerarea de mai jos: SEGMENT permite declararea unui segment ce poate fi relocatat. Sintaxa este:

2. Programarea sistemelor cu MC

59

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

60

MICROCONTROLLERE

0000 4 DS $0H ;Rezerv" $5 bytes n zona RAM intern" 00$0 5 REG23: DS $$H ;Rezerv" blocul REG23 de $7 bytes n zona RAM 002$ 6 BITI: DS 0$H ;Rezerv" $ byte cu numele BITI 0030 7 VAL2 SET VAL+VAL$ ;In!ializeaz" variabila VAL2 ;func!ie de variabilele VAL, VAL$. Variabila poate fi redefinit" n program REG 8 COUNTER SET R0 ;Define#te variabila COUNTER ce poate fi redefinit" n program 9 BSEG AT BITI+8 ;Seteaz" adresa de la care definim zona utilizator accesibil" pe bit 0029 $0 BIT_0: DBIT $ ;Define#te bitul BIT_0 002A $$ BIT_$: DBIT VAL2 ;Define#te func!ie de VAL2 bitul BIT_$ 0008 $2 VAL2 SET 8H ;Redefine#te variabila VAL2 0008 $3 BIT_2 BIT VAL2 ;Define#te bitul BIT_2 $4 XSEG AT 80H ;Define#te zona memorie externe utilizator ncepnd de la adresa 80H 0080 $5 STACK$ DATA 80H ;Define#te pointer-el STACK$ $6 CSEG ;Define#te nceputul zonei "memorie de program" 0000 $7 START CODE 00H ;Define#te tipul memoriei 0000 020003 $8 JMP MAIN ;Instruc!iune de salt 0003 $9 ISR0 CODE START+3 ;Define#te adres" coresp. ISR0 000B 20 ISR$ CODE START+0BH ; Define#te adres" coresp. ISR0 0003 2$ MAIN: ;Adres" de salt (definit" de eticheta MAIN) 0003 85808$ 22 MOV SP,STACK$ ;Ini!ializare cu STACK$ a SP 23 END ;Sfr#it program surs" SYMBOL TABLE LISTING ------ ----- ------NAME TYPE V A L U E ATTRIBUTES BITI . . . D ADDR 002$H A BIT_0. . . B ADDR 0025H.$ A BIT_$. . . B ADDR 0025H.2 A BIT_2. . . B ADDR 002$H.0 A COUNTER. . REG R0 ISR0 . . . C ADDR 0003H A ISR$ . . . C ADDR 000BH A MAIN . . . C ADDR 0003H A REG23. . . D ADDR 00$0H A SP . . . . D ADDR 008$H A STACK$ . . D ADDR 0080H A START. . . C ADDR 0000H A VAL. . . . N NUMB 0020H A VAL$ . . . N NUMB 00$0H A VAL2 . . . N NUMB 0008H A

2. Programarea sistemelor cu MC

6$

Al"turi de dispozi!iile mai sus men!ionate, pentru u#urarea proiect"rii programelor sunt admise o serie de macro-instruc!iuni, specifice asamblorului, care asigur" asamblarea condi!ionat" a fi#ierelor surs" de program. Dintre avantajele pe care un astfel de stil n programare le are, amintim: Reduce substan!ial frecven!a erorilor acolo unde acelea#i secven!e de instruc!iuni sunt utilizate. Scopul simbolurilor utilizate n MACRO-uri este limitat doar la macro-ul respectiv Este util n special pentru crearea unor tabele de coduri simple. [list"_parametrii_formali]30 Nume_simbol3$ [,Nume_Simbol$][] Num"r_repeti!ii32

Iat" aceste directive: Nume_macro MACRO LOCAL REPT [Etichet":] [Etichet":]

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

Exemple: Am specificat deasupra liniei de defini!ie elementele acesteia: Nume defini!ie MACRO Cuvnt cheie Parametrul MACRO $ CLR_MEM MACRO DIMENS 2 MOV R0,#DIMENS ;ncarc" n R0 valoarea DIMENS 3 LOOP: ;Eticheta de definire a buclei 4 MOV @R0,#00H ;Scrie la adresa memorat" n R0:00H 5 DJNZ RO,LOOP ;Testeaz" #i cicleaz" pn" R0=0 6 ENDM ;Sfr#it MACRO CLR_MEM ; Macro-ul realizeaz" umplerea cu zero a memoriei interne de la adresa 000H #i ; pn" la adresa DIMENS 7 REP_OK: ;Define#te o etichet" de recunoa#tere 8 REPT 2 ;Define#te factorul de repeti!ie 9 MOV R0,#$ ;ncarc" n R0 valoarea $ $0 MOV A,@R0 ;Transfer" de la adresa $ informa!ia n A $$ ENDM ;Sfr#it surs" program generat repetitiv 0000 780$ $2+$ MOV R0,#$ ;Programul generat (4 instruc!iuni) 0002 E6 $3+$ MOV A,@R0 0003 780$ $4+$ MOV R0,#$ 0005 E6 $5+$ MOV A,@R0 0006 $6 IRP_EX: ;Exemplu de generare succesiune instruc!iuni $7 IRP X,<2,3> ;Definire variabil" X
30 3$

Parametri formali sunt variabile utilizate drept parametri n cadrul MACRO-ului Variabil"/simbol utilizat n spa!iul macro-ului 32 Variabil" ce precizeaz" de cte ori se insereaz" n codul surs" blocul de instruc!iuni cuprins ntre REPT #i ENDM

62

MICROCONTROLLERE

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

$8 $9 20

2. Programarea sistemelor cu MC

63

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

64

MICROCONTROLLERE

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

0000 E599

4 5

2. Programarea sistemelor cu MC

65

Un program deosebit de important este manager-ul de biblioteci LIB5$. Acest program asigur" crearea unei biblioteci de func!ii #i actualizarea acesteia. Linia de comand" cu care este invocat programul are structura: LIB5$ [<comanda>]<CRLF> Comenzile admise sunt: Comanda
ADD CREATE DELETE EXIT HELP LIST

Func!iunea

Adaug" un nou modul de program n bibliotec" Genereaz" o bibliotec" de func!ii (ini!ial goal") &terge din bibliotec" un modul de program Revine n mediul DOS Ofer" scurte indica!ii asupra comenzilor Afi#eaz" modulele #i simbolurile publice nume ale bibliotecilor

Comanda de ad"ugare (ADD) are sintaxa: ADD nume_fi#ier <CRLF> [(nume_modul$,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 ie#iri #i "buffer"-e pe intr"ri. Avnd n vedere caracteristicile specifice microcontrollerelor selec!ia porturilor este realizat" n spa!iul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru microcontroller-ele Atmel seriile 89Atxxxx ($05$,205$,405$), ci variantele 89Atxx (5$,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas, etc. n figura 2.5 prezent"m un sistem de dezvoltare dotat cu un monitor Franklin ce are implementat" o consol" via interfa!a serial". Sistemul dispune de 2 porturi de ie#ire $ port de intrare, precum #i un port de comunica!ie cu un afi#or cu cristale lichide (LCD) #i un decodificator pentru circuite de intrare/ie#ire cu 8 linii de selec!ie. Sistemul permite dezvoltarea unei aplica!ii care poate include toate elementele unui sistem dedicat. Evident dac" se dore#te, pot fi ad"ugate convertoare analog-digitale #i digital analoge, precum circuite de interfa!" diverse. Avantajul principal al acestui sistem const" n aceea c" el permite conectarea microcontroller-ului la procesul controlat ceea ce face ca utilizatorul s" poat" analiza, depana sau chiar reproiecta anumite programe chiar n contextul dat, avnd la dispozi!ie toate semnalele de excita!ie reale.

66

MICROCONTROLLERE

Memorie EEPROM

Zona de dezvoltare Microcontroller Memorii EPROM /SRAM

Porturi de intrare

Porturi de ie&ire

Figura 2. 5 Sistem de dezvoltare cu microcontroller PCB80C552

Programul monitor "mt.exe"func!ioneaz" mpreun" cu monitorul Franklin #i prezint" cteva comenzi: A [adres"] <CR,LF> Asambleaz" cod 805$ de la adresa specificat" BD [ALL] < num"r_break_point> Invalideaz" toate break point-urile sau cel specificat prin num"r ce reprezint" chiar indexul acestuia BE [ALL] < num"r_break_point> Valideaz" break point-urile. BK [ALL] <num"r_break_point> &terge toate break point-urile sau doar cel specificat BL Listeaz" break point-urile setate BS <adres">Seteaz" (stabili#te) un break point la adresa precizat" DB (Display Bits) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe bit ntre adresele de start #i stop DD (Display Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet ntre adresele de start #i stop aflat" n memoria intern" a MC DI (Display Indirect Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet indirect ntre adresele de start #i stop DX (Display Extended Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet plasat" n afara MC, ntre adresele de start #i stop

2. Programarea sistemelor cu MC

67

DC (Display Code) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet n memoria de program #i plasat" ntre adresele de start #i stop FILLB/FILLD/FILLI/FILLX/FILLC <adres"_start> <adres"_stop> <valoare> Directiv" de umplere zon" de memorie, cu acelea#i semnifica!ii ca #i la Dispozi!ia Display pentru diversele zone de memorie G <adres"_start> <adres"_break> Dispozi!ie de execu!ie program ntre adresa de start #i cea de break ? Dispozi!ie de help "on-line" H<num"r$><num"r2> Dispozi!ie de calcul n hexazecimal valoare sum"/diferen!" num"r$, num"r2 T <adres"_start> execut" pas cu pas instruc!iunile programului cu afi#area tuturor registrelor microcontroller-ului X[<nume_registru>] afi#eaz" to!i/registrul specificat F$ tast" special" ce permite ie#irea din program F2 tast" special" care permite nc"rcarea programelor n format Intel-HEX via interfa!a serial" (consola) F3 tast" special" ce permite salvarea n cadrul unui fi#ier al c"rui nume este specificat de c"tre operator a caracterelor recep!ionate via interfa!a serial" (consola)

2.1.4 Instrumente software de proiectare: MC PIC


Firma Microchip care produce microcontroller-ele PIC a adus pe pia!" produsul MPLAB drept mediu integrat de dezvoltare/simulare (IDE Integrated Development Environment) pentru procesoarele sale precum #i Starter-Kit-ul corespunz"tor fiec"rui microcontroller. Mediul MPLAB cuprinde urm"toarele componente: Editorul fi#ierelor surs" Asamblorul Compilatorul C Linkeditorul Editorul de stimuli StarterPIC sistemul de dezvoltare minimal pentru dezvoltarea aplica!iilor Simulatorul/Emulatorul microcontroller-elor PIC pentru diversele familii Programatorul microcontrollerelor ce dispun de memorie EPROM, EEPROM sau Flash. Asamblorul este oferit att integrat n mediu ct #i separat att versiunea DOS ct #i versiunea Windows pe $6 bi!i. Mediul integrat dispune de ferestre ce permit att editarea programului surs", vizualizarea fi#ierului list rezultat n urma asambl"rii, fereasta ce vizualizeaz" memoria intern" de program #i de date a microcontroller-ului,

68

MICROCONTROLLERE

fereastra cu registrele acestuia (zona SFR) #i fereastra "trace", ce urm"re#te evolu!ia programului #i cea corespunz"toare memoriei EEPROM de care microcontroller-ele din familia PIC dispun. Meniurile mediului integrat sunt n num"r de 3 #i anume:cel corespunz"tor func!iunilor de editare #i salvare fi#iere #i proiecte, cel corespunz"tor proces"rii fi#ierelor surs", respectiv asambl"rii sau compil"rii, al link-edit"rii fi#eirelor obiect #i cel corespunz"tor test"rii/simul"rii programelor scrise, ce permite execu!ia pas cu pas, admite editarea #i administrarea de stimuli sistemului precum #i n final, programarea microcontroller-ului respectiv. n ceea ce nsemn" dispozi!iile de asamblorului MPASM, apar mici deosebiri fa!" de asamblorul A5$.EXE. n continuare vom prezenta cteva dintre aceste deosebiri, o list" complet" de referin!" o pute!i g"si pe CD. Sistemul de numera#ie Zecimal Hexazecimal Octal Binar Caracter (ASCII) Sintaxa D'<digi!i>, .<digi!i> H'<digi!i>', 0x< digi!i > O'< digi!i >' B'< digi!i >' '<caracter>', A'<caracter>' Exemple D'$23', .255 H'EF' , 0xE32A O'$234' B'$$0$00$$' '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 Define#te un simbol drept constant" n program Define#te text de substitu!ie Define#te o constant" Include un fi#ier surs" Define#te tipul procesorului Asigneaz" o valoare unei variabile (poate fi apoi redefinit") Renun!" la defini!ia anterior precizat" prin #DEFINE Declar" un simbol drept variabil" Define#te o macroinstruc!iune de decizie Realizeaz" buclarea atta timp ct condi!ia testat" la nceput este adev"rat" Sintaxa Constant<etichet">=[<expresie>, <etichet">=<expresie>,..] #define <nume> [<arg>,<arg>,..] <etichet"> equ <expresie> include <nume_fi#ier> Processor <tip_procesor> <etichet"> set <expresie> #undefine <etichet"> variable <etichet">[=expresie] if <expresie> while <>expresie

2. Programarea sistemelor cu MC

69

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" spa!iu de memorie Umple o zon" de memorie cu o anume informa!ie mpacheteaz" n memoria de program un #ir Creaz" o valoare numeric" sau una text Declar" un byte Declar" o dat" n EEPROM Define#te o tabel" Declar" o dat" un cuvnt Define#te un MACRO Ie#ire dintr-unMACRO Export" defini!ia unei etichete Specific" adresa maxim" pentru memoria RAM

Sintaxa bankisel <etichet"> res <num"r_de_loca!ii> fill <expresie>,<num"r_loca!ii> <etichet"> da <expresie>[,<expresie>,] data <expresie>[,<expresie>..], data <text>[,<text>,..] db <expresie>[,<expresie$>,..] de <expresie>[,<expresie$>,..] dt <expresie>[,<expresie$>,..] dw <expresie>[,<expresie$>,..] <etichet"> macro [<argument>, <argument$>,..] Exitm global <etichet"> __maxram <expresie>

Op!iunile de link-editorului MPLINK atunci cnd este invocat sunt: /o nume_fi#ier /m nume_fi#ier /l pathlist /k pathlist /n length /h , /? /a hexformat /q /d specific" fi#ierul de ie#ire specific" generarea fi#ierului "hart"" nume_fi#ier specific" (adun")calea la fi#ierul bibliotec" ce este link-at specific" (adun") calea la fi#ierul script utilizat de linker specific" num"rul de linii llistate pe pagin" afi#eaz" fi#ierul de ajutor corespunz"tor link-erului specific" formatul HEX pentru fi#ierele de ie#ire iese din link-are evit" crearea fi#ierului listing absolut

3
MICROCONTROLLERE MOTOROLA (MC cu arhitectur! CISC)
Motorola a dezvoltat cteva tipuri de unit!"i centrale, la care s-au ata#at o multitudine de interfe"e, ob"innd astfel foarte multe tipuri de circuite, compatibile din punct de vedere software. Motorola a creat astfel posibilitatea producerii a nenum!rate variante de MC, care s! acopere ct mai multe din aplica"iile utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated Circuit). Spre deosebire de familia 805$ unde pe nucleul creat de INTEL, firme constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de MC, ob"innd astfel o unitate n diversitate. Schema bloc simplificat! a unui MC din familia Motorola este dat! n figura 3.$.
Memorie ROM, EPROM sau OTP Memorie RAM Memorie EEPROM Unitatea central! 6805, 6808... +VDD (+5V/+3V) RESET IRQ Oscilator

Magistrala de date #i adrese

Port A

Port B

Port C Porturi cu func"ii speciale (timer, CAN, SPI, SCI)

Figura 3." Schema bloc a unui microcontroller Motorola

3. Microcontrollere Motorola

7"

Porturile I/O pot fi de uz general, dar liniile porturilor pot fi utilizate #i de interfe"ele speciale. n continuare vor fi prezentate blocurile din structura MC Motorola 6805.

3."

MC M68HC05

3."." Memoria intern!


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

72

MICROCONTROLLERE

Con"inut Nefolosit Stare #i control pentru timer Registru num!r!tor pentru timer Stare #i control a ntreruperilor Nefolosit Nefolosit Registru de programare a EPROM Nefolosit Nefolosit RAM utilizator sau stiv! (64 octe"i) Nefolosit (5$2 octe"i) EPROM ($232 octe"i) Nefolosit (30 octe"i) Test ROM (2 octe"i) Registru COP Registru de m!#ti Rezerva"i 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-00$$ 00$2-00$7 00$8 00$9-00$F 0020-00BF 00C0-00FF 0$00-02FF 0300-07CF 07D0-07ED 07EE-07EF 07F0 07F$ 07F2-07F7 07F8 07F9 07FA 07FB 07FC 07FE 07FF

3.".2 Unitatea central!


Unitatea central! realizeaz! prelucrarea datelor pe 8 bi"i la o frecven"! intern! de 2MHz (tact extern de 4MHz), are o magistral! de adrese de $$-$4 bi"i #i con"ine registre #i unitatea aritmetic! #i logic!, figura 3.2. n general, la MC Motorola, bus-ul de adrese #i de date nu este disponibil n exterior. Unitatea central! are o arhitectur! cu bus unic pentru date #i instruc"iuni (von Neumann) #i con"ine urm!toarele registre: Registrul Acumulator (Accumulator - A) este un registru pe 8 bi"i de uz general. El nu este afectat de Reset. Registrul index (Index Register - X) este un registru pe 8 bi"i folosit la adres!rile indexate. Nu este afectat de Reset. Registrul indicator de stiv! (Stack Pointer - SP) este un registru de $3 bi"i care con"ine adresa urm!toarei loca"ii libere n stiv!. Dup! Reset indicatorul de stiv! devine 00FFh.

3. Microcontrollere Motorola

73

Unitatea central! 6805


Acumulator Registru index Indicator de stiv! Num!r!tor de program (PC) Registru de condi"ii UAL Unitatea aritmetic! #i logic!

Figura 3.2. Unitatea central! 6805

Registrul num!r!tor de program (Program Counter - PC) este un registru de $3 bi"i care con"ine adresa urm!toarei instruc"iuni de executat. Dup! execu"ia instruc"iunii registrul este incrementat. Un salt sau o ntrerupere determin! nc!rcarea PC cu alt! valoare dect adresa urm!toarei loca"ii. Dup! Reset registrul PC este nc!rcat cu con"inutul loca"iilor 3FFEh #i 3FFFh (la MC68HC705J$A). Registrul de condi#ii (Condition Code Register - CCR) este un registru de 8 bi"i (din care sunt folosi"i 5) cu urm!toarea semnifica"ie: Bitul 0 -LSB, (Carry/Borrow Flag) pozi"ionat dac! o adunare produce un transport sau dac! la o sc!dere este nevoie de mprumut. Bitul $ (Zero Flag), pozi"ionat dac! rezultatul unei opera"ii este zero. Bitul 2 (Negative Flag), pozi"ionat dac! rezultatul unei opera"ii este negativ (bitul 7 este $). Bitul 3 (Interrupt Mask Bit) cnd este $ sunt invalidate ntreruperile. Dac! apare o ntrerupere cnd acest bit este $, ea este memorat! pn! bitul devine 0; atunci se salveaz! registrele UC n stiv!. Dup! Reset bitul este setat n $ #i poate fi pozi"ionat n 0 cu instruc"iunea CLI. Bitul 4 (Half-Carry) este pozi"ionat cnd apare un transport de la bitul 3 spre 4 n acumulator la o opera"ie de adunare cu sau f!r! Carry. Este util la opera"ii BCD.

Unitatea aritmetic! #i logic! realizeaz! opera"iile aritmetice #i logice definite de setul de instruc"iuni. Multe din instruc"iunile aritmetice se bazeaz! pe algoritmul de la adunare. Astfel, o nmul"ire este realizat! printr-un #ir de adun!ri #i deplas!ri succesive #i dureaz! $$ perioade de clock.

74

MICROCONTROLLERE

Ini#ializarea unit!#ii centrale Un Reset duce unitatea central! ntr-o stare determinat! (la o adres! cunoscut!). Un Reset poate fi declan#at de o surs! intern! sau de o surs! extern! astfel: extern, prin pinul de RESET, activ pe 0; extern, Power On Reset (POR), la pornirea sursei de alimentare. Circuitul POR asigur! o ntrziere de 4064 tacte de la momentul n care oscilatorul devine activ #i dac! semnalul RESET extern este inactiv, procesorul ncepe s! lucreze; intern, de c!tre ceasul de gard!, Computer Operating Properly (COP). ncercarea de a executa o instruc"iune de la o adres! ilegal!. Dac! unitatea central! ncearc! s! execute o instruc"iune care nu este n EPROM sau RAM se genereaz! un RESET pentru a proteja MC de scrieri sau citiri din zone necontrolate.

3.".3 Moduri de adresare


Unitatea central! folose#te 8 moduri de adresare pentru o ct mai mare flexibilitate n utilizare: $. adresare inerent! - instruc"iunile nu au operand, cum este ntoarcerea din ntrerupere (RTI) sau STOP. Instruc"iunile inerente au lungimea de un octet. 2. adresare imediat! - instruc"iunile au un operand, care este o valoare imediat utilizabil! ntr-o opera"ie cu acumulatorul sau cu registrul index. Instruc"iunile au doi octe"i, primul fiind codul, iar al doilea valoarea imediat!. 3. adresare direct! - instruc"iunile pot avea acces la primele 256 de loca"ii de memorie. Instruc"iunile sunt pe doi octe"i, primul este codul iar al doilea este octetul cel mai pu"in semnificativ al adresei operandului; octetul cel mai semnificativ este considerat implicit 00h. 4. adresare extins! - instruc"iunile sunt pe trei octe"i #i pot adresa orice loca"ie de memorie. Primul octet este codul, al doilea este adresa (parte HIGH) iar al treilea este adresa (partea LOW). 5. adresare indexat! f!r! offset - instruc"iunile au un octet #i pot avea acces la loca"ii cu adresa variabil! din registrul index (care con"ine partea LOW a adresei). Pentru partea HIGH se folose#te 00h, a#a nct aceesul este n zona 0000-00FFh. 6. adresare indexat! cu offset pe 8 bi#i - instruc"iunile au doi octe"i, fiind accesibile loca"ii cu adresa variabil! n zona primelor 5$$ loca"ii. Unitatea central! adun! octetul din instruc"iune la registrul index (f!r! semn) #i se ob"ine adresa efectiv! a operandului. Un exemplu de utilizare al acestui mod de adresare este selectarea unui element k dintr-un tabel de n elemente. Valoarea

3. Microcontrollere Motorola

75

k este n registrul index, iar adresa nceputului tabelului este al doilea octet al instruc"iunii. 7. adresare indexat! cu offset pe "6 bi#i - instruc"iunile au trei octe"i, fiind accesibile toate loca"iile. UC adun! f!r! semn registrul index la cei doi octe"i din instruc"iune #i se ob"ine adresa efectiv! a operandului (primul octet dup! codul instruc"iunii este octetul HIGH). 8. adresare relativ! este folosit! n instruc"iunile de salt. La un salt relativ, se adun! (cu semn) octetul care urmeaz! dup! codul instruc"iunii la con"inutul registrului Program Counter. Se pot face salturi relative n gama $27 de octe"i nainte sau napoi.

3.".4 Setul de instruc#iuni


Unitatea central! MC68HC05 are 6$ de instruc"iuni (mai mult de 200 de coduri). Cteva dintre instruc"iunile mai importante, clasificate dup! tipul opera"iei, sunt enumerate n continuare. Opera#ii registru- memorie ADD, ADC - adun! con"inutul unei loca"ii de memorie la acumulator (f!r! sau cu transport) AND - #i ntre memorie cu acumulator CMP - compar! memorie cu acumulator EOR - sau exclusiv memorie cu acumulator CPX - compar! registru index cu memoria LDA, LDX - ncarc! acumulator (registru index) cu un octet din memorie ORA - sau logic ntre acumulator #i memorie SBC, SUB - sc!dere cu sau f!r! mprumut STA, STX - salvare acumulator (registru index) n memorie MUL - nmul"ire Opera#ii de tip cite$te- modific!- scrie ASL,ASR, LSL, LSR - deplasare aritmetic! (logic!) stnga (dreapta) BSET, BCLR - setare sau resetare bit CLR - resetare registru COM - complement fa"! de $ NEG - complement fa"! de 2 (negare) ROL, ROR - rota"ie stnga (dreapta) prin Carry TST- - test pentru zero sau negativ Opera#ii de salt BCC, BCS - dac! bitul Carry este 0 sau $ BEQ, BNE - dac! este egal (sau nu) BHCC, BHCS - dac! bitul Half Carry este 0 sau $ BHI, BHS - dac! este mai mare ori mai mare sau egal BLO, BLS - dac! este mai mic ori mai mic sau egal

76

MICROCONTROLLERE

BIH, BIL - dac! linia de ntrerupere extern! este $ sau 0 BMI, BPL - dac! este negativ (sau pozitiv) BMC, BMS - dac! masca de ntrerupere este 0 sau $ BRA, JMP - salt necondi"ionat BSR, JSR - salt la subrutin! Manipulare la nivel de bit BCLR, BSET - nscrierea unui bit cu 0 (sau cu $) BRCLR, BRSET - salt dac! un bit este 0 (sau cu $) Opera#ii de control CLC, SEC - nscriere cu 0 (cu$) a bitului de Carry CLI, SEI nscriere cu 0 (cu $) a m!#tii pentru ntrerupere NOP - nu se execut! nici o opera"ie RTI, RTS - ntoarcere din ntrerupere (subrutin!) STOP, WAIT - se opre#te oscilatorul CPU #i se a#teapt! o ntrerupere extern! (se valideaz! ntreruperile) SWI - ntrerupere software TAX, TXA - transfer! acumulatorul n registrul index (sau invers)

3.".5 Sistemul de ntreruperi


Unitatea central! poate fi ntrerupt! din programul curent de urm!toarele surse: un 0 logic aplicat din exterior pinului nIRQ; un $ logic aplicat din exterior la pinii PA3-PA0 ai portului I/O PA, dac! aceste ntreruperi sunt validate; o ntrerupere de la timer-ul sistemului (TOF Timer Overflow sau RTIF Real Time Interrupt), dac! ntreruperea este validat!; instruc"iunea de ntrerupere software SWI.

Dac! o ntrerupere vine n timp ce UC execut! o instruc"iune, instruc"iunea n curs este terminat! #i apoi se consider! ntreruperea. ntreruperile pot fi invalidate global n registrul condi"iilor de program (CCR) #i individual pentru fiecare surs! n parte. Un Reset inhib! toate ntreruperile pentru ca procesul de ini"ializare s! nu poat! fi ntrerupt. La apari"ia unei ntreruperi, unitatea central! termin! instruc"iunea n curs, apoi salveaz! n stiv! registrele UC, invalideaz! ntreruperile pentru ca o nou! ntrerupere s! nu deranjeze servirea ntreruperii curente. Cererile de ntrerupere sunt memorate #i servite dup! servirea ntreruperii curente. n PC se transfer! vectorul de ntrerupere #i se execut! rutina de servire a ntreruperii. Rutina se termin! cu instruc"iunea RTI care restaureaz! registrele UC din stiv!. Vectorii de ntrerupere pentru fiecare dintre sursele enumerate mai sus sunt stoca"i n memorie la adresele:

3. Microcontrollere Motorola

77

timer nIRQ sau PA instruc"iunea SWI Reset (POR, RESET din exterior, COP sau adres! ilegal!)

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

Adresele vectorilor pentru fiecare tip de MC se g!sesc n harta memoriei furnizat! de produc!tor. Unele MC din familie au #i alte interfe"e care pot #i ele s! solicite ntreruperi, a#a cum poate cere circuitul timer. Pn! la servirea ntreruperii trece un anumit interval de timp (tacte), timp necesar pentru ca UC s! termine instruc"iunea curent! #i s! salveze n stiv! registrele. Acest timp este numit Interrupt Latency #i poate fi orict de lung dac! ntreruperile nu sunt validate. Cea mai lung! instruc"iune este MUL, care dureaz! $$ tacte, iar unitatea central! are nevoie de 9 tacte pentru a salva registrele n stiv!, deci cel mai lung timp de a#teptare pentru servirea unei ntreruperi este de 20 de tacte. Acest timp trebuie s! fie luat n calcul n momentul realiz!rii unei aplica"ii n timp real. Dac! survine o a doua ntrerupere, timpul de a#teptare pentru servirea ei poate fi prea lung. O solu"ie ar fi validarea ntreruperilor n timpul servirii primei ntreruperi. n acest caz trebuie avut grij! ca stiva s! fie destul de mare pentru a permite salvarea a dou! seturi de registre.

3.".6 Interfe#e $i periferice on-chip


Blocurile func"ionale integrate n circuitul MC sunt de o deosebit! importan"! n implementarea unei aplica"ii. Este n egal! m!sur! important s! fie cunoscute #i bine st!pnite att capabilit!"ile unit!"ii centrale ct #i ale interfe"elor cu care este echipat MC aceast! cunoa#tere conduce la o exploatare performant! a resurselor. a. Porturi paralele I/O Porturile paralele I/O sunt forma cea mai simpl! a interfe"elor. MC68HC705C8 dispune de 3$ de linii I/O digitale de uz general grupate n patru porturi. Porturile A, B, #i C sunt porturi de cte opt bi"i fiecare; sensul transferului pe fiecare linie (intrare sau ie#ire) poate fi stabilit prin program. Fiec!rei linii i este asociat un bit ntr-un registru de direc"ie (DDR Data Direction Register). Organizarea porturilor de opt bi"i (A,B #i C) este identic!. Portul D dispune de #apte linii (f!r! PD6); acestea pot fi folosite doar ca linii de intrare. O particularitate a acestui port este faptul c! pinii corespunz!tori sunt folosi"i fie de portul D, fie de porturile seriale SPI #i SCI, n func"ie de starea de activare nscris! n registrele de comand! ale porturilor seriale SPI #i SCI. Liniile I/O pot fi citite sau scrise de unitatea central! cu instruc"iuni specifice. Liniile pot fi apelate grupat, la nivel de port sau individual, la nivel de

78

MICROCONTROLLERE

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

3. Microcontrollere Motorola

79

Bit 4 - ILIE Idle Interrupt Enable Bit -valideaz! ntreruperile cerute de caracterul #ir de $ Bit 3 - TE Transmit Enable - valideaz! transmisia Bit 2 - RE Receive Enable - valideaz! recep"ia Bit $ - RWU Receiver Wakeup Enable - pune receptorul n stare de a#teptare Bit 0 - SBK Send Break - trimite caracterul BREAK Structura registrului de stare SCSR este: Bit 7 - TDRE Transmit Data Register Empty - registru de transmisie gol Bit 6 - TC Transmission Complete - transmisie complet! Bit 5 - RDRF Receive Data Register Full - registru de recep"ie plin Bit 4 - IDLE - s-a recep"ionat un #ir de $ Bit 3 - OR Receiver overrun - eroare de vitez! de recep"ie Bit 2 - NF Receiver Noise - s-au detectat perturba"ii n datele citite (prin e#antionarea bitului de START) Bit $ - FE Framing Error - eroare de cadrare. Registrul ratei de transfer este descris n tabelul 3.2.
Tabelul 3.2 Con#inutul registrului ratei de transfer

Bit 5 0 0 $ $

Bit 4 0 $ 0 $

Ceas pentru transfer ceas intern ceas intern /3 ceas intern/4 ceas intern/$3

Bit 2 0 0 0 0 $ $ $ $

Bit $ 0 0 $ $ 0 0 $ $

Bit 0 0 $ 0 $ 0 $ 0 $

Rata de transfer ceas de transfer ceas de transfer/2 ceas de transfer/4 ceas de transfer/8 ceas de transfer/$6 ceas de transfer/32 ceas de transfer/64 ceas de transfer/$28

Rata de transfer se ob"ine printr-o dubl! divizare, nti se ob"ine un ceas de transfer prin divizarea ceasului intern, apoi se divizeaz! ceasul de transfer. Se pot astfel ob"ine diferite rate de transfer, de exemplu 4800 Baud (4808) la un ceas de 2MHz prin divizarea nti cu $3, apoi cu $. c. Portul serial SPI (Serial Peripheral Interface) Cu acest port se poate realiza o comunica"ie sincron! simpl!, folosit! de regul! pentru a transfera date ntre circuite pe acela#i montaj cu MC. Un transfer bidirec"ional necesit! 3 pini, unul dintre ei fiind alocat ceasului de transmisie generat de masterul SPI. Cu SPI se pot realiza transferuri #i ntre microcontroller-e. Transferurile pot fi full duplex. Registrele care controleaz! transferul SPI sunt registrul de control (SPICR - SPI Control Register) #i registrul de stare (SPISR - SPI Status Register). Un transfer SPI poate fi ini"iat doar de un master. Master-ul scrie un octet n registrul

80

MICROCONTROLLERE

de transmisie SPI (SPDR - SPI Data Register) de unde datele merg ntr-un registru de deplasare n care sunt serializate #i de unde sunt transmise sincron cu ceasul de transmisie. Transmisia se termin! dup! 8 tacte, cnd se pozi"ioneaz! bitul SPIF. nainte ca master-ul s! trimit! un nou octet trebuie s! se reseteze bitul SPIF prin citirea registrul de stare SPSR. n slave datele intr! n registrul de deplasare cu tactul de recep"ie, acela#i cu cel de transmisie. Cnd au intrat 8 bi"i, caracterul este transferat n registrul de date SPDR. Pentru a se evita erorile de vitez! (sau de suprascriere - Overrun) trebuie ca octetul din SPDR s! fie citit nainte ca un alt octet s! fie transmis din registrul de deplasare. Pozi"ionnd bitul MSTR din registrul SPCR n $, MC lucreaz! n mod master. n acest mod pinii au urm!toarea semnifica"ie: SCK (Serial Clock) este ie#ire de tact pentru sincronizare; MOSI (Master Output Slave Input) este ie#irea serial!; MISO (Master Input Slave Output) este intrarea serial!; nSS (Slave Select) protejeaz! MC dac! dou! circuite sunt master. Acest semnal activ dezactiveaz! la cel!lalt port SPI modul master, #terge bitul MSTR #i pozi"ioneaz! bitul de eroare (MODF Mode Fault Flag). SCK (Serial Clock) este intrarea de tact pentru sincronizare de la master; MOSI (Master Output Slave Input) este intrarea serial!; MISO (Master Input Slave Output) este ie#irea serial!; nSS (Slave Select) valideaz! SPI pentru modul slave.

Cu bitul MSTR=0 se valideaz! modul slave, n care pinii au semnifica"ia:

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

+$
Port I/O

0 $ 2
MC master

nSS SCK MOSI MISO


Dispozitiv slave

nSS SCK MOSI MISO


Dispozitiv slave

Figura 3.3 Conexiune SPI

3. Microcontrollere Motorola

8"

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

O ntrerupere poate fi generat! n urm!toarele situa"ii:

82 Divizare cu 4 Num!r!tor de 8 bi"i

MICROCONTROLLERE

MSB

TCR (Timer Counter Register) la adresa 0009h Xtal/2 TCSR registru de control #i stare a timerului TOF RTIF TOIE RTIE TOFR RTIFR RT$ RT0

Num!r!tor de 7 bi"i

Selec"ie ie#ire

Num!r!tor de 3 bi"i COP Figura 3.4 Timer 6805

Generare de Reset intern al UC

Ultimul nivel al timer-ului este un num!r!tor de 3 bi"i folosit pentru cesul de gard! (COP Computer Operating Properly). Dac! este validat! verificarea COP, trebuie ca programatorul s! reseteze COP nainte de expirarea perioadei programate pentru comanda unui RESET al UC. Perioada de timp n care COP trebuie resetat depinde de RT$ #i RT0. n tabelul 3.3 sunt date perioadele de ntrerupere #i perioadele n care COP trebuie resetat. Perioadele corespund unui tact de 2MHz:
Tabelul 3.3 Perioade de ntrerupere $i perioade de reset programabile cu un tact de 2 MHz.

RT$ 0 0 $ $

RT0 0 $ 0 $

Perioada de ntrerupere 8.2ms $6.4ms 32.8ms 65.5ms

Perioada n care COP trebuie resetat 57.3ms $$4.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 tranzi"ie pe pinul TCAP). n acest moment memoreaz! con"inutul registrelor timer-ului n registrele de captur!. Memorarea registrelor timer-ului la tranzi"ii de aceea#i polaritate a TCAP poate determina perioada unui

3. Microcontrollere Motorola

83

semnal, iar la tranzi"ii de polaritate opus! poate determina l!"imea unui impuls. Polaritatea de declan#are este programabil!. Prin comparare se poate genera un semnal de ie#ire cnd num!r!torul timerului atinge o valoare selectat!. La fiecare 4 tacte se compar! valoarea num!r!torului cu cea scris! n registrul de comparare. Dac! este egalitate se genereaz! un semnal TCMP. e. Portul PWM Modula"ia impulsurilor n l!"ime (Pulse Width Modulation) are multe aplica"ii, mai ales n comanda motoarelor de curent continuu sau a surselor de alimentare. Din acest motiv unele MC includ n structura lor un modulator PWM ca interfa"!. Circuitul MC68HC05D9 con"ine 5 canale PWM de cte 6 bi"i care sunt realizate cu ajutorul unui num!r!tor de 6 bi"i, un registru de control PWM #i 5 registre de date care formeaz! 5 linii PWM ce sunt disponibile la pinii portului D (figura 3.5).
PWM4 (000Dh) R E G I S T R U D E M O D P W M 0008h Figura 3.5 Structura modulului PWM la familia 6805

PWM 4

PWM3 (000Ch) Num!r!tor de 6 bi"i

PWM 3

PWM2 (000Bh)

PWM 2

PWM$ (000Ah)

PWM $

PWM0 (0009h)

PWM 0

n registrul de mod sunt 5 bi"i care valideaz! modulul PWM astfel nct semnalele PWM s! fie livrate pe la pinii portului D. Tot n registrul de mod mai este un bit, SCIB, care selecteaz! dac! la adresa 000Dh s! fie date pentru PWM sau rata de divizare pentru SCI. Dac! nu sunt folosite ca ie#iri PWM, liniile portului D pot fi folosite ca intr!ri/ie#iri obi#nuite. Registrul de mod PWM se afl! la adresa 0008h.

84

MICROCONTROLLERE

Dac! se ncarc! registrul de date cu 00h semnalul la ie#ire va fi tot timpul zero. nscrierea valorii 20h n registrul de date are ca rezultat un semnal cu factor de umplere 50% la ie#irea corespunz!toare, iar nc!rcarea valorii 3Fh va determina un semnal cu factor de umplere de 63/64. f. Portul USB (MC68HC05JB4) MC68HC05JB4 con"ine un convertor A/D #i o interfa"! USB, ceea ce l face ideal pentru achizi"ia de date #i transferul lor c!tre un calculator PC-AT. Datorit! structurii USB, este posibil! realizarea unui punct central de prelucrare echipat cu PC #i multe puncte de achizi"ie echipate cu acest MC. Modulul USB implementeaz! standardul USB $.0, de mic! vitez!, la $,5Mbps, cu 3 puncte de cap!t (End Point). MC con"ine #i transceiverul USB. Schema bloc a modului USB este dat! n figura 3.6.
MC Logica de control USB Transceiver Cablu USB

D+ D-

spre HUB sau alt dispozitiv

Registre USB

Stabilizator 3,3V

BUS INTERN

Figura 3.6 Structura intern! a portului USB

Transceiverul are o ie#ire diferen"ial! care poate lucra cu 3 st!ri pentru a permite transferul de date bidirec"ional de tip full-duplex. Receptorul trebuie s! fie de asemenea cu intr!ri diferen"iale. Comanda interfe"ei USB se realizeaz! prin intermediul a 3 registre de comand! iar starea poate fi citit! dintr-un registru de stare. Exist! un registru de adres! #i 24 de registre de date. Modul de func"ionare n ntreruperi este programat prin registrul de ntreruperi. Interfa"a USB poate lucra n modul de economie de energie dac! nu exist! trafic pe linii un anumit interval de timp. Apari"ia unei date la recep"ie sau emisia unei date de c!tre UC produce ie#irea din starea inactiv!.

3. Microcontrollere Motorola

85

g. Interfa#a LCD MC6805 DragonKat este denumirea unui MC din familia 6805 care con"ine o interfa"! pentru un afi#or cu cristale lichide. Interfa"a pentru LCD con"ine: logica de control pentru sincronizare; RAM-ul de display care stocheaz! datele pentru display printr-o coresponden"! $ la $ a bi"ilor (fiecare bit din memorie are corespondent un punct pe LCD). Memoria este organizat! n cuvinte de 5 bi"i #i poate fi scris! sau citit!; registru de date este folosit pentru a stoca datele din memoria RAM a LCD; generator de tensiune care con"ine un divizor de tensiune pentru alimentarea segmentelor #i a planului din spate; driver pentru planul din spate; driver pentru segmente.

Structura unui afi#aj LCD este ar!tat! n figura 3.7. Segmente (SEG 0-39)
Planul din spate (BP 0-$5)

Figura 3.7 Afi#aj LCD

Un punct este aprins cnd o linie Bpi #i una SEGi sunt active. Pentru caracterul A, memoria RAM de display are con"inutul din tabelul 3.4.
Tabelul 3.4 Con#inutul memoriei pentru afi$area caracterului A

Adresa 200 20$ 202 203 204 205 206 207

Bit0 0 0 $ $ $ $ $ 0

Bit$ 0 $ 0 0 $ 0 0 0

Bit2 $ 0 0 0 $ 0 0 0

Bit3 0 $ 0 0 $ 0 0 0

Bit4 0 0 $ $ $ $ $ 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 afi#ajul pentru a men"ine punctele aprinse. Frecven"a semnalelor de aprindere a punctelor este de 32kHz, iar frecven"a unui cadru este de 62,5Hz. Dimensiunea panourilor LCD difer!, de aceea difer! #i consumul de curent. Tensiunea spre afi#aj este ob"inut! prin nserierea unor rezisten"e, nseriere care poate fi comandat! soft. Schema bloc a interfe"ei pentru LCD este dat! n figura 3.8
Magistrala intern! de adrese si date

Registru de control

RAM pentru display $28x5bit

Registru de date LCD (40bi"i)

Driver pentru planul din spate BP0-BP$5

Driver de segmente

SEG0-SEG39 Figura 3.8 Schema bloc a intefe"ei LCD

3.".7 Managementul puterii


Instruc"iunea STOP plaseaz! UC n modul de lucru cu consum minim de energie. Ceasul intern este oprit #i toate procesele interne sunt oprite, inclusiv timer-ul. ntreruperile externe sunt validate automat n registrul CCR. Sunt #terse registrele aferente timer-ului #i canalului SCI, dar celelalte registre #i memoria nu sunt alterate. Unitatea central! poate fi trezit! din STOP doar de o ntrerupere extern!. Instruc"iunea WAIT plaseaz! UC ntr-un mod de lucru cu consum redus de energie. R!mn active timer-ul #i canalul serial SCI. Orice ntrerupere validat!, primit! din exterior sau de la temporizator sau SCI, trezesc unitatea central!.

3. Microcontrollere Motorola

87

ntreruperile sunt validate automat. Toate registrele #i memoria r!mn cu datele avute la intrarea n starea WAIT.

3.".8 Autoverificarea
MC are 2 moduri de operare: normal #i auto-verificare. Modul de operare este selectat de nivelul logic pe pinul IRQ n momentul unui RESET. n modul normal de operare ncepe rularea unui program din EPROM, deci EPROM-ul trebuie sa fie programat dac! a fost ales modul normal de operare. n modul autotest MC ruleaz! un program con"inut n ROM n zona de memorie 3F00h3FDEh. Autotestul comunic! rezultatele la pinii PC3-PC0, unde se pot conecta LED-uri.

3.".9 Programarea EPROM


Unele MC din familie con"in ROM, a#a cum este MC68HC05D9 care con"ine $6K octe"i de PROM sau MC68HC05D24 care con"ine 24K octe"i de ROM. Modelul MC68HC05D32 are 32K octe"i memorie EPROM, cu posibilitatea de #tergere UV. nscrierea memoriei se face cu ajutorul unei tensiuni suplimentare de $5V (Vpp). Circuitele MC68HC705C8A con"in 8K EPROM sau OTP. Memoria EPROM sau OTP se poate programa cu ajutorul unui modul special, construit de Motorola, sau folosind un montaj n care progamul se ncarc! n MC dintr-o memorie EPROM extern! sau cu orice programator care poate s! adreseze #i s! pun! date pe liniile de date (figura 3.9
Vpp +$5V la nscriere MC68xx A0-A7

PA
PA0PA7

SCI PD PD$ PD0 Circuite de modificare de nivel RS232

D0-D7

PB
PB0PB7

A8-A$2

PC
PC0PC4

TxD

RxD

Figura 3.9 Schema unui programator EPROM (sau OTP)

88

MICROCONTROLLERE

Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A$2) se stabilesc la portul C (PC0-PC4). Liniile cu datele de nscris se stabilesc la portul B. Registrul folosit pentru programarea EPROM-ului este registrul de programare (PROG). Bit 2- LAT (Latch Enable Bit), pozi"ionat n $, comand! ca liniile de adrese #i date s! fie bufferate pentru ca n urm!torul ciclu s! se fac! o scriere a EPROM-ului; Bit 0 (PGM) valideaz! tensiunea Vpp pentru programarea EPROM-ului.

Se pune problema cum se poate ca un MC care nu a fost programat s! lucreze sub comanda unui program ca s! poat! avea acces la programarea unui registru. Pentru programare MC trebuie s! lucreze n modul bootstrap, mod n care MC intr! prin for"area liniei IRQ n timpul unui RESET. Programe simple utilizator pot fi introduse n RAM prin interfa"a SCI (Serial Communications Interface) #i rulate. Programul se transmite prin interfa"a serial!, dup! care se ruleaz! programul din RAM. Parametrii comunica"iei implici"i la Reset sunt 8 bi"i de date #i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint! num!rul total de octe"i care vor fi trimi#i. Con"inutul EPROM-ului poate fi verificat prin citirea lui tot prin SCI. Con"inutul EPROM-ului se poate ascunde, a#a nct s! nu mai poat! fi citit din exterior, prin pozi"ionarea unui bit de securizare n registrul de op"iuni (adresa $FDFh).

3.2

MC M68HC08

Familia 6808 urmeaz! n timp familiei 6805, binen"eles cu mbun!t!"iri care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu cele din familia descris! n subcapitolul anterior (3.$). Ca mbun!t!"iri ale UC 6805 pot fi men"ionate: indicatorul de stiv! este un registru de $6 bi"i ($3 la 6805); registrul de index este de $6 bi"i, exist! posibilitatea manipul!rii separat a octetului superior #i a celui inferior (8 bi"i la 6805); frecven"a intern! CPU standard este de 8MHz (2MHz la 6805); se pot adresa 64K octe"i memorie de date sau program (2K-$6K la 6805), are $6 moduri de adresare (8 la 6805) #i 78 de noi coduri de instruc"iuni; se pot face mut!ri de date ntre loca"ii de memorie f!r! intermediul acumulatorului; UC poate executa mp!r"iri de operanzi de 2 octe"i la operanzi de $ octet; operarea secven"ial! a UC poate fi oprit! de dou! tipuri de evenimente: reset sau ntreruperi. Sursele de Reset suplimentare fa"! de 6805 sunt:

3. Microcontrollere Motorola

89

-detectarea unui cod de instruc"iune inexistent!; -tensiune de alimentare sub o limit! acceptat! (LVI, Low Voltage Inhibit). sistemul de ntreruperi admite un num!r maxim de $28 de surse de ntrerupere: reset, SWI #i IRQ0-IRQ$25. Unele dintre aceste cereri de ntrerupere sunt accesibile la pin. ntreruperea software are cea mai mare prioritate. n mod WAIT ceasul UC este oprit, dar celelalte module au ceas, astfel nct orice ntrerupere treze#te UC. n mod STOP toate ceasurile sunt oprite #i doar o ntrerupere extern! poate trezi UC.

Schema bloc a unui MC 6808 este prezentat! n figura 3.$0.


Monitor ROM (960bytes) Memorie ROM sau FLASH (4096bytes) Memorie RAM ($28bytes) Memorie EEPROM +VDD (+5V sau +3V) RESET IRQ Oscilator Magistral! de date #i adrese

Unitatea central! 6805, 6808...

Port A

Port B

Port C

Port D

Port E
Seriale

Port F

Port G

Port H

ADC

Timer

Tastatur!

Figura 3."0 Schema bloc a unui MC din familia 6808

3.2." Unitatea central! 6808


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

90

MICROCONTROLLERE

software-ului de pe calculatorul gazd! n MC #i execu"ia lui din RAM. Pentru MC echipate cu EEPROM n mod monitor se poate programa EEPROM-ul. Leg!tura serial! ntre calculator #i MC este RS232 prin intermediul pinilor unui port I/O. n mod monitor MC poate s! execute programe din RAM cu ajutorul unor comenzi simple monitor, toate func"iile MC fiind valide. n modul monitor COP este invalidat. Transferul de date este bidirec"ional. Fiecare comand! spre MC este urmat! de un r!spuns ecou al MC. Comenzile monitorului sunt: READ - cite#te o loca"ie de memorie (se trimite cod+2 octe"i de adres! #i se returneaz! con"inutul loca"iei), WRITE - scrie o loca"ie de memorie (se trimite cod+2 octe"i de adres!+octetul de scris) IREAD - citire indexat!, cite#te urm!torii 2 octe"i din memorie fa"! de ultima adres! accesat! IWRITE - scriere indexat!, scrie urm!torii 2 octe"i din memorie fa"! de ultima adres! accesat! READSP - cite#te indicatorul de stiv! RUN - ruleaza program

Viteza de transfer implicit! ntre MC #i calculator este de 4800bps cu pinul PTC3 "inut la $ n timpul resetului #i 9600bps cu pinul PTC3 "inut la 0 n timpul resetului.

3.2.2 Interfe#e $i periferice on-chip


a. Porturi paralele I/O MC 6808 poate gestiona 8 porturi I/O (A,B,C,D,E,F,G,H) cu linii care pot fi programate ca ie#iri sau intr!ri. Liniile nefolosite trebuie legate la mas! sau la tensiunea de alimentare pentru a preveni defectarea circuitului prin desc!rc!ri electrostatice sau consumul excesiv de curent. Fiec!rui port i corespunde un registru de direc"ie (DDR) prin care se programeaz! sensul de transfer al pinului. Unele porturi au semnifica"ii duble, dac! liniile lor sunt folosite #i de alte interfe"e: portul B poate fi folosit ca 8 linii de intrare n convertorul A/D (ADC); portul C este un port de 6 bi"i, bitul 2 se poate folosi pentru a furniza n exterior ceasul sistemului; portul D poate avea dou! linii folosite ca intr!ri pentru timer (Bit 6 #i Bit 4); portul E poate fi folosit ca #i canal SPI #i SCI; portul F este un port de 7 bi"i care poate fi folosit ca intr!ri/ie#iri pentru timer;

3. Microcontrollere Motorola

9"

portul G este un port de 3 bi"i, liniile pot fi folosite ca interfa"! pentru tastatur!; portul H este un port de 2 bi"i, liniile pot fi folosite ca interfa"! pentru tastatur!.

b. Convertorul analog digital (ADC) Convertorul A/D este un convertor pe 8 bi"i cu aproxim!ri succesive care poate face conversii continuu sau la primirea unei comenzi. Sfr#itul conversiei poate fi semnalizat cu un bit indicator (flag) sau poate cere o ntrerupere. Ceasul de conversie poate fi selectat. Un MC are 8 canale de conversie cu intr!ri multiplexate analogic. Intr!rile pentru ADC se fac pe pinii portului de uz general PTB7-PTB0. Selec"ia canalului se face pentru a stabili care pin este intrare analogic!. Ceilal"i pini pot fi folosi"i ca intr!ri/ie#iri de uz general. Dac! valoarea citit! este VREFH, atunci valoarea digital! va fi FFh, iar dac! este VREFL atunci valoarea digital! va fi 00h. Aceste tensiuni, mpreun! cu tensiunea de alimentare pentru blocul analogic al MC sunt furnizate din exterior. Schema bloc a convertorului este dat! n figura 3.$$.

Registru de date ADR

ADSCR Selec"ie canal

ADC
Cerere de ntrerupere Ceas de conversie

Intr!ri analogice

Figura 3."" Schema bloc a convertorului analog digital

Registrele ADC sunt: registru de control $i stare al ADC (ADSCR), care con"ine: Bit 7 COCO/IDMAS, conversie complet! sau selec"ie ntrerupere DMA. Dac! ntreruperile sunt invalidate (AIEN=0), COCO este pozi"ionat de fiecare dat! cnd se termin! o conversie. n modul de conversie continu! datele se suprascriu n registrul de date dup! fiecare conversie #i COCO este pozi"ionat doar dup! prima conversie. Dac! ntreruperile sunt validate (AIEN=$), IDMAS selecteaz! dac! ntreruperea solicit! #i un transfer DMA. Bit 6 AIEN (ADC Interrupt Enable) valideaz! ntreruperile la sfr#itul unei conversii.

92

MICROCONTROLLERE

Bit 5 ADCO (ADC Continous Conversion), dac! este setat se face conversie continu!. Bit4-0 ADCH4-0 selecteaz! unul din cele 8 canale de conversie registru de date (ADR) registru de ceas (ADCLK) care con"ine: Bit 7-5 ADIV2-0 formeaz! rata de divizare a ceasului de conversie de la ADICLK (000) la ADICLK/$6 ($00). Bit 4 ADICLK selecteaz! ca ceas de conversie ceasul intern sau un ceas generat de timer. O conversie ncepe dup! scrierea registrului ADSCR. Rezultatul conversiei este stocat n registrul de date (ADR) #i la terminarea conversiei se pozi"ioneaz! bitul COCO. Dac! se opteaz! pentru conversie continu!, dup! prima conversie urmeaz! alta, care rescrie registrul de date. Dac! sunt validate ntreruperile, sfr#itul conversiei poate cere ntrerupere c!tre UC sau poate face #i o cerere DMA. c. Interfa#a extern! msCAN08 (Motorola Scalable CAN) Protocolul CAN a fost definit de BOSCH n $99$ pentru utilizarea pe o magistral! la autoturisme, unde s! ndeplineasc! condi"ii specifice: procesare n timp real, fiabilitate ntr-un mediu perturbat #i pre" mic. Caracteristici ale magistralei msCAN08 sunt: transmisie serial! sincron! cu blocuri ntre 0-8 octe"i; viteza de transfer pn! la $MBps; transferul serial se face pe 2 linii, o intrare (RxCAN) #i o ie#ire TxCAN).

Cuplarea la magistral! nu se face direct, ci prin transceiver-e care pot suporta un curent important #i care pot detecta dac! un MC are o linie defect! care ar for"a magistrala la conectare direct! (figura 3. $2).
MC $ MC 2

msCAN08 TxCAN RxCAN

msCAN08

TxCAN RxCAN Transceiver

Transceiver

Magistrala

Figura 3."2. Cuplarea la magistrala CAN

3. Microcontrollere Motorola

93

O implementare modern! trebuie s! respecte dou! condi"ii: orice dispozitiv CAN poate s! transmit! un #ir de mesaje f!r! s! elibereze magistrala ntre mesaje. Arbitrarea magistralei se va face doar dup! ce s-a terminat transmiterea mesajului. mesajele sunt astfel organizate nct cel mai prioritar mesaj va fi trimis naintea celor care stau de mai mult timp n coada de a#teptare.

Aceste cerin"e pot fi ndeplinite cu o schem! de transmisie cu buffere duble. Chiar #i a#a, unitatea central! nu are ntotdeauna timp s! aranjeze datele n buffer, a#a nct la 6808 s-a realizat o arhitectur! cu 3 buffere. Mesajul recep"ionat este stocat ntr-o stiv! FIFO cu 2 nivele. Exist! 2 buffere de recep"ie de $3 octe"i aranjate ntr-o singur! arie de memorie, astfel nct registrul de date recep"ionate are o singur! adres!. Registrul RxBG (Background Receive Buffer) prime#te datele seriale #i le transfer! n RxFG (Foreground Receive Buffer) care poate fi adresat de unitatea central!. Dac! mesajul recep"ionat este corect (are un identificator valid) se pozi"ioneaz! bitul RxF (Receiver Full Flag) #i se genereaz! o cerere de ntrerupere. n acest timp n registrul RxBG se recep"ioneaz! un nou cadru. Schema bloc pentru recep"ie #i transmisie este dat! n figura 3.$3.
RxBG RxFG RxCAN Filtru

RxF

Date spre CPU


Tx0
PRIO

TxE 0

Tx$ TxCAN
PRIO

Date de la CPU TxE $ TxE 2

Tx2
PRIO

Figura 3."3 Schema bloc de receptie, emisie CAN

Pentru a mic#ora num!rul de ntreruperi solicitate UC de c!tre receptor s-a introdus un filtru de acceptare. Datele msCAN au o anumit! structur!, primii bi"i

94

MICROCONTROLLERE

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

3. Microcontrollere Motorola

95

3.2.3 Programarea memoriei EEPROM


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

EEBPx 0 0 0 0 $

EERAS$ 0 0 $ $ X

EERAS0 0 $ 0 $ X

Opera"ia 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. Pozi"ionarea lui EEPGM trebuie s! fie precedat! n alt pas de pozi"ionarea lui EELAT. registrul EEPROM nevolatil (EENVR): Bit 7 EERA, arie redundant!; configureaz! memoria n dou! jum!t!"i redundante. Bit 4 - CON0; stabile#te dac! se valideaz! securitatea memoriei (cu 0) sau nu. Bit 3-0 EEBP3-0, bi"i de protec"ie; dac! ace#ti bi"i sunt $, blocul de memorie este protejat la scriere. registrul de configura#ie a ariei, EEACR se poate citi ceea ce a fost nscris n registrul EENVR. Din ra"iuni de siguran"! a informa"iei, datele de configurare a

96

MICROCONTROLLERE

EEPROM se scriu ntr-un registru nevolatil, EENVR. La un RESET, datele din EENVR se scriu ntr-un registru volatil corespondent (EEACR). n modul de economie de energie STOP nu se poate face nscrierea sau #tergerea memoriei EEPROM. Pentru nscrierea EEPROM se parcurg urm!torii pa#i: se reseteaz! EERAS$ #i EERAS0 (#i se seteaz! EELAT n EECR) se scrie octetul n EEPROM se seteaz! EEPGM se a#teapt! un timp pentru ca programarea s! poat! fi executat! se reseteaz! EEPGM se a#teapt! un timp pentru ca tensiunea de programare s! scad! se reseteaz! EELAT

O #tergere pe bloc sau global! se face cu bi"ii EERAS ca n tabelul 3.5, orice adres! din bloc fiind posibil!. mp!r"irea n blocuri este EEBP0 (0800h087Fh), EEBP$ (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh). n modul redundant EEBP2 #i 3 nu au nici o semnifica"ie.

3.3

MC PE "6 BI%I - 68"6

Unitatea central! 68$6 este o unitate central! cu magistrala de date de $6 bi"i #i o magistral! de adrese pe 20 de bi"i care permite adresarea a $Moctet de memorie. UC con"ine 2 registre acumulator de $6 bi"i #i 3 registre index de $6 bi"i pe lng! registrele clasice. Unitatea central! poate executa instruc"iuni pe 8 bi"i, pe $6 bi"i sau pe 32 de bi"i. Toate instruc"iunile de la UC 68$$ pot fi executate de 68$6, dar cu alt num!r de tacte, deci cu alt! vitez!. Unitatea central! func"ioneaz! la maximum $6MHz. Tehnologia de fabrica"ie permite func"ionarea #i la viteze mai mici, chiar n regim static (ca #i celelalte UC). Unitatea central! con"ine facilit!"i DSP (Digital Signal Processing), fiind posibile nmul"iri cu numere frac"ionare. UC permite $0 tipuri de adresare, din care 6 sunt preluate de la 68$$. Pentru p!strarea compatibilit!"ii, registrul PC #i indicatorul de stiv! sunt de $6 bi"i, dar apare un registru nou, numit K, ce re"ine extensiile de la $6 bi"i la 20 de bi"i pentru registrul PC #i SP. n structura UC mai apar #i registrele pentru nmul"iri, 2 registre de $6 bi"i (H #i I) #i unul de 36 de bi"i pentru rezultat (MAC). Pentru comunica"ia ntre MC sau pentru adresarea memoriei externe s-a standardizat un bus extern, numit IMB (Intermodule Bus), cu $6 linii de date #i 24 linii de adres!, la care s-a aliniat #i 68$6. Acest bus este de tip asincron, permi"nd transfer pe 8 sau $6 bi"i n urma unui protocol (handshake).

3. Microcontrollere Motorola

97

3.3." Modulul de integrare (SIM, System Integration Module)


Acest modul, ap!rut de la 68$$, grupeaz! blocurile care controleaz! sistemul #i cuprinde: Modul pentru configurarea sistemului #i protec"ie: $. un monitor de bus; reseteaz! sistemul dac! apar cicluri de magistral! mai lungi de 8-64 tacte de ceas sistem; 2. un monitor de HALT; pozi"ioneaz! un bit n registrul de stare al RESET-ului cnd a ap!rut o instruc"iune de HALT pe bus; 3. un monitor de ntreruperi; supravegheaz! apari"ia unei arbitr!ri n timpul unui ciclu de ntrerupere; 4. un ceas de gard! (watch dog); Modul pentru sintetizarea ceasului; poate fi realizat! din mai multe surse; dintr-o surs! intern! cu ajutorul unei bucle PLL, dintr-o surs! extern! cu ajutorul buclei PLL sau direct dintr-o surs! extern!. Modul de formare a bus-ului extern Modul de test

3.3.2 Interfe#e
Interfe"ele seriale sunt grupate sub forma unui modul serial cu coad! de a#teptare (QSM Queued Serial Module) care con"ine o interfa"! serial! SPI #i una SCI. Coada de a#teptare este format! n RAM #i are dimensiunea de $6 cuvinte de 8-$6 bi"i fiecare. Transmisia acestui #ir de date poate fi executat! automat, f!r! interven"ia unit!"ii centrale. Modulul QSM este cuplat pe bus-ul IMB. Convertorul analog numeric (ADC) este un convertor cu aproxima"ii succesive cu rezolu"ia programabil! de 8-$0 bi"i, cu 8 canale multiplexate. Convertorul este conectat pe bus-ul IMB. Pentru date importante (cum ar fi cele din stiv!) exist! o memorie RAM static de $K octet care la c!derea tensiunii de alimentare este alimentat! de la un pin special, unde se poate conecta o baterie. Timer-ul are $$ canale, din care 2 sunt folosite pentru generarea semnalelor PWM. Circuitul este capsulat n capsule de $32 sau $44 pini. Schema bloc a circuitului este dat! n figura 3.$4.

98 SIM Unitatea central! 68$6

MICROCONTROLLERE Port C

Port E

IMB Memorie SRAM ($024 octe"i)


Port F

Magistral! de date #i adrese IMB

QSM (SCI, SPI)

Timer

Port ADC
PWM

Port QS

Port GP

Figura 3."4 Schema bloc MC 68$6

3.4

MC PE 32 DE BI%I - 68300

MC 68300 este asem!n!tor arhitectural cu MC pe $6 bi"i. n jurul UC sunt grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8 canale, un modul de comunica"ie serial! cu coad! de a#teptare (QSM), 5$2 octe"i RAM static, 3,5K octe"i RAM care pot fi folosi"i #i de timer (TPURAM), un modul de timp (TPU, Time Processor Unit), pn! la 6 porturi I/O de uz general #i 2 module flash EEPROM. Ceasul intern al sistemului este de maximum $6MHz. Unitatea central! CPU32 este compatibil! soft cu procesoarele din familia 68000. Ea con"ine $6 registre generale de 32 de bi"i cu care se poate lucra pe 8, $6 sau 32 de bi"i, un PC de 32 de bi"i, un SP de 32 de bi"i, un registru de stare #i alte registre.

3. Microcontrollere Motorola

99

Timer-ul este o unitate microprogramat! care poate lucra separat de UC, #i care con"ine propriul RAM. Timer-ul este format din $6 canale independente. Fiecare poate executa o func"ie de timp #i poate fi programat independent. Memoria flash EEPROM serve#te la stocarea nevolatil! a informa"iilor cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent. Memoria EEPROM este foarte rapid!, ea poate r!spunde n 4 tacte. MC este echipat cu 2 module de flash EEPROM, unul de $6K octe"i #i unul de 48K octe"i. Memoria EEPROM poate fi configurat! pentru a lucra n modul bootstrap. Memoria EEPROM poate fi #tears! doar neselectiv (n ntregime) #i are nevoie de o alimentare special!.

3.5

DATE COMPARATIVE PENTRU MC MOTOROLA CISC

Tabelul 3.6 arat! principalele performan"e, comparativ, pentru MC din familia Motorola:
Tabelul 3.6 Tabel comparativ pentru MC Motorola - CISC

MC 6805 6808 68$6 68300

Magistrala date 8 8 $6 32

de Frecven" a (MHz) 2 8 $6 $6

Linii I/O Interfe"e speciale 3$ 48 48 48 6 6 6 6

Pre" (USD) $.9 2.$ 8.25 $7.5

4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua genera!ie de MC "i este cel mai folosit "i cel mai bine vndut MC din lume. n 1976 Intel a prezentat familia de microcontroller-e MCS48 care este compus# din 8048, 8748 "i 8035. A ap#rut astfel pentru prima dat# pe pia!# un microcalculator complet pe un singur chip. MC includea o unitate central# pe 8 bi!i, memorie ROM sau EPROM de 1024x8bi!i, RAM 64x8 bi!i, porturi I/O "i timere. n etapa a doua, INTEL a lansat familia MCS-51 format# din MC 8051, 8751 "i 8031. INTEL recomand# ca punerea la punct a aplica!iei s# fie realizat# pe MC 8751 care este prev#zut cu memorie EPROM (4K octe!i). Memoria poate fi programat# cu orice programator, dar se recomand# utilizarea programatorului de la INTEL (UPP, Universal PROM Programmer). Pentru produse n serie mare se recomand# 8051, care are memorie ROM, programat# de furnizor la comanda beneficiarului "i care revine la un pre! de cost mult mai mic. MC 8031 nu con!ine ROM, dar se poate ata"a n exterior ROM, PROM sau EPROM, direct sau multiplexat. 8051 este un MC foarte puternic "i u"or de programat. Ca dovad#, n tabelul 4.1 se prezint# cteva modele oferite de diferi!i furnizori, echivalente cu 8051:
Tabel 4.1 Modele echivalente 8051 oferite de diferi!i produc"tori

Varianta 8031 8051


80C51GB 87C51GB SABC502

80C552 83CL580 80C320 89S8252 89C55

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

Produc#tor To!i To!i 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

Observa!ii
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

4. Familia MCS-51

101

PCA- arie programabil! de num!r!toare (programmable counter array) LV- tensiune redus! 3,3V (low voltage) PWM- modularea impulsurilor n l!"ime (pulse width modulation) CC- intrare #i comparare (capture/compare) i2c- Interfa"a I2C (Philips) Tmr- timer Un tabel cu mai multe exemple este disponibil pe discul care nso!e"te cartea.

4.1

STRUCTURA #I FUNC$IONAREA

Schema bloc intern# este dat# n Fig. 4.1.


ROM Unitatea central# Gener ator de
Acumulator A Ind. Stiv# SP Nr. program PC

Adrese

(EPROM)

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 bi!i care con!ine urm#toarele registre:

102

MICROCONTROLLER-e

acumulator A - 8 bi!i; registrul de stare PSW (Program Status Word) - 8 bi!i; registrul B (8 bi!i) folosit n opera!iile de nmul!ire "i mp#r!ire; indicatorul de stiv# (Stack Pointer) - 8 bi!i; un registru num#r#tor de date (DPTR Data Pointer) - 16 bi!i - care poate fi manipulat "i ca 2 registre de cte 8 bi!i (DPH "i DPL) "i serve"te ca baz# n salturi indirecte sau n transferuri externe; num#r#torul de program (PC Program Counter) - 16 bi!i.

Memoria pentru program (ROM) este separat# "i distinct# de memoria pentru date, are alte mecanisme de adresare "i alte semnale de comand#. MC poate lucra att cu memoria pe chip ct "i cu memorie extern#; exist# astfel posibilitatea de a m#ri capacitatea memoriei de lucru. Memoria extern# este adresat# automat dac# adresa din instruc!iune este n afara zonei de memorie intern#. Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bi!i. Fiecare linie poate fi programat# individual ca linie de intrare, de ie"ire sau bidirec!ional#. Unele linii au semnifica!ii alternative. Portul 0 este folosit "i ca magistral# multiplexat# de adrese "i date, iar pentru transferuri care au nevoie de adrese de 16 bi!i, se folose"te portul P2 pentru octetul cel mai semnificativ de adres#. Liniile portului 3 sunt folosite ca cereri de ntrerupere (2 linii), intr#ri/ie"iri pentru timer (4 linii) "i linii seriale (2). 8051 are 2 timere de 16 bi!i, fiecare poate fi programat separat. Timerele pot fi utilizate pentru a m#sura intervale de timp, pentru a determina lungimea unor impulsuri, ca num#r#toare, etc. Rezolu!ia este de 1s, intervalul maxim de timp fiind de 65,536ms. Portul serial UART este un port serial full duplex cu rata de transfer pn# la 115Kbaud. Portul serial poate fi folosit att pentru comunica!ii cu echipamente periferice ct "i comunica!ii ntre circuite. Controllerul de ntreruperi admite ntreruperi de la 5 surse: de la portul serial (dac# s-a transmis sau recep!ionat un caracter); de la timere (cnd s-a nregistrat o dep#"ire); de la 2 pini de intrare.

Fiecare surs# poate fi validat# sau invalidat# individual. Prioritatea poate fi programat#. Fiecare surs# are asociat# o adres# n memoria program (tabelul 4.2).
Tabelul 4.2 Adresele de salt pentru ntreruperi Sursa de ntrerupere RESET Extern 0 Timer 0

Adresa salt
0000h 0003h 000Bh

de Sursa de ntrerupere
Extern 1 Timer 1 Port serial

Adresa de salt
0013h 001Bh 0023h

4. Familia MCS-51

103

4.1.1 Descrierea semnalelor la pini


Vcc- tensiunea de alimentare, +5V; Vss- mas#; PORT 0* - este un port pe 8 bi!i bidirec!ional cu drena n gol. Este port de date "i adrese (octetul cel mai pu!in semnificativ) pentru memoria extern#. De asemenea portul 0 prime"te octe!ii pentru programarea EPROM-ului intern iar n timpul verific#rii programului din EPROM, datele pot fi citite tot prin portul 0. PORT 1*- este un port pe 8 bi!i bidirec!ional, cu drena n gol. n timpul program#rii "i test#rii EPROM-ului, la portul 1 se stabile"te octetul cel mai pu!in semnificativ de adres#. Pinii P1.0/T2 "i P1.1/T2X au func!ii duble. Astfel T2 este intrare extern# n Timerul 2 iar T2X este intrarea de comand# a unei capturi n Timer-ul 2. PORT 2*- este un port de 8 bi!i bidirec!ional. n timpul program#rii "i test#rii EPROM-ului la portul 2 se stabile"te octetul cel mai semnificativ de adres#. Pentru adresarea memoriei externe pe 16 bi!i portul 2 genereaz# partea mai semnificativ# a octetului de adres#. La adresare memoriei externe pe 8 bi!i portul 2 este registrul cu func!ii speciale P2. PORT 3*- este un port de 8 bi!i bidirec!ional. Pinii portului 3 au semnifica!ie alternativ# (tabelul 4.3).
Tabelul 4.3 Semnifica!ia dubl" a pinilor de la PORT 3

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

Semnifica!ie RXD-intrare serial# a porului pentru recep!ie TXD-ie"ire 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 r#mne n HIGH pe perioada a doi cicli ma"in# n timp ce oscilatorul func!ioneaz#, are loc ini!ializarea MC. ALE/PROG ALE (Address Latch Enable) valideaz# octetul cel mai pu!in semnificativ de adres# n timpul accesului la memoria extern# (PORT0). PROG
Ie"irile sunt bufferate "i pot suporta pn# la 4 intr#ri LS TTL. Pinii programa!i ca ie"iri n stare HIGH pot fi folosi!i ca intr#ri. Ca pini de intrare, dac# au fost for!a!i n LOW din exterior, ace"tia furnizeaz# curent.
*

104

MICROCONTROLLER-e

este semnal de intrare pentru impulsul de programare n timpul program#rii EPROM-ului. /PSEN (Program Store Enable) valideaz# citirea programelor din memoria program extern#. Nu se activeaz# la citirea datelor din memoria extern# de date. /EA/VP /EA (External Acces Enable) valideaz# n stare HIGH memoria program intern#, iar n stare LOW valideaz# memoria program extern#. La VP se aplic# tensiunea de 21V n timpul program#rii EPROM-ului. XTAL1, XTAL2 se conecteaz# cristalul de cuar! sau un oscilator extern.

4.1.2 Gestionarea memoriei


MC8051 au spa!ii diferite de adresare pentru memoria program "i memoria de date. Spa!iul maxim de adresare este de 64K att la memoria program ct "i la cea de date. Un extras din datele de catalog arat# tipurile "i dimensiunea memoriei pentru diferite circuite din familie (tabelul 4.4).
Tabelul 4.4 Echiparea cu memorie a diferitelor circuite 8051

MC 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 spa!iul de adresare 00H - FFH (256bytes). Ea poate fi "umbrit# multiplu"; aceea"i adres# poate fi atribuit# mai multor arii de memorie (intern# SRAM, intern# extins# SRAM, ariei registrelor programabile, memoriei externe de program sau de date). Umbrirea este realizat# fie utiliznd semnale hard (PSEN, nRD, nWR), fie utiliznd instruc!iuni specifice ce se refer# strict la unul dintre tipurile de memorie (MOVC sau MOVX). n zona 80H -FFH sunt registrele speciale (SFR) care sunt adresabile direct. Zona 00H-7FH poate fi adresat# direct sau indirect. Memoria extern# se afl# ntre adresele 0000H-FFFFH. Validarea folosirii memoriei de date se realizeaz# cu semnalele nRD "i nWR. Aceste semnale (nRD "i nWR) se folosesc "i pentru selec!ia datelor din portul 0, unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE. Informa!ia poate fi accesat# cu adresare pe 8 sau pe 16 bi!i.

4. Familia MCS-51

105

b. Gestionarea memoriei program (ROM, EPROM) Se poate folosi memoria ROM intern# (nEA n stare HIGH) sau cea extern# (nEA n stare LOW). Strobul pentru citirea memoriei externe este semnalul PSEN. Toate citirile se fac cu adresare pe 16 bi!i.

4.1.3 Circuitele timer


MC 8051 are 2 num#r#toare de 16 bi!i, iar 8052 3 num#r#toare. n modul de func!ionare ca temporizator registrul este incrementat la fiecare ciclu cu un impuls la 1/12 din frecven!a oscilatorului. n modul de func!ionare ca num#r#tor, registrul este incrementat la fiecare tranzi!ie din 1 n 0 la pinul extern corespunz#tor T0, T1 "i T2. Rata maxim# de num#rare este 1/24 din frecven!a oscilatorului. Programarea func!ion#rii timer-elor se face cu registrul TMOD din SFR, cu structura: pentru num#r#torul 1: GATE1, C/-T1 - M11, M01, pentru num#r#torul 2: GATE2, C/-T2 - M12, M02, unde: GATE - gestioneaz# controlul. Cnd GATE=1, timer-ul este activat doar ct timp pinul nINT corespunz#tor este n HIGH "i "i bitul TR din registrul SFR (TCON) este 1. C/-T - selecteaz# operarea ca timer (LOW) sau counter (HIGH) M1 "i M0 au semnifica!ia din tabelul 4.5.
Tabelul 4.5 Programarea modului de operare cu bi!ii M0 %i M1

M1 0 0 1 1

M0 0 1 0 1

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

Semnifica!ia bi!ilor din registrul special TCON este: TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde: TF0, TF1- indicatorul de dep#"ire al timer-ului 0, respectiv 1. Este setat la dep#"ire ca num#r#tor sau teporizator "i este resetat cnd se apeleaz# rutina de ntrerupere a timerului corespunz#tor; TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri num#r#toarele/ temporizatoarele; IE0, IE1 - indicator de activare a ntreruperii pe front; IT0, IT1 - controlul activ#rii ntreruperii (pe nivel IT=0, sau pe front IT=1). Pentru MC care au al treilea timer exist# registrul T2CON cu structura:

106

MICROCONTROLLER-e

TF2, EXF2, RCLK, TCLK, EXEN2, TR2, C/-T2, CP/RL2, unde: TF2 - indicator de dep#"ire; EXF2 - indic# apari!ia unui eveniment la pinii de control extern; RCLK - cnd este setat, portul serial folose"te ca "i tact de recep!ie semnalul de dep#"ire generat de timerul 2; TCLK - cnd este setat, portul serial folose"te ca "i tact de emisie semnalul de dep#"ire generat de timerul 2; EXEN2- indicator de activare extern#; TR2 - porne"te/ opre"te timerul 2 C/-T2 - selecteaz# func!ionarea ca timer sau num#r#tor; CP/RL2 - indicator pentru memorare.

4.1.4 Interfa!a serial" UART


Portul serial este de tip asincron, full-duplex. Portul serial poate opera n 4 moduri: Modul 0: datele seriale sunt transferate n ambele sensuri prin RXD. TXD furnizeaz# ceasul de transmisie. Rata transferului este 1/12 din frecven!a de oscila!ie. Modul 1: transmisie asincron#, se transmit date prin TXD, se recep!ioneaz# prin RXD n formatul 1 bit de start, 8 bi!i de date, 1 bit de stop, cu rata de transfer variabil# (programabil#) cu un timer. Modul 2: ca la modul 1, dar se transmite "i un al 9-lea bit de date care poate fi bitul de paritate, cu rata de transfer egal# cu frecven!a oscilatorului divizat# cu 32 sau cu 64. Modul 3: ca la modul 2, cu rata de transfer variabil# (programabil#) cu un timer. Registrul de control al portului serial SCON (din registrele SFR): SM0, SM1, SM2, REN, TB8, RB8, TI, RI;

SM0, SM1 programeaz# modul de lucru al portului serial conform tabelului 4.6.
Tabelul 4.6 Programarea modului serial cu bitii SM0 si SM1

SM0 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 recep!ia; TB8 - al 9-lea bit ce se transmite n modurile 2 "i 3; RB8 - al 9-lea bit ce se recep!ioneaz# n modurile 2 "i 3; TI - indicator de ntrerupere a transmisiei; RI - indicator de ntrerupere a recep!iei.

4.1.5 Sistemul de ntreruperi


MC 8051 dispun de 5 nivele de ntrerupere, iar 8052 de 6 nivele. Exist# 2 surse externe, INT0 "i INT1, care pot fi active pe nivel sau pe front n func!ie de bi!ii IT0 "i IT1 din registrul special TCON. Indicatoarele de ntrerupere sunt bi!ii IE0 "i IE1 care se seteaz# automat cnd apare o ntrerupere "i se reseteaz# cnd s-a ncheiat tratarea ntreruperii. ntreruperile generate de timere sunt date de bi!ii TF0 "i TF1 din registrul TCON. Ace"ti bi!i sunt seta!i cnd apare o dep#"ire n num#r#toarele/ temporizatoarele 0 "i 1. ntreruperea pentru timerul 2 va fi generat# de un SAU ntre TF2 "i EXF2. Rutina de servire a ntreruperii va determina care dintre ace"ti bi!i a cerut ntrerupere prin citirea registrului T2CON. ntreruperea de port serial este generat# de un SAU logic ntre RI "i TI. . Rutina de servire a ntreruperii va determina care dintre ace"ti bi!i a cerut ntrerupere prin citirea registrului SCON. Fiecare din sursele de ntrerupere pot fi activate sau dezactivate prin setarea sau resetarea unui bit din registrul SFR numit IE, cu structura: EA, X, ET2, ES, ET1, EX1, ET0, EX0, unde: EA - dezactiveaz# toate ntreruperile cu IE=0. Cu IE=1 sunt validate ntreruperile "i se pot masca individual; ET2 - mascare ntrerupere pentru timer-ul 2; ES - mascare ntrerupere port serial; ET1 - mascare ntrerupere timer 1; EX1 - mascare ntrerupere extern# INT1; ET0 - mascare ntrerupere timer 0; EX0 - mascare ntrerupere extern# INT0. ntreruperilor pot fi tratate conform unei ierarhii implicite sau nivelul priorit#!ilor poate fi programat n registrul SFR numit IP. priorit#!i implicite: IE0 (cea mai mare prioritate), TF0, IE1, TF1, RI+TI, TF2+EXF2. structura registrului IP: X, X, PT2, PS, PT1, PX1, PT0, PX0, unde:

108

MICROCONTROLLER-e

PT2 PS PT1 PX1 PT0 PX0

- stabile"te nivelul de prioritate pentru ntreruperea timerului 2; - stabile"te nivelul de prioritate pentru ntreruperea portului serial; - stabile"te nivelul de prioritate pentru ntreruperea timerului 1; - stabile"te nivelul de prioritate pentru ntreruperea extern# 1; - stabile"te nivelul de prioritate pentru ntreruperea timerului 0; - stabile"te nivelul de prioritate pentru ntreruperea extern# 0.

Nivelul priorit#!ii poate fi programat n HIGH sau LOW. O ntrerupere LOW poate fi ntrerupt# de o ntrerupere LOW dar nu poate fi ntrerupt# de o ntrerupere HIGH. O ntrerupere HIGH nu poate fi ntrerupt#.

4.1.6 Operarea cu economie de energie


8051 are dou# moduri de operare cu putere redus#; modul inactiv (Idle) "i modul cu tensiune sc#zut# (Power Down). n modul inactiv oscilatorulfunc!ioneaz#, dar nu se execut# nici o instruc!iune. Timerele "i portul serial func!ioneaz# "i orice ntrerupere de la ele readuc circuitul n stare normal#. Un RESET hardware readuce circuitul n stare normal#. Starea CPU se p#streaz# n ntregime: indicator de stiv#, Program Counter, registre etc. n modul cu tensiune sc#zut# oscilatorul intern este oprit "i toate func!iile sunt oprite. Se p#streaz# doar RAM-ul intern "i registrele speciale. Singura modalitate de a ie"i din aceast# stare este prin RESET hardware. n aceast# stare tensiunea de +5V poate fi redus#. Modurile de operare cu economie de energie pot fi comandate prin registrul SFR PCON, care are structura: PD, IDL unde: PD IDL - bit pentru modul cu tensiune sc#zut#; - bit pentru modul inactiv.

4.1.7 Formarea unor semnale externe


RESET-ul se comand# pe intrarea RST a MC. Con!inutul registrelor speciale SFR va fi adus la 00H, cu excep!ia SBUF care va fi nedeterminat "i PCON care va fi 0XXX0000 n binar. RAM-ul intern nu este afectat. La pornirea sistemului se poate realiza un RESET automat cu un montaj ca n figura 4.2.
VCC R (4-10K) RST C (10)

Figura 4.2 Circuit pentru formarea semnalului RESET

4. Familia MCS-51

109

Ca "i generator de tact se poate folosi oscilatorul intern la intr#rile X1 "i X2, ca n figura 4.3.
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. Ceilal!i pini ai portului 2, precum "i semnalele RST, /PSEN, /EA/Vpp trebuie s# aib# urm#toarele nivele (tabelul 4.6).
Tabeul 4.6 Condi!ii pentru opera!iile de programare, verificare, setare bit siguran!"

Opera!ia Programare

RST 1

nPSEN

ALE

/EA/VP P

P2.7 1 0 1

P2.6 0 0 1

0 0 0

Verificare 1 Setarea bitului 1 de siguran!#

impuls la 0 pentru Vpp 50ms 1 1 impuls la 0 pentru VPP 50ms

Semnalul ALE este un impuls la 0 pentru 50 ms pentru a efectua programarea. Tensiunea Vpp este de +21V pentru 8751H "i de -12,75V pentru 8752BH (A se consulta cu aten!ie foile de catalog). Sursa de tensiune pentru Vpp trebuie s# fie foarte bine filtrat# "i stabilizat# deoarece chiar "i un mic impuls de tensiune poate produce v#t#marea circuitului. Verificarea programului se poate face dac# bitul de siguran!# nu a fost programat. Citirea se face n acelea"i condi!ii ca "i scrierea, cu excep!ia lui ALE care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citi

110

MICROCONTROLLER-e

neautorizat con!inutul EPROM-ului se programeaz# un a"a numit bit de siguran!# care odat# programat nu mai permite nici un acces electric la memoria EPROM. Odat# programat, acest bit se poate "terge doar prin "tergerea ntregii memorii EPROM. $tergerea EPROM-ului se poate face la lumin# ultraviolet# (2537Angstrom), cu cel pu!in 15W.sec/cm2, adic# o expunere de 20-30 min. la distan!a de 2-3cm la o lamp# de ultraviolete cu 12W/cm2. Programarea rapid# (Quick Pulse Programming) poate fi aplicat# la circuitele 875XBH, "i are ca rezultat posibilitatea program#rii unui circuit n numai 25 secunde. Programarea se poate face cu o tensiune Vpp mai mic# (12,75V). Semnalul ALE are forma unor impulsuri multiple, 25 de impulsuri de 100 s.

4.2

PROGRAMAREA MC DIN FAMILIA MCS-51

8051 are 111 instruc!iuni din care 64 sunt executate ntr-un singur ciclu.

4.2.1 Setul de instruc!iuni 8051


Instruc!iuni pentru transferul de date: Transferuri generale: MOV - efectueaz# un transfer pe bit sau pe octet de la surs# la destina!ie. PUSH - incrementeaz# registrul SP (Stack Pointer) "i transfer# un octet de la surs# la loca!ia din stiv# adresat# de SP. POP - transfer# un operand pe un octet de la loca!ia din stiv# adresat# de SP la destina!ie "i decrementeaz# SP. Transferuri specifice acumulatorului: XCH - mut# octetul din surs# n acumulator. XCHD - mut# bi!ii LOW din octetul din surs# n acumulator. MOVX - mut# un octet ntre memoria extern# de date "i acumulator. Adresa memoriei de date extern# poate fi specificat# n registrul dublu DPTR. MOVC - se cite"te un octet din memoria extern# de program n acumulator. Transferuri de adrese: MOV DPTR, #data, ncarc# imediat 16 bi!i de date n registrul dublu DPTR. Instruc!iuni aritmetice:

4. Familia MCS-51

111

Adunare: INC ADD ADDC DAA

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

Sc#dere: SUBB - sc#dere cu mprumut, scade operandul din acumulator, apoi scade CY "i pune rezultatul n A. DEC - scade 1 din operand "i pune rezultatul ca nou operand. nmul!ire: MUL - execut# o nmul!ire f#r# semn ntre acumulator "i registrul B, rezultatul ob!inut fiind pe 2 octe!i (octetul cel mai semnificativ se pune n B). Dac# to!i bi!ii din octetul cel mai semnificativ al rezultatului sunt 0 bitul OV "i CY din PSW se pun la 0. mp#r!ire: DIV - execut# mp#r!irea f#r# semn a con!inutului registrului A la con!inutul registrului B. Partea ntreag# a rezultatului se pune n A, iar partea frac!ionar# n B. Instruc!iuni pentru opera!ii logice: Instruc!iuni logice cu un singur operand: CLR - reseteaz# A orice bit adresabil direct. SETB - seteaz# orice bit adresabil direct. CPL - complementeaz# con!inutul lui A, f#r# a afecta PSW. RL - rota!ie stnga a acumulatorului. RLC - rota!ie stnga a A prin CY. RR - rota!ie dreapta a A. RRC - rota!ie dreapta a A prin CY. SWAP - inverseaz# niblurile n A. Instruc!iuni logice cu 2 operanzi: ANL - $I logic. ORL - SAU logic. XRL - SAU EXCLUSIV logic. Instruc!iuni de control: Apeluri "i salturi necondi!ionate: ACAL - este o instruc!iune pe 2 octe!i de apelare a unui subprogram care se folose"te atunci cnd adresa de salt este cuprins# n 2K ai paginii curente. Cmpul de adres# de 11 bi!i este concatenat cu cei mai semnificativi 5 bi!i din PC. LCALL- este o instruc!iune pe trei octe!i de apelare a unui subprogram care adreseaz# to!i cei 64K ai memoriei. RET - transfer# controlul la adresa de ntoarcere care a fost n prealabil salvat# n stiv# "i decrementeaz# registrul SP cu 2.

112

MICROCONTROLLER-e

AJMP - este un salt necondi!ionat la adresa specificat#analog cu ACALL. LJMP - este un salt necondi!ionat la adresa specificat# analog cu LCALL. SJMP - este un salt necondi!ionat scurt n cadrul a 256 de octe!i. Salturi condi!ionate: JZ - execut# salt dac# acumulatorul este 0. JNZ - execut# salt dac# acumulatorul nu este 0. JC - execut# salt dac# bitul de CY (Carry) este 1. JNC - execut# salt dac# bitul de CY este 0. JB - execut# salt dac# bitul adresat este 1. JNB - execut# salt dac# bitul adresat este 0. JBC - execut# salt dac# bitul adresat este 1 "i apoi "terge bitul adresat. CJNE - compar# primul operand cu al doilea operand "i face salt dac# ace"tia nu sunt egali. DJNZ - decrementeaz# operandul surs# "i pune rezultatul n operandul destina!ie. Dac# rezultatul nu este 0 se execut# salt. ntreruperi: RETI - ca "i RET, dar activeaz# ntreruperile.

4.2.2 Modurile de adresare


Adresare prin registre - programatorul are acces la 8 registre de lucru, notate R0R7. Cei mai pu!in semnificativi 3 bi!i ai codului instruc!iunii indic# unul dintre aceste registre. Se poate forma astfel o instruc!iune de un singur octet. De exemplu adunarea registrului R0 cu R1, cu rezultatul n acumulator: MOV A,R0 ADD A,R1 Adresare direct" - se pot adresa loca!ii din RAM, porturi I/O sau registrele cu func!ii speciale. La codul instruc!iunii se adaug# un octet care reprezint# loca!ia care se folose"te. De exemplu se adun# con!inutul loca!iei 30 din RAM la con!inutul loca!iei 40, cu rezultatul n loca!ia 40: MOV A,30h ADD A,40h MOV 40h,A Adresare indirect" prin registre - introdus# pentru a putea lucra cu variabile al c#ror loc n RAM se modific# n cursul rul#rii programelor. Ca registre index se folosesc registrele R0 "i R1, al c#ror con!inut indic# adresa n RAM. Cel mai pu!in semnificativ bit al codului instruc!iunii indic# registrul care este folosit ca index. n limbajul de asamblare al lui 8051, adresarea indirect# se reprezint# cu @. De exemplu se adun# con!inutul loca!iei adresat# de registrul R0 cu con!inutul loca!iei adresat# de registrul R1, cu rezultatul n acumulator: MOV A,@R0

4. Familia MCS-51

113

ADD A,@R1 Adresare imediat" - folosit# cnd operandul este o constant# cu o valoare cunoscut#, care se specific# n codului instruc!iunii. n limbajul de asamblare al lui 8051 constanta este precedat# de semnul #. De exemplu adunarea lui 15 cu 18 zecimal, cu rezultatul n acumulator: MOV A,#15 ADD A,#18

4.3

ECHIP&RI SPECIALE CU MEMORIE

4.1.1 Memoria EEPROM (Philips 80C851)


Memoria EEPROM are dimensiunea de 256 octe!i, poate re!ine informa!iile minimum 10 ani "i poate fi supus# la 10.000 de cicluri de "tergere/scriere. Circuitul con!ine multiplicatorul de tensiune pentru "tergere "i scriere. Comunica!ia ntre UC "i EEPROM se realizeaz# cu ajutorul a 5 registre: EADRH (adresa F3h), EADRL (adresa F2h) sunt dou# registre pentru adresare, primul pentru partea LOW a adresei, cel#lalt pentru partea HIGH (pentru implement#ri viitoare "i pentru adresarea bi!ilor de securitate). EDAT (adresa F4h) este registrul de date n care se stocheaz# octetul de scris sau octetul citit. Sunt posibile "i "tergeri pe bloc de date, caz n care con!inutul acestui registru nu conteaz#. ETIM (adresa F5h) este un registru pentru timer necesar pentru a adapta timpul de citire/ scriere la frecven!a sistemului "i trebuie nc#rcat cu valori func!ie de tactul sistemului "i de caracteristicile EEPROM-ului. ECNTRL (adresa F6h) este registrul de control care: stabile"te modurile de lucru: scriere, citire, "tergere pe octet, "tergere pe bloc; con!ine un bit care semnaleaz# c# este n curs o scriere sau "tergere.

Schema bloc a modulului este dat# n figura 4.4. Secven!iatorul asigur# secven!a de timp corespunz#toare pentru scriere sau "tergere. Datele "i adresele se transfer# prin intermediul registrelor de pe magistral#.

114

MICROCONTROLLER-e

CPU Secven!iator EEPROM

ECNTRL

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 secven!e de program, con!inutul loca!iei 20h este citit n acumulator. Memoria EEPROM este protejat# cu un octet la adresa 8000h. Se poate valida securitatea cu urm#toarea secven!# de program, cu scrierea activat#: Activare securitate: MOV EADRH,#80H MOV EADRL,#00H MOV EDAT,#FFH Acest octet nu mai poate fi modificat prin soft. Programul din EEPROM nu mai poate fi citit sau modificat cu instruc!iuni MOVC din memorii externe, ci doar executat.

4.3.2 Memoria FLASH cu programare paralel" (Atmel AT89C55)


Multe MC compatibile 8051 sunt echipate cu memorie FLASH. Unul dintre acestea este AT89C55 care este echipat cu 20K octe!i memorie FLASH care

4. Familia MCS-51

115

poate fi programat# "i "tears# (EPROM) n maximum 1000 de cicluri de scriere/"tergere. Programarea memoriei FLASH se poate face cu o tensiune mare, de +12V a"a nct se pot folosi inscriptoarele de EPROM sau se poate face cu +5V, pentru ca programarea s# fie posibil# n sistemul gazd#. AT89C55 este fabricat cu memoria "tears# (plin# cu FFh) "i gata de a fi programat#. Programarea memoriei se face astfel: ! pe liniile de adres# se stabile"te adresa loca!iei de programat; ! pe liniile de date se stabile"te octetul de nscris; ! se aplic# un front pe /EA/Vpp la +12V (pentru programarea cu 12V); ! se aplic# un impuls ALE//PROG. Starea program#rii este indicat# de bitul RDY//BSY (P3.4), linia fiind LOW n timpul program#rii "i HIGH cnd programarea s-a terminat. Dup# nscriere se poate face verificarea a ceea ce s-a nscris, prin adresare "i citirea octetului de date. Toat# memoria FLASH se poate "terge electric aplicnd semnalele de comand# corespunz#toare (din tabelul care exist# n foile de catalog) "i aplicnd apoi un impuls ALE//PROG de 10ms. Asem#n#tor se programeaz# (programare paralel#) "i circuitul 89C51 de la Philips.

4.3.3 Memoria FLASH cu programare paralel" %i serial" ISP (Philips 89C51RC)


O facilitate interesant# "i util# o au MC care au nscris n ROM un mic program monitor care poate s# gestioneze nscrierea memoriei FLASH prin canalul serial. Modul de nscriere serial se nume"te In-System Programming (ISP) "i este realizat printr-un canal serial cu liniile TxD "i RxD "i liniile de alimentare de +5V "i mas#, precum "i tensiunea necesar# nscrierii memoriei FLASH, +Vpp. Softul care gestioneaz# canalul serial este un monitor nscris n ROM. Dup# programarea memoriei FLASH, ROM-ul poate fi invalidat. Programul monitor determin# rata de transfer cu care i se trimit date "i transmite n ecou ce a recep!ionat. Dup# transmiterea caracterului pentru stabilirea ratei de transfer, se transmite un octet de identificare care stabile"te natura datelor care urmeaz#. Num#rul de octe!i care urmeaz# este limitat la 16. n foile de catalog sunt explicate comenzile care pot fi date pe acest# cale. Programul monitor ocup# 1K "i ROM-ul se nume"te Boot ROM. La aceast# memorie FLASH timpul de acces este de 100ns, timpul necesar nscrierii unei loca!ii este de 20ms, iar "tergerea se realizeaz# n 3 secunde.

116

MICROCONTROLLER-e

4.4

INTERFE$E #I PERIFERICE ON CHIP SPECIALE

4.4.1 Convertorul A/D


Circuitul analogic de intrare const# ntr-un multiplexor analogic "i un convertor A/D de 8 bi!i cu aproxima!ii succesive. Tensiunea de referin!# pentru convertor "i masa analogic# sunt conectate prin pini speciali. O conversie poate avea loc n 24 sau 48 de cicli ma"in#, programabil, ceea ce nseamn# un timp de conversie de 24s la un tact de 12MHz. Convertorul este controlat de registrul de control ADCON care selecteaz# "i canalul de conversie. Terminarea conversiei este semnalizat# cu un bit tot n ADCON, iar rezultatul conversiei este stocat n registrul ADCH. O conversie poate fi declan"at# n 3 feluri: start n operare normal# "i revenire n operare normal#; start n operare normal# revenire n mod inactiv (Idle); intrare n mod inactiv "i declan"area unei conversii din exterior prin pinul STDAC. Cu registrul ADCON (C4h) se poate programa: selec!ia canalului analogic dorit; se poate programa ca o conversie s# fie declan"at# de pinul extern STADC; se poate declan"a o conversie; con!ine un bit care semnaleaz# c# s-a terminat conversia. Cu acest bit se poate solicita o cerere de ntrerupere; se poate selecta viteza de conversie la viteza maxim# (24 cicli) sau mai mic# (48 de cicli).

4.4.2 Interfa!a PWM


Circuitul este prev#zut cu un canal PWM la care frecven!a de repeti!ie este programat# cu un registru de prescalare (PWMP- adresa FEh) care genereaz# un ceas pentru un num#r#tor de 8 bi!i. Con!inutul num#r#torului este comparat cu cel al registrului PWM0 (adresa FCh); dac# num#rul este mai mare ie"irea /PWM0 este LOW, dac# este mai mic sau egal /PWM0 este HIGH. Factorul de umplere poate fi astfel modificat ntre 1/255 "i 255/255.

4. Familia MCS-51

117

4.1.3 Interfa!a I2C (Siemens P80CL580)


Portul serial I2C are 2 linii, date seriale (SDA) pe pozi!ia liniei P1.7 "i ceas serial (SCK) pe pozi!ia bitului P1.6. Interfa!a lucreaz# n 4 moduri: transmi!#tor MASTER receptor MASTER transmi!#tor SLAVE receptor SLAVE Aceste func!ii pot fi controlate de registrul S1CON (Serial Control Register) "i S1STA (Serial Status Register). Cu datele se lucreaz# prin S1DAT (Data Shift Register) iar adresa se stabile"te n S1ADR (Slave Address Register), figura 4.5.

S1ADR B U S

SDA Arbitrare "i sincronizare SCK

S1DAT

Generare ceas

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 func!ie de tactul sistemului "i poate fi de maximum 100kHz; se poate selecta dac# liniile I/O (P1.6 "i P1.7) au semnifica!iile generale sau speciale pentru I2C;

118

MICROCONTROLLER-e

se poate porni transferul prin generarea de condi!ii de START repetate (mod MASTER) sau verificarea bus-ului "i generarea de START doar dac# bus-ul este liber (mod SLAVE); se poate opri transferul prin generarea unei condi!ii de STOP; se pot valida ntreruperile care se genereaz# n urm#toarele condi!ii: s-a generat o condi!ie de START, s-a recep!ionat adresa proprie, un octet s-a transmis sau s-a recep!ionat; se poate insera un ACK, (nivel LOW pe SDA) dup# recep!ia unui caracter sau a adresei proprii.

Registrul de stare S1STA (D9h - registru Read Only) poate fi folosit pentru generarea unei ntreruperi "i saltul la o rutin# de servire. n registrul de date S1DAT (DAh) se nscrie octetul care se transmite sau se recep!ioneaz#; cel mai semnificativ bit se transmite sau se recep!ioneaz# primul. n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se stabile"te adresa dispozitivului SLAVE cu care dore"te un transfer de date. Observa!ie: convertorul AD, interfa!a I2C "i canalul PWM0 pot lucra n modurile cu economie de energie. Convertorul, interfa!a I2C "i canalul PWM0 r#mn active n modul Idle al UC "i pot genera o ntrerupere sau un RESET, terminnd astfel modul inactiv al UC.

4.4.4 Interfa!a USB (EZ-USB seria 2100)


Familia EZ-USB de la Anchor Chips ( www.anchorchips.com ) echipeaz# MC-ul lor echivalent cu 8051 cu un modul USB inteligent, destinat leg#turii USB de mare vitez# (12Mbps). Modulul USB inteligent admite instruc!iuni avansate, de aceea punerea la punct a lucrului cu USB devine mai rapid#. MC este echipat cu RAM care poate fi nc#rcat# de la un PC. Din acest motiv circuitul nu mai are ROM. Circuitul mai con!ine "i o interfa!# I2C, precum "i linii I/O de uz general. Tot ca un avantaj se poate men!iona c# bus-ul de date "i adrese nemultiplexat este accesibil la pini speciali, ceea ce nseamn# c# nu se sacrific# pini I/O pentru cuplarea unor componente exterioare "i nici nu este nevoie de latch-uri pentru separarea datelor de adrese. Schema bloc a acestui MC este dat# n figura 4.6. Modulul USB realizeaz# n timpul ini!ializ#rii o enumerare "i alocare de adrese a dispozitivelor USB conectate. Aceast# opera!ie este posibil# ca urmare a mut#rii unei secven!e de program din RAM-ul MC n RAM-ul modulului USB. nc#rcarea programului n RAM se poate face att de la un sistem PC ct "i de la un EEPROM serial prin interfa!a I2C sau clasic, prin conectarea unei memorii ROM externe. Opera!ia de enumerare ini!ial# permite identificarea unui corespondent USB "i creeaz# posibilitatea nc#rc#rii programelor de la sistemul gazd# chiar prin USB.

4. Familia MCS-51

119

8051

RAM 4-8 Kocte!i

Interfa!a cu memoria extern# (nemultiplexat#)

PIO (24 linii)

BUS INTERN

Interfa!# I2C

2K octe!i FIFO memorie proprie

D+ Interfa!a USB inteligent# Transceiver USB

SCK

SDA Figura 4.6 Schema bloc a unui MC cu interfa!# USB

4.4.5 Aria de num"r"toare programabil" (PCA)


Aria de num#r#toare programabil# este un circuit special de timp format din 5 module de 16 bi!i cu posibilitatea de captur# "i compara!ie care se adaug# timerelor obi"nuite ale MC. Fiecare modul poate fi programat individual s# lucreze n unul din modurile: captur# pe front pozitiv sau negativ; timer; canal PWM; ceas de gard# (doar modulul 4).

Fiecare timer are un pin asociat din portul 1, ca n figura 4.7.

120 Modul 0 (16 bi!i)

MICROCONTROLLER-e P1.3

Temporizator/ Num#r#tor (Baza de timp pentru modulele PCA)

Modul 1 (16 bi!i)

P1.4

Modul 2 (16 bi!i)

P1.5

Modul 3 (16 bi!i) P1.6 Modul 4 (16 bi!i)

Figura 4.7 Structura ariei de timp programabile (PCA)

Timerul comun pentru toate modulele este un timer obi"nuit. El poate func!iona cu diferite tacte programate n registrul SFR CMOD cu 2 bi!i, conform tabelului 4.7.
Tabelul 4.7 Programarea tactului pentru timer

CPS1 0 0 1 1

CPS0 0 1 0 1

Tact pentru timer frecven!a oscilatorului/12 frecven!a oscilatorului/4 Semnalul de dep#"ire 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 ie"irea P1.x s# schimbe starea dac# a ap#rut o coinciden!# ntre con!inutul modulului "i con!inutul timerului; se poate programa pe care front al intr#rii P1.x s# se fac# num#rarea impulsurilor externe.

Fiecare modul mai are asociat un registru de 16 bi!i (cte dou# de 8 bi!i; CCAP0H-CCAP5H "i CCAP0L-CCAP5L) care stocheaz# valoarea num#rat# la apari!ia unei coinciden!e. n mod PWM aceste registre controleaz# factorul de umplere. Func!ionarea PCA:

4. Familia MCS-51

121

n modul de captur#, cnd apare o tranzi!ie pe intrarea extern# P1.x, se ncarc# valoarea la care a ajuns timerul comun n registrele de date (CCAPxH "i CCAPxL). n acest moment se poate genera o ntrerupere; n mod timer, con!inutul registrelor de date este incrementat de la intrarea extern#. Cnd se ajunge la o valoare egal# cu cea stocat# n timerul comun poate fi generat# o ntrerupere; n mod PWM fiecare modul poate fi folosit ca un canal independent. Frecven!a semnalului PWM este aceea"i "i depinde de sursa timerului comun. Factorul de umplere se poate modifica prin registrul CCAPxL; n mod ceas de gard# utilizatorul ncarc# registrul CCAPxH "i CCAPxL. Cnd timerul comun ajunge la o valoare egal# cu cea stocat# de utilizator se genereaz# un RESET intern. Pentru ca s# nu se ajung# la RESET ntr-un progam rulat normal, utilizatorul trebuie periodic s# schimbe valoarea din timer sau s# reseteze ceasul de gard#.

4.4.6 MC cu interfa!" pentru RAM nevolatil - NVRAM (Dallas DS5000FP)


Un astfel de MC poate adresa o memorie extern# SRAM (ntre 8K "i 64K) care poate fi f#cut# nevolatil# prin alimentarea cu baterii. O baterie cu litiu poate func!iona cca. 10 ani. Transferul de date cu memoria NVRAM se face pe un bus separat pentru a nu mic"ora num#rul de linii I/O. Circuitul nu are ROM pentru programul utilizator, programul fiind stocat n NVRAM, programarea se realizeaz# n sistem, prin interfa!a serial# a MC. La acest tip de MC programul se poate schimba chiar "i n timpul func!ion#rii. Programul se poate nc#rca ini!ial prin interfa!a serial#, sub comanda unui program existent ntr-un ROM intern numit Boot ROM (sau BOOTSTRAP LOADER ROM) care este apoi invalidat "i devine invizibil la adresare.

4.4.7 Interfa!a LCD (PHILIPS P83C434)


n jurul unui nucleu 8051 a fost construit un MC specializat pentru comanda panourilor LCD. R#mn disponibile pentru uz general 12 linii I/O. Modulul LCD are 24 de linii pentru comanda segmentelor, din care 2 pot fi folosite pentru comanda planurilor din spate. Afi"ajul poate fi comandat cu tensiuni variabile ob!inute intern prin divizarea tensiunii de alimentare cu rezisten!e. Schema bloc a MC este dat# n figura 4.8.

122

MICROCONTROLLER-e

12 linii I/O Nucleu 8051

S00-S21 Modul LCD S22/BP3 S23/BP2 BP1 BP0

Figura 4.8 MC cu modul de comand# LCD

MC se poate folosi la comanda afi"oarelor cu pn# la 4 planuri n spate. Cele 24 de linii de comand# a segmentelor pot comanda 12 caractere numerice formate cu 7 segmente sau 88 de elemente grafice. Func!ionarea afi"ajului poate fi mai bine n!eleas# n cazul concret al unui singur plan n spate, pentru 2 elemente al#turate ale afi"ajului, figura 4.9.
VDD BP0 VSS S00

S01 2 elemente de afisaj, aprins, al doilea Figura 4.9 Comanda a doua elemente al#(primul turate ale afi"ajului LCDstins)

Primul element este aprins pentru c# ntre segment "i planul din spate este o diferen!# de poten!ial, iar al doilea este stins pentru c# nu exist# o diferen!# de poten!ial. Comanda modulului de afi"are se face cu 12 registre LCD0-LCD11 (adrese 9Ah-BFh) care con!in configura!ia segmentelor stinse/aprinse pentru fiecare plan din spate.

4. Familia MCS-51

123

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


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

Nucleu 8051 (f#ra 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 num#r#tor de 14 bi!i. Canalele de 6 bi!i utilizeaz# doar partea mai pu!in semnificativ# a num#r#torului de 14 bi!i. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii acestui registru cu con!inutul num#r#torului, ie"irea PWM schimb# starea. Structura canalelor PWM este reprezentat# n figura 4.11. Convertorul numeric analogic este folosit pentru a realiza conversia analog numeric# soft (figura 4.12). Circuitul are 3 intr#ri analogice care pot fi comutate pe rnd la intrarea unui comparator de tensiune. La cealalt# intrare a comparatorului se aplic# ie"irea convertorului numeric analogic. Cnd intr#rile sunt egale, valoarea aplicat convertorului numeric analogic este chiar valoarea numeric# a semnalului analogic de intrare.

124

MICROCONTROLLER-e

Registru SFR PWM0 Canal PWM0 (6 bi!i) P1.3

Registru SFR PWM7 Num#r#tor 14 bi!i Canal PWM7 (6 bi!i) Tact= f/4 Registru TDACL, TDACH Canal PWM8 (14 bi!i) P0.6

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

126

MICROCONTROLLER-e

Modulele configurabile sunt aranjate ntr-o matrice, a c#rei dimensiuni depind de varianta de circuit. Modulele sunt grupate cte dou#, pentru a putea mp#r!i resursele. Schema bloc a unui nod din matrice este dat# n figura 4.14.
8051
CPU 256 x 8 RAM Ceas de gard# 3 x Timer UART Controller de ntreruperi 2x DMA

RAM 64Kocte!i

Interfa!a cu memoria extern#

Interfa!a JTAG

BUS CSI

Matrice CSL PIO PIO PIO

Figura 4.13 Schema bloc a unui MC TRISCEND E5

Matrice de leg#turi Modul CSL Modul CSL

Matrice de leg#turi

Linii lungi de adres#


Linii scurte de interconectare

Matrice de leg#turi Linii lungi I/O

Matrice de leg#turi

Figura 4.14 Schema bloc a unui modul de arie configurabil#

4. Familia MCS-51

127

Structura unei celule este dat# n figura 4.15.


Por!i configurabile prin programare 1
Bistabil D

Ie"iri

Intr#ri

D EN T

Figura 4.15 Structura unei celule configurabile

Structura por!ilor poate fi programat# la ini!ializare "i reprogramat# de ori cte ori. O celul# poate ndeplini una din func!iile: logic# (ie"irea 1); aritmetic#; de memorare (ie"irea 2); de magistral#; secven!ial#. Testarea JTAG se poate realiza cu un calculator conectat la interfa!a JTAG. Pinii folosi!i sunt: TCK ceas de testare (intrare n MC); TMS comanda modului de test, intrare n MC, activ pe 0; TDI date seriale de intrare n MC; TDO date seriale de ie"ire din MC.

n modul de testare nu este nevoie ca MC s# aib# o memorie extern#. Prin leg#tura JTAG se poate programa matricea CSL "i se poate observa modul de rulare al programului de c#tre MC prin intercalarea de break point-uri, rularea pas cu pas, citirea registrelor interne etc.

4.5

SISTEM MINIMAL CU 8051

Schema electric# simplificat# a unui sistem minimal cu 8051 este dat# n figura 4.16.

128

MICROCONTROLLER-e

8051 X1 AD0-AD7

P0
X2 RST ALE P2 A8-A15 P1 /RD /WR

LATCH ADRESE
/A15

/WR

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

BUS ADRESE A0-A15

PSEN /RD

BUS DATE D0-D7

Port I/O liber A15

EPROM A0-A14 CS /OE D0-D7

/PSEN

Figura 4.16 Sistem minimal cu 8051

Sistemul minimal con!ine RAM cu capacitatea de 32KB, selectat cu PSEN (care indic# faptul c# nu este acces la memoria program) "i /RD pentru o citire sau /WR pentru o scriere n RAM. Bus-ul de date "i adrese este comun pentru AD0-AD7. Adresele se separ# cu un latch validat de semnalul ALE. Liniile de date sunt validate cu /RD sau /WR. Memoria program EPROM este op!ional#, (este necesar# pentru modelele care nu au EPROM sau OTP intern, de exemplu 8031) fiind selectat# cu semnalul PSEN. Dac# exist# EPROM extern /EA=LOW, iar dac# se folose"te EPROM-ul intern /EA=HIGH. Circuitul se completeaz# cu un generator de tact "i dou# componente pentru realizarea RESET-ului, ca n unul din subcapitolele anterioare. Pentru dezvolt#ri se poate folosi portul P1, care este liber, "i canalul serial. Dac# num#rul liniilor I/O nu este suficient, se poate folosi un expander cum este de exemplu 8243, care poate extinde 4 linii la 4x4 linii bidirec!ionale (figura 4.17).

4. Familia MCS-51

129

8051
X1 P0 X2 RST P2.3 P2.2 P2.1 P2.0 P1 P2.5 P2.4

8243

P4
P23 P5

P22 P21 P20


/CS PROG

P6
P7

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 8 16 8 16 16 30 40 20

Linii I/O 32 48 32 128 53

Interfe!e speciale 2 5 2 2 6

Pre! (USD) 4 35 90 27 18

130

MICROCONTROLLER-e

5
MICROCONTROLLER-E RISC
5.1 MICROCONTROLLER PIC
ncepem prezentarea MC cu arhitectur! RISC cu microcontrollerul PIC. Produc!torul plasat cel mai bine pe pia"a MC PIC este Microchip (www.microchip.com). Un alt produc!tor important de MC PIC este Motorola. Exist! mai multe familii de MC PIC; PIC#2, PIC#6, PIC#7.

5.1.1

PIC12

MC PIC#2 sunt MC cu pre"uri mici $i u$or de utilizat datorit! arhitecturii RISC. MC are un num!r de 33 de instruc"iuni cu un grad mare de ortogonalitate, din care majoritatea se execut! ntr-un singur ciclu, iar cele de salt n dou! cicluri. Spa"iul mic ocupat (capsul! de 8 pini) fac aceste MC foarte potrivite aplica"iilor miniatur! precum $i aplica"iilor casnice. Pentru a putea fi realizat! o $i mai mare economie de spa"iu, circuitul de RESET este integrat. Sunt disponibile circuite cu OTP, cu EPROM sau EEPROM inclus, care fac posibil! att realizarea seriilor mari ct $i a prototipurilor sau a aplica"iilor cu elemente care se modific! (de exemplu aplica"ii de asigurare a securit!"ii cu coduri variabile). Aceste MC admit o frecven"! de pn! la 4MHz. MC PIC#2 are o arhitectur! Harvard, cu magistrale diferite pentru date $i pentru instruc"iuni. Acest lucru permite ca magistrala de instruc"iuni s! fie mai mare (de #2 bi"i) $i ca urmare majoritatea instruc"iunilor pot fi de un cuvnt $i pot fi executate ntr-un singur ciclu. Unitatea central! este o unitate pe 8 bi"i care poate realiza func"ii aritmetice $i booleene: adunare, sc!dere, deplasare $i opera"ii logice cu date care se g!sesc n registrul de lucru (W) $i n oricare registru de uz general. Setul de instruc"iuni are un mare grad de ortogonalitate, ceea ce reduce mult timpul necesitat de realizarea unei aplica"ii. O opera"ie poate afecta bi"ii de stare: Carry

5. Microcontroller-e RISC

131

(C), Digit Carry (C ) $i Zero (Z). Num!r!torul de program (PC) este un registru de #2 bi"i, ceea ce nseamn! c! poate adresa un spa"iu de 2K cuvinte de #2 bi"i. Schema bloc a acestui MC este dat! n figura 5.#.
Memoria program
ROM/OTP/EPROM

5#2 x #2 bi"i sau #024 X #2 bi"i M A G I S T R A L A I N S T R. Unitate central!


ALU

Memoria de date RAM 25 x 8 bi"i sau 4# x 8 bi"i (set de registre )

PC

Magistral! de date $i adrese SCL tact Timer Ceas de gard!


Timer pt. RESET EEPROM serial #6 x 8

SDA date

PIO

Figura 5.1 PIC#2 Schema bloc

Setul de registre localizat n RAM con"ine registre cu func"ii speciale $i registre de uz general. Registrele generale pot fi apelate direct sau indirect, prin intermediul registrului special FSR (File Select Register). Registrele $i adresele lor sunt date n tabelul 5.# (pentru circuitul PIC#2C509).
Tabelul 5.1 Setul de registre PIC12C509

Registru INDF TMR0 PCL STATUS

Adresa(H) 00 0# 02 03

Registru FSR OSCCAL GPIO Registre generale

Adresa(H) 04 05 06 07-#F

132

MICROCONTROLLER-e

Stiva este de #2 bi"i $i este realizat! hard. Nu exist! indicator de stiv! $i nu sunt instruc"iuni de PUSH $i POP, lucrul cu stiva fiind automat la instruc"iunile CALL $i RETLW. Stiva admite o adncime de 2 nivele. Setul de instruc"iuni pentru acest MC este dat n tabelul 5.2.
Tabelul 5.2 Setul de instruc!iuni PIC 12

Mnemonic!-operanzi 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 to"i bi"ii 0 Face n W to"i bi"ii 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 opera"ie Rota"ie la stnga prin Carry Rota"ie la dreapta prin Carry Sc!dere W din f Schimb! f SAU EXCLUSIV W cu f Bitul b din f este f!cut 0 Bitul b din f este f!cut # 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 # %I ntre W $i constanta k Chemare subrutin! Resetare ceas de gard! Salt necondi"ionat SAU ntre W $i k nc!rcare imediat! a constantei k n W nc!rcare registru de op"iuni ntoarcere din subrutin! cu plasarea k n W Intrarea n mod inactiv nc!rcarea registrului TRIS SAU EXCLUSIV ntre k $i W

5. Microcontroller-e RISC

133

Dac! valoarea bitului d este 0, rezultatul se stocheaz! n W iar dac! este #, rezultatul se stocheaz! n f. Registrul de op"iuni (OPTION) este un registru special de configurare. Registrul TRIS este folosit pentru a controla liniile I/O. Un # n TRIS pune linia corespunz!toare n nalt! impedan"!, iar un 0 valideaz! linia. Liniile de intrare/ie$ire pot fi programate ca intr!ri sau ie$iri cu registrul special GPIO. Pinii pot avea semnifica"ii duble. La RESET toate liniile se definesc ca intr!ri. Unii pini pot trezi MC din starea inactiv! (Wake up). Opera"iile de intrare ie$ire se fac prin intermediul registrului GPIO, de exemplu instruc"iunea: BCF GPIO,5 ;stabile$te un 0 pe linia 5 de ie$ire Modulul timer 0 poate fi utilizat n urm!toarele moduri: temporizator/num!r!tor pe 8 bi"i; num!r!tor pentru prescalare de 8 bi"i; ceas din exterior sau din interior. Schema bloc a temporizatorului cu semnalele de comand! este dat! n figura 5.2.
Fosc/4 (intern) Alegere tact Prescalare GP2
(TOCKI) (extern) Tact f!r! sau cu prescalare

TIMER

Magistrala de date TOC5


PS2 PS# PS0 PSA

Figura 5.2 Schema bloc a temporizatorului PIC#2

Cu bitul TOC5 se alege sursa tactului, extern! (de la un pin cu semnifica"ie dubl!) sau intern!. Tacul merge direct la timer sau prin registrul de prescalare (registru de 8 bi"i), programabil cu bitul PSA. Registrul de prescalare poate fi nc!rcat cu bi"ii PS2, PS# $i PS0. To"i ace$ti bi"i de comand! se afl! n registrul de op"iuni. Registrul de prescalare poate fi folosit $i de ceasul de gard!, dar nu simultan cu timerul 0. Memoria EEPROM cu care sunt echipate anumite circuite din familie poate fi de #6 octe"i, poate fi supus! la peste # mil. de cicluri de scriere/$tergere $i poate re"ine informa"ia mai mult de 40 de ani. Transmisia se face serial sincron pe dou! fire, unul de tact (SCL) $i unul de date, bidirec"ional (SDA), mapate n registrul GPIO ca bit 6 $i bit 7, f!r! a avea conexiune n exterior. Protocolul pentru

134

MICROCONTROLLER-e

transferul de date poate avea loc doar dac! magistrala de date nu este ocupat!, cu SDA $i SCL=#. Un START este determinat de frontul SDA din # n 0, iar un front SDA din 0 n # reprezint! un STOP. Data trebuie s! fie stabil! pe SDA pe durata unui impuls de tact SCL (o tranzi"ie din # n 0, urmat! de una din 0 n #). Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei. Pentru a asigura siguran"a rul!rii corecte a programului, circuitul este echipat cu un ceas de gard!, care poate fi resetat printr-o instruc"iune special!, asigurnd o ntrziere de #8ms pn! s! declan$eze un RESET. Familia PIC#2 are posibilitatea de lucru ntr-un mod cu economie de energie, numit SLEEP. n modul SLEEP oscilatorul este oprit, iar pinii I/O $i p!streaz! starea. Intrarea n SLEEP se face cu o instruc"iune special!. MC poate fi scos din acest mod de lucru printr-un front aplicat la pin extern sau de ceasul de gard!. Ca $i mod de generare a tactului extern, circuitul poate lucra n mai multe feluri: cu cristal extern conectat la GP5/OSC# $i GP4/OSC2 dup! o schem! standard; cu generator de tact extern, cuplat ntre GP5/OSC# $i mas!; pentru aplica"ii care nu sunt critice la timp, se poate conecta n exterior la GP5 un grup RC, cu R (3k-#00k) la +5V $i C (20pF) la mas!; MC are un generator intern de 4MHz, a c!rui frecven"! poate fi modificat! prin scrierea registrului OSCCAL.

Alegerea sursei tactului, precum $i activarea ceasului de gard! se fac cu un registru de configurare (de #2 bi"i) care nu este accesibil utilizatorului, fiind o informa"ie scris! n PROM/ EPROM la adresa FFFh. Un RESET poate fi generat de una din urm!toarele surse:

-la conectarea tensiunii de alimentare, POR Power On Reset;


-un RESET extern /MCLR pe pinul GP3; -un RESET cnd circuitul este n mod SLEEP pe /MCLR; -de la ceasul de timp real n operare normal!; -de la ceasul de timp real n mod SLEEP; -trezirea din mod SLEEP prin schimbarea st!rii unui pin extern. Identificarea sursei de RESET se face prin pozi"ionarea unor bi"i n registrul de stare, registru al c!rui con"inut nu se modific! prin RESET.

Memoria poate fi programat! n circuit (variantele cu EPROM). Aceasta se realizeaz! simplu, cu 2 linii, una de date $i una de tact, conform figura 5.3.

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


+5V GND Vpp CLK D I/O

135 PIC#2C5xx
Vdd Vss /MCLR/Vpp GP# GP0

Figura 5.3 Conexiune pentru programarea EPROM

Intrarea n mod programare se face cu GP# $i GP0 "inu"i la 0 pe un front cresc!tor al /MCLR. Pentru a sublinia dimensiunea $i simplitatea de utilizare a acestui MC, n figura 5.4 este repreyentat! capsula circuitului.
PIC#2C # 2 3 4 8 7 6 5 Vss GP0 GP# GP2/T0CKI

Vdd GP5/OSC# GP4/OSC2 GP3/MCLR/Vpp

Figura 5.4 Capsula PIC#2

5.1.2

PIC16

Cu o arhitectur! asem!n!toare familiei PIC#2, aceste MC au cteva mbun!t!"iri: 35 de instruc"iuni fa"! de 33; frecven"a maxim! 20MHz fa"! de 4; posibilitatea de lucru n ntreruperi, cu 7 surse interne $i o surs! extern!; stiv! automat! cu 8 nivele; #3 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer $i cu o linie de putere pentru comanda direct! a unui LED;

136

MICROCONTROLLER-e

magistrala de instruc"iuni este pe #4 bi"i, fa"! de #2 bi"i; memoria ROM este de 5#2 x #4 cuvinte pn! la 2K x #4 cuvinte; memoria RAM este de 80-#28 de octe"i.

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

5. Microcontroller-e RISC

137

Modulul suplimentar de timere este numit CCP (Capture Compare PWM), dup! func"iile pe care le poate ndeplini (un MC poate avea unul sau mai multe module CCP). Modulul CCP con"ine un registru de #6 bi"i $i folose$te timerele suplimentare # $i 2. Modurile de lucru posibile pentru modulul CCP sunt: mod captur" - la apari"ia unui eveniment la pinul exterior 3, registrul CCP se ncarc! cu valoarea din timerul #. Un eveniment poate fi un front cresc!tor, unul descresc!tor, la fiecare 4 sau #6 fronturi cresc!toare (prescalare). n momentul evenimentului se poate cere o ntrerupere. mod comparare - registrul CCP este permanent comparat cu con"inutul timerului #. Dac! apare o coinciden"!, se semnalizeaz! prin schimbarea st!rii pinului extern 3. n acela$i moment se poate cere o ntrerupere. mod PWM - se folosesc 2 timere, # $i 2, unul pentru a determina perioada semnalului $i cel!lalt factorul de umplere. Ie$irea PWM se face tot la pinul 3.

5.1.3

PIC17
PIC#7 are urm!toarele mbun!t!"iri fa"! de PIC#6: 58 de instruc"iuni fa"! de 38; frecven"a maxim! 33MHz fa"! de 20; stiv! automat! cu #6 nivele fa"! de 8; 33 de linii I/O cu posibilitatea stabilirii individuale a sensului de transfer $i cu o linie de putere pentru comanda direct! a unui LED; magistrala de instruc"iuni este pe #6 bi"i, fa"! de #4 bi"i; memoria ROM este de 2048 x #6 cuvinte; memoria RAM este de 232 de octe"i; magistralele de date, $i adrese (multiplexate) sunt accesibile la pin; unitatea central! poate executa nmul"iri; sunt admise ## surse de ntreruperi fa"! de 8.

Aceste MC sunt livrate n capsule cu 44 de pini. Schema bloc este dat! n figura 5.5. %i circuitele din familia PIC#7 pot fi echipate cu o gam! larg! de interfe"e.

138

MICROCONTROLLER-e

Memoria program
ROM/OTP/EPROM
M A G I S T R A L A I N S T R .

2K x #6 bi"i Unitate central! ALU


PC STIVA #6 x #6 bi"i Magistrala de date $i adrese Memoria de date RAM 232 x 8 bi"i

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 PIC#7

Sistemul de timere este compus din mai multe timere: Timer 0 este un num!r!tor de #6 bi"i cu surs! de num!rare extern! sau intern!. Poate lucra cu un registru de prescalare care d! un tact divizat cu #/# pn! la #/256; Timer # este un timer pe 8 bi"i care poate lucra mpreun! cu Timerul 2 pentru a forma un timer pe #6 bi"i. Poate lucra n regim de num!rare a unor evenimente externe. Timerul are asociat un registru, deci poate lucra n regim de comparare; Timer 2 este la fel cu timerul #. Timerul # $i 2 pot lucra n mod PWM; Timer 3 este pe #6 bi"i, cu un registru asociat.

Modulul USART poate fi configurat s! lucreze n mod serial asincron 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

Observa!ie: este de remarcat la MC din familia PIC faptul c! nu au nevoie de componente externe pentru RESET $i pentru ceas, ceea ce poate fi un avantaj.

5.2 MC ATMEL
Foarte bine plasate pe pia"! n zona aplica"iilor low cost sunt MC ale firmei ATMEL. Firma fabric! $i MC echivalente 805#.

5.2.1

Familia AVR

Aceste MC sunt realizate de produc!tor n diverse variante, ncepnd cu modelele low cost AT90S2323, AT90S#200 $i terminnd cu modele complexe AT90S44#4, AT90S85#5, diferen"ele ntre acestea constnd n principal n m!rimea $i tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM $i a facilit!"ilor oferite la interfa"a cu utilizatorul. Seria de MC ATMEL este sus"inut! de o campanie puternic! de promovare astfel nct produc!torul ofer! gratuit software de dezvoltare ce include asamblor, debugger, documenta"ie, exemple $i note de aplica"ie pe site-ul s!u www.atmel.com. Softul este disponibil att n variant! ce ruleaz! sub sistemul de operare MS-DOS ct $i n varianta WINDOWS. Toate MC din familie au o arhitectur! Harvard, adic! au spa"ii de adres! $i magistrale diferite pentru memoria de date $i memoria program. Dispun de o prelucrare de tip pipe line a instruc"iunilor (n 2 trepte) astfel nct n timp ce o instruc"iune este executat!, cealalt! se afl! n ciclu de aducere din memorie (fetch) $i astfele se execut! cte o instruc"iune n fiecare ciclu. Schema bloc a unui circuit din familie este dat! n figura 5.5. Unul dintre cele mai mici MC este AT90S2323. Circuitul se alimenteaz! (n func"ie de variant!) la 5V sau la 3V $i func"ioneaz! pn! la frecven"a de #0MHz. Curentul absorbit este de 2,4mA n stare activ!, 0,5mA n stare inactiv! $i #A n starea Power Down. n principal, circuitul este compus din: unitatea central!, n arhitectur! RISC cu ##8 instruc"iuni, majoritatea de un ciclu $i 32 de registre de uz general; blocul de memorie, compus din memoria de program (FLASH de 2K octe"i care suport! n jur de #000 de program!ri) $i din memoria de date (#28 octe"i de RAM) $i #28 octe"i de EEPROM, care suport! n jur de #00.000 de program!ri;

140

MICROCONTROLLER-e

interfe"ele sunt reprezentate de un timer de 8 bi"i cu prescalare, un timer pentru ceasul de gard! $i o interfa"! serial! SPI pentru programarea n circuit. Liniile I/O sunt de regul! cu semnifica"ie dubl!.
Unitate central!
32 registre de uz general

Memoria program
FLASH 2K octe"i

ALU PC

Memoria de date
RAM #28 octe"i EEPROM #28 de octe"i

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 opera"iilor ntr-un ciclu, ceea ce nseamn! c! operanzii sunt n registrele generale, are loc opera"ia $i rezultatul este stocat n unul dintre registre. Se pot realiza $i adres!ri indirecte cu 6 dintre cele 32 de registre, grupate cte 2 (ca s! formeze registre de #6 bi"i); registrele duble sunt referite cu X, Y, Z. Se pot face opera"ii ntre registre sau cu o constant!. Instruc"iunile au formatul pe #6 bi"i, iar indicatorul de program PC este pe #0 bi"i. Memoria de date poate fi accesat! tot ca registre, n acela$i spa"iu. Spa"iul I/O con"ine 64 de adrese unde se g!sesc registrele de control $i de stare ale interfe"elor. Stiva este definit! n RAM, deci exist! un registru indicator de stiv! SP de 8 bi"i. O imagine sugestiv! a spa"iilor de memorie $i I/O este dat! n figura 5.6.

5. Microcontroller-e RISC

141

00h Memoria program FLASH #Kx #6 bi"i 000h 32 registre de lucru #Fh 64 registre I/O EEPROM #28 octe"i

00h

SRAM #28 octe"i

60h 7Fh

3FFh

Figura 5.6 Harta spa"iilor de memorie $i I/O

Memoria EEPROM dispune de un spa"iu propriu de adresare, n care fiecare octet dintr-o loca"ie poate fi citit sau scris. Accesul se face specificnd adresa, data $i comanda n registre speciale. Acest MC permite 5 moduri de adresare: adresare direct! - adresa operandului este con"inut! n instruc"iune. Se pot executa instruc"iuni cu un registru sau ntre 2 registre. Este accesibil astfel tot spa"iul de date; adresare indirect! - adresa operandului este n X, Y sau Z; adresare indirect! cu deplasament - adresa oprandului este rezultatul adun!rii registrelor Y sau Z cu adresa de 6 bi"i con"inut! n instruc"iune. Se acoper! astfel doar 63 de loca"ii fa"! de baza dat! de registrele Y sau Z; adresare indirect! cu pre decrementare - registrele X, Y sau Z sunt decrementate nainte de adresare; adresare indirect! cu post incrementare.

Setul de instruc"iuni este dat n tabelul 5.3.

142

MICROCONTROLLER-e

Tabelul 5.3 Setul de instruc!iuni 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 CPSE CP CPC CPI SBRC SBRS SBIC SBIS

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

Opera"ie 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+# Rd=Rd-# Rd=Rd * Rd Rd=RdRd Rd=$FF PC=PC+k+# PC=PC+k+# PC=STACK PC=STACK
or 3

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

Opera"ie 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 # 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 Compar! Compar! cu carry Compar! cu constat! if (Rr(b)=0) PC=Pc+2 Skip dac! bitul b din Rr este 0 Skip dac! bitul b din Rr este #

Rd-Rr Rd-Rr-C Rd-K

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

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


if (P(b)=#) PC=Pc+2 or 3 Skip dac! bitul B din I/O este #

5. Microcontroller-e RISC

143

Mnemonic! BRBS BRBC BREQ BRNE BRCS BRCC BRSH BRLO BRMI BRPL BRGE BRLT BRHS BRHC BRTS BRTC BRVS BRVC BRIE BRID LD ST MOV LDI IN OUT SBI CBI LSL LSR ROL

Operanzi s,k s,k k k k k k k k k k k k k k k k k k k Rd,Z Z,Rr Rd,Rr Rd,K Rd,P P,Rr P,b P,b Rd Rd Rd

Opera"ie if(SREG(s)=#) PC=PC+k+# if(SREG(s)=0) PC=PC+k+#


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

Opera"ie Salt dac! SF este# Salt dac! SF este 0 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 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

if (I=#) PC=PC+k+# if (I=0) PC=PC+k+# Rd=(Z) (Z)=Rr Rd=Rr Rd=K Rd=P P=Rr I/O (p,B)=# I/O (p,B)=0 Rd(n+#)=Rd(n),Rd( 0)=0 Rd(n)=Rd(n+#),Rd( 7)=0 Rd(0)=C,Rd(n+#)= Rd(n), C=Rd(7)

144

MICROCONTROLLER-e

Mnemonic! ROR ASR SWAP BSET BCLR BST BLD SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLS SEV CLV SET CLT SEH CLH NOP SLEEP WDR

Operanzi Rd Rd Rd s s Rr,b Rd,b

Opera"ie Rd(7)=C,Rd(n)=Rd( n+#), C=Rd(0) Rd(n)=Rd(n+#), n=0..6 Rd(3..0)=Rd(7..4), Rd(7..4)=Rd(3..0) SREG(s)=# SREG(s)=0 T=Rr(b) Rd(b)=T C=# C=0 N=# N=0 Z=# Z=0 I=# I=0 S=# S=0 V=# V=0 T=# T=0 H=# H=0

Opera"ie Rotire spre dreapta prin carry Shift aritmetic spre dreapta Inverseaz! jum!t!"ile 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 instruc"iune de nmul"ire, MUL. MC AVR au 3 surse de ntrerupere: de la RESET, (din exterior, la punerea sub tensiune sau de la ceasul de gard!); de la un pin extern; de la timer, la o dep!$ire.

5. Microcontroller-e RISC

145

ntreruperile pot fi mascate cu 2 registre de 8 bi"i, GIMSK- General Interrupt Mask $i TIMSK- Timer/Counter Interrupt Mask. La primirea unei ntreruperi se invalideaz! sistemul de nteruperi. Totu$i este posibil! primirea nc! a unei ntreruperi n timp ce este servit! prima, dac! se revalideaz! sistemul de ntreruperi. R!spunsul la o cerere de ntrerupere dureaz! minimum 4 cicluri, timp n care PC este salvat n stiv!, SP este incrementat cu 2 $i se seteaz! invalidarea ntreruperilor. Sursele de RESET pot fi: la punerea sub tensiune (Power On Reset), dac! tensiunea cre$te $i atinge un anumit prag; de la un pin extern, dac! un nivel LOW este prezent mai mult de 50ns; de la ceasul de gard! dac! este validat $i a expirat perioada de timp pentru care a fost programat s! a$tepte o ini"ializare. Dup! RESET execu"ia programului ncepe de la adresa 000h. Un RESET porne$te un num!r!tor care contorizeaz! un anumit num!r de impulsuri ale ceasului intern al circuitului. Contorul stabile$te durata impulsului RESET intern pentru ca acesta s! fie suficient de lung pentru ini"ializarea tuturor circuitelor interne, figura 5.7.
Vcc Power On Reset SAU LOGIC

/RESET

RESET S Ceas de gard! Q

Oscilator RC intern

Num!r!tor

/Q

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 execu"ia instruc"iunii SLEEP. Dac! n modul SLEEP apare o ntrerupere extern!, una de la ceasul de gard! sau un RESET, acestea sunt executate, circuitul trezindu-se. n acest mod de lucru este oprit

146

MICROCONTROLLER-e

oscilatorul extern. Trezirea dureaz! un interval de timp egal cu cel necesar pentru un RESET. modul inactiv, n care se intr! cu aceea$i instruc"iune, dar pozi"ionnd un bit din registrul de control. n acest mod unitatea central! este oprit!, dar timerul, ceasul de gard! $i sistemul de ntreruperi continu! s! func"ioneze. O ntrerupere intern!, una extern! sau un RESET trezesc circuitul.

Circuitul admite ca surse de tact: un cristal de cuar" sau un rezonator ceramic, pentru aplica"ii cu preten"ii la stabilitatea frecven"ei, (elemente conectate la pinii Xtal# $i Xtal2); un generator extern la un pin I/O (PB3); generatorul RC intern, la #MHz. Selec"ia sursei ceasului pentru tact intern sau extern se face cu un bit n memoria FLASH. Circuitul este programat implicit pentru tact extern. Lucrul cu ceas intern determin! posibilitatea utiliz!rii acestor MC cu componente externe extrem de pu"ine. Timerul care echipeaz! circuitele AT902323 este un timer pe 8 bi"i cu un registru de prescalare pe #0 bi"i. Timerul poate fi folosit cu tact intern (tactul sistemului divizat cu 8, 64, 256 sau #024) sau cu tact extern. Sursa de tact pentru timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Func"ionarea timerului este controlat! de bi"i din din dou! registre (registru de m!$ti pentru ntreruperi $i registru de control al timerului). La dep!$ire, num!r!torul poate cere o ntrerupere.

Ceasul de gard! are ca $i tact un oscilator separat, integrat n MC $i este complet separat de timer. Ca $i timerul, ceasul de gard! are posibilitatea de prescalare. Controlul ceasului de gard! se face cu registrul WDTCR (Watchdog Timer Control Register). Pentru a evita dezactivarea ntmpl!toare a ceasului de gard!, acesta trebuie dezactivat cu o secven"! de program specific!.
EEPROM este accesibil n spa"iul I/O, prin urm!toarele registre: registru de adrese EEPROM; registru de date EEPROM; registru de control EEPROM, care comand! sensul transferului.

MC ATMEL AVR au linii I/O de uz general (AT902323 are 3 linii, AT902343 are 5 linii, iar modelul AT90S#200 dispune de dou! porturi: B de 8 bi"i $i D de 7 bi"i). Fiecare linie de port poate fi configurat! independent fa"! de celelalte, att ca linie de intrare ct $i ca linie de ie$ire. De asemenea n modul de utilizare ca linie de intrare, fiecare linie poate fi configurat! cu un rezistor de pullup intern ( valoarea aprox 40K ). Fiecare linie de ie$ire poate sus"ine un curent de 20mA (max 40mA valoare limit! absolut!) astfel nct se poate folosi direct la

5. Microcontroller-e RISC

147

comandarea de LED-uri. Fiec!rui port i este alocat un registru de sens, (DDRx, Port x Data Direction). Pinii I/O admit semnifica"ii duble. Programarea memoriei FLASH $i EEPROM se poate face serial, ntr-un mod cu tensiune mare (#2V) $i un mod cu tensiune joas!. Circuitele vin de la fabricant gata de a fi nscrise (au con"inutul FFh n fiecare loca"ie). n modul de programare cu tensiune nalt!, tensiunea de #2V valideaz! programarea, nu are un rol func"ional. Modul de programare n cele 2 variante este ar!tat n figura 5.8.
#2V Ceas de programare serial

AT902323
/RESET XTAL#/PB3 Vcc PB2 PB# PB0

4,5-5,5V Date seriale de ie$ire Instruc"iuni seriale de intrare Date seriale de intrare

Programare cu tensiune mare

GND Tact

AT902323
/RESET XTAL#/PB3 Vcc PB2 PB# PB0

2,7-6,0V SCK MISO MOSI

Programare cu tensiune mic"

Figura 5.8 Programarea serial! a memoriei EPROM (FLASH)

La programarea cu tensiune mare se poate programa memoria FLASH (intrarea pe PB#) $i memoria de date EEPROM (intrarea pe PB0). Pentru programarea memoriei FLASH se trimite nti adresa apoi data (octetul LOW apoi cel HIGH). Confirmarea se ob"ine prin trecerea lui PB2 n HIGH. Memoria EEPROM se programeaz! trimi"nd nti adresa apoi octetul de date, confirmarea fiind pe pinul PB2. Orice loca"ie poate fi citit! folosind instruc"iunea de citire $i adresa, ob"innd pe pinul PB2 con"inutul respectiv. Tactul serial este activ pe front cresc!tor. Scrierea, citirea $i unele comenzi speciale ($tergerea ntregii memorii, scrierea bi"ilor de securitate etc.) se comand! prin trimiterea naintea adresei a codului serial al comenzii respective (se g!se$te n foile de catalog). La programarea cu tensiune mic! se poate programa memoria FLASH $i memoria EEPROM tot serial, prin interfa"a SPI. Datele se nscriu pe frontul cresc!tor a lui SCK. n acest mod de lucru, confirmarea scrierii unei loca"ii se face prin trimiterea n ecou a octetului scris. Comenzile se trimit la fel, prin coduri seriale. Un programator pentru astfel de MC (mod de programare cu tensiune mare) se poate realiza simplu, folosind interfa"a CENTRONICS a unui PC, figura 5.9.

148 #2V AT902323


STB /RESET XTAL#/PB3 Vcc PB2 PB# GND D0 D# ACK PB0

MICROCONTROLLER-e

INTERFA&A CENTRONICS

4,5-5,5V

Figura 5.9 Programarea unui circuit AVR folosind interfa"a CENTRONICS

Memoria este prev!zut! cu posibilitatea de protec"ie a programelor nscrise. Astfel, exist! 2 bi"i de blocare n FLASH care nu pot fi $ter$i dect prin $tergerea ntregului program. Ace$ti doi bi"i pot comanda: dezactivarea unor viitoare program!ri ale memoriei FLASH sau EEPROM; dezactivarea unor viitoare program!ri ale memoriei FLASH sau EEPROM $i blocarea verific!rii.

Memoria mai este prev!zut! cu 2 bi"i care nu pot fi $ter$i (fuzibili) care pot comanda: dezactivarea modului serial de programare; sursa intern! sau extern! pentru tact.

Modelul ATiny #0 este echipat cu un comparator analogic, care compar! valoarea analogic! de la pinul PB0 cu cea de la pinul PB#. Ie$irea comparatorului poate declan$a o ntrerupere. Comparatorul este controlat de un registru de control $i stare. Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe #0 bi"i. Acest model este un MC cu o echipare superioar!: un timer suplimentar de #6 bi"i cu posibilitatea de comparare, captur! $i generare PWM, un comparator analogic, un canal UART, un convertor A/D pe #0 bi"i cu 6 canale $i un sistem de ntreruperi care admite #4 surse de ntrerupere din care 2 externe. Acest circuit are $i posibiliataea de programare paralel!, deoarece are suficiente linii I/O. Schema bloc a acestui MC este dat! n figura 5.#0.

5. Microcontroller-e RISC Oscilator intern Unitate central! RESET Ceas de gard!


32 registre de uz general

149

Controller de ntreruperi

Memoria program FLASH 2K octe"i

ALU PC

Memoria de date
RAM #28 octe"i EEPROM #28 de octe"i

Magistrala de date

SPI

ADC

Timer

Timer #6b

UART

Comparator

Port B

Port C

Port D

Figura 5.10 MC AT90S4433 Schema bloc

Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bi"i de date, cu generarea de rat! de transfer. Canalul serial poate cere ntrerupere la transmisie complet!, registru de transmisie gol sau recep"ie complet!. Recep"ia $i transmisia se fac ca $i la celelalte MC, cu un registru de deplasare pentru serializare/deserializare $i un registru de date. Se poate realiza $i o comunica"ie serial! multiprocesor (Multi- Processor Communication Mode), prin transmisia n mesaj nti a adresei unui destinatar $i apoi a mesajului propriu-zis. Se poate astfel realiza o comunica"ie n care un procesor este MASTER iar celelalte SLAVE. Canalul serial este controlat de un registru de comand! $i stare. Comparatorul analogic, pe lng! ntreruperea pe care o poate genera, poate s! declan$eze o captur! la timerul de #6 bi"i la acest tip de MC. Convertorul A/D este un convertor cu aproxima"ii succesive cu e$antionare memorare $i cu un bloc de multiplexare analogic! pe 6 canale la intrare. Convertorul poate lucra cu conversie singular! sau conversie continu!. Convertorul are pini de alimentare separa"i din exterior $i un pin pentru conectarea tensiunii de referin"!. Ca $i tact de conversie, convertorul accept! tactul sistemului divizat cu un registru de prescalare. Tactul se poate ncadra n valorile optime 50-200kHz.

150

MICROCONTROLLER-e

La terminarea unei conversii convertorul poate cere o ntrerupere. Schema bloc a convertorului este dat! n figura 5.##.
Multiplexor analogic
Cerere de ntrerupere E$antionare Memorare

Intr!ri analogice

Convertor Analog Digital cu aprox. succesive

Selec"ie canal ADMUX

START ADCSR

Tact conversie

Date ADCH, ADCL (#0b)

BUS INTERN

Registru de prescalare

CK

Figura 5.11 Convertorul analog-numeric

Prin registrul ADMUX se comand! cu 3 bi"i selec"ia unui canal din cele 6. Registrul de control $i stare ADCSR poate declan$a o conversie prin pozi"ionarea unui bit. Func"ionarea convertorului poate fi validat!/invalidat!. Prin registrul de control se poate programa $i rata de prescalare. Pentru a mic$ora perturba"iile introduse de unitatea central! n timpul achizi"iei de date se poate comanda UC n stare inactiv!. Dup! efectuarea conversiei ntreruperea de la convertor va trezi UC (ADC Noise Canceler Function). nscrierea memoriei FLASH $i EEPROM se poate face $i n mod paralel, ceea ce nseamn! o vitez! mai mare de scriere $i un plus de simplitate la programare. Semnalele folosite n acest mod de programare sunt date n figura 5.#2. Pentru nscrierea sau citirea datelor se folosesc 8 linii cu semnifica"ii duble din porturile PC $i PB. /OE stabile$te dac! este vorba de scriere sau citire. Scrierea se face cu strobul /WR. BS selecteaz! octetul mai semnificativ sau mai pu"in semnificativ. Semnalele XA0 $i XA# stabilesc dac! se ncarc! memoria FLASH, sau o adres! a EEPROM, un octet de date sau o comand!. Sunt posibile 9 comenzi:

5. Microcontroller-e RISC

151

$tergere memorie, scriere bi"i de securitate, scriere bi"i fuzibili, scriere FLASH, scriere EEPROM, citire bi"i de identificare, citire bi"i fuzibili $i de securitate, citire FLASH, citire EEPROM. Modul de scriere paralel poate fi u$or realizat prin intermediul interfe"ei CENTRONICS; citirea pentru verificare este mai complicat!.
RDY/BSY /OE /WR BS XA0 XA# +#2V tact

AT90S4433
PD# PD2 PD3 PD4 PD5 PD6 RESET XTAL Vcc PC,PB

+5V 8 linii de date, bidirec"ionale

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

Modelele AT90S44#4 $i AT90S85#5 dispun de posibilitatea conect!rii n exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la portul A magistrala de adrese (octet mai pu"in semnificativ) $i magistrala de date multiplexate, iar la portul C octetul mai semnificativ al magistralei de adrese. De asemenea sunt disponibile $i semnalele ALE (Address Latch Enable), /RD $i /WR.

5.2.2

Familia ARM

Un nucleu cu arhitectur! RISC de mare performan"! este ARM7DMI. Este conceput cu o arhitectur! von Neumann, cu magistrala de date pe 32 de bi"i, avnd 2 seturi de instruc"iuni (ARM pe 32 de bi"i $i THUMB pe #6 bi"i). Spa"iul adresabil este de 4G. O schem! bloc sumar! a acestui nucleu este dat! n figura 5.#3. Structura UC este pipe line pe 3 nivele; extragere cod, decodificare $i execu"ie. UC poate lucra cu date pe 8, #6 sau 32 de bi"i $i poate executa nmul"iri ntr-un singur ciclu. Nucleul are integrat $i circuitul de testare JTAG $i un emulator n circuit.

Setul de instruc"iuni THUMB pe #6 bi"i este un subset al setului pe 32 de bi"i, cele mai uzual folosite instruc"iuni. n acest fel se salveaz! spa"iu de memorare $i se c$tig! vitez! de prelucrare.

152 Emulator n circuit (Ice Breaker) Unitate central! ARM Magistrala de adrese
Registru pt. adrese

MICROCONTROLLER-e

Bus C Distribuitor de magistrale 37 registre de 32 bi"i Bus A ALU pe 32 de bi"i Controller JTAG Bus B
Decodor ARM

Magistrala de date (32)


Registru de date (32)

Decodor
THUMB

Figura 5.13 MC ARM schema bloc

Pentru a asigura un grad mare de paralelism n UC, exist! mai multe magistrale de leg!tur!. Instruc"iunile sunt analizate $i distribuite decodoarelor corespunz!toare (THUMB sau ARM). UC este echipat! cu un set de 32 de registre $i registre suplimentare pentru nmul"ire. Pentru a se putea conecta o varietate ct mai mare de interfe"e, magistralele sunt accesibile prin distribuitor n mai multe forme: unidirec"ional, bidirec"ional, multiplexat etc.

6
CRITERII DE PROIECTARE
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC

Sunt multe aspecte de care trebuie !inut seama la alegerea unui MC pentru o anumit" aplica!ie. Alegerea unui MC potrivit poate duce la succesul proiectului, a#a cum o alegere nepotrivit" poate duce la e#ecul proiectului. Fiecare cititor trebuie s" adapteze aceste criterii nevoilor sale #i scalei proprii de valori. Obiectivul urm"rit n alegerea unui MC este ob!inerea calit"!ii dorite cu un cost ct mai sc"zut. Calit"!ile dorite nseamn" performan!", fiabilitate, calit"!i EMC (de compatibilitate electromagnetic" cu mediul), iar costul total include costurile cercet"rii, proiect"rii, construc!iei, test"rii, repar"rii produsului. n primul rnd se pune problema stabilirii func!iei pe care MC trebuie s-o ndeplineasc" n sistem. Alegerea din catalog a unui MC trebuie f"cut" n ideea a ct mai pu!in hardware suplimentar (din motive economice). Procesul de c"utare este dificil din cauza num"rului foarte mare de tipuri de MC disponibile pe pia!". Munca de c"utare este ajutat" de bazele de date din Internet, a#a cum este baza de date de la www.questlink.com . Dup" stabilirea MC optim se verific" pre!urile, dac" este disponibil, suportul acordat de fabricant, existen!a uneltelor de dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea de a fi g"sit pe pia!" (optenabilitatea), mai ales n zone n care circula!ia m"rfurilor este destul de greoaie. Criteriile pentru alegerea unui MC sunt, n ordinea importan!ei:

$.Posibilitatea folosirii n aplica!ia dat" ! este suficient un MC sau sunt necesare circuite suplimentare; ! liniile I/O sunt suficiente (un num"r prea mic nseamn" c" aplica!ia nu se poate face cu acest MC, iar un num"r prea mare nseamn" un cost excesiv); ! exist" toate interfe!ele solicitate de aplica!ie: I/O serial, convertoare A/D, D/A #i nu exist" interfe!e n plus; ! exist" capacitatea de memorare suficient": RAM, ROM; ! MC are viteza suficient" pentru aceast" aplica!ie. Se verific" timpul necesar rul"rii programului care trebuie s" fie mai mic dect intervalul de timp n care trebuie s" reac!ioneze MC;

154

MICROCONTROLLERE

! alimentarea MC poate fi f"cut" din aplica!ie (este posibil ca aplica!ia s" fie portabil", atunci este nevoie de un MC care s" func!ioneze la 3V; ! pre!ul acestui MC este bun (acceptabil) pentru aplica!ia respectiv". 2. Optenabilitatea MC ! trebuie s" fie disponibil n cantit"!i suficiente; ! trebuie s" fie n produc!ia actual", dar #i n viitor pentru posibilitatea aprovizion"rii n viitor; ! disponibilitatea unor accesorii (convertoare A/D, D/A, alimentatoare etc). ! ! ! ! ! ! ! ! ! ! ! ! 3.Disponibilitatea suportului de dezvoltare asambloare; compilatoare; debuggere; module de evaluare; emulatoare n circuit; analizoare logice; 4. Suport din partea constructorului documenta!ie tehnic"; buletine de aplica!ii; service prin telefon (BBS); rapoarte despre probleme de func!ionare; software de utilizare; dac" MC este folosit #i de al!i utilizatori, atunci sunt formate grupuri de lucru care pot oferi ajutor. 5.Seriozitatea constructorului dac" este demonstrat" competen!a lui ; stabilitate #i fiabilitatea MC realizate; viteza de livrare; num"r de ani ca #i constructor #i rezultate financiare.

! ! ! !

Un argument pentru alegerea unui tip de MC este existen!a unui modul de evaluare. Pentru a promova propriile MC, mul!i furnizori au creat Kit-uri de evaluare care con!in pl"ci de evaluare #i un soft minimal cu care se poate nv"!a utilizarea MC #i se pot pune la punct aplica!ii. Un kit con!ine de regul" un program monitor pentru calculator PC, un program de transfer al datelor spre placa de evaluare (prin interfa!a RS232 sau CENTRONICS), un asamblor #i un compilator C. Toate kiturile sunt nso!ite de documenta!ie. Cteva din modulele de evaluare sunt: Motorola EVBU, EVB, EVM, EVS sunt echipate cu MC 68HC$$. Dallas Semiconductor DS5000TK sunt echipate cu MC Dallas din seria DS5000. Philips #i CEIBO DS750 sunt echipate cu 87C75x, echivalent cu 805$.

6. Criterii de proiectare

155

American Educational Systems AES-5$(805$), AES-$$(68HC$$), AES88(8088) con!in o tastatur", un afi#aj cu LCD #i documenta!ie. Firma Texas Instruments pune la dispozi!ia celor interesa!i un set de accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS #i unelte de dezvoltare (CDT). Aplica!ia poate fi scris" n limbajul C, de exemplu pe un PC (utiliznd orice editor) #i codul pentru TMS va fi generat de link editor. Codul poate ajunge la MC prin intermediul interfe!ei seriale RS232. XDS analizeaz" softul creat, (chiar n domeniul timp) #i permite punerea la punct (chiar rularea lui pas cu pas). Exist" firme specializate n construirea unor module de evaluare cu diferite MC, a#a cum este de exemplu PHYTEC (www.phytec.de). Fiecare furnizor de MC pune la dispozi!ia clien!ilor un Kit de start (Starter Kit), care este un instrument foarte valoros pentru a putea ncepe lucrul cu un anumit tip de MC. Kit-ul de start con!ine o plac" cu soclu #i hard-ul aferent pentru programarea ini!ial" a MC, uneori programarea EPROM-ului, interfa!a #i cablul de leg"tur" la PC, documenta!ie #i programe (asamblor, link editor, debugger) dar nu con!ine de regul" un MC. Pre!ul unui astfel de Kit porne#te de la $00USD (www.schuricht.de , www.farnell.com ). Un alt argument pentru alegerea unui MC este comoditatea folosirii lui. Unele MC, a#a cum este Motorola 68HC$$A8P$ are nscris n ROM un program monitor (numit Buffalo). Pentru punerea n func!iune este nevoie doar de o leg"tur" serial" RS232 cu un PC (este nevoie de o conversie de nivel) #i se poate lucra de pe PC cu monitorul MC, rulnd programele n RAM-ul MC #i stocndu-le n EEPROM. Pe Internet exist" subprograme scrise n Buffalo. Un alt MC, 8052AH-BASIC con!ine un BASIC. MC Dallas din seria DS5000 are nevoie doar de un cristal pentru oscilator #i este gata de lucru. MC con!ine memorie RAM static alimentat" de la o baterie #i programul #i datele sunt astfel nevolatile.

6.2

ALGORITMUL PROIECT!RII SISTEMELOR CU MC

Ne permitem s" prezent"m o organigram", (figura 6.$) ce ncearc" s" sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s" le urm"reasc" n dezvoltarea soft-ului dedicat unei aplica!ii. Trebuie s" men!ion"m c" etapele 3,4 #i 5 pot fi iterate. Ele duc la perfec!ionarea func!ion"rii sistemului.

156
START

MICROCONTROLLERE

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") proiect"rii unui sistem dedicat

6. Criterii de proiectare

157

6.3

PROIECTAREA SISTEMELOR CU MC N VEDEREA SIGURAN"EI N EXPLOATARE

Tendin!a produc"torilor de MC de a sc"dea pre!urile duce la r"spndirea din ce n ce mai mare a MC #i la crearea a noi #i noi aplica!ii. Mic#orarea dimensiunilor duce la cre#terea frecven!ei de lucru. Cu ct frecven!a cre#te, cu att cre#te posibilitatea interferen!elor electromagnetice (EMI) #i se pune problema proiect"rii n vederea compatibilit"!ii electromagnetice (EMC). Apar dou" categorii de probleme: aplica!ia poate genera perturba!ii (conduse sau radiate) sau poate fi susceptibil" la perturba!ii (conduse sau radiate). Descoperirea unor probleme de EMI n faza final" de produc!iei a aplica!iei poate fi costisitoare deoarece s-ar putea s" fie necesar" reproiectarea aplica!iei; de aceea este necesar ca proiectarea ini!ial" s" se fac" n vederea EMC. Perturba!iile sunt generate de armonicile semnalelor digitale din circuit. Ele pot fi radiate de buclele de cablaj care se comport" ca #i antene sau sunt conduse spre sursa de alimentare. Orice cale inductiv" sau capacitiv" pe traseul acestor armonici poate provoca vrfuri de tensiune sau c"deri de tensiune. Pentru un sistem cu MC perturba!iile sunt generate de regul" de cablaj, deoarece circuitele integrate au dimensiuni prea mici pentru a putea emite. Semnalul cu frecven!a cea mai mare este tactul sistemului generat cu un circuit oscilant cu cuar!. Datorit" faptului c" forma semnalului este apropiat" de forma sinusoidal", con!inutul de armonici este mic. Dac" tactul este adus din exterior, se impune aten!ie m"rit" pentru a reduce buclele de circuit emisive. Pentru un sistem care are memorii externe cuplate la MC, liniile de transfer pot fi emisive, deoarece frecven!ele de tranzi!ie sunt mari. Susceptibilitatea sistemelor cu MC este creat" de natura sincron" a MC. Un tact cu nivel electric insuficient poate produce o eroare. Erorile sistemelor cu MC pot fi grupate n:

$. aplica!ia are o eroare dar se corecteaz"; 2. aplica!ia are o eroare dar o ntrerupere sau un RESET corecteaz" func!ionarea; 3. aplica!ia are o eroare #i oprind #i repornind sistemul, eroarea dispare; 4. aplica!ia are o eroare permanent" datorat" unei componente defecte.
Problemele din categoria $ #i 2 pot s" nici nu fie observate de beneficiar.

Performan!ele EMC pot fi mbun"t"!ite acordnd aten!ie deosebit" urm"toarelor aspecte de proiectare:
desenul cablajului imprimat; ceasul de gard" programarea defensiv"

158

MICROCONTROLLERE

6.3.1 Cablajul imprimat


Orice perturba!ii pe liniile de alimentare pot produce o func!ionare defectuoas" a sistemului. De aceea se recomand" utilizarea unui cablaj multistrat la care masa #i alimentarea sunt plane interne. La aplica!iile cu pre! mic, o cale important" de a reduce pre!ul este folosirea cablajului dublu placat sau chiar simplu placat. La aceste tipuri de cablaj traseele de mas" #i +5V trebuie s" fie ct mai late pentru a avea o impedan!" ct mai mic". Decuplarea cu condensatoare a MC trebuie s" fie realizat" ct mai aproape de circuit. n unele aplica!ii care trebuie s" fie foarte ieftine se folose#te alimentarea MC de la re!eaua de c.a. f"r" transformator, cu un redresor monoalternan!" (figura 6.2). MC VDD
Re!ea 220V DZ 5V

0,$

VSS
Mas" flotant"

Figura 6.2 Schema simpl" de alimentare de la re!ea

n acest caz se creeaz" o linie de mic" impedan!" spre mas" prin re!eaua 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 instruc!iunea nu se execut" corect, circuitul ie#ind din program. O astfel de situa!ie singular" poate fi rezolvat" de ceasul de gard" care comand" un RESET, dup" care MC ruleaz" din nou corect. Se recomand" ca toate componentele aferente gener"rii tactului s" fie situate ct mai aproape de circuit, iar dac" este posibil toate traseele s" fie nconjurate de un traseu lat de gard". Se recomand" o decuplare a cristalului la linia de cea mai mic" impedan!" (de regul" masa) cu condensatori SMD. Se recomand" s" se p"streze o distan!" mare ntre liniile de frecven!" mare #i circuitul de tact. Este de asemenea important" protec!ia pinilor de intrare, cum ar fi RESET sau IRQ. Un pin n aer poate comuta dac" n vecin"tatea lui sunt linii de nalt"

6. Criterii de proiectare

159

frecven!". Se recomand" decuplarea acestor pini cu condensatori $-$0nF ct mai aproape de circuit.

6.3.2 Ceasul de gard#


Folosirea ceasului de gard" este foarte util" n cre#terea siguran!ei n func!ionare. Majoritatea MC au un ceas de gard" integrat, iar dac" nu, un ceas de gard" extern poate fi u#or realizat cu un monostabil redeclan#abil. Redeclan#area ceasului de gard" trebuie f"cut" n programul principal, nu n subrutine. Pentru a putea folosi corect ceasul de gard" trebuie analizat" cu aten!ie durata normal" a programului pe ramura cea mai lung".

6.3.3 Programarea defensiv#


Prin metodele de programare defensiv" se poate mbun"t"!i mult siguran!a n func!ionare f"r" nici un hardware suplimentar. Cteva din cele mai eficiente metode sunt: renc"rcarea periodic" a registrelor care comand" pinii I/O #i a celor mai importante registre. Pinii I/O sunt leg"tura MC cu exteriorul, de aceea ei sunt supu#i perturba!iilor. Readucerea lor la nivele corecte mic#oreaz" probabilitatea ca o perturba!ie s" se propage n circuit. citirea repetat" a semnalelor de intrare mic#oreaz" riscul unei citiri gre#ite. De exemplu citirea de 3 ori la rnd a unui pin care este legat la o tast". Dac" s-a citit aceea#i valoare de fiecare dat" se elimin" posibilitatea unei perturba!ii. dac" exist" loca!ii n RAM nefolosite, dup" fiecare etap" de rulare a programului se scrie un bit n RAM. nainte de rularea unei rutine critice se verific" valoarea stocat" n RAM #i rutina se execut" doar n cazul n care valoarea din RAM este corect". dac" ntr-o aplica!ie exist" memorie nefolosit", aceasta se umple cu instruc!iuni de salt ntr-un loc cunoscut pentru ca un salt neprev"zut n memorie datorat unei perturba!ii s" fie anulat de saltul n locul cunoscut. Folosirea watchdog-ului n faza de testare #i chiar n aceea de fiabilizare a func!ion"rii sistemului. Implic", postarea (memorarea ntro zon" specific") st"rilor succesive prin care trece sistemul, scrierea unei rutine de analiz" a st"rilor #i de directare a programelor c"tre starea ultim" postat", rutin" apelat" la fiecare "warm reset", sau chiar

160

MICROCONTROLLERE

la fiecare reset al sistemului. Pot fi implementate soft #i alte func!iuni care s" permit" men!inerea coeren!ei sistemului!

7
APLICA!II

7."

IMPLEMENTAREA UNEI APLICA!II SIMPLE DE COMAND# $I CONTROL DIGITAL

S! se comande utiliznd un sistem dotat cu microcontroller un piston hidraulic (actuator) ntr-o mi"care de avans "i alta de retragere, comenzi transmise prin intermediul unei linii de conexiune seriale. Frecven#a de transfer pe interfa#a serial! va fi de $9200 bauds (bi#i pe secund!), iar frecven#a de ceas a sistemului va fi de $$059000Hz. Cuvintele de comand! "i control sunt formate dintr-un singur caracter n format ASCII "i comenzile pot con#ine "i parametrii.

L" Ev" Ev2

L2

Figura 7." Structura actuatorului electro-hidraulic

"62

MICROCONTROLLERE

Cuvintele cheie admise de c!tre sistem pentru controlul s!u sunt: A - comand! de avans a pistonului, respectiv comand! mi"carea de la limitatorul $ c!tre limitatorul 2 R - comada de retragere a pistonului, respectiv comand! mi"carea de la limitatorul 2 c!tre limitatorul $ S - comand! de citire a st!rii actuatorului care va ntoarce urm!toarele ecouri: $. D - preg!tit s! recep#ioneze comand! (reaDy) 2. B - ocupat cu execu#ia unei comenzi (Busy) P comand! de aflare a pozi#iei actuatorului (Position), care va ntoarce urm!toarele ecouri: $. E avansat, actuatorul atinge limitatorul 2 2. I retras, actuatorul atinge limitatorul $ 3. M actuator aflat n mi"care

Structura electro-hidraulic! a sistemului de comand! "i control include elementele din figura $. "i anume: pompa de presiune pentru circuitul hidraulic, care porne"te simultan cu comand! dorit!; comanda pompei este realizat! de c!tre sistem n logic! pozitiv! ($ logic = pompa ac#ionat!, 0 logic = pompa oprit!). dou! electro-valve cu dou! c!i care asigur! accesul presiunii c!tre camerele pistonului hidraulic comandate tot n logic! pozitiv!, ceea ce nseamn! c! aplicnd un $ logic pe linia de comand!, nalta presiune a pompei are acces c!tre camera corespunz!toare a pistonului, iar aplicnd un 0 logic pe linia de comand! presiunea din camera pistonului este eliberat! c!tre rezervorul de fluid. dou! limitatoare de cap!t de curs! care func#ioneaz! n logic! negativ! "i care permit detectarea st!rii actuatorului. interfa#a serial! RS232C cu care sistemul de comand! este conectat la sistemul ierarhic superior, spre exemplu la un PC.

7. Aplica#ii

"63

7."." Varianta de implementare cu microcontroller CISC


Proiectarea elementelor electronice ale sistemului o vom face utiliznd circuitul AT89C205$, care este dotat cu 2 Ko memorie EEPROM (Flash) care permite stocarea programelor de comand! "i control. Sunt necesare att amplificatoarele n comuta#ie pentru comanda electrovalvelor "i a pompei de presiune ct "i circuitele de intrare ce se prezint! sub forma unor trigger-e Schmidt, pentru formarea semnalelor de la limitatoarele $ "i 2. Structura gndit! este prezentat! n figura 7.2. Rx P3. P3. P3. P3. Ev Ev p

AT89C205"

Tx P3.

P3. P3.

L" L2

Figura 7. 2 Schema conect!rii microcontrolerului la aplica#ie

Implementarea software a sistemului implic! scrierea programelor care s! permit! execu#ia func#iunilor sistemului propus. Ca sistem determinist, acesta trebuie s! aibe o stare ini#ial! bine definit!, de aceea vom considera c! aceasta corespunde pozi#iei cu pistonul retras aflat pe limitatorul L$, dar pe lng! aceste elemente ce #in de procesul n care sistemul este utilizat, va trebui s! analiz!m "i s! set!m parametrii ini#iali ai microcontroller-ului. Pentru aceasta, vom urm!ri starea ini#ial! a UC, prezentat! n catalogul produsului (vezi figura 7.3), iar apoi va trebui ca s! scriem rutina de ini#ializare de sistem pentru a preciza complet starea microcontroller-ului. Organizarea programelor care determin! func#iunile sistemului ilustreaz! principiile program!rii structurate, astfel: programul de ini#ializare este apelat din programul principal, func#iunile sistemului, cea de comunica#ie serial!, cele de comand! avans "i retragere piston, cele de specificare a st!rii sistemului "i cele de oprire pe limitatoare a acestuia sunt specificate prin rutine de servire a ntreruperilor (ISR Interrupt Service Routines).

"64

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 AT89C205$

".

Rutina de ini%ializare, INIT, va realiza urmatoarele: Umple toate loca#iile memoriei interne a microcontroller-ului cu 0. (Fill Memory with zero) Aduce n pozitia de referin#! (pistonul atinge limitatorul L$) sistemul. Programeaz! urm!toarele registre de func#ii speciale (SFR Special Functions Registers) ! PSW (Program Status Word Register) ! PCON (Power On Control Regsiter) ! TMOD (Timers Mode Register) ! TCON (Timers Control Register) ! SCON (Serial Control Register) ! IE (Interuppt Enable Register) Intr! n bucla de a"teptare a comenzilor de la sistemul ierarhic superior, comenzi ce vor fi transmise via interfa#a serial!.

2.

Rutinele de serive a ntreruperilor vor fi concepute pentru a implementa func%iunile ce necesit& sincronizarea func%ion&rii sistemului cu elementele externe acestuia ce sunt fie comandate fie reprezint! senzori sau traductoare ale sale. Astfel, va trebui s! satisfacem urm!toarele: ! Func#ia de recep#ie a mesajelor de comand! sau a cererilor de date de stare din partea sistemului ierarhic superior. Implementarea acesteia se refer! la interfa#a serial! a sistemului "i necesit! analiza mesajului receptionat, comanda corespunz!toare a sistemului sau emiterea ecoului la comenzile Cerere de Stare (Status Request) din partea sistemului ierarhic superior.

7. Aplica#ii

"65

! Func#ia de oprire la atingerea limitatoarelor a comenzii actuatorului electrico-hidraulic. 3. Programul principal, este gndit s& a'tepte o comad! din partea sistemului ierarhic superior sau s! a"tepte ndeplinirea acesteia.

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

"66

MICROCONTROLLERE

CY carry flag este setat atunci cnd n urma unei instruc#iuni aritmetico-logice apare o opera#ie de transport sau mprumut AC Auxiliary Flag utilizat tot n cadrul unor instruc#iuni aritmetico-logice F0 User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific RS$ "i RS0 codific! natura (binar) bancul #int! de registre generale astfel: 00 specific! bancul 0 de registre generale 0$ specifica bancul $ de registre generale $0 specifica bancul 2 de registre generale $$ specifica bancul 3 de registre generale OV este setat auotmat la apari#ia unei dep!"iri n cadrul unei opera#ii de transfer a datelor F$ User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific P Parity Flag specific! paritatea byte-ului de informa#ie prelucrat PCON SMOD GF" GF0 PD IDL

SMOD (Serial Mode) setat (dac! este fixat pe $ logic) multiplic! cu 2 frecven#a de emisie/recep#ie serial! a datelor GF" (General Flag 1), este un bit ce poate fi scris sau citit de c!tre utilizator prin program GF0 (General Flag 0), este un bit ce poate fi scris sau citit de c!tre utilizator prin program PD (Power Down Flag) Setarea acestui bit trece microcontroller-ul n starea de putere redus! blocnd func#ionarea oscilatorului intern "i aducnd n starea high FFH ie"irile porturilor sale. Informa#iile stocate n memoria intern! a procesorului, abstrac#ie f!cnd cele din registrele speciale (SFR) sunt men#inute, chiar cnd tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul n curs va fi oprit imediat dup! efectuarea instruc#iunii curente n care a ap!rut setarea acestui flag. Acest flag are preceden#! n raport cu flag-ul IDL (Idle) atunci cnd cele dou! flag-uri sunt setate simultan. Ie"irea din starea PD se face prin aplicarea unui semnal de Reset. IDL (IDLE Flag) Setarea acestui flag duce la trecerea ntr-o stare de consum redus a microcontroller-ului, stare n care frecven#a de ceas a sistemului este aplicat! doar elementelor periferice, controller-ul de ntreruperi, interfa#a serial!, timer-ele etc. Porturile r!mn n starea anterioar! set!rii bitului IDL, iar semnalele ALE "i PSEN# trec n $ logic. Revenirea n stare de lucru se poate realiza pe dou! c!i: Prin generarea extern! a unei ntreruperi, aceasta va reseta flag-ul IDL iar la terminarea ei, prin program, dup! instruc#iunea RETI putem seta din nou acest flag, sau printr-un Reset hardware, caz n care durata minim! a impulsului de Reset trebuie s! dep!"easc! 24 de ciclii de ceas. Aceste dou! st!ri Power Down "i Idle Mode sunt st!ri n care consumul microcontroller-ului este redus "i pot fi exploatate atunci cnd aplica#ia pe care vrem s! o realizam corespunde unui aparat portabil care trebuie s! protejeze la maximum resursele energetice.

7. Aplica#ii

"67

TMOD GATE C/T# M" M0 GATE C/T# M" M0 Timer " Timer0

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

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

"68

MICROCONTROLLERE

n modul 3 va permite multiplicarea canalelor temporizatoare/num!r!toare cu un canal de temporizare/ num!r!toare de 8 bi#i

Figura 7. 4 Structura canalului temporizator al microcontrolerului AT89C205$

TCON TF" TR" TF0 TR0 IE" IT" IE0 IT0

Registrul TCON (Timer Control) permite modificarea set!rilor bit cu bit, semnifica#ia acestora o detaliem n continuare: TFx, exprim! starea canalului temporizator corespunz!tor. Setarea se realizeaz! hardware, automat la trecerea de la starea $$$$B la starea 00..00B a num!r!toarelor canalului respectiv (overflow). Bi#ii TRx seta#i/reseta#i permit sau respectiv inhib! soft poarta de control ce asigur! accesarea num!r!toarelor de c!tre semnalul de intrare al canalului respectiv. Bi#ii IEx se seteaz! automat (hardware) atunci cnd un front descresc!tor apare pe linia de ntreruperi externe corespunz!toare "i sunt reseta#i tot automat la servirea ntreruperii. (la intrarea n ISR). Bi#ii ITx seta#i/reseta#i stabilesc dac! intr!rile corespunz!toare ntreruperilor externe de stare vor fi sensibile pe frontul descresc!tor al semnalului, respectiv pe nivelul logic zero. n cazul n care bi#ii respectivi (ITx) sunt reseta#i, dac! semnalul extern aplicat pe intr!rile INTx este de durat! mai mare dect durata ISR corespunz!toare, la sfr"itul ISR se va genera o nou! ntrerupere corespunz!toare respectivului canal.

7. Aplica#ii

"69

SCON SM0 SM" SM2 REN TB8 RB8 TI RI

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

"70

MICROCONTROLLERE

IE EA SI TF" IE" TF0 IE0

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

7. Aplica#ii

"7"

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

"72

MICROCONTROLLERE

STATUS CDA L2 L"

Bitul L$ este setat la atingerea limitatorului L$, n rest este resetat Bitul L2 este setat la atingerea limitatorului L2, n rest este resetat Bitul CDA este setat la ini#ierea unei comenzi de avans sau retragere "i resetat n rest, la sfr"itul mi"c!rii. Rutina de servire a ntreruperilor din partea UART (ISR_SI) asigur! tratarea fiec!rui cuvnt de comand! dintre cele admise de protocolul instituit. Loca#iile STATUS asigur! memorarea st!rii sistemului. n acest sens, asamblorul permite rezervarea de spa#iu de memorie n zona de adrese 20H la 2FH, respectiv bi#ii de la 00H la 7FH. ;Variabile de stare ale actuatorului electo-hidraulic. STATUS0 BIT 20H STATUS$ BIT 2$H STATUS2 BIT 22H ;Rutina de servire a ntreruperilor generate de UART ;Aten#ie UART genereaz! o unic! ntrerupere att la recep#ie ct "i la transmisie ISR_SI: JB RI,RECEPTIE
TRANSMISIE:

CLR TI ;%terge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru ;reanclan"area ntreruperilor la transferul unui nou caracter JB RI,RECEPTIE ;Retestare recep#ie caracter de c!tre UART RETI
RECEPTIE:

MOV A,SBUF ;Cite"te caracterul recep#ionat n registrul ACC CJNE A,#'A',ISR_SI_$ CDA_AVANS: SETB P3.7 ;Comand! Electrovalva$ CLR P3.6 ;Blocheaz! Electrovalva2 SETB P3.5 ;Comand! pompa de presiune ;Comand! mi"carea de avans a actuatorului ac#ionnd Electrovalva$ "i pompa. CLR STATUS0 ;Reseteaz! starea consemnat! anterior, respectiv actuator retras SETB STATUS2 ;Consemneaz! comanda actuatorului SETB IE.$ ;Valideaz! "i ntreruperile corespunz!toare limitatorului 2 JMP END_ISR_SI ISR_SI_$: CJNE A,#'R',ISR_SI_2 SETB P3.6 ;Comand! Electrovalva2 CLR P3.7 ;Blocheaz! Electrovalva$

7. Aplica#ii

"73

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

"74

MICROCONTROLLERE

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

7. Aplica#ii

"75

7.".2 Varianta de implementare cu microcontroller RISC.


Implementarea aceleia"i aplica#ii utiliznd procesorul PIC$6F84 presupune urm!toarele: $. Implementarea interfe#ei cu aplica#ia, respectiv comanda celor dou! electrovalve "i a pompei de presiune 2. Implementarea controlului cursei pistonului, adic! achizi#ia semnalelor digitale de la cele dou! limitatoare 3. Implementarea interfe#ei seriale ce asigur! conexiunea c!tre nivelul ierarhic superior, pentru aplica#ia noastr!. Vom analiza pe scurt care sunt principalele elemente caracteristice ale procesorului ales. Structura acestuia este prezentat! n figura 7.5.

Figura 7. 5 Structura microcontroler-ului PIC$6F86

Dispune de $3 linii utilizabile ca linii de intrare/ie"ire cu capabilitate ridicat! n curent (pn! la 20 mA, fiecare). Arhitectura procesorului este Harvard, cu l!#imea magistralei de date de 8 bi#i "i a celei corespunz!toare memoriei de program de $4 bi#i. Dispune de $Ko memorie de program (flash sau EPROM), de

"76

MICROCONTROLLERE

2x$28 bytes memorie SRAM organizat! n dou! zone, zona SFR (Special Function Regsiter) "i zona GPR (General Purpose Register) "i de 64 bytes memorie EEPROM ce poate fi nscris! "i stears! prin program. Dispune de un canal temporizator/num!r!tor ce poate ndeplini func#ia de Watch Dog de 8 bi#i cu un prescaler de 5 bi#i. Controller-ul de ntreruperi intern admite 4 surse de ntreruperi: una extern! (RB0/INT, una de la canalul TMR0 (timer overflow), una de la portul B comun! pentru 4 dintre liniile portului care genereaz! o ntrerupere la schimbarea nivelului logic de semnal pe ele "i o ntrerupere intern! generat! la

IND ADR TMR0 PCL STATUS FSR PORT A PORT B EEDATA EEADR PCLATCH INTCON 68 x 8 GPR

IND ADR OPTION PLC STATUS FSR TRIS A TRIS B EECON$ EECON2 PCLATCH INTCON Mapped

Figura 7. 6 Registrele microcontroler-ului PIC$6F84

scrierea datelor n EEPROM. Stiva microcontroller-ului este mai deosebit!, respectiv este implementat! ntr-o zon! special! a memoriei interne "i are maximum 8 nivele nefiind permis! citirea sau nscrierea acesteia prin adresare direct!. Procesorul nu dispune de instruc#iuni PUSH sau POP "i astfel doar prin instruc#iuni de tipul CALL, GOTO, RETURN, RETFIE "i RETLW putem introduce, respectiv extrage informa#ii la nivelul stivei. O observa#ie important! de care va trebui s! #inem cont, este aceea c! nu este prev!zut nici un indicator de dep!"ire a dimensiunii stivei, ceea ce poate duce la grave erori atunci cnd num!rul de apeluri sau de instruc#iuni GOTO este Figura 7. 7 Structura cuvntului instruc#iune mai mare de 8. Instruc#iunile procesorului au o l!#ime de $4 bi#i "i ele includ att codul respectiv ct "i operanzii aferen#i acestuia, respectiv adresa

7. Aplica#ii

"77

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

"78

MICROCONTROLLERE

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

Instruc%iuni ce permit execu%ia repetitiv& a unui "ir de opera#ii: DECFSZ f,d Decrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este zero rezultatul. Valoarea rezultat este re#inut! func#ie de flag-ul d n W d=0 sau f d=$.

7. Aplica#ii

"79

INCFSZ f,d Incrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este zero rezultatul. Valoarea rezultatului este re#inut! func#ie de flag-ul d n W d=0 sau f d=$. Restul instruc#iunilor de resetare sau setare pe bit "i byte, cele de incrementare "i decrementare, cele de complementare "i instruc#iunea NOP sunt furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip). Vom utiliza instruc#iunile de deplasare la dreapta prin bitul de carry pentru emularea UART. Registrele generale ale microcontroller-ului asigur! pe de-o parte implementarea func#iunilor de control pentru program, iar pe de alt! parte permit memorarea datelor "i transferul comenzilor c!tre mediul extern. Iat! structura celor mai importante dintre acestea. STATUS
IRP RP" RP0 T0# PD# Z DC C

IRP este bitul care selecteaz! bancul de registre ( la adresarea indirect!) valoarea 0 corespunde intervalului de adrese 00H la FFH, iar valoarea $ corespunde intervalului $00H la $FFH. RP",RP0 corespunde selec#iei bancului de registre (la adresarea direct!) selec#ie astfel: 00 corespunde intervalului de adrese 00H la 7FH 0$ corespunde intervalului de adrese 80H la FFH $0 corespunde intervalului de adrese $00H la $7FH $$ corespunde intervalului de adrese $80H la $FFH T0# (time out bit), exprim! dep!"irea capacit!#ii de num!rare a canalului 0, respectiv tranzi#ia de stare de la FFH spre 00H. PD# (Power Down), odat! setat exprim! trezirea sistemului, la pornirea acestuia sau dup! execu#ia instruc#iunii CLRWDT. n rest bitul de mai sus este resetat. Z (Zero flag), este setat la ntlnirea coinciden#ei a dou! valori numerice sau cnd rezultatul opera#iei aritmetico-logice este zero. n rest, acesta este resetat. DC (Digital Carry), exprim! transportul sau mprumutul la nivel de semibyte. Setat la apari#ia transportului, resetat la apari#ia unui mprumut. C (Carry), este setat la apari#ia unui transport la nivel de byte, "i resetat n rest. OPTION
RBPU# INTEDG TOCS TOSE PSA PS2 PS" PS0

RBPU#, (Pull up bits port B),setat exprim! invalidarea func#iunii pull-up pentru liniile portului B, iar resetat, asigur! func#ia pull-up pentru aceste linii. INTEDG (Interrupt Edge Select) setat permite generarea ntreruperilor pe frontul cresc!tor, iar resetat realizeaz! generarea ntreruperii pe frontul descresc!tor. TOCS (TMR0 Source Clock), selecteaz! sursa impulsurilor ce sunt num!rate de c!tre canalul 0 num!r!rtor/temporizator, setat permite num!rarea impulsurilor externe, aplicate la pinul RA4, resetat selecteaz! frecven#a intern! de ceas divizat! cu 4.

"80

MICROCONTROLLERE

TOSE (TMR0 Source Edge Select), setat realizeaz! incrementarea num!r!torului canalului pe frontul negativ, iar resetat incrementeaz! impulsurile pe frontul pozitiv. PSA, (Prescaler Assignemet Bit), setat asigneaz! prescaler-ul pentru WDT (Watch Dog Timer), resetat l rezerv! pentru canalul TMR0. PS2, PS", PS0 (Bi#i de selec#ie a constantei de divizare a prescaler-ului), dup! cum urmeaz!: 000H reprezint! $/2 ptr. TMR0 "i $/$ pentru WDT 00$H reprezint! $/4 ptr. TMR0 "i $/2 pentru WDT 0$0H reprezint! $/8 ptr. TMR0 "i $/4 pentru WDT 0$$H reprezint! $/$6ptr. TMR0 "i $/8 pentru WDT $00H reprezint! $/32 ptr. TMR0 "i $/$6 pentru WDT $0$H reprezint! $/64 ptr. TMR0 "i $/32 pentru WDT $$0H reprezint! $/$28 ptr. TMR0 "i $/64 pentru WDT $$$H reprezint! $/256 ptr. TMR0 "i $/$28 pentru WDT Structura canalului temporizator/num!r!tor este ilustrat! n figura 7.8. ntreruperile n cazul microcontroller-ului PIC$6F84 au un singur vector, "i anume cel plasat la adresa 004H din memoria de program, iar cum sursele de ntreruperi sunt n num!r de patru este necesar s! implement!m n cadrul rutinei de servire programul de identificare "i apoi de tratare a acestora. Registrul

Figura 7. 8 Structura canalului temporizator la circuitul PIC$6F84

INTCON, este cel ce d! posibilitatea utilizatorului s! valideze sau invalideze att decla"area ntreruperilor de la diverse surse, ct "i s! valideze sau invalideze global ntreruperile. INTCOM GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

GIE, (Global Interrupt Enable), permite setat s! valideze acele cereri de ntrerupere ce apar dac! acestea au fost validate "i individual, respectiv resetat inhib! orice cerere de ntrerupere. EEIE (EEPROM Interrupt Enable) setat valideaz! ntreruperile la opera#iile de scriere sau citire a EEPROM-ului intern, resetat ignor! acestecereri de ntrerupere TOIE (TMR0 Overflow Enable), setat valideaz! ntreruperile corespunz!toare dep!"irii la canalul temporizator/num!r!tor, resetat acestea sunt ignorate

7. Aplica#ii

"8"

INTE (External Interrupt Enable), valideaz! ntreruperile datorate varia#iei semnalului aplicat pe intrarea RB0 atunci cnd este setat, respectiv resetat le ignor! RBIE (B Register Interrupt Enable), setat valideaz! ntreruperile datorate schimb!rii st!rii uneia dintre intr!rile portului RB7, RB6, RB5 sau RB4 al microcontroller-ului, respectiv, resetat ignor! schimb!rile de stare la nivelul portului RB TOIF (Timer Overflow Interrupt Flag), este setat hard la apari#ia st!rii dep!"ire a capacit!#ii num!r!torului corespunz!tor canalului 0, resetat n rest. INTF (Interrupt Flag) setat hard la apari#ia unei ntreruperi la nivelul liniei RB0, n rest resetat. RBIF (B Port Interrupt Flag), setat hard, atunci cnd una sau mai multe linii ale portului B au schimbat starea, resetat n rest. Ca observa#ie general! trebuie re#inut c! bi#ii de stare prezen#i n structura registrului INTCON sunt seta#i hard (prin mecanismul implementat n cadrul microcontroller-ului) "i programatorul, n cadrul rutinei de servire a ntreruperilor, va trebui s!-i reseteze, pentru a putea detecta urm!toarea condi#ie de decla"are a ntreruperilor. Registrele EEDATA (EEPROM Data Register), re#ine data de nscris sau de "ters din/n EEPROM, EEADR (EEPROM address), re#ine adresa de memorie la care, sau de la care se face: scrierea, respectiv citirea datelor "i registrele EECON$ "i EECON2 permit efectuarea memor!rii datelor n memoria EEPROM asignnd comenzile de scriere WR sau citire "i cele de validare. Avnd imaginea registrelor procesorului s! gndim cum am putea utiliza acest microcontroller pentru transferul datelor "i implementarea func#iunilor actuatorului electro-hidraulic. Observ!m un fapt mai pu#in mbucur!tor: circuitul nu dispune de o interfa#! serial! implementat! hard, deci va trebui s! o emul!m soft. L2 PB5 n ceea ce nseamn! L" PB4 implementarea controlului, observ!m c! portul B este deosebit de util el detectnd Ev2 PB3 automat varia#ia nivelului logic pe liniile RB4 la RB7. n figura 7.9 d!m schema PB2 Ev" electric! de conectare propus!, schem! n care am ignorat eventualele circuite PA0 p amplificatoare n comuta#ie sau formatoare de implus. Pentru liniile RxD "i respectiv PB" TxD TxD, vom folosi liniile portului B "i anume RB6 (aten#ie 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!,

PIC "6F84

"82

MICROCONTROLLERE

de generare a ntreruperii la sesizarea bitului de START n cazul transmisiei seriale), respectiv RB$ pentru transmisie. Principalele idei n baza c!rora vom emula interfa#a serial! sunt urm!toarele: program!m timer0 astfel nct acesta s! genereze cte o ntrerupere cu frecven#a ct mai apropiat! de frecven#a de transfer serial a informa#iilor. transfer!m cu ocazia servirii ntreruperii corespunz!toare, cte un bit "i rotim informa#ia respectiv! pentru a simula felul n care decurge transferul serial pe un UART implementat hard. vom stabili rata de transfer serial!, programnd corespunz!tor timer-ul 0 pentru aceasta. Iat! cum se realizeaz! acest lucru:

Formula de calcul -aproximativ!3- pentru stabilirea frecven#ei de transfer, dac! presupunem utilizarea unui microcontroller ce func#ioneaz! la fClk=$0MHz va fi:

BR =

f Clk $ , 4 PS (256 CT )

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

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

Err =

r p unde p

este valoarea programat!, iar

este valoarea teoretic!.

7. Aplica#ii

"83

bit ce exprim! transmisia complet! a caracterului pe linia serial! bit ce exprim! transferul n curs la recep#ie (este utilizat de ISR). bit ce exprim! transferul n curs la transmisie(este utilizat de ISR). Transferul se va efectua semi-duplex, cu 8 bi#i/caracter, un bit de start "i unul de stop. Structura byte-ului de stare este cea de mai jos: SI_STARE T Unde: END are semnifica#ia de sfr"it transmisie sau recep#ie byte C2,C$,C0 sunt bi#ii utiliza#i pentru contorul de bi#i, transmi"i sau recep#iona#i Astfel, la transmisie vom face urm!toarele: Transfer!m la loca#ia CHR_TRS octetul de transmis "i set!m flag-ul INT_TRS. Reset!m linia TxD (respectiv bitul corespunz!tor ei, adic! RB$) semnaliznd bitul de start (Break pentru transmisie). Set!m bitul T, ce exprim! ocuparea CPU (Central Processing Unit) cu transferul serial. Ini#iem ceasul de transmisie, adic! program!m TMR0 n scopul gener!rii ntreruperilor Vom nscrie bitul corespunz!tor la fiecare ntrerupere pn! la transferul complet al celor 8 bi#i. Set!m linia RB$, cel pu#in pentru o perioad! de ceas, (bitul de stop), set!m bitul TI ce exprim! ncheierea transmisiei caracterului (buffer de transmisie gol) pentru programul principal "i reset!m bitul T elibernd astfel UC de task-ul de serializare a informa#iilor. La apari#ia schimb!rii de stare pe bitul RB0, set!m bitul ce consemneaz! ocuparea interfe#ei seriale, respectiv bitul R.(recep#ie n curs). Pe fiecare ntrerupere de timp vom citi (e"antiona) linia serial! la recep#ie RB0 "i vom scrie n Carry Flag bitul citit "i vom deplasa la dreapta prin carry byte-l CHR_REC ce va con#ine ceea ce recept!m. Dup! 8 cicli de temporizare, vom seta bitul RI, ce specific! pentru programul principal, recep#ia complet! a caracterului (caracter recep#ionat disponibil), resetnd n acela"i timp bitul CHR_REC. Va fi necesar s! invalid!m ntreruperile corespunz!toare canalului 0 temporizator, respectiv TMR0. R TI RI END C2 C" C0

TI R T

La recep#ie este necesar s! parcurgem urm!toarele etape:

Avnd n vedere structura de registre ale procesorului, precum "i faptul c! punctul de intrare n rutina de servire a ntreruperilor este unic, va trebui ca aceasta

"84

MICROCONTROLLERE

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

7. Aplica#ii

"85

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

"86

MICROCONTROLLERE

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

7. Aplica#ii

"87

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

"88

MICROCONTROLLERE

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

7. Aplica#ii

"89

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

"90

MICROCONTROLLERE

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

7. Aplica#ii

"9"

SI_STARE DB 0x00 ;Vectorul stare corespunz!tor UART CHR_REC DB 0x00 ;Loca#ie ce re#ine caracterul recep#ionat CHR_TRS DB 0x00 ;Loca#ie ce re#ine caracterul de transmis TEMP_WORK DB 0x00 ;Loca#ie ce memoreaz! W pe durata ISR TEMP_WORK" DB 0x00 ;Loca#ie ce memoreaz! STATUS register pe durata ISR INT_TRS DB 0x00 ;Loca#ia memoreaz! n bitul 0 cererea de transmisie a unui caracter. CT EQU 0x7E ;Constanta de timp coresp. ceasului UART n text toate etichetele la care se face referire sunt scrise cu caractere ngro"ate. Pentru a avea imaginea modului n care assembler-ul plaseaz! codul nostru, d!m pe CD "i partea referitoare la locatare din listing-ul rezultat n urma asambl!rii. Aceast! list! este dat! cu titlu informativ pentru a putea sesiza modalitatea n care sunt asignate automat loca#iile de memorie, variabilelor. n final vom face o scurt! analiz! comparativ! a solu#iilor avute n vedere la implementarea aplica#iei. Criteriul
Procesorul: Arhitectura Setul de instruc#iuni Registre de uz general Memoria intern! Num!r intr!ri/ie"iri: Linii de comand! "i control Canale temporizatoare WatchDog UART Sistemul de ntreruperi Alte facilit!#i speciale Tensiune alimentare Programarea controller-ului Memoria de program Facilit!#i energetice

Atmel AT89C205$
Von Neumann CISC5 4 bancuri a cte 8 registre fiecare $28 bytes $5 I/O 2 (4 moduri de programare) $ canal (8 bi#i) 256 valori $ canal sincron/asincron Vectorizat6 Dispune de 2 intr!ri analogice7 2,7 la 5 V Flash Reprogramabil 2 Kbytes (CISC) Low Power "i IDLE mode8

PIC$6F84
Harvard RISC9 2 Bancuri File Registres a cte 68 de bytes fiecare Este organizat! sub forma "File Registrers" $3 I/O $ (2 moduri de programare) $ canal (8 bi#i) $6 valori NU Cu unic! adres! de servire NU 2 la 6 V Programare flash tip ICSP $0 $024 x $4 bi#i (RISC) PowerDown$$ "i IDLE mode

5 6

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

"92
Facilit&%i 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 dezvoltare"2: Strategia firmei: Timpul preconizat pentru dezvoltarea aplica%iei

MICROCONTROLLERE

A5$, SAM5$, etc. Extrem de multe variante de asambloare, Compilatoare C5$ "i altele L5$ DA DA NU 7,24 DM (Hoepping Elektronik) DA Nu avem date precise Nu avem date precise DA NU NU

MASM macro-asamblor, integrabil n mediul MPLAB DA MPLINK DA DA DA (MPLAB) 8,03 DM (ASA Micros) DA Nu avem date precise Nu avem date precise DA NU NU

Ce concluzii putem trage n urma analizei acestui tablou cu caracteristici ale celor dou! procesoare "i nu numai? Putem stabili factori de pondere corespunz!tori fiec!rui parametru (ace"ti factori trebuie preciza#i de c!tre fiecare proiectant n parte) "i putem calcula coeficientul de eficien#! al implement!rii produsului. Un aspect deseori esen#ial l constituie preg!tirea proiectan#ilor, experien#a lor anterioar! "i timpul n care se preconizeaz! dezvoltarea aplica#iei. Rubricile la care nu se poate r!spunde de la nceput (vezi cele ce con#in NU) pot influen#a substan#ial eficien#a deciziei, c!ci, spre exemplu, preg!tirea unui specialist n domeniu presupune timp "i bani suplimentari pe care nu ntotdeauna i avem. (vezi rubrica strategia firmei).

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

7. Aplica#ii

"93

Alte informa#ii privind microcontroller-ele familiei PIC de la Microchip g!si#i la urm!toarele adrese: Don McKenzie: http://www.dontronics.com/dtlinks.html Adam Davis: http://www.ubasics.com/adam/pic/piclinks.shtml Sam Powell: http://come.to/thepicarchive Brian Lane: http://www.nexuscomputing.com/~picarchive/ Richard Spencer: http://engmtasd.derby.ac.uk Michael Covington: ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/ Steve Walz: ftp://ftp.armory.com/pub/user/rstevew/PIC/DaveTait/ http://www.tinaja.com/pic500.html Iar pentru familia I805$ la adresele: www.8052.com www.intel.com www.atmel.com www.philips.com www.hitachi.com

7.2

IMPLEMENTAREA INTERFE!ELOR LA PROCES

n acest paragraf vom aborda cteva aplica#ii care presupun folosirea convertoarelor analog-digitale "i a celor digital-analoge n aplica#ii de comand! "i control. n acest sens vom exemplifica interfa#area sistemelor cu urm!toarele tipuri de convertoare: $. 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.

"94

MICROCONTROLLERE

7."." Convertoare A/D controlabile serial


Pentru primul exemplu, am ales un convertor reprezentativ pentru domeniul achizi#iei de semnale din cadrul instala#iilor industriale, "i anume: ADS7822, convertor cu regsitru de aproxima#ii succesive a c!rui schem! o d!m n figura 7.$0.

Figura 7. "0 Schema bloc a circuitului ADS7822 convertor analog - digital cu registru de aproxima#ii succesive

Convertorul prezint! un amplificator de instrumenta#ie pe intrare la care ambele intr!ri sunt accesibile din exterior. Registrul cu aproxima#ii succesive SAR (Succesive Aproximation Register), controlat de c!tre semnalele de interfa#are CS#/SHDN declan"eaz! "i apoi controleaz! procesul de conversie, aplicnd succesiv combina#iile ce implementeaz! metoda diviz!rii intervalului n aflarea valorii digitale corespunz!toare semnalului de pe intrare. Domeniul de m!surare este setat de c!tre valoarea tensiunii sursei de referin#! externe ce aplic! tensiunea stabilizat! pe intrarea VREF. Comparatorul ntoarce la fiecare tact al convertorului rezultatul compara#iei "i astfel mpreun! cu logica de control realizeaz! trecerea la testarea urm!torului bit. Convertorul va realiza n $2 ciclii testarea fiec!rui bit de informa#ie sincron cu semnalul de ceas DCLOCK, ncepnd cu al $,5-lea impuls de ceas (perioad! de e"antionare, caracteristic! acestui convertor) dup! care informa#ia va fi disponibil! bit de bit ncepnd cu bitul cel mai semnificativ pe ie"irea DOUT a circuitului. L!#imea implusurilor (durata acestora), nu trebuie s! fie mai mic! de 400ns, circuitul acceptnd astfel frecven#e de ceas cuprinse ntre

7. Aplica#ii

"95

$0KHz "i $,2 MHz, ceea ce corespunde unor rate de e"antionare a semnalului analogic cuprinse ntre:625 Hz "i respectiv 75kHz. Impulsurile corespunz!toare de ceas sunt oferite de conexiunile pe care le vom realiza ntre convertor "i microcontroller. Am ales tot microcontroller-ul Atmel, avnd n vedere simplitatea schemei ce implementeaz! aplica#ia "i faptul c! acesta prezint! dou! canale num!r!toare temporizatoare ceea ce favorizeaz! aplica#ia. Timing-ul este prezentat n figura $$, iar schema de conectare n figura $2.

Figura 7. "" Timing-ul (e"alonarea n timp) semnalelor de comand! pentru circuitul ADS7822

RxD

P".5

CS#

P".4 DCLOCK P".7 DOUT

AT89C205"

ADS7822

TxD

Figura 7. "2 Structura sistemului de achizi#ie schem! simplificat!

Vom utiliza canalul $ al circuitului drept generator al ratei de transmisie serial! a datelor, iar canalul 0 drept generator al frecven#ei de ceas necesar! convertorului A/D. Formarea semnalului DCLOCK va fi realizat! soft, prin generarea ratei de achizi#ie, programnd corespunz!tor canalul respectiv. Aici este momentul s! facem cteva comentarii.

"96

MICROCONTROLLERE

Dac! microcontroller-ul func#ioneaz! la o frecven#! de ceas de 24MHz, teoretic frecven#a maxim! pentru semnalul DCLOCK ar trebui s! fie de $MHz, dar va trebui s! #inem cont de alte cteva am!nunte, "i anume: ntrzierea datorat! procesului de servire a ntreruperilor, care n acest care este de minimum 7 s. De ntrzierea datorat! execu#iei instruc#iunilor rutinei de servire a ntreruperilor De ntrzierile (care pot fi aleatorii) datorate proceselor de schimb de informa#ie concurente procesului de achizi#ie, cum ar fi procesul de transfer serial al datelor c!tre sistemul ierarhic superior, alte procese ce concur! la buna func#ionare a sistemului, etc.

n final, vom specifica cum se calculeaz! frecven#a maxim! de ceas corespunz!toare achizi#iei de semnal. n figura 7.$3 d!m structura principalelor fluxuri de informa#ie n cadrul sistemului propus. Proiectarea programelor n cazul astfel specificat, implic!:
START

INI&IA LIZA REA SISTEM ULUI A " teapt !

ntre rupere

S-A PRODUS UN EVENIM ENT

ntre rupere

Servire ntrerupere corespunz!toare UART, respectiv RI sau TI

Servire ntrerupere corespunz!toare canalului T0 Implementeaz! achizi# ia

Figura 7. "3 Structura soft-ului aferent sistemului

Ini#ializarea de sistem, ceea ce presupune: Resetarea memoriei sistemului, Setarea valorilor corespunz!toare frecven#ei de achizi#ie, Scrierea rutinelor de servire a ntreruperilor Implementarea transferului semnalului de ceas c!tre convertorul A/D Implementarea achizi#iei datelor de la convertor

7. Aplica#ii

"97

Implementarea buffer-elor de intrare/ie"ire Implementarea transferului serial al datelor, la frecven#a "i n condi#iile dorite. Scrierea programului principal, care are ca principal rol, rolul de a a"tepta producerea unor evenimente.

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

"98

MICROCONTROLLERE

;Rencarc! constantele de timp "i redecla"eaz! temporizarea corespunz!toare ("2) CLR IE.$ ;Reseteaz! flag-ul de ntrerupere corespunz!tor canalului 0 ("2) SETB P$.5 ("2) CLR P$.5 ;Activeaz! CS# pentru accesul la convertor ("2) CLR P$.4 ;Reseteaz! DCLOCK pentru $ ms. Formeaz! DCLOCK =0 ("2) SETB P$.5 ;Formeaz! DCLOCK =$ ("2) CLR P$.5 ;Formeaza DCLOCK =0 ;S-a ncheiat perioada de e"antionare pentru convertor. Urmeaz! citirea datelor ;Aceasta presupune urm!toarele: DCLOCK=$, Incrementeaz! contor,DCLOCK=0, ;Cite"te data. Num!rul de cicluri este de $3 avnd n vedere c! prima valoare citit! ;de la CAD este 0 ("2) MOV R0,#8 ;Initializez contor ("2) MOV A,#00H;Resetez ACC LOOP_MSB: "80/"2="5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus ("2) SETB P$.4 ;Formeaza DCLOCK =$ ("2) CLR P$.4 ;Formeaza DCLOCK =0 (24) JNB P$.7,CLR_BIT8 ("2) SETB ACC.0 CLR_BIT8: ("2) RL A (24) DJNZ R0,LOOP_MSB ("2) MOV DATA_MSB,A ;Salvez bi#ii 4 la $2 achizi#iona#i ("2) MOV R0,#4 ;Ini#ializez contor ("2) MOV A,#00H;Resetez ACC "80/"2=28,5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus LOOP_LSB: ("2) SETB P$.4 ;Formeaza DCLOCK =$ ("2) CLR P$.4 ;Formeaza DCLOCK =0 (24) JNB P$.7,CLR_BIT0 SETB ACC.0 CLR_BIT0: ("2) RL A (24) DJNZ R0,LOOP_LSB ("2) MOV DATA_MSB,A ;Salvez bi#ii 0 la 3 n DATA_LSB ;Am achizi#ionat to#i cei $2 bi#i oferi#i de ADS7822 "80/"2="4,5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus ("2) SETB P$.5 ;Inactivez CS# ;Formez rezultatul conversiei ("2) MOV A,DATA_MSB ("2) SWAP A (24) PUSH ACC

7. Aplica#ii

"99

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

200

MICROCONTROLLERE

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

7. Aplica#ii

20"

7.".2 Interfa%area paralel& a convertoarelor A/D

n acest scop vom utiliza convertorul ADS782$ convertor cu registru de aproxima#ii succesive de $6 bi#i. Cteva date tehnice importante: frecven#a maxim! $00 kHz, domeniul tensiunilor de intrare: 0 la 5 V, poate utiliza att o referin#! de tensiune intern!, ct "i una extern!, poate fi conectat direct la un bus de sistem. Schema bloc a sa este prezentat! n figura 7.$4.

Figura 7. "4 Structura convertorului analog-digital ADS782$, cu ie"ire paralel! de date

Pentru a-l putea conecta, este necesar s! cunoa"tem care este modul de func#ionare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur! citirea rezultatului sau declan"area conversiei, semnalul CS# permite trecerea busului din starea High Impedance ntr-una din st!rile $ sau 0 logic, semnalul BYTE permut! magistralele low/high de ie"ire, iar linia BUSY# semnaleaz! situa#ia n care convertorul se g!se"te n faza de e"antionare "i conversie a semnalului analogic. Pentru a realiza conversia de semnal va trebui s! cunoa"tem care este succesiunea de semnale de comand!. Combina#iile posibile sunt prezentate n tabelul I.

202

MICROCONTROLLERE

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

AT89C205 "

ADS782 "

P $ .0-7

6- $ 3

Figura 7. "5 Schema de conectare

7. Aplica#ii

203

Strategia urmat! va consta n: $. declan"area conversiei prin resetarea liniilor CS# "i R/C# 2. trecerea dup! mai mult de 40 ns a semnalului R/C#n $ logic 3. citirea rezultatului atunci cnd linia BUSY# va trece n $ logic. Pentru implementarea achizi#iei vom putea folosi att unul ct "i cel!lalt dintre controller-e. S! analiz!m avantajele "i dezavantajele acestor implement!ri. Legnd liniile CS#, R/C# "i BYTE la portul 3 al microcontroller-ului nu afect!m func#ionalitatea acestuia c!ci cele dou! canale temporizatoare le vom folosi, unul pentru generarea ratei de e"antionare a semnalului analogic, iar cel!lalt drept generator al frecven#ei de ceas pe linia serial! de date a UART. Liniile portului P$ sunt direct conectate la liniile 6 la $3 ale convertorului. E"alonarea n timp a evolu#iei semnalelor este dat! n figura 7.$6. Semnalul byte permut! pe acela"i grup de 8 linii de ie"ire byte-ul mai semnificativ cu cel mai pu#in semnificativ, func#ie de nivelul logic $, respectiv 0 logic.

Figura 7. "6 E"alonarea n timp a semnalelor de comand! pentru interfa#a ADS782$

Pentru achizi#ia datelor va trebui s! aloc!m resursele disponibile ale microcontroller-ului astfel: $. rutina de servire a ntreruperilor corespunz!toare semnalului BUSY, astfel ca pe frontul pozitiv al acestuia s! se declan"eze rutina de servire. (vezi declan"area se face pe frontul descresc!tor, iar starea de interes la achizi#ie este starea corespunz!toare frontului cresc!tor, deci am introdus un inversor). 2. rutina de start al conversiei A/D rutina de servire corespunz!toare ntreruperilor timer overflow de la canalul 0. 3. vom scrie rutina de servire a ntreruperilor corespunz!toare UART

204

MICROCONTROLLERE

4. vom proiecta rutina de ini#ializare 5. vom scrie programul principal de func#ionare ce cuprinde rutina de analiz! a informa#iilor vehiculate prin UART Programul ce implementeaz! aceast! aplica#ie a considerat urm!torul protocol: Caracterul A reprezint! comanda de achizi#ie necondi#ionat! a datei Caracterul C reprezint! comanda de achizi#ie continu! cu o rata fix! de e"antionare, aprioric stabilit! prin constantele de timp CT_L "i CT_H a datelor Caracterul D reprezint! comanda de transfer a datei achizi#ionate via interfa#a UART. D!m n continuare programul: CT_L CT_H CT_SMOD CT_ST CT_SSCON ;Valori pentru analogic 00H 80H EQU 2$H ; EQU 55H ; EQU 5CH ; constanta de timp necesara la declansarea conversiei semnalului EQU EQU

DSEG BSEG RX BIT $0H ;Specifica receptia unui caracter TX BIT $$H ;Specifica necesitatea transferului DATA_LSB DE BIT $2H ;Specifica existenta unei date achizitionate DATA_UART DATA 30H ;Locatie data receptionata pe UART DATA_LSB DATA 3$H ;Locatie LSB data achizitionata DATA_MSB DATA 32H ;Locatie MSB data achizitionata CSEG ;ISR_EXT0 Rutina de servire a intreruperilor corespunzatoare achizitiei de la CAD ORG 0H JMP MAIN JMP ISR_EXT0 ORG 0BH JMP ISR_T0 ORG 23H JMP ISR_SI ISR_EXT0: PUSH PSW ;Salveaza starea UC SETB PSW.3 ;Seteaza bancul $ de regsitrii generali, ca registrii "tinta" MOV DATA_MSB,P$ ;Salveaza partea mai semnificativa a datei

7. Aplica#ii

205

SETB P3.7 >MSB datei

;Comanda switch-area bytes: LSB <-

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

206

MICROCONTROLLERE

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

7. Aplica#ii

207

RET END Locatarea variabilelor "i a registrelor utilizate de c!tre aplica#ie este dat! pe CD.

7.".3 Convertoare A/D complexe


Sistemele de achizi#ie ce cuprind convertoare analog-digitale complexe sunt utilizate n aplica#ii cum ar fi achizi#ia semnalelor n tensometrie, n domeniul medical, n domeniile ce necesit! frecven#e de e"antionare relativ reduse (de maximum c#iva KHz) "i rezolu#ii ridicate (de la $8 la 24 de bi#i). Dintre realiz!rile tehnologice actuale ne vom opri asupra circuitului ADS$2$$, cap de serie al convertoarelor de nalt! rezolu#ie al firmei BurrBrown/Texas Instruments. Structura acestuia este prezentat! n figura 7.$7.

Figura 7. "7 Structura convertorului sigma/delta ADS$2$0

Circuitul ADS$2$0/$2$$ este un convertor analog-digital cu un domeniul de intrare deosebit de larg. Ofer! o rezolu#ie de 24 de bi#i, cu facilitatea de autocalibrare "i de multiplexare intern! diferen#ial! pentru 4 canale distincte n cazul ADS$2$$. Circuitul posed! un amplificator cu amplificare programabil! digital (PGA), un modulator sigma-delta de ordinul 2, un filtru digital programabil care

208

MICROCONTROLLERE

include un microcontroller ce dispune de regi"trii de instruc#iuni, comenzi, precum "i de regi"trii de date, offset "i calibrare la cap!t de scal!. Referin#a de tensiune este intern! "i setabil! digital cu valori de pn! la 2,5V. Func#ionarea detaliat! a convertorului este prezentat! n foaia sa de catalog. (www.burr-brown.com) unde sunt detaliate "i modurile sale de func#ionare. Dou! sunt tipice: master mode (MODE=$) -caz n care convertorul are ini#iativa transferului datelor achizi#ionate imediat dup! faza de ini#ializare "i slavemode, (MODE=0)caz n care ini#iativa "i frecevn#a de ceas sunt oferite de c!tre controller-ul magistralei de conexiune. n figura 7.$8 d!m diagramele de timp pentru cazul n care circuitul este conectat ca element slave (pinul MODE este plasat pe 0 logic) pe bus.

Figura 7. "8 Diagramele de timp corespunz!toare interfe#ei seriale

Schema de conectare aleas! permite realizarea tuturor modurilor de func#ionare pentru convertor, respectiv att a modului "slave" ct "i a modului "master". De asemenea prin controlul liniei CS# este posibil! inserarea mai multor convertoare pe acela"i bus "i adresarea acestora. n figura 7.$9 este prezentat! aceast! schem!.

Figura 7. "9 Schema electric! simplificat! a interfe#ei CAD-ADS$2$0 microcontroller I805$

7. Aplica#ii

209

Pentru a putea scrie programele de ini#ializare "i cele de achizi#ie este necesar s! cunoa"tem structura regi"trilor interni ai convertorului. Registrul de instruc#iuni este cel prin intermediul c!ruia se controleaz! transferul informa#iilor "i are structura: INSTR R/W# MB" MB0 0 A3 A2 A" A0

Bitul R/W# specific! tipul opera#iei: de citire/scriere respectiv $/0 logic. Bi#ii MB$ "i MB2 codific! num!rul de octe#i de comand! pe care circuitul i va recep#iona, via interfa#a serial!: combina#ia 00 corespunde unui octet, 0$ la doi octe#i, $0 la 3 octe#i "i $$ la 4 octe#i transmi"i succesiv. Bi#ii A3,A2,A$,A0 adreseaz! regi"trii interni ai convertorului, conform tabelului al!turat.

Circuitul este astfel conceput nct dup! fiecare sesiune de scriere adreseaz! implicit, din nou, regsitrul de instruc#iuni. Odat! decla"at!, spre exemplu achizi#ia datelor, acestea vor fi emise autonom, func#ie de set!rile stabilite. Registrele de comenzi permit setarea parametrilor de achizi#ie pentru convertorul analog-digital. ntre ace"tia amintim: rata de e"antionare n concordan#! cu frecven#a de decimare "i c"tigul amplificatorului de pe intrare ob#inute pe convertor, canalul selectat, formatul datelor, sursa pentru tensiunea de referin#! "i modul de achizi#ie: unipolar sau bipolar, ordinea de emisie a datelor ncepnd cu LSB (Last Signifiant Bit) sau cu MSB (Most Signifiant Bit). Setarea modurilor de func#ionarese face conform structurii de bi#i de comand! urm!tori.

2"0

MICROCONTROLLERE

Byte 3 (MSB)
BIAS O = Off REF " = On DF " =comp 2 U/B# 0= Bipolar BD 0= MSB MSB 0=MSB SDL 0=SDIO DRDY/ DSYNC# 0

Valorile trecute pe a doua linie sunt cele implicite. Pentru valoarea 0 a bitului BIAS, tensiunea de referin#! este de 2,5V, iar pentru valoarea $ ea este $,33*2,5V adic! aproximativ 3,3V. Un $ logic pe bitul REF asigur! utilizarea sursei interne de referin#!, iar 0 aduce n starea de mare impedan#! aceast! surs!, permitnd utilizarea unei surse de referin#! externe. DF exprim! formatul datelor, 0 implic! formatul datelor n complement fa#! de doi +FSR=7FFFFFH, 0=000000H, iar -FSR=800000H (FSR este abrevierea scalei complete "Full Scale Range"). U/B# exprim! cnd este 0 achizi#ia bipolar! a datelor, iar cnd este $ exprim! achizi#ia unipolar! a acestora. BD exprim! ordinea de transfer a bytes, setnd bitul ordinea este cresc!toare de la LSB c!tre MSB "i invers dac!-l reset!m. MSB exprim! cine este primul bit emis n cadrul fiec!rui byte, $ implic! transferul nti al bitului cel mai nesemnificativ, iar 0 implic! transferul nti al bitului cel mai semnificativ. SDL comand! utilizarea a unei linii bidirec#ionale seriale (SDIO) dac! este resetat, respectiv a dou! linii seriale dac! este setat (SDIO pentru comenzi "i SOUOT pentru date) DRDY# exprim! resetat prezen#a datelor (Data Ready), iar setat exprim! date invalide. MD2 MD" MD0 G2 G" G0 CH" CH0

Byte 2

Acest byte seteaz!, modurile de func#ionare, codate binar de la 0 la 7, valorile c"tigului "i selecteaz! canalul de intrare pentru achizi#ia de semnal. Modurile de func#ionare codate binar sunt n ordine, ncepnd de la 000H urm!toarele: $. Normal, 2. "Self calibration" calibrare automat!, 3. Calibrare de offset, 4. Calibrare la cap!t de scal!, 5. "Pseudo-calibrare", 6. Calibrare n fundal "background calibration", 7. "Sleep" "i 8. Rezervat -neutilizat.

7. Aplica#ii

2""

Byte " SF2 SF" SF0 DR"2 DR"" DR"0 DR9 DR8

SF2, SF$, SF0 selecteaz! una dintre valorile modului turbo de func#ioare a circuitului, iar valorile DR$2 la DR0 seteaz! frecven#a de decimare pentru filtrul digital al convertorului. Byte 0 DR7 DR6 DR5 DR4 DR3 DR2 DR" DR0

n modul de conectare ce utilizeaz! liniile SDIO "i SDOUT convertorul poate fi controlat dinamic, respectiv poate lucra n modul de citire continu!, admitnd n acela"i timp comenzi prin intermediul liniei SDIO "i genernd date via linia SDOUT. (vezi documenta#ia firmei Burr - Brown, memorat! pe CD) Implementarea unui ciclu descriere a comenzilor n modul slave presupune ndeplinirea urm!torilor pa"i: $. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic 2. A"teapt! ca CS# s! treac! la rndul s!u n zero logic 3. Genereaz! 8 cicluri de ceas pentru a trece n instruction register data de configurare via SDIO 4. Genereaz! n ciclii de ceas de transmisie pentru nscrierea regi"trilor #int! ai comenzilor (vezi documenta#ia la ADS$2$0 ads$2$0.pdf de la Burr-Brown) 5. Ads$2$0 pune pe $ logic DRDY Repet! pa"ii 3 la 5 pn! la transmiterea tuturor cuvintelor de comand! c!tre ADS$2$0, dup! care intr! n ciclul/ciclurile de citire a datelor, ceea ce presupune: $. 2. 3. 4. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic A"teapt! ca CS# s! treac! la rndul s!u 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 instruc#iuni via SDIO 5. Dac! utiliz!m SDIO drept linie bidirec#ional! vom urm!rii evolu#ia acesteia n continuare, dac! nu, atunci linia SDIO trece n starea de mare impedan#! 6. Microcontroller-ul emite n ciclii de ceas (n multiplu de 8) "i transmite/recep#ioneaz! informa#ia din registrul specificat prin instruc#iunea de la punctul 4. Recep#ia acestor bi#i se face pe linia SDOUT sau SDIO dup! caz. 7. SDOUT sau SDIO intr! n starea de mare impedan#!, dup! ce a transmis informa#ia comandat!

2"2

MICROCONTROLLERE

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

7. Aplica#ii

2"3

CALL SERIAL_IN MOV @R0,A INC R0 DJNZ R$,LOOP_3 ;ncheie un ciclu complet Ini#ializare comand! "i achizi#ie data convertit! SERIAL_OUT: CLR P$.3 MOV R7,#08H RL A RL A LOOP_OUT: JB ACC.2,SET_OUT CLR P$.2 JMP CLOCK_OUT SET_OUT: SETB P$.2 CLOCK_OUT: SETB P$.3 CRL P$.3 ;Genereaz! semnalul SCLK RL A DJNZ R7,LOOP_OUT ;Transfer! un octet c!tre CAD RET SERIAL_IN: CLR P$.3 MOV R7,#08H LOOP_IN: JB P$.$,SET_IN CLR ACC.0 JMP CLOCK_IN SET_IN: SETB ACC.0 CLOCK_IN: SETB P$.3 CRL P$.3 RL A DJNZ R7,LOOP_IN ;Recepteaz! un octet de la CAD RET

7.".4 Convertor D/A controlabil serial


Aplica#ia pe care o vom descrie n continuare se refer! la comanda unui convertor digital - analog cu intrare serial!, cum ar fi cele utilizate n cadrul aparaturii audio de nalt! performan#!. Vom exemplifica aceasta prin circuitul PCM56 convertor digital-analog de $6 bi#i. Structura convertorului este dat! n figura 7.20. Cteva dintre caracteristicile convertorului sunt: domeniul dinamic de peste 96 dB FSR, nu necesit! componente externe, $6 bi#i rezolu#ie, eroare liniar! sub 0,00$%, timp de stabilire $,5 ms, opereaz! cu tensiuni ntre 5V "i $2V. LE

2"4

MICROCONTROLLERE

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

"Latch Enable", l!c!tuie"te informa#ia serial receptat! "i o aplic! convertorului la momentul valid!rii l!c!tuirii.

Data este intrarea de "Date", ce sunt transmise n format complement fa#! de 2, sincron cu semnalul de ceas "Clock". Am!nunte privind fronturile "i sincronizarea datelor "i timming-ul corespunz!tor transferului unei date sunt prezentate n figura 7.2$. Se constat! c! datele sunt transmise ncepnd cu cel mai semnificativ octet, frontul negativ realizeaz! deplasarea acestora la dreapta bit de

Figura 7. 2" 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 $ logic cel pu#in un ciclu de ceas, ea plasndu-se pe durata transferului serial al datelor pe 0 logic. La sfr"itul transferului ea va fi trecut! n $ logic pentru cel pu#in $,5 perioade de ceas.

7. Aplica#ii

2"5

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

2"6

MICROCONTROLLERE

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

7. Aplica#ii

2"7

MOV R0,#7FH LP: MOV @R0,#00H DJNZ R0,LP ;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului MOV SP,70H ;Setez adresa pentru stiva sistemului CALL INIT ;Realizez initializarile canalelor temporizatoare si a interfetei seriale MOV IE,#92H ;Validez ntreruperile corespunz!toare canalului 0 temporizator "i UART LOOP: ;Se va particulariza programul func#ie de protocolul dorit "i func#ie de ;particularit!#ile sistemului JNB REC,LOOP ;Testare caracter recep#ionat "i comanda corespunzatoare codului asignat ; ................ CLR REC ;Reancla"are analiz! a unui eventual nou caracter recep#ionat via UART JMP LOOP INIT: MOV TMOD,CT_TMOD MOV TCON,CT_TCON MOV TL0,#CT_LOW0 MOV TH0,#CT_HIGH0 MOV TL$,#CT_LOW$ SETB 0D7H ;Dublez rata de transfer serial a informa#iilor =>PCON.7=SCON=$ RET END

7.".5 Programarea unui sistem de dozare gravimetric& dotat cu microcontroller


Aplica#ia pe care o prezent!m reprezint! un cntar electronic necesar dozarii materiilor prime pulverulente, bazat pe utilizarea unei balan#e electronice ce prezint! o doz! tensometric! compensat! complet cu ajutorul c!reia se determin! greutatea ansamblului cntar "i pulbere (figura 7.22). Sistemul electronic de dozare a materiilor prime pulverulente este format din dou! subsisteme principale: $. Subsistemul mecanic, sub forma unui cntar diferen#ial de precizie

2"8

MICROCONTROLLERE

2. Subsistemul electronic de m!surare a tensiunii ap!rute n reazemul c!tre sistemul de referin#! fix format din cadrul cntarului. Principiul de func#ionare al cntarului dozator este acela de transformare a greut!#ii corespunz!toare materiilor prime pulverulente n semnal electric prin

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 PR62$$). Acesta ofer! un semnal de tensiune n diagonala unei pun#i tensometrice rezistive care este alimentat! de la o surs! de tensiune de referin#!. Sensibilitatea senzorului este de 2mV/V, rezultnd la o nc!rcare egal! cu cea maxim admis!, "i cu o tensiune de alimentare a pun#ii de 5V rezult! o diferen#! maxim! de tensiune de $0mV pe diagonala pun#ii de m!surare. Prelucrarea semnalului analogic de la captorul tensometric este realizat! n dou! trepte de amplificare "i filtrare. Pentru semnalul amplificat, - domeniul de varia#ie este 0-$0V el fiind aplicat unui convertor analog-digital ADS7805 (analog convertorului ADS782$), de $6 bi#i cel converte"te n semnal digital. Sistemul digital este coordonat de c!tre un microcontroller de 8 bi#i Philips PCB80C552 (analog unuia Intel 805$), ce dispune de 40 de linii digitale de intrare/ie"ire, la care se adaug! 3 canale num!r!toare/temporizatoare, precum "i un convertor analog/digital de $0 bi#i intern precum "i dou! ie"iri PWM (Pulse Width Modulation). Microcontroller-ul posed! dou! interfe#e seriale, una standard UART

7. Aplica#ii

2"9

(Universal Asyncronus Receiver Transmiter), "i una I2C care asigur! o rat! de transfer mai bun! de 4Mbi#i/secund!. Memoria intern! a controller-ului este de 256 de bytes la care se adaug! regi"trii de func#ii speciale (Special Function Registers). Sistemul dispune de dou! afi"oare, unul cu LED-uri cu "apte segmente, necesar afi"!rii greut!#ii m!surate, iar al doilea cu LCD-uri 2x$6 caractere necesar pentru ghidarea prin intermediul mesajelor a operatorului, precum "i o tastatur! cu $2 taste multifunc#ionale. Memoria sistemului este de 64Kbytes, dintre care 32Kbytes EPROM "i 32Kbytes SRAM. Subsistemul mecanic asigur! transmiterea greut!#ii materiilor prime pulverulente c!tre captorul tensometric prin demultiplicarea efortului pe acesta. Factorul de demultiplicare al cntarului are expresia:

=a

$ , unde: 2( a + b ) +

a,b "i sunt dimensiuni ale bra#elor cntarului diferen#ial. Pentru dimensiunile de a=78 mm, b=300 mm "i =$50 mm, factorul k va fi: k=0,08, Subsistemul electronic de m!surare include captorul de for#! ce traduce reac#iunea normal! aplicat! asupra sa n semnal electric de tensiune. Iat! principalele caracteristici ale elementelor subsistemului: Captorul de for#!: clas! de precizie: D$, respectiv 0,05% eroare integral! de m!surare, (aceasta include toate erorile cea de zero, de neliniaritate, cea corespunz!toare varia#iei temperaturii, etc). Rezisten#a de intrare a captorului $200 , rezisten#a de ie"ire 1200 , rezisten#a de izola#ie a m!rcilor captorului n raport cu masa acestuia mai bun! 5000M. Tensiunea de alimentare a pun#ii tensometrice este de 5V cc, ob#inu#i de la o surs! de tensiune REF02 (Burr Brown) avnd o stabilitate excelent! n domeniul de temperaturi de la - $0 la +85C. Preamplificatorul de semnal este implementat cu ajutorul unui circuit INA$$4(Burr Brown), amplificator de m!surare integrat ce nu necesit! dect o singur! rezisten#! extern! de setare a amplific!rii. Dintre caracteristicile sale amintim: domeniu de tensiuni de alimentare: 2,25V la $8V, tensiune maxim! de offset 50V, drift maxim 0,25V/C, CMRR mai bun de $$5dB, curent maxim de polarizare pe intr!ri 2nA, domeniu temperaturilor de func#ionare ntre -40 "i +85C, este protejat la scurtcircuit pe ie"ire, "i la supratensiuni pe intrare. Circuitului i s-a setat o amplificare de $000. Amplificatorul de semnal: este implementat cu acela"i tip de amplificator ca "i preamplificatorul, amplificarea acestuia fiind de $,$3$6. Convertorul analog-digital ADS7805, cu urm!toarele caracteristici: $6 bi#i rezolu#ie, eroarea maxim! integral! 2-3 LSB (Last Signifiant Bit), f!r! coduri lips!, necesit! doar tensiunea de 5V pe alimentare, domeniul de intrare $0V, codarea n format complement fa#! de 2, rata de e"antionare maxim! $00 kHz, ie"irea

220

MICROCONTROLLERE

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

$3

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

7. Aplica#ii

22"

Transfer serial n format binar a greut!#ii m!surate n fazele de dozare "i golire a cntarului (formatul datelor: asincron, rata 9600 Bauds, 8 bi#i/cuvnt, f!r! paritate, 2 bi#i de stop)

Sistemul permite reglarea anumitor parametrii ai s!i, precum: cantitatea dozat!, temporiz!rile corespunz!toare diferitelor faze ale procesului de dozare. Utiliznd sistemul de ntreruperi al procesorului putem declan"a procesul de conversie la intervale de timp prestabilite pentru convertorul analog-digital de semnal asigurnd e"antionarea uniform! a semnalului de greutate. Programul complet de func#ionare al sistemului este nscris pe CD unde este dat! "i schema sistemului utilizat pentru aceast! aplica#ie. n continuare prezent!m cteva rutine care implementeaz! comanda unui afi"or LCD, comanda unui afi"or realizat cu afi"oare cu cte 7 segmente (5 afi"oare), rutina de nmul#ire a dou! cifre de cte $6 bi#i fiecare "i explic!m modul de utilizare a canalului "Watch Dog" pentru a evita ag!#area sistemului n cazul apari#iei unor zgomote parazite la nivelul magistralei de sistem. Scrierea c!tre un modul de afi"are LCD (LTN2$$, conectat la un port paralel de adres! $00H), implic! realizarea unor ntrzieri necesare procesului de transfer al datelor "i comenzilor. Implementarea acestora s-a realizat soft (ntrziere prin execu#ia de instruc#iuni), c!ci pe de-o parte nu este critic! durata temporizat!, iar pe de alt! parte n cadrul aplica#iei canalele temporizatoare/num!r!toare au fost dedicate altor procese ce necesit! o precizie mai ridicat!. Am utilizat MACRO-uri pentru scrierea acestor programe. n cadrul rutinelor de ntrziere am avut grij! s! reanclan"!m periodic temporizatorul "Watch Dog", pentru a evita generarea unui RESET al sistemului. ;Rutine pentru afisarea pe LCD EXTERN WAIT WAITVL MACRO ;Macro ce realizeaz! o ntrziere de LOCAL B_0,B_$,B_2 ;Etichete definite local n cadrul MACRO ("2) ;Ini#ializeaz! R5 cu valoarea de ciclare 32 MOV R5,#20H ("2) ;Ini#ializeaz! R6 cu valoarea de ciclare 255 B_$: MOV R6,#0FFH ("2) ;Ini#ializeaz! 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,#$0H("2) MOV T3,#00H ("2) (24) ;Decrementeaz! contoare pe rnd DJNZ R5,B_$ ENDM n partea dreapt! a mnemonicelor s-au men#ionat num!rul de perioade de ceas necesare execu#iei instuc#iunilor. Considernd frecven#a de ceas egal! cu $2 MHz, vom ob#ine temporizarea de: 4,$92secunde. Men#ion!m c! regi"trii R5, R6 "i R7 sunt utiliza#i drept contoare WAITL MACRO

222

MICROCONTROLLERE

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

7. Aplica#ii

223

WAIT MOV R2,#$0H;ncarc! contor caractere ce vor fi afi"ate pe r-dul $ MOV DPTR,#$0$H ;ncarc! adresa de scriere c!tre afi"orul LCD MOV R3,DPL MOV R4,DPH MOV DPTR,#MESAJ$ ;ncarc! pointer c!tre mesajul de afi"at MOV R0,DPL MOV R$,DPH WAITL CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.) WAITL MOV DPTR,#$00H MOV A,#0C0H MOVX @DPTR,A; Comand! saltul la rndul 2 al afi"orului WAIT MOV DPTR,#$0$H MOV R3,DPL MOV R4,DPH MOV DPTR,#MESAJ2 ;ncarc! pointer c!tre mesajul de afi"at MOV R0,DPL MOV R$,DPH MOV R2,#$0H ;Contor de caractere Rnd 2 WAITL CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.) WAITL ENDM n continuare prezent!m rutina de nmul#ire ntreag! a dou! valori memorate n loca#iile OP$ "i OP2 (loca#ii de $6 bi#i fiecare). n loca#iile MREZ$, MREZ2, MREZ3 "i MREZ4 (8 bi#i fiecare), n ordinea cresc!toare a rangului, vom ob#ine rezultatul nmul#irii. Rutina va genera produsul celor doi operanzi, iar flagul C va fi afectat la dep!"irea buffer-ului rezultat. Notnd cu N$H "i N$L, respectiv cu N2H "i N2L octe#ii corespunz!tori celor dou! numere, acestea pot fi scrise astfel: N$=256*N$H+N$L, iar N2=256*N2H+N2L. (N$L=LOW($),N2L=LOW(N2), iar N$H=HIGH(N$) N2L=HIGH(N2)). nmul#indu-le ob#inem: N$*N2=65536*N$H*N2H+256*(N$H*N2L+N2H*N$L)+N$L*N2L. Execu#ia acestei nmul#iri se va face ncepnd de la dreapta spre stnga, #inndu-se cont de eventualul bit de transport ce poate apare la execu#ia opera#iilor. M$6: MOV B,OP$L ;ncarc! n B pe N$L MOV A,OP2L ;ncarc! n A pe N2L MUL AB ;Execut! N$L*N2L

224

MICROCONTROLLERE

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

7. Aplica#ii

225

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

BIT_6 BIT_7 BUF_AF:

226

MICROCONTROLLERE

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

7. Aplica#ii

227

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

228

MICROCONTROLLERE

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

$4

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

7. Aplica#ii

229

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

Este necesar! testarea redundant! a acestei st!ri c!ci apari#ia semnalelor parazite are caracter aleator $7 Aceast! stare este tratat! deosebit de celelalte, c!ci este necesar! o cnt!rire distinct! a pulberii aflate n bunc!rul cntarului dozator, iar pe de alt! parte trebuie analizat! valoarea curent! a greut!#ii acesteia n raport cu cea prescris! "i trebuiesc luate acele decizii care se impun, inclusiv generarea semnalelor de eroare n dozare atunci cnd cantitatea de dozat a fost dep!"it!.

230

MICROCONTROLLERE

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

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