Professional Documents
Culture Documents
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.
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)
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
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
Vom defini un microcontroller pornind de la o reprezentare simplificat a sa n interaciune cu mediul (figura 1.1).
Programe
Memoria
Intrri
Ieiri
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.
Dispozitive I/O
Reset
Oscilator
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. 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. 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.
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
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
[1]
pin I/O
[1] Buffer de ieire [2] Buffer de intrare (activ pentru DDR=0) [3]Buffer de intrare (activ pentru DDR=1)
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
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
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.
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
CLK
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
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
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
ICxF
Detector de tranziii
Pin ICx
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
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
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
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
clock intern
BUS INTERN
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.
28
MICROCONTROLLERE
Mux analogic
E/nM
pin start
Selecie canal
START
STOP Date
Registru de date
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)
MICROCONTROLLERE
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
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
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.
MICROCONTROLLERE
Unitate de control
BUS INTERN
RS reg. de stare
RC
reg. de comenzi
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
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
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
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.
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>
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
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>
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
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
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
Mnemonic
Aciunea
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)
LINK-EDITAREA
CONVERSIA FI IERELOR OBIECT N FI IERE FORMAT INTEL-HEX TRANSFERUL FI IERELOR PE SISTEMUL DE DEZVOLTARE I DEPANAREA APLICA IEI
FIIER SURS
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 FORMAT INTEL - HEX FIIERUL OBIECT ABSOLUT FIIERUL SIMBOLIC DIGITAL RESEARCH HEX FIIERUL N FORMAT MICROTEK
CONVERTORUL OHS51
56
MICROCONTROLLERE
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
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
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
Porturi de intrare
Porturi de ieire
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)
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
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
Port A
Port B
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
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. Microcontrollere Motorola
73
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. 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.
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)
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)
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.
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.
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
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.
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
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
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
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-
Registre USB
Stabilizator 3,3V
BUS INTERN
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)
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
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
Driver de segmente
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.
PA
PA0PA7
D0-D7
PB
PB0PB7
A8-A12
PC
PC0PC4
TxD
RxD
88
MICROCONTROLLERE
Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A12) se stabilesc la portul C (PC0-PC4). Liniile cu datele de nscris se stabilesc la portul B. Registrul folosit pentru programarea EPROM-ului este registrul de programare (PROG). Bit 2- LAT (Latch Enable Bit), poziionat n 1, comand ca liniile de adrese i date s fie bufferate pentru ca n urmtorul ciclu s se fac o scriere a EPROM-ului; Bit 0 (PGM) valideaz tensiunea Vpp pentru programarea EPROM-ului.
Se pune problema cum se poate ca un MC care nu a fost programat s lucreze sub comanda unui program ca s poat avea acces la programarea unui registru. Pentru programare MC trebuie s lucreze n modul bootstrap, mod n care MC intr prin forarea liniei IRQ n timpul unui RESET. Programe simple utilizator pot fi introduse n RAM prin interfaa SCI (Serial Communications Interface) i rulate. Programul se transmite prin interfaa serial, dup care se ruleaz programul din RAM. Parametrii comunicaiei implicii la Reset sunt 8 bii de date i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint numrul total de octei care vor fi trimii. Coninutul EPROM-ului poate fi verificat prin citirea lui tot prin SCI. Coninutul EPROM-ului se poate ascunde, aa nct s nu mai poat fi citit din exterior, prin poziionarea unui bit de securizare n registrul de opiuni (adresa 1FDFh).
3.2
MC M68HC08
Familia 6808 urmeaz n timp familiei 6805, bineneles cu mbuntiri care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu cele din familia descris n subcapitolul anterior (3.1). Ca mbuntiri ale UC 6805 pot fi menionate: indicatorul de stiv este un registru de 16 bii (13 la 6805); registrul de index este de 16 bii, exist posibilitatea manipulrii separat a octetului superior i a celui inferior (8 bii la 6805); frecvena intern CPU standard este de 8MHz (2MHz la 6805); se pot adresa 64K octei memorie de date sau program (2K-16K la 6805), are 16 moduri de adresare (8 la 6805) i 78 de noi coduri de instruciuni; se pot face mutri de date ntre locaii de memorie fr intermediul acumulatorului; UC poate executa mpriri de operanzi de 2 octei la operanzi de 1 octet; operarea secvenial a UC poate fi oprit de dou tipuri de evenimente: reset sau ntreruperi. Sursele de Reset suplimentare fa de 6805 sunt:
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.
Port A
Port B
Port C
Port D
Port E
Seriale
Port F
Port G
Port H
ADC
Timer
Tastatur
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. 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.
ADC
Cerere de ntrerupere Ceas de conversie
Intrri analogice
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
Transceiver
Magistrala
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
TxE 0
Tx1 TxCAN
PRIO
Tx2
PRIO
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
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.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.
MICROCONTROLLERE Port C
Port E
Timer
Port ADC
PWM
Port QS
Port GP
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
Tabelul 3.6 arat principalele performane, comparativ, pentru MC din familia Motorola:
Tabelul 3.6 Tabel comparativ pentru MC Motorola - CISC
Magistrala date 8 8 16 32
de Frecven a (MHz) 2 8 16 16
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
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
Adrese
(EPROM)
RAM
Magistral de date
Timer
Controlle r de P0 P1
I n P2 P3
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
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.
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.
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.
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
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.
108
MICROCONTROLLER-e
- 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. 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
Circuitul poate fi folosit i cu un tact extern, legnd X2 la mas, iar la X1 se leag un oscilator extern.
Operaia Programare
RST 1
nPSEN
ALE
/EA/VP P
P2.7 1 0 1
P2.6 0 0 1
0 0 0
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
8051 are 111 instruciuni din care 64 sunt executate ntr-un singur ciclu.
4. Familia MCS-51
111
- adun operandul cu 1 i pune rezultatul ca nou operand. - adun acumulatorul cu operandul surs i pune rezultatul n A. - adunare ca la ADD dar se adun i bitul CY (Carry) din PSW. - ajustare zecimal, corecteaz suma care rezult din adunarea a doi operanzi zecimali cu maxim 2 cifre.
Scdere: SUBB - scdere cu mprumut, scade operandul din acumulator, apoi scade CY i pune rezultatul n A. DEC - scade 1 din operand i pune rezultatul ca nou operand. nmulire: MUL - execut o nmulire fr semn ntre acumulator i registrul B, rezultatul obinut fiind pe 2 octei (octetul cel mai semnificativ se pune n B). Dac toi biii din octetul cel mai semnificativ al rezultatului sunt 0 bitul OV i CY din PSW se pun la 0. mprire: DIV - execut mprirea fr semn a coninutului registrului A la coninutul registrului B. Partea ntreag a rezultatului se pune n A, iar partea fracionar n B. Instruciuni pentru operaii logice: Instruciuni logice cu un singur operand: CLR - reseteaz A orice bit adresabil direct. SETB - seteaz orice bit adresabil direct. CPL - complementeaz coninutul lui A, fr a afecta PSW. RL - rotaie stnga a acumulatorului. RLC - rotaie stnga a A prin CY. RR - rotaie dreapta a A. RRC - rotaie dreapta a A prin CY. SWAP - inverseaz niblurile n A. Instruciuni logice cu 2 operanzi: ANL - I logic. ORL - SAU logic. XRL - SAU EXCLUSIV logic. Instruciuni de control: Apeluri i salturi necondiionate: ACAL - este o instruciune pe 2 octei de apelare a unui subprogram care se folosete atunci cnd adresa de salt este cuprins n 2K ai paginii curente. Cmpul de adres de 11 bii este concatenat cu cei mai semnificativi 5 bii din PC. LCALL- este o instruciune pe trei octei de apelare a unui subprogram care adreseaz toi cei 64K ai memoriei. RET - transfer controlul la adresa de ntoarcere care a fost n prealabil salvat n stiv i decrementeaz registrul SP cu 2.
112
MICROCONTROLLER-e
AJMP - este un salt necondiionat la adresa specificatanalog cu ACALL. LJMP - este un salt necondiionat la adresa specificat analog cu LCALL. SJMP - este un salt necondiionat scurt n cadrul a 256 de octei. Salturi condiionate: JZ - execut salt dac acumulatorul este 0. JNZ - execut salt dac acumulatorul nu este 0. JC - execut salt dac bitul de CY (Carry) este 1. JNC - execut salt dac bitul de CY este 0. JB - execut salt dac bitul adresat este 1. JNB - execut salt dac bitul adresat este 0. JBC - execut salt dac bitul adresat este 1 i apoi terge bitul adresat. CJNE - compar primul operand cu al doilea operand i face salt dac acetia nu sunt egali. DJNZ - decrementeaz operandul surs i pune rezultatul n operandul destinaie. Dac rezultatul nu este 0 se execut salt. ntreruperi: RETI - ca i RET, dar activeaz ntreruperile.
4. 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
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
ECNTRL
ETIM
EDATA
EADRH
EADRL
BUS INTERN
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. 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.
116
MICROCONTROLLER-e
4.4
4. Familia MCS-51
117
S1ADR B U S
S1DAT
Generare ceas
I N T E R N
S1CON
S1STA
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. Familia MCS-51
119
8051
BUS INTERN
Interfa I2C
SCK
MICROCONTROLLER-e P1.3
P1.4
P1.5
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.
122
MICROCONTROLLER-e
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
RAM ROM
Magistral de date
8x6bit PWM
14bit PWM
DAC
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 PWM7 Numrtor 14 bii Canal PWM7 (6 bii) Tact= f/4 Registru TDACL, TDACH Canal PWM8 (14 bii) P0.6
P1.0
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.
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 JTAG
BUS CSI
Matrice de legturi
Matrice de legturi
4. Familia MCS-51
127
Ieiri
Intrri
D EN T
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
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
PSEN /RD
/PSEN
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
P6
P7
4.6
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
PC
SDA date
PIO
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
Adresa(H) 00 01 02 03
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
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:
Memoria poate fi programat n circuit (variantele cu EPROM). Aceasta se realizeaz simplu, cu 2 linii, una de date i una de tact, conform figura 5.3.
135 PIC12C5xx
Vdd Vss /MCLR/Vpp GP1 GP0
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
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 .
Timer
Ceas de gard
3x TIMER
UART
PIO
Port C i D Port B Port A
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
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
60h 7Fh
3FFh
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.
142
MICROCONTROLLER-e
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
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
or 3 if (Rr(b)=1) PC=Pc+2 or 3
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 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
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
Oscilator RC intern
Numrtor
/Q
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
GND Tact
AT902323
/RESET XTAL1/PB3 Vcc PB2 PB1 PB0
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.
MICROCONTROLLER-e
INTERFAA CENTRONICS
4,5-5,5V
Memoria este prevzut cu posibilitatea de protecie a programelor nscrise. Astfel, exist 2 bii de blocare n FLASH care nu pot fi teri dect prin tergerea ntregului program. Aceti doi bii pot comanda: dezactivarea unor viitoare programri ale memoriei FLASH sau EEPROM; dezactivarea unor viitoare programri ale memoriei FLASH sau EEPROM i blocarea verificrii.
Memoria mai este prevzut cu 2 bii care nu pot fi teri (fuzibili) care pot comanda: dezactivarea modului serial de programare; sursa intern sau extern pentru tact.
Modelul ATiny 10 este echipat cu un comparator analogic, care compar valoarea analogic de la pinul PB0 cu cea de la pinul PB1. Ieirea comparatorului poate declana o ntrerupere. Comparatorul este controlat de un registru de control i stare. Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe 10 bii. Acest model este un MC cu o echipare superioar: un timer suplimentar de 16 bii cu posibilitatea de comparare, captur i generare PWM, un comparator analogic, un canal UART, un convertor A/D pe 10 bii cu 6 canale i un sistem de ntreruperi care admite 14 surse de ntrerupere din care 2 externe. Acest circuit are i posibiliataea de programare paralel, deoarece are suficiente linii I/O. Schema bloc a acestui MC este dat n figura 5.10.
149
Controller de ntreruperi
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
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
START ADCSR
Tact conversie
BUS INTERN
Registru de prescalare
CK
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
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
Decodor
THUMB
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
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
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
6. Criterii de proiectare
157
6.3
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
0,1
VSS
Mas flotant
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.
160
MICROCONTROLLERE
la fiecare reset al sistemului. Pot fi implementate soft i alte funciuni care s permit meninerea coerenei sistemului!
7
APLICAII
7.1
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
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
AT89C2051
Tx P3.
P3. P3.
L1 L2
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
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
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
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
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
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
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
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
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
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
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
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
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.
RxD
P1.5
CS#
AT89C2051
ADS7822
TxD
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
ntre rupere
ntre rupere
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
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.
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
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.
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
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.
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.
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.
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
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
214
MICROCONTROLLERE
"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
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
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
Captor Tensometric
PREAMPLIFICATOR AMPLIFICATOR
CONVERTOR ANALOG-DIGITAL
PORT INTRARE
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
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