You are on page 1of 235

PREFA

Se consider anul 1971, cnd INTEL a anunat producerea primului microprocesor, ca momentul trecerii de la electronica implementat cablat la electronica realizat programat. Primul microprocesor 4004 a fost conceput de M. E. Hoff ca un procesor puin simplificat pentru a putea fi implementat, la vremea aceea, pe un singur chip n siliciu. Iniial, microprocesorul nu a fost un computeron-a-chip, dei n timp a ajuns la acest stadiu; conceptul de microprocesor s-a dezvoltat i spre alte implementri specifice: microcontroller, microcalculator, procesor de semnale (DSP). Oricare din aceste circuite, pentru a deveni parte a unui sistem, impune un proces de proiectare care se bazeaz n egal msur att pe componenta hardware ct i pe componenta software. Microprocesorul, sau celelalte variante ale sale, integrat ntr-un sistem aduc acestuia acea performan, care atunci cnd este realizat de fiina uman este referit ca inteligen. n general, microprocesorul este integrat ca unitate central de procesare n sistemele digitale de calcul. Actual, aproape toate sistemele au o arhitectur de sistem digital particularizndu-se n funcie de aplicare/utilizare. Aplicaiile care nu sunt, n sensul clasic, sisteme digitale de calcul sunt n general implementate pe baz de microprocesor sau DSP. Implementrile sistemelor pe baz de microcontroller ori DSP devin simple i ieftine -pentru c utilizeaz deja o component de serie, devin performante pentru c utilizeaz o component care poate asigura suport pentru inteligen, devin flexibile pentru c utilizeaz o component ce poate fi programat. Fora care a impus sistemele pe baz de microcontroller const n programabilitatea unei componente de serie. Pentru sistemele la care o component de serie, chiar programabil n software, nu duce la rezultatele cele mai bune au aprut implementrile pe baz de circuite ASIC (Application Specific Integrated Circuits). Spre deosebire de sistemele pe baz de microcontroller, unde funcionarea dorit se obine, n software, printr-un anumit program, la sistemele pe baz de circuite ASIC funcionarea dorit se obine prin structurarea hardwareului cu un anumit program. Alegerea ntre o implementare pe baz de microcontroller, o implementare pe baz de circuit ASIC sau una combinat depinde de aplicaia respectiv i de cerinele impuse. Prezenta carte constituie un material, dar fr a absolutiza, pentru abordarea sistemelor pe baz de microcontroller. Materialul prezentat i CD-ul

VI

MICROCONTROLLERE

alturat asigur un traseu de la descrierea funcionrii unui microcontroller generic, dar i cu exemplificri comerciale, pn la analiza, sinteza implementarea i testarea unui sistem. Deoarece oferta pe pia pentru microcontrollere este vast i variat, pe acest traseu s-a accentuat prezentarea comparativ i critic ncercnd s se imprime cititorului analiza lucid n faa avalanei agresive a ofertelor de pia. Cartea a fost elaborat n cadrul programului Tempus RESUME (REtraining SUpport for small and Medium Enterprises) de la Universitatea TRANSILVANIA din Braov, program care a avut printre obiective i sprijinul dezvoltrii de sisteme pe baz de microcontrollere n/i pentru ntreprinderi mici i mijlocii. innd cont de aceast adres cartea nu este destinat numai inginerilor n specialitatea de electronic i ingineria calculatoarelor ci i inginerilor de alte specialiti care au o practic sau doresc s abordeze acest domeniu al sistemelor pe baz de microcontroller. Nu exist actual produse de HiTech care s nu se bazeze direct sau indirect pe microprocesor sau microcontroller. n consecin, ntr-o economie de tranziie, cum este a noastr, care dorete s se impun, formarea de personal care s tie s proiecteze/implementeze/exploateze sisteme pe baz de microcontroller este o necesitate prioritar. Mulumim tuturor celor care ne-au sprijinit, colegilor Catedrei de Electronic i Calculatoare, d-l asist. ing. Rzvan Brtucu i mai ales domnilor profesori Marcian Crstea de la DMU Leicester - Marea Britanie, Josef Hoffmann de la Fachhochschule Karlsruhe - Germania, Dr. Peter Corcoran - National University of Ireland, MSC Eng.Petronel Bigioi, doctorand la Universitatea Transilvania Braov precum i studenilor aceleiai universiti.

Braov, Ianuarie 2001

CUPRINS

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

VIII

MICROCONTROLLERE

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

1
DESCRIERE GENERAL

1.1

ISTORIC

Privind evoluia istoric a operaiei de comand a unui proces putem contura imaginea unui microcontroller (MC - se va folosi n continuare aceast prescurtare pentru a numi un microcontroller). Un controller este un sistem folosit pentru a comanda i a prelua stri de la un proces sau un aspect al mediului nconjurtor. La nceput un controller era un echipament de mari dimensiuni. Dup apariia microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de miniaturizare a continuat, toate componentele necesare unui controller au fost integrate pe acelai chip. S-a nscut astfel calculatorul pe un singur chip specializat pentru implementarea operaiilor de control; acesta este microcontroller-ul. Un microcontroller este un circuit realizat pe un singur chip care conine tipic: unitatea central; generatorul de tact (la care trebuie adugat din exterior un cristal de cuar sau n aplicaii mai puin pretenioase, un circuit RC); memoria volatil (RAM); memoria nevolatil (ROM/PROM/EPROM/EEPROM); dispozitive I/O seriale i paralele; controller de ntreruperi, controller DMA, numrtoare/temporizatoare (timers), covertoare A/D i D/A, etc.; periferice.

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

MICROCONTROLLERE

Cu un MC se poate realiza un controller integrat (Embedded Controller, EC). Un controller integrat face parte dintr-un sistem construit cu un anumit scop, altul dect calcule generale. Pe lng MC, un controller integrat are nevoie de hardware suplimentar pentru a-i ndeplini funcia. Importana MC este dovedit incontestabil de piaa care este n continu cretere. Astfel, evoluia vnzrilor de MC n lume se reflrct n tabelele 1.1 i 1.2.
Tabelul 1.1 Evoluia vnzrilor MC n lume (n milioane dolari)

MC 4-bit 8-bit 16-bit

'90 1393 2077 192

'92 1596 2862 340

'94 1761 4689 810

'96 1849 6553 1628

'97 1881 7529 2191

'98 1856 8423 2969

'99 (estimat) 1816 9219 3678

'00 (estimat) 1757 9715 4405


Tabelul 1.2

Evoluia vnzrilor MC n lume (n milioane buci)

MC 4-bit 8-bit 16-bit

'90 778 588 22

'92 979 843 45

'94 1063 1449 106

'96 1100 2123 227

'97 1096 2374 313

'98 1064 2556 419

'99 (estimat) 1025 2681 501

'00 (estimat) 970 2700 585

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

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

1994 10800 881 781 468 219 210 188 100 58 45

1995 8036 992 827 297 202 240 66 82 51 25

1. Descriere general

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

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

1994 1781 1421 945 899 835 807 524 500 492 400

1995 1511 1208 708 782 605 534 345 4 13 275 328

1.2

SCHEMA BLOC GENERAL

Vom defini un microcontroller pornind de la o reprezentare simplificat a sa n interaciune cu mediul (figura 1.1).
Programe

Memoria

Intrri

Unitatea central de prelucrare Generator de tact

Ieiri

Figura 1.1 Schema simplificat a unui microcontoller

MICROCONTROLLERE

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

Bus de adrese Intrri digitale

Memorie pentru programe Memorie pentru date

Bus de date Ieiri digitale

Dispozitive I/O

Reset

Unitatea centrala de prelucrare (UCP)

Oscilator

Figura 1.2 Schema bloc a unui microcontroller

1. Descriere general

Se poate distinge o prim diferen fa de calculatoarele personale, unde intrrile se fac de regul de la tastatur i ieirile pe monitorul TV sau la imprimant. Dac un calculator personal este folosit pentru a prelucra informaii i a afia rezultatele pe monitor sau hrtie, un MC comand un proces. Un element important, fr de care un MC nu poate funciona, este programul (sau programele), care se stocheaz n memoria proprie MC. Un MC poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o unitate central, memorie, oscilator pentru tact i dispozitive I/O. Un MC poate fi privit ca un microprocesor care pe acelai chip mai conine memorie i o serie de interfee. Natura i complexitatea aplicaiei n care este folosit MC determin performanele unitii centrale, capacitatea de memorie i tipul interfeelor ce compun structura intern a MC.

1.3

ARHITECTURA MC

Arhitectura unui MC definete atributele sistemului aa cum sunt ele vzute de un programator n limbaj de asamblare. Deoarece un microcontroller este un caz particular de calculator, (calculator specializat pentru operaii I/O, realizat pe un singur chip), acesta este compus din cele cinci elemente de baz: unitate de intrare, unitate de memorie, unitate aritmetic i logic, unitate de control i unitate de ieire. Unitatea de control mpreun cu unitatea aritmetic i logic compun mpreun unitatea central de prelucrare pe care o vom referi n continuare prescurtat cu UCP. Unitile de intrare i ieire vor fi tratate mpreun i vor fi referite prescurtat ca sistem I/O. Blocurile componente ale MC sunt legate ntre ele printr-o magistral intern (bus). Magistrala vehiculeaz semnale de adres, de date i semnale de control. Mrimea acestor magistrale constituie una dintre caracteristicile cele mai importante ale unui MC. Prin magistrala de adrese unitatea central de prelucrare (UCP) selecteaz o locaie de memorie sau un dispozitiv I/O, iar pe magistrala de date se face schimbul de informaie ntre UCP i memorie sau dispozitivele I/O. ntre UCP i memorie sunt transferate att date ct i instruciuni. Acestea se pot transfera pe o singur magistral de date sau pe magistrale de date diferite. Arhitectura von Neumann prevede existena unui bus unic folosit pentru circulaia datelor i a instruciunilor. Cnd un controller cu o astfel de arhitectur adreseaz memoria, bus-ul de date este folosit pentru a transfera nti codul instruciunii, apoi pentru a transfera date. Accesul fiind realizat n 2 pai, este destul de lent. Arhitectura Harvard prevede un bus separat pentru date i instruciuni. Cnd codul instruciunii se afl pe bus-ul de instruciuni, pe bus-ul de date se afl

MICROCONTROLLERE

datele instruciunii anterioare. Structura MC este mai complex, dar performanele de vitez sunt mai bune. Magistralele interne, dup numele lor, nu sunt accesibile n exterior la nivel de pin. Aceast stare caracterizeaz regimul normal de funcionare. n regimuri speciale de funcionare, numite diferit la diferitele tipuri de MC, semnalele magistralelor de adrese i de date sunt accesibile la nivel de pin sacrificnd funciile iniiale ale pin-ilor respectivi. Totodat este necesar s fie livrate n exterior i semnale de comand (cel puin comand de scriere WR i comand de citire RD). Aceast facilitate este util pentru extensii de memorie sau pentru a ataa sistemului interfee suplimentare. Ea nu este posibil n mod normal de funcionare deoarece aceasta ar presupune existena unui numr foarte mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese i de date pot fi aduse la pin multiplexat sau nemultiplexat. Familia MCS-51 este un exemplu pentru acces multiplexat la magistrale. Accesul se face n doi pai; n primul pas se conecteaz liniile de adres la pinii portului sacrificat, iar n al doilea pas se conecteaz datele la aceiai pini. Pentru a putea utiliza informaia de adresare, adresa se memoreaz ntr-un latch, de asemenea exterior microcontroller-ului. Complicarea accesului la magistralele interne prin multiplexare este justificat de asemenea din raiunea meninerii unui numr ct mai mic de pini la capsul. MC mai puin performante (ex. - MC low cost) nu au magistralele interne accesibile la nivel de pin. Ca urmare a celor prezentate se poate aprecia performana unui MC din punct de vedere al magistralei interne dup urmtoarele criterii: dimensiunea magistralei de date; dimensiunea magistralei de adrese; accesibilitatea n exterior la magistrale; magistrale accesibile multiplexat sau nemultiplexat.

1.3.1 Unitatea central de prelucrare


Unitatea central de prelucrare este compus din unitatea aritmetic i logic (UAL) i din unitatea de control. Unitatea aritmetic i logic este seciunea responsabil cu efectuarea operaiilor aritmetice i logice asupra operanzilor ce i sunt furnizai. Modul de implementare a operaiilor este transparent pentru utilizator; important pentru utilizatorul de MC este repertoriul operaiilor implementate pentru a aprecia posibilitatea implementrii optime a aplicaiei particulare de control. De asemenea este important timpul de execuie al fiecrei operaii pentru a aprecia dac timpul necesar procesrii complete satisface cerinele de timp ale aplicaiei. Unitatea ce control este responsabil cu decodificarea codului operaiei coninut de codul unei instruciuni. Pe baza decodificrii unitatea de control

1. Descriere general

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

MICROCONTROLLERE

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

1.3.2 Memoria
MC folosesc diferite tipuri de informaii, care sunt stocate n diferite tipuri de memorii. Instruciunile care controleaz funcionarea MC trebuie stocate ntr-o memorie nevolatil, unde informaiile se pstreaz i dup oprirea i repornirea sursei de alimentare. Rezultatele intermediare i variabilele pot fi nscrise ntr-o memorie volatil, la acestea este important s se poat face scrierea /citirea rapid i simplu n timpul funcionrii. Memoria RAM (Random Access Memory) este o memorie volatil care poate fi citit sau scris de unitatea central. Locaiile din RAM sunt accesibile n orice ordine. Pe chip, memoria RAM ocup mult loc i implicit costurile de implementare sunt mari. De aceea un MC include de obicei puin RAM. Memorie RAM static alimentat de la baterie se folosete pentru stocarea nevolatil a cantitilor mari de date, la o vitez de acces mare i cu un numr nelimitat de tergeri i renscrieri. Memoria ROM (Read Only Memory) este cea mai ieftin i cea mai simpl memorie i se folosete la stocarea programelor n faza de fabricaie. Unitatea central poate citi informaiile, dar nu le poate modifica. Memoria PROM (Programmable Read Only Memory) este similar cu memoria ROM, dar ea poate fi programat de ctre utilizator. Dup posibilitile de tergere, aceast memorie poate fi de mai multe feluri: Memoria EPROM (Erasable PROM) care se poate terge prin expunere la raze ultraviolete. MC cu EPROM au un mic geam de cuar care permite ca chip-ul s fie expus la radiaia ultraviolet. tergerea este neselectiv, adic se poate terge doar ntreaga informaie i nu numai fragmente. Memoria poate fi tears i renscris de un numr finit de ori. Programarea EPROM-ului necesit o procedur special, iar MC cu EPROM au nevoie de regul pentru nscrierea EPROM-ului de o tensiune auxiliar, de 12 V de exemplu. Unele MC au incluse circuite de programare a memoriei EPROM, cu ajutorul crora unitatea central poate programa memoria EPROM. n timpul programrii memoria EPROM nu este conectat la magistrala de date i adrese. Unele MC sunt prevzute cu mod special de lucru, n care sunt vzute din exterior ca nite memorii EPROM obinuite i pot fi astfel programate cu orice programator.

1. Descriere general

OTP (One Time Programmable PROM) se folosete pentru multe serii de MC. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat ntr-o capsul de material plastic fr fereastr, care este mult mai ieftin. Memoria nu se poate terge sau reprograma. Preul unui MC cu OTP este mic, viteza este bun, dar aplicaiile sunt lipsite de flexibilitate. Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) poate fi tears electric de ctre unitatea central, n timpul funcionrii. tergerea este selectiv, iar pentru renscriere trebuie parcuri mai muli pai. Memoria EEPROM echipeaz multe MC, fiind ieftin. n memoria EEPROM se memoreaz un mic numr de parametri care se schimb din timp n timp. Memoria este lent i numrul de tergeri/scrieri este limitat (tipic 10 000). Memoria FLASH este o memorie asemntoare EPROM i EEPROM n sensul c poate fi tears i reprogramat n sistemul n care este folosit (fr a fi necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesit fereastr pentru tergere. Ca i EEPROM, memoria FLASH poate fi tears i programat electric. Memoria FLASH nu permite tergerea individual de locaii, utilizatorul poate s tearg doar ntregul coninut. Din punct de vedere al locului i modului de programare a memoriilor de tip PROM exist dou concepte: ICP (In Circuit Programming) programarea memoriei cnd MC se afl pe placa de cablaj imprimat a aplicaiei; ISP (In System Programming) presupune posibilitatea de reprogramare n funcionare a sistemului. De exemplu la autovehiculele comandate de MC, schimbarea tipului benzinei sau schimbarea unei legi privitoare la poluare pot fi actualizate n programul MC fr ca acesta s fie scos din autovehicul.

n funcie de numrul aplicaiilor n care urmeaz s fie folosit MC se recomand folosirea MC cu ROM pentru volum mare de producie (ROM se nscrie cu masc la fabricant), OTP pentru volum mic de producie i EPROM pentru prototipuri. Tipul de memorie i capacitatea memoriei din echiparea unui MC sunt caracteristici particulare fiecrui tip de circuit. Printre alte diferene, aceti parametri sunt diferii pentru membrii unei aceleiai familii de MC. Se vor prezenta date concrete pentru exemplificare ntr-un tabel recapitulativ la sfritul capitolului (tabelul 1.6). Pentru a aprecia un MC sub aspectul componentei memorie este necesar s se considere urmtoarele caracteristici: varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM /EEPROM /FLASH; capacitatea memoriei aflat pe chip; uurina cu care se poate programa (programare n circuit sau nu, necesitatea unor tensiuni de programare suplimentare).

10

MICROCONTROLLERE

1.3.3 Dispozitive I/O


Dispozitivele I/O reprezint un aspect de mare interes atunci cnd este vorba de microcontroller-e, interes rezultat din nsi particularitatea unui MC: aceea de a interaciona cu mediul n procesul de control pe care l conduce. Dispozitivele I/O implementeaz funcii speciale degrevnd unitatea central de toate aspectele specifice de comand i control n funcia respectiv. Exist o varietate mare de dispozitive I/O; dispozitivele I/O conduc operaii generale de comunicaie (transfer serial sau paralel de date), funcii generale de timp (numrare de evenimente, generare de impulsuri), operaii de conversie analog/numeric, funcii de protecie, funcii speciale de comand, i enumerarea poate continua. Parte din resurse acoper funciile de control propriu-zis, iar o parte asigur funciile necesare aplicaiilor n timp real (sistemul de ntreruperi, timer). Din aceast mare varietate, parte din dispozitive se gsesc n configuraia tuturor MC sau sunt foarte des ntlnite, iar o alt parte de dispozitive o regsim doar n MC construite pentru a optimiza aplicaii cu un grad mare de particularitate. n acest capitol, n continuare, vor fi prezentate dispozitive des ntlnite n echiparea MC. n capitolele urmtoare, pe msur ce vor fi prezentate exemple de MC, vor fi descrise i o serie de dispozitive I/O speciale ce intr n componena acestora. Dispozitivele I/O sunt vzute de unitatea central ca porturi. Exist dou filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de ctre unitatea central. Porturile sunt mapate fie n spaiul de memorie, fie ntr-un spaiu propriu. Cele dou metode sunt exemplificate la MC produse de Motorola i MC produse de Intel. La MC Motorola dispozitivele I/O ocup adrese ntr-un spaiu comun cu memoria, ceea ce atrage dup sine reducerea numrului de locaii de memorie. MC de la Intel folosesc un semnal care indic dac la adresa curent se apeleaz o locaie de memorie sau un dispozitiv I/O. Avantajele maprii n spaii separate: Metoda nu este susceptibil de a provoca erori soft deoarece se folosesc instruciuni diferite pentru a accesa memoria i dispozitivele I/O; Dispozitivele I/O nu ocup spaiu de memorie; Decodificatorul de adrese pentru dispozitivele I/O este mai simplu deoarece spaiul de adresare al dispozitivelor I/O este mai mic. instruciunile I/O sunt mai puin flexibile n comparaie cu instruciunile de lucru cu memoria; instruciunile I/O nu permit folosirea modurilor de adresare folosite n lucrul cu memoria.

Dezavantaje ale maprii n spaii separate:

Avantajul maprii n spaiu comun:

1. Descriere general

11

toate instruciunile de lucru cu memoria i toate modurile de adresare sunt utilizabile i n tratarea dispozitivelo I/O (programarea operaiilor I/O este foarte flexibil); este susceptibil la erori software; spaiul de adresare disponibil pentru memorie este mai mic.

Dezavantajele maprii n acelai spaiu:

Avantajul maprii ntr-un spaiu comun este acela c se poate opera cu porturile la fel ca i cu o locaie de memorie; multe operaii aritmetice i logice folosesc operanzi direct de la port, datele pot fi mutate ntre porturi cu o singur instruciune, coninutul unui port poate fi citit, incrementat i rezultatul scris din nou la port de asemenea cu o singur instruciune. Se contureaz trei direcii de evoluie a MC din punct de vedere al resurselor disponibile pe chip. O direcie este dezvoltarea de MC de uz general care sunt puse la dispoziia utilizatorului pentru a realiza aplicaii de la A la Z. O a doua direcie o reprezint dezvoltarea de MC specializate care dispun de resurse specifice unui anume gen de aplicaii (automobile, telecomunicaii, Internet, acionri electrice, etc). Pentru aceste MC specializate att structura hardware ct i instruciunile sunt specifice i sunt calate pe un gen particular de aplicaii. Exist o a treia tendin de dezvoltare de MC care dispun de resurse hardware configurabile la utilizator. ntre resursele configurabile se afl memoria, elemente de logic programat, module specializate, gen convertoare A/D i convertoare D/A, i module de procesare avansat a datelor.

Porturi paralele
Porturile paralele I/O faciliteaz transferul simultan al mai multor bii ntre MC i mediu. Numrul de bii transferai ca urmare a executrii unei instruciuni depinde de organizarea particular a porturilor n cadrul MC; unele porturi sunt organizate pe 8 bii, altele pe un numr mai mare de bii. Sensul transferului, I (input) sau O (output) este programabil i se stabilete de obicei ntr-un registru de sens. Pentru a veni n ntmpinarea cerinelor specifice de interaciune cu mediul sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor paralele I/O. Mecanismul presupune o structur hardware corespunztoare i instruciuni pentru manipularea informaiei la nivel de bit (un operand este un bit). Astfel, la execuia unei instruciuni orientat pe bit, exist posibilitatea de a transfera un singur bit, de a masca bii care nu sunt folosii ntr-o operaie particular i de a efectua operaii logice pe un singur bit al unui port paralel I/O. Datorit capabilitii de manipulare la nivel de bit la descrierea caracteristicilor sistemului paralel I/O se specific numrul total de linii I/O.
MC68HC705C8 dispune de 31 de linii I/O digitale de uz general grupate n patru porturi (A, B, C i D). Porturile A, B, i C sunt porturi de cte opt bii fiecare i pun

12

MICROCONTROLLERE

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

Circuitul de interfa al portului paralel este responsabil de corectitudinea transferului cu dispozitivul I/O. n acest scop se foloseste una din urmtoarele metode de sincronizare: Transfer direct (brute-force method) n cadrul acestei metode interfaa are doar rolul de a transfera semnalele de la unitatea central spre dispozitivul I/O (dac este o operaie de ieire) sau de la dispozitivul I/O la unitatea central (dac este o operaie de intrare). Se folosete acest tip de transfer dac se citete nivelul unui potenial, dac se comand la ieire un nivel logic (pentru comanda unor LED-uri, de exemplu). Transfer strobat (strobe method) aceast metod folosete semnale de strobare pentru a indica starea stabil a semnalelor la porturile de intrare sau de ieire. ntr-o operaie de intrare, dispozitivul de intrare genereaz semnalul de strobare cnd datele sunt stabile la pinii portului de intrare al interfeei. Stocarea informaiei n registrul de date al interfeei se face cu semnalul de strobe. Daca este vorba de o operaie de ieire, cnd semnalele de date sunt stabile, interfaa elaboreaz semnal de strobare cu care dispozitivul I/O preia efectiv datele. Aceat metod poate fi folosit dac interfaa i dispozitivul I/O lucreaz la viteze comparabile. Transfer cu protocol (handshake method) exist cazuri n care vitezele de lucru ale celor dou pri implicate n transfer sunt mult diferite i metodele mai sus amintite nu ofer cadrul potrivit pentru transferul datelor. Soluia este ca interfaa i dispozitivul I/O s poarte un dialog numit handshake. Sunt necesare dou semnale de protocol; unul din ele este elaborat de circuitul de interfa iar cellalt de dispozitivul I/O. Tranzaciile de protocol difer pentru operaii de intrare i de ieire.

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

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

Starea registrelor de ieire nu este influenat de Reset

Figura 1. 3 Organizarea portului paralel A (MC68HC705C8)

1. Descriere general

13

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

Bit port ieire (latch)


[3] [2]

[1]

pin I/O
[1] Buffer de ieire [2] Buffer de intrare (activ pentru DDR=0) [3]Buffer de intrare (activ pentru DDR=1)

Figura 1.4 Circuit bidirecional de scriere/citire la portul paralel

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

Operaie scriere scriere citire citire

Bit DDR 0 1 0 1

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

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

14

MICROCONTROLLERE

Figura 1.5 reprezint structura unei linii cvasi-bidirecionale. Trucul const n exploatarea facilitilor unui etaj de ieire cu drena n gol (open-drain) care n acest exemplu este pevzut cu o rezisten conectat intern la sursa de alimentare.
Citire latch VCC Pull-up intern D
CLK

Bus intern

Q Q n1

pin I/O

Scriere latch

Citire pin Figura 1.5 Structura unei linii cvasi-bidirecionale

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

1. Descriere general

15

linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este numit mod expandat de lucru. Pentru a evalua capabilitatea porturilor paralele se recomand considerarea urmtoarelor nsuiri: Numrul de linii I/O; Posibilitatea de a programa sensul liniilor I/O; Alte resurse accesibile prin funcii multiple la liniile I/O; Posibilitatea accesului la magistralele interne Aspecte electrice de interfaare.

Module de comunicaii seriale


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

16

MICROCONTROLLERE

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

Magistrala intern

Registru de prescalare

Buffer transmisie

Buffer recepie

Baud rate Selecie ceas

Registru de deplasare la transmisie

Registru de deplasare la recepie

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 unitii centrale cu o prescalare. Pentru ca rata de transfer s fie programabil ceasul prescalat se divizeaz n continuare folosind un numrtor al unui timer din resursele proprii. Interfaa UART dispune de un registru de stare i un registru de control cu ajutorul crora se pot prgrama modul de lucru, parametrii de comunicaie, selectarea ceasului, divizarea ceasului. Conexiunile interfeei seriale asincrone sunt disponibile la pini cu funcii multiple la unul din porturile paralele.

1. Descriere general

17

Modulul serial sincron Urmtoarele dou metode de sincronizare posibile la transferul serial sunt transfer serial sincron i transfer serial autosincronizat. Transferul autosincronizat se bazeaz pe utilizarea unui sistem special de codificare a datelor. Sistemul permite ca din datele recepionate s se poat extrage semnalul de ceas. Aceast metod nu este folosit n MC. Transferul serial sincron este folosit pentru comunicaii locale ntre procesoare sau cu dispozitivele periferice. n transferul sincron datele transferate sunt nsoite de semnalul de clock. Semnalul de clock este transferat pe o linie dedicat. Transferul serial sincron necesit trei conexiuni: emisie, recepie i clock. Interfaa hardware este mai simpl dect la transferul asincron. Protocolul dintre emitor i receptor include o scurt perioad de sincronizare la iniierea unui transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face prin bitul de start al fiecrui octet, la transferul sincron aceasta are loc o singur dat, la nceputul transferului unui bloc de date. Transferul serial sincron permite rate de transfer mai mari dect transferul serial asincron; rate de 1Mbps. ntr-o conexiune serial sincron unul din dispozitive este master iar cellalt este slave. Un transfer poate fi iniiat doar de un master. Master-ul scrie un octet n registrul de transmisie de date al interfeei seriale sincrone. Datele sunt transferate unui registru de deplasare unde sunt serializate i transmise pe linia de emisie numit MOSI (Master Output Slave Input). Pe linia SCK (Serial Clock) este transmis clock-ul. La slave datele ajung tot pe linia MOSI ntr-un registru de deplasare unde sunt deplasate cu ceasul recepionat pe linia SCK. La umplerea registrului de deplasare datele sunt transferate n registrul de recepie de date. Conexiunile interfeei seriale sincrone sunt disponibile la pini cu funcii multiple la unul din porturile paralele. Pinii asociai unei conexiuni seriale sincrone sunt urmtorii: MISO Master In Slave Out Pinul MISO este configurat ca intrare ntr-un master i ieire dintr-un slave. MISO este conexiunea prin care se transmit date ntr-un sens (de la slave la master). Ieirea MISO la un slave este n starea de nalt impedan dac dispozitivul slave nu este selectat. MOSI Master Out Slave In Pinul MOSI este configurat ca ieire dintr-un master i intrare ntr-un slave. MOSI este cea de-a doua conexiune prin care se transmit date n cellalt sens (de la master la slave). SCK Serial Clock Pinul SCK este ieire la un master i intrare la un slave. Prin aceast conexiune se transmite semnalul de sincronizare pentru transferul datelor pe liniile MISO i MOSI. Pe durata a opt perioade ale SCK se transfer ntre master i slave un byte de informaie. nSS non Slave Select La pinul nSS se aplic semnalul care selecteaz un dispozitiv slave; pentru un dispozitiv slave, semnalul trebuie s fie activ (low) pe toat durata unei tranzacii n care este implicat. Pentru un dispozitiv master,

18

MICROCONTROLLERE

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

SCK

Interfaa serial sincron permite interconectarea mai multor dispozitive, dintre care unul singur este master. Exist dou soluii pentru o conexiune multislave. n una din ele master-ul folosete ieiri de porturi pentru a selecta dispozitivul slave cu care se face transferul; n cealalt soluie, toate dispozitivele slave sunt selectate i sunt legate n inel. Conexiunea cu selecia fiecrui dispozitiv slave este reprezentat n figura 1.8. Un alt mod de a realiza o conexiune serial sincron n care exist mai mult dect un slave este reprezentat n figura 1.9. Acest tip de conexiune difer de precedentul prin urmtaorele: Pinul MISO al fiecrui slave este conectat la pinul MOSI al dispozitivului slave vecin. Pinul MOSI de la master este n continuare conectat la pinul MOSI de la primul slave. Pinul MISO de la master este conectat cu pinul MISO al ultimului dispozitiv slave. Intrrile nSS ale tuturor dispozitivelor slave sunt conectate la mas. Nu este necesar comanad de selecie de la master n aceast conexiune.

1. Descriere general SLAVE 0 RD MASTER SCK MOSI RD MISO nSS PB0 PB1 PBk Figura 1.8 Conexiune serial sincron single-master multi-slave (varianta 1) 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 1 RD MOSI SCK MISO nSS +5V SLAVE 1 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 1.9 folosete un numr minim de pini pentru a controla un numr mare de dispozitive. Ca dezavantaj, master-ul nu poate selecta un anume slave pentru transferul de date, datele trec prin toate dispozitivele din inel pn la dispozitivul adresat. Interfaa serial sincron este folosit pentru a comunica cu periferice cum ar fi un simplu registru de deplasare, un sistem de afiare LCD sau un sistem de conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfaa

20

MICROCONTROLLERE

direct periferice cu standarde diferite, provenite de la diveri productori. Conexiunea serial sincron poate fi folosit i pentru a extinde numrul de intrri/ieiri acolo unde acesta este limitat de numrul de pini ai capsulei MC. Interfeele seriale amintite sunt ntlnite n MC cu urmtoarele nume: SCI (Serial Communications Interface) este un subsistem I/O serial indepenent, de tipul full duplex asincron (UART) numit astfel n MC Motorola. SPI (Serial Peripheral Interface) este un modul serial folosit pentru a comunica sincron la distane mici cu viteze de pn la 4 Mbps SCI+ este similar cu SCI, are n plus suport pentru comunicaii seriale sincrone. Dispune de o ieire de ceas folosit pentru a transfera date n mod sincron cu un periferic de tip SPI. SIOP (Simple I/O Port) este o implemenatre mai simpl a SPI.

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

1. Descriere general

21

2. Comparare la ieire (OC - output compare) - se compar la fiecare impuls de ceas valoarea numrtorului principal cu cea a unui registru. Dac se constat egalitate, n funcie de programarea anterioar pot avea loc urmtoarele evenimente: declanarea unei aciuni la un pin de ieire (opional), setarea unui flag ntr-un registru sau generarea unei ntreruperi pentru unitatea central (opional). Funcia este folosit pentru a genera ntrzieri sau pentru a genera o form de und cu valori dorite pentru frecven i pentru factorul de umplere . 3. ntreruperi n timp real (RTI real-time interrupt) ntr-un sistem exist sarcini care trebuiesc executate periodic sau care nu permit depirea unui interval limit ntre doua execuii. Aceste sarcini sunt lansate ca rutine de tratare a ntreruperii generate de timer. 4. COP (computer operating properly) watchdog aceast funcie este folosit pentru a reseta sistemul n cazul n care din erori de programare (bugs) sau erori n desfurarea programului datorate perturbaiilor mediului, registrul COP nu este accesat ntr-un interval de timp prescris. 5. Acumulare de pulsuri (pulse accumulator) este funcia folosit pentru a numra evenimentele ce apar ntr-un interval de timp determinat sau pentru a msura durata unui impuls. Numrtorul liber n figura 1.10 sunt prezentate elementele de baz din componena unui timer, partea de numrtor liber.
TOI

Cerere de ntrerupere

TOF
TCNT(H) TCNT(L)

Clock MC

: 1,4,8,16

Numrtor 16 biti

La RTI, COP i acumulator de impulsuri

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

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

22

MICROCONTROLLERE

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

Latch 16 bii TICx

ICxF

Detector de tranziii

Pin ICx

Figura 1.11 Funcia de captur la intrare schema bloc

Timpul fizic este reprezentat de valoarea coninut de numrtorul liber. La apariia unui eveniment materializat printr-o tranziie la pinul ICx, coninutul numrtorului liber este preluat n latch-ul de 16 bii din blocul de captur. Utilizatorul poate s valideze funcia de captur, poate s aleag frontul activ al tranziiei i poate s autorizeze generarea unei ntreruperi ctre unitatea central la detectarea frontului activ. Dac un canal de captur nu este validat, pinul de intrare ce i este asociat poate fi folosit ca intrare de uz general. ntreruperile intrrilor de captur sunt vectorizate, fiecrei ntreruperi i este alocat o poziie bine definit n tabela vecorilor de ntrerupere. Funcia de captur are multe aplicaii, cteva din ele descrise pe scurt n continuare:

1. Descriere general

23

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

24

MICROCONTROLLERE

i o logic de comand. Un sistem timer dispune de mai multe canale de comparare (68HC11 are cinci canale de comparare).
OCxI Comparator 16 bii TOCx Ctrl. pin Pin OCx Cerere de ntrerupere OCxF

Figura 1.12 Funcia de comparare la ieire schema bloc

Principala aplicaie a unei funcii de comparare este ntreprinderea unei aciuni la un moment de timp viitor bine determinat, cnd numrtorul liber atinge o anumit valoare. Aciunea ntreprins ar putea fi comutarea unui semnal, acionarea unui ntreruptor electronic, aprinderea unui LED, etc. Pentru a folosi funcia de comparare este necesar parcurgerea urmtoarei secvene: 1. se copiaz valoarea din numrtorul liber (coninutul registrului TCNT); 2. se adaug la copie o valoare determinat de ntrzierea dorit; 3. se transfer rezultatul n registrul de comparare. Aciunea dorit la pinul ieirii de comparare se specific anterior de ctre utilizator ntr-un registru asociat modulului. Comparatorul compar valoarea numrtorului liber TCNT cu valoarea din registrul de comparare la fiecare clock. Dac se constat egalitate, se activeaz aciunea specificat la pinul de comparare i se seteaz flag-ul asociat. De asemenea, se va genera o ntrerupere dac aceasta a fost validat anterior prin bitul OcxI din registrul pentru validarea ntreruperilor. ntreruperile sunt vectorizate; fiecare canal are o a adres cunoscut n tabela vectorilor de ntrerupere. ntreruperile n timp real RTI Funcia RTI este folosit pentru a genera periodic ntreruperi; ntreruperile pot fi folosite pentru a comuta ntre aplicaii n sisteme multitasking sau pentru a declana periodic execuia unei secvene. Perioada apariiilor ntreruperilor n timp real este programabil. Ca rezoluie, funcia de ntrerupere nu este la fel de performant ca i funcia de comparare.

1. 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 opional. n cazul n care se folosete, programul utilizator trebuie s reseteze periodic un registru COP; dac nu are loc resetarea, unitatea centrala decide c a aprut o problem n rularea programului i reseteaz sistemul pentru a preveni o desfurare necontrolat a programului. Funcia ceasului de gard poate fi realizat folosind un canal timer de uz general sau, situaia ntlnit n mod obinuit la MC, ceasul de gard este un timer dedicat, folosit doar pentru funcia gard. Structura unui modul watchdog este reprezentat n figura 1.13
Clock Numrtor 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 numrtor al crui ceas de numrare este programabil printr-un registru de prescalare. Dac circuitul este activat, numrtorul numr continuu. Dac numrtorul ajunge la valoarea cea mai mare (FFFFh, dac este un numrtor de 16 bii). se genereaz un RESET ctre unitatea central. Este sarcina programatorului s scrie periodic n registrul de control un cuvnt care s iniializeze numrtorul. n cazul n care programul a pierdut controlul se va reseta sistemul. Acumulatorul de impulsuri Modulul timer poate s dispun de un registru acumulator de impulsuri. n acest registru pot fi numrate evenimente exprimate prin pulsuri sau pot fi numrate chiar pulsuri interne, provenite de la clock-ul unitii centrale. 1. Numrare de evenimente numrtorul de 8 bii este incrementat la fiecare front activ detectat la un pin. Un eveniment poate fi orice, segmente de program, cicluri ale unui semnal de intrare, uniti de timp, etc. Pentru a fi numrate n acumulatorul de impulsuri, acestea trebuiesc transformate n tranziii.

26

MICROCONTROLLERE

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

T1 Fig. 1.14 Semnal PWM

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

PWM

Numrtor Registru prescalare

clock intern

BUS INTERN

Fig. 1.15 Schema bloc a canalului PWM

Registrul de prescalare genereaz clock-ul pentru un numrtor. Clock-ul de numrare este programabil. Coninutul numrtorului este comparat cu cel al

1. Descriere general

27

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

Module A/D i D/A


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

28

MICROCONTROLLERE

ADC0 ADC1 ADC2 ADC3

Mux analogic

E/nM

Convertor Analog Digital

pin start

Selecie 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 folosete un registru de control prin care se selecteaz canalul de conversie i modul de lucru pentru circuitul de eantionare/memorare. Declanarea i terminarea conversiei sunt semnalizate cu cte un bit tot n registrul de control. Rezultatul conversiei este stocat n registrul de date. Registrul de date va conine ntotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit nainte de terminarea urmtoarei conversii, n caz contrar se pierde informaia Conversia poate fi declanat intern, considernd bitul asociat din registrul de control, sau din exterior printr-un semnal de comand aplicat la pin. Declanarea unei conversii la un moment de timp dorit, fr intervenia unitii centrale, se poate realiza folosind un timer. Modulul poate fi programat s execute o conversie a unui canal i s se opreasc. Un alt mod de operare al modulului poate fi conversia continu a unui canal pna la recepionarea unei comenzi de ncheiere. Un alt mod de operare este conversia ciclic n care modulul execut pe rnd conversia fiecrui canal, dup care se oprete. n acest ultim mod sunt folosite de obicei mai multe registre de date pentru memorarea rezultatelor conversiilor. Rezultatele sunt citite dup ncheierea unui ciclu. La terminarea unui ciclu de conversiei, opional, se poate genera o ntrerupere ctre unitatea central. n aplicaii de precizie se recomand ca pe durata conversiei s se comute unitatea central n stare inactiv pentru ca aceasta s nu perturbe convertorul.

1.4

SISTEMUL DE NTRERUPERI

Sistemul de ntreruperi reprezint mecanismul ce asigur sincronizarea funcionrii unitii centrale cu evenimentele. Acest mecanism asigur implementarea unui rspuns prompt i specific al sistemului la orice cerere de

1. Descriere general

29

ntrerupere. Muli dintre productori au realizat pentru diversele familii de microcontroller-e variante constructive care difer uneori substanial unele fa de altele, scopul fiind fie acela al simplificrii sistemului, fie acela al asigurrii unor faciliti ct mai adecvate aplicaiilor pentru care au fost proiectate respectivele microcontroller-e. nc din anii 1980-1985 s-a conturat un principiu care se confirm i astzi: "fiecare funciune complex cu procesorul ei", respectiv "fiecare funciune a unui sistem de comand cu rutina ei de servire a ntreruperilor". Evenimentele, sunt acele stri din funcionarea sistemului care trebuie avute n vedere la controlul acestuia. Ele trebuie s declaneze, cu o ntrziere minim, un rspuns adecvat din partea sistemului, rspunsul trebuind s fie descris de ctre proiectant prin instruciuni incluse n cadrul unor rutine de servire a ntreruperilor. n cazul microcontroller-elor, ca de altfel i n acela al microprocesoarelor, aceste evenimente trebuie privite ca informaii de stare a sistemului, informaii ce rezult fie urmare a prelucrrii de ctre UC a datelor, (evenimente ce genereaz aa numitele ntreruperi interne), fie urmare interaciunii sistemului cu mediul nconjurtor (numite i ntreruperi externe). Acest din urm aspect este preponderent n cazul microcontroller-elor. Unitatea central a MC analizeaz n cadrul ultimei perioade de ceas corespunztoare fiecrui ciclu instruciune eventualele cereri de ntrerupere postate pe parcursul execuiei instruciunii curente. Ca orice sisteme deterministe, sistemele digitale dotate cu microcontrollere sunt ancorate, n funcionarea lor, ntr-un spaiu multidimensional ce are drept dimensiuni parametrii proprii i cei reglai de ctre sistem ("mrimile de stare") i timpul. Sistemul de ntreruperi este informat asupra evoluiei acestora prin canale de transfer a informaiilor generale (porturi, canale temporizatoare/numrtoare) sau specifice (interfee specializate UART, SPI, SCI, USB, I2C, etc), el dispune de o unitate de analiz a informaiilor ("controller-ul de ntreruperi" - CI), implementat intern, conectat via magistralele interne ale MC la unitatea de control a programelor), precum i de mecanismul prin care oprete execuia de ctre UC a programului curent i realizeaz declanarea rutinei adecvate de servire a ntreruperilor. Realizarea strilor generatoare de cereri de ntrerupere este urmat de analiza acestora de ctre CI. Aceast analiz presupune urmtoarele: Identificarea sursei generatoare a cererii de ntrerupere; Determinarea ordinii de servire a cererilor de ntrerupere, n cazul apariiei simultane a mai multor astfel de cereri.

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

30

MICROCONTROLLERE

ntreruperilor sau prima instruciune a rutinei de servire a ntreruperilor. Aceast situaie este ntlnit la majoritatea microcontroller-elor, dar exist i excepii, cum ar fi microcontroller-ele familiilor PIC "low range" i "middle range" de la firma Microchip, la care orice cerere de ntrerupere genereaz execuia unei rutine al crei nceput este plasat la o adres unic, fix de memorie. Determinarea ordinii de servire, sau analiza prioritii cererilor de ntrerupere, presupune scanarea n faza de analiz a tuturor canalelor de transfer pentru cererile de ntrerupere sau a regitrelor corelate cu acestea ntr-o anumit ordine prestabilit hard. Multe microcontroller-e dispun de mecanismul (implementat hard) ce permite "prioritizarea" unora dintre aceste canale, ceea ce implic implementarea unor uniti de memorare a prioritilor (registre de setare a prioritilor pe dou sau mai multe nivele) i instituirea unor reguli de arbitrare. Fiecare dintre aceste nivele va fi scanat distinct, n ordinea descresctoare a prioritilor, majoritatea CI prezentnd doar dou nivele de prioritate: prioritar i mai puin prioritar. n procesul de scanare, primul canal "activ" - care genereaz o cerere de ntrerupere - va fi cel ce va fi "servit", respectiv va declana procesul de execuie a rutinei de servire a ntreruperilor corespunztoare. Sunt ntlnite att microcontroller-e care permit ntreruperea unei rutine de servire a ntreruperilor de ctre o alt cerere de ntrerupere mai prioritar (ndeobte cunoscut ca sistem de ntreruperi "rentreruptibil"), ct i microcontroller-e care nu permit o astfel de aciune. Muli productori pun la dispoziia proiectantului cte un flag de validare/invalidarea global a ntreruperilor, ceea ce permite ca utilizatorul s modifice cum dorete mecanismul de aciune la apariia unui ntreruperi: permite sau inhib o ntrerupere prioritar aprut ulterior uneia mai puin prioritare, dar pe durata ct aceasta este servit. Multe microcontroller-e dispun de un mecanism bazat pe flag-uri (fanioane) de validare/invalidare a ntreruperilor, acest mecanism putnd fi implementat att la nivelul UC al MC ct i la / sau la nivelul CI, respectiv la nivelul sistemului de analiz a cererilor de ntrerupere. Registrele de memorare a cererilor de ntrerupere sunt dublate de registre ce memoreaz informaia de validare a canalelor ntreruptoare ("registre de validare a ntreruperilor" sau "registre de mascare a ntreruperilor"), un canal corespunztor unei cereri de ntrerupere invalidat va fi ignorat n procesul de scanare a cererilor de ntrerupere. Un principiu des aplicat la implementarea acestui sistem const n aceea c fiecare flag este setat printr-un mecanism hard i, n general, resetat soft, prin execuia unor instruciuni de resetare a sa, ceea ce presupune pe de-o parte, luarea n considerare prin program a strii semnalate, iar pe de alt parte, asigur reanclanarea mecanismului de ntrerupere, pentru situaia n care starea respectiv se repet. Domeniul de adrese de memorie (SRAM sau PROM) n care sunt plasate instruciunile de start a rutinelor de servire a ntreruperilor poart denumirea de "tabel a vectorilor de ntrerupere".

1. Descriere general

31

Unele microcontroller-e prezint o tabel a vectorilor de ntrerupere cu adrese fixe, specifice canalelor ntreruptoare, spre exemplu I8051, Atmel, PIC, altele permit plasarea tabelei vectorilor de ntrerupere la adrese de memorie ce sunt stabilite de ctre proiectant, este cazul, spre exemplu, micocontroller-elor din familia Z80 (Z8413, Z8414, Z8415, etc.) n prima situaie, plasarea la adres fix a tabelei vectorilor de ntrerupere, poate fi privit ca o restricie n dezvoltarea unor programe de aplicaie, dar aceasta este doar o fals problem! Practic, noi putem realiza translatarea prin program a tabelei vectorilor de ntrerupere la orice adres de memorie prin simpla introducere a unor instruciuni de salt ca prime instruciuni corespunztoare canalelor ntreruptoare. Exemplificm aceasta pentru familia 8051. Tabela vectorilor de ntrerupere este cuprins ntre adresele: 0003H i 0023H. Programul de translatare va trebui s se prezinte astfel:
CSEG ORG START: JMP ; ORG ISR_EXT0: JMP ; ORG 0BH ;Adresa din tabela vectorilor de ntrerupere ;corespunztoare ntreruperilor datorate ;depirii capacitii de numrarea a canalului ;0 numrtor/temporizator NEW_ADDR_ISR0 ;Noua adresa a rutinei (poate fi plasat n ;memoria RAM extern) 03H ;Adresa din tabela vectorilor de ntrerupere ;corespunztoare ntreruperilor externe de ;stare - canal 0 MAIN ;Adresa de salt la progamul principal 00H

ISR_T0: JMP ; ORG ISR_EXT1: JMP ; ORG 1BH ;Adresa din tabela vectorilor de ntrerupere ;corespunztoare ntreruperilor datorate ;depirii capacitii de numrarea a canalului ;1 numrtor/temporizator NEW_ADDR_ISR2 13H ;Adresa din tabela vectorilor de ntrerupere ;corespunztoare ntreruperilor externe de ;stare -canal 1 NEW_ADDR_ISR1 ;Noua adresa a rutinei (poate fi ;plasat n ;memoria RAM extern)

ISR_T1: JMP ; ; NEW_ADDR_ISR3

32 ORG ISR_SI: 23H

MICROCONTROLLERE

;Adresa din tabela vectorilor de ntrerupere ;corespunztoare ntreruperilor provenite de la ;UART

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

Plasnd n memoria RAM aceast tabel este posibil s realizm ceea ce se cheam "servire dinamic a ntreruperilor". Acest procedeu de servire a ntreruperilor permite implemenarea uoar a comenzii unui automat secvenial cu un numr finit de stri. (spre exemplu: cazul unei linii automate de montaj sau de turnare, etc). Implementarea servirii dinamice a ntreruperilor const n modificarea succesiv a adreselor la care plasm rutina de servire a ntreruperii (ISR). n figura 1.17 prezentm cazul unui automat cu un numr de trei stri distincte, fiecare rutin de servire a ntreruperilor (ISR) va rescrie adresa rutinei de servire corespunztoare evenimentului urmtor n tabela vectorilor de ntrerupere. Este evident c aceast tabel trebuie s fie locatat n memoria RAM a sistemului.
Primul eveniment ISR corespunztoare evenimentului 1 Scrie n Tabela Vectorilor de ntrerupere, adresa ISR2 Al treilea eveniment Al doilea eveniment ISR corespunztoare evenimentului 2 Scrie n Tabela Vectorilor de ntrerupere, adresa ISR3

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

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

1. Descriere general

33

Un exemplu tipic n acest sens l reprezint tastaturile ce prezint butoane multi-funciune. S presupunem cazul butonului unic: START/STOP al unui utilaj. Vom exemplifica procedeul de servire dinamic prin programul care comut funciunile butonului din START n STOP i invers. Programul este conceput pentru un microcontroller din familia 8051.
CSEG ORG BOOT: JMP ISR_EXT0: JMP BUTON ;S-a considerat c prima linie de ntreruperi externe de stare reprezint canalul de transfer al ;informaiilor corespunztor butonului START/STOP
;

00H MAIN

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

34

MICROCONTROLLERE

n cazul sistemelor 8051 sau 68xx-68xxx, tabela vectorilor de ntrerupere este ampl incluznd variate canale ntreruptoare. Astfel, pentru ntreruperile externe de stare se dispune de dou linii de intrare INT0# i INT1#, CI putnd fi setat s reacioneze fie pe front (cel negativ), fie pe nivel logic (cel sczut -low), pentru canalele numrtoare temporizare dispunem pentru fiecare de adrese de servire corespunztoare strilor de depire a capacitii canalului ("overflow"), iar pentru unitatea UART dispunem de un vector unic att la recepie ct i pentru transmisie. n cazul microcontroller-elor PIC (low/middle range) exist o singur adres (plasat la 0004H) pentru ntreruperi externe, ceea ce impune pentru proiectant s scrie o rutin de servire n care analiznd registrul ce memoreaz cererile de ntrerupere va decide asupra rspunsului la cererea respectiv.

1.5

MANAGEMENTUL PUTERII

Pentru aplicaiile n care consumul de energie de la sursa de alimentare este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din modulele componente. Economia de energie este esenial n cazul alimentrii de la baterii. Prin intrarea n starea de economie de energie memoria RAM nu-i schimb coninutul i ieirile nu-i schimb valorile logice. Sistemul de economie de energie ofer dou moduri de operare care difer prin numrul componentelor dezactivate. Aceste moduri sunt numite Idle, Power Down la MC Intel i Wait, Stop la MC Motorola. Intrarea n unul din modurile de operare cu economie de energie se face prin comenzi software. MC Motorola dispun de instruciuni care determin intrarea n mod Wait sau Stop. MC Intel intr n mod Idle sau Power Down prin controlul unor bii din registrul PCON (Power Control Register). n ambele moduri de operare este ngheat funcionarea unitii centrale. n mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage dup sine blocarea tuturor funciilor interne. Timer-ul va nghea i interfeele seriale i vor opri activitatea. Sistemul de ntreruperi, dup caz, este dezactivat (MC Intel) sau poate s ramn activ (MC Motorola). Coninutul memoriei i al registrelor interne nu este alterat, iar liniile I/O rmn neschimbate. Din aceast stare se poate iei fie doar cu Reset la MC Intel. La MC Motorola se poate iei fie cu Reset, fie la sesizarea unei ntreruperi externe (sistemul de ntreruperi nu este dezactivat). n cazul n care revenirea se face la sesizarea unei ntreruperi externe activitatea intern este reluat n aceleai condiii n care a fost abandonat (numrtoarele timere-lor continu din starea pe care au avut-o la intrare n mod Stop). n mod Idle (Wait) este ngheat doar funcionarea unitii centrale, celelalte funcii folosite rmn active (timer-ul, interfeele seriale i sistemul de ntreruperi). Starea unitii centrale i a tuturor registrelor este pstrat ct timp

1. Descriere general

35

MC se menine n mod Idle (Wait). Pinii de port pstreaz starea pe care au avut-o la intrarea n acest mod. Din modul Idle se poate iei prin Reset sau la sesizarea unei ntreruperi interne sau externe. Consumul de energie este minim atunci cnd sunt activate cele mai puine funcii. Consumul minim de energie se obine n modul de operare Power Down (Stop). n modul Idle (Wait) consumul este redus faa de regimul de operare normal dar este mai mare dect n mod Power Down (Stop). n acelai timp, consumul n mod Idle (Wait) este cu att mai redus cu ct sunt mai puine funcii active la intrare n mod. n mod Power Down (Stop) exist posibilitatea unei reduceri suplimentare a consumului prin reducerea tensiunii de alimentare (la unele MC). OnNow este o iniiativ actual pentru modernizarea metodelor de economie de energie n sistemele cu microprocesoare. Se intenioneaz obinerea unui consum de energie (pentru un calculator PC) de o treime din cel actual i un timp de ieire din starea inactiv mai mic de 5 secunde. Informaii despre aceast iniativ se gasesc la adresa www.microsoft.com/hwedev/onnow.htm Un alt aspect important al alimentrii sistemelor construite cu MC este calitatea semnalului furnizat de sursa de alimentare. Dac nivelul tensiunii de alimentare nu se ncadreaz ntr-o plaj permis este posibil ca programul s funcioneze defectuos, s se abat de la cursul firesc. Pentru a elimina acest risc, pe care nu ni-l putem permite n sistemele de control, n MC sunt implementate module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset de sistem sau o ntrerupere n cazuri considerate limit. LVR (Low Voltage Reset) este un circuit care monitorizeaz tensiunea de alimentare a unitii centrale i foreaz un reset dac se constat c aceasta este mai mic dect un minim predefinit. LVI (Low Voltage Interrupt) este un circuit care monitorizeaz tensiunea de alimentare a unitii centrale i genereaz o ntrerupere dac se constat c aceasta este mai mic dect un minim predefinit. ntreruperea foreaz executarea unei rutine de oprire neforat.

1.6

SCHEMA BLOC A UNUI MC

Cu elementele prezentate pn la acest punct schema bloc a unui MC poate fi dezvoltat (n comparaie cu cele prezentate n figura 1.1. i figura 1.2); rezultatul este ilustrat n figura 1.18.

36 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 Intrri/ieiri de date Seriale/Paralele

DISPOZITIV I/O (1, 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 funcionale. Unitatea central execut instruciunile pe care le primete prin magistrala de date din memoria program. Structura Harvard este posibil i rspndit la MC pentru c de regul instruciunile sunt stocate n memoria ROM, iar datele n cea RAM. Magistrala de date i cea de adrese pot fi separate sau multiplexate. Magistralele pot s nu fie disponibile n exterior (Motorola 6805) sau pot fi disponibile n exterior direct (MCS-51) sau multiplexate (MC pe 16 sau 32 de bii). Fiecare MC are un controller de ntreruperi care admite att intrri din exterior ct i de la modulele interne. Unele MC dispun de un controller DMA propriu. Modulele I/O pot fi seriale sau paralele. Fiecare modul transfer date cu exteriorul prin intermediul registrului de date (RD). Modulul este programat (configurat) de unitatea central prin intermediul unui registru de comenzi (RC) i se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera ntreruperi ctre unitatea central. Registrele modulelor I/O pot fi vzute de UC ca locaii de memorie (la familia Motorola) sau ca dispozitive de I/O ntr-un spaiu de

1. Descriere general

37

adresare separat (MCS 51). Sub numele de dispozitiv I/O, ntr-o abordare generalizat, sunt cuprinse principalele interfee ale MC (timer, canal serial UART) i linii I/O grupate n porturi paralele de uz general. Acelai nume generic poate acoperi i interfeele speciale ntlnite n configuraii particulare de MC (convertor A/D, interfa serial sincron, interfa LCD, interfa USB, etc).

1.7

FAMILII DE MC

Microcontroller-ele se produc ntr-o mare diversitate n care exist totui elemente comune care permit o prezentare sistematic a produsului. Pe baza unui nucleu comun au fost definite familiile de microcontroller-e; nucleul este constituit dintr-o unitate central, aceeai pentru toi membrii unei familii, i o serie de interfee i periferice. Din punct de vedere al programatorului, toi membrii unei familii folosesc acelai set de instruciuni, permit aceleai moduri de adresare i folosesc aceleai registre. Diferena ntre membrii unei familii const n primul rnd n echiparea chip-ului cu memorie (tip de memorie i capacitatea memoriei). Alte diferene pot fi gsite la frecvena de clock pentru unitatea central sau n interfeele on-chip i perifericele on-chip suplimentare fa de cel mai simplu reprezentant al familiei. O diferen ntre membrii unei familii poate fi i modul n care sunt conectate semnalele la pin respectiv tipul capsulei de prezentare a circuitului integrat. n cadrul acestui capitol, n continuare, sunt prezentate cteva familii de microcontroller-e cu sublinierea nsuirilor caracteristice i considernd numele productorului ca fiind unul din elementele reprezentative pentru o familie. INTEL 4048 a fost primul MC aprut pe pia, avnd o structur Harvard modificat, cu 64-256 octei de RAM i este nc folosit n multe aplicaii datorit preului sczut. INTEL 8051 (MCS-51) este a doua generaie de MC i, n prezent, este familia care se vinde cel mai bine; este fabricat i de muli ali productori. Acest MC are o arhitectur Harvard modificat cu spaiu de adresare diferit pentru program (<64K din care 4-8K pe chip) i date (<64K din care 128-256 octei pe chip, cu adresare indirect). Dispozitivele I/O au un spaiu propriu de adresare. 8051 dispune de un procesor boolean prin care se pot executa operaii complexe la nivel de bit, iar n funcie de rezultate se pot face salturi. Pentru 8051 exist foarte mult software, att contra cost ct i gratuit. INTEL 80C196 (MCS-96) este a treia generaie de MC propus de INTEL. 80C196 este un MC pe 16 bii care admite un tact pn la 50MHz. Acest MC conine blocuri aritmetice pentru nmulire i mprire, lucreaz cu 6 moduri de adresare, convertor A/D, canal de comunicaii serial, controller de ntreruperi cu 8 surse, pn la 40 de porturi I/O, generator PWM i ceas de gard.

38

MICROCONTROLLERE

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

de MC PIC: low range, middle range i high range (care se disting prin dimensiunea cuvntului de program i prin faciliti legate de structur) PIC16C5xx, PIC16C6xx i PIC17Cxx, din care linia 16C6xx este cotat cel mai bine pe pia.
COP400 (National Semiconductor) este un MC pe 4 bii care are 512o-2K ROM, i 32x4- 160x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare 2,3V-6,0V. Sunt echipate cu numrtoare/temporizatoare i magistral

1. Descriere general

39

MICROWIRE. Aceste MC se fabric n peste 60 de modele echivalente i sunt primele MC care au un pre sub 0,5USD/bucat. COP800 (National Semiconductor) este un MC de 8 bii care conine MICROWIRE, UART, RAM, ROM, numrtoare/temporizatoare de 16 bii, controller de ntreruperi, comparator, ceas de gard, monitor de tact, generator PWM, transmisie n infrarou, convertor A/D cu 8 canale cu prescalare (admite i intrri difereniale), protecie la scderea tensiunii de alimentare, mod de ateptare i HALT, un trigger SCHMITT i circuit de trezire cu mai multe intrri (MultiInput-WakeUp). Eficiena este dat i de un set puternic de instruciuni, majoritatea fiind de un singur octet i executate ntr-un singur ciclu. Exist i variante pentru uz militar. HPC (National Semiconductor) sunt MC pe 16 bii de mare performan, cu o arhitectur von Neumann. Unitatea central poate executa nmuliri i mpriri. Conin n structur funciile executate de familia COP800 avnd n plus canale seriale HDLC (High Level Data Link Control) i elemente DSP, la o tensiune de alimentare de 3,3V. MC din aceast familie au multe aplicaii n telecomunicaii, n sisteme de securitate, imprimante LASER, hard discuri, frne ABS i aplicaii militare. Proiectul PIRANHA (National Semiconductor) este un proiect de realizare a unui MC RISC, primul MC dedicat aplicaiilor integrate. Acest MC are avantajele arhitecturii RISC, deci puine instruciuni, simplitate, modularitate. Z8 (Zilog) a fost unul dintre primele MC. Modelul iniial avea UART, numrtoare/temporizatoare, DMA, 40 de linii digitale I/O, controller de ntreruperi. Modelul Z8671 avea n ROM un BASIC simplu. Modelul Z86C95 are o structur Harvard, faciliti DSP etc. Un avantaj este c se pot folosi pentru extensii unele circuite de interfa din familia lui Z80. HD64180 (Hitachi) este un MC puternic, cu structura i posibilitile lui Z80, avnd n plus 2 canale DMA, canal de comunicaii sincrone i asincrone, numrtoare/temporizatoare i controller de ntreruperi. Unele versiuni includ EPROM, RAM i PIO (Programmable Input Output). Ruleaz instruciunile lui Z80, dar n mai puine cicluri i are instruciuni n plus. Exist variante care funcioneaz pn la 18MHz. TMS370 (Texas Instruments) este similar cu 8051. Conine RAM, ROM (OTP sau EEPROM), 2 numrtoare/temporizatoare de 16 bii, controller de ntreruperi, ceas de gard, generator PWM, convertor A/D cu 8 canale, SCI (port serial asincron), SPI (port serial sincron), comparator, poate executa nmuliri i mpriri. Tactul poate fi pn la 20MHZ, cu 5MHz tact de magistral. 1802 (RCA) este un MC mai vechi, cu o structur apropiat de un microprocesor. Este folosit mai ales n aplicaii spaiale. MuP21 (Forth) este un MC care are puterea de calcul a unui procesor INTEL 80486 (100MIPS) la un pre mult mai mic. Are integrat un coprocesor video care gestioneaz o memorie video, deci se poate ataa direct un monitor TV. Acest MC a fost creat ca s ruleze programul OKAD (program de proiectare VLSI) i execut acest lucru de 10 ori mai repede ca un 486. Mup21 are 40 de pini.

40

MICROCONTROLLERE

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

Circuit M68HC11A0 M68HC11A1 M68HC11A2 M68HC11A8 M68HC11E1 M68HC11E9 M68HC11F1 I 8035 I 8039 I 8041 I 8748 I 8051 I 8751

RAM 256 256 256 512 512 1024 64 128 64 64 128 128

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

Clock 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 2.5 s 1.4 s 2.5 s 2.5 s 1 s 1 s

I/O 4x8 1x6 4x8 1x6 4x8 1x6 4x8 1x6 4x8 1x6 4x8 1x6 4x8 1x6 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

1. Descriere general

41

1.8

CLASIFICAREA MC

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

2
PROGRAMAREA SISTEMELOR CU MC

2.1

PROIECTAREA PROGRAMELOR DE APLICAIE

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

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

2. Programarea sistemelor cu MC

43

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

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

44

MICROCONTROLLERE

Dei varietatea sistemelor este deosebit de larg, totui putem considera c, n general, dou clase de sisteme sunt preponderente, iar la limit acestea sunt unicele ntlnite n practic, i anume: sisteme de reglare, sisteme ce ndeplinesc una sau mai multe funcii scop, care sunt meinute n limite de variaie prestabilite, i sisteme de control, respectiv sisteme ce implementeaz un automat cu un numr finit de stri

Tot aici trebuie s subliniem deosebit de strnsa legtur ce apare ntre aspectele "hard" ale sistemului i aspectele "soft" ale acestuia. Aceast legtur trebuie s fie permanent n atenia proiectantului, el trebuie s-i "nchipuie" cum i n ce se traduce execuia fiecrei instruciuni i de asemenea, mai important, s in cont de sincronizrile ce apar n "viaa sistemului" ntre funcionarea unitii centrale i procesul reglat. Spre deosebire de programarea n limbaje de nalt nivel sau nivel mediu, n cazul nostru rezultatele programrii se traduc prin aciuni specifice n cadrul sistemului, sistemul de ntreruperi jucnd un rol esenial. Interaciunile, n acest caz sunt uneori mai greu de vizualizat, de aceea n timp s-a dezvolat o ampl varietate de unelte de dezvoltare care sprijin proiectantul de soft n realizarea acestuia. Prin sistem de dezvoltare se nelege acel sistem ce include procesorul mpreun cu memoria aferent, (SRAM i EPROM/Flash ) i care dispune de porturi, eventual de posibilitatea de generare de semnale, spaiu pentru "cablarea" unor subsisteme adiionale specifice (interfee analog digitale i digital-analogice, driver-e de putere, etc.) i de programe "monitor8" rezidente n memoria fix a sa, ce implementeaz dispozitivul logic "consol" drept legtur cu PC-ul. Aceste programe pot dispune i de alte rutine, cum ar fi un asamblor/dezasamblor ce permite scrierea sau modificarea "on-line" a programelor ce ruleaz pe sistem. Sistemul dispune de "uneltele soft" ce ajut la asamblarea programelor, editarea acestora precum i a datelor din memoria sistemului de dezvoltare, darea n execuie a programului, oprirea acestuia n puncte prestabilite ("break points"), vizualizarea strii registrelor generale, etc. Toate acestea presupun existena unui dispozitiv logic, "consol", care asigur controlul sistemului, fie de o consol propriu-zis, fie, mai des, de ctre un PC ce este conectat serial la sistem. Aspecte specifice de programare apar i ca urmare a arhitecturii procesorului CISC, RISC sau SISC. Aceste aspecte sunt "detalii" extrem de importante n programare, cci ele duc la modificarea stilului de proiectare a programelor. S analizm pe rnd aceste aspecte. Prin analiza necesitilor impuse de implemetarea comenzii i controlului unui sistem, va trebui s nelegem urmtoarele.
8

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

2. Programarea sistemelor cu MC

45

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

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

46

MICROCONTROLLERE

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

0032 0033 0034

2. Programarea sistemelor cu MC

47

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

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

45 46 47 48 49 50

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

48

MICROCONTROLLERE

continuu, ceea ce indeobte poart denumirea de "concuren". Aceast proprietate are un rolul esenial n cazul unui sistem dedicat (ncapsulat - "embedded"). Deseori, pentru sisteme relativ lente putem gsi o perioad minim de temporizat, rutina de servire a ntreruperilor, corespunztoare acesteia putnd fi utilizat pentru controlul mai multor comenzi, ce prezint constante de timp multipli ai temporizrii de baz. Dac acest semnal de ceas l folosim pentru analiza strii globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem de operare9 n timp real, specific. Un program monitor, (supervizor) va putea analiza periodic starea sistemului i va declaa task-ul, rutina adecvat strii. n acest caz, construind uneltele minimale i anume task10-uri, rutine11 i subrutine12 vom putea scrie mult mai uor programe pentru sisteme distincte, asigurnd astfel un grad de portabilitate13 ridicat al aplicaiilor. Implementarea programrii structurate presupune decelarea acelor aciuni repetabile i executate cu parametri diferii n mai multe etape din evoluia sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruciuni apelabile din programul principal. Un rol esenial l joac i modul n care realizm gestiunea resurselor de memorie. Acestea sunt dedicate ctorva scopuri i anume: 1. Salveaz starea sistemului. n acest sens dispunem de zone de memorie accesibile de byte i pe bit, zon numit de obicei "vector de stare". Dimensiunea acestei memorii este specific aplicaiei. 2. Salveaz temporar informaiile din registrele generale la apelarea rutinelor sau la execuia rutinelor de servire a ntreruperilor, n general implementarea acestei memorii se face utiliznd un pointer memorat ntr-un registru special al unitii centrale numit "Stack Pointer", mecanismul de acces fiind implementat hard pentru fiecare microcontroller. Respectiva memorie poart denumirea de "stiv" i poate fi plasat la orice adres valid de memorie(intern sau extern microcontroller-ului), dimensiunea ei avnd un caracter dinamic. 3. Salveaz informaiile ce sunt achiziionate, transferate sau prelucrate de ctre sistem formnd ceea ce ndeobte se numete "buffer" sau memorie tampon.
Prin sistem de operare n timp real nelegem ansamblul de rutine ce ofer principalele rutine de comand i control a sistemului, cu condiia respectrii teoremei de eantionare att n comad ct i n control 10 Prin task nelegem acele uniti de program executabile independent i care de regul implementeaz o singur funciune ce este apelat de ctre planificatorul (n cazul nostru, programul principal) sistemului. 11 Rutinele implementeaz poriuni mici de program, ce trateaz evenimente ce apar n funcionarea sistemului. Sunt caracterizate prin rapiditate n execuie i de regul sunt asociate unui anumit eveniment decelabil de ctre planificatorul sistemului de operare sau declaate de ctre o cerere de ntreruperi. 12 sunt poriuni de program apelate de ctre task-uri, i pot fi: dedicate, cazul celor activate de ctre un "anumit" task, comune, cele apelate de ctre mai multe task-uri i re-entrante, cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile. 13 Prin portabilitate nelegem gradul de reutilizare a programelor scrise pentru un anume sistem la o clas larg de sisteme analoge celui iniial.
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 aplicaiei i fluxurilor informaionale vehiculate. Tot n aceast categorie putem ncadra acele zone de "memorie comun", utilizate de ctre task-uri diferite ce ruleaz pe sistem, zon prin intermediul creia sunt pasate informaii de la un task la altul n scopul sincronizrii acestora. De asemenea n cazul unor sisteme multiprocesor se implementeaz stive circulare de mesaje ce asigur arbitrarea accesului procesoarelor la zona de memorie comun, implementndu-se aa numita csu potal ("Mail Box"), etc. Dimensiunea acestor zone poate fi att variabil ct i fix.

2.1.2 Instruciuni ale MC


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

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

50

MICROCONTROLLERE

2. Instruciuni de decizie (test), care implementeaz o ramificaie a grafului, n general, la nivelul limbajului main, aceastea sunt instruciuni ce implementeaz dou alternative (deci sunt de tip binar). n cazul microcontroller-elor nu ntlnim dect bifurcaii. 3. Instruciuni de tip repetitiv, sau instruciuni ce implementeaz o bucl de program i care sunt reprezentate prin instruciuni de test ce se execut fie la nceputul, fie la sfritul unui bloc de program Vom exemplifica pentru dou familii de microcontroller-e (Intel 8051 i PIC -"middle range") cele mai sus afirmate, urmnd ca n prezentarea de detaliu a familiilor de procesoare s tratm exhaustiv aceste instruciuni16. Familia 8051
Mnemonic
MOV A,<src> MOV <dest>,A MOV <dest>,<src> MOV DPTR,#data16 PUSH <src> POP <dest> XCH A,<byte> XCHD A,@Ri MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A MOVX A,@DPTR SWAP A ANL A,<byte> ANL <byte>,A ANL 17 < byte > <-data8 ADD A,<byte> ADDC A,<byte>

Familia PIC "middle range"


Aciunea Mnemonic
MOVF f,d MOVWF MOVLW

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

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

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

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

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

16

2. Programarea sistemelor cu MC

51

21

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

52

MICROCONTROLLERE

Familia 8051
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"


Aciunea Mnemonic Aciunea

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

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 <-1 fb <-0 f <- f + 1 f <- f - 1

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

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

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

Ultimul tip de instruciuni, 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 instruciuni) 24 ntoarcere din rutina de servire a ntreruperilor implic rearmarea sistemului de rspuns la cererile de ntrerupere 25 b este numrul bit-ului care va fi setat/resetat 26 Abrevieri (continuare): addr_rel repezint adresa relativ de salt specificat n instruciune

2. Programarea sistemelor cu MC

53

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

Familia PIC "middle range"


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

Mnemonic

Aciunea

DECFSZ f,d INCFSZ f,d

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

Menionm n ncheierea acestei enumerri a instruciunilor c n cazul microcontroller-elor nu exist instruciuni de intrare/ieire, cci porturile microcontroller-ului sunt "mapate"27 n spaiul de adrese de memorie intern. Ce rezult din aceasta? Accesul la elementele externe microcontroller-ului se face prin instruciuni avnd adrese relative la porturile acestuia, adic sunt instruciuni de transfer n cadrul memoriei interne a microcontroller-ului. Proiectarea programelor de funcionare ale unui sistem trece prin mai multe etape ce sunt ilustrate n figura 2.1. Aceast figur nu prezint prima i n acelai timp una dintre cele mai importante etape ale proiectrii, care const n analiza sistemic a procesului sau sistemului a crui comand se dorete a fi implementat. 1. 2. 3. 4. n cadrul acestei etape trebuie s fie evideniate: Funciunile sistemului, limea canalelor de comunicaie nesesare transferului infomaiilor, precum i locaiile de memorie int (destinaie) a acestora Identificarea acelor canale de transfer a informaiilor care asigur sincronizarea UC cu procesul condus Analiza prioritilor ce trebuie s fie atribuite canalelor de transfer la tratarea informaiilor pentru arespecta teorema eantionrii Se evideniaz similitudinile ce apar n funcionarea sistemului sunt grupate n raport cu criterii specifice, funcionale canalele de transfer a informaiilor i sunt conturate task-urile, rutinele i subrutinele ce implementeaz funciunile sistemului de comand i control. Sunt analizate variatele posibiliti de implementare hard a aplicaiei, respectiv sunt dedicate canalelor informaionale liniile porturilor, canalele temporizatoare, celelalte resurse diferitelor necesiti ale sistemului

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 obine o implementare a aplicaiei optimal.
27

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

54

MICROCONTROLLERE

Vom descrie pe rnd care sunt elementele necesare i ce rezult la parcurgerea fiecrei etape n cadrul procesului de proiectare a programelor de aplicaie n cazul utilizrii uneletelor specifice procesoarelor 8051. Asamblarea fiierelor surs scrise n limbaj main i salvate ca fiiere
EDITAREA FIIERELOR SURS (asamblare) (FORMAT ASCII) EDITAREA FIIERELOR SURS (n limbaj C) (FORMAT ASCII)

BIBLIOTECI (DIVERSE)

ASAMBLAREA FIIERELOR SURS

COMPILAREA FIIERELOR 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 proiectrii programelor pentru un sistem dedicat


FIIER OBIECT RELOCATABIL

FIIER SURS

MACRO ASSEMBLER A51 FIIER LISTING

Figura 2.2 Rolul macro/asamblorului n generarea fiierelor obiect

2. Programarea sistemelor cu MC

55

ASCII este descris n figura 2.2. n cazul utilizrii unor module de program scrise n C, fiierele surs vor fi compilate rezultnd n urma compilri aceleai fiiere ca i n cazul asamblrii. n figura 2.3 prezentm care sunt fiierele de intrare i cele de ieire n cazul utilizrii programului link-editor Dup "legarea" utiliznd link-editorul a modulelor de program rezult module obiect absolute care vor fi cu ajutorul debbuger-ului, sau al unui simulator sau al unui emulator, ncrcate i testate pentru a se evidenia intercorelaiile ce se stabilesc ntre programe i sistemul controlat. Pentru transferul fiierelor fie ctre sistemul de dezvoltare, fie ctre un programatorul universal este necesar s obinem plecnd de la fiierul obiect absolut fiiere n formate transferabile. Aceast funcie este ndeplinit de convertorul OHS51. (vezi figura 2.4) Programul LIB51 ce face parte din modulul de programe specifice microcontroller-elor 8051 i el permite generarea unor biblioteci cu module de
FIIERUL OBIECT 1 FIIERUL OBIECT 2 LINK -EDITORUL SPECIFIC PROCESOARELOR 8051 MODULUL OBIECT ABSOLUT

FIIERUL OBIECT n BIBLIOTECA

FIIERUL CU REFERINE NCRUCIATE

Figura 2.3 Rolul link-editorului n generarea fiierelor obiect absolute

program, adugarea i extragerea unor module din bibliotec.

FIIERUL FORMAT INTEL - HEX FIIERUL OBIECT ABSOLUT FIIERUL SIMBOLIC DIGITAL RESEARCH HEX FIIERUL 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:] mnemonic8051 [operand][,operand] [;comentariu] <CR><LF>28 drept separator de cmp sunt utilizate caracterele spaiu sau tabulatorul. Prin etichet nelegem irul de caractere ASCII ce se sfrete prin caracterul ":". Operanzii pot fi clasificai astfel: Exemple: START: JMP LOOP: DJNZ R7,LOOP ;R7 este simbolul corespunztor registrului R7, LOOP este simbolul corespunztor ;adresei de salt (acesta este un comentariu) Utilizarea etichetelor nu este opional atunci cnd la adresele corespunztoare acestora se face referire n program. Ele sunt de asemenea utile pentru a da o mai mare lizibilitate programelor. mpreun cu comentariile ofer un real ajutor att pentru proiectant ct i pentru cel ce analizeaz ulterior programele. Numerele care sunt utilizate n cadrul programelor surs pot fi scrise n urmtoarele formate: Baza Sufix Caractere acceptate Exemple Hexazecimal H, h 0,1,,9,A,B,C,D,E,F 1234H, 0E7H29, 0A345h Zecimal D,d 0,1,2,3,4,5,6,7,8,9 1234, 1234D,023d Octal O,o 0,1,2,34,5,6,7 123O, 256O,111Q,125q Binar B,b 0,1 11011101B irurile sunt expresii ce includ maximum dou caractere ncadrate ntre apostrofuri. Exemple: 'A' evaluat ca 0041H 'AB' evaluat ca 4142H 'ab' evaluat ca 6162H, etc.
28

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

MAIN

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

2. Programarea sistemelor cu MC

57

Simboluri: reprezint valori numerice, adrese sau nume de registre ce permit mai buna lizibilitate a programelor. Atributele ce pot fi date simbolurilor sunt: TYP: cu valorile CODE, DATA, BIT sau TYPELESS sau REGISTER SEGMENT: orice simbol conine i untip de segment. SCOPE: exprim validitatea simbolului, ea poate fi local (valabil doar n rutina sau segment de program n care este specificat, public, caz n care n toate modulele de program poate fi referit i este recunoscut, external, caz n care definirea simbolului este realizat ntr-un alt fiier surs sau address symbol, VALUE: reprezint valoarea numeric corespunztoare simbolului, aceasta depinde de adresa tipului de simbol respectiv. CHANGEALE: Aceste simboluri pot fi redefinite prin intermediul directivei SET. Simbolurile care nu au fost definite utiliznd directiva SET nu pot fi redefinite Asamblorul A51.EXE admite drept nume de simboluri irurile de caractere de pn la 31 de caractere, primul trebuind s fie obligatoriu un caracter alfanumeric: 'A','a','Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric. Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce definesc resurse ale microcontroller-ului respectiv. Iat cteva dintre acestea: A =acumulatorul, R0,R1,..R7 sunt registre generale ale bancului curent, DPTR este simbolul corespunztor registrului de adresare "Data Pointer", C este flag-ul de transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la nmulire i mprire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente. Operatorii aritmetici recunoscui sunt: Operatorul Exemplu Semnificaia +, +5 +1 +0Ah Semnul numrului +,2+10-1 Reprezint operatorul aplicat * 1234H*5 Repezint operatorul de multiplicare / 45/9 Repezint operatorul de mprire MOD 17 MOD 5 Reprezint operatorul de mprire ntreag ^ 2^3 Reprezint operatorul de exponeniere () (2+5)*34 Precizeaz precedena operaiilor Operatori binari utilizai sunt: Operator Exemplu Semnificaie NOT NOT 5 Complementul lui 5 HIGH HIGH 1234H Selecteaz partea mai semnificativ, respectiv 12H LOW LOW 1234H Selecteaz partea mai puin semnificativ, respectiv 34H a numrului 1234H

58

MICROCONTROLLERE

Operator SHR, SHL AND OR XOR

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

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

Operatorii relaionali sunt acei operatori ce compar doi operanzi. Rezultatul comparaiei este ADEVRAT sau FALS, valori ce sunt returnate n urma efecturii operaiei. Dintre aceti operatori amintim: Operator >= ,GTE <= ,LTE <> , NE = , EQ < , LT > , GT Exemplu 8>=17 8 LTE 45 8 NE 45 8 EQ 45 8 LT 45 8 GT 45 Semnificaie Mai mare sau egal. Valoarea returnat: FALS Mai mic sau egal. Valoarea returnat: ADEVRAT Nu este egal. Valoarea returnat: ADEVRAT Egal. Valoarea returnat: FALS Mai mic dect. Valoarea returnat ADEVRAT Mai mare dect. Valoarea returnat FALS

Precedena operatorilor este cea cunoscut i la alte limbaje de programare, parantezele, apoi operatorii unari, adunarea i scderea, nmulirea i mprirea, deplasarea, operatorii logici i n final operatorii relaionali. Datele imediate, respectiv valorile numerice incluse n cadrul instruciunii sunt reprezentate cu avnd caracterul '#' n fa. Exemple: MOV A,#0ABH ;ncarc n A valoarea ABH, respectiv 171D MOV DPTR,#8000H ;ncarc valoarea 8000H n DPTR ANL A,#128 ;Realizeaz operaia I logic ntre valoarea memorat n acmulator i valoarea ;128D MOV R0,#DAT ;ncarc n registru R0, valoarea simbolului DAT Adresarea datelor poate fi fcut n dou moduri distincte: 1. Direct caz n care informaia de adres este specificat chiar n codul main respectiv 2. Indirect, caz n care simbolul inclus n codul main reprezint adresa la care este memorat operandul utilizat de ctre instruciune. Pot fi utilizai: registrele R0 i R1 sau registrul DPTR. Spaiul de adrese este funcie de tipul de microcontroller. Exemplele incluse pe CD detaliaz locaiile i adresele de memorie inclusiv cele corespunztoare simolurilor corespunztoare fanioanelor microcontroller-elor din familia 8051. Directivele de asamblare admise sunt prezentate n enumerarea de mai jos: SEGMENT permite declararea unui segment ce poate fi relocatat. Sintaxa este:

2. Programarea sistemelor cu MC

59

Nume_segment_relocatabil SEGMENT Tip_segment [Tip_relocatabil] EQU permite specificarea unei valori pentru o variabil utilizat n faza de asamblare SET permite specificarea unei valori pentru o variabil utilizat n faza de asamblare, valoare ce poate fi ulterior modificat DATA reprezint zona de memorie intern avnd adresele ntre 0 i 127 IDATA reprezint zona adresabil indirect din memoria intern a microcontroller-ului 0 la 127 sau 0 la 255 inclusiv. XDATA reprezint zona adresabil pe byte situat n memoria extern microcontroller-ului BIT reprezint zona adresabil pe bit situat ntre 20H i 27H inclusiv CODE reprezint spaiul alocat codului (programelor executabile) Rezervarea spaiului de memorie este realizat prin intermediul dispoziiilor: [Nume_bloc_memorie:] DS Dimensiune bloc de memorie [Nume_variabil_byte:] DB Valoare de iniializare byte [Nume_variabil_cuvnt:] DW Valoare de iniializare cuvnt [Nume_variabil_bit:] DBIT Valoare bloc bii Dispoziiile ce pot fi incluse se pot adresa i link-editorului, ele trebuind s fie specificate n programul surs. Acestea sunt: PUBLIC directiv ce declar o variabil sau bloc de memorie "vizibil" n toate modulele de program surs. EXTRN directiv ce precizeaz faptul c variabila specificat se afl n alt modul de program, implicit alt fiier surs. Se precizeaz tipul acestei variabile ce poate fi numele unei rutine,deci este de tipul CODE sau o variabil din memorie, deci DATA. NAME directiv ce definete numele unui modul de program Dintre dispoziiile de control a asamblrii menionm: ORG adres Dispoziie ce specific adresa de la care se locateaz codul scris n continuare END Indic sfritul unui modul de program RSEG Indic nceputul zonei registrelor generale (000H) CSEG Indic nceputul memoriei de program (000H) DSEG Indic nceputul zonei memoriei de date (memoria intern - 000H) XSEG Indic nceputul zonei de memorie externe a microsistemului ISEG Indic nceputul zonei de memorie interne adresabile indirect BSEG Indic nceputul zonei adresabile pe bit USING Specific bancul de registre generale utilizat Dm n continuare doar un exemplu ce ilustreaz cum funcioneaz cteva dintre aceste directive. LOC OBJ LINE SOURCE 0020 1 VAL EQU 20H ;Iniializeaz variabila byte VAL cu 20H 0010 2 VAL1 EQU 16 ;Iniializeaz variabila byte VAL1 cu 16 3 DSEG

60

MICROCONTROLLERE

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

2. Programarea sistemelor cu MC

61

Alturi de dispoziiile mai sus menionate, pentru uurarea proiectrii programelor sunt admise o serie de macro-instruciuni, specifice asamblorului, care asigur asamblarea condiionat a fiierelor surs de program. Dintre avantajele pe care un astfel de stil n programare le are, amintim: Reduce substanial frecvena erorilor acolo unde aceleai secvene de instruciuni sunt utilizate. Scopul simbolurilor utilizate n MACRO-uri este limitat doar la macro-ul respectiv Este util n special pentru crearea unor tabele de coduri simple. [list_parametrii_formali]30 Nume_simbol31 [,Nume_Simbol1][] Numr_repetiii32

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

Parametri formali sunt variabile utilizate drept parametri n cadrul MACRO-ului Variabil/simbol utilizat n spaiul macro-ului 32 Variabil ce precizeaz de cte ori se insereaz n codul surs blocul de instruciuni cuprins ntre REPT i ENDM

62

MICROCONTROLLERE

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

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

64

MICROCONTROLLERE

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

0000 E599

4 5

2. Programarea sistemelor cu MC

65

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

Funciunea

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

Comanda de adugare (ADD) are sintaxa: ADD nume_fiier <CRLF> [(nume_modul1,nume_modul2,)] TO nume_bibliotec

Comanda de tergere (DELETE) are sintaxa DELETE nume_bibliotec (nume_modul) <CRLF> Sistemele de dezvoltare sunt deosebit de diverse. Ele dispun n afar de microcontroller i de alte elemente cum sunt porturile suplimentare, de obicei porturi de tip "registru" pe ieiri i "buffer"-e pe intrri. Avnd n vedere caracteristicile specifice microcontrollerelor selecia porturilor este realizat n spaiul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru microcontroller-ele Atmel seriile 89Atxxxx (1051,2051,4051), ci variantele 89Atxx (51,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas, etc. n figura 2.5 prezentm un sistem de dezvoltare dotat cu un monitor Franklin ce are implementat o consol via interfaa serial. Sistemul dispune de 2 porturi de ieire 1 port de intrare, precum i un port de comunicaie cu un afior cu cristale lichide (LCD) i un decodificator pentru circuite de intrare/ieire cu 8 linii de selecie. Sistemul permite dezvoltarea unei aplicaii care poate include toate elementele unui sistem dedicat. Evident dac se dorete, pot fi adugate convertoare analog-digitale i digital analoge, precum circuite de interfa diverse. Avantajul principal al acestui sistem const n aceea c el permite conectarea microcontroller-ului la procesul controlat ceea ce face ca utilizatorul s poat analiza, depana sau chiar reproiecta anumite programe chiar n contextul dat, avnd la dispoziie toate semnalele de excitaie reale.

66

MICROCONTROLLERE

Memorie EEPROM

Zona de dezvoltare Microcontroller Memorii EPROM /SRAM

Porturi de intrare

Porturi de ieire

Figura 2. 5 Sistem de dezvoltare cu microcontroller PCB80C552

Programul monitor "mt.exe"funcioneaz mpreun cu monitorul Franklin i prezint cteva comenzi: A [adres] <CR,LF> Asambleaz cod 8051 de la adresa specificat BD [ALL] < numr_break_point> Invalideaz toate break point-urile sau cel specificat prin numr ce reprezint chiar indexul acestuia BE [ALL] < numr_break_point> Valideaz break point-urile. BK [ALL] <numr_break_point> terge toate break point-urile sau doar cel specificat BL Listeaz break point-urile setate BS <adres>Seteaz (stabilite) un break point la adresa precizat DB (Display Bits) <adres_start> <adres_stop> Afieaz zon memorie accesibil pe bit ntre adresele de start i stop DD (Display Data) <adres_start> <adres_stop> Afieaz zon memorie accesibil pe octet ntre adresele de start i stop aflat n memoria intern a MC DI (Display Indirect Data) <adres_start> <adres_stop> Afieaz zon memorie accesibil pe octet indirect ntre adresele de start i stop DX (Display Extended Data) <adres_start> <adres_stop> Afieaz zon memorie accesibil pe octet plasat n afara MC, ntre adresele de start i stop

2. Programarea sistemelor cu MC

67

DC (Display Code) <adres_start> <adres_stop> Afieaz zon memorie accesibil pe octet n memoria de program i plasat ntre adresele de start i stop FILLB/FILLD/FILLI/FILLX/FILLC <adres_start> <adres_stop> <valoare> Directiv de umplere zon de memorie, cu aceleai semnificaii ca i la Dispoziia Display pentru diversele zone de memorie G <adres_start> <adres_break> Dispoziie de execuie program ntre adresa de start i cea de break ? Dispoziie de help "on-line" H<numr1><numr2> Dispoziie de calcul n hexazecimal valoare sum/diferen numr1, numr2 T <adres_start> execut pas cu pas instruciunile programului cu afiarea tuturor registrelor microcontroller-ului X[<nume_registru>] afieaz toi/registrul specificat F1 tast special ce permite ieirea din program F2 tast special care permite ncrcarea programelor n format Intel-HEX via interfaa serial (consola) F3 tast special ce permite salvarea n cadrul unui fiier al crui nume este specificat de ctre operator a caracterelor recepionate via interfaa serial (consola)

2.1.4 Instrumente software de proiectare: MC PIC


Firma Microchip care produce microcontroller-ele PIC a adus pe pia produsul MPLAB drept mediu integrat de dezvoltare/simulare (IDE Integrated Development Environment) pentru procesoarele sale precum i Starter-Kit-ul corespunztor fiecrui microcontroller. Mediul MPLAB cuprinde urmtoarele componente: Editorul fiierelor surs Asamblorul Compilatorul C Linkeditorul Editorul de stimuli StarterPIC sistemul de dezvoltare minimal pentru dezvoltarea aplicaiilor Simulatorul/Emulatorul microcontroller-elor PIC pentru diversele familii Programatorul microcontrollerelor ce dispun de memorie EPROM, EEPROM sau Flash. Asamblorul este oferit att integrat n mediu ct i separat att versiunea DOS ct i versiunea Windows pe 16 bii. Mediul integrat dispune de ferestre ce permit att editarea programului surs, vizualizarea fiierului list rezultat n urma asamblrii, fereasta ce vizualizeaz memoria intern de program i de date a microcontroller-ului,

68

MICROCONTROLLERE

fereastra cu registrele acestuia (zona SFR) i fereastra "trace", ce urmrete evoluia programului i cea corespunztoare memoriei EEPROM de care microcontroller-ele din familia PIC dispun. Meniurile mediului integrat sunt n numr de 3 i anume:cel corespunztor funciunilor de editare i salvare fiiere i proiecte, cel corespunztor procesrii fiierelor surs, respectiv asamblrii sau compilrii, al link-editrii fieirelor obiect i cel corespunztor testrii/simulrii programelor scrise, ce permite execuia pas cu pas, admite editarea i administrarea de stimuli sistemului precum i n final, programarea microcontroller-ului respectiv. n ceea ce nsemn dispoziiile de asamblorului MPASM, apar mici deosebiri fa de asamblorul A51.EXE. n continuare vom prezenta cteva dintre aceste deosebiri, o list complet de referin o putei gsi pe CD. Sistemul de numeraie Zecimal Hexazecimal Octal Binar Caracter (ASCII) Sintaxa D'<digii>, .<digii> H'<digii>', 0x< digii > O'< digii >' B'< digii >' '<caracter>', A'<caracter>' Exemple D'123', .255 H'EF' , 0xE32A O'1234' B'11010011' 'V', A'u'

Etichetele sunt exprimate prin iruri de caractere i ele identific punctele de salt sau cele la care sunt plasate rutinele scrise. Directiva CONSTANT #DEFINE EQU #INCLUDE PROCESSOR SET #UNDEFINE VARIABLE IF WHILE Descriere Definete un simbol drept constant n program Definete text de substituie Definete o constant Include un fiier surs Definete tipul procesorului Asigneaz o valoare unei variabile (poate fi apoi redefinit) Renun la definiia anterior precizat prin #DEFINE Declar un simbol drept variabil Definete o macroinstruciune de decizie Realizeaz buclarea atta timp ct condiia testat la nceput este adevrat Sintaxa Constant<etichet>=[<expresie>, <etichet>=<expresie>,..] #define <nume> [<arg>,<arg>,..] <etichet> equ <expresie> include <nume_fiier> Processor <tip_procesor> <etichet> set <expresie> #undefine <etichet> variable <etichet>[=expresie] if <expresie> while <>expresie

2. Programarea sistemelor cu MC

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 spaiu de memorie Umple o zon de memorie cu o anume informaie mpacheteaz n memoria de program un ir Creaz o valoare numeric sau una text Declar un byte Declar o dat n EEPROM Definete o tabel Declar o dat un cuvnt Definete un MACRO Ieire dintr-unMACRO Export definiia unei etichete Specific adresa maxim pentru memoria RAM

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

Opiunile de link-editorului MPLINK atunci cnd este invocat sunt: /o nume_fiier /m nume_fiier /l pathlist /k pathlist /n length /h , /? /a hexformat /q /d specific fiierul de ieire specific generarea fiierului "hart" nume_fiier specific (adun)calea la fiierul bibliotec ce este link-at specific (adun) calea la fiierul script utilizat de linker specific numrul de linii llistate pe pagin afieaz fiierul de ajutor corespunztor link-erului specific formatul HEX pentru fiierele de ieire iese din link-are evit crearea fiierului listing absolut

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

Figura 3.1 Schema bloc a unui microcontroller Motorola

3. Microcontrollere Motorola

71

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

3.1

MC M68HC05

3.1.1 Memoria intern


MC din familia Motorola, ca i toate circuitele MC, sunt echipate cu memorie RAM, ROM i EPROM (OTP). Fiecare din memorii are o capacitate specific fiecrui tip particular de circuit. Memoria poate fi format din 176 304 octei de RAM, 240 octei de ROM i 7600 7744 octei de memorie programabil (EPROM sau OTP. Memoria RAM este folosit pentru stocarea temporar a datelor. n modul de lucru bootstrap (specific MC Motorola), memoria RAM poate fi ncrcat cu informaie de tip program prin portul SCI, urmnd ca programul s fie executat din RAM. Memoria ROM este folosit pentru a stoca programe. Modulul ROM conine i programul care coordoneaz ncrcarea RAM prin portul SCI. Memoria EPROM (OTP), ca i memoria ROM, conine programe i variabile specifice aplicaiei cu diferena c acestea sunt nscrise de utilizator, nu de fabricant. n acelai spaiu de adresare se afl memoria de diferite tipuri, registre I/O i registre de control i stare, privite ca locaii de memorie. Pentru a ti adresa la care se afl fiecare element se utilizeaz o reprezentare numit harta memoriei. Harta memoriei pentru un membru al familiei 6805 (MC68HC705J1A) este dat n tabelul 3.1. Pentru a putea lucra cu un MC particular trebuie studiat alocarea (maparea) memoriei din catalog pentru acel MC, tabelul 3.1 este doar orientativ. Tabelul 3.1 Maparea memoriei la MC68HC05J1A Coninut Date port A Date port B Nefolosit DDR pentru port A DDR pentru port B Adresa (H) 0000 0001 0002-0003 0004 0005

72

MICROCONTROLLERE

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

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

3.1.2 Unitatea central


Unitatea central realizeaz prelucrarea datelor pe 8 bii la o frecven intern de 2MHz (tact extern de 4MHz), are o magistral de adrese de 11-14 bii i conine registre i unitatea aritmetic i logic, figura 3.2. n general, la MC Motorola, bus-ul de adrese i de date nu este disponibil n exterior. Unitatea central are o arhitectur cu bus unic pentru date i instruciuni (von Neumann) i conine urmtoarele registre: Registrul Acumulator (Accumulator - A) este un registru pe 8 bii de uz general. El nu este afectat de Reset. Registrul index (Index Register - X) este un registru pe 8 bii folosit la adresrile indexate. Nu este afectat de Reset. Registrul indicator de stiv (Stack Pointer - SP) este un registru de 13 bii care conine adresa urmtoarei locaii libere n stiv. Dup Reset indicatorul de stiv devine 00FFh.

3. Microcontrollere Motorola

73

Unitatea central 6805


Acumulator Registru index Indicator de stiv Numrtor de program (PC) Registru de condiii UAL Unitatea aritmetic i logic

Figura 3.2. Unitatea central 6805

Registrul numrtor de program (Program Counter - PC) este un registru de 13 bii care conine adresa urmtoarei instruciuni de executat. Dup execuia instruciunii registrul este incrementat. Un salt sau o ntrerupere determin ncrcarea PC cu alt valoare dect adresa urmtoarei locaii. Dup Reset registrul PC este ncrcat cu coninutul locaiilor 3FFEh i 3FFFh (la MC68HC705J1A). Registrul de condiii (Condition Code Register - CCR) este un registru de 8 bii (din care sunt folosii 5) cu urmtoarea semnificaie: Bitul 0 -LSB, (Carry/Borrow Flag) poziionat dac o adunare produce un transport sau dac la o scdere este nevoie de mprumut. Bitul 1 (Zero Flag), poziionat dac rezultatul unei operaii este zero. Bitul 2 (Negative Flag), poziionat dac rezultatul unei operaii este negativ (bitul 7 este 1). Bitul 3 (Interrupt Mask Bit) cnd este 1 sunt invalidate ntreruperile. Dac apare o ntrerupere cnd acest bit este 1, ea este memorat pn bitul devine 0; atunci se salveaz registrele UC n stiv. Dup Reset bitul este setat n 1 i poate fi poziionat n 0 cu instruciunea CLI. Bitul 4 (Half-Carry) este poziionat cnd apare un transport de la bitul 3 spre 4 n acumulator la o operaie de adunare cu sau fr Carry. Este util la operaii BCD.

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

74

MICROCONTROLLERE

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

3.1.3 Moduri de adresare


Unitatea central folosete 8 moduri de adresare pentru o ct mai mare flexibilitate n utilizare: 1. adresare inerent - instruciunile nu au operand, cum este ntoarcerea din ntrerupere (RTI) sau STOP. Instruciunile inerente au lungimea de un octet. 2. adresare imediat - instruciunile au un operand, care este o valoare imediat utilizabil ntr-o operaie cu acumulatorul sau cu registrul index. Instruciunile au doi octei, primul fiind codul, iar al doilea valoarea imediat. 3. adresare direct - instruciunile pot avea acces la primele 256 de locaii de memorie. Instruciunile sunt pe doi octei, primul este codul iar al doilea este octetul cel mai puin semnificativ al adresei operandului; octetul cel mai semnificativ este considerat implicit 00h. 4. adresare extins - instruciunile sunt pe trei octei i pot adresa orice locaie de memorie. Primul octet este codul, al doilea este adresa (parte HIGH) iar al treilea este adresa (partea LOW). 5. adresare indexat fr offset - instruciunile au un octet i pot avea acces la locaii cu adresa variabil din registrul index (care conine partea LOW a adresei). Pentru partea HIGH se folosete 00h, aa nct aceesul este n zona 0000-00FFh. 6. adresare indexat cu offset pe 8 bii - instruciunile au doi octei, fiind accesibile locaii cu adresa variabil n zona primelor 511 locaii. Unitatea central adun octetul din instruciune la registrul index (fr semn) i se obine adresa efectiv a operandului. Un exemplu de utilizare al acestui mod de adresare este selectarea unui element k dintr-un tabel de n elemente. Valoarea

3. Microcontrollere Motorola

75

k este n registrul index, iar adresa nceputului tabelului este al doilea octet al instruciunii. 7. adresare indexat cu offset pe 16 bii - instruciunile au trei octei, fiind accesibile toate locaiile. UC adun fr semn registrul index la cei doi octei din instruciune i se obine adresa efectiv a operandului (primul octet dup codul instruciunii este octetul HIGH). 8. adresare relativ este folosit n instruciunile de salt. La un salt relativ, se adun (cu semn) octetul care urmeaz dup codul instruciunii la coninutul registrului Program Counter. Se pot face salturi relative n gama 127 de octei nainte sau napoi.

3.1.4 Setul de instruciuni


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

76

MICROCONTROLLERE

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

3.1.5 Sistemul de ntreruperi


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

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

3. Microcontrollere Motorola

77

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

3.1.6 Interfee i periferice on-chip


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

78

MICROCONTROLLERE

bit. Pentru a economisi timpul unitii centrale, interfeele pot lucra cu unitatea central prin intermediul ntreruperilor. b. Portul serial asincron SCI (Serial Communications Interface) SCI este un transmitor receptor asincron universal (UART) cu posibilitatea lucrului full-duplex. Pentru un transfer bidirecional sunt suficieni doi pini. Cu circuite de translaie de nivel RS232 se pot face transferuri la distane suficient de mari. Se poate programa una din 32 viteze de transmisie i lungimea caracterului; se pot valida separat transmitorul i receptorul; se pot genera ntreruperi n diferite situaii; se poate detecta eroare de cadrare la recepie. Formatul datelor este ca la orice transmisie asincron (RS232 sau RS422). Linia este n stare MARK, iar transmisia unui caracter este semnalat de trecerea liniei n stare SPACE pe durata bitului de START. Urmeaz 8 sau 9 bii de date i un bit de STOP. Datele care se doresc a fi transmise sunt scrise n registrul de date al SCI (SCDR), apoi se valideaz transmisia prin poziionarea bitului TE (Transmit Enable) n registrul de control al SCI (SCCR2). Dup ce cuvntul a fost transmis, se poziioneaz bitul TDRE (Transmit Data Register Empty) n registrul de stare SCSR (SCI Status Register). Se indic astfel c poate fi transmis un nou cuvnt. Se pot transmite caractere speciale, cum ar fi BREAK, care ine linia n stare SPACE (se transmite un ir de 0) dac se poziioneaz bitul SBK n SCCR2 sau un caracter care ine linia n stare MARK. Golirea registrului de date semnalizat de TDRE sau de TC (Transmission Complete) din SCDR poate genera o ntrerupere. Datele sunt recepionate n SCDR, la recepia complet fiind poziionat bitul RDRF (Receive Data Register Full) n SCSR. Pentru eliminarea recepiilor false fiecare bit de start este eantionat i citit de 16 ori; orice nepotrivire a eantioanelor duce la respingerea acestui bit. Dac nu se recepioneaz bitul de STOP se anun o eroare de cadrare prin poziionarea bitului FE n SCR. ntreruperile la recepie pot fi generate dac bitul RDRF din SCSR indic recepia unui caracter, dac este o eroare de vitez de recepie (prin recepia unui caracter nainte ca cel precedent s fi fost citit) sau dac s-a recepionat un caracter special format numai din valori de 1. Structura registrului de control SCCR1 este: Bit 7 este al 9-lea bit recepionat dac s-a definit o transmisie pe 9 bii Bit 6 este al 9-lea bit de transmis dac s-a definit o transmisie pe 9 bii Bit 4 comand lungimea caracterului, 8 sau 9 bii Bit 3 este un bit de trezire care comand ce fel de condiie trezete SCI Structura registrului de control SCCR2 este: Bit 7 - TIE Transmit Interrupt Enable - valideaz ntreruperile cerute de TDRE Bit 6 - TCIE Transmit Complete Interrupt Enable - valideaz ntreruperile cerute de TC Bit 5 - RIE Receive Interrupt Enable - valideaz ntreruperile cerute de RDRF

3. Microcontrollere Motorola

79

Bit 4 - ILIE Idle Interrupt Enable Bit -valideaz ntreruperile cerute de caracterul ir de 1 Bit 3 - TE Transmit Enable - valideaz transmisia Bit 2 - RE Receive Enable - valideaz recepia Bit 1 - RWU Receiver Wakeup Enable - pune receptorul n stare de ateptare Bit 0 - SBK Send Break - trimite caracterul BREAK Structura registrului de stare SCSR este: Bit 7 - TDRE Transmit Data Register Empty - registru de transmisie gol Bit 6 - TC Transmission Complete - transmisie complet Bit 5 - RDRF Receive Data Register Full - registru de recepie plin Bit 4 - IDLE - s-a recepionat un ir de 1 Bit 3 - OR Receiver overrun - eroare de vitez de recepie Bit 2 - NF Receiver Noise - s-au detectat perturbaii n datele citite (prin eantionarea bitului de START) Bit 1 - FE Framing Error - eroare de cadrare. Registrul ratei de transfer este descris n tabelul 3.2.
Tabelul 3.2 Coninutul registrului ratei de transfer

Bit 5 0 0 1 1

Bit 4 0 1 0 1

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

Bit 2 0 0 0 0 1 1 1 1

Bit 1 0 0 1 1 0 0 1 1

Bit 0 0 1 0 1 0 1 0 1

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

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

80

MICROCONTROLLERE

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

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

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

+1
Port I/O

0 1 2
MC master

nSS SCK MOSI MISO


Dispozitiv slave

nSS SCK MOSI MISO


Dispozitiv slave

Figura 3.3 Conexiune SPI

3. Microcontrollere Motorola

81

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

O ntrerupere poate fi generat n urmtoarele situaii:

82 Divizare cu 4 Numrtor de 8 bii

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 RT1 RT0

Numrtor de 7 bii

Selecie ieire

Numrtor de 3 bii COP Figura 3.4 Timer 6805

Generare de Reset intern al UC

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

RT1 0 0 1 1

RT0 0 1 0 1

Perioada de ntrerupere 8.2ms 16.4ms 32.8ms 65.5ms

Perioada n care COP trebuie resetat 57.3ms 114.7ms 229.4ms 458.8ms

Un reset al COP se poate realiza prin scrierea bitului 0 de la adresa 07F0h (COPR COP Register). MC din seria 68705 sunt echipate cu un timer care are posibilitatea de captur i comparare. Captura poate nregistra momentul la care apare un eveniment extern (o tranziie pe pinul TCAP). n acest moment memoreaz coninutul registrelor timer-ului n registrele de captur. Memorarea registrelor timer-ului la tranziii de aceeai polaritate a TCAP poate determina perioada unui

3. Microcontrollere Motorola

83

semnal, iar la tranziii de polaritate opus poate determina limea unui impuls. Polaritatea de declanare este programabil. Prin comparare se poate genera un semnal de ieire cnd numrtorul timerului atinge o valoare selectat. La fiecare 4 tacte se compar valoarea numrtorului cu cea scris n registrul de comparare. Dac este egalitate se genereaz un semnal TCMP. e. Portul PWM Modulaia impulsurilor n lime (Pulse Width Modulation) are multe aplicaii, mai ales n comanda motoarelor de curent continuu sau a surselor de alimentare. Din acest motiv unele MC includ n structura lor un modulator PWM ca interfa. Circuitul MC68HC05D9 conine 5 canale PWM de cte 6 bii care sunt realizate cu ajutorul unui numrtor de 6 bii, un registru de control PWM i 5 registre de date care formeaz 5 linii PWM ce sunt disponibile la pinii portului D (figura 3.5).
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) Numrtor de 6 bii

PWM 3

PWM2 (000Bh)

PWM 2

PWM1 (000Ah)

PWM 1

PWM0 (0009h)

PWM 0

n registrul de mod sunt 5 bii care valideaz modulul PWM astfel nct semnalele PWM s fie livrate pe la pinii portului D. Tot n registrul de mod mai este un bit, SCIB, care selecteaz dac la adresa 000Dh s fie date pentru PWM sau rata de divizare pentru SCI. Dac nu sunt folosite ca ieiri PWM, liniile portului D pot fi folosite ca intrri/ieiri obinuite. Registrul de mod PWM se afl la adresa 0008h.

84

MICROCONTROLLERE

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

D+ D-

spre HUB sau alt dispozitiv

Registre USB

Stabilizator 3,3V

BUS INTERN

Figura 3.6 Structura intern a portului USB

Transceiverul are o ieire diferenial care poate lucra cu 3 stri pentru a permite transferul de date bidirecional de tip full-duplex. Receptorul trebuie s fie de asemenea cu intrri difereniale. Comanda interfeei USB se realizeaz prin intermediul a 3 registre de comand iar starea poate fi citit dintr-un registru de stare. Exist un registru de adres i 24 de registre de date. Modul de funcionare n ntreruperi este programat prin registrul de ntreruperi. Interfaa USB poate lucra n modul de economie de energie dac nu exist trafic pe linii un anumit interval de timp. Apariia unei date la recepie sau emisia unei date de ctre UC produce ieirea din starea inactiv.

3. Microcontrollere Motorola

85

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

Structura unui afiaj LCD este artat n figura 3.7. Segmente (SEG 0-39)
Planul din spate (BP 0-15)

Figura 3.7 Afiaj LCD

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

Adresa 200 201 202 203 204 205 206 207

Bit0 0 0 1 1 1 1 1 0

Bit1 0 1 0 0 1 0 0 0

Bit2 1 0 0 0 1 0 0 0

Bit3 0 1 0 0 1 0 0 0

Bit4 0 0 1 1 1 1 1 0

86

MICROCONTROLLERE

Punctul de sus a lui A de exemplu, se scrie cu BP0 i SEG2 active. Semnalele SEG i BP sunt periodice i baleiaz tot timpul afiajul pentru a menine punctele aprinse. Frecvena semnalelor de aprindere a punctelor este de 32kHz, iar frecvena unui cadru este de 62,5Hz. Dimensiunea panourilor LCD difer, de aceea difer i consumul de curent. Tensiunea spre afiaj este obinut prin nserierea unor rezistene, nseriere care poate fi comandat soft. Schema bloc a interfeei pentru LCD este dat n figura 3.8
Magistrala intern de adrese si date

Registru de control

RAM pentru display 128x5bit

Registru de date LCD (40bii)

Driver pentru planul din spate BP0-BP15

Driver de segmente

SEG0-SEG39 Figura 3.8 Schema bloc a intefeei LCD

3.1.7 Managementul puterii


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

3. Microcontrollere Motorola

87

ntreruperile sunt validate automat. Toate registrele i memoria rmn cu datele avute la intrarea n starea WAIT.

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

3.1.9 Programarea EPROM


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

PA
PA0PA7

SCI PD PD1 PD0 Circuite de modificare de nivel RS232

D0-D7

PB
PB0PB7

A8-A12

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-A12) se stabilesc la portul C (PC0-PC4). Liniile cu datele de nscris se stabilesc la portul B. Registrul folosit pentru programarea EPROM-ului este registrul de programare (PROG). Bit 2- LAT (Latch Enable Bit), poziionat n 1, comand ca liniile de adrese i date s fie bufferate pentru ca n urmtorul ciclu s se fac o scriere a EPROM-ului; Bit 0 (PGM) valideaz tensiunea Vpp pentru programarea EPROM-ului.

Se pune problema cum se poate ca un MC care nu a fost programat s lucreze sub comanda unui program ca s poat avea acces la programarea unui registru. Pentru programare MC trebuie s lucreze n modul bootstrap, mod n care MC intr prin forarea liniei IRQ n timpul unui RESET. Programe simple utilizator pot fi introduse n RAM prin interfaa SCI (Serial Communications Interface) i rulate. Programul se transmite prin interfaa serial, dup care se ruleaz programul din RAM. Parametrii comunicaiei implicii la Reset sunt 8 bii de date i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint numrul total de octei care vor fi trimii. Coninutul EPROM-ului poate fi verificat prin citirea lui tot prin SCI. Coninutul EPROM-ului se poate ascunde, aa nct s nu mai poat fi citit din exterior, prin poziionarea unui bit de securizare n registrul de opiuni (adresa 1FDFh).

3.2

MC M68HC08

Familia 6808 urmeaz n timp familiei 6805, bineneles cu mbuntiri care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu cele din familia descris n subcapitolul anterior (3.1). Ca mbuntiri ale UC 6805 pot fi menionate: indicatorul de stiv este un registru de 16 bii (13 la 6805); registrul de index este de 16 bii, exist posibilitatea manipulrii separat a octetului superior i a celui inferior (8 bii la 6805); frecvena intern CPU standard este de 8MHz (2MHz la 6805); se pot adresa 64K octei memorie de date sau program (2K-16K la 6805), are 16 moduri de adresare (8 la 6805) i 78 de noi coduri de instruciuni; se pot face mutri de date ntre locaii de memorie fr intermediul acumulatorului; UC poate executa mpriri de operanzi de 2 octei la operanzi de 1 octet; operarea secvenial a UC poate fi oprit de dou tipuri de evenimente: reset sau ntreruperi. Sursele de Reset suplimentare fa de 6805 sunt:

3. Microcontrollere Motorola

89

-detectarea unui cod de instruciune inexistent; -tensiune de alimentare sub o limit acceptat (LVI, Low Voltage Inhibit). sistemul de ntreruperi admite un numr maxim de 128 de surse de ntrerupere: reset, SWI i IRQ0-IRQ125. Unele dintre aceste cereri de ntrerupere sunt accesibile la pin. ntreruperea software are cea mai mare prioritate. n mod WAIT ceasul UC este oprit, dar celelalte module au ceas, astfel nct orice ntrerupere trezete UC. n mod STOP toate ceasurile sunt oprite i doar o ntrerupere extern poate trezi UC.

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


Monitor ROM (960bytes) Memorie ROM sau FLASH (4096bytes) Memorie RAM (128bytes) 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.10 Schema bloc a unui MC din familia 6808

3.2.1 Unitatea central 6808


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

90

MICROCONTROLLERE

software-ului de pe calculatorul gazd n MC i execuia lui din RAM. Pentru MC echipate cu EEPROM n mod monitor se poate programa EEPROM-ul. Legtura serial ntre calculator i MC este RS232 prin intermediul pinilor unui port I/O. n mod monitor MC poate s execute programe din RAM cu ajutorul unor comenzi simple monitor, toate funciile MC fiind valide. n modul monitor COP este invalidat. Transferul de date este bidirecional. Fiecare comand spre MC este urmat de un rspuns ecou al MC. Comenzile monitorului sunt: READ - citete o locaie de memorie (se trimite cod+2 octei de adres i se returneaz coninutul locaiei), WRITE - scrie o locaie de memorie (se trimite cod+2 octei de adres+octetul de scris) IREAD - citire indexat, citete urmtorii 2 octei din memorie fa de ultima adres accesat IWRITE - scriere indexat, scrie urmtorii 2 octei din memorie fa de ultima adres accesat READSP - citete indicatorul de stiv RUN - ruleaza program

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

3.2.2 Interfee i periferice on-chip


a. Porturi paralele I/O MC 6808 poate gestiona 8 porturi I/O (A,B,C,D,E,F,G,H) cu linii care pot fi programate ca ieiri sau intrri. Liniile nefolosite trebuie legate la mas sau la tensiunea de alimentare pentru a preveni defectarea circuitului prin descrcri electrostatice sau consumul excesiv de curent. Fiecrui port i corespunde un registru de direcie (DDR) prin care se programeaz sensul de transfer al pinului. Unele porturi au semnificaii duble, dac liniile lor sunt folosite i de alte interfee: portul B poate fi folosit ca 8 linii de intrare n convertorul A/D (ADC); portul C este un port de 6 bii, bitul 2 se poate folosi pentru a furniza n exterior ceasul sistemului; portul D poate avea dou linii folosite ca intrri pentru timer (Bit 6 i Bit 4); portul E poate fi folosit ca i canal SPI i SCI; portul F este un port de 7 bii care poate fi folosit ca intrri/ieiri pentru timer;

3. Microcontrollere Motorola

91

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

b. Convertorul analog digital (ADC) Convertorul A/D este un convertor pe 8 bii cu aproximri succesive care poate face conversii continuu sau la primirea unei comenzi. Sfritul conversiei poate fi semnalizat cu un bit indicator (flag) sau poate cere o ntrerupere. Ceasul de conversie poate fi selectat. Un MC are 8 canale de conversie cu intrri multiplexate analogic. Intrrile pentru ADC se fac pe pinii portului de uz general PTB7-PTB0. Selecia canalului se face pentru a stabili care pin este intrare analogic. Ceilali pini pot fi folosii ca intrri/ieiri de uz general. Dac valoarea citit este VREFH, atunci valoarea digital va fi FFh, iar dac este VREFL atunci valoarea digital va fi 00h. Aceste tensiuni, mpreun cu tensiunea de alimentare pentru blocul analogic al MC sunt furnizate din exterior. Schema bloc a convertorului este dat n figura 3.11.

Registru de date ADR

ADSCR Selecie canal

ADC
Cerere de ntrerupere Ceas de conversie

Intrri analogice

Figura 3.11 Schema bloc a convertorului analog digital

Registrele ADC sunt: registru de control i stare al ADC (ADSCR), care conine: Bit 7 COCO/IDMAS, conversie complet sau selecie ntrerupere DMA. Dac ntreruperile sunt invalidate (AIEN=0), COCO este poziionat de fiecare dat cnd se termin o conversie. n modul de conversie continu datele se suprascriu n registrul de date dup fiecare conversie i COCO este poziionat doar dup prima conversie. Dac ntreruperile sunt validate (AIEN=1), IDMAS selecteaz dac ntreruperea solicit i un transfer DMA. Bit 6 AIEN (ADC Interrupt Enable) valideaz ntreruperile la sfritul unei conversii.

92

MICROCONTROLLERE

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

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

msCAN08 TxCAN RxCAN

msCAN08

TxCAN RxCAN Transceiver

Transceiver

Magistrala

Figura 3.12. Cuplarea la magistrala CAN

3. Microcontrollere Motorola

93

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

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

RxF

Date spre CPU


Tx0
PRIO

TxE 0

Tx1 TxCAN
PRIO

Date de la CPU TxE 1 TxE 2

Tx2
PRIO

Figura 3.13 Schema bloc de receptie, emisie CAN

Pentru a micora numrul de ntreruperi solicitate UC de ctre receptor s-a introdus un filtru de acceptare. Datele msCAN au o anumit structur, primii bii

94

MICROCONTROLLERE

fiind de identificare a cadrului i de adres a destinaiei. Este posibil ca interfaa CAN s verifice aceti primi bii i s fac transferul din RxBG n RxFG numai dac mesajul este destinat acestui MC. Cnd ambele registre de recepie sunt pline i se recepioneaz date se genereaz o eroare de suprascriere. Se abandoneaz recepia noilor caractere, se semnalizeaz eroarea, dar transmitorul rmne funcional. Transmiterea mesajelor se face cu o structur de 3 buffere, fiecare de 13 octei. Un registru suplimentar TBPR (Transmit Buffer Priority Register) stabilete prioritatea mesajelor. Fiecare buffer de transmisie semnaleaz UC faptul c este gol prin poziionarea unui bit TXE (Transmit Buffer Empty) n registrul de stare CTFLG (CAN Transmitter Flag Register). Bitul TXE poate cere o ntrerupere pentru ca UC s poat rencrca bufferul de transmisie care s-a golit. Dac mai mult de un registru este plin i gata de transmisie, se face apel la registrul de prioriti pentru arbitrare. Fiecare buffer de transmisie are o zon de 8 bii (PRIO) n care programul utilizator scrie prioritatea mesajului cnd se transmite mesajul de la UC (cea mai mic valoare reprezentnd cea mai mare prioritate). Dac se transmite un mesaj cu prioritate mai mare i se dorete abandonarea mesajului curent, se solicit aceasta cu bitul ABTRQ (Abort Request Flag) n registrul de control al transmisiei CTCR (Transmission Control Register). Dac solicitarea de abandonare este posibil, interfaa CAN va poziiona bitul ABTAK (Abort Request Acknowledge) i TXE pentru a se putea transmite mesajul prioritar. d. Interfaa cu tastatura Interfaa cu tastatura const n 5 linii independente de intrare n MC care pot solicita ntreruperi mascabile. Funcionarea acestei interfee este asistat de urmtoarele registre: registrul de stare i control al tastaturii (KBSCR) conine: Bit 3 - indicatorul existenei unei ntreruperi, KEYF. Bitul este 1 dac se afl n curs de servire o ntrerupere de la tastatur; Bit 2 - confirmare, ACKK. Dac acest bit este poziionat se terge bufferul ntreruperilor de la tastatur; Bit 1 - validarea ntreruperilor de la tastatur, IMASKK. Dac acest bit are valoarea 0 sunt validate ntreruperile; Bit 0 - modul de ntrerupere, MODEK. Dac bitul este 1 se poate cere o ntrerupere cu un front cztor sau cu un nivel 0; dac bitul este 0 se poate cere o ntrerupere doar cu front cztor. registrul de validare a ntreruperilor de la tastatur care cu biii Bit 4 - Bit 0 valideaz pinul portului I/O ca cerere de ntrerupere de la tastatur sau ca port standard.

3. Microcontrollere Motorola

95

3.2.3 Programarea memoriei EEPROM


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

EEBPx 0 0 0 0 1

EERAS1 0 0 1 1 X

EERAS0 0 1 0 1 X

Operaia Programare de octet tergere de octet tergere bloc tergere global Nu se executa programare/stergere

Bit 2 - EELAT; dac este setat, comand memorarea datelor i adreselelor pentru scriere iar dac este 0, se face citire din EEPROM. Bit 0 EEPGM; dac este setat, valideaz scrierea sau tergerea. Poziionarea lui EEPGM trebuie s fie precedat n alt pas de poziionarea lui EELAT. registrul EEPROM nevolatil (EENVR): Bit 7 EERA, arie redundant; configureaz memoria n dou jumti redundante. Bit 4 - CON0; stabilete dac se valideaz securitatea memoriei (cu 0) sau nu. Bit 3-0 EEBP3-0, bii de protecie; dac aceti bii sunt 1, blocul de memorie este protejat la scriere. registrul de configuraie a ariei, EEACR se poate citi ceea ce a fost nscris n registrul EENVR. Din raiuni de siguran a informaiei, datele de configurare a

96

MICROCONTROLLERE

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

O tergere pe bloc sau global se face cu biii EERAS ca n tabelul 3.5, orice adres din bloc fiind posibil. mprirea n blocuri este EEBP0 (0800h087Fh), EEBP1 (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh). n modul redundant EEBP2 i 3 nu au nici o semnificaie.

3.3

MC PE 16 BII - 6816

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

3. Microcontrollere Motorola

97

3.3.1 Modulul de integrare (SIM, System Integration Module)


Acest modul, aprut de la 6811, grupeaz blocurile care controleaz sistemul i cuprinde: Modul pentru configurarea sistemului i protecie: 1. un monitor de bus; reseteaz sistemul dac apar cicluri de magistral mai lungi de 8-64 tacte de ceas sistem; 2. un monitor de HALT; poziioneaz un bit n registrul de stare al RESET-ului cnd a aprut o instruciune de HALT pe bus; 3. un monitor de ntreruperi; supravegheaz apariia unei arbitrri n timpul unui ciclu de ntrerupere; 4. un ceas de gard (watch dog); Modul pentru sintetizarea ceasului; poate fi realizat din mai multe surse; dintr-o surs intern cu ajutorul unei bucle PLL, dintr-o surs extern cu ajutorul buclei PLL sau direct dintr-o surs extern. Modul de formare a bus-ului extern Modul de test

3.3.2 Interfee
Interfeele seriale sunt grupate sub forma unui modul serial cu coad de ateptare (QSM Queued Serial Module) care conine o interfa serial SPI i una SCI. Coada de ateptare este format n RAM i are dimensiunea de 16 cuvinte de 8-16 bii fiecare. Transmisia acestui ir de date poate fi executat automat, fr intervenia unitii centrale. Modulul QSM este cuplat pe bus-ul IMB. Convertorul analog numeric (ADC) este un convertor cu aproximaii succesive cu rezoluia programabil de 8-10 bii, cu 8 canale multiplexate. Convertorul este conectat pe bus-ul IMB. Pentru date importante (cum ar fi cele din stiv) exist o memorie RAM static de 1K octet care la cderea tensiunii de alimentare este alimentat de la un pin special, unde se poate conecta o baterie. Timer-ul are 11 canale, din care 2 sunt folosite pentru generarea semnalelor PWM. Circuitul este capsulat n capsule de 132 sau 144 pini. Schema bloc a circuitului este dat n figura 3.14.

98 SIM Unitatea central 6816

MICROCONTROLLERE Port C

Port E

IMB Memorie SRAM (1024 octei)


Port F

Magistral de date i adrese IMB

QSM (SCI, SPI)

Timer

Port ADC
PWM

Port QS

Port GP

Figura 3.14 Schema bloc MC 6816

3.4

MC PE 32 DE BII - 68300

MC 68300 este asemntor arhitectural cu MC pe 16 bii. n jurul UC sunt grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8 canale, un modul de comunicaie serial cu coad de ateptare (QSM), 512 octei RAM static, 3,5K octei RAM care pot fi folosii i de timer (TPURAM), un modul de timp (TPU, Time Processor Unit), pn la 6 porturi I/O de uz general i 2 module flash EEPROM. Ceasul intern al sistemului este de maximum 16MHz. Unitatea central CPU32 este compatibil soft cu procesoarele din familia 68000. Ea conine 16 registre generale de 32 de bii cu care se poate lucra pe 8, 16 sau 32 de bii, un PC de 32 de bii, un SP de 32 de bii, un registru de stare i alte registre.

3. Microcontrollere Motorola

99

Timer-ul este o unitate microprogramat care poate lucra separat de UC, i care conine propriul RAM. Timer-ul este format din 16 canale independente. Fiecare poate executa o funcie de timp i poate fi programat independent. Memoria flash EEPROM servete la stocarea nevolatil a informaiilor cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent. Memoria EEPROM este foarte rapid, ea poate rspunde n 4 tacte. MC este echipat cu 2 module de flash EEPROM, unul de 16K octei i unul de 48K octei. Memoria EEPROM poate fi configurat pentru a lucra n modul bootstrap. Memoria EEPROM poate fi tears doar neselectiv (n ntregime) i are nevoie de o alimentare special.

3.5

DATE COMPARATIVE PENTRU MC MOTOROLA CISC

Tabelul 3.6 arat principalele performane, comparativ, pentru MC din familia Motorola:
Tabelul 3.6 Tabel comparativ pentru MC Motorola - CISC

MC 6805 6808 6816 68300

Magistrala date 8 8 16 32

de Frecven a (MHz) 2 8 16 16

Linii I/O Interfee speciale 31 48 48 48 6 6 6 6

Pre (USD) 1.9 2.1 8.25 17.5

4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua generaie de MC i este cel mai folosit i cel mai bine vndut MC din lume. n 1976 Intel a prezentat familia de microcontroller-e MCS48 care este compus din 8048, 8748 i 8035. A aprut astfel pentru prima dat pe pia un microcalculator complet pe un singur chip. MC includea o unitate central pe 8 bii, memorie ROM sau EPROM de 1024x8bii, RAM 64x8 bii, porturi I/O i timere. n etapa a doua, INTEL a lansat familia MCS-51 format din MC 8051, 8751 i 8031. INTEL recomand ca punerea la punct a aplicaiei s fie realizat pe MC 8751 care este prevzut cu memorie EPROM (4K octei). Memoria poate fi programat cu orice programator, dar se recomand utilizarea programatorului de la INTEL (UPP, Universal PROM Programmer). Pentru produse n serie mare se recomand 8051, care are memorie ROM, programat de furnizor la comanda beneficiarului i care revine la un pre de cost mult mai mic. MC 8031 nu conine ROM, dar se poate ataa n exterior ROM, PROM sau EPROM, direct sau multiplexat. 8051 este un MC foarte puternic i uor de programat. Ca dovad, n tabelul 4.1 se prezint cteva modele oferite de diferii furnizori, echivalente cu 8051:
Tabel 4.1 Modele echivalente 8051 oferite de diferii productori

Varianta 8031 8051


80C51GB 87C51GB SABC502

80C552 83CL580 80C320 89S8252 89C55

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

Productor Toi Toi Intel Intel Siemens Philips Philips Dallas Atmel Atmel

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

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

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

4. Familia MCS-51

101

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

4.1

STRUCTURA I FUNCIONAREA

Schema bloc intern este dat n Fig. 4.1.


ROM 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 bii care conine urmtoarele registre:

102

MICROCONTROLLER-e

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

Memoria pentru program (ROM) este separat i distinct de memoria pentru date, are alte mecanisme de adresare i alte semnale de comand. MC poate lucra att cu memoria pe chip ct i cu memorie extern; exist astfel posibilitatea de a mri capacitatea memoriei de lucru. Memoria extern este adresat automat dac adresa din instruciune este n afara zonei de memorie intern. Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bii. Fiecare linie poate fi programat individual ca linie de intrare, de ieire sau bidirecional. Unele linii au semnificaii alternative. Portul 0 este folosit i ca magistral multiplexat de adrese i date, iar pentru transferuri care au nevoie de adrese de 16 bii, se folosete portul P2 pentru octetul cel mai semnificativ de adres. Liniile portului 3 sunt folosite ca cereri de ntrerupere (2 linii), intrri/ieiri pentru timer (4 linii) i linii seriale (2). 8051 are 2 timere de 16 bii, fiecare poate fi programat separat. Timerele pot fi utilizate pentru a msura intervale de timp, pentru a determina lungimea unor impulsuri, ca numrtoare, etc. Rezoluia este de 1s, intervalul maxim de timp fiind de 65,536ms. Portul serial UART este un port serial full duplex cu rata de transfer pn la 115Kbaud. Portul serial poate fi folosit att pentru comunicaii cu echipamente periferice ct i comunicaii ntre circuite. Controllerul de ntreruperi admite ntreruperi de la 5 surse: de la portul serial (dac s-a transmis sau recepionat un caracter); de la timere (cnd s-a nregistrat o depire); de la 2 pini de intrare.

Fiecare surs poate fi validat sau invalidat individual. Prioritatea poate fi programat. Fiecare surs are asociat o adres n memoria program (tabelul 4.2).
Tabelul 4.2 Adresele de salt pentru ntreruperi Sursa de ntrerupere 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 bii bidirecional cu drena n gol. Este port de date i adrese (octetul cel mai puin semnificativ) pentru memoria extern. De asemenea portul 0 primete octeii pentru programarea EPROM-ului intern iar n timpul verificrii programului din EPROM, datele pot fi citite tot prin portul 0. PORT 1*- este un port pe 8 bii bidirecional, cu drena n gol. n timpul programrii i testrii EPROM-ului, la portul 1 se stabilete octetul cel mai puin semnificativ de adres. Pinii P1.0/T2 i P1.1/T2X au funcii duble. Astfel T2 este intrare extern n Timerul 2 iar T2X este intrarea de comand a unei capturi n Timer-ul 2. PORT 2*- este un port de 8 bii bidirecional. n timpul programrii i testrii EPROM-ului la portul 2 se stabilete octetul cel mai semnificativ de adres. Pentru adresarea memoriei externe pe 16 bii portul 2 genereaz partea mai semnificativ a octetului de adres. La adresare memoriei externe pe 8 bii portul 2 este registrul cu funcii speciale P2. PORT 3*- este un port de 8 bii bidirecional. Pinii portului 3 au semnificaie alternativ (tabelul 4.3).
Tabelul 4.3 Semnificaia dubl a pinilor de la PORT 3

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

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

RST este o intrare de RESET. Dac semnalul de intrare rmne n HIGH pe perioada a doi cicli main n timp ce oscilatorul funcioneaz, are loc iniializarea MC. ALE/PROG ALE (Address Latch Enable) valideaz octetul cel mai puin semnificativ de adres n timpul accesului la memoria extern (PORT0). PROG
Ieirile sunt bufferate i pot suporta pn la 4 intrri LS TTL. Pinii programai ca ieiri n stare HIGH pot fi folosii ca intrri. Ca pini de intrare, dac au fost forai n LOW din exterior, acetia furnizeaz curent.
*

104

MICROCONTROLLER-e

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

4.1.2 Gestionarea memoriei


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

MC 8031AH 8051AH 8751H 8032AH 8052AH 8752BH

Memorie intern de program 4Kx8 ROM 4Kx8 EPROM 8Kx8 ROM 8Kx8 EPROM

Memorie intern de date 128bytes RAM 128bytes RAM 128bytes RAM 256bytes RAM 256bytes RAM 256bytes RAM

a. Gestionarea memoriei de date (RAM) Memoria intern este mapat n spaiul de adresare 00H - FFH (256bytes). Ea poate fi "umbrit multiplu"; aceeai adres poate fi atribuit mai multor arii de memorie (intern SRAM, intern extins SRAM, ariei registrelor programabile, memoriei externe de program sau de date). Umbrirea este realizat fie utiliznd semnale hard (PSEN, nRD, nWR), fie utiliznd instruciuni specifice ce se refer strict la unul dintre tipurile de memorie (MOVC sau MOVX). n zona 80H -FFH sunt registrele speciale (SFR) care sunt adresabile direct. Zona 00H-7FH poate fi adresat direct sau indirect. Memoria extern se afl ntre adresele 0000H-FFFFH. Validarea folosirii memoriei de date se realizeaz cu semnalele nRD i nWR. Aceste semnale (nRD i nWR) se folosesc i pentru selecia datelor din portul 0, unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE. Informaia poate fi accesat cu adresare pe 8 sau pe 16 bii.

4. Familia MCS-51

105

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

4.1.3 Circuitele timer


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

M1 0 0 1 1

M0 0 1 0 1

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

Semnificaia biilor din registrul special TCON este: TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde: TF0, TF1- indicatorul de depire al timer-ului 0, respectiv 1. Este setat la depire ca numrtor sau teporizator i este resetat cnd se apeleaz rutina de ntrerupere a timerului corespunztor; TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri numrtoarele/ temporizatoarele; IE0, IE1 - indicator de activare a ntreruperii pe front; IT0, IT1 - controlul activrii ntreruperii (pe nivel IT=0, sau pe front IT=1). Pentru MC care au al treilea timer exist registrul T2CON cu structura:

106

MICROCONTROLLER-e

TF2, EXF2, RCLK, TCLK, EXEN2, TR2, C/-T2, CP/RL2, unde: TF2 - indicator de depire; EXF2 - indic apariia unui eveniment la pinii de control extern; RCLK - cnd este setat, portul serial folosete ca i tact de recepie semnalul de depire generat de timerul 2; TCLK - cnd este setat, portul serial folosete ca i tact de emisie semnalul de depire generat de timerul 2; EXEN2- indicator de activare extern; TR2 - pornete/ oprete timerul 2 C/-T2 - selecteaz funcionarea ca timer sau numrtor; CP/RL2 - indicator pentru memorare.

4.1.4 Interfaa serial UART


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

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

SM0 0 0 1 1

SM1 0 1 0 1

Mod Mod 0 Mod 1 Mod 2 Mod 3

4. Familia MCS-51

107

SM2 - activeaz posibilitatea de lucru multiprocesor n modurile 2 i 3, prin transmisia bitului special 9; REN - activare/ dezactivare recepia; TB8 - al 9-lea bit ce se transmite n modurile 2 i 3; RB8 - al 9-lea bit ce se recepioneaz n modurile 2 i 3; TI - indicator de ntrerupere a transmisiei; RI - indicator de ntrerupere a recepiei.

4.1.5 Sistemul de ntreruperi


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

108

MICROCONTROLLER-e

PT2 PS PT1 PX1 PT0 PX0

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

Nivelul prioritii poate fi programat n HIGH sau LOW. O ntrerupere LOW poate fi ntrerupt de o ntrerupere LOW dar nu poate fi ntrerupt de o ntrerupere HIGH. O ntrerupere HIGH nu poate fi ntrerupt.

4.1.6 Operarea cu economie de energie


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

4.1.7 Formarea unor semnale externe


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

Figura 4.2 Circuit pentru formarea semnalului RESET

4. Familia MCS-51

109

Ca i generator de tact se poate folosi oscilatorul intern la intrrile X1 i X2, ca n figura 4.3.
X1 X2

Figura 4.3 Circuit pentru folosirea generatorului intern de tact

Circuitul poate fi folosit i cu un tact extern, legnd X2 la mas, iar la X1 se leag un oscilator extern.

4.1.8 Programarea EPROM-ului intern


Pentru a fi programat circuitul trebuie s fie alimentat i s aib cuplat generatorul de tact pentru c transferul de date se face prin bus-ul intern al circuitului. Adresa pentru EPROM-ul de programat trebuie s fie aplicat la portul 1 i pinii P2.0-P2.3 ai portului 2, iar octetul de date de programat se aplic la portul 0. Ceilali pini ai portului 2, precum i semnalele RST, /PSEN, /EA/Vpp trebuie s aib urmtoarele nivele (tabelul 4.6).
Tabeul 4.6 Condiii pentru operaiile de programare, verificare, setare bit siguran

Operaia 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 atenie foile de catalog). Sursa de tensiune pentru Vpp trebuie s fie foarte bine filtrat i stabilizat deoarece chiar i un mic impuls de tensiune poate produce vtmarea circuitului. Verificarea programului se poate face dac bitul de siguran nu a fost programat. Citirea se face n aceleai condiii ca i scrierea, cu excepia lui ALE care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citi

110

MICROCONTROLLER-e

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

4.2

PROGRAMAREA MC DIN FAMILIA MCS-51

8051 are 111 instruciuni din care 64 sunt executate ntr-un singur ciclu.

4.2.1 Setul de instruciuni 8051


Instruciuni pentru transferul de date: Transferuri generale: MOV - efectueaz un transfer pe bit sau pe octet de la surs la destinaie. PUSH - incrementeaz registrul SP (Stack Pointer) i transfer un octet de la surs la locaia din stiv adresat de SP. POP - transfer un operand pe un octet de la locaia din stiv adresat de SP la destinaie i decrementeaz SP. Transferuri specifice acumulatorului: XCH - mut octetul din surs n acumulator. XCHD - mut biii LOW din octetul din surs n acumulator. MOVX - mut un octet ntre memoria extern de date i acumulator. Adresa memoriei de date extern poate fi specificat n registrul dublu DPTR. MOVC - se citete un octet din memoria extern de program n acumulator. Transferuri de adrese: MOV DPTR, #data, ncarc imediat 16 bii de date n registrul dublu DPTR. Instruciuni aritmetice:

4. Familia MCS-51

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.

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

112

MICROCONTROLLER-e

AJMP - este un salt necondiionat la adresa specificatanalog cu ACALL. LJMP - este un salt necondiionat la adresa specificat analog cu LCALL. SJMP - este un salt necondiionat scurt n cadrul a 256 de octei. Salturi condiionate: JZ - execut salt dac acumulatorul este 0. JNZ - execut salt dac acumulatorul nu este 0. JC - execut salt dac bitul de CY (Carry) este 1. JNC - execut salt dac bitul de CY este 0. JB - execut salt dac bitul adresat este 1. JNB - execut salt dac bitul adresat este 0. JBC - execut salt dac bitul adresat este 1 i apoi terge bitul adresat. CJNE - compar primul operand cu al doilea operand i face salt dac acetia nu sunt egali. DJNZ - decrementeaz operandul surs i pune rezultatul n operandul destinaie. Dac rezultatul nu este 0 se execut salt. ntreruperi: RETI - ca i RET, dar activeaz ntreruperile.

4.2.2 Modurile de adresare


Adresare prin registre - programatorul are acces la 8 registre de lucru, notate R0R7. Cei mai puin semnificativi 3 bii ai codului instruciunii indic unul dintre aceste registre. Se poate forma astfel o instruciune de un singur octet. De exemplu adunarea registrului R0 cu R1, cu rezultatul n acumulator: MOV A,R0 ADD A,R1 Adresare direct - se pot adresa locaii din RAM, porturi I/O sau registrele cu funcii speciale. La codul instruciunii se adaug un octet care reprezint locaia care se folosete. De exemplu se adun coninutul locaiei 30 din RAM la coninutul locaiei 40, cu rezultatul n locaia 40: MOV A,30h ADD A,40h MOV 40h,A Adresare indirect prin registre - introdus pentru a putea lucra cu variabile al cror loc n RAM se modific n cursul rulrii programelor. Ca registre index se folosesc registrele R0 i R1, al cror coninut indic adresa n RAM. Cel mai puin semnificativ bit al codului instruciunii indic registrul care este folosit ca index. n limbajul de asamblare al lui 8051, adresarea indirect se reprezint cu @. De exemplu se adun coninutul locaiei adresat de registrul R0 cu coninutul locaiei adresat de registrul R1, cu rezultatul n acumulator: MOV A,@R0

4. Familia MCS-51

113

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

4.3

ECHIPRI SPECIALE CU MEMORIE

4.1.1 Memoria EEPROM (Philips 80C851)


Memoria EEPROM are dimensiunea de 256 octei, poate reine informaiile minimum 10 ani i poate fi supus la 10.000 de cicluri de tergere/scriere. Circuitul conine multiplicatorul de tensiune pentru tergere i scriere. Comunicaia ntre UC i EEPROM se realizeaz cu ajutorul a 5 registre: EADRH (adresa F3h), EADRL (adresa F2h) sunt dou registre pentru adresare, primul pentru partea LOW a adresei, cellalt pentru partea HIGH (pentru implementri viitoare i pentru adresarea biilor de securitate). EDAT (adresa F4h) este registrul de date n care se stocheaz octetul de scris sau octetul citit. Sunt posibile i tergeri pe bloc de date, caz n care coninutul acestui registru nu conteaz. ETIM (adresa F5h) este un registru pentru timer necesar pentru a adapta timpul de citire/ scriere la frecvena sistemului i trebuie ncrcat cu valori funcie de tactul sistemului i de caracteristicile EEPROM-ului. ECNTRL (adresa F6h) este registrul de control care: stabilete modurile de lucru: scriere, citire, tergere pe octet, tergere pe bloc; conine un bit care semnaleaz c este n curs o scriere sau tergere.

Schema bloc a modulului este dat n figura 4.4. Secveniatorul asigur secvena de timp corespunztoare pentru scriere sau tergere. Datele i adresele se transfer prin intermediul registrelor de pe magistral.

114

MICROCONTROLLER-e

CPU Secveniator 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 secvene de program, coninutul locaiei 20h este citit n acumulator. Memoria EEPROM este protejat cu un octet la adresa 8000h. Se poate valida securitatea cu urmtoarea secven de program, cu scrierea activat: Activare securitate: MOV EADRH,#80H MOV EADRL,#00H MOV EDAT,#FFH Acest octet nu mai poate fi modificat prin soft. Programul din EEPROM nu mai poate fi citit sau modificat cu instruciuni MOVC din memorii externe, ci doar executat.

4.3.2 Memoria FLASH cu programare paralel (Atmel AT89C55)


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

4. Familia MCS-51

115

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

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


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

116

MICROCONTROLLER-e

4.4

INTERFEE I PERIFERICE ON CHIP SPECIALE

4.4.1 Convertorul A/D


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

4.4.2 Interfaa PWM


Circuitul este prevzut cu un canal PWM la care frecvena de repetiie este programat cu un registru de prescalare (PWMP- adresa FEh) care genereaz un ceas pentru un numrtor de 8 bii. Coninutul numrtorului este comparat cu cel al registrului PWM0 (adresa FCh); dac numrul este mai mare ieirea /PWM0 este LOW, dac este mai mic sau egal /PWM0 este HIGH. Factorul de umplere poate fi astfel modificat ntre 1/255 i 255/255.

4. Familia MCS-51

117

4.1.3 Interfaa I2C (Siemens P80CL580)


Portul serial I2C are 2 linii, date seriale (SDA) pe poziia liniei P1.7 i ceas serial (SCK) pe poziia bitului P1.6. Interfaa lucreaz n 4 moduri: transmitor MASTER receptor MASTER transmitor SLAVE receptor SLAVE Aceste funcii pot fi controlate de registrul S1CON (Serial Control Register) i S1STA (Serial Status Register). Cu datele se lucreaz prin S1DAT (Data Shift Register) iar adresa se stabilete n S1ADR (Slave Address Register), figura 4.5.

S1ADR 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 funcie de tactul sistemului i poate fi de maximum 100kHz; se poate selecta dac liniile I/O (P1.6 i P1.7) au semnificaiile generale sau speciale pentru I2C;

118

MICROCONTROLLER-e

se poate porni transferul prin generarea de condiii de START repetate (mod MASTER) sau verificarea bus-ului i generarea de START doar dac bus-ul este liber (mod SLAVE); se poate opri transferul prin generarea unei condiii de STOP; se pot valida ntreruperile care se genereaz n urmtoarele condiii: s-a generat o condiie de START, s-a recepionat adresa proprie, un octet s-a transmis sau s-a recepionat; se poate insera un ACK, (nivel LOW pe SDA) dup recepia unui caracter sau a adresei proprii.

Registrul de stare S1STA (D9h - registru Read Only) poate fi folosit pentru generarea unei ntreruperi i saltul la o rutin de servire. n registrul de date S1DAT (DAh) se nscrie octetul care se transmite sau se recepioneaz; cel mai semnificativ bit se transmite sau se recepioneaz primul. n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se stabilete adresa dispozitivului SLAVE cu care dorete un transfer de date. Observaie: convertorul AD, interfaa I2C i canalul PWM0 pot lucra n modurile cu economie de energie. Convertorul, interfaa I2C i canalul PWM0 rmn active n modul Idle al UC i pot genera o ntrerupere sau un RESET, terminnd astfel modul inactiv al UC.

4.4.4 Interfaa USB (EZ-USB seria 2100)


Familia EZ-USB de la Anchor Chips ( www.anchorchips.com ) echipeaz MC-ul lor echivalent cu 8051 cu un modul USB inteligent, destinat legturii USB de mare vitez (12Mbps). Modulul USB inteligent admite instruciuni avansate, de aceea punerea la punct a lucrului cu USB devine mai rapid. MC este echipat cu RAM care poate fi ncrcat de la un PC. Din acest motiv circuitul nu mai are ROM. Circuitul mai conine i o interfa I2C, precum i linii I/O de uz general. Tot ca un avantaj se poate meniona c bus-ul de date i adrese nemultiplexat este accesibil la pini speciali, ceea ce nseamn c nu se sacrific pini I/O pentru cuplarea unor componente exterioare i nici nu este nevoie de latch-uri pentru separarea datelor de adrese. Schema bloc a acestui MC este dat n figura 4.6. Modulul USB realizeaz n timpul iniializrii o enumerare i alocare de adrese a dispozitivelor USB conectate. Aceast operaie este posibil ca urmare a mutrii unei secvene de program din RAM-ul MC n RAM-ul modulului USB. ncrcarea programului n RAM se poate face att de la un sistem PC ct i de la un EEPROM serial prin interfaa I2C sau clasic, prin conectarea unei memorii ROM externe. Operaia de enumerare iniial permite identificarea unui corespondent USB i creeaz posibilitatea ncrcrii programelor de la sistemul gazd chiar prin USB.

4. Familia MCS-51

119

8051

RAM 4-8 Koctei

Interfaa cu memoria extern (nemultiplexat)

PIO (24 linii)

BUS INTERN

Interfa I2C

2K octei FIFO memorie proprie

D+ Interfaa USB inteligent Transceiver USB

SCK

SDA Figura 4.6 Schema bloc a unui MC cu interfa USB

4.4.5 Aria de numrtoare programabil (PCA)


Aria de numrtoare programabil este un circuit special de timp format din 5 module de 16 bii cu posibilitatea de captur i comparaie care se adaug timerelor obinuite ale MC. Fiecare modul poate fi programat individual s lucreze n unul din modurile: captur pe front pozitiv sau negativ; timer; canal PWM; ceas de gard (doar modulul 4).

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

120 Modul 0 (16 bii)

MICROCONTROLLER-e P1.3

Temporizator/ Numrtor (Baza de timp pentru modulele PCA)

Modul 1 (16 bii)

P1.4

Modul 2 (16 bii)

P1.5

Modul 3 (16 bii) P1.6 Modul 4 (16 bii)

Figura 4.7 Structura ariei de timp programabile (PCA)

Timerul comun pentru toate modulele este un timer obinuit. El poate funciona cu diferite tacte programate n registrul SFR CMOD cu 2 bii, conform tabelului 4.7.
Tabelul 4.7 Programarea tactului pentru timer

CPS1 0 0 1 1

CPS0 0 1 0 1

Tact pentru timer frecvena oscilatorului/12 frecvena oscilatorului/4 Semnalul de depire de la timerul 0 standard De la un pin extern (ECI, P1.2)

Fiecare modul are asociat un registru de comand (CCAPM0-CCAPM4) care controleaz modul de operare al modulului: se poate valida ca o coinciden n modul s genereze o ntrerupere; se poate valida modul PWM; se poate valida ca ieirea P1.x s schimbe starea dac a aprut o coinciden ntre coninutul modulului i coninutul timerului; se poate programa pe care front al intrrii P1.x s se fac numrarea impulsurilor externe.

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

4. Familia MCS-51

121

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

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


Un astfel de MC poate adresa o memorie extern SRAM (ntre 8K i 64K) care poate fi fcut nevolatil prin alimentarea cu baterii. O baterie cu litiu poate funciona cca. 10 ani. Transferul de date cu memoria NVRAM se face pe un bus separat pentru a nu micora numrul de linii I/O. Circuitul nu are ROM pentru programul utilizator, programul fiind stocat n NVRAM, programarea se realizeaz n sistem, prin interfaa serial a MC. La acest tip de MC programul se poate schimba chiar i n timpul funcionrii. Programul se poate ncrca iniial prin interfaa serial, sub comanda unui program existent ntr-un ROM intern numit Boot ROM (sau BOOTSTRAP LOADER ROM) care este apoi invalidat i devine invizibil la adresare.

4.4.7 Interfaa LCD (PHILIPS P83C434)


n jurul unui nucleu 8051 a fost construit un MC specializat pentru comanda panourilor LCD. Rmn disponibile pentru uz general 12 linii I/O. Modulul LCD are 24 de linii pentru comanda segmentelor, din care 2 pot fi folosite pentru comanda planurilor din spate. Afiajul poate fi comandat cu tensiuni variabile obinute intern prin divizarea tensiunii de alimentare cu rezistene. Schema bloc a MC este dat n figura 4.8.

122

MICROCONTROLLER-e

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 afioarelor cu pn la 4 planuri n spate. Cele 24 de linii de comand a segmentelor pot comanda 12 caractere numerice formate cu 7 segmente sau 88 de elemente grafice. Funcionarea afiajului poate fi mai bine neleas n cazul concret al unui singur plan n spate, pentru 2 elemente alturate ale afiajului, figura 4.9.
VDD BP0 VSS S00

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

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

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

Nucleu 8051 (fra memorie)

RAM ROM

On Screen Display OSD RAM 128x10 ROM 60 x 18 x 14

Magistral de date

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

8x6bit PWM

14bit PWM

DAC

Figura 4.10 Schema bloc a unui MC specializat TV/video

Ceasul canalelor PWM se formeaz din tactul sistemului divizat cu 4. Acest tact este aplicat tuturor canalelor PWM i unui numrtor de 14 bii. Canalele de 6 bii utilizeaz doar partea mai puin semnificativ a numrtorului de 14 bii. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii acestui registru cu coninutul numrtorului, ieirea PWM schimb starea. Structura canalelor PWM este reprezentat n figura 4.11. Convertorul numeric analogic este folosit pentru a realiza conversia analog numeric soft (figura 4.12). Circuitul are 3 intrri analogice care pot fi comutate pe rnd la intrarea unui comparator de tensiune. La cealalt intrare a comparatorului se aplic ieirea convertorului numeric analogic. Cnd intrrile sunt egale, valoarea aplicat convertorului numeric analogic este chiar valoarea numeric a semnalului analogic de intrare.

124

MICROCONTROLLER-e

Registru SFR PWM0 Canal PWM0 (6 bii) P1.3

Registru SFR PWM7 Numrtor 14 bii Canal PWM7 (6 bii) Tact= f/4 Registru TDACL, TDACH Canal PWM8 (14 bii) 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. Intrrile n acest bloc sunt: 2 ceasuri video; semnalul de sincronizare orizontal;

4. Familia MCS-51

125

semnalul de sincronizare vertical. Modulul OSD poate fi echipat cu EPROM, ceea ce nseamn c generatorul de caractere poate fi programat. Modulul OSD permite 8 moduri de scriere umbrit a caracterului, culoarea caracterului este selectabil, culoarea fondului este selectabil.

4.4.9 MC cu arie configurabil (TRISCEND E5)


Firma TRISCEND a realizat un MC compatibil 8051 care conine o arie de pori configurabil (Configurable System-on-Chip CSOC). Acest MC integreaz pe un singur chip un MC de uz general 8051, un bloc de RAM de mari dimensiuni i o arie de module configurabile, toate acestea conectate ntre ele printr-un bus de mare vitez. Programarea ariei se face prin programul de iniializare i se poate relua de ori cte ori. Descrierea pe scurt a circuitului: ruleaz la o frecven de 40MHz i are echipare standard (256 octei RAM, ceas de gard, trei timere, 2 canale DMA, interfa serial UART, 64K octei RAM) i are n plus 3200 de module configurabile (CSL Configurable System Logic - ceea ce nseamn cam 40.000 de pori). Conectarea ntre modulele cofigurabile i restul sistemului, respectiv liniile I/O se realizeaz prin magistrala CSI (Configurable System Interconnect), cu 8 bii de date bidirecional, 32 de bii de adres, rata de transfer de maxim 40MBps. Magistrala CSI permite lucrul multi master, master putnd fi unitatea central 8051, canalele DMA sau interfaa JTAG. Interfaa cu exteriorul poate fi realizat cu maxim 315 linii I/O (depinde de variant i capsul), exist i posibilitatea conectrii memoriei externe, iar un modul de interfa IEEE 1149.1 JTAG permite testarea sistemului. Liniile I/O au caracteristici programabile (curent de ieire, histerezis la intrare etc.). Schema bloc este dat n figura 4.13. Interfaa cu memoria extern permite legarea direct a unei memorii de 256K x 8 bii (de regul FLASH) pentru nscrierea iniial a programului n MC. nscrierea iniial poate fi realizat la RESET din aceast memorie FLASH extern n mod paralel, dar poate fi realizat prin citirea programului prin interfaa serial de la un PROM serial. Programul poate fi executat din FLASH sau poate fi copiat prin interfaa serial n RAM i executat de acolo. Modul serial elibereaz pini I/O care pot fi astfel folosii n alte scopuri. Procedura de ncrcare poate s nu fie reluat dac RAM-ul se alimenteaz cu baterie. Cu aria de module configurabile se pot realiza sisteme la cerere. Fiecare modul poate ndeplini diverse funcii, combinaionale sau secveniale.

126

MICROCONTROLLER-e

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

RAM 64Koctei

Interfaa cu memoria extern

Interfaa JTAG

BUS CSI

Matrice CSL PIO PIO PIO

Figura 4.13 Schema bloc a unui MC TRISCEND E5

Matrice de legturi Modul CSL Modul CSL

Matrice de legturi

Linii lungi de adres


Linii scurte de interconectare

Matrice de legturi Linii lungi I/O

Matrice de legturi

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.


Pori configurabile prin programare 1
Bistabil D

Ieiri

Intrri

D EN T

Figura 4.15 Structura unei celule configurabile

Structura porilor poate fi programat la iniializare i reprogramat de ori cte ori. O celul poate ndeplini una din funciile: logic (ieirea 1); aritmetic; de memorare (ieirea 2); de magistral; secvenial. Testarea JTAG se poate realiza cu un calculator conectat la interfaa JTAG. Pinii folosii sunt: TCK ceas de testare (intrare n MC); TMS comanda modului de test, intrare n MC, activ pe 0; TDI date seriale de intrare n MC; TDO date seriale de ieire din MC.

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

4.5

SISTEM MINIMAL CU 8051

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

128

MICROCONTROLLER-e

8051 X1 AD0-AD7

P0
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 conine RAM cu capacitatea de 32KB, selectat cu PSEN (care indic faptul c nu este acces la memoria program) i /RD pentru o citire sau /WR pentru o scriere n RAM. Bus-ul de date i adrese este comun pentru AD0-AD7. Adresele se separ cu un latch validat de semnalul ALE. Liniile de date sunt validate cu /RD sau /WR. Memoria program EPROM este opional, (este necesar pentru modelele care nu au EPROM sau OTP intern, de exemplu 8031) fiind selectat cu semnalul PSEN. Dac exist EPROM extern /EA=LOW, iar dac se folosete EPROM-ul intern /EA=HIGH. Circuitul se completeaz cu un generator de tact i dou componente pentru realizarea RESET-ului, ca n unul din subcapitolele anterioare. Pentru dezvoltri se poate folosi portul P1, care este liber, i canalul serial. Dac numrul liniilor I/O nu este suficient, se poate folosi un expander cum este de exemplu 8243, care poate extinde 4 linii la 4x4 linii bidirecionale (figura 4.17).

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

Interfee 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. Productorul plasat cel mai bine pe piaa MC PIC este Microchip (www.microchip.com). Un alt productor important de MC PIC este Motorola. Exist mai multe familii de MC PIC; PIC12, PIC16, PIC17.

5.1.1

PIC12

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

5. Microcontroller-e RISC

131

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

512 x 12 bii sau 1024 X 12 bii M A G I S T R A L A I N S T R. Unitate central


ALU

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

PC

Magistral de date i adrese SCL tact Timer Ceas de gard


Timer pt. RESET EEPROM serial 16 x 8

SDA date

PIO

Figura 5.1 PIC12 Schema bloc

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

Registru INDF TMR0 PCL STATUS

Adresa(H) 00 01 02 03

Registru FSR OSCCAL GPIO Registre generale

Adresa(H) 04 05 06 07-1F

132

MICROCONTROLLER-e

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

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

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

5. Microcontroller-e RISC

133

Dac valoarea bitului d este 0, rezultatul se stocheaz n W iar dac este 1, rezultatul se stocheaz n f. Registrul de opiuni (OPTION) este un registru special de configurare. Registrul TRIS este folosit pentru a controla liniile I/O. Un 1 n TRIS pune linia corespunztoare n nalt impedan, iar un 0 valideaz linia. Liniile de intrare/ieire pot fi programate ca intrri sau ieiri cu registrul special GPIO. Pinii pot avea semnificaii duble. La RESET toate liniile se definesc ca intrri. Unii pini pot trezi MC din starea inactiv (Wake up). Operaiile de intrare ieire se fac prin intermediul registrului GPIO, de exemplu instruciunea: BCF GPIO,5 ;stabilete un 0 pe linia 5 de ieire Modulul timer 0 poate fi utilizat n urmtoarele moduri: temporizator/numrtor pe 8 bii; numrtor pentru prescalare de 8 bii; ceas din exterior sau din interior. Schema bloc a temporizatorului cu semnalele de comand este dat n figura 5.2.
Fosc/4 (intern) Alegere tact Prescalare GP2
(TOCKI) (extern) Tact fr sau cu prescalare

TIMER

Magistrala de date TOC5


PS2 PS1 PS0 PSA

Figura 5.2 Schema bloc a temporizatorului PIC12

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

134

MICROCONTROLLER-e

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

Alegerea sursei tactului, precum i activarea ceasului de gard se fac cu un registru de configurare (de 12 bii) care nu este accesibil utilizatorului, fiind o informaie scris n PROM/ EPROM la adresa FFFh. Un RESET poate fi generat de una din urmtoarele surse:

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


-un RESET extern /MCLR pe pinul GP3; -un RESET cnd circuitul este n mod SLEEP pe /MCLR; -de la ceasul de timp real n operare normal; -de la ceasul de timp real n mod SLEEP; -trezirea din mod SLEEP prin schimbarea strii unui pin extern. Identificarea sursei de RESET se face prin poziionarea unor bii n registrul de stare, registru al crui coninut nu se modific prin RESET.

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

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


+5V GND Vpp CLK D I/O

135 PIC12C5xx
Vdd Vss /MCLR/Vpp GP1 GP0

Figura 5.3 Conexiune pentru programarea EPROM

Intrarea n mod programare se face cu GP1 i GP0 inui la 0 pe un front cresctor al /MCLR. Pentru a sublinia dimensiunea i simplitatea de utilizare a acestui MC, n figura 5.4 este repreyentat capsula circuitului.
PIC12C 1 2 3 4 8 7 6 5 Vss GP0 GP1 GP2/T0CKI

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

Figura 5.4 Capsula PIC12

5.1.2

PIC16

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

136

MICROCONTROLLER-e

magistrala de instruciuni este pe 14 bii, fa de 12 bii; memoria ROM este de 512 x 14 cuvinte pn la 2K x 14 cuvinte; memoria RAM este de 80-128 de octei.

Aceste MC sunt livrate n capsule cu 20 de pini. ntreruperile sunt controlate de un registru de comand a ntreruperilor care poate valida sau invalida global sistemul de ntreruperi i individual pe fiecare linie. Fiecare interfa care poate cere ntrerupere are ataat un bit care poate fi testat pentru a determina sursa ntreruperii. Datorit posibilitii de lucru n ntreruperi, timerul 0, care funcioneaz la fel ca la PIC12 poate cere ntrerupere la trecerea numrtorului de la FFh la 00h. ntreruperea poate fi mascat. Pentru creterea siguranei n funcionare familia PIC16 are integrat un circuit de protecie care genereaz un RESET la scderea tensiunii de alimentare (Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de comand. MC din familia PIC 16 pot fi echipate cu o diversitate mult mai mare de interfee, cum ar fi comparatoare, convertoare ADC i DAC, USART, I2C, SPI, PWM etc. Circuitul PIC16C64x este echipat cu 2 comparatoare analogice. Intrrile lor sunt multiplexate cu pinii I/O 0-3 i cu o referin de tensiune care poate fi folosit pentru comaparatoare. Cu un registru de comand n zona registrelor cu funcii speciale se poate programa modul de comparare. Se poate programa ca ieirea comparatoarelor s cear ntrerupere. Comparatoarele pot fi programate s lucreze cu referin extern sau intern. n modul SLEEP comparatoarele rmn active i pot trezi circuitul. Dac curentul consumat de comparatoare n mod SLEEP este prea mare, ele pot fi dezactivate prin registrul de comand. Modulul care genereaz referina de tensiune este un grup de 16 rezistene care divizeaz tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau invalidat pentru economia de energie. Circuitul PIC16C71x este echipat cu convertor A/D i un bloc suplimentar de timere. Convertorul A/D este un convertor cu aproximaii succesive pe 8 bii, cu 4 intrri analogice multiplexate i cu circuit de eantionare-memorare. Tensiunea de referin poate fi cea de alimentare sau o referin extern la un pin I/O cu semnificaie dubl. Convertorul A/D poate lucra i n modul SLEEP, pentru acest mod de lucru fiind integrat n circuit un oscilator propriu pentru convertor. Convertorului i sunt ataate 3 registre, 2 de comand i unul de date. Cu registrele de comand se poate programa: selecia tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu); selecia canalului analogic; un bit pentru START conversie; un bit pentru terminare conversiei - poate fi citit i testat prin program, sau poate cere o ntrerupere; un bit pentru oprirea convertorului pentru a nu mai consuma curent, dac nu este folosit n mod SLEEP.

5. Microcontroller-e RISC

137

Modulul suplimentar de timere este numit CCP (Capture Compare PWM), dup funciile pe care le poate ndeplini (un MC poate avea unul sau mai multe module CCP). Modulul CCP conine un registru de 16 bii i folosete timerele suplimentare 1 i 2. Modurile de lucru posibile pentru modulul CCP sunt: mod captur - la apariia unui eveniment la pinul exterior 3, registrul CCP se ncarc cu valoarea din timerul 1. Un eveniment poate fi un front cresctor, unul descresctor, la fiecare 4 sau 16 fronturi cresctoare (prescalare). n momentul evenimentului se poate cere o ntrerupere. mod comparare - registrul CCP este permanent comparat cu coninutul timerului 1. Dac apare o coinciden, se semnalizeaz prin schimbarea strii pinului extern 3. n acelai moment se poate cere o ntrerupere. mod PWM - se folosesc 2 timere, 1 i 2, unul pentru a determina perioada semnalului i cellalt factorul de umplere. Ieirea PWM se face tot la pinul 3.

5.1.3

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

Aceste MC sunt livrate n capsule cu 44 de pini. Schema bloc este dat n figura 5.5. i circuitele din familia PIC17 pot fi echipate cu o gam larg de interfee.

138

MICROCONTROLLER-e

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

2K x 16 bii Unitate central ALU


PC STIVA 16 x 16 bii Magistrala de date i adrese Memoria de date RAM 232 x 8 bii

Timer

Ceas de gard

Timer pt. RESET

Control ler de ntrerup

3x TIMER

UART

PIO
Port C i D Port B Port A

Figura 5.4 Schema bloc PIC17

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

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

5. Microcontroller-e RISC

139

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

5.2 MC ATMEL
Foarte bine plasate pe pia n zona aplicaiilor low cost sunt MC ale firmei ATMEL. Firma fabric i MC echivalente 8051.

5.2.1

Familia AVR

Aceste MC sunt realizate de productor n diverse variante, ncepnd cu modelele low cost AT90S2323, AT90S1200 i terminnd cu modele complexe AT90S4414, AT90S8515, diferenele ntre acestea constnd n principal n mrimea i tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM i a facilitilor oferite la interfaa cu utilizatorul. Seria de MC ATMEL este susinut de o campanie puternic de promovare astfel nct productorul ofer gratuit software de dezvoltare ce include asamblor, debugger, documentaie, exemple i note de aplicaie pe site-ul su www.atmel.com. Softul este disponibil att n variant ce ruleaz sub sistemul de operare MS-DOS ct i n varianta WINDOWS. Toate MC din familie au o arhitectur Harvard, adic au spaii de adres i magistrale diferite pentru memoria de date i memoria program. Dispun de o prelucrare de tip pipe line a instruciunilor (n 2 trepte) astfel nct n timp ce o instruciune este executat, cealalt se afl n ciclu de aducere din memorie (fetch) i astfele se execut cte o instruciune n fiecare ciclu. Schema bloc a unui circuit din familie este dat n figura 5.5. Unul dintre cele mai mici MC este AT90S2323. Circuitul se alimenteaz (n funcie de variant) la 5V sau la 3V i funcioneaz pn la frecvena de 10MHz. Curentul absorbit este de 2,4mA n stare activ, 0,5mA n stare inactiv i 1A n starea Power Down. n principal, circuitul este compus din: unitatea central, n arhitectur RISC cu 118 instruciuni, majoritatea de un ciclu i 32 de registre de uz general; blocul de memorie, compus din memoria de program (FLASH de 2K octei care suport n jur de 1000 de programri) i din memoria de date (128 octei de RAM) i 128 octei de EEPROM, care suport n jur de 100.000 de programri;

140

MICROCONTROLLER-e

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

Memoria program
FLASH 2K octei

ALU PC

Memoria de date
RAM 128 octei EEPROM 128 de octei

Magistral de date

SPI

Ceas de gard

Timer

Oscilator

Controller de ntreruperi

Port B

Figura 5.5 MC din familia AVR schema bloc

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

5. Microcontroller-e RISC

141

00h Memoria program FLASH 1Kx 16 bii 000h 32 registre de lucru 1Fh 64 registre I/O EEPROM 128 octei

00h

SRAM 128 octei

60h 7Fh

3FFh

Figura 5.6 Harta spaiilor de memorie i I/O

Memoria EEPROM dispune de un spaiu propriu de adresare, n care fiecare octet dintr-o locaie poate fi citit sau scris. Accesul se face specificnd adresa, data i comanda n registre speciale. Acest MC permite 5 moduri de adresare: adresare direct - adresa operandului este coninut n instruciune. Se pot executa instruciuni cu un registru sau ntre 2 registre. Este accesibil astfel tot spaiul de date; adresare indirect - adresa operandului este n X, Y sau Z; adresare indirect cu deplasament - adresa oprandului este rezultatul adunrii registrelor Y sau Z cu adresa de 6 bii coninut n instruciune. Se acoper astfel doar 63 de locaii fa de baza dat de registrele Y sau Z; adresare indirect cu pre decrementare - registrele X, Y sau Z sunt decrementate nainte de adresare; adresare indirect cu post incrementare.

Setul de instruciuni este dat n tabelul 5.3.

142

MICROCONTROLLER-e

Tabelul 5.3 Setul de instruciuni al familiei AVR

Mnemonic ADD ADC SUB SUBI SBC SBCI AND ANDI OR ORI EOR COM NEG SBR CBR INC DEC TST CLR SER RJMP RCALL RET RETI 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

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

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

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

Rd-Rr Rd-Rr-C Rd-K

or 3 if (Rr(b)=1) 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)=1) PC=Pc+2 or 3 Skip dac bitul B din I/O este 1

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

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


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

Operaie Salt dac SF este1 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=1) PC=PC+k+1 if (I=0) PC=PC+k+1 Rd=(Z) (Z)=Rr Rd=Rr Rd=K Rd=P P=Rr I/O (p,B)=1 I/O (p,B)=0 Rd(n+1)=Rd(n),Rd( 0)=0 Rd(n)=Rd(n+1),Rd( 7)=0 Rd(0)=C,Rd(n+1)= Rd(n), C=Rd(7)

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

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

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

Anumite modele au i o instruciune de nmulire, MUL. MC AVR au 3 surse de ntrerupere: de la RESET, (din exterior, la punerea sub tensiune sau de la ceasul de gard); de la un pin extern; de la timer, la o depire.

5. Microcontroller-e RISC

145

ntreruperile pot fi mascate cu 2 registre de 8 bii, GIMSK- General Interrupt Mask i TIMSK- Timer/Counter Interrupt Mask. La primirea unei ntreruperi se invalideaz sistemul de nteruperi. Totui este posibil primirea nc a unei ntreruperi n timp ce este servit prima, dac se revalideaz sistemul de ntreruperi. Rspunsul la o cerere de ntrerupere dureaz minimum 4 cicluri, timp n care PC este salvat n stiv, SP este incrementat cu 2 i se seteaz invalidarea ntreruperilor. Sursele de RESET pot fi: la punerea sub tensiune (Power On Reset), dac tensiunea crete i atinge un anumit prag; de la un pin extern, dac un nivel LOW este prezent mai mult de 50ns; de la ceasul de gard dac este validat i a expirat perioada de timp pentru care a fost programat s atepte o iniializare. Dup RESET execuia programului ncepe de la adresa 000h. Un RESET pornete un numrtor care contorizeaz un anumit numr de impulsuri ale ceasului intern al circuitului. Contorul stabilete durata impulsului RESET intern pentru ca acesta s fie suficient de lung pentru iniializarea tuturor circuitelor interne, figura 5.7.
Vcc Power On Reset SAU LOGIC

/RESET

RESET S Ceas de gard Q

Oscilator RC intern

Numrtor

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

146

MICROCONTROLLER-e

oscilatorul extern. Trezirea dureaz un interval de timp egal cu cel necesar pentru un RESET. modul inactiv, n care se intr cu aceeai instruciune, dar poziionnd un bit din registrul de control. n acest mod unitatea central este oprit, dar timerul, ceasul de gard i sistemul de ntreruperi continu s funcioneze. O ntrerupere intern, una extern sau un RESET trezesc circuitul.

Circuitul admite ca surse de tact: un cristal de cuar sau un rezonator ceramic, pentru aplicaii cu pretenii la stabilitatea frecvenei, (elemente conectate la pinii Xtal1 i Xtal2); un generator extern la un pin I/O (PB3); generatorul RC intern, la 1MHz. Selecia sursei ceasului pentru tact intern sau extern se face cu un bit n memoria FLASH. Circuitul este programat implicit pentru tact extern. Lucrul cu ceas intern determin posibilitatea utilizrii acestor MC cu componente externe extrem de puine. Timerul care echipeaz circuitele AT902323 este un timer pe 8 bii cu un registru de prescalare pe 10 bii. Timerul poate fi folosit cu tact intern (tactul sistemului divizat cu 8, 64, 256 sau 1024) sau cu tact extern. Sursa de tact pentru timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Funcionarea timerului este controlat de bii din din dou registre (registru de mti pentru ntreruperi i registru de control al timerului). La depire, numrtorul poate cere o ntrerupere.

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

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

5. Microcontroller-e RISC

147

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

AT902323
/RESET XTAL1/PB3 Vcc PB2 PB1 PB0

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

Programare cu tensiune mare

GND Tact

AT902323
/RESET XTAL1/PB3 Vcc PB2 PB1 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 PB1) i memoria de date EEPROM (intrarea pe PB0). Pentru programarea memoriei FLASH se trimite nti adresa apoi data (octetul LOW apoi cel HIGH). Confirmarea se obine prin trecerea lui PB2 n HIGH. Memoria EEPROM se programeaz trimind nti adresa apoi octetul de date, confirmarea fiind pe pinul PB2. Orice locaie poate fi citit folosind instruciunea de citire i adresa, obinnd pe pinul PB2 coninutul respectiv. Tactul serial este activ pe front cresctor. Scrierea, citirea i unele comenzi speciale (tergerea ntregii memorii, scrierea biilor de securitate etc.) se comand prin trimiterea naintea adresei a codului serial al comenzii respective (se gsete n foile de catalog). La programarea cu tensiune mic se poate programa memoria FLASH i memoria EEPROM tot serial, prin interfaa SPI. Datele se nscriu pe frontul cresctor a lui SCK. n acest mod de lucru, confirmarea scrierii unei locaii se face prin trimiterea n ecou a octetului scris. Comenzile se trimit la fel, prin coduri seriale. Un programator pentru astfel de MC (mod de programare cu tensiune mare) se poate realiza simplu, folosind interfaa CENTRONICS a unui PC, figura 5.9.

148 12V AT902323


STB /RESET XTAL1/PB3 Vcc PB2 PB1 GND D0 D1 ACK PB0

MICROCONTROLLER-e

INTERFAA CENTRONICS

4,5-5,5V

Figura 5.9 Programarea unui circuit AVR folosind interfaa CENTRONICS

Memoria este prevzut cu posibilitatea de protecie a programelor nscrise. Astfel, exist 2 bii de blocare n FLASH care nu pot fi teri dect prin tergerea ntregului program. Aceti doi bii pot comanda: dezactivarea unor viitoare programri ale memoriei FLASH sau EEPROM; dezactivarea unor viitoare programri ale memoriei FLASH sau EEPROM i blocarea verificrii.

Memoria mai este prevzut cu 2 bii care nu pot fi teri (fuzibili) care pot comanda: dezactivarea modului serial de programare; sursa intern sau extern pentru tact.

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

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 octei

ALU PC

Memoria de date
RAM 128 octei EEPROM 128 de octei

Magistrala de date

SPI

ADC

Timer

Timer 16b

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 bii de date, cu generarea de rat de transfer. Canalul serial poate cere ntrerupere la transmisie complet, registru de transmisie gol sau recepie complet. Recepia i transmisia se fac ca i la celelalte MC, cu un registru de deplasare pentru serializare/deserializare i un registru de date. Se poate realiza i o comunicaie serial multiprocesor (Multi- Processor Communication Mode), prin transmisia n mesaj nti a adresei unui destinatar i apoi a mesajului propriu-zis. Se poate astfel realiza o comunicaie n care un procesor este MASTER iar celelalte SLAVE. Canalul serial este controlat de un registru de comand i stare. Comparatorul analogic, pe lng ntreruperea pe care o poate genera, poate s declaneze o captur la timerul de 16 bii la acest tip de MC. Convertorul A/D este un convertor cu aproximaii succesive cu eantionare memorare i cu un bloc de multiplexare analogic pe 6 canale la intrare. Convertorul poate lucra cu conversie singular sau conversie continu. Convertorul are pini de alimentare separai din exterior i un pin pentru conectarea tensiunii de referin. Ca i tact de conversie, convertorul accept tactul sistemului divizat cu un registru de prescalare. Tactul se poate ncadra n valorile optime 50-200kHz.

150

MICROCONTROLLER-e

La terminarea unei conversii convertorul poate cere o ntrerupere. Schema bloc a convertorului este dat n figura 5.11.
Multiplexor analogic
Cerere de ntrerupere Eantionare Memorare

Intrri analogice

Convertor Analog Digital cu aprox. succesive

Selecie canal ADMUX

START ADCSR

Tact conversie

Date ADCH, ADCL (10b)

BUS INTERN

Registru de prescalare

CK

Figura 5.11 Convertorul analog-numeric

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

5. Microcontroller-e RISC

151

tergere memorie, scriere bii de securitate, scriere bii fuzibili, scriere FLASH, scriere EEPROM, citire bii de identificare, citire bii fuzibili i de securitate, citire FLASH, citire EEPROM. Modul de scriere paralel poate fi uor realizat prin intermediul interfeei CENTRONICS; citirea pentru verificare este mai complicat.
RDY/BSY /OE /WR BS XA0 XA1 +12V tact

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

+5V 8 linii de date, bidirecionale

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

Modelele AT90S4414 i AT90S8515 dispun de posibilitatea conectrii n exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la portul A magistrala de adrese (octet mai puin semnificativ) i magistrala de date multiplexate, iar la portul C octetul mai semnificativ al magistralei de adrese. De asemenea sunt disponibile i semnalele ALE (Address Latch Enable), /RD i /WR.

5.2.2

Familia ARM

Un nucleu cu arhitectur RISC de mare performan este ARM7DMI. Este conceput cu o arhitectur von Neumann, cu magistrala de date pe 32 de bii, avnd 2 seturi de instruciuni (ARM pe 32 de bii i THUMB pe 16 bii). Spaiul adresabil este de 4G. O schem bloc sumar a acestui nucleu este dat n figura 5.13. Structura UC este pipe line pe 3 nivele; extragere cod, decodificare i execuie. UC poate lucra cu date pe 8, 16 sau 32 de bii i poate executa nmuliri ntr-un singur ciclu. Nucleul are integrat i circuitul de testare JTAG i un emulator n circuit.

Setul de instruciuni THUMB pe 16 bii este un subset al setului pe 32 de bii, cele mai uzual folosite instruciuni. n acest fel se salveaz spaiu de memorare i se ctig vitez de prelucrare.

152 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 bii Bus A ALU pe 32 de bii 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 legtur. Instruciunile sunt analizate i distribuite decodoarelor corespunztoare (THUMB sau ARM). UC este echipat cu un set de 32 de registre i registre suplimentare pentru nmulire. Pentru a se putea conecta o varietate ct mai mare de interfee, magistralele sunt accesibile prin distribuitor n mai multe forme: unidirecional, bidirecional, multiplexat etc.

6
CRITERII DE PROIECTARE
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC

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

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

154

MICROCONTROLLERE

! alimentarea MC poate fi fcut din aplicaie (este posibil ca aplicaia s fie portabil, atunci este nevoie de un MC care s funcioneze la 3V; ! preul acestui MC este bun (acceptabil) pentru aplicaia respectiv. 2. Optenabilitatea MC ! trebuie s fie disponibil n cantiti suficiente; ! trebuie s fie n producia actual, dar i n viitor pentru posibilitatea aprovizionrii n viitor; ! disponibilitatea unor accesorii (convertoare A/D, D/A, alimentatoare etc). ! ! ! ! ! ! ! ! ! ! ! ! 3.Disponibilitatea suportului de dezvoltare asambloare; compilatoare; debuggere; module de evaluare; emulatoare n circuit; analizoare logice; 4. Suport din partea constructorului documentaie tehnic; buletine de aplicaii; service prin telefon (BBS); rapoarte despre probleme de funcionare; software de utilizare; dac MC este folosit i de ali utilizatori, atunci sunt formate grupuri de lucru care pot oferi ajutor. 5.Seriozitatea constructorului dac este demonstrat competena lui ; stabilitate i fiabilitatea MC realizate; viteza de livrare; numr de ani ca i constructor i rezultate financiare.

! ! ! !

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

6. Criterii de proiectare

155

American Educational Systems AES-51(8051), AES-11(68HC11), AES88(8088) conin o tastatur, un afiaj cu LCD i documentaie. Firma Texas Instruments pune la dispoziia celor interesai un set de accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS i unelte de dezvoltare (CDT). Aplicaia poate fi scris n limbajul C, de exemplu pe un PC (utiliznd orice editor) i codul pentru TMS va fi generat de link editor. Codul poate ajunge la MC prin intermediul interfeei seriale RS232. XDS analizeaz softul creat, (chiar n domeniul timp) i permite punerea la punct (chiar rularea lui pas cu pas). Exist firme specializate n construirea unor module de evaluare cu diferite MC, aa cum este de exemplu PHYTEC (www.phytec.de). Fiecare furnizor de MC pune la dispoziia clienilor un Kit de start (Starter Kit), care este un instrument foarte valoros pentru a putea ncepe lucrul cu un anumit tip de MC. Kit-ul de start conine o plac cu soclu i hard-ul aferent pentru programarea iniial a MC, uneori programarea EPROM-ului, interfaa i cablul de legtur la PC, documentaie i programe (asamblor, link editor, debugger) dar nu conine de regul un MC. Preul unui astfel de Kit pornete de la 100USD (www.schuricht.de , www.farnell.com ). Un alt argument pentru alegerea unui MC este comoditatea folosirii lui. Unele MC, aa cum este Motorola 68HC11A8P1 are nscris n ROM un program monitor (numit Buffalo). Pentru punerea n funciune este nevoie doar de o legtur serial RS232 cu un PC (este nevoie de o conversie de nivel) i se poate lucra de pe PC cu monitorul MC, rulnd programele n RAM-ul MC i stocndu-le n EEPROM. Pe Internet exist subprograme scrise n Buffalo. Un alt MC, 8052AH-BASIC conine un BASIC. MC Dallas din seria DS5000 are nevoie doar de un cristal pentru oscilator i este gata de lucru. MC conine memorie RAM static alimentat de la o baterie i programul i datele sunt astfel nevolatile.

6.2

ALGORITMUL PROIECTRII SISTEMELOR CU MC

Ne permitem s prezentm o organigram, (figura 6.1) ce ncearc s sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s le urmreasc n dezvoltarea soft-ului dedicat unei aplicaii. Trebuie s menionm c etapele 3,4 i 5 pot fi iterate. Ele duc la perfecionarea funcionrii sistemului.

156
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) proiectrii unui sistem dedicat

6. Criterii de proiectare

157

6.3

PROIECTAREA SISTEMELOR CU MC N VEDEREA SIGURANEI N EXPLOATARE

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

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

Performanele EMC pot fi mbuntite acordnd atenie deosebit urmtoarelor aspecte de proiectare:
desenul cablajului imprimat; ceasul de gard programarea defensiv

158

MICROCONTROLLERE

6.3.1 Cablajul imprimat


Orice perturbaii pe liniile de alimentare pot produce o funcionare defectuoas a sistemului. De aceea se recomand utilizarea unui cablaj multistrat la care masa i alimentarea sunt plane interne. La aplicaiile cu pre mic, o cale important de a reduce preul este folosirea cablajului dublu placat sau chiar simplu placat. La aceste tipuri de cablaj traseele de mas i +5V trebuie s fie ct mai late pentru a avea o impedan ct mai mic. Decuplarea cu condensatoare a MC trebuie s fie realizat ct mai aproape de circuit. n unele aplicaii care trebuie s fie foarte ieftine se folosete alimentarea MC de la reeaua de c.a. fr transformator, cu un redresor monoalternan (figura 6.2). MC VDD
Reea 220V DZ 5V

0,1

VSS
Mas flotant

Figura 6.2 Schema simpl de alimentare de la reea

n acest caz se creeaz o linie de mic impedan spre mas prin reeaua de alimentare de la VDD. La acest tip de alimentare se recomad decuplarea liniilor de frecven nalt spre linia de +5V. Un circuit critic este cel de generare a tactulului. Orice impuls parazit care apare modific factorul de umplere de 50% al semnalului de tact i instruciunea nu se execut corect, circuitul ieind din program. O astfel de situaie singular poate fi rezolvat de ceasul de gard care comand un RESET, dup care MC ruleaz din nou corect. Se recomand ca toate componentele aferente generrii tactului s fie situate ct mai aproape de circuit, iar dac este posibil toate traseele s fie nconjurate de un traseu lat de gard. Se recomand o decuplare a cristalului la linia de cea mai mic impedan (de regul masa) cu condensatori SMD. Se recomand s se pstreze o distan mare ntre liniile de frecven mare i circuitul de tact. Este de asemenea important protecia pinilor de intrare, cum ar fi RESET sau IRQ. Un pin n aer poate comuta dac n vecintatea lui sunt linii de nalt

6. Criterii de proiectare

159

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

6.3.2 Ceasul de gard


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

6.3.3 Programarea defensiv


Prin metodele de programare defensiv se poate mbunti mult sigurana n funcionare fr nici un hardware suplimentar. Cteva din cele mai eficiente metode sunt: rencrcarea periodic a registrelor care comand pinii I/O i a celor mai importante registre. Pinii I/O sunt legtura MC cu exteriorul, de aceea ei sunt supui perturbaiilor. Readucerea lor la nivele corecte micoreaz probabilitatea ca o perturbaie s se propage n circuit. citirea repetat a semnalelor de intrare micoreaz riscul unei citiri greite. De exemplu citirea de 3 ori la rnd a unui pin care este legat la o tast. Dac s-a citit aceeai valoare de fiecare dat se elimin posibilitatea unei perturbaii. dac exist locaii n RAM nefolosite, dup fiecare etap de rulare a programului se scrie un bit n RAM. nainte de rularea unei rutine critice se verific valoarea stocat n RAM i rutina se execut doar n cazul n care valoarea din RAM este corect. dac ntr-o aplicaie exist memorie nefolosit, aceasta se umple cu instruciuni de salt ntr-un loc cunoscut pentru ca un salt neprevzut n memorie datorat unei perturbaii s fie anulat de saltul n locul cunoscut. Folosirea watchdog-ului n faza de testare i chiar n aceea de fiabilizare a funcionrii sistemului. Implic, postarea (memorarea ntro zon specific) strilor succesive prin care trece sistemul, scrierea unei rutine de analiz a strilor i de directare a programelor ctre starea ultim postat, rutin apelat la fiecare "warm reset", sau chiar

160

MICROCONTROLLERE

la fiecare reset al sistemului. Pot fi implementate soft i alte funciuni care s permit meninerea coerenei sistemului!

7
APLICAII

7.1

IMPLEMENTAREA UNEI APLICAII SIMPLE DE COMAND I CONTROL DIGITAL

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

L1 Ev1 Ev2

L2

Figura 7.1 Structura actuatorului electro-hidraulic

162

MICROCONTROLLERE

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

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

7. Aplicaii

163

7.1.1 Varianta de implementare cu microcontroller CISC


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

AT89C2051

Tx P3.

P3. P3.

L1 L2

Figura 7. 2 Schema conectrii microcontrolerului la aplicaie

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

164

MICROCONTROLLERE

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

Valori de RESET

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

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

1.

Rutina de iniializare, INIT, va realiza urmatoarele: Umple toate locaiile memoriei interne a microcontroller-ului cu 0. (Fill Memory with zero) Aduce n pozitia de referin (pistonul atinge limitatorul L1) sistemul. Programeaz urmtoarele registre de funcii speciale (SFR Special Functions Registers) ! PSW (Program Status Word Register) ! PCON (Power On Control Regsiter) ! TMOD (Timers Mode Register) ! TCON (Timers Control Register) ! SCON (Serial Control Register) ! IE (Interuppt Enable Register) Intr n bucla de ateptare a comenzilor de la sistemul ierarhic superior, comenzi ce vor fi transmise via interfaa serial.

2.

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

7. Aplicaii

165

! Funcia de oprire la atingerea limitatoarelor a comenzii actuatorului electrico-hidraulic. 3. Programul principal, este gndit s atepte o comad din partea sistemului ierarhic superior sau s atepte ndeplinirea acesteia.

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

166

MICROCONTROLLERE

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

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

7. Aplicaii

167

TMOD GATE C/T# M1 M0 GATE C/T# M1 M0 Timer 1 Timer0

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

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

168

MICROCONTROLLERE

n modul 3 va permite multiplicarea canalelor temporizatoare/numrtoare cu un canal de temporizare/ numrtoare de 8 bii

Figura 7. 4 Structura canalului temporizator al microcontrolerului AT89C2051

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

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

7. Aplicaii

169

SCON SM0 SM1 SM2 REN TB8 RB8 TI RI

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

170

MICROCONTROLLERE

IE EA SI TF1 IE1 TF0 IE0

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

7. Aplicaii

171

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

172

MICROCONTROLLERE

STATUS CDA L2 L1

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

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

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

7. Aplicaii

173

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

174

MICROCONTROLLERE

CLR P3.6 ;terge comada corespunztoare lui Ev2 CLR P3.5 ;terge comanda corespunztoare pompei CLR STATUS2 ;terge bitul ce consemneaz micarea actuatorului SETB STATUS0 ;eteaz bitul ce specific starea "actuator retras" RETI ISR_EXT1: CLR IE.2 ;terge flag-ul de validare a ntreruperilor corespunztor sursei CLR P3.7 ;terge comada corespunztoare lui Ev1 CLR P3.5 ;terge comand corespunztoare pompei CLR STATUS2 ;terge bitul ce consemneaz micarea actuatorului SETB STATUS1 ;Seteaz bitul ce specific starea "actuator avansat" RETI Programul principal al sistemului va include doar o rutin de ateptare a unui eveniment. Iat-l: ORG 0H JMP MAIN JMP ISR_EXT0 ;Saltul la rutina de ntreruperi corespunztoare lui L1 ORG 13H JMP ISR_EXT1 ;Saltul la rutina de ntreruperi corespunztoare lui L2 ORG 23H JMP ISR_SI ;Saltul la rutina de ntreruperi corespunztoare UART ORG 100H $INCLUDE INIT $INCLUDE SERIAL $INCLUDE EXT1&2 ;Dispoziii de inserare a programelor anterioare n cadrul programului principal MAIN: CALL INIT ;Construim tabela cu salturile la rutinele de servire a ntreruperilor sau la programul principal JMP $ ;Instruciunea asigur saltul permanent la ea nsi Urmare a scrierii programului, memoria de program a sistemului dup parcurgerea etapelor de asamblare, link-editare i conversie OBJ->HEX (IntelHEX code), va cuprinde n ordine, ncepnd de la adresa 0 instruciunea de salt la programul principal, instruciunile de salt ctre rutinele de servire a ntreruperilor i rutinele de servire a ntreruperilor i programul principal n ordinea specificat prin dispoziiile INCLUDE. Odat nscris n memoria flash a procesorului, sistemul este gata s satisfac funciunile specificate n raport cu protocolul stabilit.

7. Aplicaii

175

7.1.2 Varianta de implementare cu microcontroller RISC.


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

Figura 7. 5 Structura microcontroler-ului PIC16F86

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

176

MICROCONTROLLERE

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

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 EECON1 EECON2 PCLATCH INTCON Mapped

Figura 7. 6 Registrele microcontroler-ului PIC16F84

scrierea datelor n EEPROM. Stiva microcontroller-ului este mai deosebit, respectiv este implementat ntr-o zon special a memoriei interne i are maximum 8 nivele nefiind permis citirea sau nscrierea acesteia prin adresare direct. Procesorul nu dispune de instruciuni PUSH sau POP i astfel doar prin instruciuni de tipul CALL, GOTO, RETURN, RETFIE i RETLW putem introduce, respectiv extrage informaii la nivelul stivei. O observaie important de care va trebui s inem cont, este aceea c nu este prevzut nici un indicator de depire a dimensiunii stivei, ceea ce poate duce la grave erori atunci cnd numrul de apeluri sau de instruciuni GOTO este Figura 7. 7 Structura cuvntului instruciune mai mare de 8. Instruciunile procesorului au o lime de 14 bii i ele includ att codul respectiv ct i operanzii afereni acestuia, respectiv adresa

7. Aplicaii

177

registrului din zona file Register i/sau indexul bitului corespunztor locaiei respective. Instruciunile de salt, cum ar fi, CALL i GOTO sunt singurele care dureaz mai mult de un ciclu instruciune i care necesit modificarea coninutului PC-ului. Setul de instruciuni al procesorului este ortogonal, ceea ce presupune c modalitatea de acces la orice locaie de memorie este identic att la scriere ct i la citire, att pentru zona GPR ct i pentru zona SFR. n cazul operaiilor calate pe bit, instruciunile vor citi nti tot registrul, vor opera pe bitul selectat ( specificat ) i vor ntoarce napoi rezultatul n registrul specificat. Uniformitatea n tratare att la nivel de bit ct i la nivel de octet, precum i a registrelor de uz general i special i a porturilor permite reducerea semnificativ a operaiilor de transfer intermediar care sunt specifice procesoarelor CISC. Este de menionat c Work Register (W Register), funcioneaz ca acumulator i particip la majoritatea instruciunilor att cele de transfer direct ct i la cele de transfer indirect via un registru de adresare INDR -, adic un registru ce memoreaz adresa surs sau destinaie a informaiilor. Iat cteva instruciuni pe care n cadrul programului le vom utiliza. Prezentarea lor o facem pentru c ele prezint trsturi specifice n raport cu cele de la microcontroller-ul Atmel. Aceste instruciuni le vom putea clasifica aa n : Instruciuni de transfer, aritmetico-logice i de redirectare a programului, cum ar fi: Pot conine drept parametri pn la trei valori i anume: Prin k (8 bii) specificm o valoare imediat ce este inclus n corpul instruciunii Prin f (8 bii) specificm adresa din zona de memorie File Register la care face referire instruciunea. Prin b specificm bitul la care face referire instruciunea (valoare pe 3 bii) Falg-ul d specific registrul destinaie n care se stocheaz rezultatul operaiei sau al transferului, dac acesta este 0, atunci rezultatul este reinut n regsitrul W, altfel el este reinut n registrul f din File Register. MOVF f,d Transfer data ntre W i registrul f cu indicarea registrului de memorare a rezultatului. MOVWF f Transfer data din W n registrul f MOVLW k Transfer valoare imediat k (specificat n cadrul instruciunii) n registrul W. SWAPF f,d Comutare semi-bytes n cadrul registrului f cu reinerea rezultatului n W sau f funcie de d. ANDWF f,d SI-LOGIC, ntre informaiile din W i f, bitul d are acelai rol,

178

MICROCONTROLLERE

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

Instruciuni ce permit execuia repetitiv a unui ir de operaii: DECFSZ f,d Decrementeaz registrul f i sare instruciunea urmtoare dac este zero rezultatul. Valoarea rezultat este reinut funcie de flag-ul d n W d=0 sau f d=1.

7. Aplicaii

179

INCFSZ f,d Incrementeaz registrul f i sare instruciunea urmtoare dac este zero rezultatul. Valoarea rezultatului este reinut funcie de flag-ul d n W d=0 sau f d=1. Restul instruciunilor de resetare sau setare pe bit i byte, cele de incrementare i decrementare, cele de complementare i instruciunea NOP sunt furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip). Vom utiliza instruciunile de deplasare la dreapta prin bitul de carry pentru emularea UART. Registrele generale ale microcontroller-ului asigur pe de-o parte implementarea funciunilor de control pentru program, iar pe de alt parte permit memorarea datelor i transferul comenzilor ctre mediul extern. Iat structura celor mai importante dintre acestea. STATUS
IRP RP1 RP0 T0# PD# 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 1 corespunde intervalului 100H la 1FFH. RP1,RP0 corespunde seleciei bancului de registre (la adresarea direct) selecie astfel: 00 corespunde intervalului de adrese 00H la 7FH 01 corespunde intervalului de adrese 80H la FFH 10 corespunde intervalului de adrese 100H la 17FH 11 corespunde intervalului de adrese 180H la 1FFH T0# (time out bit), exprim depirea capacitii de numrare a canalului 0, respectiv tranziia de stare de la FFH spre 00H. PD# (Power Down), odat setat exprim trezirea sistemului, la pornirea acestuia sau dup execuia instruciunii CLRWDT. n rest bitul de mai sus este resetat. Z (Zero flag), este setat la ntlnirea coincidenei a dou valori numerice sau cnd rezultatul operaiei aritmetico-logice este zero. n rest, acesta este resetat. DC (Digital Carry), exprim transportul sau mprumutul la nivel de semibyte. Setat la apariia transportului, resetat la apariia unui mprumut. C (Carry), este setat la apariia unui transport la nivel de byte, i resetat n rest. OPTION
RBPU# INTEDG TOCS TOSE PSA PS2 PS1 PS0

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

180

MICROCONTROLLERE

TOSE (TMR0 Source Edge Select), setat realizeaz incrementarea numrtorului canalului pe frontul negativ, iar resetat incrementeaz impulsurile pe frontul pozitiv. PSA, (Prescaler Assignemet Bit), setat asigneaz prescaler-ul pentru WDT (Watch Dog Timer), resetat l rezerv pentru canalul TMR0. PS2, PS1, PS0 (Bii de selecie a constantei de divizare a prescaler-ului), dup cum urmeaz: 000H reprezint 1/2 ptr. TMR0 i 1/1 pentru WDT 001H reprezint 1/4 ptr. TMR0 i 1/2 pentru WDT 010H reprezint 1/8 ptr. TMR0 i 1/4 pentru WDT 011H reprezint 1/16ptr. TMR0 i 1/8 pentru WDT 100H reprezint 1/32 ptr. TMR0 i 1/16 pentru WDT 101H reprezint 1/64 ptr. TMR0 i 1/32 pentru WDT 110H reprezint 1/128 ptr. TMR0 i 1/64 pentru WDT 111H reprezint 1/256 ptr. TMR0 i 1/128 pentru WDT Structura canalului temporizator/numrtor este ilustrat n figura 7.8. ntreruperile n cazul microcontroller-ului PIC16F84 au un singur vector, i anume cel plasat la adresa 004H din memoria de program, iar cum sursele de ntreruperi sunt n numr de patru este necesar s implementm n cadrul rutinei de servire programul de identificare i apoi de tratare a acestora. Registrul

Figura 7. 8 Structura canalului temporizator la circuitul PIC16F84

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

GIE, (Global Interrupt Enable), permite setat s valideze acele cereri de ntrerupere ce apar dac acestea au fost validate i individual, respectiv resetat inhib orice cerere de ntrerupere. EEIE (EEPROM Interrupt Enable) setat valideaz ntreruperile la operaiile de scriere sau citire a EEPROM-ului intern, resetat ignor acestecereri de ntrerupere TOIE (TMR0 Overflow Enable), setat valideaz ntreruperile corespunztoare depirii la canalul temporizator/numrtor, resetat acestea sunt ignorate

7. Aplicaii

181

INTE (External Interrupt Enable), valideaz ntreruperile datorate variaiei semnalului aplicat pe intrarea RB0 atunci cnd este setat, respectiv resetat le ignor RBIE (B Register Interrupt Enable), setat valideaz ntreruperile datorate schimbrii strii uneia dintre intrrile portului RB7, RB6, RB5 sau RB4 al microcontroller-ului, respectiv, resetat ignor schimbrile de stare la nivelul portului RB TOIF (Timer Overflow Interrupt Flag), este setat hard la apariia strii depire a capacitii numrtorului corespunztor canalului 0, resetat n rest. INTF (Interrupt Flag) setat hard la apariia unei ntreruperi la nivelul liniei RB0, n rest resetat. RBIF (B Port Interrupt Flag), setat hard, atunci cnd una sau mai multe linii ale portului B au schimbat starea, resetat n rest. Ca observaie general trebuie reinut c biii de stare prezeni n structura registrului INTCON sunt setai hard (prin mecanismul implementat n cadrul microcontroller-ului) i programatorul, n cadrul rutinei de servire a ntreruperilor, va trebui s-i reseteze, pentru a putea detecta urmtoarea condiie de declaare a ntreruperilor. Registrele EEDATA (EEPROM Data Register), reine data de nscris sau de ters din/n EEPROM, EEADR (EEPROM address), reine adresa de memorie la care, sau de la care se face: scrierea, respectiv citirea datelor i registrele EECON1 i EECON2 permit efectuarea memorrii datelor n memoria EEPROM asignnd comenzile de scriere WR sau citire i cele de validare. Avnd imaginea registrelor procesorului s gndim cum am putea utiliza acest microcontroller pentru transferul datelor i implementarea funciunilor actuatorului electro-hidraulic. Observm un fapt mai puin mbucurtor: circuitul nu dispune de o interfa serial implementat hard, deci va trebui s o emulm soft. L2 PB5 n ceea ce nseamn L1 PB4 implementarea controlului, observm c portul B este deosebit de util el detectnd Ev2 PB3 automat variaia nivelului logic pe liniile RB4 la RB7. n figura 7.9 dm schema PB2 Ev1 electric de conectare propus, schem n care am ignorat eventualele circuite PA0 p amplificatoare n comutaie sau formatoare de implus. Pentru liniile RxD i respectiv PB1 TxD TxD, vom folosi liniile portului B i anume RB6 (atenie vom utiliza i PB0 RxD facilitatea de generare a ntreruperilor la schimbarea nivelului logic pe aceast Figura 7. 9 Schema de conectare intrare, n acest sens vom folosi posibilitatea pe care aceast linie o ofer,

PIC 16F84

182

MICROCONTROLLERE

de generare a ntreruperii la sesizarea bitului de START n cazul transmisiei seriale), respectiv RB1 pentru transmisie. Principalele idei n baza crora vom emula interfaa serial sunt urmtoarele: programm timer0 astfel nct acesta s genereze cte o ntrerupere cu frecvena ct mai apropiat de frecvena de transfer serial a informaiilor. transferm cu ocazia servirii ntreruperii corespunztoare, cte un bit i rotim informaia respectiv pentru a simula felul n care decurge transferul serial pe un UART implementat hard. vom stabili rata de transfer serial, programnd corespunztor timer-ul 0 pentru aceasta. Iat cum se realizeaz acest lucru:

Formula de calcul -aproximativ3- pentru stabilirea frecvenei de transfer, dac presupunem utilizarea unui microcontroller ce funcioneaz la fClk=10MHz va fi:

BR =

f Clk 1 , 4 PS (256 CT )

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

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

Err =

r p unde p

este valoarea programat, iar

este valoarea teoretic.

7. Aplicaii

183

bit ce exprim transmisia complet a caracterului pe linia serial bit ce exprim transferul n curs la recepie (este utilizat de ISR). bit ce exprim transferul n curs la transmisie(este utilizat de ISR). Transferul se va efectua semi-duplex, cu 8 bii/caracter, un bit de start i unul de stop. Structura byte-ului de stare este cea de mai jos: SI_STARE T Unde: END are semnificaia de sfrit transmisie sau recepie byte C2,C1,C0 sunt biii utilizai pentru contorul de bii, transmii sau recepionai Astfel, la transmisie vom face urmtoarele: Transferm la locaia CHR_TRS octetul de transmis i setm flag-ul INT_TRS. Resetm linia TxD (respectiv bitul corespunztor ei, adic RB1) semnaliznd bitul de start (Break pentru transmisie). Setm bitul T, ce exprim ocuparea CPU (Central Processing Unit) cu transferul serial. Iniiem ceasul de transmisie, adic programm TMR0 n scopul generrii ntreruperilor Vom nscrie bitul corespunztor la fiecare ntrerupere pn la transferul complet al celor 8 bii. Setm linia RB1, cel puin pentru o perioad de ceas, (bitul de stop), setm bitul TI ce exprim ncheierea transmisiei caracterului (buffer de transmisie gol) pentru programul principal i resetm bitul T elibernd astfel UC de task-ul de serializare a informaiilor. La apariia schimbrii de stare pe bitul RB0, setm bitul ce consemneaz ocuparea interfeei seriale, respectiv bitul R.(recepie n curs). Pe fiecare ntrerupere de timp vom citi (eantiona) linia serial la recepie RB0 i vom scrie n Carry Flag bitul citit i vom deplasa la dreapta prin carry byte-l CHR_REC ce va conine ceea ce receptm. Dup 8 cicli de temporizare, vom seta bitul RI, ce specific pentru programul principal, recepia complet a caracterului (caracter recepionat disponibil), resetnd n acelai timp bitul CHR_REC. Va fi necesar s invalidm ntreruperile corespunztoare canalului 0 temporizator, respectiv TMR0. R TI RI END C2 C1 C0

TI R T

La recepie este necesar s parcurgem urmtoarele 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

184

MICROCONTROLLERE

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

7. Aplicaii

185

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

186

MICROCONTROLLERE

BTFSC SI_STARE,6 ;Test ntrerupere de la TMR0 la recepia caracterelor? ;Da! Intrerupere la recepia caracterelor GOTO RECEPTIE ;Nu! BTFSC SI_STARE,7 ;Test ntrerupere de la TMR0 la transmisia caracterelor? ;Da! Intrerupere la transmisia caracterelor GOTO TRANSMISIE ;Nu! Eroare, refacem doar flag ce semnaleaz ntreruperea coresp. lui TMR0 BCF INTCON,T0IF GOTO END_ISR RECEPTIE BTFSS PORTB,0 ;Eantionare linie RxD (linia RxD este linia RB0) ;Da, linia este zero! GOTO REC_ZERO ;Nu, Setez carry flag BSF STATUS,C ;Setez bitul 0 din STATUS register care este Carry Flag GOTO REC_CONT REC_ZERO BCF STATUS,C ;Resetez bitul 0 din STATUS register care este Carry Flag REC_CONT RRF CHR_REC,F ;Rotesc prin Carry locaia (file register REC_CHR) Bitul de Carry ; va ajunge n poziia bitului 7 din REC_CHR i dup 8 bii receptai pe poziia 0 INCF SI_STARE,F ;Incrementez contorul din SI_STARE i l salvez n el nsui BTFSS SI_STARE,3 ;Testez atingerea recepiei celui de-al 8-lea bit al caracterului GOTO END_REC_BIT END_REC_CHR BCF SI_STARE,6 ;Resetez flag-ul ce indic starea "n recepie caracter" BSF SI_STARE,4 ;Setez flag-ul RI, "Caracter recepionat disponibil" BCF INTCON,T0IF ;Resetez flag-ul ce semnalizeaz "overflow" canal temporizator BCF INTCON,T0IE ;Invalidez ntreruperile corespunztoare canalului temporizator BCF SI_STARE,3 ;Resetez contor numrtor bii recepionai GOTO END_ISR

7. Aplicaii

187

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

188

MICROCONTROLLERE

MOVLW 0x76 ;Maschez bitul T, i biii contorului de bii ai UART ANDWF SI_STARE,F ;Realizez resetarea biilor 7,3 i 0 din SI_STATUS BSF SI_STARE,5 ;Setez TI, indic "buffer transmisie gol" GOTO END_ISR INIT MOVLW 0x0C MOVWF FSR NEXT CLRF INDF INCF FSR BTFSC FSR,6 GOTO NEXT BTFSC FSR,4 GOTO NEXT ;Umple cu 0 memoria SRAM a microcontroller-ului de la adresa 0x0C la 0x4F BCF STATUS,RP0 ;Select bank 0 MOVLW 0x02 MOVF PORTB,F MOVLW 0x01 MOVF PORTA,F BSF STATUS,RP1 ;Select bank 1 MOVLW 0x31 MOVWF TRISB MOVLW 0x00 MOVWF TRISA BCF STATUS,RP0 ;Iniializeaz porturile A i B RETURN ;******************************************************** MAIN CALL INIT LOOP BTFSC SI_STARE,4 ;Testare dac a fost recepionat un caracter pe UART CALL EXEC_CDA ;Execuie comanda venit pe UART de la PC CONTINUE0 BTFSC INT_TRS,0 ;Testare dac este de transmis un caracter via UART CALL INIT_TRS CONTINUE1 GOTO LOOP EXEC_CDA MOVLW 0x41 ;ncarc comanda 'A' - avans

7. Aplicaii

189

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

190

MICROCONTROLLERE

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

7. Aplicaii

191

SI_STARE DB 0x00 ;Vectorul stare corespunztor UART CHR_REC DB 0x00 ;Locaie ce reine caracterul recepionat CHR_TRS DB 0x00 ;Locaie ce reine caracterul de transmis TEMP_WORK DB 0x00 ;Locaie ce memoreaz W pe durata ISR TEMP_WORK1 DB 0x00 ;Locaie ce memoreaz STATUS register pe durata ISR INT_TRS DB 0x00 ;Locaia memoreaz n bitul 0 cererea de transmisie a unui caracter. CT EQU 0x7E ;Constanta de timp coresp. ceasului UART n text toate etichetele la care se face referire sunt scrise cu caractere ngroate. Pentru a avea imaginea modului n care assembler-ul plaseaz codul nostru, dm pe CD i partea referitoare la locatare din listing-ul rezultat n urma asamblrii. Aceast list este dat cu titlu informativ pentru a putea sesiza modalitatea n care sunt asignate automat locaiile de memorie, variabilelor. n final vom face o scurt analiz comparativ a soluiilor avute n vedere la implementarea aplicaiei. Criteriul
Procesorul: Arhitectura Setul de instruciuni Registre de uz general Memoria intern Numr intrri/ieiri: Linii de comand i control Canale temporizatoare WatchDog UART Sistemul de ntreruperi Alte faciliti speciale Tensiune alimentare Programarea controller-ului Memoria de program Faciliti energetice

Atmel AT89C2051
Von Neumann CISC5 4 bancuri a cte 8 registre fiecare 128 bytes 15 I/O 2 (4 moduri de programare) 1 canal (8 bii) 256 valori 1 canal sincron/asincron Vectorizat6 Dispune de 2 intrri analogice7 2,7 la 5 V Flash Reprogramabil 2 Kbytes (CISC) Low Power i IDLE mode8

PIC16F84
Harvard RISC9 2 Bancuri File Registres a cte 68 de bytes fiecare Este organizat sub forma "File Registrers" 13 I/O 1 (2 moduri de programare) 1 canal (8 bii) 16 valori NU Cu unic adres de servire NU 2 la 6 V Programare flash tip ICSP 10 1024 x 14 bii (RISC) PowerDown11 i IDLE mode

5 6

Complex Set Instruction Computer, deci microcontroller cu un set vast de instruciuni Prin sistem de ntreruperi vectorizat nelegem capacitatea dispozitivului respectiv de a realiza automat, la servirea unei ntreruperi saltul la o adres specific sursei de ntreruperi

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

MICROCONTROLLERE

A51, SAM51, etc. Extrem de multe variante de asambloare, Compilatoare C51 i altele L51 DA DA NU 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 corespunztori fiecrui parametru (aceti factori trebuie precizai de ctre fiecare proiectant n parte) i putem calcula coeficientul de eficien al implementrii produsului. Un aspect deseori esenial l constituie pregtirea proiectanilor, experiena lor anterioar i timpul n care se preconizeaz dezvoltarea aplicaiei. Rubricile la care nu se poate rspunde de la nceput (vezi cele ce conin NU) pot influena substanial eficiena deciziei, cci, spre exemplu, pregtirea unui specialist n domeniu presupune timp i bani suplimentari pe care nu ntotdeauna i avem. (vezi rubrica strategia firmei).

Intrrile pot fi conectate intern ca intrri inversoare/neinversoare ale unui comparator analogic, ieirea acestuia fiind accesibil soft, ca bitul 6 al portului 3 al microcontroller-ului 8 Mod de funcionare n care procesorul consum puin cci reduce tensiunea de alimentare pe liniile porturilor i oprete execuia instruciunilor. Accept ntreruperile ca modalitate de ieire din stare dat 9 Reduced Set Instruction Computer, deci microcontroller cu set redus de instruciuni 10 ICSP prescurtare a In Circuit Serial Programming, este facilitatea prin care utiliznd drept linii de conexiune liniile microcontroller-ului se poate realiza programarea memoriei flash a circuitului fr ajutorul unui programator specializat 11 Mod de funcionare n care procesorul nu execut instruciuni i se izoleaz electric n raportul cu procesul controlat. Ieirea din starea dat se face doar printr-un RESET hard. 12 Exprim existena att a sistemelor de dezvoltare, a resurselor de programare: asamblor, link-editor, translator, emulator, simulator ct i a programelor de proiectare asistat a implementrii.

7. Aplicaii

193

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

7.2

IMPLEMENTAREA INTERFEELOR LA PROCES

n acest paragraf vom aborda cteva aplicaii care presupun folosirea convertoarelor analog-digitale i a celor digital-analoge n aplicaii de comand i control. n acest sens vom exemplifica interfaarea sistemelor cu urmtoarele tipuri de convertoare: 1. 2. 3. 4. 5. Convertoarele analog digitale controlabile serial Convertoarele analog digitale controlabile paralel Convertoarele analog digitale complexe Convertoarele digital analoge controlabile serial Convertoarele digital analoge controlabile serial.

Vom prezenta pentru fiecare dintre aceste cazuri att aspectele legate de implementarea hardware, inclusiv caracteristicile convertoarelor, ct i aspectele ce in de implementarea software.

194

MICROCONTROLLERE

7.1.1 Convertoare A/D controlabile serial


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

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

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

7. Aplicaii

195

10KHz i 1,2 MHz, ceea ce corespunde unor rate de eantionare a semnalului analogic cuprinse ntre:625 Hz i respectiv 75kHz. Impulsurile corespunztoare de ceas sunt oferite de conexiunile pe care le vom realiza ntre convertor i microcontroller. Am ales tot microcontroller-ul Atmel, avnd n vedere simplitatea schemei ce implementeaz aplicaia i faptul c acesta prezint dou canale numrtoare temporizatoare ceea ce favorizeaz aplicaia. Timing-ul este prezentat n figura 11, iar schema de conectare n figura 12.

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

RxD

P1.5

CS#

P1.4 DCLOCK P1.7 DOUT

AT89C2051

ADS7822

TxD

Figura 7. 12 Structura sistemului de achiziie schem simplificat

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

196

MICROCONTROLLERE

Dac microcontroller-ul funcioneaz la o frecven de ceas de 24MHz, teoretic frecvena maxim pentru semnalul DCLOCK ar trebui s fie de 1MHz, dar va trebui s inem cont de alte cteva amnunte, i anume: ntrzierea datorat procesului de servire a ntreruperilor, care n acest care este de minimum 7 s. De ntrzierea datorat execuiei instruciunilor rutinei de servire a ntreruperilor De ntrzierile (care pot fi aleatorii) datorate proceselor de schimb de informaie concurente procesului de achiziie, cum ar fi procesul de transfer serial al datelor ctre sistemul ierarhic superior, alte procese ce concur la buna funcionare a sistemului, etc.

n final, vom specifica cum se calculeaz frecvena maxim de ceas corespunztoare achiziiei de semnal. n figura 7.13 dm structura principalelor fluxuri de informaie n cadrul sistemului propus. Proiectarea programelor n cazul astfel specificat, implic:
START

INIIA LIZA REA SISTEM ULUI A teapt

ntre rupere

S-A PRODUS UN EVENIM ENT

ntre rupere

Servire ntrerupere corespunztoare UART, respectiv RI sau TI

Servire ntrerupere corespunztoare canalului T0 Implementeaz achizi ia

Figura 7. 13 Structura soft-ului aferent sistemului

Iniializarea de sistem, ceea ce presupune: Resetarea memoriei sistemului, Setarea valorilor corespunztoare frecvenei de achiziie, Scrierea rutinelor de servire a ntreruperilor Implementarea transferului semnalului de ceas ctre convertorul A/D Implementarea achiziiei datelor de la convertor

7. Aplicaii

197

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

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

198

MICROCONTROLLERE

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

7. Aplicaii

199

(12) ANL A,#0F0H ;Maschez LSB=biii 4-7 ai LSB (12) ORL A,DATA_LSB (12) MOV DATA_LSB,A ;Formez primii 8 bii ai datei convertite (24) POP ACC (12) ANL A,#0FH ;Maschez cel mai seminificativ semibyte (12) MOV DATA_MSB,A ;Formez urmtorii 4 bii -cei mai ;semnificativi (24) POP PSW ;Refac starea PSW dinaintea intrrii n ntreruperi (24) POP ACC ;Refac starea ACC dinaintea intrrii n ntreruperi (24) RETI 180/12=8,5S este timpul ct dureaz execuia instruciunilor de mai sus 66,5S ESTE TIMPUL TOTAL CORESPUNZTOR ISR _T0 ;Rutina de servire a ntreruperilor corespunztoare UART ;Sistemul va transmite date doar la cererea sistemului ierarhic superior i ;numai maximum doi bytes ORG 23H ISR_SI: (24) JB RI,REC ;Testare dac a fost recepionat un caracter TRS: ;NU! Intrerupere la transmisie (12) CLR TI (12) JNB TRS_MSB,END_TRS;Test dac mai sunt de transmis date (12) MOV SBUF,DATA_MSB ;Transfer MSB data achiziionat (12) CLR TRS_MSB END_TRS: (24) RETI REC: (12) CLR RI (12) MOV DATA_REC,SBUF ;Scriu data n buffer-ul de recepie (12) SETB REC_EN ;Specific recepia unui caracter (24) RETI MAIN: CALL INIT ;Rutina de initializarea a sistemului LOOP: JNB REC_EN,LOOP ANALIZA: MOV A,#'A' ;Incarc primul caracter utilizat drept comanda CJNE A,DATA_REC,CONTINUE0 CALL INIT_ACHIZITIE JMP LOOP CONTINUE0: ;Aici pot fi inserate celelate teste pentru comenzile pe care le instituim prin protocol ; NOP

200

MICROCONTROLLERE

INIT_ACHIZITIE: ;Rutina de initiere a achizitiei datelor trebuie sa valideze intreruperile ;corespunzatoare canalului 0 si sa incarce constanta de timp corespunzatoare ;ratei de esantionare MOV TH0,#CT_H MOV TL0,#CT_L SETB TR0 SETB T0 RET INIT: ;Rutina de iniiere de sistem. Nu mai detaliem iniializarea memoriei MOV IE,#90H ;Iniializez ntreruperile corespunztoare UART MOV PSW,#0 ;Iniializez PSW MOV SCON,#SET_UART ;Iniializez UART MOV TMOD,#SET_TIMER ;Setez modurile de funcionare ale timer-elor MOV TL1,#0 MOV TH1,#SET_T1 ;Setez constantele de timp RET S observm c dac calculm timpul de execuie corespunztor instruciunilor rutinei de servire a ntreruperilor la achiziia datelor n cazul unei frecvene de ceas de 24 MHz obinem o durat de 66,5 s, adic frecvena maxim de achiziie este de: 15.037 Hz. Putem constata c i n situaia n care am utilizat facilitile hard de sincronizare, respectiv sistemul de ntreruperi totui viteza de achiziie este puternic legat de modul de implementare prin program a acesteia, deci acest aspect va trebui cu cea mai mare grij analizat i proiectat. Observm c dac am fi utilizat la achiziia datelor de la convertorul analog-digital facilitatea interfeei UART a microcontroller-ului (vezi modul 0 de funcionare) am fi putut crete frecvena maxim de achiziie aproape de limita superioar corespunztoare convertorului analog-digital. n acest caz, observm c ar fi fost necesar s recepionm sincron doi octei, ceea ce ar fi dus la consumarea unui timp de aproximativ 16 ciclii de ceas, adic la 24 MHz timpul de achiziie ar fi fost de 8s, ceea ce corespunde unei rate de eantionare de 125000Hz ceea ce evident c depete frecvena maxim admisibil a convertorului. Evident, n acest caz am fi renunat la utilizarea UART drept port de legtur cu sistemul ierarhic superior.

7. Aplicaii

201

7.1.2 Interfaarea paralel a convertoarelor A/D

n acest scop vom utiliza convertorul ADS7821 convertor cu registru de aproximaii succesive de 16 bii. Cteva date tehnice importante: frecvena maxim 100 kHz, domeniul tensiunilor de intrare: 0 la 5 V, poate utiliza att o referin de tensiune intern, ct i una extern, poate fi conectat direct la un bus de sistem. Schema bloc a sa este prezentat n figura 7.14.

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

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

202

MICROCONTROLLERE

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

AT89C205 1

ADS782 1

P 1 .0-7

6- 1 3

Figura 7. 15 Schema de conectare

7. Aplicaii

203

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

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

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

204

MICROCONTROLLERE

4. vom proiecta rutina de iniializare 5. vom scrie programul principal de funcionare ce cuprinde rutina de analiz a informaiilor vehiculate prin UART Programul ce implementeaz aceast aplicaie a considerat urmtorul protocol: Caracterul A reprezint comanda de achiziie necondiionat a datei Caracterul C reprezint comanda de achiziie continu cu o rata fix de eantionare, aprioric stabilit prin constantele de timp CT_L i CT_H a datelor Caracterul D reprezint comanda de transfer a datei achiziionate via interfaa UART. Dm n continuare programul: CT_L CT_H CT_SMOD CT_ST CT_SSCON ;Valori pentru analogic 00H 80H EQU 21H ; EQU 55H ; EQU 5CH ; constanta de timp necesara la declansarea conversiei semnalului EQU EQU

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

7. Aplicaii

205

SETB P3.7 >MSB datei

;Comanda switch-area bytes: LSB <-

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

7. Aplicaii

207

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

7.1.3 Convertoare A/D complexe


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

Figura 7. 17 Structura convertorului sigma/delta ADS1210

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

208

MICROCONTROLLERE

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

Figura 7. 18 Diagramele de timp corespunztoare interfeei seriale

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

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

7. Aplicaii

209

Pentru a putea scrie programele de iniializare i cele de achiziie este necesar s cunoatem structura regitrilor interni ai convertorului. Registrul de instruciuni este cel prin intermediul cruia se controleaz transferul informaiilor i are structura: INSTR R/W# MB1 MB0 0 A3 A2 A1 A0

Bitul R/W# specific tipul operaiei: de citire/scriere respectiv 1/0 logic. Biii MB1 i MB2 codific numrul de octei de comand pe care circuitul i va recepiona, via interfaa serial: combinaia 00 corespunde unui octet, 01 la doi octei, 10 la 3 octei i 11 la 4 octei transmii succesiv. Biii A3,A2,A1,A0 adreseaz regitrii interni ai convertorului, conform tabelului alturat.

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

210

MICROCONTROLLERE

Byte 3 (MSB)
BIAS O = Off REF 1 = On DF 1 =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 1 ea este 1,33*2,5V adic aproximativ 3,3V. Un 1 logic pe bitul REF asigur utilizarea sursei interne de referin, iar 0 aduce n starea de mare impedan aceast surs, permitnd utilizarea unei surse de referin externe. DF exprim formatul datelor, 0 implic formatul datelor n complement fa de doi +FSR=7FFFFFH, 0=000000H, iar -FSR=800000H (FSR este abrevierea scalei complete "Full Scale Range"). U/B# exprim cnd este 0 achiziia bipolar a datelor, iar cnd este 1 exprim achiziia unipolar a acestora. BD exprim ordinea de transfer a bytes, setnd bitul ordinea este cresctoare de la LSB ctre MSB i invers dac-l resetm. MSB exprim cine este primul bit emis n cadrul fiecrui byte, 1 implic transferul nti al bitului cel mai nesemnificativ, iar 0 implic transferul nti al bitului cel mai semnificativ. SDL comand utilizarea a unei linii bidirecionale seriale (SDIO) dac este resetat, respectiv a dou linii seriale dac este setat (SDIO pentru comenzi i SOUOT pentru date) DRDY# exprim resetat prezena datelor (Data Ready), iar setat exprim date invalide. MD2 MD1 MD0 G2 G1 G0 CH1 CH0

Byte 2

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

7. Aplicaii

211

Byte 1 SF2 SF1 SF0 DR12 DR11 DR10 DR9 DR8

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

n modul de conectare ce utilizeaz liniile SDIO i SDOUT convertorul poate fi controlat dinamic, respectiv poate lucra n modul de citire continu, admitnd n acelai timp comenzi prin intermediul liniei SDIO i genernd date via linia SDOUT. (vezi documentaia firmei Burr - Brown, memorat pe CD) Implementarea unui ciclu descriere a comenzilor n modul slave presupune ndeplinirea urmtorilor pai: 1. Ateapt ca ADS1211 s plaseze DRDY# pe zero logic 2. Ateapt ca CS# s treac la rndul su n zero logic 3. Genereaz 8 cicluri de ceas pentru a trece n instruction register data de configurare via SDIO 4. Genereaz n ciclii de ceas de transmisie pentru nscrierea regitrilor int ai comenzilor (vezi documentaia la ADS1210 ads1210.pdf de la Burr-Brown) 5. Ads1210 pune pe 1 logic DRDY Repet paii 3 la 5 pn la transmiterea tuturor cuvintelor de comand ctre ADS1210, dup care intr n ciclul/ciclurile de citire a datelor, ceea ce presupune: 1. 2. 3. 4. Ateapt ca ADS1211 s plaseze DRDY# pe zero logic Ateapt ca CS# s treac la rndul su n zero logic Dac este n modul citire continu (Continous Read), trece la pasul 5 Microcontroller-ul genereaz 8 ciclii de ceas i transfer cuvntul de control n registrul de instruciuni via SDIO 5. Dac utilizm SDIO drept linie bidirecional vom urmrii evoluia acesteia n continuare, dac nu, atunci linia SDIO trece n starea de mare impedan 6. Microcontroller-ul emite n ciclii de ceas (n multiplu de 8) i transmite/recepioneaz informaia din registrul specificat prin instruciunea de la punctul 4. Recepia acestor bii se face pe linia SDOUT sau SDIO dup caz. 7. SDOUT sau SDIO intr n starea de mare impedan, dup ce a transmis informaia comandat

212

MICROCONTROLLERE

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

7. Aplicaii

213

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

7.1.4 Convertor D/A controlabil serial


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

214

MICROCONTROLLERE

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

"Latch Enable", lctuiete informaia serial receptat i o aplic convertorului la momentul validrii lctuirii.

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

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

bit. Frontul pozitiv reprezint frontul pe care data este memorat n registrul de deplasare aflat pe intrarea convertorului digital-analog PCM56. Intrarea LE trebuie s stea pe 1 logic cel puin un ciclu de ceas, ea plasndu-se pe durata transferului serial al datelor pe 0 logic. La sfritul transferului ea va fi trecut n 1 logic pentru cel puin 1,5 perioade de ceas.

7. Aplicaii

215

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

216

MICROCONTROLLERE

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

7. Aplicaii

217

MOV R0,#7FH LP: MOV @R0,#00H DJNZ R0,LP ;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului MOV SP,70H ;Setez adresa pentru stiva sistemului CALL INIT ;Realizez initializarile canalelor temporizatoare si a interfetei seriale MOV IE,#92H ;Validez ntreruperile corespunztoare canalului 0 temporizator i UART LOOP: ;Se va particulariza programul funcie de protocolul dorit i funcie de ;particularitile sistemului JNB REC,LOOP ;Testare caracter recepionat i comanda corespunzatoare codului asignat ; ................ CLR REC ;Reanclaare analiz a unui eventual nou caracter recepionat via UART JMP LOOP INIT: MOV TMOD,CT_TMOD MOV TCON,CT_TCON MOV TL0,#CT_LOW0 MOV TH0,#CT_HIGH0 MOV TL1,#CT_LOW1 SETB 0D7H ;Dublez rata de transfer serial a informaiilor =>PCON.7=SCON=1 RET END

7.1.5 Programarea unui sistem de dozare gravimetric dotat cu microcontroller


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

218

MICROCONTROLLERE

2. Subsistemul electronic de msurare a tensiunii aprute n reazemul ctre sistemul de referin fix format din cadrul cntarului. Principiul de funcionare al cntarului dozator este acela de transformare a greutii corespunztoare materiilor prime pulverulente n semnal electric prin

AFISAJ SI TASTATUR

CNTAR DIFERENTIAL (PARTEA MECANIC)

Captor Tensometric

PREAMPLIFICATOR AMPLIFICATOR

CONVERTOR ANALOG-DIGITAL

PORT INTRARE

SISTEM DIGITAL CU MICROCONTROLLER

Figura 7. 22 Structura dozatorului gravimetric

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

7. Aplicaii

219

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

=a

1 , unde: 2( a + b ) +

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

220

MICROCONTROLLERE

convertorului pe 16 bii se poate cupla direct la magistrala de date a sistemului 13 digital, domeniul temperaturilor de funcionare 40 la +85C. Sistemul digital: asigur comanda i controlul de ansamblu, permite implementarea funciunilor de msurare, prelucrare, memorare, dozare i afiare a greutii materiilor prime pulverulente. Unitatea central PCB80C552, dispune de o memorie intern de 256 bytes, iar sistemul de o memorie extern de 64Kbytes( 32K EPROM /32KSRAM). Pentru a se realiza funciunile sistemului s-au adugat porturi digitale de ieire i intrare de cte 8 bii fiecare, implementate cu circuitele 74LS374, 74LS574, respectiv 74LS244 i 74LS574 care au o capabilitate n curent la ieire de 20-24mA/ieire. Afiajul cu LCD-uri este implementat cu circuitul LTN211, circuit ce posed un microcontroller, memorie intern i un generator de caractere necesar afirii a pn la 512 caractere diferite. Capacitatea acestuia este de 2x16 caractere. Afiorul cu LED-uri este clasic, transferul informaiilor binare ctre acesta realizndu-se serial (vezi schema pe CD). S-a prevzut o plac special de ieiri numerice pe relee (4 buci cu cte 2 contacte fiecare de cte 8 A), i 8 intrri digitale izolate galvanic. Tastatura sistemului cuprinde 12 taste scanate soft de ctre procesor. Dintre funciunile pe care sistemul le implementeaz amintim: Dozarea n fluxul tehnologic a materiilor prime pulverulente Filtrarea automat a datelor de msurare prin medierea unei serii de eantioane. Tararea automat realizat la nceputul procesului de dozare, sau la cereera operatorului. Alte funciuni implementate: Presetare greutate de dozat Presetare tempozare la sfritul procesului de dozare ( rezoluie 1 secund, domeniu 0 la 999s) Presetare tempozare pentru pornirea amestectorului ( rezoluie 1 secund, domeniu 0 la 999s) Presetare tempozare la sfritul procesului de golire a cntarului ( rezoluie 1 secund, domeniu 0 la 999s) Determinare TARA Afiare presetare greutate de dozat Afiare presetri temporizri Setare constant de calibrare Afiare constant de calibrare

13

ATENIE: se recomand buffer-area ieirii convertorului cu buffer-e n tehnologie Shotky pentru a nu permite traversarea convertorului de ctre glich-uri ce pot apare pe partea analogic de prelucrare a informaiilor. Aceti parazii pot afecta funcionarea corect a sistemului!

7. Aplicaii

221

Transfer serial n format binar a greutii msurate n fazele de dozare i golire a cntarului (formatul datelor: asincron, rata 9600 Bauds, 8 bii/cuvnt, fr paritate, 2 bii de stop)

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

222

MICROCONTROLLERE

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

7. Aplicaii

223

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

224

MICROCONTROLLERE

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

7. Aplicaii

225

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

BIT_6 BIT_7 BUF_AF:

226

MICROCONTROLLERE

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

7. Aplicaii

227

timp mai sus precizate. Cum sistemul este un sistem de comand i control (comanda elementelor auxiliare ale dozatorului care realizeaz umplerea automat a sa, precum i un sistem de msurare, cci sistemul cntrete o anumit cantitate ce este prescris pe fluxul tehnologic), cu un numr de 8 stri, acestea au fost numerotate i stocate mpreun cu restul variabilelor att n memoria intern ct i n cea extins a microcontroller-ului. Actualizarea strii s-a realizat de fiecare dat imediat dup ce starea respectiv a aprut. Rutina de iniializare a sistemului a fost modificat astfel nct dup fiecare RESET, s analizeze starea sistemului i funcie de aceasta s realizeze saltul la nceputul programului corespunztor strii. Enumerm strile principale ale sistemului i variabilele ce sunt modificate n concordan cu acestea. 0=stare ateptare programare / comand sistem Variabilele: DOZ=0 i PRG=0 1=stare programare sistem de la tastatur implic Variabilele: PRG=1 i DOZ=0 2=stare dozare: Variabilele: PRG=0 i DOZ=1 3=stare temporizare1 Variabilele PRG=0 i DOZ=0 4=stare temporizare2 Variabilele PRG=0 i DOZ=0 5=stare temporizare3 Variabilele PRG=0 i DOZ=0 6=stare aseptare comand manual de golire 7=stare temporizare la comanda clapei de golire 8 stare de temporizare pentru blocarea clapetei de golire Sistemul este supervizat de un calculator de proces ce asigur integrarea sa pe linia tehnologic, dar poate funciona i autonom, caz n care operatorul poate interveni pentru a goli manual containerul dozatorului. Prezentm n continuare acea parte din programul de funcionare ce realizeaz directarea corespunztoare a execuiei dup ce s-a generat semnalul de RESET. MAIN: ANL IE,#00H ;Invalidate ntreruperile MOV DPTR,#HPRT_O2 MOV A,#00H MOV PORT_O2,A ;Oprete motor ce introduce materie pulverulent n cntar - comanda este dictat ;de fluxul tehnologic specific MOV R0,#7FH INIT_1:MOV @R0,#00H DJNZ R0,INIT_1 ;Iniializare memorie intern cu 0 ORL TCON,#0CH ;Valideaz activarea ntreruperilor exeterne de stare 1 pe front - se evit astfel ;reanclanarea ntreruperilor n cazul cnd nivelul semnalului rmne prea mult ;timp n 0 logic. MOV SP,#6EH ;Poziionare stiv sistem la adresa 6EH ;Testare stare sistem - este executat pentru o eventual resetare ca urmare a ;aciunii Watch Dog-ului, care genereaz ceea ce se cheam "Warm Boot"

228

MICROCONTROLLERE

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

14

Am plasat n zona de memorie intern extins o copie a tuturor variabilelor de stare importante, cci pe de-o parte memoria RAM intern a fost utilizat pn la limita ei fizic, iar pe de alt parte memoria extins poate fi cu o probabiliate net mai redus afectat de erori, cci ea este accesat doar prin instruciunea MOV @R0,A (deci indirect) 15 Procesorul 80C552 prezint o memorie intern extins (256 bytes), dintre care primii 128 sunt identici cu cei ai procesoarelor 8051, iar urmtorii sunt "umbrii" de zona SFR a UC. Accesarea lor poate fi fcut doar indirect prin intermediul registrului R0.

7. Aplicaii

229

CJNE A,#00,ERR_RESET2 ;Testare "COLD RESET"16 -stare 0 JMP ERR_RESET1 ERR_RESET2: CJNE A,#01H,ERR_RESET3 ;Testare - stare 1 JMP ERR_RESET1 ;Revenire la starea 1 ERR_RESET3: CJNE A,#02H,ERR_RESET4 ;Testare stare 2 MOV DPTR,#ERR_END_DOZ ;Stare DOZARE PUSH DPL PUSH DPH SETB DOZ ;Se reia procesul de dozare cu considerarea greutii dozate pn la momentul ;apariiei incidentului17 JMP ERR_DOZ ERR_RESET4: CJNE A,#03H,ERR_RESET5 ;Testare stare 3 JMP ERR_TEMPO1 ERR_RESET5: CJNE A,#04H,ERR_RESET6 ;Testare stare 4 JMP ERR_WAIT_STGOL ERR_RESET6: CJNE A,#05H,ERR_RESET7 ;Testare stare 5 JMP ERR_TEMPO3 ;Eroare aparut n bucla de ateptare apsare buton pentru golirea containerului ERR_RESET7: CJNE A,#06H,ERR_RESET8 ;Testare stare 6 JMP ERR_TEMPO2 ERR_RESET8: CJNE A,#07H,ERR_RESET9 ;Testare stare 7 JMP GOLIRE ERR_RESET9: CJNE A,#08H,ERR_RESET1 ;Testare stare 8 JMP ERR_TEMPO_GOL PRIM_RESET: ;Programul de iniializare la Cold Reset MOV R2,#7FH MOV R0,#0FFH INIT_2: MOV @R0,#00H
16

Este necesar testarea redundant a acestei stri cci apariia semnalelor parazite are caracter aleator 17 Aceast stare este tratat deosebit de celelalte, cci este necesar o cntrire distinct a pulberii aflate n buncrul cntarului dozator, iar pe de alt parte trebuie analizat valoarea curent a greutii acesteia n raport cu cea prescris i trebuiesc luate acele decizii care se impun, inclusiv generarea semnalelor de eroare n dozare atunci cnd cantitatea de dozat a fost depit.

230

MICROCONTROLLERE

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

You might also like