Documente Academic
Documente Profesional
Documente Cultură
Curs Avr
Curs Avr
"
Se consider! anul "97", cnd INTEL a anun#at producerea primului microprocesor, ca momentul trecerii de la electronica implementat! cablat la electronica realizat! programat. Primul microprocesor 4004 a fost conceput de M. E. Hoff ca un procesor pu#in simplificat pentru a putea fi implementat, la vremea aceea, pe un singur chip n siliciu. Ini#ial, microprocesorul nu a fost un computeron-a-chip, de$i n timp a ajuns la acest stadiu; conceptul de microprocesor s-a dezvoltat $i spre alte implement!ri specifice: microcontroller, microcalculator, procesor de semnale (DSP). Oricare din aceste circuite, pentru a deveni parte a unui sistem, impune un proces de proiectare care se bazeaz! n egal! m!sur! att pe componenta hardware ct $i pe componenta software. Microprocesorul, sau celelalte variante ale sale, integrat ntr-un sistem aduc acestuia acea performan#!, care atunci cnd este realizat! de fiin#a uman! este referit! ca inteligen#!. n general, microprocesorul este integrat ca unitate central! de procesare n sistemele digitale de calcul. Actual, aproape toate sistemele au o arhitectur! de sistem digital particularizndu-se n func#ie de aplicare/utilizare. Aplica#iile care nu sunt, n sensul clasic, sisteme digitale de calcul sunt n general implementate pe baz! de microprocesor sau DSP. Implement!rile sistemelor pe baz! de microcontroller ori DSP devin simple $i ieftine -pentru c! utilizeaz! deja o component! de serie, devin performante pentru c! utilizeaz! o component! care poate asigura suport pentru inteligen#!, devin flexibile pentru c! utilizeaz! o component! ce poate fi programat!. For#a care a impus sistemele pe baz! de microcontroller const! n programabilitatea unei componente de serie. Pentru sistemele la care o component! de serie, chiar programabil! n software, nu duce la rezultatele cele mai bune au ap!rut implement!rile pe baz! de circuite ASIC (Application Specific Integrated Circuits). Spre deosebire de sistemele pe baz! de microcontroller, unde func#ionarea dorit! se ob#ine, n software, printr-un anumit program, la sistemele pe baz! de circuite ASIC func#ionarea dorit! se ob#ine prin structurarea hardwareului cu un anumit program. Alegerea ntre o implementare pe baz! de microcontroller, o implementare pe baz! de circuit ASIC sau una combinat! depinde de aplica#ia respectiv! $i de cerin#ele impuse. Prezenta carte constituie un material, dar f!r! a absolutiza, pentru abordarea sistemelor pe baz! de microcontroller. Materialul prezentat $i CD-ul
VI
MICROCONTROLLERE
al!turat asigur! un traseu de la descrierea func#ion!rii unui microcontroller generic, dar $i cu exemplific!ri comerciale, pn! la analiza, sinteza implementarea $i testarea unui sistem. Deoarece oferta pe pia#! pentru microcontrollere este vast! $i variat!, pe acest traseu s-a accentuat prezentarea comparativ! $i critic! ncercnd s! se imprime cititorului analiza lucid! n fa#a avalan$ei agresive a ofertelor de pia#!. Cartea a fost elaborat! n cadrul programului Tempus RESUME (REtraining SUpport for small and Medium Enterprises) de la Universitatea TRANSILVANIA din Bra$ov, program care a avut printre obiective $i sprijinul dezvolt!rii de sisteme pe baz! de microcontrollere n/$i pentru ntreprinderi mici $i mijlocii. %innd cont de aceast! adres! cartea nu este destinat! numai inginerilor n specialitatea de electronic! $i ingineria calculatoarelor ci $i inginerilor de alte specialit!#i care au o practic! sau doresc s! abordeze acest domeniu al sistemelor pe baz! de microcontroller. Nu exist! actual produse de HiTech care s! nu se bazeze direct sau indirect pe microprocesor sau microcontroller. n consecin#!, ntr-o economie de tranzi#ie, cum este a noastr!, care dore$te s! se impun!, formarea de personal care s! $tie s! proiecteze/implementeze/exploateze sisteme pe baz! de microcontroller este o necesitate prioritar!. Mul#umim tuturor celor care ne-au sprijinit, colegilor Catedrei de Electronic! $i Calculatoare, d-l asist. ing. R!zvan Br!tucu $i mai ales domnilor profesori Marcian Crstea de la DMU Leicester - Marea Britanie, Josef Hoffmann de la Fachhochschule Karlsruhe - Germania, Dr. Peter Corcoran - National University of Ireland, MSC Eng.Petronel Bigioi, doctorand la Universitatea Transilvania Bra$ov precum $i studen#ilor aceleia$i universit!#i.
CUPRINS
DESCRIERE GENERAL! ________________________________________________ 1 1.1 ISTORIC __________________________________________________________ 1 1.2 SCHEMA BLOC GENERAL! ____________________________________________ 3 1.3 ARHITECTURA MC__________________________________________________ 5 1.3.1 Unitatea central" de prelucrare ____________________________________ 6 1.3.2 Memoria _____________________________________________________ 8 1.3.3 Dispozitive I/O _______________________________________________ 10 1.4 SISTEMUL DE NTRERUPERI___________________________________________ 28 1.5 MANAGEMENTUL PUTERII____________________________________________ 34 1.6 SCHEMA BLOC A UNUI MC____________________________________________ 35 1.7 FAMILII DE MC ___________________________________________________ 37 1.8 CLASIFICAREA MC ________________________________________________ 41 PROGRAMAREA SISTEMELOR CU MC _________________________________ 43 2.1 PROIECTAREA PROGRAMELOR DE APLICA#IE _____________________________ 43 2.1.1 Generalit"$i __________________________________________________ 43 2.1.2 Instruc$iuni ale MC____________________________________________ 50 2.1.3 Instrumente software de proiectare: MC 8051 _______________________ 56 2.1.4 Instrumente software de proiectare: MC PIC ________________________ 67 MICROCONTROLLERE MOTOROLA ___________________________________ 71 3.1 MC M68HC05____________________________________________________ 72 3.1.1 Memoria intern" ______________________________________________ 72 3.1.2 Unitatea central" ______________________________________________ 73 3.1.3 Moduri de adresare ____________________________________________ 75 3.1.4 Setul de instruc$iuni ___________________________________________ 76 3.1.5 Sistemul de ntreruperi _________________________________________ 77 3.1.6 Interfe$e %i periferice on-chip ____________________________________ 78 3.1.7 Managementul puterii__________________________________________ 87 3.1.8 Autoverificarea _______________________________________________ 88 3.1.9 Programarea EPROM __________________________________________ 88 3.2 MC M68HC08____________________________________________________ 89 3.2.1 Unitatea central" 6808 _________________________________________ 90 3.2.2 Interfe$e %i periferice on-chip ____________________________________ 91 3.2.3 Programarea memoriei EEPROM ________________________________ 96 3.3 MC PE 16 BI#I - 6816_______________________________________________ 97 3.3.1 Modulul de integrare (SIM, System Integration Module) ______________ 98 3.3.2 Interfe$e_____________________________________________________ 98 3.4 MC PE 32 DE BI#I - 68300 ___________________________________________ 99 3.5 DATE COMPARATIVE PENTRU MC MOTOROLA CISC_____________________ 100
VIII
MICROCONTROLLERE
FAMILIA MCS-5" _____________________________________________________ 101 4.1 STRUCTURA &I FUNC#IONAREA _______________________________________ 102 4.1.1 Gestionarea memoriei_________________________________________ 104 4.1.2 Circuitele timer ______________________________________________ 104 4.1.3 Interfa$a serial" UART ________________________________________ 106 4.1.4 Sistemul de ntreruperi ________________________________________ 106 4.1.5 Operarea cu economie de energie________________________________ 108 4.2 PROGRAMAREA MC DIN FAMILIA MCS-51 _____________________________ 108 4.2.1 Setul de instruc$iuni 8051 ______________________________________ 108 4.2.2 Modurile de adresare _________________________________________ 110 4.3 ALTE INTERFE#E &I PERIFERICE ON-CHIP ______________________________ 111 4.3.1 Interfa$a I2C (Siemens P80CL580) _______________________________ 111 4.3.2 Aria de num"r"toare programabil" (PCA) _________________________ 113 4.3.3 MC cu interfa$" pentru RAM nevolatil - NVRAM (Dallas DS5000FP) __ 115 4.3.4 MC specializat pentru TV %i video (PHILIPS 83C145) _______________ 115 4.3.5 MC cu arie configurabil" (TRISCEND E5) ________________________ 116 4.4 SISTEM MINIMAL CU 8051 __________________________________________ 118 4.5 DATE COMPARATIVE PENTRU MC DIN FAMILIA MCS-51___________________ 119 MICROCONTROLLERE RISC _________________________________________ 121 5.1 MICROCONTROLLER PIC ___________________________________________ 121 5.1.1 PIC12 _____________________________________________________ 121 5.1.2 PIC16 _____________________________________________________ 125 5.1.3 PIC17 _____________________________________________________ 127 5.2 MC ATMEL ____________________________________________________ 129 5.2.1 Familia AVR________________________________________________ 129 5.2.2 Familia ARM _______________________________________________ 138 CRITERII DE PROIECTARE ___________________________________________ 141 6.1 CRITERIILE PENTRU ALEGEREA UNUI MC_______________________________ 141 6.2 ALGORITMUL PROIECT!RII SISTEMELOR CU MC __________________________ 143 6.3 PROIECTAREA SISTEMELOR CU MC N VEDEREA SIGURAN#EI N EXPLOATARE __ 145 6.3.1 Cablajul imprimat ____________________________________________ 146 6.3.2 Ceasul de gard"______________________________________________ 147 6.3.3 Programarea defensiv" ________________________________________ 147 APLICA#II___________________________________________________________ 149 7.1 IMPLEMENTAREA UNEI APLICA#II SIMPLE DE COMAND! &I CONTROL DIGITAL _______________________________________________________ 149 7.1.1 Varianta de implementare cu microcontroller CISC__________________ 151 7.1.2 Varianta de implementare cu microcontroller RISC. _________________ 163 7.2 IMPLEMENTAREA INTERFE#ELOR LA PROCES ___________________ 181 7.2.1 Convertoare A/D controlabile serial ______________________________ 182 7.2.2 Interfa$area paralel" a convertoarelor A/D _________________________ 189 7.2.3 Convertoare A/D complexe ____________________________________ 195 7.2.4 Convertor D/A controlabil serial ________________________________ 201 7.2.5 Programarea unui sistem de dozare gravimetric" dotat cu MC _________ 205 BIBLIOGRAFIE_______________________________________________________ 219
1
DESCRIERE GENERAL!
1.1
ISTORIC
Privind evolu!ia istoric" a opera!iei de comand" a unui proces putem contura imaginea unui microcontroller (MC - se va folosi n continuare aceast" prescurtare pentru a numi un microcontroller). Un controller este un sistem folosit pentru a comanda #i a prelua st"ri de la un proces sau un aspect al mediului nconjur"tor. La nceput un controller era un echipament de mari dimensiuni. Dup" apari!ia microprocesoarelor dimensiunile controller-elor s-au redus. Procesul de miniaturizare a continuat, toate componentele necesare unui controller au fost integrate pe acela#i chip. S-a n"scut astfel calculatorul pe un singur chip specializat pentru implementarea opera!iilor de control; acesta este microcontroller-ul. Un microcontroller este un circuit realizat pe un singur chip care con!ine tipic: unitatea central"; generatorul de tact (la care trebuie ad"ugat din exterior un cristal de cuar! sau n aplica!ii mai pu!in preten!ioase, un circuit RC); memoria volatil" (RAM); memoria nevolatil" (ROM/PROM/EPROM/EEPROM); dispozitive I/O seriale #i paralele; controller de ntreruperi, controller DMA, num"r"toare/temporizatoare (timers), covertoare A/D #i D/A, etc.; periferice.
Pre!ul unui MC este redus din cauza cantit"!ilor mari n care se fabric". Pre!ul mic al MC aduce cu sine #i mic#orarea pre!ului sistemelor de control (se mic#oreaz" inclusiv costul proiect"rii). Diferen!ele dintre microprocesor #i unitatea central" a MC se atenueaz" n timp. Astfel, marii constructori de procesoare au realizat ni#te circuite care s-ar putea numi super-microcontroller-e, a#a cum sunt Motorola 68EC300, INTEL 386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.
MICROCONTROLLERE
Cu un MC se poate realiza un controller integrat (Embedded Controller, EC). Un controller integrat face parte dintr-un sistem construit cu un anumit scop, altul dect calcule generale. Pe lng" MC, un controller integrat are nevoie de hardware suplimentar pentru a-#i ndeplini func!ia. Importan!a MC este dovedit" incontestabil de pia!a care este n continu" cre#tere. Astfel, evolu!ia vnz"rilor de MC n lume se reflrct" n tabelele $.$ #i $.2.
Tabelul 1.1 Evolu"ia vnz#rilor MC n lume (n milioane dolari)
Principalii produc"tori de microprocesoare au realizat n $994 #i $995 urm"toarele cifre de afaceri (tabelul $.3).
Tabelul 1.3 Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microprocesoare (n milioane dolari)
Produc"tor Intel AMD Motorola IBM TI Cyrix Hitachi NEC LSI Logic IDT
$. Descriere general"
n prezent datele arat" modific"ri de structur"; de exemplu cifra de afaceri a AMD se apropie de cea a lui INTEL. Cifra de afaceri, ca ordin de m"rime, era deja n anii $994, $995 apropiat" de cea realizat" din vnz"ri de microprocesoare (tabelul $.4).
Tabelul 1.4 Cifre de afaceri realizate n anii 1994, 1995 din vnzarea de microcontrollere (n milioane dolari)
Produc"tor Motorola NEC Mitsubishi Hitachi Intel TI Philips Matsushita Lucent (AT&T) Toshiba
$994 $78$ $42$ 945 899 835 807 524 500 492 400
$995 $5$$ $208 708 782 605 534 345 4 $3 275 328
1.2
Vom defini un microcontroller pornind de la o reprezentare simplificat" a sa n interac!iune cu mediul (figura $.$).
Programe
Memoria
Intr"ri
Ie#iri
MICROCONTROLLERE
Ca intr"ri se folosesc de regul" semnale provenind de la comutatoarele individuale sau de la traductoare (de temperatur", de presiune, foto, traductoare specializate). Intr"rile pot fi digitale sau analogice. Intr"rile digitale vehiculeaz" semnale discrete, informa!ia "citit"" fiind informa!ia ce se e#antioneaz" la momentul citirii liniei respective. Intr"rile analogice vehiculeaz" informa!ii exprimabile prin func!ii continue de timp. "Citirea" acestora de c"tre microcontroller presupune prezen!a unor circuite capabile s" prelucreze aceste informa!ii, fie comparatoare analogice, fie convertoare analog-numerice, ale c"ror ie#iri sunt citite de c"tre MC. Ie#irile sunt fie analogice, caz n care reprezint" de fapt ie#iri ale convertoarelor numeric-analogice, fie sunt digitale, caz n care informa!ia este n general memorat" pe acestea pn" la o nou" scriere operat" de c"tre UC la un port al MC. Ie#irile pot comanda dispozitive de afi#are, relee, motoare, difuzoare, etc. O structur" mai detaliat", care include blocurile principale, este reprezentat" n figura $.2.
Dispozitive I/O
Reset
Oscilator
$. Descriere general"
Se poate distinge o prim" diferen!" fa!" de calculatoarele personale, unde intr"rile se fac de regul" de la tastatur" #i ie#irile pe monitorul TV sau la imprimant". Dac" un calculator personal este folosit pentru a prelucra informa!ii #i a afi#a rezultatele pe monitor sau hrtie, un MC comand" un proces. Un element important, f"r" de care un MC nu poate func!iona, este programul (sau programele), care se stocheaz" n memoria proprie MC. Un MC poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o unitate central", memorie, oscilator pentru tact #i dispozitive I/O. Un MC poate fi privit ca un microprocesor care pe acela#i chip mai con!ine memorie #i o serie de interfe!e. Natura #i complexitatea aplica!iei n care este folosit MC determin" performan!ele unit"!ii centrale, capacitatea de memorie #i tipul interfe!elor ce compun structura intern" a MC.
1.3
ARHITECTURA MC
Arhitectura unui MC define#te atributele sistemului a#a cum sunt ele v"zute de un programator n limbaj de asamblare. Deoarece un microcontroller este un caz particular de calculator, (calculator specializat pentru opera!ii I/O, realizat pe un singur chip), acesta este compus din cele cinci elemente de baz": unitate de intrare, unitate de memorie, unitate aritmetic" #i logic", unitate de control #i unitate de ie#ire. Unitatea de control mpreun" cu unitatea aritmetic" #i logic" compun mpreun" unitatea central" de prelucrare pe care o vom referi n continuare prescurtat cu UCP. Unit"!ile de intrare #i ie#ire vor fi tratate mpreun" #i vor fi referite prescurtat ca sistem I/O. Blocurile componente ale MC sunt legate ntre ele printr-o magistral" intern" (bus). Magistrala vehiculeaz" semnale de adres", de date #i semnale de control. M"rimea acestor magistrale constituie una dintre caracteristicile cele mai importante ale unui MC. Prin magistrala de adrese unitatea central" de prelucrare (UCP) selecteaz" o loca!ie de memorie sau un dispozitiv I/O, iar pe magistrala de date se face schimbul de informa!ie ntre UCP #i memorie sau dispozitivele I/O. ntre UCP #i memorie sunt transferate att date ct #i instruc!iuni. Acestea se pot transfera pe o singur" magistral" de date sau pe magistrale de date diferite. Arhitectura von Neumann prevede existen!a unui bus unic folosit pentru circula!ia datelor #i a instruc!iunilor. Cnd un controller cu o astfel de arhitectur" adreseaz" memoria, bus-ul de date este folosit pentru a transfera nti codul instruc!iunii, apoi pentru a transfera date. Accesul fiind realizat n 2 pa#i, este destul de lent. Arhitectura Harvard prevede un bus separat pentru date #i instruc!iuni. Cnd codul instruc!iunii se afl" pe bus-ul de instruc!iuni, pe bus-ul de date se afl"
MICROCONTROLLERE
datele instruc!iunii anterioare. Structura MC este mai complex", dar performan!ele de vitez" sunt mai bune. Magistralele interne, dup" numele lor, nu sunt accesibile n exterior la nivel de pin. Aceast" stare caracterizeaz" regimul normal de func!ionare. n regimuri speciale de func!ionare, numite diferit la diferitele tipuri de MC, semnalele magistralelor de adrese #i de date sunt accesibile la nivel de pin sacrificnd func!iile ini!iale ale pin-ilor respectivi. Totodat" este necesar s" fie livrate n exterior #i semnale de comand" (cel pu!in comand" de scriere WR #i comand" de citire RD). Aceast" facilitate este util" pentru extensii de memorie sau pentru a ata#a sistemului interfe!e suplimentare. Ea nu este posibil" n mod normal de func!ionare deoarece aceasta ar presupune existen!a unui num"r foarte mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese #i de date pot fi aduse la pin multiplexat sau nemultiplexat. Familia MCS-5$ este un exemplu pentru acces multiplexat la magistrale. Accesul se face n doi pa#i; n primul pas se conecteaz" liniile de adres" la pinii portului sacrificat, iar n al doilea pas se conecteaz" datele la aceia#i pini. Pentru a putea utiliza informa!ia de adresare, adresa se memoreaz" ntr-un latch, de asemenea exterior microcontroller-ului. Complicarea accesului la magistralele interne prin multiplexare este justificat" de asemenea din ra!iunea men!inerii unui num"r ct mai mic de pini la capsul". MC mai pu!in performante (ex. - MC low cost) nu au magistralele interne accesibile la nivel de pin. Ca urmare a celor prezentate se poate aprecia performan!a unui MC din punct de vedere al magistralei interne dup" urm"toarele criterii: dimensiunea magistralei de date; dimensiunea magistralei de adrese; accesibilitatea n exterior la magistrale; magistrale accesibile multiplexat sau nemultiplexat.
$. Descriere general"
elaboreaz" semnale pentru comanda celorlalte blocuri func!ionale pentru a finaliza executarea unei instruc!iuni. Modul de implementare al acestui bloc este de asemenea transparent utilizatorului. Unitatea central" de prelucrare con!ine un set de registre interne, similare unor loca!ii de memorie, folosite pentru memorarea unor date des apelate sau pentru programarea unor anumite func!ii. Diferitele familii de MC folosesc seturi diferite de registre. Exist" ns" cteva registre comune. A (Accumulator) - registrul acumulator - este folosit deseori pentru a stoca un operand #i rezultatul opera!iei aritmetice sau logice. PC (Program Counter) registru num"r"tor de program - este registrul care stocheaz" adresa urm"toarei instruc!iuni de executat. Dup" un RESET (ini!ializarea MC), registrul PC se ncarc" dintr-o loca!ie de memorie numit" vector de reset. Aceast" loca!ie con!ine adresa primei instruc!iuni de executat. PC este incrementat automat la execu!ia unei instruc!iuni. SP (Stack Pointer) registrul indicator de stiv" - con!inutul acestui registru indic" adresa curent" a stivei. Stiva reprezint" o zon" de memorie accesibil" rapid n care se depun temporar informa!ii importante n desf"#urarea programului. Stiva este definit" de obicei n RAM. Implementarea accesului presupune existen!a unui registru de adresare (SP) #i a mecanismului de memorare declan#at de instruc!iuni specifice (instruc!iunile PUSH/POP). Un aspect important ce se reflect" n arhitectura unui MC este modul de programare. Prin arhitectur" n!elegem felul n care sunt dispuse "resursele" unui MC. Cu ct structura, func!ionalitatea #i accesul la acestea sunt mai profund standardizate #i simetrizate, cu att num"rul de instruc!iuni de care dispune MC este mai redus #i viteza de execu!ie a programelor cre#te. Conceptul CISC (Complex Instruction Set Computer) pe baza c"ruia sunt construite majoritatea MC, prevede existen!a unui num"r mare de instruc!iuni (tipic >80), ceea ce face mai u#oar" munca programatorului. Multe din instruc!iuni sunt specializate, adic" se pot folosi doar n anumite moduri de adresare sau cu anumite registre. Evolu!ia MC este spre arhitectura RISC (Reduced Instruction Set Computer), n cadrul c"reia un MC are un num"r mic de instruc!iuni. Avantajele sunt un chip mai mic, cu un num"r de pini mai mic, cu un consum mai redus #i cu o vitez" mai mare. Instruc!iunile sunt simetrice, adic" pot fi folosite la fel n orice mod de adresare sau cu orice registru, nu au excep!ii sau restric!ii. n prezent un MC este cu mai mult dect o arhitectur" RISC, el este cu o arhitectur" SISC (Specific ISC). Instruc!iunile sunt specifice pentru a lucra optim cu dispozitivele I/O, permit manipularea la nivel de bit #i sunt mai pu!ine instruc!iuni de uz general, a#a cum ntlnim la microprocesoarele 8086, 68000 etc. n general MC cu arhitectur" CISC dispun de un num"r redus de registre. Acestea au func!ii determinate (acumulator, registru index,etc), iar MC cu arhitectur" RISC dispun de un num"r mai mare de registre cu un mare grad de ortogonalitate ceea ce nseamn" c" pot fi folosite simetric n orice mod de adresare (ATMEL AVR are 32 de registre)
MICROCONTROLLERE
Registrele interne pot avea diferite dimensiuni, astfel registrele acumulator au dimensiunea egal" cu cea a magistralei de date (8, $6 sau 32 bi!i). Registrul num"r"tor de program are dimensiunea egal" cu cea a magistralei de adrese. Registrul indicator de stiv" poate avea dimensiunea mai mic" dect a magistralei de adrese permi!nd localizarea stivei ntr-o zon" restrns" a memoriei RAM. Exist" #i MC cu stiv" automat", acestea nu au nevoie de indicator de stiv" dar au dezavantajul c" nu se pot folosi mai mult de 2-4 nivele de stiv" (MC din familia PIC).
1.3.2 Memoria
MC folosesc diferite tipuri de informa!ii, care sunt stocate n diferite tipuri de memorii. Instruc!iunile care controleaz" func!ionarea MC trebuie stocate ntr-o memorie nevolatil", unde informa!iile se p"streaz" #i dup" oprirea #i repornirea sursei de alimentare. Rezultatele intermediare #i variabilele pot fi nscrise ntr-o memorie volatil", la acestea este important s" se poat" face scrierea /citirea rapid #i simplu n timpul func!ion"rii. Memoria RAM (Random Access Memory) este o memorie volatil" care poate fi citit" sau scris" de unitatea central". Loca!iile din RAM sunt accesibile n orice ordine. Pe chip, memoria RAM ocup" mult loc #i implicit costurile de implementare sunt mari. De aceea un MC include de obicei pu!in RAM. Memorie RAM static alimentat" de la baterie se folose#te pentru stocarea nevolatil" a cantit"!ilor mari de date, la o vitez" de acces mare #i cu un num"r nelimitat de #tergeri #i renscrieri. Memoria ROM (Read Only Memory) este cea mai ieftin" #i cea mai simpl" memorie #i se folose#te la stocarea programelor n faza de fabrica!ie. Unitatea central" poate citi informa!iile, dar nu le poate modifica. Memoria PROM (Programmable Read Only Memory) este similar" cu memoria ROM, dar ea poate fi programat" de c"tre utilizator. Dup" posibilit"!ile de #tergere, aceast" memorie poate fi de mai multe feluri: Memoria EPROM (Erasable PROM) care se poate #terge prin expunere la raze ultraviolete. MC cu EPROM au un mic geam de cuar! care permite ca chip-ul s" fie expus la radia!ia ultraviolet". %tergerea este neselectiv", adic" se poate #terge doar ntreaga informa!ie #i nu numai fragmente. Memoria poate fi #tears" #i renscris" de un num"r finit de ori. Programarea EPROM-ului necesit" o procedur" special", iar MC cu EPROM au nevoie de regul" pentru nscrierea EPROM-ului de o tensiune auxiliar", de $2 V de exemplu. Unele MC au incluse circuite de programare a memoriei EPROM, cu ajutorul c"rora unitatea central" poate programa memoria EPROM. n timpul program"rii memoria EPROM nu este conectat" la magistrala de date #i adrese. Unele MC sunt prev"zute cu mod special de lucru, n care sunt v"zute din exterior ca ni#te memorii EPROM obi#nuite #i pot fi astfel programate cu orice programator.
$. Descriere general"
OTP (One Time Programmable PROM) se folose#te pentru multe serii de MC. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat ntr-o capsul" de material plastic f"r" fereastr", care este mult mai ieftin". Memoria nu se poate #terge sau reprograma. Pre!ul unui MC cu OTP este mic, viteza este bun", dar aplica!iile sunt lipsite de flexibilitate. Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) poate fi #tears" electric de c"tre unitatea central", n timpul func!ion"rii. %tergerea este selectiv", iar pentru renscriere trebuie parcur#i mai mul!i pa#i. Memoria EEPROM echipeaz" multe MC, fiind ieftin". n memoria EEPROM se memoreaz" un mic num"r de parametri care se schimb" din timp n timp. Memoria este lent" #i num"rul de #tergeri/scrieri este limitat (tipic $0 000). Memoria FLASH este o memorie asem"n"toare EPROM #i EEPROM n sensul c" poate fi #tears" #i reprogramat" n sistemul n care este folosit" (f"r" a fi necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesit" fereastr" pentru #tergere. Ca #i EEPROM, memoria FLASH poate fi #tears" #i programat" electric. Memoria FLASH nu permite #tergerea individual" de loca!ii, utilizatorul poate s" #tearg" doar ntregul con!inut. Din punct de vedere al locului #i modului de programare a memoriilor de tip PROM exist" dou" concepte: ICP (In Circuit Programming) programarea memoriei cnd MC se afl" pe placa de cablaj imprimat a aplica!iei; ISP (In System Programming) presupune posibilitatea de reprogramare n func!ionare a sistemului. De exemplu la autovehiculele comandate de MC, schimbarea tipului benzinei sau schimbarea unei legi privitoare la poluare pot fi actualizate n programul MC f"r" ca acesta s" fie scos din autovehicul.
n func!ie de num"rul aplica!iilor n care urmeaz" s" fie folosit MC se recomand" folosirea MC cu ROM pentru volum mare de produc!ie (ROM se nscrie cu masc" la fabricant), OTP pentru volum mic de produc!ie #i EPROM pentru prototipuri. Tipul de memorie #i capacitatea memoriei din echiparea unui MC sunt caracteristici particulare fiec"rui tip de circuit. Printre alte diferen!e, ace#ti parametri sunt diferi!i pentru membrii unei aceleia#i familii de MC. Se vor prezenta date concrete pentru exemplificare ntr-un tabel recapitulativ la sfr#itul capitolului (tabelul $.6). Pentru a aprecia un MC sub aspectul componentei memorie este necesar s" se considere urm"toarele caracteristici: varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM /EEPROM /FLASH; capacitatea memoriei aflat" pe chip; u#urin!a cu care se poate programa (programare n circuit sau nu, necesitatea unor tensiuni de programare suplimentare).
10
MICROCONTROLLERE
$. Descriere general"
11
toate instruc!iunile de lucru cu memoria #i toate modurile de adresare sunt utilizabile #i n tratarea dispozitivelo I/O (programarea opera!iilor I/O este foarte flexibil"); este susceptibil la erori software; spa!iul de adresare disponibil pentru memorie este mai mic.
Avantajul map"rii ntr-un spa!iu comun este acela c" se poate opera cu porturile la fel ca #i cu o loca!ie de memorie; multe opera!ii aritmetice #i logice folosesc operanzi direct de la port, datele pot fi mutate ntre porturi cu o singur" instruc!iune, con!inutul unui port poate fi citit, incrementat #i rezultatul scris din nou la port de asemenea cu o singur" instruc!iune. Se contureaz" trei direc!ii de evolu!ie a MC din punct de vedere al resurselor disponibile pe chip. O direc!ie este dezvoltarea de MC de uz general care sunt puse la dispozi!ia utilizatorului pentru a realiza aplica!ii de la A la Z. O a doua direc!ie o reprezint" dezvoltarea de MC specializate care dispun de resurse specifice unui anume gen de aplica!ii (automobile, telecomunica!ii, Internet, ac!ion"ri electrice, etc). Pentru aceste MC specializate att structura hardware ct #i instruc!iunile sunt specifice #i sunt calate pe un gen particular de aplica!ii. Exist" o a treia tendin!" de dezvoltare de MC care dispun de resurse hardware configurabile la utilizator. ntre resursele configurabile se afl" memoria, elemente de logic" programat", module specializate, gen convertoare A/D #i convertoare D/A, #i module de procesare avansat" a datelor.
Porturi paralele
Porturile paralele I/O faciliteaz" transferul simultan al mai multor bi!i ntre MC #i mediu. Num"rul de bi!i transfera!i ca urmare a execut"rii unei instruc!iuni depinde de organizarea particular" a porturilor n cadrul MC; unele porturi sunt organizate pe 8 bi!i, altele pe un num"r mai mare de bi!i. Sensul transferului, I (input) sau O (output) este programabil #i se stabile#te de obicei ntr-un registru de sens. Pentru a veni n ntmpinarea cerin!elor specifice de interac!iune cu mediul sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor paralele I/O. Mecanismul presupune o structur" hardware corespunz"toare #i instruc!iuni pentru manipularea informa!iei la nivel de bit (un operand este un bit). Astfel, la execu!ia unei instruc!iuni orientat" pe bit, exist" posibilitatea de a transfera un singur bit, de a masca bi!i care nu sunt folosi!i ntr-o opera!ie particular" #i de a efectua opera!ii logice pe un singur bit al unui port paralel I/O. Datorit" capabilit"!ii de manipulare la nivel de bit la descrierea caracteristicilor sistemului paralel I/O se specific" num"rul total de linii I/O.
MC68HC705C8 dispune de 3$ de linii I/O digitale de uz general grupate n patru porturi (A, B, C #i D). Porturile A, B, #i C sunt porturi de cte opt bi!i fiecare #i pun
12
MICROCONTROLLERE
la dispozi!ie n total 24 de linii care pot fi folosite fie ca intr"ri, fie ca ie#iri. Portul D dispune de 7 linii care pot fi folosite doar ca int"ri.
Circuitul de interfa!" al portului paralel este responsabil de corectitudinea transferului cu dispozitivul I/O. n acest scop se foloseste una din urm"toarele metode de sincronizare: Transfer direct (brute-force method) n cadrul acestei metode interfa!a are doar rolul de a transfera semnalele de la unitatea central" spre dispozitivul I/O (dac" este o opera!ie de ie#ire) sau de la dispozitivul I/O la unitatea central" (dac" este o opera!ie de intrare). Se folose#te acest tip de transfer dac" se cite#te nivelul unui poten!ial, dac" se comand" la ie#ire un nivel logic (pentru comanda unor LED-uri, de exemplu). Transfer strobat (strobe method) aceast" metod" folose#te semnale de strobare pentru a indica starea stabil" a semnalelor la porturile de intrare sau de ie#ire. ntr-o opera!ie de intrare, dispozitivul de intrare genereaz" semnalul de strobare cnd datele sunt stabile la pinii portului de intrare al interfe!ei. Stocarea informa!iei n registrul de date al interfe!ei se face cu semnalul de strobe. Daca este vorba de o opera!ie de ie#ire, cnd semnalele de date sunt stabile, interfa!a elaboreaz" semnal de strobare cu care dispozitivul I/O preia efectiv datele. Aceat" metod" poate fi folosit" dac" interfa!a #i dispozitivul I/O lucreaz" la viteze comparabile. Transfer cu protocol (handshake method) exist" cazuri n care vitezele de lucru ale celor dou" p"r!i implicate n transfer sunt mult diferite #i metodele mai sus amintite nu ofer" cadrul potrivit pentru transferul datelor. Solu!ia este ca interfa!a #i dispozitivul I/O s" poarte un dialog numit handshake. Sunt necesare dou" semnale de protocol; unul din ele este elaborat de circuitul de interfa!" iar cel"lalt de dispozitivul I/O. Tranzac!iile de protocol difer" pentru opera!ii de intrare #i de ie#ire.
n figura $.3 este ilustrat" organizarea portului A al unui circuit particular (MC68HC705C8).
Bit 7 DDRA7 0 6 5 4 DDRA4 0 3 DDRA3 0 2 DDRA2 0 $ DDRA$ 0 Bit 0 DDRA0 0 DDRA6 DDRA5 0 0
PA7
PA6
PA5
PA4
PA3
PA2
PA$
PA0
$. Descriere general"
13
Registrul DDRA (Data Direction Register port A) este un registru de 8 bi!i ca #i registrul de date PA al portului A . Sub fiecare din registre este reprezentat" starea ini!ial" a registrelor (dup" reset). n cazul particular considerat, portului PA este implicit port de intrare. O structur" posibil" de circuit pentru o linie bidirec!ional" de scriere/citire la porturi este redat" n figura $.4. Se poate constata modul n care ac!ioneaz" bitul din registrul de sens asupra circuitului driver de ie#ire.
Bit DDR
[$]
pin I/O
[$] Buffer de ie#ire [2] Buffer de intrare (activ pentru DDR=0) [3]Buffer de intrare (activ pentru DDR=$)
n partea stng" a diagramei sunt reprezentate leg"turile spre magistrala intern" de date a MC. n func!ie de natura opera!iei efectuate (citire sau scriere) #i de valoarea bitului din registrul de direc!ie sunt posibile opera!iile exprimate n tabelul $.5.
Tabelul 1.5 Func"iile unui pin I/O
Bit DDR 0 $ 0 $
Func!ie pin I/O Pinul I/O este n mod intrare; datele pentru scriere vor fi nscrise n latch-ul de ie#ire Datele pentru scriere sunt nscrise n latch-ul de ie#ire #i transferate de buffer-ul [$] pinului I/O Este citit" starea pinului I/O Pinul I/O este n mod ie#ire; este citit" informa!ia din latch-ul de ie#ire.
Se poate observa c" o linie de ie#ire a unui port paralel este mai mult dect un latch simplu; totodat", informa!ia nscris" n latch-ul de ie#ire nu se schimb" dect dac" se efectueaz" o nou" opera!ie de scriere la port. Unele porturi paralele sunt considerate cvasi-bidirec!ionale, ceea ce nseamn" c" o linie poate fi folosit" n acela#i timp ca ie#ire #i ca intrare. Aceast" flexibilitate este considerat" de interes n aplica!ii #i este posibil" printr-un truc.
14
MICROCONTROLLERE
Figura $.5 reprezint" structura unei linii cvasi-bidirec!ionale. Trucul const" n exploatarea facilit"!ilor unui etaj de ie#ire cu drena n gol (open-drain) care n acest exemplu este pev"zut cu o rezisten!" conectat" intern la sursa de alimentare.
Citire latch VCC Pull-up intern D
CLK
Bus intern
Q Q n$
pin I/O
Scriere latch
Fiecare linie poate fi folosit" independent ca intrare sau ca ie#ire. Pentru a fi folosit" ca intrare este necesar ca latch-ul s" fie nscris cu unu logic (nQ va fi n acest caz zero) pentru ca tranzistorul n$ s" fie blocat. Dac" nu este ata#at nimic la pin, rezisten!a intern" de pull-up va determina citirea unui unu logic la pin. Dac" linia este for!at" exterior n zero logic, etajul va genera curent prin rezisten!a de pull-up, iar informa!ia citit" va fi un zero logic. Exist" structuri mai complicate care n unele situa!ii necesit" conectarea n exterior a unei rezisten!e de pull-up. Pentru a interac!iona cu mediul unui MC i sunt necesare multe conexiuni la nivel de pin, ceea ce nseamn" un circuit cu un num"r mare de pini. Din considerente de fiabilitate #i economice se caut" reducerea num"rului de pini ai unui circuit integrat. n aceast" situa!ie a fost necesar un compromis n urma c"ruia s-a ajuns la solu!ia prin care se atribuie unui pin func!ii multiple (dou" sau mai multe). Pinii astfel sacrifica!i sunt pinii portului paralel. La pinii porturilor paralele sunt accesibile celelalte resurse ale circuitului; pot fi amintite conexiunile interfe!elor seriale, conexiunile cu exteriorul ale modulelor timer, canalele de intrare ale convertoarelor A/D, liniile pentru generarea ntreruperilor externe. n mod normal de operare magistralele interne ale unui MC nu sunt accesibile n exterior, la nivel de pin. Exist" situa!ii n care este necesar" extensia resurselor (extensia memoriei, spre exemplu) caz n care este necesar accesul la magistralele interne. Pentru rezolvarea acestei probleme sunt folosi!i tot pinii porturilor paralele. Din nou, pentru economie de pini sacrifica!i, aceia#i pini sunt folosi!i consecutiv pentru a vehicula adrese #i apoi date. Deoarece adresele folosesc liniile doar ca ie#iri, adresa este disponibil" la pinii portului paralel n timpul primului ciclu de ceas al execu!iei unei instruc!iuni. Adresa este memorat" n circuite exterioare (n latch-uri). n al doilea ciclu de ceas se vehiculeaz" pe aceste
$. Descriere general"
15
linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este numit mod expandat de lucru. Pentru a evalua capabilitatea porturilor paralele se recomand" considerarea urm"toarelor nsu#iri: Num"rul de linii I/O; Posibilitatea de a programa sensul liniilor I/O; Alte resurse accesibile prin func!ii multiple la liniile I/O; Posibilitatea accesului la magistralele interne Aspecte electrice de interfa!are.
16
MICROCONTROLLERE
A doua solu!ie de implementare a interfe!ei seriale este #i cea mai des ntlnit" n MC. Interfa!a este realizat cu un modul hardware specializat. Unitatea central" nscrie informa!ia de transferat ntr-un registru al interfe!ei dup" care sarcina serializ"rii #i a gener"rii secven!ei este finalizat" de c"tre hardware-ul interfe!ei. n cazul recep!iei interfa!a preia secven!a recep!ionat", extrage elementele de sincronizare #i nscrie datele efective ntr-un registru. Datele recep!ionate sunt accesibile unit"!ii centrale n acest registru al interfe!ei. n cazul n care registrul de transmisie este gol sau registrul de recep!ie este plin interfa!a semnalizeaz" starea #i poate chiar suspenda temporar execu!ia programului principal prin ntreruperi hardware. O schem" bloc simplificat" a unei interfe!e seriale asincrone este reprezentat" n figura $.6.
Cerere de ntrerupere c"tre UC
Magistrala intern"
Registru de prescalare
Buffer transmisie
Buffer recep!ie
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 unit"!ii centrale cu o prescalare. Pentru ca rata de transfer s" fie programabil" ceasul prescalat se divizeaz" n continuare folosind un num"r"tor al unui timer din resursele proprii. Interfa!a UART dispune de un registru de stare #i un registru de control cu ajutorul c"rora se pot prgrama modul de lucru, parametrii de comunica!ie, selectarea ceasului, divizarea ceasului. Conexiunile interfe!ei seriale asincrone sunt disponibile la pini cu func!ii multiple la unul din porturile paralele.
$. Descriere general"
17
Modulul serial sincron Urm"toarele dou" metode de sincronizare posibile la transferul serial sunt transfer serial sincron #i transfer serial autosincronizat. Transferul autosincronizat se bazeaz" pe utilizarea unui sistem special de codificare a datelor. Sistemul permite ca din datele recep!ionate s" se poat" extrage semnalul de ceas. Aceast" metod" nu este folosit" n MC. Transferul serial sincron este folosit pentru comunica!ii locale ntre procesoare sau cu dispozitivele periferice. n transferul sincron datele transferate sunt nso!ite de semnalul de clock. Semnalul de clock este transferat pe o linie dedicat". Transferul serial sincron necesit" trei conexiuni: emisie, recep!ie #i clock. Interfa!a hardware este mai simpl" dect la transferul asincron. Protocolul dintre emi!"tor #i receptor include o scurt" perioad" de sincronizare la ini!ierea unui transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face prin bitul de start al fiec"rui octet, la transferul sincron aceasta are loc o singur" dat", la nceputul transferului unui bloc de date. Transferul serial sincron permite rate de transfer mai mari dect transferul serial asincron; rate de $Mbps. ntr-o conexiune serial" sincron" unul din dispozitive este master iar cel"lalt este slave. Un transfer poate fi ini!iat doar de un master. Master-ul scrie un octet n registrul de transmisie de date al interfe!ei seriale sincrone. Datele sunt transferate unui registru de deplasare unde sunt serializate #i transmise pe linia de emisie numit" MOSI (Master Output Slave Input). Pe linia SCK (Serial Clock) este transmis clock-ul. La slave datele ajung tot pe linia MOSI ntr-un registru de deplasare unde sunt deplasate cu ceasul recep!ionat pe linia SCK. La umplerea registrului de deplasare datele sunt transferate n registrul de recep!ie de date. Conexiunile interfe!ei seriale sincrone sunt disponibile la pini cu func!ii multiple la unul din porturile paralele. Pinii asocia!i unei conexiuni seriale sincrone sunt urm"torii: MISO Master In Slave Out Pinul MISO este configurat ca intrare ntr-un master #i ie#ire dintr-un slave. MISO este conexiunea prin care se transmit date ntr-un sens (de la slave la master). Ie#irea MISO la un slave este n starea de nalt" impedan!" dac" dispozitivul slave nu este selectat. MOSI Master Out Slave In Pinul MOSI este configurat ca ie#ire dintr-un master #i intrare ntr-un slave. MOSI este cea de-a doua conexiune prin care se transmit date n cel"lalt sens (de la master la slave). SCK Serial Clock Pinul SCK este ie#ire la un master #i intrare la un slave. Prin aceast" conexiune se transmite semnalul de sincronizare pentru transferul datelor pe liniile MISO #i MOSI. Pe durata a opt perioade ale SCK se transfer" ntre master #i slave un byte de informa!ie. nSS non Slave Select La pinul nSS se aplic" semnalul care selecteaz" un dispozitiv slave; pentru un dispozitiv slave, semnalul trebuie s" fie activ (low) pe toat" durata unei tranzac!ii n care este implicat. Pentru un dispozitiv master,
18
MICROCONTROLLERE
intrarea nSS se conecteaza permanent la $ logic; n cazul n care la master, intrarea nSS devine 0, se seteaza un flag de eroare (MODF) n registrul de stare al interfe!ei seriale sincrone. Pinul nSS al unui master poate fi configurat #i ca ie#ire de uz general prin setarea unui bit n registrul de sens DDRD. Ceilal!i trei pini, aminti!i anterior, sunt dedica!i interfe!ei sincrone atta timp ct este validat". n sistemele care folosesc func!ia serial" sincron" exist" un master #i unul sau mai multe dispozitive slave. Exist" mai multe solu!ii de interconectare; acestea vor fi prezentate n continuare. n cazul n care n sistem este un singur slave, conexiunea este f"cut" ca n figura $.7.
MASTER Registru de deplasare (8b) MISO MOSI generator clock SCK +5V nSS nSS Figura 1.7 Conexiune serial" sincron" master-slave MOSI MISO SLAVE Registru de deplasare (8b)
SCK
Interfa!a serial" sincron" permite interconectarea mai multor dispozitive, dintre care unul singur este master. Exist" dou" solu!ii pentru o conexiune multislave. n una din ele master-ul folose#te ie#iri de porturi pentru a selecta dispozitivul slave cu care se face transferul; n cealalt" solu!ie, toate dispozitivele slave sunt selectate #i sunt legate n inel. Conexiunea cu selec!ia fiec"rui dispozitiv slave este reprezentat" n figura $.8. Un alt mod de a realiza o conexiune serial" sincron" n care exist" mai mult dect un slave este reprezentat n figura $.9. Acest tip de conexiune difer" de precedentul prin urm"taorele: Pinul MISO al fiec"rui slave este conectat la pinul MOSI al dispozitivului slave vecin. Pinul MOSI de la master este n continuare conectat la pinul MOSI de la primul slave. Pinul MISO de la master este conectat cu pinul MISO al ultimului dispozitiv slave. Intr"rile nSS ale tuturor dispozitivelor slave sunt conectate la mas". Nu este necesar" comanad" de selec!ie de la master n aceast" conexiune.
$. Descriere general" SLAVE 0 RD MASTER SCK MOSI RD MISO nSS PB0 PB$ PBk Figura 1.8 Conexiune serial" sincron" single-master multi-slave (varianta $) SLAVE 0 RD MASTER SCK MOSI RD MISO +5V nSS Figura 1.9 Conexiune serial" sincron" single-master multi-slave (varianta 2) MOSI SCK MISO nSS SLAVE $ RD MOSI SCK MISO nSS +5V SLAVE $ RD
19
SLAVE k RD
MOSI SCK MISO nSS MOSI SCK MISO nSS MOSI SCK MISO nSS
SLAVE k RD
Conexiunea din figura $.9 folose#te un num"r minim de pini pentru a controla un num"r mare de dispozitive. Ca dezavantaj, master-ul nu poate selecta un anume slave pentru transferul de date, datele trec prin toate dispozitivele din inel pn" la dispozitivul adresat. Interfa!a serial" sincron" este folosit" pentru a comunica cu periferice cum ar fi un simplu registru de deplasare, un sistem de afi#are LCD sau un sistem de conversie A/D. Modulul serial sincron este suficient de flexibil pentru a interfa!a
20
MICROCONTROLLERE
direct periferice cu standarde diferite, provenite de la diver#i produc"tori. Conexiunea serial" sincron" poate fi folosit" #i pentru a extinde num"rul de intr"ri/ie#iri acolo unde acesta este limitat de num"rul de pini ai capsulei MC. Interfe!ele seriale amintite sunt ntlnite n MC cu urm"toarele nume: SCI (Serial Communications Interface) este un subsistem I/O serial indepenent, de tipul full duplex asincron (UART) numit astfel n MC Motorola. SPI (Serial Peripheral Interface) este un modul serial folosit pentru a comunica sincron la distan!e mici cu viteze de pn" la 4 Mbps SCI+ este similar cu SCI, are n plus suport pentru comunica!ii seriale sincrone. Dispune de o ie#ire de ceas folosit" pentru a transfera date n mod sincron cu un periferic de tip SPI. SIOP (Simple I/O Port) este o implemenatre mai simpl" a SPI.
Module Timer
Natura aplica!iilor pentru care s-a n"scut microcontroller-ul implic" o multitudine de func!ii de timp puse la dispozi!ia utilizatorului prin module de timp numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai mult sau mai pu!in complex. Un sistem timer obi#nuit pune la dispozi!ie un set de func!ii implementate pe baza unui num"r"tor liber central #i a unor blocuri func!ionale pentru fiecare func!ie n parte. Timer-ul are n structura sa, dintre toate celelalte subsisteme, cele mai multe registre. Toate func!iile unui timer pot genera ntreruperi independente; fiecare are controlul propriu #i propriul vector de ntrerupere. Modulele timer complexe sunt construite cu arii de num"rare programabile (PCA). Pentru aplica!ii speciale n timp real s-au construit module timer cu unitate aritmetic" #i logic" proprie. Timer-ul este folosit pentru a m"sura timpul #i pentru a genera semnale cu perioade #i frecven!e dorite. Timer-ele nu sunt doar circuite cu func!ii de temporizare; n modulul timer sunt implementate cteva mecanisme care pun la dispozi!ia utilizatorului func!ii specifice. Mecanismul de comparare permite controlul unor semnale de ie#ire; mecanismul de captur" permite monitorizarea unor semnale de intrare; num"r"toarele interne permit generarea de referin!e de timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini software, #.a. Timer-ul poate fi folosit practic pentru orice func!ie de timp, inclusiv generarea unor forme de und" sau conversii D/A simple. Func!iile oferite de un timer sunt: $. Captur" la intrare (IC - input capture) - aceast" func!ie se bazeaz" pe posibilitatea de a stoca valoarea num"r"torului principal la momentul apari!iei unui front activ al unui semnal extern. Facilitatea permite m"surarea l"!imii unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit" #i ca referin!" de timp pentru declan#area altor opera!ii.
$. Descriere general"
21
2. Comparare la ie#ire (OC - output compare) - se compar" la fiecare impuls de ceas valoarea num"r"torului principal cu cea a unui registru. Dac" se constat" egalitate, n func!ie de programarea anterioar" pot avea loc urm"toarele evenimente: declan#area unei ac!iuni la un pin de ie#ire (op!ional), setarea unui flag ntr-un registru sau generarea unei ntreruperi pentru unitatea central" (op!ional). Func!ia este folosit" pentru a genera ntrzieri sau pentru a genera o form" de und" cu valori dorite pentru frecven!" #i pentru factorul de umplere . 3. ntreruperi n timp real (RTI real-time interrupt) ntr-un sistem exist" sarcini care trebuiesc executate periodic sau care nu permit dep"#irea unui interval limit" ntre doua execu!ii. Aceste sarcini sunt lansate ca rutine de tratare a ntreruperii generate de timer. 4. COP (computer operating properly) watchdog aceast" func!ie este folosit" pentru a reseta sistemul n cazul n care din erori de programare (bugs) sau erori n desf"#urarea programului datorate perturba!iilor mediului, registrul COP nu este accesat ntr-un interval de timp prescris. 5. Acumulare de pulsuri (pulse accumulator) este func!ia folosit" pentru a num"ra evenimentele ce apar ntr-un interval de timp determinat sau pentru a m"sura durata unui impuls. Num!r!torul liber n figura $.$0 sunt prezentate elementele de baz" din componen!a unui timer, partea de num"r"tor liber.
TOI
Cerere de ntrerupere
TOF
TCNT(H) TCNT(L)
Clock MC
: $,4,8,$6
Num"r"tor $6 biti
Figura 1.10 Schema bloc a unui timer (MC 68HC$$) num"r"torul liber
Num"r"torul este pilotat de un clock provenit din clock-ul unit"!ii centrale divizat cu un factor de regul" programabil. Num"r"torul este nscris cu 0 doar la reset, iar n rest este un registru de tip read-only. Cnd num"r"torul tranzi!ioneaz" din starea FFFFh n starea 0000h, se seteaza flag-ul TOF (timer overflow) aflat
22
MICROCONTROLLERE
ntr-un registru neopera!ional asociat modulului timer. Pentru a autoriza generarea unei ntreruperi este necesar s" fie setat un flag de autorizare (TOI). Factorul de divizare a clock-ului este stabilit ntr-un registru asociat. Registrul TCNT de $6 bi!i permite citirea st"rii num"r"torului. Se recomand" citirea num"r"torului folosind o instruc!iune care opereaz" pe $6 bi!i; n acest fel ambii octe!i ai num"r"torului apar!in aceleia#i st"ri de num"rare. Dac" se fac dou" citiri, accesnd pe rnd partea mai semnificativ" #i partea mai pu!in semnificativ", cele dou" informa!ii nu vor apar!ine aceleia#i faze de num"rare. Captura la intrare Unele aplica!ii necesit" cunoa#terea localiz"rii n timp a momentului n care are loc un eveniment. ntr-un calculator, timpul fizic este reprezentat prin con!inutul unui num"r"tor, iar apari!ia unui eveniment este reprezentat" printr-o tranzi!ie de semnal. Momentul apari!iei evenimentului poate fi nregistrat prin memorarea st"rii num"r"torului. Func!ia de captur" la intrare este implementat" de un circuit care are schema bloc reprezentat" n figura $.$$.
ICxI Cerere de ntrerupere
ICxF
Detector de tranzi!ii
Pin ICx
Timpul fizic este reprezentat de valoarea con!inut" de num"r"torul liber. La apari!ia unui eveniment materializat printr-o tranzi!ie la pinul ICx, con!inutul num"r"torului liber este preluat n latch-ul de $6 bi!i din blocul de captur". Utilizatorul poate s" valideze func!ia de captur", poate s" aleag" frontul activ al tranzi!iei #i poate s" autorizeze generarea unei ntreruperi c"tre unitatea central" la detectarea frontului activ. Dac" un canal de captur" nu este validat, pinul de intrare ce i este asociat poate fi folosit ca intrare de uz general. ntreruperile intr"rilor de captur" sunt vectorizate, fiec"rei ntreruperi i este alocat" o pozi!ie bine definit" n tabela vecorilor de ntrerupere. Func!ia de captur" are multe aplica!ii, cteva din ele descrise pe scurt n continuare:
$. Descriere general"
23
$. Localizarea momentului apari!iei unui eveniment - func!ia de captur" este foarte util" n cazul n care este necesar" cunoa#terea momentelor la care au avut loc evenimentele. Num"rul de evenimente monitorizate sub acest aspect este limitat de num"rul de canale de captur" ale MC. 2. M"surarea perioadei pentru m"surarea perioadei unui semnal necunoscut se procedeaz" la determinarea timpului scurs ntre dou" tranzi!ii consecutive de acela#i fel; dou" fronturi pozitive consecutive sau dou" fronturi negative consecutive. 3. M"surarea l"!imii unui impuls Pentru a m"sura l"!imea unui impuls se m"soara timpul scurs ntre un front pozitiv #i frontul negativ ce i urmeaz". Deoarece num"r"torul liber este un num"r"tor pe $6 bi!i, intervalul maxim m"surabil cu un ciclu de num"rare este limitat la de 2$6 ori periada unui clock (clock-ul num"r"torului). Dac" se m"soar" intervale mai mari, se va lua n considerare #i num"rul de tranzi!ii de la valoarea maxim" la 0 a num"r"torului liber. 4. Generarea unei ntreruperi Fiecare canal de captur" poate genera op!ional o ntrerupere dac" se detecteaz" la intrarea de captur" frontul stabilit a fi activ. 5. Num"rarea unor evenimente considernd c" un eveniment este reprezentat de o tranzi!ie de semnal, cu func!ia de captur" la intrare folosit" n combina!ie cu func!ia de comparare la ie#ire, pot fi contorizate evenimentele ce apar ntr-un interval de timp stabilit. La apari!ia unui eveniment se genereaz" o ntrerupere; n rutina de servire a ntreruperii se incrementeaz" un contor de evenimente realiznd astfel nregistrarea num"rului de apari!ii. Sfr#itul intervalului de contorizare este stabilit cu ajutorul func!iei de comparare la ie#ire. 6. Referin!" de timp aplica!ia folose#te n combina!ie func!ia de captur" la intrare #i func!ia de comparare la ie#ire. Dac" utilizatorul dore#te s" activeze un semnal de ie#ire la un interval dorit dup" detectarea unui eveniment, se va folosi func!ia de captur" la intrare pentru a stabili momentul apari!iei evenimentului de referin!". Se va aduna la valoarea num"r"torului re!inut" la captur" un num"r dorit de cicluri de num"rare #i se va transfera aceast" valoare registrului de comparare. Cnd num"r"torul liber atinge valoarea comparatorului se va genera o ntrerupere n rutina c"reia se va activa ie#irea dorit". Comparare la ie"ire Scema bloc a componentei care realizez" func!ia de comparare este reprezentat" n figura $.$2. Un canal de comparare const" dintr-un comparator pe $6 bi!i, un registru de comparare pe $6 bi!i, un circuit de generare de ntreruperi, o ie#ire de comparare
24
MICROCONTROLLERE
#i o logic" de comand". Un sistem timer dispune de mai multe canale de comparare (68HC$$ are cinci canale de comparare).
OCxI Comparator $6 bi!i TOCx Ctrl. pin Pin OCx Cerere de ntrerupere OCxF
Principala aplica!ie a unei func!ii de comparare este ntreprinderea unei ac!iuni la un moment de timp viitor bine determinat, cnd num"r"torul liber atinge o anumit" valoare. Ac!iunea ntreprins" ar putea fi comutarea unui semnal, ac!ionarea unui ntrerup"tor electronic, aprinderea unui LED, etc. Pentru a folosi func!ia de comparare este necesar" parcurgerea urm"toarei secven!e: $. se copiaz" valoarea din num"r"torul liber (con!inutul registrului TCNT); 2. se adaug" la copie o valoare determinat" de ntrzierea dorit"; 3. se transfer" rezultatul n registrul de comparare. Ac!iunea dorit" la pinul ie#irii de comparare se specific" anterior de c"tre utilizator ntr-un registru asociat modulului. Comparatorul compar" valoarea num"r"torului liber TCNT cu valoarea din registrul de comparare la fiecare clock. Dac" se constat" egalitate, se activeaz" ac!iunea specificat" la pinul de comparare #i se seteaz" flag-ul asociat. De asemenea, se va genera o ntrerupere dac" aceasta a fost validat" anterior prin bitul OcxI din registrul pentru validarea ntreruperilor. ntreruperile sunt vectorizate; fiecare canal are o a adres" cunoscut" n tabela vectorilor de ntrerupere. ntreruperile n timp real RTI Func!ia RTI este folosit" pentru a genera periodic ntreruperi; ntreruperile pot fi folosite pentru a comuta ntre aplica!ii n sisteme multitasking sau pentru a declan#a periodic execu!ia unei secven!e. Perioada apari!iilor ntreruperilor n timp real este programabil". Ca rezolu!ie, func!ia de ntrerupere nu este la fel de performant" ca #i func!ia de comparare.
$. Descriere general"
25
COP - Watchdog COP (Computer Operating Properly) este un ceas de gard", numit watchdog, folosit pentru a detecta erorile de program. Folosirea ceasului de gard" este op!ional". n cazul n care se folose#te, programul utilizator trebuie s" reseteze periodic un registru COP; dac" nu are loc resetarea, unitatea centrala decide c" a ap"rut o problem" n rularea programului #i reseteaz" sistemul pentru a preveni o desf"#urare necontrolat" a programului. Func!ia ceasului de gard" poate fi realizat" folosind un canal timer de uz general sau, situa!ia ntlnit" n mod obi#nuit la MC, ceasul de gard" este un timer dedicat, folosit doar pentru func!ia gard". Structura unui modul watchdog este reprezentat" n figura $.$3
Clock Num"r"tor INIT Registru de prescalare Registru de control RESET
BUS INTERN
Ceasul de gard" este un timer simplu compus dintr-un num"r"tor al c"rui ceas de num"rare este programabil printr-un registru de prescalare. Dac" circuitul este activat, num"r"torul num"r" continuu. Dac" num"r"torul ajunge la valoarea cea mai mare (FFFFh, dac" este un num"r"tor de $6 bi!i). se genereaz" un RESET c"tre unitatea central". Este sarcina programatorului s" scrie periodic n registrul de control un cuvnt care s" ini!ializeze num"r"torul. n cazul n care programul a pierdut controlul se va reseta sistemul. Acumulatorul de impulsuri Modulul timer poate s" dispun" de un registru acumulator de impulsuri. n acest registru pot fi num"rate evenimente exprimate prin pulsuri sau pot fi num"rate chiar pulsuri interne, provenite de la clock-ul unit"!ii centrale. $. Num"rare de evenimente num"r"torul de 8 bi!i este incrementat la fiecare front activ detectat la un pin. Un eveniment poate fi orice, segmente de program, cicluri ale unui semnal de intrare, unit"!i de timp, etc. Pentru a fi num"rate n acumulatorul de impulsuri, acestea trebuiesc transformate n tranzi!ii.
26
MICROCONTROLLERE
2. Num"rare gardat" num"r"torul de 8 bi!i func!ioneaz" n regim liber de num"rare avnd la intrarea de clock un semnal provenit din clock-ul unit"!ii centrale divizat cu un factor constant. O aplica!ie uzual" n acest mod de func!ionare este m"surarea duratei unui puls (impuls singular). Num"r"torul este nscris cu 0 la nceputul pulsului, iar la sfr#itul pulsului se cite#te valoarea sa. Module PWM Un semnal PWM (Puls Width Modulation) este folosit n multe aplica!ii; comanda motoarelor de curent continuu sau comanda surselor de alimentare pot fi amintite ca principale aplica!ii. n figura $.$4 este reprezentat un semnal PWM.
T2 Factorul de umplere este T2/T$
Semnalul PWM este un semnal periodic la care se poate modifica n mod controlat factorul de umplere. Modulele timer au resursele necesare gener"rii unui semnal cu factor de umplere variabil. Deoarece, dup" cum am mai amintit, semnalul PWM este utilizat n aplica!ii exist" module timer dedicate acestei func!ii; modulele PWM. Un modul PWM poate genera mai multe semnale modulate. Structura unui canal PWM este reprezentat" n figura $.$5.
Comparator pe 8 bi!i PWM
PWM
clock intern
BUS INTERN
Registrul de prescalare genereaz" clock-ul pentru un num"r"tor. Clock-ul de num"rare este programabil. Con!inutul num"r"torului este comparat cu cel al
$. Descriere general"
27
registrului PWM. Ct timp rezultatul compara!iei este mai mic sau egal, se va genera un unu logic la ie#irea PWM. Dac" rezultatul compara!iei este mai mare, se va genera la ie#irea PWM un zero logic. Dac" registrele comparate sunt de opt bi!i factorul de umplere poate fi ntre $/256 #i $. Un canal PWM odat" programat va genera la ie#ire semnalul periodic continuu, f"r" interven!ia unit"!ii centrale. Ca #i la celelalte componente func!ionale, n ceea ce prive#te global modulele timer (includem #i modulele watchdog #i PWM) vor fi prezentate n ncheiere cteva criterii de apreciere: num"rul de canale timer #i dimensiunea registrului de num"rare; flexibilitaea timere-lor, mecanisme implementate; existen!a unui ceas de gard" (watchdog); num"rul de canale PWM #i dimensiunea registrului PWM.
28
MICROCONTROLLERE
Mux analogic
E/nM
pin start
Selec!ie canal
START
STOP Date
Registru de date
Modulul A/D folose#te un registru de control prin care se selecteaz" canalul de conversie #i modul de lucru pentru circuitul de e#antionare/memorare. Declan#area #i terminarea conversiei sunt semnalizate cu cte un bit tot n registrul de control. Rezultatul conversiei este stocat n registrul de date. Registrul de date va con!ine ntotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit nainte de terminarea urm"toarei conversii, n caz contrar se pierde informa!ia Conversia poate fi declan#at" intern, considernd bitul asociat din registrul de control, sau din exterior printr-un semnal de comand" aplicat la pin. Declan#area unei conversii la un moment de timp dorit, f"r" interven!ia unit"!ii centrale, se poate realiza folosind un timer. Modulul poate fi programat s" execute o conversie a unui canal #i s" se opreasc". Un alt mod de operare al modulului poate fi conversia continu" a unui canal pna la recep!ionarea unei comenzi de ncheiere. Un alt mod de operare este conversia ciclic" n care modulul execut" pe rnd conversia fiec"rui canal, dup" care se opre#te. n acest ultim mod sunt folosite de obicei mai multe registre de date pentru memorarea rezultatelor conversiilor. Rezultatele sunt citite dup" ncheierea unui ciclu. La terminarea unui ciclu de conversiei, op!ional, se poate genera o ntrerupere c"tre unitatea central". n aplica!ii de precizie se recomand" ca pe durata conversiei s" se comute unitatea central" n stare inactiv" pentru ca aceasta s" nu perturbe convertorul.
1.4
SISTEMUL DE NTRERUPERI
Sistemul de ntreruperi reprezint" mecanismul ce asigur" sincronizarea func!ion"rii unit"!ii centrale cu evenimentele. Acest mecanism asigur" implementarea unui r"spuns prompt #i specific al sistemului la orice cerere de
$. Descriere general"
29
ntrerupere. Mul!i dintre produc"tori au realizat pentru diversele familii de microcontroller-e variante constructive care difer" uneori substan!ial unele fa!" de altele, scopul fiind fie acela al simplific"rii sistemului, fie acela al asigur"rii unor facilit"!i ct mai adecvate aplica!iilor pentru care au fost proiectate respectivele microcontroller-e. nc" din anii $980-$985 s-a conturat un principiu care se confirm" #i ast"zi: "fiecare func!iune complex" cu procesorul ei", respectiv "fiecare func!iune a unui sistem de comand" cu rutina ei de servire a ntreruperilor". Evenimentele, sunt acele st"ri din func!ionarea sistemului care trebuie avute n vedere la controlul acestuia. Ele trebuie s" declan#eze, cu o ntrziere minim", un r"spuns adecvat din partea sistemului, r"spunsul trebuind s" fie descris de c"tre proiectant prin instruc!iuni incluse n cadrul unor rutine de servire a ntreruperilor. n cazul microcontroller-elor, ca de altfel #i n acela al microprocesoarelor, aceste evenimente trebuie privite ca informa!ii de stare a sistemului, informa!ii ce rezult" fie urmare a prelucr"rii de c"tre UC a datelor, (evenimente ce genereaz" a#a numitele ntreruperi interne), fie urmare interac!iunii sistemului cu mediul nconjur"tor (numite #i ntreruperi externe). Acest din urm" aspect este preponderent n cazul microcontroller-elor. Unitatea central" a MC analizeaz" n cadrul ultimei perioade de ceas corespunz"toare fiec"rui ciclu instruc!iune eventualele cereri de ntrerupere postate pe parcursul execu!iei instruc!iunii curente. Ca orice sisteme deterministe, sistemele digitale dotate cu microcontrollere sunt ancorate, n func!ionarea lor, ntr-un spa!iu multidimensional ce are drept dimensiuni parametrii proprii #i cei regla!i de c"tre sistem ("m"rimile de stare") #i timpul. Sistemul de ntreruperi este informat asupra evolu!iei acestora prin canale de transfer a informa!iilor generale (porturi, canale temporizatoare/num"r"toare) sau specifice (interfe!e specializate UART, SPI, SCI, USB, I2C, etc), el dispune de o unitate de analiz" a informa!iilor ("controller-ul de ntreruperi" - CI), implementat" intern, conectat" via magistralele interne ale MC la unitatea de control a programelor), precum #i de mecanismul prin care opre#te execu!ia de c"tre UC a programului curent #i realizeaz" declan#area rutinei adecvate de servire a ntreruperilor. Realizarea st"rilor generatoare de cereri de ntrerupere este urmat" de analiza acestora de c"tre CI. Aceast" analiz" presupune urm"toarele: Identificarea sursei generatoare a cererii de ntrerupere; Determinarea ordinii de servire a cererilor de ntrerupere, n cazul apari!iei simultane a mai multor astfel de cereri.
Ambele etape pot fi implementate att hard ct #i soft, neexcluzndu-se posibilitatea unor implement"ri mixte. Identificarea sursei generatoare de ntrerupere se face prin corela!ia ce este stabilit" ntre canalul de transfer al cererii, registrul/registrele de memorare al acesteia #i adresa de memorie la care este plasat" adresa rutinei de servire a
30
MICROCONTROLLERE
ntreruperilor sau prima instruc!iune a rutinei de servire a ntreruperilor. Aceast" situa!ie este ntlnit" la majoritatea microcontroller-elor, dar exist" #i excep!ii, cum ar fi microcontroller-ele familiilor PIC "low range" #i "middle range" de la firma Microchip, la care orice cerere de ntrerupere genereaz" execu!ia unei rutine al c"rei nceput este plasat la o adres" unic", fix" de memorie. Determinarea ordinii de servire, sau analiza priorit"!ii cererilor de ntrerupere, presupune scanarea n faza de analiz" a tuturor canalelor de transfer pentru cererile de ntrerupere sau a regi#trelor corelate cu acestea ntr-o anumit" ordine prestabilit" hard. Multe microcontroller-e dispun de mecanismul (implementat hard) ce permite "prioritizarea" unora dintre aceste canale, ceea ce implic" implementarea unor unit"!i de memorare a priorit"!ilor (registre de setare a priorit"!ilor pe dou" sau mai multe nivele) #i instituirea unor reguli de arbitrare. Fiecare dintre aceste nivele va fi scanat distinct, n ordinea descresc"toare a priorit"!ilor, majoritatea CI prezentnd doar dou" nivele de prioritate: prioritar #i mai pu!in prioritar. n procesul de scanare, primul canal "activ" - care genereaz" o cerere de ntrerupere - va fi cel ce va fi "servit", respectiv va declan#a procesul de execu!ie a rutinei de servire a ntreruperilor corespunz"toare. Sunt ntlnite att microcontroller-e care permit ntreruperea unei rutine de servire a ntreruperilor de c"tre o alt" cerere de ntrerupere mai prioritar" (ndeob#te cunoscut ca sistem de ntreruperi "rentreruptibil"), ct #i microcontroller-e care nu permit o astfel de ac!iune. Mul!i produc"tori pun la dispozi!ia proiectantului cte un flag de validare/invalidarea global" a ntreruperilor, ceea ce permite ca utilizatorul s" modifice cum dore#te mecanismul de ac!iune la apari!ia unui ntreruperi: permite sau inhib" o ntrerupere prioritar" ap"rut" ulterior uneia mai pu!in prioritare, dar pe durata ct aceasta este servit". Multe microcontroller-e dispun de un mecanism bazat pe flag-uri (fanioane) de validare/invalidare a ntreruperilor, acest mecanism putnd fi implementat att la nivelul UC al MC ct #i la / sau la nivelul CI, respectiv la nivelul sistemului de analiz" a cererilor de ntrerupere. Registrele de memorare a cererilor de ntrerupere sunt dublate de registre ce memoreaz" informa!ia de validare a canalelor ntrerup"toare ("registre de validare a ntreruperilor" sau "registre de mascare a ntreruperilor"), un canal corespunz"tor unei cereri de ntrerupere invalidat" va fi ignorat n procesul de scanare a cererilor de ntrerupere. Un principiu des aplicat la implementarea acestui sistem const" n aceea c" fiecare flag este setat printr-un mecanism hard #i, n general, resetat soft, prin execu!ia unor instruc!iuni de resetare a sa, ceea ce presupune pe de-o parte, luarea n considerare prin program a st"rii semnalate, iar pe de alt" parte, asigur" reanclan#area mecanismului de ntrerupere, pentru situa!ia n care starea respectiv" se repet". Domeniul de adrese de memorie (SRAM sau PROM) n care sunt plasate instruc!iunile de start a rutinelor de servire a ntreruperilor poart" denumirea de "tabel" a vectorilor de ntrerupere".
$. Descriere general"
31
Unele microcontroller-e prezint" o tabel" a vectorilor de ntrerupere cu adrese fixe, specifice canalelor ntrerup"toare, spre exemplu I805$, Atmel, PIC, altele permit plasarea tabelei vectorilor de ntrerupere la adrese de memorie ce sunt stabilite de c"tre proiectant, este cazul, spre exemplu, micocontroller-elor din familia Z80 (Z84$3, Z84$4, Z84$5, etc.) n prima situa!ie, plasarea la adres" fix" a tabelei vectorilor de ntrerupere, poate fi privit" ca o restric!ie n dezvoltarea unor programe de aplica!ie, dar aceasta este doar o fals" problem"! Practic, noi putem realiza translatarea prin program a tabelei vectorilor de ntrerupere la orice adres" de memorie prin simpla introducere a unor instruc!iuni de salt ca prime instruc!iuni corespunz"toare canalelor ntrerup"toare. Exemplific"m aceasta pentru familia 805$. Tabela vectorilor de ntrerupere este cuprins" ntre adresele: 0003H #i 0023H. Programul de translatare va trebui s" se prezinte astfel:
CSEG ORG START: JMP ; ORG ISR_EXT0: JMP ; ORG 0BH ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor datorate ;dep"#irii capacit"!ii de num"rarea a canalului ;0 num"r"tor/temporizator NEW_ADDR_ISR0 ;Noua adresa a rutinei (poate fi plasat" n ;memoria RAM extern") 03H ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor externe de ;stare - canal 0 MAIN ;Adresa de salt la progamul principal 00H
ISR_T0: JMP ; ORG ISR_EXT$: JMP ; ORG $BH ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor datorate ;dep"#irii capacit"!ii de num"rarea a canalului ;$ num"r"tor/temporizator NEW_ADDR_ISR2 $3H ;Adresa din tabela vectorilor de ntrerupere ;corespunz"toare ntreruperilor externe de ;stare -canal $ NEW_ADDR_ISR$ ;Noua adresa a rutinei (poate fi ;plasat" n ;memoria RAM extern")
MICROCONTROLLERE
JMP NEW_ADDR_ISR4 ; NEW_ADDR_ISR0: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la ;sursa extern" corespunz"toare canalului 0. NEW_ADDR_ISR$: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate ;dep"#irii de num"rare la timer 0. NEW_ADDR_ISR2: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei de servire a ntreruperilor de la ;sursa extern" corespunz"toare canalului $. NEW_ADDR_ISR3: ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor datorate ;dep"#irii de num"rare la timer $. NEW_ADDR_ISR4 ;Aici se vor plasa instruc!iunile corespunz"toare rutinei e servire a ntreruperilor provenite ;de la UART.
Plasnd n memoria RAM aceast" tabel" este posibil s" realiz"m ceea ce se cheam" "servire dinamic" a ntreruperilor". Acest procedeu de servire a ntreruperilor permite implemenarea u#oar" a comenzii unui automat secven!ial cu un num"r finit de st"ri. (spre exemplu: cazul unei linii automate de montaj sau de turnare, etc). Implementarea servirii dinamice a ntreruperilor const" n modificarea succesiv" a adreselor la care plas"m rutina de servire a ntreruperii (ISR). n figura $.$7 prezent"m cazul unui automat cu un num"r de trei st"ri distincte, fiecare rutin" de servire a ntreruperilor (ISR) va rescrie adresa rutinei de servire corespunz"toare evenimentului urm"tor n tabela vectorilor de ntrerupere. Este evident c" aceast" tabel" trebuie s" fie locatat" n memoria RAM a sistemului.
Primul eveniment ISR corespunz"toare evenimentului $ Scrie n Tabela Vectorilor de ntrerupere, adresa ISR2 Al treilea eveniment Al doilea eveniment ISR corespunz"toare evenimentului 2 Scrie n Tabela Vectorilor de ntrerupere, adresa ISR3
$. Descriere general"
33
Un exemplu tipic n acest sens l reprezint" tastaturile ce prezint" butoane multi-func!iune. S" presupunem cazul butonului unic: START/STOP al unui utilaj. Vom exemplifica procedeul de servire dinamic" prin programul care comut" func!iunile butonului din START n STOP #i invers. Programul este conceput pentru un microcontroller din familia 805$.
CSEG ORG BOOT: JMP ISR_EXT0: JMP BUTON ;S-a considerat c" prima linie de ntreruperi externe de stare reprezint" canalul de transfer al ;informa!iilor corespunz"tor butonului START/STOP
;
00H MAIN
;nstruc!iunea corespunz"toare etichetei BUTON este plasat" n memoria RAM a ;sistemului de comand" BUTON: JMP BUTON_START ; BUTON_START: ; MOV DPTR,#BUTON+$ ;ncarc" adresa din tabela vectorilor de ntrerupere MOV A,#LOW(BUTON_STOP) MOVX @DPTR,A INC DPTR MOV A,#HIGH(BUTON_STOP) MOVX @DPTR,A ;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor ;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine RETI BUTON_STOP: ; MOV DPTR,#BUTON+$ ;ncarc" adresa din tabela vectorilor de ntrerupere MOV A,#LOW(BUTON_START) MOVX @DPTR,A INC DPTR MOV A,#HIGH(BUTON_START) MOVX @DPTR,A ;Schimb" adresa de salt c"tre rutina urm"toare n schema de comutare a rutinelor ;Ultima rutin" din schem" trebuie s" indice drept adres" de salt prima dintre rutine RETI MAIN: ; ;Trebuiesc incluse instruc!iunile corespunz"toare programului principal END
34
MICROCONTROLLERE
n cazul sistemelor 805$ sau 68xx-68xxx, tabela vectorilor de ntrerupere este ampl" incluznd variate canale ntrerup"toare. Astfel, pentru ntreruperile externe de stare se dispune de dou" linii de intrare INT0# #i INT$#, CI putnd fi setat s" reac!ioneze fie pe front (cel negativ), fie pe nivel logic (cel sc"zut -low), pentru canalele num"r"toare temporizare dispunem pentru fiecare de adrese de servire corespunz"toare st"rilor de dep"#ire a capacit"!ii canalului ("overflow"), iar pentru unitatea UART dispunem de un vector unic att la recep!ie ct #i pentru transmisie. n cazul microcontroller-elor PIC (low/middle range) exist" o singur" adres" (plasat" la 0004H) pentru ntreruperi externe, ceea ce impune pentru proiectant s" scrie o rutin" de servire n care analiznd registrul ce memoreaz" cererile de ntrerupere va decide asupra r"spunsului la cererea respectiv".
1.5
MANAGEMENTUL PUTERII
Pentru aplica!iile n care consumul de energie de la sursa de alimentare este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din modulele componente. Economia de energie este esen!ial" n cazul aliment"rii de la baterii. Prin intrarea n starea de economie de energie memoria RAM nu-#i schimb" con!inutul #i ie#irile nu-#i schimb" valorile logice. Sistemul de economie de energie ofer" dou" moduri de operare care difer" prin num"rul componentelor dezactivate. Aceste moduri sunt numite Idle, Power Down la MC Intel #i Wait, Stop la MC Motorola. Intrarea n unul din modurile de operare cu economie de energie se face prin comenzi software. MC Motorola dispun de instruc!iuni care determin" intrarea n mod Wait sau Stop. MC Intel intr" n mod Idle sau Power Down prin controlul unor bi!i din registrul PCON (Power Control Register). n ambele moduri de operare este nghe!at" func!ionarea unit"!ii centrale. n mod Power Down (Stop) este blocat oscilatorul intern ceea ce atrage dup" sine blocarea tuturor func!iilor interne. Timer-ul va nghe!a #i interfe!ele seriale #i vor opri activitatea. Sistemul de ntreruperi, dup" caz, este dezactivat (MC Intel) sau poate s" ramn" activ (MC Motorola). Con!inutul memoriei #i al registrelor interne nu este alterat, iar liniile I/O r"mn neschimbate. Din aceast" stare se poate ie#i fie doar cu Reset la MC Intel. La MC Motorola se poate ie#i fie cu Reset, fie la sesizarea unei ntreruperi externe (sistemul de ntreruperi nu este dezactivat). n cazul n care revenirea se face la sesizarea unei ntreruperi externe activitatea intern" este reluat" n acelea#i condi!ii n care a fost abandonat" (num"r"toarele timere-lor continu" din starea pe care au avut-o la intrare n mod Stop). n mod Idle (Wait) este nghe!at" doar func!ionarea unit"!ii centrale, celelalte func!ii folosite r"mn active (timer-ul, interfe!ele seriale #i sistemul de ntreruperi). Starea unit"!ii centrale #i a tuturor registrelor este p"strat" ct timp
$. Descriere general"
35
MC se men!ine n mod Idle (Wait). Pinii de port p"streaz" starea pe care au avut-o la intrarea n acest mod. Din modul Idle se poate ie#i prin Reset sau la sesizarea unei ntreruperi interne sau externe. Consumul de energie este minim atunci cnd sunt activate cele mai pu!ine func!ii. Consumul minim de energie se ob!ine n modul de operare Power Down (Stop). n modul Idle (Wait) consumul este redus fa!a de regimul de operare normal" dar este mai mare dect n mod Power Down (Stop). n acela#i timp, consumul n mod Idle (Wait) este cu att mai redus cu ct sunt mai pu!ine func!ii active la intrare n mod. n mod Power Down (Stop) exist" posibilitatea unei reduceri suplimentare a consumului prin reducerea tensiunii de alimentare (la unele MC). OnNow este o ini!iativ" actual" pentru modernizarea metodelor de economie de energie n sistemele cu microprocesoare. Se inten!ioneaz" ob!inerea unui consum de energie (pentru un calculator PC) de o treime din cel actual #i un timp de ie#ire din starea inactiv" mai mic de 5 secunde. Informa!ii despre aceast" in!iativ" se gasesc la adresa www.microsoft.com/hwedev/onnow.htm Un alt aspect important al aliment"rii sistemelor construite cu MC este calitatea semnalului furnizat de sursa de alimentare. Dac" nivelul tensiunii de alimentare nu se ncadreaz" ntr-o plaj" permis" este posibil ca programul s" func!ioneze defectuos, s" se abat" de la cursul firesc. Pentru a elimina acest risc, pe care nu ni-l putem permite n sistemele de control, n MC sunt implementate module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset de sistem sau o ntrerupere n cazuri considerate limit". LVR (Low Voltage Reset) este un circuit care monitorizeaz" tensiunea de alimentare a unit"!ii centrale #i for!eaz" un reset dac" se constat" c" aceasta este mai mic" dect un minim predefinit. LVI (Low Voltage Interrupt) este un circuit care monitorizeaz" tensiunea de alimentare a unit"!ii centrale #i genereaz" o ntrerupere dac" se constat" c" aceasta este mai mic" dect un minim predefinit. ntreruperea for!eaz" executarea unei rutine de oprire nefor!at".
1.6
Cu elementele prezentate pn" la acest punct schema bloc a unui MC poate fi dezvoltat" (n compara!ie cu cele prezentate n figura $.$. #i figura $.2); rezultatul este ilustrat n figura $.$8.
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 func!ionale. Unitatea central" execut" instruc!iunile pe care le prime#te prin magistrala de date din memoria program. Structura Harvard este posibil" #i r"spndit" la MC pentru c" de regul" instruc!iunile sunt stocate n memoria ROM, iar datele n cea RAM. Magistrala de date #i cea de adrese pot fi separate sau multiplexate. Magistralele pot s" nu fie disponibile n exterior (Motorola 6805) sau pot fi disponibile n exterior direct (MCS-5$) sau multiplexate (MC pe $6 sau 32 de bi!i). Fiecare MC are un controller de ntreruperi care admite att intr"ri din exterior ct #i de la modulele interne. Unele MC dispun de un controller DMA propriu. Modulele I/O pot fi seriale sau paralele. Fiecare modul transfer" date cu exteriorul prin intermediul registrului de date (RD). Modulul este programat (configurat) de unitatea central" prin intermediul unui registru de comenzi (RC) #i se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera ntreruperi c"tre unitatea central". Registrele modulelor I/O pot fi v"zute de UC ca loca!ii de memorie (la familia Motorola) sau ca dispozitive de I/O ntr-un spa!iu de
$. Descriere general"
37
adresare separat (MCS 5$). Sub numele de dispozitiv I/O, ntr-o abordare generalizat", sunt cuprinse principalele interfe!e ale MC (timer, canal serial UART) #i linii I/O grupate n porturi paralele de uz general. Acela#i nume generic poate acoperi #i interfe!ele speciale ntlnite n configura!ii particulare de MC (convertor A/D, interfa!" serial" sincron", interfa!" LCD, interfa!" USB, etc).
1.7
FAMILII DE MC
Microcontroller-ele se produc ntr-o mare diversitate n care exist" totu#i elemente comune care permit o prezentare sistematic" a produsului. Pe baza unui nucleu comun au fost definite familiile de microcontroller-e; nucleul este constituit dintr-o unitate central", aceea#i pentru to!i membrii unei familii, #i o serie de interfe!e #i periferice. Din punct de vedere al programatorului, to!i membrii unei familii folosesc acela#i set de instruc!iuni, permit acelea#i moduri de adresare #i folosesc acelea#i registre. Diferen!a ntre membrii unei familii const" n primul rnd n echiparea chip-ului cu memorie (tip de memorie #i capacitatea memoriei). Alte diferen!e pot fi g"site la frecven!a de clock pentru unitatea central" sau n interfe!ele on-chip #i perifericele on-chip suplimentare fa!" de cel mai simplu reprezentant al familiei. O diferen!" ntre membrii unei familii poate fi #i modul n care sunt conectate semnalele la pin respectiv tipul capsulei de prezentare a circuitului integrat. n cadrul acestui capitol, n continuare, sunt prezentate cteva familii de microcontroller-e cu sublinierea nsu#irilor caracteristice #i considernd numele produc"torului ca fiind unul din elementele reprezentative pentru o familie. INTEL 4048 a fost primul MC ap"rut pe pia!", avnd o structur" Harvard modificat", cu 64-256 octe!i de RAM #i este nc" folosit n multe aplica!ii datorit" pre!ului sc"zut. INTEL 8051 (MCS-5$) este a doua genera!ie de MC #i, n prezent, este familia care se vinde cel mai bine; este fabricat #i de mul!i al!i produc"tori. Acest MC are o arhitectur" Harvard modificat" cu spa!iu de adresare diferit pentru program (<64K din care 4-8K pe chip) #i date (<64K din care $28-256 octe!i pe chip, cu adresare indirect"). Dispozitivele I/O au un spa!iu propriu de adresare. 805$ dispune de un procesor boolean prin care se pot executa opera!ii complexe la nivel de bit, iar n func!ie de rezultate se pot face salturi. Pentru 805$ exist" foarte mult software, att contra cost ct #i gratuit. INTEL 80C196 (MCS-96) este a treia genera!ie de MC propus" de INTEL. 80C$96 este un MC pe $6 bi!i care admite un tact pn" la 50MHz. Acest MC con!ine blocuri aritmetice pentru nmul!ire #i mp"r!ire, lucreaz" cu 6 moduri de adresare, convertor A/D, canal de comunica!ii serial, controller de ntreruperi cu 8 surse, pn" la 40 de porturi I/O, generator PWM #i ceas de gard".
38
MICROCONTROLLERE
INTEL 80186 #i 80188 sunt MC propuse de INTEL ca versiuni a popularelor microprocesoare 8086 #i 8088 care au echipat primele calculatoare IBM PC XT. Pe chip sunt incluse 2 canale DMA, 2 num"r"toare/temporizatoare, controller de ntreruperi #i bloc de refresh pentru memoria RAM. Exist" #i multe versiuni, MC cu consum redus, cu canale seriale etc. Un mare avantaj la folosirea acestor MC este faptul c" se pot folosi uneltele de dezvoltare (compilatoare, asambloare etc.) de la PC-uri. Cine este familiarizat cu softul de PC poate trece repede de etapa de nv"!are. Un alt avantaj este un spa!iu mare de adresare, specific PC-urilor. INTEl a fabricat #i MC-ul 80386EX, o variant" a procesorului 386 care, la puterea lui 386 mai are n plus canale seriale, canale DMA, num"r"toare/ temporizatoare, controller de ntreruperi, refresh pentru RAM dinamic, gestionarea aliment"rii (Power Management). 65C02/W65C816S/W65C134S (Western Design Center). WDC a creat procesorul pe 8 bi!i 65C02 folosit n calculatoarele Apple, Commodore #i Atari urmat de procesorul pe $6 bi!i W65C8$6S #i un MC pe 8 bi!i avnd ca nucleu procesorul de baz" 65C02. Motorola MC14500 a fost primul MC realizat de Motorola. Acest MC n arhitectur" RISC avea calea de date de un bit, $6 instruc!iuni #i era furnizat ntr-o capsul" mic" ($6 pini). El a fost eliminat de pe pia!" de noile MC RISC. Motorola 6805 se bazeaz" pe procesorul 6800 #i este asem"n"tor cu 6502 produs de WDC. Are o arhitectur" von Neumann n care instruc!iunile, datele, dispozitivele I/O mpart acela#i spa!iu de adresare. Stiva este limitat" la 32 de pozi!ii din cauza indicatorului de stiv" pe 5 bi!i. Unele MC din aceast" familie includ convertoare A/D, sintetizoare de frecven!" cu PLL, canale seriale etc. Motorola 68HC11 (preluat #i de TOSHIBA) este un MC popular pe 8 bi!i de date #i $6 bi!i de adres", cu o arhitectur" ca #i 6805. 68HC$$ are inclus" memorie EEPROM sau OTP, linii digitale I/O, num"r"toare/temporizatoare, convertoare A/D, generatoare PWM, acumulator de impulsuri, canale seriale de comunica!ii sincrone #i asincrone etc. Motorola 683xx (MC68EC300) sunt super MC de nalt" performan!" bazate pe un nucleu cu arhitecura procesoarelor 68xx, cu o filozofie #i performan!" asem"n"toare MC INTEL 80386EX. PIC (MicroChip) sunt primele MC RISC ap"rute, cu un num"r mic de instruc!iuni (tipic 33, fa!" de 8048 care are 90). Simplitatea arhitecturii (Harvard) duce la realizarea unui chip de mici dimensiuni, cu pu!ini pini, consum redus, vitez" mare #i pre! mic. Aceste avantaje au impus MC PIC pe pia!". Exist" 3 linii
de MC PIC: low range, middle range #i high range (care se disting prin dimensiunea cuvntului de program #i prin facilit"!i legate de structur") PIC$6C5xx, PIC$6C6xx #i PIC$7Cxx, din care linia $6C6xx este cotat" cel mai bine pe pia!".
COP400 (National Semiconductor) este un MC pe 4 bi!i care are 5$2o-2K ROM, #i 32x4- $60x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare 2,3V-6,0V. Sunt echipate cu num"r"toare/temporizatoare #i magistral"
$. Descriere general"
39
MICROWIRE. Aceste MC se fabric" n peste 60 de modele echivalente #i sunt primele MC care au un pre! sub 0,5USD/bucat". COP800 (National Semiconductor) este un MC de 8 bi!i care con!ine MICROWIRE, UART, RAM, ROM, num"r"toare/temporizatoare de $6 bi!i, controller de ntreruperi, comparator, ceas de gard", monitor de tact, generator PWM, transmisie n infraro#u, convertor A/D cu 8 canale cu prescalare (admite #i intr"ri diferen!iale), protec!ie la sc"derea tensiunii de alimentare, mod de a#teptare #i HALT, un trigger SCHMITT #i circuit de trezire cu mai multe intr"ri (MultiInput-WakeUp). Eficien!a este dat" #i de un set puternic de instruc!iuni, majoritatea fiind de un singur octet #i executate ntr-un singur ciclu. Exist" #i variante pentru uz militar. HPC (National Semiconductor) sunt MC pe $6 bi!i de mare performan!", cu o arhitectur" von Neumann. Unitatea central" poate executa nmul!iri #i mp"r!iri. Con!in n structur" func!iile executate de familia COP800 avnd n plus canale seriale HDLC (High Level Data Link Control) #i elemente DSP, la o tensiune de alimentare de 3,3V. MC din aceast" familie au multe aplica!ii n telecomunica!ii, n sisteme de securitate, imprimante LASER, hard discuri, frne ABS #i aplica!ii militare. Proiectul PIRANHA (National Semiconductor) este un proiect de realizare a unui MC RISC, primul MC dedicat aplica!iilor integrate. Acest MC are avantajele arhitecturii RISC, deci pu!ine instruc!iuni, simplitate, modularitate. Z8 (Zilog) a fost unul dintre primele MC. Modelul ini!ial avea UART, num"r"toare/temporizatoare, DMA, 40 de linii digitale I/O, controller de ntreruperi. Modelul Z867$ avea n ROM un BASIC simplu. Modelul Z86C95 are o structur" Harvard, facilit"!i DSP etc. Un avantaj este c" se pot folosi pentru extensii unele circuite de interfa!" din familia lui Z80. HD64180 (Hitachi) este un MC puternic, cu structura #i posibilit"!ile lui Z80, avnd n plus 2 canale DMA, canal de comunica!ii sincrone #i asincrone, num"r"toare/temporizatoare #i controller de ntreruperi. Unele versiuni includ EPROM, RAM #i PIO (Programmable Input Output). Ruleaz" instruc!iunile lui Z80, dar n mai pu!ine cicluri #i are instruc!iuni n plus. Exist" variante care func!ioneaz" pn" la $8MHz. TMS370 (Texas Instruments) este similar cu 805$. Con!ine RAM, ROM (OTP sau EEPROM), 2 num"r"toare/temporizatoare de $6 bi!i, controller de ntreruperi, ceas de gard", generator PWM, convertor A/D cu 8 canale, SCI (port serial asincron), SPI (port serial sincron), comparator, poate executa nmul!iri #i mp"r!iri. Tactul poate fi pn" la 20MHZ, cu 5MHz tact de magistral". 1802 (RCA) este un MC mai vechi, cu o structur" apropiat" de un microprocesor. Este folosit mai ales n aplica!ii spa!iale. MuP21 (Forth) este un MC care are puterea de calcul a unui procesor INTEL 80486 ($00MIPS) la un pre! mult mai mic. Are integrat un coprocesor video care gestioneaz" o memorie video, deci se poate ata#a direct un monitor TV. Acest MC a fost creat ca s" ruleze programul OKAD (program de proiectare VLSI) #i execut" acest lucru de $0 ori mai repede ca un 486. Mup2$ are 40 de pini.
40
MICROCONTROLLERE
F21 (Forth) a fost conceput pentru aplica!ii multimedia #i procesare paralel". Viteza ajunge la 250MIPS datorit" structurii care con!ine procesoare de prelucrare analogic" #i procesor de interfa!" la re!eaua de calculatoare. Tabelul $.6 prezint" caracteristicile de baz" pentru c!iva reprezentan!i din dou" familii de MC foarte populare; 68HC$$ de la Motorola #i 805$ de la Intel.
Tabelul 1.6 Caracteristici principale pentru MC din dou# familii reprezentative (68HC11 $i 8051)
Circuit M68HC$$A0 M68HC$$A$ M68HC$$A2 M68HC$$A8 M68HC$$E$ M68HC$$E9 M68HC$$F$ I 8035 I 8039 I 804$ I 8748 I 805$ I 875$
RAM 256 256 256 5$2 5$2 $024 64 $28 64 64 $28 $28
ROM/ (E)EPROM 5$2 EEPROM 2048 EEPROM 8K ROM 5$2 EEPROM 5$2 EEPROM $2K ROM 5$2 EEPROM 5$2 EEPROM $024 ROM $024 EPROM 4096 ROM 4096 EPROM
Clock 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 0.476 s 2.5 s $.4 s 2.5 s 2.5 s $ s $ s
I/O 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 4x8 $x6 3X8 3X8 3X8 3X8 4X8 4X8
Timer 9 9 9 9 9 9 9 2 2 2 2 2 2
$. Descriere general"
41
1.8
CLASIFICAREA MC
Se pot considera multe criterii de clasificare a MC; de exemplu dup" dimensiunea magistralelor, dup" interfe!ele pe care le au incluse n configura!ie, dup" aplica!iile n care se folosesc, dup" furnizor etc. O clasificare sumar" a celor mai uzuale MC, dup" compatibilitatea software, este: MC cu arhitectur# CISC Compatibile 805$ MOTOROLA 68xx Compatibile x86 COP8 (National Semiconductor) TMS370 (Texas Instruments) ST (Thomson) Alte arhitecturi (MC low cost) HITACI - 4bi!i, Z8 - 8 bi!i MC cu arhitectur# RISC Super H - Hitachi PIC - MicroChip AVR #i ARM - Atmel
2
PROGRAMAREA SISTEMELOR CU MC
2.1
2.1.1 Generalit"#i
Dezvoltarea aplica!iilor cu microsisteme presupune pe lng" proiectarea circuitelor electronice aferente acestora #i specificarea n concordan!" cu aceasta, prin instruc!iuni, a func!iunilor pe care sistemul trebuie s" le realizeze. Prin faptul c" microsistemele dispun de circuite microprogramabile, structura acestora va fi adaptat" aplica!iei specifice prin rularea programelor de ini!ializare a sistemului, programe care duc la o configurare particular", specific". Deci, una dintre func!iunile de baz" pe care microsistemele dotate cu microcontroller-e trebuie s" o implementeze o reprezint" chiar propria configurare -ini!ializare-, c"ci avnd drept suport aceea#i structur", un sistem realizeaz" noi func!iuni ca urmare a program"rii ini!iale sau pe parcurs. O problem" practic" ce este pus" la programarea microsistemelor o reprezint" organigrama pe care trebuie s" o utiliz"m la proiectarea programelor de func!ionare. Aceasta variaz" n raport cu "uneltele" soft avute la dispozi!ie: asamblor$, compilator2, link-editor3, convertor OBJ-HEX4, depanator5, emulator6, mediu de simulare7, etc.
Asamblorul este acel program ce converte#te fi#ierul surs" -fi#ier de tip text (ASCII) ce con!ine instruc!iuni ale microcontroller-ului sub form" de mnemonice, n fi#ier obiect, respectiv ntr-un fi#ier ce con!ine codurile ma#in" corespunz"toare instruc!iunilor specificate n cadrul fi#ierului surs" 2 Compilatorul este acel program ce converte#te fi#ierul surs", scris n limbaj evoluat, n fi#ier obiect.
2. Programarea sistemelor cu MC
43
Metodologia proiect!rii se bazeaz! pe analiza structurat! a aplica"iei, pe separarea ct mai ra!ional" a func!iunilor sistemului n raport cu necesit"!ile de comand" #i cu cele de sincronizare n timp. Se disting ca "stiluri" de programare, stilul de programare ce utilizeaz" extensiv implementarea prin rutine specifice a fiec"rei func!iuni, ceea ce duce la generarea unui program ce prezint" multe apeluri de func!iuni, utilizeaz" o stiv" relativ extins", dar care folose#te eficient memoria sistemului #i stilul de proiectare a programelor care specific" prin macro-uri fiecare func!iune n cadrul programului principal #i minimizeaz" astfel num"rul de apeluri, implicit reduce dimensiunea stivei, dar cre#te memoria necesar" pentru program. Evident, !innd cont de varietatea aplica!iilor ct #i de varietatea implement"rilor hard, nu este posibil" enun!area unei "re!ete" dup" care s" proced"m! Fiecare aplica!ie va trebui s" fie tratat" adecvat, m"sura n care implement"m prin rutine, direct n programul principal, sau n rutinele de servire a ntreruperilor, func!iunile sistemului va depinde esen!ial de coordonata "timp", respectiv, de m"sura n care putem ndeplini restric!iile specifice unui sistem de comand" #i control n timp real. Proiectarea programelor pentru un sistem impune ca proiectantul s" considere n strns" corela!ie dou" aspecte: cel specific procesului #i cel ce !ine de specificitatea procesorului.
3
Link-editorul realizeaz" cuplarea mai multor module de program memorate n fi#iere obiect distincte #i aloc" zonele de memorie necesare programelor #i variabilelor utilizate de c"tre acestea. Link-editorul favorizeaz" dezvoltarea structurat" a programelor precum #i reutilizarea unor module de program n aplica!ii distincte. 4 Convertorul OBJ-IntelHEX, realizeaz" conversia din format OBJ (cod ma#in"), ntr-un format ce con!ine: adresa de locatare, num"rul de octe!i ai liniei respective, tipul datelor (cod sau date), #irul de coduri, suma de control corespunz"toare tuturor informa!iilor liniei respective #i terminatorul de linie format din caracterele CR, LF. 5 Depanatorul permite execu!ia pas cu pas, sau secven!" dup" secven!", a unui program aflat n faza de testare cu scopul de a releva interac!iunea acestuia cu procesul. n general acest program func!ioneaz" npreun" cu un sistem de dezvoltare #i dispune de un monitor programul de baz" ce ofer" func!iuni de depanare pe sistemul de dezvoltare6 Emulatorul este programul care permite simularea func!iunilor #i instruc!iunilor microcontroller-ului pe un alt sistem de calcul gazd". El poate prezenta unele restric!ii n special n ceea ce prive#te posibilit"!ile de simulare a ntreruperilor. Acest program poate s" func!ioneze att pe un calculator gen PC, ct chiar pe microcontroller-ul ce face obiectul aplica!iei, atunci cnd acesta o permite. n aceast" din urm" situa!ie, sistemul cu microcontroller are drept consol" chiar un PC, ce este conectat serial la sistemul cu microcontroller. Emulatorul rezident pe circuit permite o simulare avansat" a func!ionalit"!ii sistemului putndu-se verifica att func!ionarea programelor ct #i aceea a rutinelor de servire a ntreruperilor. 7 Mediul de simulare este utilizat n cazul unor aplica!ii extrem de complexe, caz n care practic sistemul ce implementeaz" aplica!ia este dezvoltat cu facilit"!i de depanare. Un astfel de sistem formeaz" un mediu de simulare. El include att facilit"!i soft (att pe sistemul gazd" ("host"), ct #i pe cel !int" ("target")), ct #i facilit"!i hard ce !in de existen!a unor generatoare de semnal programabile, care s" ofere excita!iile adecvate.
44
MICROCONTROLLERE
De#i varietatea sistemelor este deosebit de larg", totu#i putem considera c", n general, dou" clase de sisteme sunt preponderente, iar la limit" acestea sunt unicele ntlnite n practic", #i anume: sisteme de reglare, sisteme ce ndeplinesc una sau mai multe func!ii scop, care sunt me!inute n limite de varia!ie prestabilite, #i sisteme de control, respectiv sisteme ce implementeaz" un automat cu un num"r finit de st"ri
Tot aici trebuie s" subliniem deosebit de strnsa leg"tur" ce apare ntre aspectele "hard" ale sistemului #i aspectele "soft" ale acestuia. Aceast" leg"tur" trebuie s" fie permanent n aten!ia proiectantului, el trebuie s"-#i "nchipuie" cum !i n ce se traduce execu"ia fiec#rei instruc"iuni !i de asemenea, mai important, s# "in# cont de sincroniz#rile ce apar n "via"a sistemului" ntre func"ionarea unit#"ii centrale !i procesul reglat. Spre deosebire de programarea n limbaje de nalt nivel sau nivel mediu, n cazul nostru rezultatele program"rii se traduc prin ac!iuni specifice n cadrul sistemului, sistemul de ntreruperi jucnd un rol esen!ial. Interac!iunile, n acest caz sunt uneori mai greu de vizualizat, de aceea n timp s-a dezvolat o ampl" varietate de unelte de dezvoltare care sprijin" proiectantul de soft n realizarea acestuia. Prin sistem de dezvoltare se n!elege acel sistem ce include procesorul mpreun" cu memoria aferent", (SRAM #i EPROM/Flash ) #i care dispune de porturi, eventual de posibilitatea de generare de semnale, spa!iu pentru "cablarea" unor subsisteme adi!ionale specifice (interfe!e analog digitale #i digital-analogice, driver-e de putere, etc.) #i de programe "monitor8" rezidente n memoria fix" a sa, ce implementeaz" dispozitivul logic "consol"" drept leg"tur" cu PC-ul. Aceste programe pot dispune #i de alte rutine, cum ar fi un asamblor/dezasamblor ce permite scrierea sau modificarea "on-line" a programelor ce ruleaz" pe sistem. Sistemul dispune de "uneltele soft" ce ajut" la asamblarea programelor, editarea acestora precum #i a datelor din memoria sistemului de dezvoltare, darea n execu!ie a programului, oprirea acestuia n puncte prestabilite ("break points"), vizualizarea st"rii registrelor generale, etc. Toate acestea presupun existen!a unui dispozitiv logic, "consol"", care asigur" controlul sistemului, fie de o consol" propriu-zis", fie, mai des, de c"tre un PC ce este conectat serial la sistem. Aspecte specifice de programare apar #i ca urmare a arhitecturii procesorului CISC, RISC sau SISC. Aceste aspecte sunt "detalii" extrem de importante n programare, c"ci ele duc la modificarea stilului de proiectare a programelor. S" analiz"m pe rnd aceste aspecte. Prin analiza necesit"!ilor impuse de implemetarea comenzii #i controlului unui sistem, va trebui s" n!elegem urm"toarele.
8
Monitorul este acel grup de programe, rezident n memoria PROM/EPROM a unui sistem de dezvoltare, care dispune de un set minimal de func!iuni ce ajut" la proiectarea #i depanarea pe plac" a programelor scrise n cod ma#in".
2. Programarea sistemelor cu MC
45
Analiza necesit!"ilor de comand! #i control pe care le impune sistemul. $. Canale digitale de transfer a informa!iilor - (vom avea n vedere, num"rul acestora, #i modul n care ele pot fi grupate). Este bine s" asigur"m corespunz"tor fiec"rei linii de comand", sau de achizi!ie digital" cte un bit corespunz"tor n cadrul unor loca!ii de memorie ce reflect" permanent starea acestora. 2. Canale analogice de transfer al informa!iilor - vor necesita alocarea unui num"r de linii de ie#ire (este cazul convertoarelor digitalanalogice), respectiv un num"r de linii de intrare (este cazul convertoarelor analog-digitale) ce este func!ie de tipul de convertor, respectiv de interfa!a acestuia cu microsistemul. 3. Necesit"!ile de control a timpului - (frecven!ei, perioadei sau ntrzierii) n cadrul sistemului sunt implementate prin utilizarea judicioas" a canalelor temporizatoare. Fiecare dintre aceste necesit"!i le vom exemplifica n continuare, urmnd ca la capitolul de aplica!ii s" concretiz"m aceste exemple n programe mai ample. Spre exemplu: dac" avem de comandat dou" motoare pas cu pas tetrafazate (MPP) cu aceea#i frecven"! de comand" #i n acela#i sens, este evident c" vom aloca liniile aceluia#i port drept linii de comand" ale acestuia. De ce? C"ci astfel realiz"m dou" obiective: maximiz"m utilizarea liniilor unui port de 8 bi!i, a#a cum sunt majoritatea, pe microcontroller-ele pe 8 bi!i, dar totodat" simplific"m rezolvarea soft a comenzii, noi dedicnd astfel doar o loca!ie de memorie (STATUS_MPP), drept copie a st"rii liniilor de comand" dedicate motoarelor. Totodat" !innd cont c" majoritatea controller-elor dispun de instruc!iuni de rotire (dreapta/stnga) a informa!iilor, comanda n secven!" simpl" a MPP nu va presupune dect cteva instruc!iuni: Ini!ializarea contorului de pa#i (STEPS$ #i STEPS2) Ini!ializarea loca!iei de stare a MPP-urilor (STATUS) Ini!ializarea timer-ului corespunz"tor frecven!ei de comand" a MPP (SPEED_L, SPEED_H) Definirea rutinei de servire a ntreruperilor, corespunz"toare canalului temporizator (ISR_T0).
Aceast" rutin" va roti informa!ia din byte-ul de stare corespunz"tor, va copia aceast" informa!ie la port #i n final va decrementa contorul de pa#i. Se vor testa cele dou" loca!ii ce re!in num"rul de pa#i STEPS$ #i STEPS2 iar atunci cnd s-au executat pa#ii programa!i, comanda va fi ntrerupt". Prezent"m n continuare acest program implementat pentru microcontroller-e din familia 805$. Instruc!iunile acestui microcontroller sunt prezentate n capitolul curent. $ DSEG 0030 2 STATUS_MPP DATA 30H ;Loca!ia memoraz" starea comenzilor pentru MPP (secven!" simpl") 003$ 3 STEPS$ DATA 3$H ;Loca!ie nr. pa#i MPP$
46
MICROCONTROLLERE
4 STEPS2 DATA 32H ;Loca!ie nr. pasi MPP2 5 SPEED_L DATA 33H ;Loca!ie low(CT)timer 0 6 SPEED_H DATA 34H ;Loca!ie high(CT)timer 0 7 BSEG 00$0 8 SENS BIT $0H ;Bit "sens de rota!ie MPP" 00$$ 9 COMMAND BIT $$H ;Bit comand" MPP ;Setarea acestui bit genereaz" ini!ierea mi#c"rii MPP. Pentru aceasta trebuie s" ;ini!ializ"m n prealabil: STEPS$, STEPS2, SPEED_L, SPEED_H #i SENS. ;Bitul SENS este setat la rotirea spre stnga #i resetat la rotirea spre dreapta $0 CSEG $$ EXTRN CODE(INIT) ;Declara!ie rutina INIT extern" 0000 $2 BOOT: 0000 020054 $3 JMP MAIN 0003 $4 ISR_EXT0: ;nceputul tabelei vectorilor de ntrerupere 0003 02000E $5 JMP ISR_T0 000B $6 ORG 0BH 000B $7 ISR_TIMER0: 000B 02000E $8 JMP ISR_T0 000E C0D0 $9 ISR_T0: PUSH PSW ;Salvare PSW n stiv" 00$0 C0E0 20 PUSH ACC ;Salvare Acumulator 00$2 D2D3 2$ SETB PSW.3 ;Comutare n bancul $ de registre generale 00$4 E53$ 22 MOV A,STEPS$ ;ncarc" n A nr.pa#i MPP$ 00$6 B4000C 23 CJNE A,#0,CONT_0$ ;Test STEP$=0? 00$9 E532 24 MOV A,STEPS2 ;Da! 00$B B40026 25 CJNE A,#0,CONT_02 ;Test STEP2=0? 00$E C28C 26 CLR TR0 ;Anulare func!ionare timer $ 0020 D0E0 27 END_ISR: POP ACC ;Da! Ie#ire ISR 0022 D0D0 28 POP PSW ;Refacere stare registre generale 0024 32 29 RETI ;Ie#ire din ISR 0025 E532 30 CONT_0$: MOV A,STEPS2 ;STEP$<>0 0027 B400$2 3$ CJNE A,#0,CONT_03 ;Test STEP2=0? 002A E530 32 MOV A,STATUS_MPP ;Da! STEP$<>0, STEP2=0 002C 540F 33 ANL A,#0FH ;Mascheaz" bi!ii corespunz"tori MPP 2 002E $53$ 34 DEC STEPS$ ;Actualizeaz" contor de pa#i MPP$ 0030 20$006 35 EXEC_STEP: JB SENS,LEFT ;Test sens rota!ie MPP 0033 03 36 RR A ;Rote#te informa!ia de comand" la dreapta 0034 F590 37 EXEC_BOOTH: MOV P$,A ;Scrie comanda c"tre MPP 0036 02004C 38 JMP REPRG_T0 0039 23 39 LEFT: RL A ;Rote#te informa!ia de comand" la dreapta 003A 80F8 40 JMP EXEC_BOOTH 003C E530 4$ CONT_03: MOV A,STATUS_MPP ;STEP$<>0, STEP2<>0 003E $53$ 42 DEC STEPS$ 0040 $532 43 DEC STEPS2 ;Actualizare informa!ie de pa#i 0042 80EC 44 JMP EXEC_STEP
2. Programarea sistemelor cu MC
47
0044 E530 0046 54F0 0048 $532 004A 80E4 004C 85338A 004F 85348C 0052 80CC 0054 0054 $20000 0057 20$$02 005A 80FB 005C D28C 005E C2$$
CONT_02: MOV A,STATUS_MPP ;STEP2<>0, STEP$=0 ANL A,#0F0H ;Mascheaz" bi!ii corespunz"tori MPP $ DEC STEPS2 JMP EXEC_STEP REPRG_T0: MOV TL0,SPEED_L MOV TH0,SPEED_H ;Reprogrameaz" timer0 5$ JMP END_ISR 52 MAIN: F 53 CALL INIT ;Execut" rutina de ini!ializare sistem 54 LOOP: JB COMMAND,START_MPP 55 JMP LOOP 56 START_MPP: SETB TR0 ;Valideaz" temporizare T0 57 CLR COMMAND ;Anuleaz" comanda0060 80F5 58 JMP LOOP ;Cicleaz" (A#teapt"!)
45 46 47 48 49 50
END n cazul n care realiz"m controlul unui semnal analogic cu ajutorul sistemului format din microcontroller #i convertor digital-analog de $2 bi!i avnd drept interfa!" o interfa!" paralel", vom dedica $2 linii din cadrul a dou" porturi acestui scop. ntr-un mod analog, putem defini #i opera!iile de citire a informa!iilor de stare att cele corespunz"toare unor m"rimi analogice ct #i cele corespunz"toare m"rimilor digitale. Vom dedica fiec"rui semnal analogic loca!ii de memorie avnd o l"!ime a cuvntului cel pu!in egal" cu rezolu!ia convertorului ( $ byte pentru o rezolu!ie de 8 bi!i, 2 bytes pentru rezolu!ii mai mari de 8 bi!i #i pn" la $6 bi!i, respectiv 3 bytes pentru rezolu!ii cuprinse ntre $7 #i 24 de bi!i, etc.) Deci, num"rul de linii dedicate transferului de informa!ii va depinde de interfa!a convertorului, iar memoria alocat" re!inerii st"rii corespunz"toare m"rimii va fi mai mare sau egal" cu rezolu!ia convertorului, vorbim de ceea ce ndeob#te se nume#te "alinierea" datelor, respectiv asigur"m uniformitatea dimensiunii loca!iilor de memorie dedicate variabilelor sistemului ceea ce u#ureaz" accesul la informa!ie prin folosirea unor indec#i adecva!i. Necesit"!ile de control a timpului sunt satisf"cute prin dedicarea unor canale temporizatoare/num"r"toare. Aici apar cele mai delicate probleme, mai ales n cazul unor sisteme ce controleaz" procese cu constante de timp mici. n acest caz critic, este necesar s" aloc"m pentru controlul ntrzierii respective un canal temporizator separat, s" minimiz"m num"rul de instruc!iuni ale rutinei de servire a ntreruperilor #i s" analiz"m, iar apoi s" set"m cu aten!ie priorit"!ile stabilite la arbitrarea ntreruperilor. Va trebui ca sistemul nostru s" satisfac" cerin!elor impuse de teorema e#antion"rii att la achizi!ia de semnal ct #i n comand", ceea ce presupune ca frecven!a minim" de e#antionare s" fie mai mare dect dublul frecven!ei maxime ce intervine n cadrul procesului reglat. Nu trebuie s" uit"m c" n cazul unui sistem controlat de c"tre un microcontroller paralelelismul n ac"iune #i interac"iunea cu procesul se mbin"
48
MICROCONTROLLERE
continuu, ceea ce indeob#te poart" denumirea de "concuren"!". Aceast" proprietate are un rolul esen!ial n cazul unui sistem dedicat (ncapsulat - "embedded"). Deseori, pentru sisteme relativ lente putem g"si o perioad" minim" de temporizat, rutina de servire a ntreruperilor, corespunz"toare acesteia putnd fi utilizat" pentru controlul mai multor comenzi, ce prezint" constante de timp multipli ai temporiz"rii de baz". Dac" acest semnal de ceas l folosim pentru analiza st"rii globale a sistemului, corelat cu el, putem proiecta rutinele unui sistem de operare9 n timp real, specific. Un program monitor, (supervizor) va putea analiza periodic starea sistemului #i va decla#a task-ul, rutina adecvat" st"rii. n acest caz, construind uneltele minimale #i anume task$0-uri, rutine$$ #i subrutine$2 vom putea scrie mult mai u#or programe pentru sisteme distincte, asigurnd astfel un grad de portabilitate$3 ridicat al aplica!iilor. Implementarea program"rii structurate presupune decelarea acelor ac!iuni repetabile #i executate cu parametri diferi!i n mai multe etape din evolu!ia sistemului. Ori aceasta presupune scrierea unor rutine, ca grupuri de instruc!iuni apelabile din programul principal. Un rol esen!ial l joac" #i modul n care realiz"m gestiunea resurselor de memorie. Acestea sunt dedicate ctorva scopuri #i anume: $. Salveaz" starea sistemului. n acest sens dispunem de zone de memorie accesibile de byte #i pe bit, zon" numit" de obicei "vector de stare". Dimensiunea acestei memorii este specific" aplica!iei. 2. Salveaz" temporar informa!iile din registrele generale la apelarea rutinelor sau la execu!ia rutinelor de servire a ntreruperilor, n general implementarea acestei memorii se face utiliznd un pointer memorat ntr-un registru special al unit"!ii centrale numit "Stack Pointer", mecanismul de acces fiind implementat hard pentru fiecare microcontroller. Respectiva memorie poart" denumirea de "stiv"" #i poate fi plasat" la orice adres" valid" de memorie(intern" sau extern" microcontroller-ului), dimensiunea ei avnd un caracter dinamic. 3. Salveaz" informa!iile ce sunt achizi!ionate, transferate sau prelucrate de c"tre sistem formnd ceea ce ndeob#te se nume#te "buffer" sau memorie tampon.
Prin sistem de operare n timp real n!elegem ansamblul de rutine ce ofer" principalele rutine de comand" #i control a sistemului, cu condi!ia respect"rii teoremei de e#antionare att n comad" ct #i n control $0 Prin task n!elegem acele unit"!i de program executabile independent #i care de regul" implementeaz" o singur" func!iune ce este apelat" de c"tre planificatorul (n cazul nostru, programul principal) sistemului. $$ Rutinele implementeaz" por!iuni mici de program, ce trateaz" evenimente ce apar n func!ionarea sistemului. Sunt caracterizate prin rapiditate n execu!ie #i de regul" sunt asociate unui anumit eveniment decelabil de c"tre planificatorul sistemului de operare sau decla#ate de c"tre o cerere de ntreruperi. $2 sunt por!iuni de program apelate de c"tre task-uri, #i pot fi: dedicate, cazul celor activate de c"tre un "anumit" task, comune, cele apelate de c"tre mai multe task-uri #i re-entrante, cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile. $3 Prin portabilitate n!elegem gradul de reutilizare a programelor scrise pentru un anume sistem la o clas" larg" de sisteme analoge celui ini!ial.
9
2. Programarea sistemelor cu MC
49
Aceasta este organizat" dup" principii ce pot diferi: FIFO prima dat" memorat" este #i prima dat" extras", (First In First Out) sau ultima dat" memorat" este prima dat" extras" LIFO (Last In First Out), etc. Dimensiunea zonei de memorie este adecvat" aplica!iei #i fluxurilor informa!ionale vehiculate. Tot n aceast" categorie putem ncadra acele zone de "memorie comun"", utilizate de c"tre task-uri diferite ce ruleaz" pe sistem, zon" prin intermediul c"reia sunt pasate informa!ii de la un task la altul n scopul sincroniz"rii acestora. De asemenea n cazul unor sisteme multiprocesor se implementeaz" stive circulare de mesaje ce asigur" arbitrarea accesului procesoarelor la zona de memorie comun", implementndu-se a#a numita c"su!" po#tal" ("Mail Box"), etc. Dimensiunea acestor zone poate fi att variabil" ct #i fix".
Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompu#i n continuare. $5 Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri terminale.
50
MICROCONTROLLERE
2. Instruc!iuni de decizie (test), care implementeaz" o ramifica!ie a grafului, n general, la nivelul limbajului ma#in", aceastea sunt instruc!iuni ce implementeaz" dou" alternative (deci sunt de tip binar). n cazul microcontroller-elor nu ntlnim dect bifurca!ii. 3. Instruc!iuni de tip repetitiv, sau instruc!iuni ce implementeaz" o bucl" de program #i care sunt reprezentate prin instruc!iuni de test ce se execut" fie la nceputul, fie la sfr#itul unui bloc de program Vom exemplifica pentru dou" familii de microcontroller-e (Intel 805$ #i PIC -"middle range") cele mai sus afirmate, urmnd ca n prezentarea de detaliu a familiilor de procesoare s" trat"m exhaustiv aceste instruc!iuni$6. Familia 805$
Mnemonic
MOV A,<src> MOV <dest>,A MOV <dest>,<src> MOV DPTR,#data$6 PUSH <src> POP <dest> XCH A,<byte> XCHD A,@Ri MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A MOVX A,@DPTR SWAP A ANL A,<byte> ANL <byte>,A ANL $7 < byte > <-data8 ADD A,<byte> ADDC A,<byte>
Ac!iunea
d=0 W <- <f> d=$ W <- <f> <f> <- W W <- data8
A <- <src> <dest> <- A <dest> <- <src> DPTR <-data$6 INC SP,@SP <- <src> DEC SP,<dest> <- @SP A <-> <byte> A <-> <@Ri> A <- @Ri @Ri <- A A <- @DPTR @DPTR <- A A<-@DPTR A[high] <-> A[low] A <- <byte> <byte> <- A <byte><- data8 A<-A+<byte> A<-A+<byte>+C20
d=0f[high] <->f[low] d=0 W<-W * <f> d=$ f<-W * <f> W <- W*k d=0 W<-W+f d=$ f<-W+f W <- W+k
Abrevieri folosite la descrierea instruc!iunilor pentru procesoarele familiilor 805$ #i PIC middle range: A registrul acumulator; W registrul de lucru (acumulator); <src> registru surs" de informa!ie; <dest> registru destina!ie al informa!iilor; DPTR Data Pointer (805$); @ indicator pentru adresare indirect" la memoria extern"; d flag indicator al direc!iei; f regsitru f din "File Register" la PIC; data$6 este o constant" numeric" pe $6 bi!i; data8 constant" numeric" pe 8 bi!i; SP registru Stack Pointer (805$); $7 Abrevieri (continuare): ANL este AND logic, analog func!ionez" #i instruc!iunile ORL (OR logic) #i XOR (SAU-EXCLUSIV) logic. $8 ANDWF/ANDLW execut" func!ia logic" AND ntre operanzi, analog avem IORWF/IORLW execut" func!ia logic" OR, iar XORWF/XORLW execut" func!ia logic" SAU-EXCLUSIV $9 k constant" numeric" pe 8 bi!i 20 Carry Flag sau fanionul indicator al transportului
$6
2. Programarea sistemelor cu MC
5$
2$
ADDWF execut" func!ia aritmetic" adunare ntre operanzi, analog avem SUBLW pentru sc"dere #i respectiv ADDLF/SUBLW pentru adunare/sc"dere data pe 8 bi!i
52
MICROCONTROLLERE
Familia 805$
Mnemonic
MUL AB DIV AB RR A RRC A RL A RLC A JMP addr22 CALL addr RET RETI24 SETB b25 CLR b INC A INC DPTR DEC A DEC < byte>
A[low]<AxBB[high]<-AxB A<- int(AxB) A<mod(AxB) A0->A7 A7->A6 . A0->C C->A7 . A7->A0 A0->A$ . A7->C A6->A7 . PC23 <-addr @SP <- PCPC <- addr PC <- @SP PC <- @SP b <- $ b <- 0 A <-A+$ DPTR<- DPTR +$ A <- A-$ Byte<-byte-$
RRF RLF GOTO addr CALL addr RETURN RETFIE RETLW k BSF f,b BCF f,b INCF DECF
A0->A7 A7->A6 . A7->A0 A6->A7 . PC <-addr @SP <- PCPC <- addr
Instruc!iunile mai sus prezentate fac parte din prima categorie. Lista complet" de instruc!iuni este detaliat" pe CD la capitolele corespunz"toare celor dou" microcontroller-e. Urmeaz" instruc!iunile de decizie: Familia 805$
Mnemonic
JB addr_rel JNB addr_rel26 JZ addr_rel JNZ addr_rel JC addr_rel JNC addr_rel JBC bit,addr_rel
Ac!iunea
b=$ =>PC<-PC+addr_rel b=0 =>PC<-PC+addr_rel A=0 =>PC<-PC+addr_rel A0 =>PC<-PC+addr_rel C=$ =>PC<-PC+addr_rel C=0 =>PC<-PC+addr_rel b=$ =>PC<PC+addr_rel,b <- 0
Ac!iunea
fB=0 =>PC<-PC+2 Salt peste instr. urm"toare fB=$ =>PC<-PC+2 Salt peste instr. urm"toare
Ultimul tip de instruc!iuni, cel de ciclare este ilustrat doar prin cteva exemple:
22 23
addr reprezint" adresa de salt (adres" absolut") PC este Program Couter-ul (pointer-ul de instruc!iuni) 24 ntoarcere din rutina de servire a ntreruperilor implic" rearmarea sistemului de r"spuns la cererile de ntrerupere 25 b este num"rul bit-ului care va fi setat/resetat 26 Abrevieri (continuare): addr_rel repezint" adresa relativ" de salt specificat" n instruc!iune
2. Programarea sistemelor cu MC
53
Familia 805$
Mnemonic
CJNE A,<byte>,addr_rel CJNE <byte>,#data8,addr_rel DJNZ <byte>,addr_rel
Mnemonic
Ac!iunea
f<-f-$, d=0 =>W <- f f=0 =>PC<-PC+2 f<-f+$, d=0 => W <f f=0 =>PC<-PC+2
Men!ion"m n ncheierea acestei enumer"ri a instruc!iunilor c" n cazul microcontroller-elor nu exist" instruc!iuni de intrare/ie#ire, c"ci porturile microcontroller-ului sunt "mapate"27 n spa!iul de adrese de memorie intern. Ce rezult" din aceasta? Accesul la elementele externe microcontroller-ului se face prin instruc!iuni avnd adrese relative la porturile acestuia, adic" sunt instruc!iuni de transfer n cadrul memoriei interne a microcontroller-ului. Proiectarea programelor de func!ionare ale unui sistem trece prin mai multe etape ce sunt ilustrate n figura 2.$. Aceast" figur" nu prezint" prima #i n acela#i timp una dintre cele mai importante etape ale proiect"rii, care const" n analiza sistemic" a procesului sau sistemului a c"rui comand" se dore#te a fi implementat". $. 2. 3. 4. n cadrul acestei etape trebuie s" fie eviden!iate: Func!iunile sistemului, l"!imea canalelor de comunica!ie nesesare transferului infoma!iilor, precum #i loca!iile de memorie !int" (destina!ie) a acestora Identificarea acelor canale de transfer a informa!iilor care asigur" sincronizarea UC cu procesul condus Analiza priorit"!ilor ce trebuie s" fie atribuite canalelor de transfer la tratarea informa!iilor pentru arespecta teorema e#antion"rii Se eviden!iaz" similitudinile ce apar n func!ionarea sistemului sunt grupate n raport cu criterii specifice, func!ionale canalele de transfer a informa!iilor #i sunt conturate task-urile, rutinele #i subrutinele ce implementeaz" func!iunile sistemului de comand" #i control. Sunt analizate variatele posibilit"!i de implementare hard a aplica!iei, respectiv sunt dedicate canalelor informa!ionale liniile porturilor, canalele temporizatoare, celelalte resurse diferitelor necesit"!i ale sistemului
5.
n final trebuie s" subliniem c" procesul de proiectare este un proces iterativ, care presupune parcurgerea succesiv" de mai multe ori a etapelor de proiectare, pentru a se ob!ine o implementare a aplica!iei optimal".
27
Prin "mapare" n!elegem definirea unei func!iuni surjective ce are drept mul!ime de defini!ie mul!imea porturilor #i celorlalte dispozitie periferice #i ca domeniu al valorilor un subdomeniu din spa!iul de adrese corespunz"tor memoriei interne a microcontroller-ului.
54
MICROCONTROLLERE
Vom descrie pe rnd care sunt elementele necesare #i ce rezult" la parcurgerea fiec"rei etape n cadrul procesului de proiectare a programelor de aplica!ie n cazul utiliz"rii uneletelor specifice procesoarelor 805$. Asamblarea fi#ierelor surs" scrise n limbaj ma#in" #i salvate ca fi#iere
EDITAREA FI$IERELOR SURS% (asamblare) (FORMAT ASCII) EDITAREA FI$IERELOR SURS% (n limbaj C) (FORMAT ASCII)
BIBLIOTECI (DIVERSE)
LINK-EDITAREA
CONVERSIA FI $IERELOR OBIECT N FI$ IERE FORMAT INTEL-HEX TRANSFERUL FI$ IERELOR PE SISTEMUL DE DEZVOLTARE $I DEPANAREA APLICA! IEI
FI$IER SURS%
2. Programarea sistemelor cu MC
55
ASCII este descris" n figura 2.2. n cazul utiliz"rii unor module de program scrise n C, fi#ierele surs" vor fi compilate rezultnd n urma compil"ri acelea#i fi#iere ca #i n cazul asambl"rii. n figura 2.3 prezent"m care sunt fi#ierele de intrare #i cele de ie#ire n cazul utiliz"rii programului link-editor Dup" "legarea" utiliznd link-editorul a modulelor de program rezult" module obiect absolute care vor fi cu ajutorul debbuger-ului, sau al unui simulator sau al unui emulator, nc"rcate #i testate pentru a se eviden!ia intercorela!iile ce se stabilesc ntre programe #i sistemul controlat. Pentru transferul fi#ierelor fie c"tre sistemul de dezvoltare, fie c"tre un programatorul universal este necesar s" ob!inem plecnd de la fi#ierul obiect absolut fi#iere n formate transferabile. Aceast" func!ie este ndeplinit" de convertorul OHS5$. (vezi figura 2.4) Programul LIB5$ ce face parte din modulul de programe specifice microcontroller-elor 805$ #i el permite generarea unor biblioteci cu module de
FI$IERUL OBIECT 1 FI$IERUL OBIECT 2 LINK -EDITORUL SPECIFIC PROCESOARELOR 8051 MODULUL OBIECT ABSOLUT
FI$IERUL FORMAT INTEL - HEX FI$IERUL OBIECT ABSOLUT FI$IERUL SIMBOLIC DIGITAL RESEARCH HEX FI$IERUL 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 bi!ilor semnificativi ai microcontroller-ului Adrese de interes din cadrul programului (n general adrese de salt) ;Aceasta este o etichet" ;Aceasta este o instruc!iune de salt
MAIN
<CR> reprezint" -returul de car ("Carriage Return" ), iar <LF> sfr#itul de linie ("Line Feed") 29 Caracterele scrise n format hexazecimal care ncep printr-o cifr" exprimabil" ca un alfanumeric vor fi scrise cu 0 n fa!a acesteia. Acest caracter este ignorat la asamblare.
2. Programarea sistemelor cu MC
57
Simboluri: reprezint" valori numerice, adrese sau nume de registre ce permit mai buna lizibilitate a programelor. Atributele ce pot fi date simbolurilor sunt: TYP: cu valorile CODE, DATA, BIT sau TYPELESS sau REGISTER SEGMENT: orice simbol con!ine #i untip de segment. SCOPE: exprim" validitatea simbolului, ea poate fi local (valabil" doar n rutina sau segment de program n care este specificat", public, caz n care n toate modulele de program poate fi referit #i este recunoscut, external, caz n care definirea simbolului este realizat" ntr-un alt fi#ier surs" sau address symbol, VALUE: reprezint" valoarea numeric" corespunz"toare simbolului, aceasta depinde de adresa tipului de simbol respectiv. CHANGEALE: Aceste simboluri pot fi redefinite prin intermediul directivei SET. Simbolurile care nu au fost definite utiliznd directiva SET nu pot fi redefinite Asamblorul A5$.EXE admite drept nume de simboluri #irurile de caractere de pn" la 3$ de caractere, primul trebuind s" fie obligatoriu un caracter alfanumeric: 'A','a','Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric. Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce definesc resurse ale microcontroller-ului respectiv. Iat" cteva dintre acestea: A =acumulatorul, R0,R$,..R7 sunt registre generale ale bancului curent, DPTR este simbolul corespunz"tor registrului de adresare "Data Pointer", C este flag-ul de transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la nmul!ire #i mp"r!ire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente. Operatorii aritmetici recunoscu!i sunt: Operatorul Exemplu Semnifica!ia +, +5 +$ +0Ah Semnul num"rului +,2+$0-$ Reprezint" operatorul aplicat * $234H*5 Repezint" operatorul de multiplicare / 45/9 Repezint" operatorul de mp"r!ire MOD $7 MOD 5 Reprezint" operatorul de mp"r!ire ntreag" ^ 2^3 Reprezint" operatorul de exponen!iere () (2+5)*34 Precizeaz" preceden!a opera!iilor Operatori binari utiliza!i sunt: Operator Exemplu Semnifica!ie NOT NOT 5 Complementul lui 5 HIGH HIGH $234H Selecteaz" partea mai semnificativ", respectiv $2H LOW LOW $234H Selecteaz" partea mai pu!in semnificativ", respectiv 34H a num"rului $234H
58
MICROCONTROLLERE
Exemplu 2 SHL 4 0FEH AND $4H 0FEH OR $4H 0FEH XOR $4H
Semnifica!ie Exprim" deplasarea spre dreapta, respectiv stnga a bi!ilor num"rului 2 cu 4 (ranguri) Reprezint" SI -ul logic ntre cei doi operanzi Reprezint" SAU -ul logic ntre cei doi operanzi Reprezint" SAU-EXCLUSIV ntre cei doi operanzi
Operatorii rela!ionali sunt acei operatori ce compar" doi operanzi. Rezultatul compara!iei este ADEV%RAT sau FALS, valori ce sunt returnate n urma efectu"rii opera!iei. Dintre ace#ti operatori amintim: Operator >= ,GTE <= ,LTE <> , NE = , EQ < , LT > , GT Exemplu 8>=$7 8 LTE 45 8 NE 45 8 EQ 45 8 LT 45 8 GT 45 Semnifica!ie Mai mare sau egal. Valoarea returnat": FALS Mai mic sau egal. Valoarea returnat": ADEV%RAT Nu este egal. Valoarea returnat": ADEV%RAT Egal. Valoarea returnat": FALS Mai mic dect. Valoarea returnat" ADEV%RAT Mai mare dect. Valoarea returnat" FALS
Preceden!a operatorilor este cea cunoscut" #i la alte limbaje de programare, parantezele, apoi operatorii unari, adunarea #i sc"derea, nmul!irea #i mp"r!irea, deplasarea, operatorii logici #i n final operatorii rela!ionali. Datele imediate, respectiv valorile numerice incluse n cadrul instruc!iunii sunt reprezentate cu avnd caracterul '#' n fa!". Exemple: MOV A,#0ABH ;ncarc" n A valoarea ABH, respectiv $7$D MOV DPTR,#8000H ;ncarc" valoarea 8000H n DPTR ANL A,#$28 ;Realizeaz" opera!ia &I logic ntre valoarea memorat" n acmulator #i valoarea ;$28D MOV R0,#DAT ;ncarc" n registru R0, valoarea simbolului DAT Adresarea datelor poate fi f"cut" n dou" moduri distincte: $. Direct caz n care informa!ia de adres" este specificat" chiar n codul ma#in" respectiv 2. Indirect, caz n care simbolul inclus n codul ma#in" reprezint" adresa la care este memorat operandul utilizat de c"tre instruc!iune. Pot fi utiliza!i: registrele R0 #i R$ sau registrul DPTR. Spa!iul de adrese este func!ie de tipul de microcontroller. Exemplele incluse pe CD detaliaz" loca!iile #i adresele de memorie inclusiv cele corespunz"toare simolurilor corespunz"toare fanioanelor microcontroller-elor din familia 805$. Directivele de asamblare admise sunt prezentate n enumerarea de mai jos: SEGMENT permite declararea unui segment ce poate fi relocatat. Sintaxa este:
2. Programarea sistemelor cu MC
59
Nume_segment_relocatabil SEGMENT Tip_segment [Tip_relocatabil] EQU permite specificarea unei valori pentru o variabil" utilizat" n faza de asamblare SET permite specificarea unei valori pentru o variabil" utilizat" n faza de asamblare, valoare ce poate fi ulterior modificat" DATA reprezint" zona de memorie intern" avnd adresele ntre 0 #i $27 IDATA reprezint" zona adresabil" indirect din memoria intern" a microcontroller-ului 0 la $27 sau 0 la 255 inclusiv. XDATA reprezint" zona adresabil" pe byte situat" n memoria extern" microcontroller-ului BIT reprezint" zona adresabil" pe bit situat" ntre 20H #i 27H inclusiv CODE reprezint" spa!iul alocat codului (programelor executabile) Rezervarea spa!iului de memorie este realizat" prin intermediul dispozi!iilor: [Nume_bloc_memorie:] DS Dimensiune bloc de memorie [Nume_variabil"_byte:] DB Valoare de ini!ializare byte [Nume_variabil"_cuvnt:] DW Valoare de ini!ializare cuvnt [Nume_variabil"_bit:] DBIT Valoare bloc bi!i Dispozi!iile ce pot fi incluse se pot adresa #i link-editorului, ele trebuind s" fie specificate n programul surs". Acestea sunt: PUBLIC directiv" ce declar" o variabil" sau bloc de memorie "vizibil"" n toate modulele de program surs". EXTRN directiv" ce precizeaz" faptul c" variabila specificat" se afl" n alt modul de program, implicit alt fi#ier surs". Se precizeaz" tipul acestei variabile ce poate fi numele unei rutine,deci este de tipul CODE sau o variabil" din memorie, deci DATA. NAME directiv" ce define#te numele unui modul de program Dintre dispozi!iile de control a asambl"rii men!ion"m: ORG adres" Dispozi!ie ce specific" adresa de la care se locateaz" codul scris n continuare END Indic" sfr#itul unui modul de program RSEG Indic" nceputul zonei registrelor generale (000H) CSEG Indic" nceputul memoriei de program (000H) DSEG Indic" nceputul zonei memoriei de date (memoria intern" - 000H) XSEG Indic" nceputul zonei de memorie externe a microsistemului ISEG Indic" nceputul zonei de memorie interne adresabile indirect BSEG Indic" nceputul zonei adresabile pe bit USING Specific" bancul de registre generale utilizat D"m n continuare doar un exemplu ce ilustreaz" cum func!ioneaz" cteva dintre aceste directive. LOC OBJ LINE SOURCE 0020 $ VAL EQU 20H ;Ini!ializeaz" variabila byte VAL cu 20H 00$0 2 VAL$ EQU $6 ;Ini!ializeaz" variabila byte VAL$ cu $6 3 DSEG
60
MICROCONTROLLERE
0000 4 DS $0H ;Rezerv" $5 bytes n zona RAM intern" 00$0 5 REG23: DS $$H ;Rezerv" blocul REG23 de $7 bytes n zona RAM 002$ 6 BITI: DS 0$H ;Rezerv" $ byte cu numele BITI 0030 7 VAL2 SET VAL+VAL$ ;In!ializeaz" variabila VAL2 ;func!ie de variabilele VAL, VAL$. Variabila poate fi redefinit" n program REG 8 COUNTER SET R0 ;Define#te variabila COUNTER ce poate fi redefinit" n program 9 BSEG AT BITI+8 ;Seteaz" adresa de la care definim zona utilizator accesibil" pe bit 0029 $0 BIT_0: DBIT $ ;Define#te bitul BIT_0 002A $$ BIT_$: DBIT VAL2 ;Define#te func!ie de VAL2 bitul BIT_$ 0008 $2 VAL2 SET 8H ;Redefine#te variabila VAL2 0008 $3 BIT_2 BIT VAL2 ;Define#te bitul BIT_2 $4 XSEG AT 80H ;Define#te zona memorie externe utilizator ncepnd de la adresa 80H 0080 $5 STACK$ DATA 80H ;Define#te pointer-el STACK$ $6 CSEG ;Define#te nceputul zonei "memorie de program" 0000 $7 START CODE 00H ;Define#te tipul memoriei 0000 020003 $8 JMP MAIN ;Instruc!iune de salt 0003 $9 ISR0 CODE START+3 ;Define#te adres" coresp. ISR0 000B 20 ISR$ CODE START+0BH ; Define#te adres" coresp. ISR0 0003 2$ MAIN: ;Adres" de salt (definit" de eticheta MAIN) 0003 85808$ 22 MOV SP,STACK$ ;Ini!ializare cu STACK$ a SP 23 END ;Sfr#it program surs" SYMBOL TABLE LISTING ------ ----- ------NAME TYPE V A L U E ATTRIBUTES BITI . . . D ADDR 002$H A BIT_0. . . B ADDR 0025H.$ A BIT_$. . . B ADDR 0025H.2 A BIT_2. . . B ADDR 002$H.0 A COUNTER. . REG R0 ISR0 . . . C ADDR 0003H A ISR$ . . . C ADDR 000BH A MAIN . . . C ADDR 0003H A REG23. . . D ADDR 00$0H A SP . . . . D ADDR 008$H A STACK$ . . D ADDR 0080H A START. . . C ADDR 0000H A VAL. . . . N NUMB 0020H A VAL$ . . . N NUMB 00$0H A VAL2 . . . N NUMB 0008H A
2. Programarea sistemelor cu MC
6$
Al"turi de dispozi!iile mai sus men!ionate, pentru u#urarea proiect"rii programelor sunt admise o serie de macro-instruc!iuni, specifice asamblorului, care asigur" asamblarea condi!ionat" a fi#ierelor surs" de program. Dintre avantajele pe care un astfel de stil n programare le are, amintim: Reduce substan!ial frecven!a erorilor acolo unde acelea#i secven!e de instruc!iuni sunt utilizate. Scopul simbolurilor utilizate n MACRO-uri este limitat doar la macro-ul respectiv Este util n special pentru crearea unor tabele de coduri simple. [list"_parametrii_formali]30 Nume_simbol3$ [,Nume_Simbol$][] Num"r_repeti!ii32
IRP parametru_formal <list"> IRPC parametru_formal,parameru_actual EXITMcomand" terminarea buclei macro curente
Exemple: Am specificat deasupra liniei de defini!ie elementele acesteia: Nume defini!ie MACRO Cuvnt cheie Parametrul MACRO $ CLR_MEM MACRO DIMENS 2 MOV R0,#DIMENS ;ncarc" n R0 valoarea DIMENS 3 LOOP: ;Eticheta de definire a buclei 4 MOV @R0,#00H ;Scrie la adresa memorat" n R0:00H 5 DJNZ RO,LOOP ;Testeaz" #i cicleaz" pn" R0=0 6 ENDM ;Sfr#it MACRO CLR_MEM ; Macro-ul realizeaz" umplerea cu zero a memoriei interne de la adresa 000H #i ; pn" la adresa DIMENS 7 REP_OK: ;Define#te o etichet" de recunoa#tere 8 REPT 2 ;Define#te factorul de repeti!ie 9 MOV R0,#$ ;ncarc" n R0 valoarea $ $0 MOV A,@R0 ;Transfer" de la adresa $ informa!ia n A $$ ENDM ;Sfr#it surs" program generat repetitiv 0000 780$ $2+$ MOV R0,#$ ;Programul generat (4 instruc!iuni) 0002 E6 $3+$ MOV A,@R0 0003 780$ $4+$ MOV R0,#$ 0005 E6 $5+$ MOV A,@R0 0006 $6 IRP_EX: ;Exemplu de generare succesiune instruc!iuni $7 IRP X,<2,3> ;Definire variabil" X
30 3$
Parametri formali sunt variabile utilizate drept parametri n cadrul MACRO-ului Variabil"/simbol utilizat n spa!iul macro-ului 32 Variabil" ce precizeaz" de cte ori se insereaz" n codul surs" blocul de instruc!iuni cuprins ntre REPT #i ENDM
62
MICROCONTROLLERE
MOV R0,X ;Definire instruc!iune ce include X INC R0 ;Instruc!iune de incrementare; ENDM ;Sfr#it macro defini!ie repetitiv" variabil" 0006 A802 2$+$ MOV R0,2 ;Cod generat cu prima valoare X 0008 08 22+$ INC R0 0009 A803 23+$ MOV R0,3 ;Cod generat cu a doua valoare X 000B 08 24+$ INC R0 000C 25 IRPC_EX: ;Macro defini!ie repetivit" ce utilizeaz" variabila X dnd valorile 2,5 #i 9 26 IRPC X,<259> ;Setare valori variabil" X 27 MOV @R0,X ;Definire instruc!iune 28 ENDM Sfr#it macro defini!ie repetitiv" 000C A602 29+$ MOV @R0,2 ;Definire instruc!iune cu valoarea X($) 000E A605 30+$ MOV @R0,5;Definire instruc!iune cu valoarea X(2) 00$0 A609 3$+$ MOV @R0,9;Definire instruc!iune cu valoarea X(3) 32 END SYMBOL TABLE LISTING ------ ----- ------N A M E T Y P E V A L U E ATTRIBUTES IRPC_EX. . C ADDR 000CH A IRP_EX . . C ADDR 0006H A REP_OK . . C ADDR 0000H A Urm"toarele caractere sunt considerate caractere speciale n cazul macroasamblorului A5$.EXE: & concateneaz" textul cu parametrii "dummy" este utilizat pentru a introduce delimitatorii n text cum ar fi : , #i spa!iul (blank) ; delimiteaz" de la el pn" la sfr#itul liniei zona ce nu va fi procesat" de c"tre asamblor ! este folosit pentru a indica asamblorului c" urm"torul caracter special va fi considerat literal. NUL este cuvntul cheie utilizat ca expresie a "non valorii", c"ci orice alt caracter, inclusiv blank-ul ar fi interpretat de c"tre asamblor n cadrul unor expresii logice cum ar fi IF. Apelarea unei expresii MACRO impune o anumit" sintax", #i anume: [etichet":] Nume_Macro [Parametri_actuali] Ordinea parametrilor avut n vedere la definirea MACRO-ului trebuie respectat" ntotdeauna la apelarea sa. Ea este singurul element ce asigur" recunoa#terea corect" a parametrilor n cadrul macro-ului.
$8 $9 20
2. Programarea sistemelor cu MC
63
Asamblorul admite caracterul $ plasat n prima coloan" a unei linii drept caracter "primar" de control. El va fi urmat, nu neaparat imediat, de diverse cuvinte cheie, cum sunt: $ XREF/NOXREF activeaz"/inhib" lista de referin!" cu variabilele utilizate de program $ TITLE define#te titlul programului, care poate fi format dintr-un #ir de caractere (maximum 60) ce urmeaz" cuvntului cheie $ MOD5$/NOMOD5$ Define#te/redefine#te setul de registre. Implicit asamblorul execut" asamblarea considernd c" programul este scris pentru un microcontroller standard 805$, n celelalte situa!ii va trebui s" inhib"m op!iunea prin dispozi!ia: $ NOMOD5$, urmat" de dispozi!ia $ INCLUDE $ MACRO/NOMACRO activeaz"/inhib" procesorul de MACRO-uri $ DEBUG/NODEBUG include sau nu informa!iile de depanare necesare debugerului sau emulatorului $ DATE (30,02,00) cuvntul cheie este urmat de un #ir ce exprim" data (maximum 9 caractere) $ OBJECT: nume_fi#ier indic" numele fi#ierului ce va include rezultatul asambl"rii, respectiv fi#ierul cu codul obiect $ REGISTERBANK/NOREGISTERBANK (Num"rul/numerele bancurilor de registre utilizate) $ INCLUDE (Nume_fi#ier_cu_defini!ii_registre) permite specificarea ntre paranteze a fi#ierului ce define#te structura de registre specific" procesorului pentru care a fost scris programul $ LIST/NOLIST indic" liniile din cadrul fi#ierului surs" ce nu vor fi listate n fi#ierul listing rezultat n urma asambl"rii Utiliznd dispozi!iile de asamblare condi!ionat" putem scrie compact #i incluznd toate variantele de implementare programe. n acest scop asamblorul pune la dispozi!ia programatorului urm"toarele dispozi!ii de asamblare condi!ionat". $SET/RESET (<var$>[,<var2>], ) sau (<var>=<valoare_numerica>[,]) $ IF expresie numeric" ce va fi analizat" dac" este sau nu adev"rat", n caz afirmativ va fi asamblat programul ce urmeaz" dispozi!iei pn" la ntlnirea dispozi!iei $ ENDIF Alte dou" op!iuni pot completa dispozi!ia IF cu alternative la aceasta. Un exemplu va fi edificator: LOC OBJ LINE SOURCE $ $DEBUG ;Dispozi!ie de generare a simbolorilor pentru depanarea programului 2 $SET (A=$) ;Define#te variabila A pentru comanda macro assembler-ului. Variabilei trebuie s" ;i se atribuie o valoare atunci cnd este invocat" opera!ia de asamblare a codului ;surs" 3 $IF A=$ ;Testare variabil" A, Dac" este adev"rat" ;condi!ia, se execut" asamblarea instruc!iunii urm"toare
64
MICROCONTROLLERE
MOV A,SBUF;Instruc!iune de asamblat cnd A=$ $ELSEIF B=2 MOV R0,SBUF $ELSE ;Alternativ" la bifurca!ia IF MOV R$,SBUF ;Instruc!iune alternativ asamblat" $ENDIF ;Sfr#it bifurca!ie IF. ELSE. $0 $RESET (A) ;Eliberare memorie corespunz"toare variabilei A $$ $SET (B=2) ;Setare valoare pentru variabila B $2 $IF A=$ MOV A,SBUF $ELSEIF B=2 ;Dispozi!ie macroasamblor de testare iterativ" tip IF. Este utilizat" pentru ;simularea instruc!iunilor de tip CASE .. ON ELSE 0002 A899 $5 MOV R0,SBUF $6 $ELSE MOV R$,SBUF $ENDIF $9 $RESET (B) 20 $IF A=$ MOV A,SBUF $ELSEIF B=2 MOV R0,SBUF $ELSE 0004 A999 25 MOV R$,SBUF 26 $ENDIF 27 END n ncheiere prezent"m sintaxa liniei de comand" DOS ce invoc" execu!ia programului asamblor: A5$ Nume_fi#ier_surs".a5$ [PRINT:CO:] Utilizarea link-editorului se face tot din mediul DOS , linia de comand" avnd structura: L5$ list"_fi#iere_de_intrare [TO nume_fi#ier_ie#ire] [list"_controale]<CR,LF> Sau: L5$ fi#ier_de_comenzi <CR,LF> Lista include nume de fi#iere ce sunt separate prin caracterul "," Numele fi#ierului de ie#ire trebuie precizat atunci cnd dorim ca fi#ierul cu extensia logic" ".M5$" s" fie specificat de c"tre utilizator. n caz contrar, acest fi#ier va lua numele primului fi#ier de lista fi#ierelor de intrare. Fi#ierul de comenzi poate con!ine n format ASCII aceia#i parametri ca #i cei din linia de comand". Informa!ii suplimentare g"si!i n cadrul CD-ului.
0000 E599
4 5
2. Programarea sistemelor cu MC
65
Un program deosebit de important este manager-ul de biblioteci LIB5$. Acest program asigur" crearea unei biblioteci de func!ii #i actualizarea acesteia. Linia de comand" cu care este invocat programul are structura: LIB5$ [<comanda>]<CRLF> Comenzile admise sunt: Comanda
ADD CREATE DELETE EXIT HELP LIST
Func!iunea
Adaug" un nou modul de program n bibliotec" Genereaz" o bibliotec" de func!ii (ini!ial goal") &terge din bibliotec" un modul de program Revine n mediul DOS Ofer" scurte indica!ii asupra comenzilor Afi#eaz" modulele #i simbolurile publice nume ale bibliotecilor
Comanda de ad"ugare (ADD) are sintaxa: ADD nume_fi#ier <CRLF> [(nume_modul$,nume_modul2,)] TO nume_bibliotec"
Comanda de #tergere (DELETE) are sintaxa DELETE nume_bibliotec" (nume_modul) <CRLF> Sistemele de dezvoltare sunt deosebit de diverse. Ele dispun n afar" de microcontroller #i de alte elemente cum sunt porturile suplimentare, de obicei porturi de tip "registru" pe ie#iri #i "buffer"-e pe intr"ri. Avnd n vedere caracteristicile specifice microcontrollerelor selec!ia porturilor este realizat" n spa!iul dedicat memoriei externe a microcontroller-ului. (vezi nu este cazul pentru microcontroller-ele Atmel seriile 89Atxxxx ($05$,205$,405$), ci variantele 89Atxx (5$,52,55, etc) sau pentru microcontroller-ele firmelor Intel Philips, Dallas, etc. n figura 2.5 prezent"m un sistem de dezvoltare dotat cu un monitor Franklin ce are implementat" o consol" via interfa!a serial". Sistemul dispune de 2 porturi de ie#ire $ port de intrare, precum #i un port de comunica!ie cu un afi#or cu cristale lichide (LCD) #i un decodificator pentru circuite de intrare/ie#ire cu 8 linii de selec!ie. Sistemul permite dezvoltarea unei aplica!ii care poate include toate elementele unui sistem dedicat. Evident dac" se dore#te, pot fi ad"ugate convertoare analog-digitale #i digital analoge, precum circuite de interfa!" diverse. Avantajul principal al acestui sistem const" n aceea c" el permite conectarea microcontroller-ului la procesul controlat ceea ce face ca utilizatorul s" poat" analiza, depana sau chiar reproiecta anumite programe chiar n contextul dat, avnd la dispozi!ie toate semnalele de excita!ie reale.
66
MICROCONTROLLERE
Memorie EEPROM
Porturi de intrare
Porturi de ie&ire
Programul monitor "mt.exe"func!ioneaz" mpreun" cu monitorul Franklin #i prezint" cteva comenzi: A [adres"] <CR,LF> Asambleaz" cod 805$ de la adresa specificat" BD [ALL] < num"r_break_point> Invalideaz" toate break point-urile sau cel specificat prin num"r ce reprezint" chiar indexul acestuia BE [ALL] < num"r_break_point> Valideaz" break point-urile. BK [ALL] <num"r_break_point> &terge toate break point-urile sau doar cel specificat BL Listeaz" break point-urile setate BS <adres">Seteaz" (stabili#te) un break point la adresa precizat" DB (Display Bits) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe bit ntre adresele de start #i stop DD (Display Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet ntre adresele de start #i stop aflat" n memoria intern" a MC DI (Display Indirect Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet indirect ntre adresele de start #i stop DX (Display Extended Data) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet plasat" n afara MC, ntre adresele de start #i stop
2. Programarea sistemelor cu MC
67
DC (Display Code) <adres"_start> <adres"_stop> Afi#eaz" zon" memorie accesibil" pe octet n memoria de program #i plasat" ntre adresele de start #i stop FILLB/FILLD/FILLI/FILLX/FILLC <adres"_start> <adres"_stop> <valoare> Directiv" de umplere zon" de memorie, cu acelea#i semnifica!ii ca #i la Dispozi!ia Display pentru diversele zone de memorie G <adres"_start> <adres"_break> Dispozi!ie de execu!ie program ntre adresa de start #i cea de break ? Dispozi!ie de help "on-line" H<num"r$><num"r2> Dispozi!ie de calcul n hexazecimal valoare sum"/diferen!" num"r$, num"r2 T <adres"_start> execut" pas cu pas instruc!iunile programului cu afi#area tuturor registrelor microcontroller-ului X[<nume_registru>] afi#eaz" to!i/registrul specificat F$ tast" special" ce permite ie#irea din program F2 tast" special" care permite nc"rcarea programelor n format Intel-HEX via interfa!a serial" (consola) F3 tast" special" ce permite salvarea n cadrul unui fi#ier al c"rui nume este specificat de c"tre operator a caracterelor recep!ionate via interfa!a serial" (consola)
68
MICROCONTROLLERE
fereastra cu registrele acestuia (zona SFR) #i fereastra "trace", ce urm"re#te evolu!ia programului #i cea corespunz"toare memoriei EEPROM de care microcontroller-ele din familia PIC dispun. Meniurile mediului integrat sunt n num"r de 3 #i anume:cel corespunz"tor func!iunilor de editare #i salvare fi#iere #i proiecte, cel corespunz"tor proces"rii fi#ierelor surs", respectiv asambl"rii sau compil"rii, al link-edit"rii fi#eirelor obiect #i cel corespunz"tor test"rii/simul"rii programelor scrise, ce permite execu!ia pas cu pas, admite editarea #i administrarea de stimuli sistemului precum #i n final, programarea microcontroller-ului respectiv. n ceea ce nsemn" dispozi!iile de asamblorului MPASM, apar mici deosebiri fa!" de asamblorul A5$.EXE. n continuare vom prezenta cteva dintre aceste deosebiri, o list" complet" de referin!" o pute!i g"si pe CD. Sistemul de numera#ie Zecimal Hexazecimal Octal Binar Caracter (ASCII) Sintaxa D'<digi!i>, .<digi!i> H'<digi!i>', 0x< digi!i > O'< digi!i >' B'< digi!i >' '<caracter>', A'<caracter>' Exemple D'$23', .255 H'EF' , 0xE32A O'$234' B'$$0$00$$' 'V', A'u'
Etichetele sunt exprimate prin #iruri de caractere #i ele identific" punctele de salt sau cele la care sunt plasate rutinele scrise. Directiva CONSTANT #DEFINE EQU #INCLUDE PROCESSOR SET #UNDEFINE VARIABLE IF WHILE Descriere Define#te un simbol drept constant" n program Define#te text de substitu!ie Define#te o constant" Include un fi#ier surs" Define#te tipul procesorului Asigneaz" o valoare unei variabile (poate fi apoi redefinit") Renun!" la defini!ia anterior precizat" prin #DEFINE Declar" un simbol drept variabil" Define#te o macroinstruc!iune de decizie Realizeaz" buclarea atta timp ct condi!ia testat" la nceput este adev"rat" Sintaxa Constant<etichet">=[<expresie>, <etichet">=<expresie>,..] #define <nume> [<arg>,<arg>,..] <etichet"> equ <expresie> include <nume_fi#ier> Processor <tip_procesor> <etichet"> set <expresie> #undefine <etichet"> variable <etichet">[=expresie] if <expresie> while <>expresie
2. Programarea sistemelor cu MC
69
Descriere Selecteaz" un banc de memorie intern" pentru acces indirect Rezerv" spa!iu de memorie Umple o zon" de memorie cu o anume informa!ie mpacheteaz" n memoria de program un #ir Creaz" o valoare numeric" sau una text Declar" un byte Declar" o dat" n EEPROM Define#te o tabel" Declar" o dat" un cuvnt Define#te un MACRO Ie#ire dintr-unMACRO Export" defini!ia unei etichete Specific" adresa maxim" pentru memoria RAM
Sintaxa bankisel <etichet"> res <num"r_de_loca!ii> fill <expresie>,<num"r_loca!ii> <etichet"> da <expresie>[,<expresie>,] data <expresie>[,<expresie>..], data <text>[,<text>,..] db <expresie>[,<expresie$>,..] de <expresie>[,<expresie$>,..] dt <expresie>[,<expresie$>,..] dw <expresie>[,<expresie$>,..] <etichet"> macro [<argument>, <argument$>,..] Exitm global <etichet"> __maxram <expresie>
Op!iunile de link-editorului MPLINK atunci cnd este invocat sunt: /o nume_fi#ier /m nume_fi#ier /l pathlist /k pathlist /n length /h , /? /a hexformat /q /d specific" fi#ierul de ie#ire specific" generarea fi#ierului "hart"" nume_fi#ier specific" (adun")calea la fi#ierul bibliotec" ce este link-at specific" (adun") calea la fi#ierul script utilizat de linker specific" num"rul de linii llistate pe pagin" afi#eaz" fi#ierul de ajutor corespunz"tor link-erului specific" formatul HEX pentru fi#ierele de ie#ire iese din link-are evit" crearea fi#ierului listing absolut
3
MICROCONTROLLERE MOTOROLA (MC cu arhitectur! CISC)
Motorola a dezvoltat cteva tipuri de unit!"i centrale, la care s-au ata#at o multitudine de interfe"e, ob"innd astfel foarte multe tipuri de circuite, compatibile din punct de vedere software. Motorola a creat astfel posibilitatea producerii a nenum!rate variante de MC, care s! acopere ct mai multe din aplica"iile utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated Circuit). Spre deosebire de familia 805$ unde pe nucleul creat de INTEL, firme constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de MC, ob"innd astfel o unitate n diversitate. Schema bloc simplificat! a unui MC din familia Motorola este dat! n figura 3.$.
Memorie ROM, EPROM sau OTP Memorie RAM Memorie EEPROM Unitatea central! 6805, 6808... +VDD (+5V/+3V) RESET IRQ Oscilator
Port A
Port B
3. Microcontrollere Motorola
7"
Porturile I/O pot fi de uz general, dar liniile porturilor pot fi utilizate #i de interfe"ele speciale. n continuare vor fi prezentate blocurile din structura MC Motorola 6805.
3."
MC M68HC05
72
MICROCONTROLLERE
Con"inut Nefolosit Stare #i control pentru timer Registru num!r!tor pentru timer Stare #i control a ntreruperilor Nefolosit Nefolosit Registru de programare a EPROM Nefolosit Nefolosit RAM utilizator sau stiv! (64 octe"i) Nefolosit (5$2 octe"i) EPROM ($232 octe"i) Nefolosit (30 octe"i) Test ROM (2 octe"i) Registru COP Registru de m!#ti Rezerva"i Vector pentru timer (octet semnificativ) Vector pentru timer Vector pentru IRQ (octet semnificativ) Vector pentru IRQ Vector pentru SWI (octet semnificativ) Vector pentru RESET (octet semnificativ) Vector pentru RESET
Adresa (H) 0006-0007 0008 0009 000A 000B-00$$ 00$2-00$7 00$8 00$9-00$F 0020-00BF 00C0-00FF 0$00-02FF 0300-07CF 07D0-07ED 07EE-07EF 07F0 07F$ 07F2-07F7 07F8 07F9 07FA 07FB 07FC 07FE 07FF
3. Microcontrollere Motorola
73
Registrul num!r!tor de program (Program Counter - PC) este un registru de $3 bi"i care con"ine adresa urm!toarei instruc"iuni de executat. Dup! execu"ia instruc"iunii registrul este incrementat. Un salt sau o ntrerupere determin! nc!rcarea PC cu alt! valoare dect adresa urm!toarei loca"ii. Dup! Reset registrul PC este nc!rcat cu con"inutul loca"iilor 3FFEh #i 3FFFh (la MC68HC705J$A). Registrul de condi#ii (Condition Code Register - CCR) este un registru de 8 bi"i (din care sunt folosi"i 5) cu urm!toarea semnifica"ie: Bitul 0 -LSB, (Carry/Borrow Flag) pozi"ionat dac! o adunare produce un transport sau dac! la o sc!dere este nevoie de mprumut. Bitul $ (Zero Flag), pozi"ionat dac! rezultatul unei opera"ii este zero. Bitul 2 (Negative Flag), pozi"ionat dac! rezultatul unei opera"ii este negativ (bitul 7 este $). Bitul 3 (Interrupt Mask Bit) cnd este $ sunt invalidate ntreruperile. Dac! apare o ntrerupere cnd acest bit este $, ea este memorat! pn! bitul devine 0; atunci se salveaz! registrele UC n stiv!. Dup! Reset bitul este setat n $ #i poate fi pozi"ionat n 0 cu instruc"iunea CLI. Bitul 4 (Half-Carry) este pozi"ionat cnd apare un transport de la bitul 3 spre 4 n acumulator la o opera"ie de adunare cu sau f!r! Carry. Este util la opera"ii BCD.
Unitatea aritmetic! #i logic! realizeaz! opera"iile aritmetice #i logice definite de setul de instruc"iuni. Multe din instruc"iunile aritmetice se bazeaz! pe algoritmul de la adunare. Astfel, o nmul"ire este realizat! printr-un #ir de adun!ri #i deplas!ri succesive #i dureaz! $$ perioade de clock.
74
MICROCONTROLLERE
Ini#ializarea unit!#ii centrale Un Reset duce unitatea central! ntr-o stare determinat! (la o adres! cunoscut!). Un Reset poate fi declan#at de o surs! intern! sau de o surs! extern! astfel: extern, prin pinul de RESET, activ pe 0; extern, Power On Reset (POR), la pornirea sursei de alimentare. Circuitul POR asigur! o ntrziere de 4064 tacte de la momentul n care oscilatorul devine activ #i dac! semnalul RESET extern este inactiv, procesorul ncepe s! lucreze; intern, de c!tre ceasul de gard!, Computer Operating Properly (COP). ncercarea de a executa o instruc"iune de la o adres! ilegal!. Dac! unitatea central! ncearc! s! execute o instruc"iune care nu este n EPROM sau RAM se genereaz! un RESET pentru a proteja MC de scrieri sau citiri din zone necontrolate.
3. Microcontrollere Motorola
75
k este n registrul index, iar adresa nceputului tabelului este al doilea octet al instruc"iunii. 7. adresare indexat! cu offset pe "6 bi#i - instruc"iunile au trei octe"i, fiind accesibile toate loca"iile. UC adun! f!r! semn registrul index la cei doi octe"i din instruc"iune #i se ob"ine adresa efectiv! a operandului (primul octet dup! codul instruc"iunii este octetul HIGH). 8. adresare relativ! este folosit! n instruc"iunile de salt. La un salt relativ, se adun! (cu semn) octetul care urmeaz! dup! codul instruc"iunii la con"inutul registrului Program Counter. Se pot face salturi relative n gama $27 de octe"i nainte sau napoi.
76
MICROCONTROLLERE
BIH, BIL - dac! linia de ntrerupere extern! este $ sau 0 BMI, BPL - dac! este negativ (sau pozitiv) BMC, BMS - dac! masca de ntrerupere este 0 sau $ BRA, JMP - salt necondi"ionat BSR, JSR - salt la subrutin! Manipulare la nivel de bit BCLR, BSET - nscrierea unui bit cu 0 (sau cu $) BRCLR, BRSET - salt dac! un bit este 0 (sau cu $) Opera#ii de control CLC, SEC - nscriere cu 0 (cu$) a bitului de Carry CLI, SEI nscriere cu 0 (cu $) a m!#tii pentru ntrerupere NOP - nu se execut! nici o opera"ie RTI, RTS - ntoarcere din ntrerupere (subrutin!) STOP, WAIT - se opre#te oscilatorul CPU #i se a#teapt! o ntrerupere extern! (se valideaz! ntreruperile) SWI - ntrerupere software TAX, TXA - transfer! acumulatorul n registrul index (sau invers)
Dac! o ntrerupere vine n timp ce UC execut! o instruc"iune, instruc"iunea n curs este terminat! #i apoi se consider! ntreruperea. ntreruperile pot fi invalidate global n registrul condi"iilor de program (CCR) #i individual pentru fiecare surs! n parte. Un Reset inhib! toate ntreruperile pentru ca procesul de ini"ializare s! nu poat! fi ntrerupt. La apari"ia unei ntreruperi, unitatea central! termin! instruc"iunea n curs, apoi salveaz! n stiv! registrele UC, invalideaz! ntreruperile pentru ca o nou! ntrerupere s! nu deranjeze servirea ntreruperii curente. Cererile de ntrerupere sunt memorate #i servite dup! servirea ntreruperii curente. n PC se transfer! vectorul de ntrerupere #i se execut! rutina de servire a ntreruperii. Rutina se termin! cu instruc"iunea RTI care restaureaz! registrele UC din stiv!. Vectorii de ntrerupere pentru fiecare dintre sursele enumerate mai sus sunt stoca"i n memorie la adresele:
3. Microcontrollere Motorola
77
timer nIRQ sau PA instruc"iunea SWI Reset (POR, RESET din exterior, COP sau adres! ilegal!)
Adresele vectorilor pentru fiecare tip de MC se g!sesc n harta memoriei furnizat! de produc!tor. Unele MC din familie au #i alte interfe"e care pot #i ele s! solicite ntreruperi, a#a cum poate cere circuitul timer. Pn! la servirea ntreruperii trece un anumit interval de timp (tacte), timp necesar pentru ca UC s! termine instruc"iunea curent! #i s! salveze n stiv! registrele. Acest timp este numit Interrupt Latency #i poate fi orict de lung dac! ntreruperile nu sunt validate. Cea mai lung! instruc"iune este MUL, care dureaz! $$ tacte, iar unitatea central! are nevoie de 9 tacte pentru a salva registrele n stiv!, deci cel mai lung timp de a#teptare pentru servirea unei ntreruperi este de 20 de tacte. Acest timp trebuie s! fie luat n calcul n momentul realiz!rii unei aplica"ii n timp real. Dac! survine o a doua ntrerupere, timpul de a#teptare pentru servirea ei poate fi prea lung. O solu"ie ar fi validarea ntreruperilor n timpul servirii primei ntreruperi. n acest caz trebuie avut grij! ca stiva s! fie destul de mare pentru a permite salvarea a dou! seturi de registre.
78
MICROCONTROLLERE
bit. Pentru a economisi timpul unit!"ii centrale, interfe"ele pot lucra cu unitatea central! prin intermediul ntreruperilor. b. Portul serial asincron SCI (Serial Communications Interface) SCI este un transmi"!tor receptor asincron universal (UART) cu posibilitatea lucrului full-duplex. Pentru un transfer bidirec"ional sunt suficien"i doi pini. Cu circuite de transla"ie de nivel RS232 se pot face transferuri la distan"e suficient de mari. Se poate programa una din 32 viteze de transmisie #i lungimea caracterului; se pot valida separat transmi"!torul #i receptorul; se pot genera ntreruperi n diferite situa"ii; se poate detecta eroare de cadrare la recep"ie. Formatul datelor este ca la orice transmisie asincron! (RS232 sau RS422). Linia este n stare MARK, iar transmisia unui caracter este semnalat! de trecerea liniei n stare SPACE pe durata bitului de START. Urmeaz! 8 sau 9 bi"i de date #i un bit de STOP. Datele care se doresc a fi transmise sunt scrise n registrul de date al SCI (SCDR), apoi se valideaz! transmisia prin pozi"ionarea bitului TE (Transmit Enable) n registrul de control al SCI (SCCR2). Dup! ce cuvntul a fost transmis, se pozi"ioneaz! bitul TDRE (Transmit Data Register Empty) n registrul de stare SCSR (SCI Status Register). Se indic! astfel c! poate fi transmis un nou cuvnt. Se pot transmite caractere speciale, cum ar fi BREAK, care "ine linia n stare SPACE (se transmite un #ir de 0) dac! se pozi"ioneaz! bitul SBK n SCCR2 sau un caracter care "ine linia n stare MARK. Golirea registrului de date semnalizat! de TDRE sau de TC (Transmission Complete) din SCDR poate genera o ntrerupere. Datele sunt recep"ionate n SCDR, la recep"ia complet! fiind pozi"ionat bitul RDRF (Receive Data Register Full) n SCSR. Pentru eliminarea recep"iilor false fiecare bit de start este e#antionat #i citit de $6 ori; orice nepotrivire a e#antioanelor duce la respingerea acestui bit. Dac! nu se recep"ioneaz! bitul de STOP se anun"! o eroare de cadrare prin pozi"ionarea bitului FE n SCR. ntreruperile la recep"ie pot fi generate dac! bitul RDRF din SCSR indic! recep"ia unui caracter, dac! este o eroare de vitez! de recep"ie (prin recep"ia unui caracter nainte ca cel precedent s! fi fost citit) sau dac! s-a recep"ionat un caracter special format numai din valori de $. Structura registrului de control SCCR$ este: Bit 7 este al 9-lea bit recep"ionat dac! s-a definit o transmisie pe 9 bi"i Bit 6 este al 9-lea bit de transmis dac! s-a definit o transmisie pe 9 bi"i Bit 4 comand! lungimea caracterului, 8 sau 9 bi"i Bit 3 este un bit de trezire care comand! ce fel de condi"ie treze#te SCI Structura registrului de control SCCR2 este: Bit 7 - TIE Transmit Interrupt Enable - valideaz! ntreruperile cerute de TDRE Bit 6 - TCIE Transmit Complete Interrupt Enable - valideaz! ntreruperile cerute de TC Bit 5 - RIE Receive Interrupt Enable - valideaz! ntreruperile cerute de RDRF
3. Microcontrollere Motorola
79
Bit 4 - ILIE Idle Interrupt Enable Bit -valideaz! ntreruperile cerute de caracterul #ir de $ Bit 3 - TE Transmit Enable - valideaz! transmisia Bit 2 - RE Receive Enable - valideaz! recep"ia Bit $ - RWU Receiver Wakeup Enable - pune receptorul n stare de a#teptare Bit 0 - SBK Send Break - trimite caracterul BREAK Structura registrului de stare SCSR este: Bit 7 - TDRE Transmit Data Register Empty - registru de transmisie gol Bit 6 - TC Transmission Complete - transmisie complet! Bit 5 - RDRF Receive Data Register Full - registru de recep"ie plin Bit 4 - IDLE - s-a recep"ionat un #ir de $ Bit 3 - OR Receiver overrun - eroare de vitez! de recep"ie Bit 2 - NF Receiver Noise - s-au detectat perturba"ii n datele citite (prin e#antionarea bitului de START) Bit $ - FE Framing Error - eroare de cadrare. Registrul ratei de transfer este descris n tabelul 3.2.
Tabelul 3.2 Con#inutul registrului ratei de transfer
Bit 5 0 0 $ $
Bit 4 0 $ 0 $
Ceas pentru transfer ceas intern ceas intern /3 ceas intern/4 ceas intern/$3
Bit 2 0 0 0 0 $ $ $ $
Bit $ 0 0 $ $ 0 0 $ $
Bit 0 0 $ 0 $ 0 $ 0 $
Rata de transfer ceas de transfer ceas de transfer/2 ceas de transfer/4 ceas de transfer/8 ceas de transfer/$6 ceas de transfer/32 ceas de transfer/64 ceas de transfer/$28
Rata de transfer se ob"ine printr-o dubl! divizare, nti se ob"ine un ceas de transfer prin divizarea ceasului intern, apoi se divizeaz! ceasul de transfer. Se pot astfel ob"ine diferite rate de transfer, de exemplu 4800 Baud (4808) la un ceas de 2MHz prin divizarea nti cu $3, apoi cu $. c. Portul serial SPI (Serial Peripheral Interface) Cu acest port se poate realiza o comunica"ie sincron! simpl!, folosit! de regul! pentru a transfera date ntre circuite pe acela#i montaj cu MC. Un transfer bidirec"ional necesit! 3 pini, unul dintre ei fiind alocat ceasului de transmisie generat de masterul SPI. Cu SPI se pot realiza transferuri #i ntre microcontroller-e. Transferurile pot fi full duplex. Registrele care controleaz! transferul SPI sunt registrul de control (SPICR - SPI Control Register) #i registrul de stare (SPISR - SPI Status Register). Un transfer SPI poate fi ini"iat doar de un master. Master-ul scrie un octet n registrul
80
MICROCONTROLLERE
de transmisie SPI (SPDR - SPI Data Register) de unde datele merg ntr-un registru de deplasare n care sunt serializate #i de unde sunt transmise sincron cu ceasul de transmisie. Transmisia se termin! dup! 8 tacte, cnd se pozi"ioneaz! bitul SPIF. nainte ca master-ul s! trimit! un nou octet trebuie s! se reseteze bitul SPIF prin citirea registrul de stare SPSR. n slave datele intr! n registrul de deplasare cu tactul de recep"ie, acela#i cu cel de transmisie. Cnd au intrat 8 bi"i, caracterul este transferat n registrul de date SPDR. Pentru a se evita erorile de vitez! (sau de suprascriere - Overrun) trebuie ca octetul din SPDR s! fie citit nainte ca un alt octet s! fie transmis din registrul de deplasare. Pozi"ionnd bitul MSTR din registrul SPCR n $, MC lucreaz! n mod master. n acest mod pinii au urm!toarea semnifica"ie: SCK (Serial Clock) este ie#ire de tact pentru sincronizare; MOSI (Master Output Slave Input) este ie#irea serial!; MISO (Master Input Slave Output) este intrarea serial!; nSS (Slave Select) protejeaz! MC dac! dou! circuite sunt master. Acest semnal activ dezactiveaz! la cel!lalt port SPI modul master, #terge bitul MSTR #i pozi"ioneaz! bitul de eroare (MODF Mode Fault Flag). SCK (Serial Clock) este intrarea de tact pentru sincronizare de la master; MOSI (Master Output Slave Input) este intrarea serial!; MISO (Master Input Slave Output) este ie#irea serial!; nSS (Slave Select) valideaz! SPI pentru modul slave.
n figura 3.3 este ar!tat! o conexiune SPI n care sunt legate un circuit master #i mai multe circuite slave.
SPI MISO MOSI SCK /SS
+$
Port I/O
0 $ 2
MC master
3. Microcontrollere Motorola
8"
Circuitele slave sunt validate pe rnd cu semnale dintr-un port de ie#ire auxiliar. Pentru a putea adapta transmisiei seriale ct mai multe echipamente seriale, se poate programa faza #i polaritatea ceasului de sincronizare cu bi"ii CPOL #i CPHA din SPCR. n SPI pot s! apar! urm!toarele erori: mai multe MC master conectate (Mode Fault Error) scrierea n SPDR n timpul unei transmisii (coliziune), are ca urmare nscrierea bitului WCOL n SPSR; omiterea citirii SPDR nainte ca urm!torul octet s! soseasc! (suprascriere). registrul de date este gol sau plin (la transmisie respectiv la recep"ie) se semnaleaz! cu SPIF care poate genera o ntrerupere dac! ntreruperea este validat! cu SPIE; la apari"ia unei erori Mode Fault semnalat! cu MODF, dac! ntreruperea este validat! cu SPIE. d. Timer Circuitele de timp care echipeaz! MC Motorola sunt foarte variate. De la cel mai simplu (MC68HC05J) care poate genera 2 ntreruperi periodice: una cu frecven"a fix! #i una cu frecven"a variabil!, #i pn! la cel mai complex (MC68332) care con"ine un temporizator cu propria lui unitate aritmetic! #i logic! proiectat special pentru controlul motoarelor cu ardere intern!. Un timer tipic (de la MC68HC705J$A), nu cel mai simplu dar nici cel mai complex, are schema bloc dat! n figura 3.4. Ceasul de intrare n timer este ceasul de magistral! (frecven"a cristalului/2) care, dup! o divizare cu 4, constituie tact pentru un num!r!tor de 8 bi"i. Valoarea acestui registru num!r!tor poate fi citit! de UC n oricare moment la loca"ia 09h (TCR Timer Counter Register). UC nu poate s! modifice valoarea acestui registru. Cnd num!r!torul trece de la FFh la 00h este pozi"ionat bitul TOF (Timer Overflow Flag) n registrul de stare al timer-ului (TCSR Timer Control and Status Register). Starea acestui bit poate fi citit! de UC n oricare moment. Dac! bitul TOIE (Timer Overflow Interrupt Enable) din registrul de stare TCSR este $, n momentul trecerii de la FFh la 00h se genereaz! o ntrerupere, numit! ntrerupere de dep!#ire (Overflow Interrupt). Ie#irea num!r!torului de 8 bi"i constituie tact pentru un alt num!r!tor de 7 bi"i. Ie#irea de la oricare dintre cei mai semnificativi 4 bi"i ai acestui ultim num!r!tor (selectat! de unul din cei doi bi"i RT$ #i RT0 din registrul de control TCSR) poate fi folosit! pentru generarea unei ntreruperi, numit! de timp real (Real Time Interrupt) care nscrie bitul RTIF (Real Time Interrupt Flag) din TCSR. Se genereaz! o ntrerupere dac! bitul RTIE (Real Time Interrupt Enable) este $.
MICROCONTROLLERE
MSB
TCR (Timer Counter Register) la adresa 0009h Xtal/2 TCSR registru de control #i stare a timerului TOF RTIF TOIE RTIE TOFR RTIFR RT$ RT0
Num!r!tor de 7 bi"i
Selec"ie ie#ire
Ultimul nivel al timer-ului este un num!r!tor de 3 bi"i folosit pentru cesul de gard! (COP Computer Operating Properly). Dac! este validat! verificarea COP, trebuie ca programatorul s! reseteze COP nainte de expirarea perioadei programate pentru comanda unui RESET al UC. Perioada de timp n care COP trebuie resetat depinde de RT$ #i RT0. n tabelul 3.3 sunt date perioadele de ntrerupere #i perioadele n care COP trebuie resetat. Perioadele corespund unui tact de 2MHz:
Tabelul 3.3 Perioade de ntrerupere $i perioade de reset programabile cu un tact de 2 MHz.
RT$ 0 0 $ $
RT0 0 $ 0 $
Un reset al COP se poate realiza prin scrierea bitului 0 de la adresa 07F0h (COPR COP Register). MC din seria 68705 sunt echipate cu un timer care are posibilitatea de captur! #i comparare. Captura poate nregistra momentul la care apare un eveniment extern (o tranzi"ie pe pinul TCAP). n acest moment memoreaz! con"inutul registrelor timer-ului n registrele de captur!. Memorarea registrelor timer-ului la tranzi"ii de aceea#i polaritate a TCAP poate determina perioada unui
3. Microcontrollere Motorola
83
semnal, iar la tranzi"ii de polaritate opus! poate determina l!"imea unui impuls. Polaritatea de declan#are este programabil!. Prin comparare se poate genera un semnal de ie#ire cnd num!r!torul timerului atinge o valoare selectat!. La fiecare 4 tacte se compar! valoarea num!r!torului cu cea scris! n registrul de comparare. Dac! este egalitate se genereaz! un semnal TCMP. e. Portul PWM Modula"ia impulsurilor n l!"ime (Pulse Width Modulation) are multe aplica"ii, mai ales n comanda motoarelor de curent continuu sau a surselor de alimentare. Din acest motiv unele MC includ n structura lor un modulator PWM ca interfa"!. Circuitul MC68HC05D9 con"ine 5 canale PWM de cte 6 bi"i care sunt realizate cu ajutorul unui num!r!tor de 6 bi"i, un registru de control PWM #i 5 registre de date care formeaz! 5 linii PWM ce sunt disponibile la pinii portului D (figura 3.5).
PWM4 (000Dh) R E G I S T R U D E M O D P W M 0008h Figura 3.5 Structura modulului PWM la familia 6805
PWM 4
PWM 3
PWM2 (000Bh)
PWM 2
PWM$ (000Ah)
PWM $
PWM0 (0009h)
PWM 0
n registrul de mod sunt 5 bi"i care valideaz! modulul PWM astfel nct semnalele PWM s! fie livrate pe la pinii portului D. Tot n registrul de mod mai este un bit, SCIB, care selecteaz! dac! la adresa 000Dh s! fie date pentru PWM sau rata de divizare pentru SCI. Dac! nu sunt folosite ca ie#iri PWM, liniile portului D pot fi folosite ca intr!ri/ie#iri obi#nuite. Registrul de mod PWM se afl! la adresa 0008h.
84
MICROCONTROLLERE
Dac! se ncarc! registrul de date cu 00h semnalul la ie#ire va fi tot timpul zero. nscrierea valorii 20h n registrul de date are ca rezultat un semnal cu factor de umplere 50% la ie#irea corespunz!toare, iar nc!rcarea valorii 3Fh va determina un semnal cu factor de umplere de 63/64. f. Portul USB (MC68HC05JB4) MC68HC05JB4 con"ine un convertor A/D #i o interfa"! USB, ceea ce l face ideal pentru achizi"ia de date #i transferul lor c!tre un calculator PC-AT. Datorit! structurii USB, este posibil! realizarea unui punct central de prelucrare echipat cu PC #i multe puncte de achizi"ie echipate cu acest MC. Modulul USB implementeaz! standardul USB $.0, de mic! vitez!, la $,5Mbps, cu 3 puncte de cap!t (End Point). MC con"ine #i transceiverul USB. Schema bloc a modului USB este dat! n figura 3.6.
MC Logica de control USB Transceiver Cablu USB
D+ D-
Registre USB
Stabilizator 3,3V
BUS INTERN
Transceiverul are o ie#ire diferen"ial! care poate lucra cu 3 st!ri pentru a permite transferul de date bidirec"ional de tip full-duplex. Receptorul trebuie s! fie de asemenea cu intr!ri diferen"iale. Comanda interfe"ei USB se realizeaz! prin intermediul a 3 registre de comand! iar starea poate fi citit! dintr-un registru de stare. Exist! un registru de adres! #i 24 de registre de date. Modul de func"ionare n ntreruperi este programat prin registrul de ntreruperi. Interfa"a USB poate lucra n modul de economie de energie dac! nu exist! trafic pe linii un anumit interval de timp. Apari"ia unei date la recep"ie sau emisia unei date de c!tre UC produce ie#irea din starea inactiv!.
3. Microcontrollere Motorola
85
g. Interfa#a LCD MC6805 DragonKat este denumirea unui MC din familia 6805 care con"ine o interfa"! pentru un afi#or cu cristale lichide. Interfa"a pentru LCD con"ine: logica de control pentru sincronizare; RAM-ul de display care stocheaz! datele pentru display printr-o coresponden"! $ la $ a bi"ilor (fiecare bit din memorie are corespondent un punct pe LCD). Memoria este organizat! n cuvinte de 5 bi"i #i poate fi scris! sau citit!; registru de date este folosit pentru a stoca datele din memoria RAM a LCD; generator de tensiune care con"ine un divizor de tensiune pentru alimentarea segmentelor #i a planului din spate; driver pentru planul din spate; driver pentru segmente.
Structura unui afi#aj LCD este ar!tat! n figura 3.7. Segmente (SEG 0-39)
Planul din spate (BP 0-$5)
Un punct este aprins cnd o linie Bpi #i una SEGi sunt active. Pentru caracterul A, memoria RAM de display are con"inutul din tabelul 3.4.
Tabelul 3.4 Con#inutul memoriei pentru afi$area caracterului A
Bit0 0 0 $ $ $ $ $ 0
Bit$ 0 $ 0 0 $ 0 0 0
Bit2 $ 0 0 0 $ 0 0 0
Bit3 0 $ 0 0 $ 0 0 0
Bit4 0 0 $ $ $ $ $ 0
86
MICROCONTROLLERE
Punctul de sus a lui A de exemplu, se scrie cu BP0 #i SEG2 active. Semnalele SEG #i BP sunt periodice #i baleiaz! tot timpul afi#ajul pentru a men"ine punctele aprinse. Frecven"a semnalelor de aprindere a punctelor este de 32kHz, iar frecven"a unui cadru este de 62,5Hz. Dimensiunea panourilor LCD difer!, de aceea difer! #i consumul de curent. Tensiunea spre afi#aj este ob"inut! prin nserierea unor rezisten"e, nseriere care poate fi comandat! soft. Schema bloc a interfe"ei pentru LCD este dat! n figura 3.8
Magistrala intern! de adrese si date
Registru de control
Driver de segmente
3. Microcontrollere Motorola
87
ntreruperile sunt validate automat. Toate registrele #i memoria r!mn cu datele avute la intrarea n starea WAIT.
3.".8 Autoverificarea
MC are 2 moduri de operare: normal #i auto-verificare. Modul de operare este selectat de nivelul logic pe pinul IRQ n momentul unui RESET. n modul normal de operare ncepe rularea unui program din EPROM, deci EPROM-ul trebuie sa fie programat dac! a fost ales modul normal de operare. n modul autotest MC ruleaz! un program con"inut n ROM n zona de memorie 3F00h3FDEh. Autotestul comunic! rezultatele la pinii PC3-PC0, unde se pot conecta LED-uri.
PA
PA0PA7
D0-D7
PB
PB0PB7
A8-A$2
PC
PC0PC4
TxD
RxD
88
MICROCONTROLLERE
Adresele se stabilesc la portul A, iar cele mai semnificative linii (A8-A$2) se stabilesc la portul C (PC0-PC4). Liniile cu datele de nscris se stabilesc la portul B. Registrul folosit pentru programarea EPROM-ului este registrul de programare (PROG). Bit 2- LAT (Latch Enable Bit), pozi"ionat n $, comand! ca liniile de adrese #i date s! fie bufferate pentru ca n urm!torul ciclu s! se fac! o scriere a EPROM-ului; Bit 0 (PGM) valideaz! tensiunea Vpp pentru programarea EPROM-ului.
Se pune problema cum se poate ca un MC care nu a fost programat s! lucreze sub comanda unui program ca s! poat! avea acces la programarea unui registru. Pentru programare MC trebuie s! lucreze n modul bootstrap, mod n care MC intr! prin for"area liniei IRQ n timpul unui RESET. Programe simple utilizator pot fi introduse n RAM prin interfa"a SCI (Serial Communications Interface) #i rulate. Programul se transmite prin interfa"a serial!, dup! care se ruleaz! programul din RAM. Parametrii comunica"iei implici"i la Reset sunt 8 bi"i de date #i un bit de STOP, la viteza de 4800bps. Primul octet trimis reprezint! num!rul total de octe"i care vor fi trimi#i. Con"inutul EPROM-ului poate fi verificat prin citirea lui tot prin SCI. Con"inutul EPROM-ului se poate ascunde, a#a nct s! nu mai poat! fi citit din exterior, prin pozi"ionarea unui bit de securizare n registrul de op"iuni (adresa $FDFh).
3.2
MC M68HC08
Familia 6808 urmeaz! n timp familiei 6805, binen"eles cu mbun!t!"iri care vor fi amintite n acest subcapitol. MC din familia 6808 sunt compatibile cu cele din familia descris! n subcapitolul anterior (3.$). Ca mbun!t!"iri ale UC 6805 pot fi men"ionate: indicatorul de stiv! este un registru de $6 bi"i ($3 la 6805); registrul de index este de $6 bi"i, exist! posibilitatea manipul!rii separat a octetului superior #i a celui inferior (8 bi"i la 6805); frecven"a intern! CPU standard este de 8MHz (2MHz la 6805); se pot adresa 64K octe"i memorie de date sau program (2K-$6K la 6805), are $6 moduri de adresare (8 la 6805) #i 78 de noi coduri de instruc"iuni; se pot face mut!ri de date ntre loca"ii de memorie f!r! intermediul acumulatorului; UC poate executa mp!r"iri de operanzi de 2 octe"i la operanzi de $ octet; operarea secven"ial! a UC poate fi oprit! de dou! tipuri de evenimente: reset sau ntreruperi. Sursele de Reset suplimentare fa"! de 6805 sunt:
3. Microcontrollere Motorola
89
-detectarea unui cod de instruc"iune inexistent!; -tensiune de alimentare sub o limit! acceptat! (LVI, Low Voltage Inhibit). sistemul de ntreruperi admite un num!r maxim de $28 de surse de ntrerupere: reset, SWI #i IRQ0-IRQ$25. Unele dintre aceste cereri de ntrerupere sunt accesibile la pin. ntreruperea software are cea mai mare prioritate. n mod WAIT ceasul UC este oprit, dar celelalte module au ceas, astfel nct orice ntrerupere treze#te UC. n mod STOP toate ceasurile sunt oprite #i doar o ntrerupere extern! poate trezi UC.
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 execu"ia lui din RAM. Pentru MC echipate cu EEPROM n mod monitor se poate programa EEPROM-ul. Leg!tura serial! ntre calculator #i MC este RS232 prin intermediul pinilor unui port I/O. n mod monitor MC poate s! execute programe din RAM cu ajutorul unor comenzi simple monitor, toate func"iile MC fiind valide. n modul monitor COP este invalidat. Transferul de date este bidirec"ional. Fiecare comand! spre MC este urmat! de un r!spuns ecou al MC. Comenzile monitorului sunt: READ - cite#te o loca"ie de memorie (se trimite cod+2 octe"i de adres! #i se returneaz! con"inutul loca"iei), WRITE - scrie o loca"ie de memorie (se trimite cod+2 octe"i de adres!+octetul de scris) IREAD - citire indexat!, cite#te urm!torii 2 octe"i din memorie fa"! de ultima adres! accesat! IWRITE - scriere indexat!, scrie urm!torii 2 octe"i din memorie fa"! de ultima adres! accesat! READSP - cite#te indicatorul de stiv! RUN - ruleaza program
Viteza de transfer implicit! ntre MC #i calculator este de 4800bps cu pinul PTC3 "inut la $ n timpul resetului #i 9600bps cu pinul PTC3 "inut la 0 n timpul resetului.
3. Microcontrollere Motorola
9"
portul G este un port de 3 bi"i, liniile pot fi folosite ca interfa"! pentru tastatur!; portul H este un port de 2 bi"i, liniile pot fi folosite ca interfa"! pentru tastatur!.
b. Convertorul analog digital (ADC) Convertorul A/D este un convertor pe 8 bi"i cu aproxim!ri succesive care poate face conversii continuu sau la primirea unei comenzi. Sfr#itul conversiei poate fi semnalizat cu un bit indicator (flag) sau poate cere o ntrerupere. Ceasul de conversie poate fi selectat. Un MC are 8 canale de conversie cu intr!ri multiplexate analogic. Intr!rile pentru ADC se fac pe pinii portului de uz general PTB7-PTB0. Selec"ia canalului se face pentru a stabili care pin este intrare analogic!. Ceilal"i pini pot fi folosi"i ca intr!ri/ie#iri de uz general. Dac! valoarea citit! este VREFH, atunci valoarea digital! va fi FFh, iar dac! este VREFL atunci valoarea digital! va fi 00h. Aceste tensiuni, mpreun! cu tensiunea de alimentare pentru blocul analogic al MC sunt furnizate din exterior. Schema bloc a convertorului este dat! n figura 3.$$.
ADC
Cerere de ntrerupere Ceas de conversie
Intr!ri analogice
Registrele ADC sunt: registru de control $i stare al ADC (ADSCR), care con"ine: Bit 7 COCO/IDMAS, conversie complet! sau selec"ie ntrerupere DMA. Dac! ntreruperile sunt invalidate (AIEN=0), COCO este pozi"ionat de fiecare dat! cnd se termin! o conversie. n modul de conversie continu! datele se suprascriu n registrul de date dup! fiecare conversie #i COCO este pozi"ionat doar dup! prima conversie. Dac! ntreruperile sunt validate (AIEN=$), IDMAS selecteaz! dac! ntreruperea solicit! #i un transfer DMA. Bit 6 AIEN (ADC Interrupt Enable) valideaz! ntreruperile la sfr#itul unei conversii.
92
MICROCONTROLLERE
Bit 5 ADCO (ADC Continous Conversion), dac! este setat se face conversie continu!. Bit4-0 ADCH4-0 selecteaz! unul din cele 8 canale de conversie registru de date (ADR) registru de ceas (ADCLK) care con"ine: Bit 7-5 ADIV2-0 formeaz! rata de divizare a ceasului de conversie de la ADICLK (000) la ADICLK/$6 ($00). Bit 4 ADICLK selecteaz! ca ceas de conversie ceasul intern sau un ceas generat de timer. O conversie ncepe dup! scrierea registrului ADSCR. Rezultatul conversiei este stocat n registrul de date (ADR) #i la terminarea conversiei se pozi"ioneaz! bitul COCO. Dac! se opteaz! pentru conversie continu!, dup! prima conversie urmeaz! alta, care rescrie registrul de date. Dac! sunt validate ntreruperile, sfr#itul conversiei poate cere ntrerupere c!tre UC sau poate face #i o cerere DMA. c. Interfa#a extern! msCAN08 (Motorola Scalable CAN) Protocolul CAN a fost definit de BOSCH n $99$ pentru utilizarea pe o magistral! la autoturisme, unde s! ndeplineasc! condi"ii specifice: procesare n timp real, fiabilitate ntr-un mediu perturbat #i pre" mic. Caracteristici ale magistralei msCAN08 sunt: transmisie serial! sincron! cu blocuri ntre 0-8 octe"i; viteza de transfer pn! la $MBps; transferul serial se face pe 2 linii, o intrare (RxCAN) #i o ie#ire TxCAN).
Cuplarea la magistral! nu se face direct, ci prin transceiver-e care pot suporta un curent important #i care pot detecta dac! un MC are o linie defect! care ar for"a magistrala la conectare direct! (figura 3. $2).
MC $ MC 2
msCAN08
Transceiver
Magistrala
3. Microcontrollere Motorola
93
O implementare modern! trebuie s! respecte dou! condi"ii: orice dispozitiv CAN poate s! transmit! un #ir de mesaje f!r! s! elibereze magistrala ntre mesaje. Arbitrarea magistralei se va face doar dup! ce s-a terminat transmiterea mesajului. mesajele sunt astfel organizate nct cel mai prioritar mesaj va fi trimis naintea celor care stau de mai mult timp n coada de a#teptare.
Aceste cerin"e pot fi ndeplinite cu o schem! de transmisie cu buffere duble. Chiar #i a#a, unitatea central! nu are ntotdeauna timp s! aranjeze datele n buffer, a#a nct la 6808 s-a realizat o arhitectur! cu 3 buffere. Mesajul recep"ionat este stocat ntr-o stiv! FIFO cu 2 nivele. Exist! 2 buffere de recep"ie de $3 octe"i aranjate ntr-o singur! arie de memorie, astfel nct registrul de date recep"ionate are o singur! adres!. Registrul RxBG (Background Receive Buffer) prime#te datele seriale #i le transfer! n RxFG (Foreground Receive Buffer) care poate fi adresat de unitatea central!. Dac! mesajul recep"ionat este corect (are un identificator valid) se pozi"ioneaz! bitul RxF (Receiver Full Flag) #i se genereaz! o cerere de ntrerupere. n acest timp n registrul RxBG se recep"ioneaz! un nou cadru. Schema bloc pentru recep"ie #i transmisie este dat! n figura 3.$3.
RxBG RxFG RxCAN Filtru
RxF
TxE 0
Tx$ TxCAN
PRIO
Tx2
PRIO
Pentru a mic#ora num!rul de ntreruperi solicitate UC de c!tre receptor s-a introdus un filtru de acceptare. Datele msCAN au o anumit! structur!, primii bi"i
94
MICROCONTROLLERE
fiind de identificare a cadrului #i de adres! a destina"iei. Este posibil ca interfa"a CAN s! verifice ace#ti primi bi"i #i s! fac! transferul din RxBG n RxFG numai dac! mesajul este destinat acestui MC. Cnd ambele registre de recep"ie sunt pline #i se recep"ioneaz! date se genereaz! o eroare de suprascriere. Se abandoneaz! recep"ia noilor caractere, se semnalizeaz! eroarea, dar transmi"!torul r!mne func"ional. Transmiterea mesajelor se face cu o structur! de 3 buffere, fiecare de $3 octe"i. Un registru suplimentar TBPR (Transmit Buffer Priority Register) stabile#te prioritatea mesajelor. Fiecare buffer de transmisie semnaleaz! UC faptul c! este gol prin pozi"ionarea unui bit TXE (Transmit Buffer Empty) n registrul de stare CTFLG (CAN Transmitter Flag Register). Bitul TXE poate cere o ntrerupere pentru ca UC s! poat! renc!rca bufferul de transmisie care s-a golit. Dac! mai mult de un registru este plin #i gata de transmisie, se face apel la registrul de priorit!"i pentru arbitrare. Fiecare buffer de transmisie are o zon! de 8 bi"i (PRIO) n care programul utilizator scrie prioritatea mesajului cnd se transmite mesajul de la UC (cea mai mic! valoare reprezentnd cea mai mare prioritate). Dac! se transmite un mesaj cu prioritate mai mare #i se dore#te abandonarea mesajului curent, se solicit! aceasta cu bitul ABTRQ (Abort Request Flag) n registrul de control al transmisiei CTCR (Transmission Control Register). Dac! solicitarea de abandonare este posibil!, interfa"a CAN va pozi"iona bitul ABTAK (Abort Request Acknowledge) #i TXE pentru a se putea transmite mesajul prioritar. d. Interfa#a cu tastatura Interfa"a cu tastatura const! n 5 linii independente de intrare n MC care pot solicita ntreruperi mascabile. Func"ionarea acestei interfe"e este asistat! de urm!toarele registre: registrul de stare $i control al tastaturii (KBSCR) con"ine: Bit 3 - indicatorul existen"ei unei ntreruperi, KEYF. Bitul este $ dac! se afl! n curs de servire o ntrerupere de la tastatur!; Bit 2 - confirmare, ACKK. Dac! acest bit este pozi"ionat se #terge bufferul ntreruperilor de la tastatur!; Bit $ - validarea ntreruperilor de la tastatur!, IMASKK. Dac! acest bit are valoarea 0 sunt validate ntreruperile; Bit 0 - modul de ntrerupere, MODEK. Dac! bitul este $ se poate cere o ntrerupere cu un front c!z!tor sau cu un nivel 0; dac! bitul este 0 se poate cere o ntrerupere doar cu front c!z!tor. registrul de validare a ntreruperilor de la tastatur! care cu bi"ii Bit 4 - Bit 0 valideaz! pinul portului I/O ca cerere de ntrerupere de la tastatur! sau ca port standard.
3. Microcontrollere Motorola
95
EEBPx 0 0 0 0 $
EERAS$ 0 0 $ $ X
EERAS0 0 $ 0 $ X
Opera"ia Programare de octet %tergere de octet %tergere bloc %tergere global! Nu se executa programare/stergere
Bit 2 - EELAT; dac! este setat, comand! memorarea datelor #i adreselelor pentru scriere iar dac! este 0, se face citire din EEPROM. Bit 0 EEPGM; dac! este setat, valideaz! scrierea sau #tergerea. Pozi"ionarea lui EEPGM trebuie s! fie precedat! n alt pas de pozi"ionarea lui EELAT. registrul EEPROM nevolatil (EENVR): Bit 7 EERA, arie redundant!; configureaz! memoria n dou! jum!t!"i redundante. Bit 4 - CON0; stabile#te dac! se valideaz! securitatea memoriei (cu 0) sau nu. Bit 3-0 EEBP3-0, bi"i de protec"ie; dac! ace#ti bi"i sunt $, blocul de memorie este protejat la scriere. registrul de configura#ie a ariei, EEACR se poate citi ceea ce a fost nscris n registrul EENVR. Din ra"iuni de siguran"! a informa"iei, datele de configurare a
96
MICROCONTROLLERE
EEPROM se scriu ntr-un registru nevolatil, EENVR. La un RESET, datele din EENVR se scriu ntr-un registru volatil corespondent (EEACR). n modul de economie de energie STOP nu se poate face nscrierea sau #tergerea memoriei EEPROM. Pentru nscrierea EEPROM se parcurg urm!torii pa#i: se reseteaz! EERAS$ #i EERAS0 (#i se seteaz! EELAT n EECR) se scrie octetul n EEPROM se seteaz! EEPGM se a#teapt! un timp pentru ca programarea s! poat! fi executat! se reseteaz! EEPGM se a#teapt! un timp pentru ca tensiunea de programare s! scad! se reseteaz! EELAT
O #tergere pe bloc sau global! se face cu bi"ii EERAS ca n tabelul 3.5, orice adres! din bloc fiind posibil!. mp!r"irea n blocuri este EEBP0 (0800h087Fh), EEBP$ (0880h-08FFh), EEBP2 (0900h-097Fh), EEBP3 (0980h-09FFh). n modul redundant EEBP2 #i 3 nu au nici o semnifica"ie.
3.3
Unitatea central! 68$6 este o unitate central! cu magistrala de date de $6 bi"i #i o magistral! de adrese pe 20 de bi"i care permite adresarea a $Moctet de memorie. UC con"ine 2 registre acumulator de $6 bi"i #i 3 registre index de $6 bi"i pe lng! registrele clasice. Unitatea central! poate executa instruc"iuni pe 8 bi"i, pe $6 bi"i sau pe 32 de bi"i. Toate instruc"iunile de la UC 68$$ pot fi executate de 68$6, dar cu alt num!r de tacte, deci cu alt! vitez!. Unitatea central! func"ioneaz! la maximum $6MHz. Tehnologia de fabrica"ie permite func"ionarea #i la viteze mai mici, chiar n regim static (ca #i celelalte UC). Unitatea central! con"ine facilit!"i DSP (Digital Signal Processing), fiind posibile nmul"iri cu numere frac"ionare. UC permite $0 tipuri de adresare, din care 6 sunt preluate de la 68$$. Pentru p!strarea compatibilit!"ii, registrul PC #i indicatorul de stiv! sunt de $6 bi"i, dar apare un registru nou, numit K, ce re"ine extensiile de la $6 bi"i la 20 de bi"i pentru registrul PC #i SP. n structura UC mai apar #i registrele pentru nmul"iri, 2 registre de $6 bi"i (H #i I) #i unul de 36 de bi"i pentru rezultat (MAC). Pentru comunica"ia ntre MC sau pentru adresarea memoriei externe s-a standardizat un bus extern, numit IMB (Intermodule Bus), cu $6 linii de date #i 24 linii de adres!, la care s-a aliniat #i 68$6. Acest bus este de tip asincron, permi"nd transfer pe 8 sau $6 bi"i n urma unui protocol (handshake).
3. Microcontrollere Motorola
97
3.3.2 Interfe#e
Interfe"ele seriale sunt grupate sub forma unui modul serial cu coad! de a#teptare (QSM Queued Serial Module) care con"ine o interfa"! serial! SPI #i una SCI. Coada de a#teptare este format! n RAM #i are dimensiunea de $6 cuvinte de 8-$6 bi"i fiecare. Transmisia acestui #ir de date poate fi executat! automat, f!r! interven"ia unit!"ii centrale. Modulul QSM este cuplat pe bus-ul IMB. Convertorul analog numeric (ADC) este un convertor cu aproxima"ii succesive cu rezolu"ia programabil! de 8-$0 bi"i, cu 8 canale multiplexate. Convertorul este conectat pe bus-ul IMB. Pentru date importante (cum ar fi cele din stiv!) exist! o memorie RAM static de $K octet care la c!derea tensiunii de alimentare este alimentat! de la un pin special, unde se poate conecta o baterie. Timer-ul are $$ canale, din care 2 sunt folosite pentru generarea semnalelor PWM. Circuitul este capsulat n capsule de $32 sau $44 pini. Schema bloc a circuitului este dat! n figura 3.$4.
MICROCONTROLLERE Port C
Port E
Timer
Port ADC
PWM
Port QS
Port GP
3.4
MC PE 32 DE BI%I - 68300
MC 68300 este asem!n!tor arhitectural cu MC pe $6 bi"i. n jurul UC sunt grupate pe magistrala IMB un modul de integrare, un convertor analog digital cu 8 canale, un modul de comunica"ie serial! cu coad! de a#teptare (QSM), 5$2 octe"i RAM static, 3,5K octe"i RAM care pot fi folosi"i #i de timer (TPURAM), un modul de timp (TPU, Time Processor Unit), pn! la 6 porturi I/O de uz general #i 2 module flash EEPROM. Ceasul intern al sistemului este de maximum $6MHz. Unitatea central! CPU32 este compatibil! soft cu procesoarele din familia 68000. Ea con"ine $6 registre generale de 32 de bi"i cu care se poate lucra pe 8, $6 sau 32 de bi"i, un PC de 32 de bi"i, un SP de 32 de bi"i, un registru de stare #i alte registre.
3. Microcontrollere Motorola
99
Timer-ul este o unitate microprogramat! care poate lucra separat de UC, #i care con"ine propriul RAM. Timer-ul este format din $6 canale independente. Fiecare poate executa o func"ie de timp #i poate fi programat independent. Memoria flash EEPROM serve#te la stocarea nevolatil! a informa"iilor cum ar fi rutine ale sistemului de operare sau date care sunt apelate frecvent. Memoria EEPROM este foarte rapid!, ea poate r!spunde n 4 tacte. MC este echipat cu 2 module de flash EEPROM, unul de $6K octe"i #i unul de 48K octe"i. Memoria EEPROM poate fi configurat! pentru a lucra n modul bootstrap. Memoria EEPROM poate fi #tears! doar neselectiv (n ntregime) #i are nevoie de o alimentare special!.
3.5
Tabelul 3.6 arat! principalele performan"e, comparativ, pentru MC din familia Motorola:
Tabelul 3.6 Tabel comparativ pentru MC Motorola - CISC
Magistrala date 8 8 $6 32
de Frecven" a (MHz) 2 8 $6 $6
4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua genera!ie de MC "i este cel mai folosit "i cel mai bine vndut MC din lume. n 1976 Intel a prezentat familia de microcontroller-e MCS48 care este compus# din 8048, 8748 "i 8035. A ap#rut astfel pentru prima dat# pe pia!# un microcalculator complet pe un singur chip. MC includea o unitate central# pe 8 bi!i, memorie ROM sau EPROM de 1024x8bi!i, RAM 64x8 bi!i, porturi I/O "i timere. n etapa a doua, INTEL a lansat familia MCS-51 format# din MC 8051, 8751 "i 8031. INTEL recomand# ca punerea la punct a aplica!iei s# fie realizat# pe MC 8751 care este prev#zut cu memorie EPROM (4K octe!i). Memoria poate fi programat# cu orice programator, dar se recomand# utilizarea programatorului de la INTEL (UPP, Universal PROM Programmer). Pentru produse n serie mare se recomand# 8051, care are memorie ROM, programat# de furnizor la comanda beneficiarului "i care revine la un pre! de cost mult mai mic. MC 8031 nu con!ine ROM, dar se poate ata"a n exterior ROM, PROM sau EPROM, direct sau multiplexat. 8051 este un MC foarte puternic "i u"or de programat. Ca dovad#, n tabelul 4.1 se prezint# cteva modele oferite de diferi!i furnizori, echivalente cu 8051:
Tabel 4.1 Modele echivalente 8051 oferite de diferi!i produc"tori
Produc#tor To!i To!i Intel Intel Siemens Philips Philips Dallas Atmel Atmel
RAM Mem. program 128 64K 128 4K 256 64Kx 256 8K 256 64Kx 256 64Kx 256 6K 256 64Kx 256 10K 256 20KF
Observa!ii
Procesor de baz#, UART, Tmr0+1 Procesor de baz#, UART, Tmr0+1
8051+PCA, 8bA/D 8051+PCA, 8bA/D 8052+XRAM+WDog 10bA/D, i2c, CC,PWM LV 8052+A/DC+i2c+WDog Fast, 2UART FLASH 8k, WDog FLASH,fast, LV
4. Familia MCS-51
101
PCA- arie programabil! de num!r!toare (programmable counter array) LV- tensiune redus! 3,3V (low voltage) PWM- modularea impulsurilor n l!"ime (pulse width modulation) CC- intrare #i comparare (capture/compare) i2c- Interfa"a I2C (Philips) Tmr- timer Un tabel cu mai multe exemple este disponibil pe discul care nso!e"te cartea.
4.1
STRUCTURA #I FUNC$IONAREA
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 bi!i care con!ine urm#toarele registre:
102
MICROCONTROLLER-e
acumulator A - 8 bi!i; registrul de stare PSW (Program Status Word) - 8 bi!i; registrul B (8 bi!i) folosit n opera!iile de nmul!ire "i mp#r!ire; indicatorul de stiv# (Stack Pointer) - 8 bi!i; un registru num#r#tor de date (DPTR Data Pointer) - 16 bi!i - care poate fi manipulat "i ca 2 registre de cte 8 bi!i (DPH "i DPL) "i serve"te ca baz# n salturi indirecte sau n transferuri externe; num#r#torul de program (PC Program Counter) - 16 bi!i.
Memoria pentru program (ROM) este separat# "i distinct# de memoria pentru date, are alte mecanisme de adresare "i alte semnale de comand#. MC poate lucra att cu memoria pe chip ct "i cu memorie extern#; exist# astfel posibilitatea de a m#ri capacitatea memoriei de lucru. Memoria extern# este adresat# automat dac# adresa din instruc!iune este n afara zonei de memorie intern#. Familia 8051 are 32 de linii I/O, configurate ca 4 porturi de 8 bi!i. Fiecare linie poate fi programat# individual ca linie de intrare, de ie"ire sau bidirec!ional#. Unele linii au semnifica!ii alternative. Portul 0 este folosit "i ca magistral# multiplexat# de adrese "i date, iar pentru transferuri care au nevoie de adrese de 16 bi!i, se folose"te portul P2 pentru octetul cel mai semnificativ de adres#. Liniile portului 3 sunt folosite ca cereri de ntrerupere (2 linii), intr#ri/ie"iri pentru timer (4 linii) "i linii seriale (2). 8051 are 2 timere de 16 bi!i, fiecare poate fi programat separat. Timerele pot fi utilizate pentru a m#sura intervale de timp, pentru a determina lungimea unor impulsuri, ca num#r#toare, etc. Rezolu!ia este de 1s, intervalul maxim de timp fiind de 65,536ms. Portul serial UART este un port serial full duplex cu rata de transfer pn# la 115Kbaud. Portul serial poate fi folosit att pentru comunica!ii cu echipamente periferice ct "i comunica!ii ntre circuite. Controllerul de ntreruperi admite ntreruperi de la 5 surse: de la portul serial (dac# s-a transmis sau recep!ionat un caracter); de la timere (cnd s-a nregistrat o dep#"ire); de la 2 pini de intrare.
Fiecare surs# poate fi validat# sau invalidat# individual. Prioritatea poate fi programat#. Fiecare surs# are asociat# o adres# n memoria program (tabelul 4.2).
Tabelul 4.2 Adresele de salt pentru ntreruperi Sursa de ntrerupere RESET Extern 0 Timer 0
Adresa salt
0000h 0003h 000Bh
de Sursa de ntrerupere
Extern 1 Timer 1 Port serial
Adresa de salt
0013h 001Bh 0023h
4. Familia MCS-51
103
Semnifica!ie RXD-intrare serial# a porului pentru recep!ie TXD-ie"ire serial# a portului pentru emisie /INT0-ntrerupere extern# pentru Timer 0 /INT1-ntrerupere extern# pentru Timer 1 T0-intrare extern# n Timer 0 T1-intrare extern# n Timer 1 /WR-strob pentru scrierea memoriei de date extern# /RD-strob pentru citirea memoriei de date extern#
RST este o intrare de RESET. Dac# semnalul de intrare r#mne n HIGH pe perioada a doi cicli ma"in# n timp ce oscilatorul func!ioneaz#, are loc ini!ializarea MC. ALE/PROG ALE (Address Latch Enable) valideaz# octetul cel mai pu!in semnificativ de adres# n timpul accesului la memoria extern# (PORT0). PROG
Ie"irile sunt bufferate "i pot suporta pn# la 4 intr#ri LS TTL. Pinii programa!i ca ie"iri n stare HIGH pot fi folosi!i ca intr#ri. Ca pini de intrare, dac# au fost for!a!i n LOW din exterior, ace"tia furnizeaz# curent.
*
104
MICROCONTROLLER-e
este semnal de intrare pentru impulsul de programare n timpul program#rii EPROM-ului. /PSEN (Program Store Enable) valideaz# citirea programelor din memoria program extern#. Nu se activeaz# la citirea datelor din memoria extern# de date. /EA/VP /EA (External Acces Enable) valideaz# n stare HIGH memoria program intern#, iar n stare LOW valideaz# memoria program extern#. La VP se aplic# tensiunea de 21V n timpul program#rii EPROM-ului. XTAL1, XTAL2 se conecteaz# cristalul de cuar! sau un oscilator extern.
Memorie intern# de program 4Kx8 ROM 4Kx8 EPROM 8Kx8 ROM 8Kx8 EPROM
Memorie intern# de date 128bytes RAM 128bytes RAM 128bytes RAM 256bytes RAM 256bytes RAM 256bytes RAM
a. Gestionarea memoriei de date (RAM) Memoria intern# este mapat# n spa!iul de adresare 00H - FFH (256bytes). Ea poate fi "umbrit# multiplu"; aceea"i adres# poate fi atribuit# mai multor arii de memorie (intern# SRAM, intern# extins# SRAM, ariei registrelor programabile, memoriei externe de program sau de date). Umbrirea este realizat# fie utiliznd semnale hard (PSEN, nRD, nWR), fie utiliznd instruc!iuni specifice ce se refer# strict la unul dintre tipurile de memorie (MOVC sau MOVX). n zona 80H -FFH sunt registrele speciale (SFR) care sunt adresabile direct. Zona 00H-7FH poate fi adresat# direct sau indirect. Memoria extern# se afl# ntre adresele 0000H-FFFFH. Validarea folosirii memoriei de date se realizeaz# cu semnalele nRD "i nWR. Aceste semnale (nRD "i nWR) se folosesc "i pentru selec!ia datelor din portul 0, unde datele sunt multiplexate cu adresele. Adresele sunt validate cu semnalul ALE. Informa!ia poate fi accesat# cu adresare pe 8 sau pe 16 bi!i.
4. Familia MCS-51
105
b. Gestionarea memoriei program (ROM, EPROM) Se poate folosi memoria ROM intern# (nEA n stare HIGH) sau cea extern# (nEA n stare LOW). Strobul pentru citirea memoriei externe este semnalul PSEN. Toate citirile se fac cu adresare pe 16 bi!i.
M1 0 0 1 1
M0 0 1 0 1
Modul de operare Timer pe 13 bi!i (Mod 0) Timer/Counter pe 16 bi!i (Mod 1) TL0 este timer/counter pe 8 bi!i "i TH0 este timer pe 8 bi!i (Mod 2) Timer/Counter 1 oprit (Mod 3)
Semnifica!ia bi!ilor din registrul special TCON este: TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0, unde: TF0, TF1- indicatorul de dep#"ire al timer-ului 0, respectiv 1. Este setat la dep#"ire ca num#r#tor sau teporizator "i este resetat cnd se apeleaz# rutina de ntrerupere a timerului corespunz#tor; TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri num#r#toarele/ temporizatoarele; IE0, IE1 - indicator de activare a ntreruperii pe front; IT0, IT1 - controlul activ#rii ntreruperii (pe nivel IT=0, sau pe front IT=1). Pentru MC care au al treilea timer exist# registrul T2CON cu structura:
106
MICROCONTROLLER-e
TF2, EXF2, RCLK, TCLK, EXEN2, TR2, C/-T2, CP/RL2, unde: TF2 - indicator de dep#"ire; EXF2 - indic# apari!ia unui eveniment la pinii de control extern; RCLK - cnd este setat, portul serial folose"te ca "i tact de recep!ie semnalul de dep#"ire generat de timerul 2; TCLK - cnd este setat, portul serial folose"te ca "i tact de emisie semnalul de dep#"ire generat de timerul 2; EXEN2- indicator de activare extern#; TR2 - porne"te/ opre"te timerul 2 C/-T2 - selecteaz# func!ionarea ca timer sau num#r#tor; CP/RL2 - indicator pentru memorare.
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 recep!ia; TB8 - al 9-lea bit ce se transmite n modurile 2 "i 3; RB8 - al 9-lea bit ce se recep!ioneaz# n modurile 2 "i 3; TI - indicator de ntrerupere a transmisiei; RI - indicator de ntrerupere a recep!iei.
108
MICROCONTROLLER-e
- stabile"te nivelul de prioritate pentru ntreruperea timerului 2; - stabile"te nivelul de prioritate pentru ntreruperea portului serial; - stabile"te nivelul de prioritate pentru ntreruperea timerului 1; - stabile"te nivelul de prioritate pentru ntreruperea extern# 1; - stabile"te nivelul de prioritate pentru ntreruperea timerului 0; - stabile"te nivelul de prioritate pentru ntreruperea extern# 0.
Nivelul priorit#!ii poate fi programat n HIGH sau LOW. O ntrerupere LOW poate fi ntrerupt# de o ntrerupere LOW dar nu poate fi ntrerupt# de o ntrerupere HIGH. O ntrerupere HIGH nu poate fi ntrerupt#.
4. Familia MCS-51
109
Ca "i generator de tact se poate folosi oscilatorul intern la intr#rile X1 "i X2, ca n figura 4.3.
X1 X2
Circuitul poate fi folosit "i cu un tact extern, legnd X2 la mas#, iar la X1 se leag# un oscilator extern.
Opera!ia 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 aten!ie foile de catalog). Sursa de tensiune pentru Vpp trebuie s# fie foarte bine filtrat# "i stabilizat# deoarece chiar "i un mic impuls de tensiune poate produce v#t#marea circuitului. Verificarea programului se poate face dac# bitul de siguran!# nu a fost programat. Citirea se face n acelea"i condi!ii ca "i scrierea, cu excep!ia lui ALE care este 1, /EA este 1, iar strobul de citire este P2.7. Pentru a nu se putea citi
110
MICROCONTROLLER-e
neautorizat con!inutul EPROM-ului se programeaz# un a"a numit bit de siguran!# care odat# programat nu mai permite nici un acces electric la memoria EPROM. Odat# programat, acest bit se poate "terge doar prin "tergerea ntregii memorii EPROM. $tergerea EPROM-ului se poate face la lumin# ultraviolet# (2537Angstrom), cu cel pu!in 15W.sec/cm2, adic# o expunere de 20-30 min. la distan!a de 2-3cm la o lamp# de ultraviolete cu 12W/cm2. Programarea rapid# (Quick Pulse Programming) poate fi aplicat# la circuitele 875XBH, "i are ca rezultat posibilitatea program#rii unui circuit n numai 25 secunde. Programarea se poate face cu o tensiune Vpp mai mic# (12,75V). Semnalul ALE are forma unor impulsuri multiple, 25 de impulsuri de 100 s.
4.2
8051 are 111 instruc!iuni 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.
Sc#dere: SUBB - sc#dere cu mprumut, scade operandul din acumulator, apoi scade CY "i pune rezultatul n A. DEC - scade 1 din operand "i pune rezultatul ca nou operand. nmul!ire: MUL - execut# o nmul!ire f#r# semn ntre acumulator "i registrul B, rezultatul ob!inut fiind pe 2 octe!i (octetul cel mai semnificativ se pune n B). Dac# to!i bi!ii din octetul cel mai semnificativ al rezultatului sunt 0 bitul OV "i CY din PSW se pun la 0. mp#r!ire: DIV - execut# mp#r!irea f#r# semn a con!inutului registrului A la con!inutul registrului B. Partea ntreag# a rezultatului se pune n A, iar partea frac!ionar# n B. Instruc!iuni pentru opera!ii logice: Instruc!iuni logice cu un singur operand: CLR - reseteaz# A orice bit adresabil direct. SETB - seteaz# orice bit adresabil direct. CPL - complementeaz# con!inutul lui A, f#r# a afecta PSW. RL - rota!ie stnga a acumulatorului. RLC - rota!ie stnga a A prin CY. RR - rota!ie dreapta a A. RRC - rota!ie dreapta a A prin CY. SWAP - inverseaz# niblurile n A. Instruc!iuni logice cu 2 operanzi: ANL - $I logic. ORL - SAU logic. XRL - SAU EXCLUSIV logic. Instruc!iuni de control: Apeluri "i salturi necondi!ionate: ACAL - este o instruc!iune pe 2 octe!i de apelare a unui subprogram care se folose"te atunci cnd adresa de salt este cuprins# n 2K ai paginii curente. Cmpul de adres# de 11 bi!i este concatenat cu cei mai semnificativi 5 bi!i din PC. LCALL- este o instruc!iune pe trei octe!i de apelare a unui subprogram care adreseaz# to!i cei 64K ai memoriei. RET - transfer# controlul la adresa de ntoarcere care a fost n prealabil salvat# n stiv# "i decrementeaz# registrul SP cu 2.
112
MICROCONTROLLER-e
AJMP - este un salt necondi!ionat la adresa specificat#analog cu ACALL. LJMP - este un salt necondi!ionat la adresa specificat# analog cu LCALL. SJMP - este un salt necondi!ionat scurt n cadrul a 256 de octe!i. Salturi condi!ionate: JZ - execut# salt dac# acumulatorul este 0. JNZ - execut# salt dac# acumulatorul nu este 0. JC - execut# salt dac# bitul de CY (Carry) este 1. JNC - execut# salt dac# bitul de CY este 0. JB - execut# salt dac# bitul adresat este 1. JNB - execut# salt dac# bitul adresat este 0. JBC - execut# salt dac# bitul adresat este 1 "i apoi "terge bitul adresat. CJNE - compar# primul operand cu al doilea operand "i face salt dac# ace"tia nu sunt egali. DJNZ - decrementeaz# operandul surs# "i pune rezultatul n operandul destina!ie. Dac# rezultatul nu este 0 se execut# salt. ntreruperi: RETI - ca "i RET, dar activeaz# ntreruperile.
4. Familia MCS-51
113
ADD A,@R1 Adresare imediat" - folosit# cnd operandul este o constant# cu o valoare cunoscut#, care se specific# n codului instruc!iunii. n limbajul de asamblare al lui 8051 constanta este precedat# de semnul #. De exemplu adunarea lui 15 cu 18 zecimal, cu rezultatul n acumulator: MOV A,#15 ADD A,#18
4.3
Schema bloc a modulului este dat# n figura 4.4. Secven!iatorul asigur# secven!a de timp corespunz#toare pentru scriere sau "tergere. Datele "i adresele se transfer# prin intermediul registrelor de pe magistral#.
114
MICROCONTROLLER-e
ECNTRL
ETIM
EDATA
EADRH
EADRL
BUS INTERN
O citire se poate realiza simplu: Citire: MOV EADRL,#20H MOV A,EDAT Ca urmare a acestei secven!e de program, con!inutul loca!iei 20h este citit n acumulator. Memoria EEPROM este protejat# cu un octet la adresa 8000h. Se poate valida securitatea cu urm#toarea secven!# de program, cu scrierea activat#: Activare securitate: MOV EADRH,#80H MOV EADRL,#00H MOV EDAT,#FFH Acest octet nu mai poate fi modificat prin soft. Programul din EEPROM nu mai poate fi citit sau modificat cu instruc!iuni MOVC din memorii externe, ci doar executat.
4. Familia MCS-51
115
poate fi programat# "i "tears# (EPROM) n maximum 1000 de cicluri de scriere/"tergere. Programarea memoriei FLASH se poate face cu o tensiune mare, de +12V a"a nct se pot folosi inscriptoarele de EPROM sau se poate face cu +5V, pentru ca programarea s# fie posibil# n sistemul gazd#. AT89C55 este fabricat cu memoria "tears# (plin# cu FFh) "i gata de a fi programat#. Programarea memoriei se face astfel: ! pe liniile de adres# se stabile"te adresa loca!iei de programat; ! pe liniile de date se stabile"te octetul de nscris; ! se aplic# un front pe /EA/Vpp la +12V (pentru programarea cu 12V); ! se aplic# un impuls ALE//PROG. Starea program#rii este indicat# de bitul RDY//BSY (P3.4), linia fiind LOW n timpul program#rii "i HIGH cnd programarea s-a terminat. Dup# nscriere se poate face verificarea a ceea ce s-a nscris, prin adresare "i citirea octetului de date. Toat# memoria FLASH se poate "terge electric aplicnd semnalele de comand# corespunz#toare (din tabelul care exist# n foile de catalog) "i aplicnd apoi un impuls ALE//PROG de 10ms. Asem#n#tor se programeaz# (programare paralel#) "i circuitul 89C51 de la Philips.
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 func!ie de tactul sistemului "i poate fi de maximum 100kHz; se poate selecta dac# liniile I/O (P1.6 "i P1.7) au semnifica!iile generale sau speciale pentru I2C;
118
MICROCONTROLLER-e
se poate porni transferul prin generarea de condi!ii de START repetate (mod MASTER) sau verificarea bus-ului "i generarea de START doar dac# bus-ul este liber (mod SLAVE); se poate opri transferul prin generarea unei condi!ii de STOP; se pot valida ntreruperile care se genereaz# n urm#toarele condi!ii: s-a generat o condi!ie de START, s-a recep!ionat adresa proprie, un octet s-a transmis sau s-a recep!ionat; se poate insera un ACK, (nivel LOW pe SDA) dup# recep!ia unui caracter sau a adresei proprii.
Registrul de stare S1STA (D9h - registru Read Only) poate fi folosit pentru generarea unei ntreruperi "i saltul la o rutin# de servire. n registrul de date S1DAT (DAh) se nscrie octetul care se transmite sau se recep!ioneaz#; cel mai semnificativ bit se transmite sau se recep!ioneaz# primul. n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se stabile"te adresa dispozitivului SLAVE cu care dore"te un transfer de date. Observa!ie: convertorul AD, interfa!a I2C "i canalul PWM0 pot lucra n modurile cu economie de energie. Convertorul, interfa!a I2C "i canalul PWM0 r#mn active n modul Idle al UC "i pot genera o ntrerupere sau un RESET, terminnd astfel modul inactiv al UC.
4. 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 obi"nuit. El poate func!iona cu diferite tacte programate n registrul SFR CMOD cu 2 bi!i, conform tabelului 4.7.
Tabelul 4.7 Programarea tactului pentru timer
CPS1 0 0 1 1
CPS0 0 1 0 1
Tact pentru timer frecven!a oscilatorului/12 frecven!a oscilatorului/4 Semnalul de dep#"ire de la timerul 0 standard De la un pin extern (ECI, P1.2)
Fiecare modul are asociat un registru de comand# (CCAPM0-CCAPM4) care controleaz# modul de operare al modulului: se poate valida ca o coinciden!# n modul s# genereze o ntrerupere; se poate valida modul PWM; se poate valida ca ie"irea P1.x s# schimbe starea dac# a ap#rut o coinciden!# ntre con!inutul modulului "i con!inutul timerului; se poate programa pe care front al intr#rii P1.x s# se fac# num#rarea impulsurilor externe.
Fiecare modul mai are asociat un registru de 16 bi!i (cte dou# de 8 bi!i; CCAP0H-CCAP5H "i CCAP0L-CCAP5L) care stocheaz# valoarea num#rat# la apari!ia unei coinciden!e. n mod PWM aceste registre controleaz# factorul de umplere. Func!ionarea PCA:
4. Familia MCS-51
121
n modul de captur#, cnd apare o tranzi!ie pe intrarea extern# P1.x, se ncarc# valoarea la care a ajuns timerul comun n registrele de date (CCAPxH "i CCAPxL). n acest moment se poate genera o ntrerupere; n mod timer, con!inutul registrelor de date este incrementat de la intrarea extern#. Cnd se ajunge la o valoare egal# cu cea stocat# n timerul comun poate fi generat# o ntrerupere; n mod PWM fiecare modul poate fi folosit ca un canal independent. Frecven!a semnalului PWM este aceea"i "i depinde de sursa timerului comun. Factorul de umplere se poate modifica prin registrul CCAPxL; n mod ceas de gard# utilizatorul ncarc# registrul CCAPxH "i CCAPxL. Cnd timerul comun ajunge la o valoare egal# cu cea stocat# de utilizator se genereaz# un RESET intern. Pentru ca s# nu se ajung# la RESET ntr-un progam rulat normal, utilizatorul trebuie periodic s# schimbe valoarea din timer sau s# reseteze ceasul de gard#.
122
MICROCONTROLLER-e
MC se poate folosi la comanda afi"oarelor cu pn# la 4 planuri n spate. Cele 24 de linii de comand# a segmentelor pot comanda 12 caractere numerice formate cu 7 segmente sau 88 de elemente grafice. Func!ionarea afi"ajului poate fi mai bine n!eleas# n cazul concret al unui singur plan n spate, pentru 2 elemente al#turate ale afi"ajului, figura 4.9.
VDD BP0 VSS S00
S01 2 elemente de afisaj, aprins, al doilea Figura 4.9 Comanda a doua elemente al#(primul turate ale afi"ajului LCDstins)
Primul element este aprins pentru c# ntre segment "i planul din spate este o diferen!# de poten!ial, iar al doilea este stins pentru c# nu exist# o diferen!# de poten!ial. Comanda modulului de afi"are se face cu 12 registre LCD0-LCD11 (adrese 9Ah-BFh) care con!in configura!ia segmentelor stinse/aprinse pentru fiecare plan din spate.
4. Familia MCS-51
123
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 num#r#tor de 14 bi!i. Canalele de 6 bi!i utilizeaz# doar partea mai pu!in semnificativ# a num#r#torului de 14 bi!i. Fiecare canal PWM are asociat un registru SFR. La egalitatea valorii acestui registru cu con!inutul num#r#torului, ie"irea PWM schimb# starea. Structura canalelor PWM este reprezentat# n figura 4.11. Convertorul numeric analogic este folosit pentru a realiza conversia analog numeric# soft (figura 4.12). Circuitul are 3 intr#ri analogice care pot fi comutate pe rnd la intrarea unui comparator de tensiune. La cealalt# intrare a comparatorului se aplic# ie"irea convertorului numeric analogic. Cnd intr#rile sunt egale, valoarea aplicat convertorului numeric analogic este chiar valoarea numeric# a semnalului analogic de intrare.
124
MICROCONTROLLER-e
Registru SFR PWM7 Num#r#tor 14 bi!i Canal PWM7 (6 bi!i) Tact= f/4 Registru TDACL, TDACH Canal PWM8 (14 bi!i) P0.6
P1.0
Modulul OSD are rolul de a suprapune text pe o imagine de televiziune. Intr#rile n acest bloc sunt: 2 ceasuri video; semnalul de sincronizare orizontal#;
4. Familia MCS-51
125
semnalul de sincronizare vertical#. Modulul OSD poate fi echipat cu EPROM, ceea ce nseamn# c# generatorul de caractere poate fi programat. Modulul OSD permite 8 moduri de scriere umbrit# a caracterului, culoarea caracterului este selectabil#, culoarea fondului este selectabil#.
126
MICROCONTROLLER-e
Modulele configurabile sunt aranjate ntr-o matrice, a c#rei dimensiuni depind de varianta de circuit. Modulele sunt grupate cte dou#, pentru a putea mp#r!i resursele. Schema bloc a unui nod din matrice este dat# n figura 4.14.
8051
CPU 256 x 8 RAM Ceas de gard# 3 x Timer UART Controller de ntreruperi 2x DMA
RAM 64Kocte!i
Interfa!a JTAG
BUS CSI
Matrice de leg#turi
Matrice de leg#turi
4. Familia MCS-51
127
Ie"iri
Intr#ri
D EN T
Structura por!ilor poate fi programat# la ini!ializare "i reprogramat# de ori cte ori. O celul# poate ndeplini una din func!iile: logic# (ie"irea 1); aritmetic#; de memorare (ie"irea 2); de magistral#; secven!ial#. Testarea JTAG se poate realiza cu un calculator conectat la interfa!a JTAG. Pinii folosi!i sunt: TCK ceas de testare (intrare n MC); TMS comanda modului de test, intrare n MC, activ pe 0; TDI date seriale de intrare n MC; TDO date seriale de ie"ire din MC.
n modul de testare nu este nevoie ca MC s# aib# o memorie extern#. Prin leg#tura JTAG se poate programa matricea CSL "i se poate observa modul de rulare al programului de c#tre MC prin intercalarea de break point-uri, rularea pas cu pas, citirea registrelor interne etc.
4.5
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 con!ine RAM cu capacitatea de 32KB, selectat cu PSEN (care indic# faptul c# nu este acces la memoria program) "i /RD pentru o citire sau /WR pentru o scriere n RAM. Bus-ul de date "i adrese este comun pentru AD0-AD7. Adresele se separ# cu un latch validat de semnalul ALE. Liniile de date sunt validate cu /RD sau /WR. Memoria program EPROM este op!ional#, (este necesar# pentru modelele care nu au EPROM sau OTP intern, de exemplu 8031) fiind selectat# cu semnalul PSEN. Dac# exist# EPROM extern /EA=LOW, iar dac# se folose"te EPROM-ul intern /EA=HIGH. Circuitul se completeaz# cu un generator de tact "i dou# componente pentru realizarea RESET-ului, ca n unul din subcapitolele anterioare. Pentru dezvolt#ri se poate folosi portul P1, care este liber, "i canalul serial. Dac# num#rul liniilor I/O nu este suficient, se poate folosi un expander cum este de exemplu 8243, care poate extinde 4 linii la 4x4 linii bidirec!ionale (figura 4.17).
4. Familia MCS-51
129
8051
X1 P0 X2 RST P2.3 P2.2 P2.1 P2.0 P1 P2.5 P2.4
8243
P4
P23 P5
P6
P7
4.6
Interfe!e speciale 2 5 2 2 6
Pre! (USD) 4 35 90 27 18
130
MICROCONTROLLER-e
5
MICROCONTROLLER-E RISC
5.1 MICROCONTROLLER PIC
ncepem prezentarea MC cu arhitectur! RISC cu microcontrollerul PIC. Produc!torul plasat cel mai bine pe pia"a MC PIC este Microchip (www.microchip.com). Un alt produc!tor important de MC PIC este Motorola. Exist! mai multe familii de MC PIC; PIC#2, PIC#6, PIC#7.
5.1.1
PIC12
MC PIC#2 sunt MC cu pre"uri mici $i u$or de utilizat datorit! arhitecturii RISC. MC are un num!r de 33 de instruc"iuni cu un grad mare de ortogonalitate, din care majoritatea se execut! ntr-un singur ciclu, iar cele de salt n dou! cicluri. Spa"iul mic ocupat (capsul! de 8 pini) fac aceste MC foarte potrivite aplica"iilor miniatur! precum $i aplica"iilor casnice. Pentru a putea fi realizat! o $i mai mare economie de spa"iu, circuitul de RESET este integrat. Sunt disponibile circuite cu OTP, cu EPROM sau EEPROM inclus, care fac posibil! att realizarea seriilor mari ct $i a prototipurilor sau a aplica"iilor cu elemente care se modific! (de exemplu aplica"ii de asigurare a securit!"ii cu coduri variabile). Aceste MC admit o frecven"! de pn! la 4MHz. MC PIC#2 are o arhitectur! Harvard, cu magistrale diferite pentru date $i pentru instruc"iuni. Acest lucru permite ca magistrala de instruc"iuni s! fie mai mare (de #2 bi"i) $i ca urmare majoritatea instruc"iunilor pot fi de un cuvnt $i pot fi executate ntr-un singur ciclu. Unitatea central! este o unitate pe 8 bi"i care poate realiza func"ii aritmetice $i booleene: adunare, sc!dere, deplasare $i opera"ii logice cu date care se g!sesc n registrul de lucru (W) $i n oricare registru de uz general. Setul de instruc"iuni are un mare grad de ortogonalitate, ceea ce reduce mult timpul necesitat de realizarea unei aplica"ii. O opera"ie poate afecta bi"ii de stare: Carry
5. Microcontroller-e RISC
131
(C), Digit Carry (C ) $i Zero (Z). Num!r!torul de program (PC) este un registru de #2 bi"i, ceea ce nseamn! c! poate adresa un spa"iu de 2K cuvinte de #2 bi"i. Schema bloc a acestui MC este dat! n figura 5.#.
Memoria program
ROM/OTP/EPROM
PC
SDA date
PIO
Setul de registre localizat n RAM con"ine registre cu func"ii speciale $i registre de uz general. Registrele generale pot fi apelate direct sau indirect, prin intermediul registrului special FSR (File Select Register). Registrele $i adresele lor sunt date n tabelul 5.# (pentru circuitul PIC#2C509).
Tabelul 5.1 Setul de registre PIC12C509
Adresa(H) 00 0# 02 03
Adresa(H) 04 05 06 07-#F
132
MICROCONTROLLER-e
Stiva este de #2 bi"i $i este realizat! hard. Nu exist! indicator de stiv! $i nu sunt instruc"iuni de PUSH $i POP, lucrul cu stiva fiind automat la instruc"iunile CALL $i RETLW. Stiva admite o adncime de 2 nivele. Setul de instruc"iuni pentru acest MC este dat n tabelul 5.2.
Tabelul 5.2 Setul de instruc!iuni PIC 12
Mnemonic!-operanzi ADDWF f,d ANDWF f,d CLRF f CLRW COMF f,d DECF f,d DECFSZ f,d INCF f,d INCFSZ f,d IORWF f,d MOVF f,d MOVWF f NOP RLF f,d RRF f,d SUBWF f,d SWAPF f,d XORWF f,d BCF f,b BSF f,b BTFSC f,b BTFSS f,b ANDLW k CALL k CLRWDT k GOTO k IORLW k MOVLW k OPTION k RETLW k SLEEP TRIS f XORLW k
Descriere Adun! W cu f %I LOGIC ntre W $i f Face n f to"i bi"ii 0 Face n W to"i bi"ii 0 Complementeaz! f Decrementeaz! f Decrementeaz! f $i trece mai departe dac! este 0 Incrementeaz! f Incrementeaz! f $i trece mai departe dac! este 0 SAU W cu f Mut! f Mut! W n f Nici o opera"ie Rota"ie la stnga prin Carry Rota"ie la dreapta prin Carry Sc!dere W din f Schimb! f SAU EXCLUSIV W cu f Bitul b din f este f!cut 0 Bitul b din f este f!cut # Se testeaz! bitul b din f $i face salt dac! bitul este 0 Se testeaz! bitul b din f $i face salt dac! bitul este # %I ntre W $i constanta k Chemare subrutin! Resetare ceas de gard! Salt necondi"ionat SAU ntre W $i k nc!rcare imediat! a constantei k n W nc!rcare registru de op"iuni ntoarcere din subrutin! cu plasarea k n W Intrarea n mod inactiv nc!rcarea registrului TRIS SAU EXCLUSIV ntre k $i W
5. Microcontroller-e RISC
133
Dac! valoarea bitului d este 0, rezultatul se stocheaz! n W iar dac! este #, rezultatul se stocheaz! n f. Registrul de op"iuni (OPTION) este un registru special de configurare. Registrul TRIS este folosit pentru a controla liniile I/O. Un # n TRIS pune linia corespunz!toare n nalt! impedan"!, iar un 0 valideaz! linia. Liniile de intrare/ie$ire pot fi programate ca intr!ri sau ie$iri cu registrul special GPIO. Pinii pot avea semnifica"ii duble. La RESET toate liniile se definesc ca intr!ri. Unii pini pot trezi MC din starea inactiv! (Wake up). Opera"iile de intrare ie$ire se fac prin intermediul registrului GPIO, de exemplu instruc"iunea: BCF GPIO,5 ;stabile$te un 0 pe linia 5 de ie$ire Modulul timer 0 poate fi utilizat n urm!toarele moduri: temporizator/num!r!tor pe 8 bi"i; num!r!tor pentru prescalare de 8 bi"i; ceas din exterior sau din interior. Schema bloc a temporizatorului cu semnalele de comand! este dat! n figura 5.2.
Fosc/4 (intern) Alegere tact Prescalare GP2
(TOCKI) (extern) Tact f!r! sau cu prescalare
TIMER
Cu bitul TOC5 se alege sursa tactului, extern! (de la un pin cu semnifica"ie dubl!) sau intern!. Tacul merge direct la timer sau prin registrul de prescalare (registru de 8 bi"i), programabil cu bitul PSA. Registrul de prescalare poate fi nc!rcat cu bi"ii PS2, PS# $i PS0. To"i ace$ti bi"i de comand! se afl! n registrul de op"iuni. Registrul de prescalare poate fi folosit $i de ceasul de gard!, dar nu simultan cu timerul 0. Memoria EEPROM cu care sunt echipate anumite circuite din familie poate fi de #6 octe"i, poate fi supus! la peste # mil. de cicluri de scriere/$tergere $i poate re"ine informa"ia mai mult de 40 de ani. Transmisia se face serial sincron pe dou! fire, unul de tact (SCL) $i unul de date, bidirec"ional (SDA), mapate n registrul GPIO ca bit 6 $i bit 7, f!r! a avea conexiune n exterior. Protocolul pentru
134
MICROCONTROLLER-e
transferul de date poate avea loc doar dac! magistrala de date nu este ocupat!, cu SDA $i SCL=#. Un START este determinat de frontul SDA din # n 0, iar un front SDA din 0 n # reprezint! un STOP. Data trebuie s! fie stabil! pe SDA pe durata unui impuls de tact SCL (o tranzi"ie din # n 0, urmat! de una din 0 n #). Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei. Pentru a asigura siguran"a rul!rii corecte a programului, circuitul este echipat cu un ceas de gard!, care poate fi resetat printr-o instruc"iune special!, asigurnd o ntrziere de #8ms pn! s! declan$eze un RESET. Familia PIC#2 are posibilitatea de lucru ntr-un mod cu economie de energie, numit SLEEP. n modul SLEEP oscilatorul este oprit, iar pinii I/O $i p!streaz! starea. Intrarea n SLEEP se face cu o instruc"iune special!. MC poate fi scos din acest mod de lucru printr-un front aplicat la pin extern sau de ceasul de gard!. Ca $i mod de generare a tactului extern, circuitul poate lucra n mai multe feluri: cu cristal extern conectat la GP5/OSC# $i GP4/OSC2 dup! o schem! standard; cu generator de tact extern, cuplat ntre GP5/OSC# $i mas!; pentru aplica"ii care nu sunt critice la timp, se poate conecta n exterior la GP5 un grup RC, cu R (3k-#00k) la +5V $i C (20pF) la mas!; MC are un generator intern de 4MHz, a c!rui frecven"! poate fi modificat! prin scrierea registrului OSCCAL.
Alegerea sursei tactului, precum $i activarea ceasului de gard! se fac cu un registru de configurare (de #2 bi"i) care nu este accesibil utilizatorului, fiind o informa"ie scris! n PROM/ EPROM la adresa FFFh. Un RESET poate fi generat de una din urm!toarele surse:
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 PIC#2C5xx
Vdd Vss /MCLR/Vpp GP# GP0
Intrarea n mod programare se face cu GP# $i GP0 "inu"i la 0 pe un front cresc!tor al /MCLR. Pentru a sublinia dimensiunea $i simplitatea de utilizare a acestui MC, n figura 5.4 este repreyentat! capsula circuitului.
PIC#2C # 2 3 4 8 7 6 5 Vss GP0 GP# GP2/T0CKI
5.1.2
PIC16
Cu o arhitectur! asem!n!toare familiei PIC#2, aceste MC au cteva mbun!t!"iri: 35 de instruc"iuni fa"! de 33; frecven"a maxim! 20MHz fa"! de 4; posibilitatea de lucru n ntreruperi, cu 7 surse interne $i o surs! extern!; stiv! automat! cu 8 nivele; #3 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer $i cu o linie de putere pentru comanda direct! a unui LED;
136
MICROCONTROLLER-e
magistrala de instruc"iuni este pe #4 bi"i, fa"! de #2 bi"i; memoria ROM este de 5#2 x #4 cuvinte pn! la 2K x #4 cuvinte; memoria RAM este de 80-#28 de octe"i.
Aceste MC sunt livrate n capsule cu 20 de pini. ntreruperile sunt controlate de un registru de comand! a ntreruperilor care poate valida sau invalida global sistemul de ntreruperi $i individual pe fiecare linie. Fiecare interfa"! care poate cere ntrerupere are ata$at un bit care poate fi testat pentru a determina sursa ntreruperii. Datorit! posibilit!"ii de lucru n ntreruperi, timerul 0, care func"ioneaz! la fel ca la PIC#2 poate cere ntrerupere la trecerea num!r!torului de la FFh la 00h. ntreruperea poate fi mascat!. Pentru cre$terea siguran"ei n func"ionare familia PIC#6 are integrat un circuit de protec"ie care genereaz! un RESET la sc!derea tensiunii de alimentare (Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de comand!. MC din familia PIC #6 pot fi echipate cu o diversitate mult mai mare de interfe"e, cum ar fi comparatoare, convertoare ADC $i DAC, USART, I2C, SPI, PWM etc. Circuitul PIC#6C64x este echipat cu 2 comparatoare analogice. Intr!rile lor sunt multiplexate cu pinii I/O 0-3 $i cu o referin"! de tensiune care poate fi folosit! pentru comaparatoare. Cu un registru de comand! n zona registrelor cu func"ii speciale se poate programa modul de comparare. Se poate programa ca ie$irea comparatoarelor s! cear! ntrerupere. Comparatoarele pot fi programate s! lucreze cu referin"! extern! sau intern!. n modul SLEEP comparatoarele r!mn active $i pot trezi circuitul. Dac! curentul consumat de comparatoare n mod SLEEP este prea mare, ele pot fi dezactivate prin registrul de comand!. Modulul care genereaz! referin"a de tensiune este un grup de #6 rezisten"e care divizeaz! tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau invalidat pentru economia de energie. Circuitul PIC#6C7#x este echipat cu convertor A/D $i un bloc suplimentar de timere. Convertorul A/D este un convertor cu aproxima"ii succesive pe 8 bi"i, cu 4 intr!ri analogice multiplexate $i cu circuit de e$antionare-memorare. Tensiunea de referin"! poate fi cea de alimentare sau o referin"! extern! la un pin I/O cu semnifica"ie dubl!. Convertorul A/D poate lucra $i n modul SLEEP, pentru acest mod de lucru fiind integrat n circuit un oscilator propriu pentru convertor. Convertorului i sunt ata$ate 3 registre, 2 de comand! $i unul de date. Cu registrele de comand! se poate programa: selec"ia tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu); selec"ia canalului analogic; un bit pentru START conversie; un bit pentru terminare conversiei - poate fi citit $i testat prin program, sau poate cere o ntrerupere; un bit pentru oprirea convertorului pentru a nu mai consuma curent, dac! nu este folosit n mod SLEEP.
5. Microcontroller-e RISC
137
Modulul suplimentar de timere este numit CCP (Capture Compare PWM), dup! func"iile pe care le poate ndeplini (un MC poate avea unul sau mai multe module CCP). Modulul CCP con"ine un registru de #6 bi"i $i folose$te timerele suplimentare # $i 2. Modurile de lucru posibile pentru modulul CCP sunt: mod captur" - la apari"ia unui eveniment la pinul exterior 3, registrul CCP se ncarc! cu valoarea din timerul #. Un eveniment poate fi un front cresc!tor, unul descresc!tor, la fiecare 4 sau #6 fronturi cresc!toare (prescalare). n momentul evenimentului se poate cere o ntrerupere. mod comparare - registrul CCP este permanent comparat cu con"inutul timerului #. Dac! apare o coinciden"!, se semnalizeaz! prin schimbarea st!rii pinului extern 3. n acela$i moment se poate cere o ntrerupere. mod PWM - se folosesc 2 timere, # $i 2, unul pentru a determina perioada semnalului $i cel!lalt factorul de umplere. Ie$irea PWM se face tot la pinul 3.
5.1.3
PIC17
PIC#7 are urm!toarele mbun!t!"iri fa"! de PIC#6: 58 de instruc"iuni fa"! de 38; frecven"a maxim! 33MHz fa"! de 20; stiv! automat! cu #6 nivele fa"! de 8; 33 de linii I/O cu posibilitatea stabilirii individuale a sensului de transfer $i cu o linie de putere pentru comanda direct! a unui LED; magistrala de instruc"iuni este pe #6 bi"i, fa"! de #4 bi"i; memoria ROM este de 2048 x #6 cuvinte; memoria RAM este de 232 de octe"i; magistralele de date, $i adrese (multiplexate) sunt accesibile la pin; unitatea central! poate executa nmul"iri; sunt admise ## surse de ntreruperi fa"! de 8.
Aceste MC sunt livrate n capsule cu 44 de pini. Schema bloc este dat! n figura 5.5. %i circuitele din familia PIC#7 pot fi echipate cu o gam! larg! de interfe"e.
138
MICROCONTROLLER-e
Memoria program
ROM/OTP/EPROM
M A G I S T R A L A I N S T R .
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 num!r!tor de #6 bi"i cu surs! de num!rare extern! sau intern!. Poate lucra cu un registru de prescalare care d! un tact divizat cu #/# pn! la #/256; Timer # este un timer pe 8 bi"i care poate lucra mpreun! cu Timerul 2 pentru a forma un timer pe #6 bi"i. Poate lucra n regim de num!rare a unor evenimente externe. Timerul are asociat un registru, deci poate lucra n regim de comparare; Timer 2 este la fel cu timerul #. Timerul # $i 2 pot lucra n mod PWM; Timer 3 este pe #6 bi"i, cu un registru asociat.
Modulul USART poate fi configurat s! lucreze n mod serial asincron fullduplex (pentru a transfera date cu un terminal sau un PC), sau n mod sincron fullduplex (de ex. pentru a lucra cu memorii externe EEPROM).
5. Microcontroller-e RISC
139
Observa!ie: este de remarcat la MC din familia PIC faptul c! nu au nevoie de componente externe pentru RESET $i pentru ceas, ceea ce poate fi un avantaj.
5.2 MC ATMEL
Foarte bine plasate pe pia"! n zona aplica"iilor low cost sunt MC ale firmei ATMEL. Firma fabric! $i MC echivalente 805#.
5.2.1
Familia AVR
Aceste MC sunt realizate de produc!tor n diverse variante, ncepnd cu modelele low cost AT90S2323, AT90S#200 $i terminnd cu modele complexe AT90S44#4, AT90S85#5, diferen"ele ntre acestea constnd n principal n m!rimea $i tipurile memoriei RAM, FLASH, ROM, EPROM, EEPROM $i a facilit!"ilor oferite la interfa"a cu utilizatorul. Seria de MC ATMEL este sus"inut! de o campanie puternic! de promovare astfel nct produc!torul ofer! gratuit software de dezvoltare ce include asamblor, debugger, documenta"ie, exemple $i note de aplica"ie pe site-ul s!u www.atmel.com. Softul este disponibil att n variant! ce ruleaz! sub sistemul de operare MS-DOS ct $i n varianta WINDOWS. Toate MC din familie au o arhitectur! Harvard, adic! au spa"ii de adres! $i magistrale diferite pentru memoria de date $i memoria program. Dispun de o prelucrare de tip pipe line a instruc"iunilor (n 2 trepte) astfel nct n timp ce o instruc"iune este executat!, cealalt! se afl! n ciclu de aducere din memorie (fetch) $i astfele se execut! cte o instruc"iune n fiecare ciclu. Schema bloc a unui circuit din familie este dat! n figura 5.5. Unul dintre cele mai mici MC este AT90S2323. Circuitul se alimenteaz! (n func"ie de variant!) la 5V sau la 3V $i func"ioneaz! pn! la frecven"a de #0MHz. Curentul absorbit este de 2,4mA n stare activ!, 0,5mA n stare inactiv! $i #A n starea Power Down. n principal, circuitul este compus din: unitatea central!, n arhitectur! RISC cu ##8 instruc"iuni, majoritatea de un ciclu $i 32 de registre de uz general; blocul de memorie, compus din memoria de program (FLASH de 2K octe"i care suport! n jur de #000 de program!ri) $i din memoria de date (#28 octe"i de RAM) $i #28 octe"i de EEPROM, care suport! n jur de #00.000 de program!ri;
140
MICROCONTROLLER-e
interfe"ele sunt reprezentate de un timer de 8 bi"i cu prescalare, un timer pentru ceasul de gard! $i o interfa"! serial! SPI pentru programarea n circuit. Liniile I/O sunt de regul! cu semnifica"ie dubl!.
Unitate central!
32 registre de uz general
Memoria program
FLASH 2K octe"i
ALU PC
Memoria de date
RAM #28 octe"i EEPROM #28 de octe"i
Magistral! de date
SPI
Ceas de gard!
Timer
Oscilator
Controller de ntreruperi
Port B
Unitatea central! poate executa majoritatea opera"iilor ntr-un ciclu, ceea ce nseamn! c! operanzii sunt n registrele generale, are loc opera"ia $i rezultatul este stocat n unul dintre registre. Se pot realiza $i adres!ri indirecte cu 6 dintre cele 32 de registre, grupate cte 2 (ca s! formeze registre de #6 bi"i); registrele duble sunt referite cu X, Y, Z. Se pot face opera"ii ntre registre sau cu o constant!. Instruc"iunile au formatul pe #6 bi"i, iar indicatorul de program PC este pe #0 bi"i. Memoria de date poate fi accesat! tot ca registre, n acela$i spa"iu. Spa"iul I/O con"ine 64 de adrese unde se g!sesc registrele de control $i de stare ale interfe"elor. Stiva este definit! n RAM, deci exist! un registru indicator de stiv! SP de 8 bi"i. O imagine sugestiv! a spa"iilor de memorie $i I/O este dat! n figura 5.6.
5. Microcontroller-e RISC
141
00h Memoria program FLASH #Kx #6 bi"i 000h 32 registre de lucru #Fh 64 registre I/O EEPROM #28 octe"i
00h
60h 7Fh
3FFh
Memoria EEPROM dispune de un spa"iu propriu de adresare, n care fiecare octet dintr-o loca"ie poate fi citit sau scris. Accesul se face specificnd adresa, data $i comanda n registre speciale. Acest MC permite 5 moduri de adresare: adresare direct! - adresa operandului este con"inut! n instruc"iune. Se pot executa instruc"iuni cu un registru sau ntre 2 registre. Este accesibil astfel tot spa"iul de date; adresare indirect! - adresa operandului este n X, Y sau Z; adresare indirect! cu deplasament - adresa oprandului este rezultatul adun!rii registrelor Y sau Z cu adresa de 6 bi"i con"inut! n instruc"iune. Se acoper! astfel doar 63 de loca"ii fa"! de baza dat! de registrele Y sau Z; adresare indirect! cu pre decrementare - registrele X, Y sau Z sunt decrementate nainte de adresare; adresare indirect! cu post incrementare.
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
Opera"ie Rd=Rd+Rr Rd=Rd+Rr+C Rd=Rd-Rr Rd=Rd-K Rd=Rd-Rr-C Rd=Rd-K-C Rd=Rd*Rr Rd=Rd*K Rd=Rd v Rr Rd=Rd v K Rd=RdRr Rd=$FF-Rd Rd=$00-Rd Rd=Rd v K Rd=Rd*(FFh-K) RD=Rd+# Rd=Rd-# Rd=Rd * Rd Rd=RdRd Rd=$FF PC=PC+k+# PC=PC+k+# PC=STACK PC=STACK
or 3
Opera"ie Sum! Sum! plus carry Diferen"! Diferen"! cu o constatnt! Diferen"! cu carry Dif. cu const. $i carry SI logic SI logic cu const. SAU logic SAU logic cu const. SAU exclusiv Complement fa"! de # Complement fa"! de 2 Set bit K n registru Clear bit K n registru Increment Decrement Test de 0 sau Clear registru Set registru Salt relativ la k Salt la subrutin! Return din subrutin! Ret. din subrutin! de tratare a ntreruperii if (RD=Rr) PC=PC+2 Compar! , skip dac! egal Compar! Compar! cu carry Compar! cu constat! if (Rr(b)=0) PC=Pc+2 Skip dac! bitul b din Rr este 0 Skip dac! bitul b din Rr este #
or 3 if (Rr(b)=#) 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
Opera"ie Salt dac! SF este# Salt dac! SF este 0 Salt: egalitate Salt: diferit Salt: carry setat Salt: carry este zero Salt: mai mare sau egal Salt: mai mic Salt: minus Salt: plus Salt : mai mare sau egal, cu semn Salt : mai mic dect 0, cu semn Salt dac! CF este setat Salt dac! CF este zero Salt dac! T este setat Salt dac! T este zero Salt dac! este overflow Salt dac! nu este overflow Salt dac! ntreruperea e activat! Salt dac! ntreruperea e dezactivat! Incarc! registru indirect Stocheaz! registru indirect Mut! Rr n Rd Mut! constanta K n Rd IN din portul P OUT la portul P Set bit b din portul P Reset bit b din portul P Shift logic stnga Shift logic dreapta Rotire spre stnga prin carry
if (I=#) PC=PC+k+# if (I=0) PC=PC+k+# Rd=(Z) (Z)=Rr Rd=Rr Rd=K Rd=P P=Rr I/O (p,B)=# I/O (p,B)=0 Rd(n+#)=Rd(n),Rd( 0)=0 Rd(n)=Rd(n+#),Rd( 7)=0 Rd(0)=C,Rd(n+#)= Rd(n), C=Rd(7)
144
MICROCONTROLLER-e
Mnemonic! ROR ASR SWAP BSET BCLR BST BLD SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLS SEV CLV SET CLT SEH CLH NOP SLEEP WDR
Opera"ie Rd(7)=C,Rd(n)=Rd( n+#), C=Rd(0) Rd(n)=Rd(n+#), n=0..6 Rd(3..0)=Rd(7..4), Rd(7..4)=Rd(3..0) SREG(s)=# SREG(s)=0 T=Rr(b) Rd(b)=T C=# C=0 N=# N=0 Z=# Z=0 I=# I=0 S=# S=0 V=# V=0 T=# T=0 H=# H=0
Opera"ie Rotire spre dreapta prin carry Shift aritmetic spre dreapta Inverseaz! jum!t!"ile Seteaz! flag s Reseteaz! flagul s Stocheaz! bitul b din Rr n T Incarc! T n bitul b din Rd Seteaz! Carry flag Reset Carry flag Seteaz! Negative flag Reseteaz! Negative flag Seteaz! Zero flag Reseteaz! Zero flag Activeaz! ntrerupere Dezactiveaz! ntrerupere Seteaz! flagul de semn Reseteaz! flagul de semn Seteaz! flagul overflow complement fa"! de 2 Reseteaz! flagul overflow complement fa"! de 2 Seteaz! T n SREG Reseteaz! T n SREG Seteaz! Half Carry Flag n SREG Reseteaz! Half Carry Flag n SREG No operation Sleep Watch dog reset
Anumite modele au $i o instruc"iune de nmul"ire, MUL. MC AVR au 3 surse de ntrerupere: de la RESET, (din exterior, la punerea sub tensiune sau de la ceasul de gard!); de la un pin extern; de la timer, la o dep!$ire.
5. Microcontroller-e RISC
145
ntreruperile pot fi mascate cu 2 registre de 8 bi"i, GIMSK- General Interrupt Mask $i TIMSK- Timer/Counter Interrupt Mask. La primirea unei ntreruperi se invalideaz! sistemul de nteruperi. Totu$i este posibil! primirea nc! a unei ntreruperi n timp ce este servit! prima, dac! se revalideaz! sistemul de ntreruperi. R!spunsul la o cerere de ntrerupere dureaz! minimum 4 cicluri, timp n care PC este salvat n stiv!, SP este incrementat cu 2 $i se seteaz! invalidarea ntreruperilor. Sursele de RESET pot fi: la punerea sub tensiune (Power On Reset), dac! tensiunea cre$te $i atinge un anumit prag; de la un pin extern, dac! un nivel LOW este prezent mai mult de 50ns; de la ceasul de gard! dac! este validat $i a expirat perioada de timp pentru care a fost programat s! a$tepte o ini"ializare. Dup! RESET execu"ia programului ncepe de la adresa 000h. Un RESET porne$te un num!r!tor care contorizeaz! un anumit num!r de impulsuri ale ceasului intern al circuitului. Contorul stabile$te durata impulsului RESET intern pentru ca acesta s! fie suficient de lung pentru ini"ializarea tuturor circuitelor interne, figura 5.7.
Vcc Power On Reset SAU LOGIC
/RESET
Oscilator RC intern
Num!r!tor
/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 execu"ia instruc"iunii SLEEP. Dac! n modul SLEEP apare o ntrerupere extern!, una de la ceasul de gard! sau un RESET, acestea sunt executate, circuitul trezindu-se. n acest mod de lucru este oprit
146
MICROCONTROLLER-e
oscilatorul extern. Trezirea dureaz! un interval de timp egal cu cel necesar pentru un RESET. modul inactiv, n care se intr! cu aceea$i instruc"iune, dar pozi"ionnd un bit din registrul de control. n acest mod unitatea central! este oprit!, dar timerul, ceasul de gard! $i sistemul de ntreruperi continu! s! func"ioneze. O ntrerupere intern!, una extern! sau un RESET trezesc circuitul.
Circuitul admite ca surse de tact: un cristal de cuar" sau un rezonator ceramic, pentru aplica"ii cu preten"ii la stabilitatea frecven"ei, (elemente conectate la pinii Xtal# $i Xtal2); un generator extern la un pin I/O (PB3); generatorul RC intern, la #MHz. Selec"ia sursei ceasului pentru tact intern sau extern se face cu un bit n memoria FLASH. Circuitul este programat implicit pentru tact extern. Lucrul cu ceas intern determin! posibilitatea utiliz!rii acestor MC cu componente externe extrem de pu"ine. Timerul care echipeaz! circuitele AT902323 este un timer pe 8 bi"i cu un registru de prescalare pe #0 bi"i. Timerul poate fi folosit cu tact intern (tactul sistemului divizat cu 8, 64, 256 sau #024) sau cu tact extern. Sursa de tact pentru timer poate fi ceasul sistemului, ceasul prescalat sau un tact extern. Func"ionarea timerului este controlat! de bi"i din din dou! registre (registru de m!$ti pentru ntreruperi $i registru de control al timerului). La dep!$ire, num!r!torul poate cere o ntrerupere.
Ceasul de gard! are ca $i tact un oscilator separat, integrat n MC $i este complet separat de timer. Ca $i timerul, ceasul de gard! are posibilitatea de prescalare. Controlul ceasului de gard! se face cu registrul WDTCR (Watchdog Timer Control Register). Pentru a evita dezactivarea ntmpl!toare a ceasului de gard!, acesta trebuie dezactivat cu o secven"! de program specific!.
EEPROM este accesibil n spa"iul I/O, prin urm!toarele registre: registru de adrese EEPROM; registru de date EEPROM; registru de control EEPROM, care comand! sensul transferului.
MC ATMEL AVR au linii I/O de uz general (AT902323 are 3 linii, AT902343 are 5 linii, iar modelul AT90S#200 dispune de dou! porturi: B de 8 bi"i $i D de 7 bi"i). Fiecare linie de port poate fi configurat! independent fa"! de celelalte, att ca linie de intrare ct $i ca linie de ie$ire. De asemenea n modul de utilizare ca linie de intrare, fiecare linie poate fi configurat! cu un rezistor de pullup intern ( valoarea aprox 40K ). Fiecare linie de ie$ire poate sus"ine un curent de 20mA (max 40mA valoare limit! absolut!) astfel nct se poate folosi direct la
5. Microcontroller-e RISC
147
comandarea de LED-uri. Fiec!rui port i este alocat un registru de sens, (DDRx, Port x Data Direction). Pinii I/O admit semnifica"ii duble. Programarea memoriei FLASH $i EEPROM se poate face serial, ntr-un mod cu tensiune mare (#2V) $i un mod cu tensiune joas!. Circuitele vin de la fabricant gata de a fi nscrise (au con"inutul FFh n fiecare loca"ie). n modul de programare cu tensiune nalt!, tensiunea de #2V valideaz! programarea, nu are un rol func"ional. Modul de programare n cele 2 variante este ar!tat n figura 5.8.
#2V Ceas de programare serial
AT902323
/RESET XTAL#/PB3 Vcc PB2 PB# PB0
4,5-5,5V Date seriale de ie$ire Instruc"iuni seriale de intrare Date seriale de intrare
GND Tact
AT902323
/RESET XTAL#/PB3 Vcc PB2 PB# PB0
La programarea cu tensiune mare se poate programa memoria FLASH (intrarea pe PB#) $i memoria de date EEPROM (intrarea pe PB0). Pentru programarea memoriei FLASH se trimite nti adresa apoi data (octetul LOW apoi cel HIGH). Confirmarea se ob"ine prin trecerea lui PB2 n HIGH. Memoria EEPROM se programeaz! trimi"nd nti adresa apoi octetul de date, confirmarea fiind pe pinul PB2. Orice loca"ie poate fi citit! folosind instruc"iunea de citire $i adresa, ob"innd pe pinul PB2 con"inutul respectiv. Tactul serial este activ pe front cresc!tor. Scrierea, citirea $i unele comenzi speciale ($tergerea ntregii memorii, scrierea bi"ilor de securitate etc.) se comand! prin trimiterea naintea adresei a codului serial al comenzii respective (se g!se$te n foile de catalog). La programarea cu tensiune mic! se poate programa memoria FLASH $i memoria EEPROM tot serial, prin interfa"a SPI. Datele se nscriu pe frontul cresc!tor a lui SCK. n acest mod de lucru, confirmarea scrierii unei loca"ii se face prin trimiterea n ecou a octetului scris. Comenzile se trimit la fel, prin coduri seriale. Un programator pentru astfel de MC (mod de programare cu tensiune mare) se poate realiza simplu, folosind interfa"a CENTRONICS a unui PC, figura 5.9.
MICROCONTROLLER-e
INTERFA&A CENTRONICS
4,5-5,5V
Memoria este prev!zut! cu posibilitatea de protec"ie a programelor nscrise. Astfel, exist! 2 bi"i de blocare n FLASH care nu pot fi $ter$i dect prin $tergerea ntregului program. Ace$ti doi bi"i pot comanda: dezactivarea unor viitoare program!ri ale memoriei FLASH sau EEPROM; dezactivarea unor viitoare program!ri ale memoriei FLASH sau EEPROM $i blocarea verific!rii.
Memoria mai este prev!zut! cu 2 bi"i care nu pot fi $ter$i (fuzibili) care pot comanda: dezactivarea modului serial de programare; sursa intern! sau extern! pentru tact.
Modelul ATiny #0 este echipat cu un comparator analogic, care compar! valoarea analogic! de la pinul PB0 cu cea de la pinul PB#. Ie$irea comparatorului poate declan$a o ntrerupere. Comparatorul este controlat de un registru de control $i stare. Modelul AT90S4433 este echipat cu 6 canale de conversie A/D pe #0 bi"i. Acest model este un MC cu o echipare superioar!: un timer suplimentar de #6 bi"i cu posibilitatea de comparare, captur! $i generare PWM, un comparator analogic, un canal UART, un convertor A/D pe #0 bi"i cu 6 canale $i un sistem de ntreruperi care admite #4 surse de ntrerupere din care 2 externe. Acest circuit are $i posibiliataea de programare paralel!, deoarece are suficiente linii I/O. Schema bloc a acestui MC este dat! n figura 5.#0.
149
Controller de ntreruperi
ALU PC
Memoria de date
RAM #28 octe"i EEPROM #28 de octe"i
Magistrala de date
SPI
ADC
Timer
Timer #6b
UART
Comparator
Port B
Port C
Port D
Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bi"i de date, cu generarea de rat! de transfer. Canalul serial poate cere ntrerupere la transmisie complet!, registru de transmisie gol sau recep"ie complet!. Recep"ia $i transmisia se fac ca $i la celelalte MC, cu un registru de deplasare pentru serializare/deserializare $i un registru de date. Se poate realiza $i o comunica"ie serial! multiprocesor (Multi- Processor Communication Mode), prin transmisia n mesaj nti a adresei unui destinatar $i apoi a mesajului propriu-zis. Se poate astfel realiza o comunica"ie n care un procesor este MASTER iar celelalte SLAVE. Canalul serial este controlat de un registru de comand! $i stare. Comparatorul analogic, pe lng! ntreruperea pe care o poate genera, poate s! declan$eze o captur! la timerul de #6 bi"i la acest tip de MC. Convertorul A/D este un convertor cu aproxima"ii succesive cu e$antionare memorare $i cu un bloc de multiplexare analogic! pe 6 canale la intrare. Convertorul poate lucra cu conversie singular! sau conversie continu!. Convertorul are pini de alimentare separa"i din exterior $i un pin pentru conectarea tensiunii de referin"!. Ca $i tact de conversie, convertorul accept! tactul sistemului divizat cu un registru de prescalare. Tactul se poate ncadra n valorile optime 50-200kHz.
150
MICROCONTROLLER-e
La terminarea unei conversii convertorul poate cere o ntrerupere. Schema bloc a convertorului este dat! n figura 5.##.
Multiplexor analogic
Cerere de ntrerupere E$antionare Memorare
Intr!ri analogice
START ADCSR
Tact conversie
BUS INTERN
Registru de prescalare
CK
Prin registrul ADMUX se comand! cu 3 bi"i selec"ia unui canal din cele 6. Registrul de control $i stare ADCSR poate declan$a o conversie prin pozi"ionarea unui bit. Func"ionarea convertorului poate fi validat!/invalidat!. Prin registrul de control se poate programa $i rata de prescalare. Pentru a mic$ora perturba"iile introduse de unitatea central! n timpul achizi"iei de date se poate comanda UC n stare inactiv!. Dup! efectuarea conversiei ntreruperea de la convertor va trezi UC (ADC Noise Canceler Function). nscrierea memoriei FLASH $i EEPROM se poate face $i n mod paralel, ceea ce nseamn! o vitez! mai mare de scriere $i un plus de simplitate la programare. Semnalele folosite n acest mod de programare sunt date n figura 5.#2. Pentru nscrierea sau citirea datelor se folosesc 8 linii cu semnifica"ii duble din porturile PC $i PB. /OE stabile$te dac! este vorba de scriere sau citire. Scrierea se face cu strobul /WR. BS selecteaz! octetul mai semnificativ sau mai pu"in semnificativ. Semnalele XA0 $i XA# stabilesc dac! se ncarc! memoria FLASH, sau o adres! a EEPROM, un octet de date sau o comand!. Sunt posibile 9 comenzi:
5. Microcontroller-e RISC
151
$tergere memorie, scriere bi"i de securitate, scriere bi"i fuzibili, scriere FLASH, scriere EEPROM, citire bi"i de identificare, citire bi"i fuzibili $i de securitate, citire FLASH, citire EEPROM. Modul de scriere paralel poate fi u$or realizat prin intermediul interfe"ei CENTRONICS; citirea pentru verificare este mai complicat!.
RDY/BSY /OE /WR BS XA0 XA# +#2V tact
AT90S4433
PD# PD2 PD3 PD4 PD5 PD6 RESET XTAL Vcc PC,PB
Modelele AT90S44#4 $i AT90S85#5 dispun de posibilitatea conect!rii n exterior a unei memorii SRAM suplimentare. Pentru aceasta sunt disponibile la portul A magistrala de adrese (octet mai pu"in semnificativ) $i magistrala de date multiplexate, iar la portul C octetul mai semnificativ al magistralei de adrese. De asemenea sunt disponibile $i semnalele ALE (Address Latch Enable), /RD $i /WR.
5.2.2
Familia ARM
Un nucleu cu arhitectur! RISC de mare performan"! este ARM7DMI. Este conceput cu o arhitectur! von Neumann, cu magistrala de date pe 32 de bi"i, avnd 2 seturi de instruc"iuni (ARM pe 32 de bi"i $i THUMB pe #6 bi"i). Spa"iul adresabil este de 4G. O schem! bloc sumar! a acestui nucleu este dat! n figura 5.#3. Structura UC este pipe line pe 3 nivele; extragere cod, decodificare $i execu"ie. UC poate lucra cu date pe 8, #6 sau 32 de bi"i $i poate executa nmul"iri ntr-un singur ciclu. Nucleul are integrat $i circuitul de testare JTAG $i un emulator n circuit.
Setul de instruc"iuni THUMB pe #6 bi"i este un subset al setului pe 32 de bi"i, cele mai uzual folosite instruc"iuni. n acest fel se salveaz! spa"iu de memorare $i se c$tig! vitez! de prelucrare.
152 Emulator n circuit (Ice Breaker) Unitate central! ARM Magistrala de adrese
Registru pt. adrese
MICROCONTROLLER-e
Bus C Distribuitor de magistrale 37 registre de 32 bi"i Bus A ALU pe 32 de bi"i Controller JTAG Bus B
Decodor ARM
Decodor
THUMB
Pentru a asigura un grad mare de paralelism n UC, exist! mai multe magistrale de leg!tur!. Instruc"iunile sunt analizate $i distribuite decodoarelor corespunz!toare (THUMB sau ARM). UC este echipat! cu un set de 32 de registre $i registre suplimentare pentru nmul"ire. Pentru a se putea conecta o varietate ct mai mare de interfe"e, magistralele sunt accesibile prin distribuitor n mai multe forme: unidirec"ional, bidirec"ional, multiplexat etc.
6
CRITERII DE PROIECTARE
6.1 CRITERIILE PENTRU ALEGEREA UNUI MC
Sunt multe aspecte de care trebuie !inut seama la alegerea unui MC pentru o anumit" aplica!ie. Alegerea unui MC potrivit poate duce la succesul proiectului, a#a cum o alegere nepotrivit" poate duce la e#ecul proiectului. Fiecare cititor trebuie s" adapteze aceste criterii nevoilor sale #i scalei proprii de valori. Obiectivul urm"rit n alegerea unui MC este ob!inerea calit"!ii dorite cu un cost ct mai sc"zut. Calit"!ile dorite nseamn" performan!", fiabilitate, calit"!i EMC (de compatibilitate electromagnetic" cu mediul), iar costul total include costurile cercet"rii, proiect"rii, construc!iei, test"rii, repar"rii produsului. n primul rnd se pune problema stabilirii func!iei pe care MC trebuie s-o ndeplineasc" n sistem. Alegerea din catalog a unui MC trebuie f"cut" n ideea a ct mai pu!in hardware suplimentar (din motive economice). Procesul de c"utare este dificil din cauza num"rului foarte mare de tipuri de MC disponibile pe pia!". Munca de c"utare este ajutat" de bazele de date din Internet, a#a cum este baza de date de la www.questlink.com . Dup" stabilirea MC optim se verific" pre!urile, dac" este disponibil, suportul acordat de fabricant, existen!a uneltelor de dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea de a fi g"sit pe pia!" (optenabilitatea), mai ales n zone n care circula!ia m"rfurilor este destul de greoaie. Criteriile pentru alegerea unui MC sunt, n ordinea importan!ei:
$.Posibilitatea folosirii n aplica!ia dat" ! este suficient un MC sau sunt necesare circuite suplimentare; ! liniile I/O sunt suficiente (un num"r prea mic nseamn" c" aplica!ia nu se poate face cu acest MC, iar un num"r prea mare nseamn" un cost excesiv); ! exist" toate interfe!ele solicitate de aplica!ie: I/O serial, convertoare A/D, D/A #i nu exist" interfe!e n plus; ! exist" capacitatea de memorare suficient": RAM, ROM; ! MC are viteza suficient" pentru aceast" aplica!ie. Se verific" timpul necesar rul"rii programului care trebuie s" fie mai mic dect intervalul de timp n care trebuie s" reac!ioneze MC;
154
MICROCONTROLLERE
! alimentarea MC poate fi f"cut" din aplica!ie (este posibil ca aplica!ia s" fie portabil", atunci este nevoie de un MC care s" func!ioneze la 3V; ! pre!ul acestui MC este bun (acceptabil) pentru aplica!ia respectiv". 2. Optenabilitatea MC ! trebuie s" fie disponibil n cantit"!i suficiente; ! trebuie s" fie n produc!ia actual", dar #i n viitor pentru posibilitatea aprovizion"rii n viitor; ! disponibilitatea unor accesorii (convertoare A/D, D/A, alimentatoare etc). ! ! ! ! ! ! ! ! ! ! ! ! 3.Disponibilitatea suportului de dezvoltare asambloare; compilatoare; debuggere; module de evaluare; emulatoare n circuit; analizoare logice; 4. Suport din partea constructorului documenta!ie tehnic"; buletine de aplica!ii; service prin telefon (BBS); rapoarte despre probleme de func!ionare; software de utilizare; dac" MC este folosit #i de al!i utilizatori, atunci sunt formate grupuri de lucru care pot oferi ajutor. 5.Seriozitatea constructorului dac" este demonstrat" competen!a lui ; stabilitate #i fiabilitatea MC realizate; viteza de livrare; num"r de ani ca #i constructor #i rezultate financiare.
! ! ! !
Un argument pentru alegerea unui tip de MC este existen!a unui modul de evaluare. Pentru a promova propriile MC, mul!i furnizori au creat Kit-uri de evaluare care con!in pl"ci de evaluare #i un soft minimal cu care se poate nv"!a utilizarea MC #i se pot pune la punct aplica!ii. Un kit con!ine de regul" un program monitor pentru calculator PC, un program de transfer al datelor spre placa de evaluare (prin interfa!a RS232 sau CENTRONICS), un asamblor #i un compilator C. Toate kiturile sunt nso!ite de documenta!ie. Cteva din modulele de evaluare sunt: Motorola EVBU, EVB, EVM, EVS sunt echipate cu MC 68HC$$. Dallas Semiconductor DS5000TK sunt echipate cu MC Dallas din seria DS5000. Philips #i CEIBO DS750 sunt echipate cu 87C75x, echivalent cu 805$.
6. Criterii de proiectare
155
American Educational Systems AES-5$(805$), AES-$$(68HC$$), AES88(8088) con!in o tastatur", un afi#aj cu LCD #i documenta!ie. Firma Texas Instruments pune la dispozi!ia celor interesa!i un set de accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS #i unelte de dezvoltare (CDT). Aplica!ia poate fi scris" n limbajul C, de exemplu pe un PC (utiliznd orice editor) #i codul pentru TMS va fi generat de link editor. Codul poate ajunge la MC prin intermediul interfe!ei seriale RS232. XDS analizeaz" softul creat, (chiar n domeniul timp) #i permite punerea la punct (chiar rularea lui pas cu pas). Exist" firme specializate n construirea unor module de evaluare cu diferite MC, a#a cum este de exemplu PHYTEC (www.phytec.de). Fiecare furnizor de MC pune la dispozi!ia clien!ilor un Kit de start (Starter Kit), care este un instrument foarte valoros pentru a putea ncepe lucrul cu un anumit tip de MC. Kit-ul de start con!ine o plac" cu soclu #i hard-ul aferent pentru programarea ini!ial" a MC, uneori programarea EPROM-ului, interfa!a #i cablul de leg"tur" la PC, documenta!ie #i programe (asamblor, link editor, debugger) dar nu con!ine de regul" un MC. Pre!ul unui astfel de Kit porne#te de la $00USD (www.schuricht.de , www.farnell.com ). Un alt argument pentru alegerea unui MC este comoditatea folosirii lui. Unele MC, a#a cum este Motorola 68HC$$A8P$ are nscris n ROM un program monitor (numit Buffalo). Pentru punerea n func!iune este nevoie doar de o leg"tur" serial" RS232 cu un PC (este nevoie de o conversie de nivel) #i se poate lucra de pe PC cu monitorul MC, rulnd programele n RAM-ul MC #i stocndu-le n EEPROM. Pe Internet exist" subprograme scrise n Buffalo. Un alt MC, 8052AH-BASIC con!ine un BASIC. MC Dallas din seria DS5000 are nevoie doar de un cristal pentru oscilator #i este gata de lucru. MC con!ine memorie RAM static alimentat" de la o baterie #i programul #i datele sunt astfel nevolatile.
6.2
Ne permitem s" prezent"m o organigram", (figura 6.$) ce ncearc" s" sugereze posibilele etapele pe care proiectantul de sistem ar fi recomandat s" le urm"reasc" n dezvoltarea soft-ului dedicat unei aplica!ii. Trebuie s" men!ion"m c" etapele 3,4 #i 5 pot fi iterate. Ele duc la perfec!ionarea func!ion"rii sistemului.
156
START
MICROCONTROLLERE
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
Tendin!a produc"torilor de MC de a sc"dea pre!urile duce la r"spndirea din ce n ce mai mare a MC #i la crearea a noi #i noi aplica!ii. Mic#orarea dimensiunilor duce la cre#terea frecven!ei de lucru. Cu ct frecven!a cre#te, cu att cre#te posibilitatea interferen!elor electromagnetice (EMI) #i se pune problema proiect"rii n vederea compatibilit"!ii electromagnetice (EMC). Apar dou" categorii de probleme: aplica!ia poate genera perturba!ii (conduse sau radiate) sau poate fi susceptibil" la perturba!ii (conduse sau radiate). Descoperirea unor probleme de EMI n faza final" de produc!iei a aplica!iei poate fi costisitoare deoarece s-ar putea s" fie necesar" reproiectarea aplica!iei; de aceea este necesar ca proiectarea ini!ial" s" se fac" n vederea EMC. Perturba!iile sunt generate de armonicile semnalelor digitale din circuit. Ele pot fi radiate de buclele de cablaj care se comport" ca #i antene sau sunt conduse spre sursa de alimentare. Orice cale inductiv" sau capacitiv" pe traseul acestor armonici poate provoca vrfuri de tensiune sau c"deri de tensiune. Pentru un sistem cu MC perturba!iile sunt generate de regul" de cablaj, deoarece circuitele integrate au dimensiuni prea mici pentru a putea emite. Semnalul cu frecven!a cea mai mare este tactul sistemului generat cu un circuit oscilant cu cuar!. Datorit" faptului c" forma semnalului este apropiat" de forma sinusoidal", con!inutul de armonici este mic. Dac" tactul este adus din exterior, se impune aten!ie m"rit" pentru a reduce buclele de circuit emisive. Pentru un sistem care are memorii externe cuplate la MC, liniile de transfer pot fi emisive, deoarece frecven!ele de tranzi!ie sunt mari. Susceptibilitatea sistemelor cu MC este creat" de natura sincron" a MC. Un tact cu nivel electric insuficient poate produce o eroare. Erorile sistemelor cu MC pot fi grupate n:
$. aplica!ia are o eroare dar se corecteaz"; 2. aplica!ia are o eroare dar o ntrerupere sau un RESET corecteaz" func!ionarea; 3. aplica!ia are o eroare #i oprind #i repornind sistemul, eroarea dispare; 4. aplica!ia are o eroare permanent" datorat" unei componente defecte.
Problemele din categoria $ #i 2 pot s" nici nu fie observate de beneficiar.
Performan!ele EMC pot fi mbun"t"!ite acordnd aten!ie deosebit" urm"toarelor aspecte de proiectare:
desenul cablajului imprimat; ceasul de gard" programarea defensiv"
158
MICROCONTROLLERE
0,$
VSS
Mas" flotant"
n acest caz se creeaz" o linie de mic" impedan!" spre mas" prin re!eaua de alimentare de la VDD. La acest tip de alimentare se recomad" decuplarea liniilor de frecven!" nalt" spre linia de +5V. Un circuit critic este cel de generare a tactulului. Orice impuls parazit care apare modific" factorul de umplere de 50% al semnalului de tact #i instruc!iunea nu se execut" corect, circuitul ie#ind din program. O astfel de situa!ie singular" poate fi rezolvat" de ceasul de gard" care comand" un RESET, dup" care MC ruleaz" din nou corect. Se recomand" ca toate componentele aferente gener"rii tactului s" fie situate ct mai aproape de circuit, iar dac" este posibil toate traseele s" fie nconjurate de un traseu lat de gard". Se recomand" o decuplare a cristalului la linia de cea mai mic" impedan!" (de regul" masa) cu condensatori SMD. Se recomand" s" se p"streze o distan!" mare ntre liniile de frecven!" mare #i circuitul de tact. Este de asemenea important" protec!ia pinilor de intrare, cum ar fi RESET sau IRQ. Un pin n aer poate comuta dac" n vecin"tatea lui sunt linii de nalt"
6. Criterii de proiectare
159
frecven!". Se recomand" decuplarea acestor pini cu condensatori $-$0nF ct mai aproape de circuit.
160
MICROCONTROLLERE
la fiecare reset al sistemului. Pot fi implementate soft #i alte func!iuni care s" permit" men!inerea coeren!ei sistemului!
7
APLICA!II
7."
S! se comande utiliznd un sistem dotat cu microcontroller un piston hidraulic (actuator) ntr-o mi"care de avans "i alta de retragere, comenzi transmise prin intermediul unei linii de conexiune seriale. Frecven#a de transfer pe interfa#a serial! va fi de $9200 bauds (bi#i pe secund!), iar frecven#a de ceas a sistemului va fi de $$059000Hz. Cuvintele de comand! "i control sunt formate dintr-un singur caracter n format ASCII "i comenzile pot con#ine "i parametrii.
L2
"62
MICROCONTROLLERE
Cuvintele cheie admise de c!tre sistem pentru controlul s!u sunt: A - comand! de avans a pistonului, respectiv comand! mi"carea de la limitatorul $ c!tre limitatorul 2 R - comada de retragere a pistonului, respectiv comand! mi"carea de la limitatorul 2 c!tre limitatorul $ S - comand! de citire a st!rii actuatorului care va ntoarce urm!toarele ecouri: $. D - preg!tit s! recep#ioneze comand! (reaDy) 2. B - ocupat cu execu#ia unei comenzi (Busy) P comand! de aflare a pozi#iei actuatorului (Position), care va ntoarce urm!toarele ecouri: $. E avansat, actuatorul atinge limitatorul 2 2. I retras, actuatorul atinge limitatorul $ 3. M actuator aflat n mi"care
Structura electro-hidraulic! a sistemului de comand! "i control include elementele din figura $. "i anume: pompa de presiune pentru circuitul hidraulic, care porne"te simultan cu comand! dorit!; comanda pompei este realizat! de c!tre sistem n logic! pozitiv! ($ logic = pompa ac#ionat!, 0 logic = pompa oprit!). dou! electro-valve cu dou! c!i care asigur! accesul presiunii c!tre camerele pistonului hidraulic comandate tot n logic! pozitiv!, ceea ce nseamn! c! aplicnd un $ logic pe linia de comand!, nalta presiune a pompei are acces c!tre camera corespunz!toare a pistonului, iar aplicnd un 0 logic pe linia de comand! presiunea din camera pistonului este eliberat! c!tre rezervorul de fluid. dou! limitatoare de cap!t de curs! care func#ioneaz! n logic! negativ! "i care permit detectarea st!rii actuatorului. interfa#a serial! RS232C cu care sistemul de comand! este conectat la sistemul ierarhic superior, spre exemplu la un PC.
7. Aplica#ii
"63
AT89C205"
Tx P3.
P3. P3.
L" L2
Implementarea software a sistemului implic! scrierea programelor care s! permit! execu#ia func#iunilor sistemului propus. Ca sistem determinist, acesta trebuie s! aibe o stare ini#ial! bine definit!, de aceea vom considera c! aceasta corespunde pozi#iei cu pistonul retras aflat pe limitatorul L$, dar pe lng! aceste elemente ce #in de procesul n care sistemul este utilizat, va trebui s! analiz!m "i s! set!m parametrii ini#iali ai microcontroller-ului. Pentru aceasta, vom urm!ri starea ini#ial! a UC, prezentat! n catalogul produsului (vezi figura 7.3), iar apoi va trebui ca s! scriem rutina de ini#ializare de sistem pentru a preciza complet starea microcontroller-ului. Organizarea programelor care determin! func#iunile sistemului ilustreaz! principiile program!rii structurate, astfel: programul de ini#ializare este apelat din programul principal, func#iunile sistemului, cea de comunica#ie serial!, cele de comand! avans "i retragere piston, cele de specificare a st!rii sistemului "i cele de oprire pe limitatoare a acestuia sunt specificate prin rutine de servire a ntreruperilor (ISR Interrupt Service Routines).
"64
MICROCONTROLLERE
Numele SFR PC ACC B PSW SP DPTR P0-P3 IP IE TMOD SCON SBUF PCON
Valori de RESET
00H 00H 00H 00H 07H 00H FFH xx000000B 0xx00000B 00H 00H Nedeterminat 0xxx0000B
".
Rutina de ini%ializare, INIT, va realiza urmatoarele: Umple toate loca#iile memoriei interne a microcontroller-ului cu 0. (Fill Memory with zero) Aduce n pozitia de referin#! (pistonul atinge limitatorul L$) sistemul. Programeaz! urm!toarele registre de func#ii speciale (SFR Special Functions Registers) ! PSW (Program Status Word Register) ! PCON (Power On Control Regsiter) ! TMOD (Timers Mode Register) ! TCON (Timers Control Register) ! SCON (Serial Control Register) ! IE (Interuppt Enable Register) Intr! n bucla de a"teptare a comenzilor de la sistemul ierarhic superior, comenzi ce vor fi transmise via interfa#a serial!.
2.
Rutinele de serive a ntreruperilor vor fi concepute pentru a implementa func%iunile ce necesit& sincronizarea func%ion&rii sistemului cu elementele externe acestuia ce sunt fie comandate fie reprezint! senzori sau traductoare ale sale. Astfel, va trebui s! satisfacem urm!toarele: ! Func#ia de recep#ie a mesajelor de comand! sau a cererilor de date de stare din partea sistemului ierarhic superior. Implementarea acesteia se refer! la interfa#a serial! a sistemului "i necesit! analiza mesajului receptionat, comanda corespunz!toare a sistemului sau emiterea ecoului la comenzile Cerere de Stare (Status Request) din partea sistemului ierarhic superior.
7. Aplica#ii
"65
! Func#ia de oprire la atingerea limitatoarelor a comenzii actuatorului electrico-hidraulic. 3. Programul principal, este gndit s& a'tepte o comad! din partea sistemului ierarhic superior sau s! a"tepte ndeplinirea acesteia.
OBSERVATIE: Aceast! organizare a programelor poate fi utilizat! mai ales atunci cnd sistemul controlat nu este unul extrem de rapid, respectiv noi, prin intermediul microcontroller-ului putem ndeplini restric#iile impuse unui sistem de comand! n timp real, adic! putem oferi semnalele de comand! "i cele de control ca oportune, respectiv ele verific! teorema e"antion!rii a lui Shannon. n ceea ce nsemn! implementarea, putem alege ntre dou! variante: a) Cea mai sus men#ionat! care permite ca scrierea func#iunilor de comand! s! fie facut! direct n cadrul ISR b) Cea prin care rutinele de servire a ntreruperilor ISR consemneaz! modific!rile de stare n cadrul sistemului n zona dedicat! variabilelor de stare, iar programul principal analizeaz! ciclic starea sistemului, "i func#ie de aceasta execut! comenzile corespunz!toare ei. Prima variant!, reflect! principiile program!rii structurate, fiecare ISR asigur! implementarea unei func#iuni. Aceast! variant! permite cea mai rapid! reac#ie din partea sistemului, permite ierarhizarea reac#iilor n raport cu cerin#ele impuse de e"alonarea n timp a acestora, dar necesit! o ra#ional! atribuire a liniilor de ntrerupere corespunz!tor evenimentelor principale din sistem "i este aplicabil! n special n cadrul unor sisteme de mic! amploare. A doua variant! asigur! analiza st!rii sistemului n cadrul programului principal, analiza fiind implementat! prin intermediul unor instruc#iuni de decizie, majoritatea calate pe bit, transferul informa#iilor se face prin utilizarea unei zone comune de memorie ce formeaz! leg!tura dintre lumea extern! (elementele aflate n afara sistemului sau cele comandate: actuator, pomp!, electrovalve, limitatoare, etc) "i func#iunile pe care sistemul este obligat s! le implementeze. Aceasta variant! permite controlul unor sisteme ample cu multe surse de ntrerupere "i multe elemente de comand! "i control- dar viteza de reac#ie este variabil! neputnd fi anticipat! aprioric, c!ci evenimentele ce au loc n afara sistemului vor fi consemnate sincron (adic! foarte curnd dup! producerea lor), dar analiza "i reac#ia sistemului la acestea va apare mai trziu, func#ie de instruc#iunea curent! pe care sistemul o execut! la momentul producerii evenimentului respectiv. S! analiz!m pe rnd care vor fi informa#iile pe care va trebui s! le scriem n cadrul SFR pentru a ini#ializa sistemul. PSW CY MSB AC F0 RS" RS0 OV F" P LSB
"66
MICROCONTROLLERE
CY carry flag este setat atunci cnd n urma unei instruc#iuni aritmetico-logice apare o opera#ie de transport sau mprumut AC Auxiliary Flag utilizat tot n cadrul unor instruc#iuni aritmetico-logice F0 User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific RS$ "i RS0 codific! natura (binar) bancul #int! de registre generale astfel: 00 specific! bancul 0 de registre generale 0$ specifica bancul $ de registre generale $0 specifica bancul 2 de registre generale $$ specifica bancul 3 de registre generale OV este setat auotmat la apari#ia unei dep!"iri n cadrul unei opera#ii de transfer a datelor F$ User definible Flag poate fi scris "i citit de c!tre utilizator ca indicator specific P Parity Flag specific! paritatea byte-ului de informa#ie prelucrat PCON SMOD GF" GF0 PD IDL
SMOD (Serial Mode) setat (dac! este fixat pe $ logic) multiplic! cu 2 frecven#a de emisie/recep#ie serial! a datelor GF" (General Flag 1), este un bit ce poate fi scris sau citit de c!tre utilizator prin program GF0 (General Flag 0), este un bit ce poate fi scris sau citit de c!tre utilizator prin program PD (Power Down Flag) Setarea acestui bit trece microcontroller-ul n starea de putere redus! blocnd func#ionarea oscilatorului intern "i aducnd n starea high FFH ie"irile porturilor sale. Informa#iile stocate n memoria intern! a procesorului, abstrac#ie f!cnd cele din registrele speciale (SFR) sunt men#inute, chiar cnd tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul n curs va fi oprit imediat dup! efectuarea instruc#iunii curente n care a ap!rut setarea acestui flag. Acest flag are preceden#! n raport cu flag-ul IDL (Idle) atunci cnd cele dou! flag-uri sunt setate simultan. Ie"irea din starea PD se face prin aplicarea unui semnal de Reset. IDL (IDLE Flag) Setarea acestui flag duce la trecerea ntr-o stare de consum redus a microcontroller-ului, stare n care frecven#a de ceas a sistemului este aplicat! doar elementelor periferice, controller-ul de ntreruperi, interfa#a serial!, timer-ele etc. Porturile r!mn n starea anterioar! set!rii bitului IDL, iar semnalele ALE "i PSEN# trec n $ logic. Revenirea n stare de lucru se poate realiza pe dou! c!i: Prin generarea extern! a unei ntreruperi, aceasta va reseta flag-ul IDL iar la terminarea ei, prin program, dup! instruc#iunea RETI putem seta din nou acest flag, sau printr-un Reset hardware, caz n care durata minim! a impulsului de Reset trebuie s! dep!"easc! 24 de ciclii de ceas. Aceste dou! st!ri Power Down "i Idle Mode sunt st!ri n care consumul microcontroller-ului este redus "i pot fi exploatate atunci cnd aplica#ia pe care vrem s! o realizam corespunde unui aparat portabil care trebuie s! protejeze la maximum resursele energetice.
7. Aplica#ii
"67
TMOD GATE C/T# M" M0 GATE C/T# M" M0 Timer " Timer0
Registrul TMOD nu poate fi accesat dect pe byte, deci scrierea unei informa#ii n acest registru poate fi f!cut! prin instructiuni de tipul: MOV TCON,#nnH sau MOV @R0,#nnH unde R0=#TCON. Aten#ie, aceast! instructiune poate scrie n memoria intern! extins!, dac! microcontroller-ul prezint! o astfel de memorie (vezi PCB80C552 "i alte analoge lui). Modurile de func#ionare ale canalelor temporizatoare/num!r!toare sunt n num!r de 4 "i sunt codate natural prin simpla scriere a num!rului binar corespunz!tor canalului n bi#ii 0 "i $ pentru Timer0 sau 4 "i 5 pentru Timer$. Iat! care sunt aceste moduri: Modul 0, permite temporizarea$ sau num!rarea impulsurilor2 aplicate la intrarea canalului respectiv dispunnd de: un divizor cu 25 =32 (prescale) "i apoi divizarea programat! cu o constant! de timp ce poate fi format! din orice num!r reprezentabil pe 8 bi#i, deci cuprins ntre 0 "i 255, 0 corespunde unei diviz!ri cu 256. Num!ratoarele canalului temporizator num!ra n sens direct, adic! fiecare front negativ al unui impuls aplicat la intrare determin! incrementarea num!r!torului. L!#imea minim! a unui impuls este de $/24 din frecven#a de ceas a sistemului. Structura canalului temporizator num!r!tor este dat! n figura 4. Modul ", asigur! temporizarea sau num!rarea impulsurilor aplicate pe intrarea canalului, constanta de timp fiind un num!r cuprins ntre 0 "i 65535 cu 0 corespunz!tor lui 65536. Modul 2, permite divizarea frecven#ei de intrare sau num!rarea impulsurilor aplicate cu un num!r reprezentabil pe 8 biti, aceasta constant! este re#inuta n THx "i este renc!rcat! automat n TLx atunci cnd canalul num!r!tor efectueaz! tranzi#ia de stare din $$$$$$$$B n 00000000B. Modul 3, este diferit la canalul 0 n raport cu canalul $. Pentru canalul 0 setarea acestui mod permite mp!r#irea celor dou! num!r!toare TL0 "i TH0 ntre pinii de comand! ai canalelor 0 "i $. Temporizatoarele/num!r!toarele canalului 0 low pot fi comandate de c!tre pinii corespunzatori canalului 0 (TL0), "i temporizatoarele/num!r!toarele canalului 0 high de c!tre pinii corespunz!tori ai canalului $ (TH0). Dac! program!m canalul $ n modul 3 aceasta duce la blocarea acestuia "i re#inerea informa#iilor de la momentul respectiv. Utilizarea canalului 0
Prin temporizare se n#elege m!surarea unui interval de timp ca multiplu al frecven#ei de ceas a sistemului (microcontroller-ului). In acest caz impulsurile num!rate de canalul respectiv provin de la ceasul de sistem, care n cazul circuitului AT89C205$ este divizat cu $2 "i aplicat pe intrarea de num!rare. 2 Num!rarea impulsurilor ce sunt aplicate pe o intrare accesibil! din exterior (vezi pinii T0 sau T$). Aceste impulsuri pot proveni de la o surs! extern! de semnal.
"68
MICROCONTROLLERE
Registrul TCON (Timer Control) permite modificarea set!rilor bit cu bit, semnifica#ia acestora o detaliem n continuare: TFx, exprim! starea canalului temporizator corespunz!tor. Setarea se realizeaz! hardware, automat la trecerea de la starea $$$$B la starea 00..00B a num!r!toarelor canalului respectiv (overflow). Bi#ii TRx seta#i/reseta#i permit sau respectiv inhib! soft poarta de control ce asigur! accesarea num!r!toarelor de c!tre semnalul de intrare al canalului respectiv. Bi#ii IEx se seteaz! automat (hardware) atunci cnd un front descresc!tor apare pe linia de ntreruperi externe corespunz!toare "i sunt reseta#i tot automat la servirea ntreruperii. (la intrarea n ISR). Bi#ii ITx seta#i/reseta#i stabilesc dac! intr!rile corespunz!toare ntreruperilor externe de stare vor fi sensibile pe frontul descresc!tor al semnalului, respectiv pe nivelul logic zero. n cazul n care bi#ii respectivi (ITx) sunt reseta#i, dac! semnalul extern aplicat pe intr!rile INTx este de durat! mai mare dect durata ISR corespunz!toare, la sfr"itul ISR se va genera o nou! ntrerupere corespunz!toare respectivului canal.
7. Aplica#ii
"69
SM0 'i SM" seteaz! unul dintre cele patru moduri distincte n care interfa#a UART a microcontroller-ului poate func#iona. Detalierea acestor moduri este realizat! n continuare: Modul 0, corespunz!tor combina#iei 00 a bi#ilor respectivi, permite serializarea octe#ilor ce sunt transmi"i "i receptiona#i semi-duplex pe linia RxD. Linia TxD este utilizat! pentru transferul semnalului de ceas serial, n acest caz $/$2 din frecven#a de ceas a microcontroller-ului. Modul ", corespunz!tor combina#iei $0 a bi#ilor respectivi, asigur! transferul fullduplex asincron al informa#iilor, respectiv $ bit de start (0), 8 bi#i de date "i n final un bit de stop ($). Frecven#a de transmisie este variabil!, ea fiind setat! de c!tre canalul $ temporizator corespunz!tor frecven#ei de apari#ie a st!rii overflow. Modul 2, corespunz!tor combina#iei 0$ a bi#ilor respectivi, asigur! transferul asincron al informa#iilor cu $ bit de start (0), 8 bi#i de date, un bit programabil, care poate fi chiar bitul de paritate "i un bit de stop ($). La transmisie bitul 9 este re#inut n loca#ia TB8, iar la recep#ie acesta este memorat n RB8. Rata de transfer este programabil! la $/32 sau $/64 din frecven#a de ceas a sistemului. Modul 3, corespunz!tor combina#iei $$ a bi#ilor respectivi, asigur! transferul asincron al informaiilor ntr-un format analog celui din modul 2 cu excep#ia faptului c! rata de transfer este variabil! "i setat! de c!tre frecven#a programat! pentru canalul $ al circuitului temporizator intern al microcontroller-ului. Bitul SM2 permite validarea unui mod special de comunica#ie via interfa#a serial! USART "i anume a modului prin care pe acela"i bus pot fi prezente mai multe sisteme care pot recepta informa#ia. n acest caz, al 9-lea bit poate fi utilizat ca bit de specificare a tipului de informa#ii ce sunt transmise. Astfel, setnd bitul SM2, poate fi generat! o ntrerupere atunci cnd "i bitul al 9-lea transmis este $ (spre exemplu), ceea ce va determina analiza de c!tre sistemul receptor a informa#iilor "i rejectarea acestora atunci cnd cuvntul de adresare respectiv nu corespunde propriei adrese. Bitul REN permite validarea ntreruperilor la recep#ie atunci cnd este setat, ceea ce face ca la recep#ia bitului de stop, corespunz!tor formatului de transmisie specificat, s! se genereze o ntrerupere "i totodat! s! se seteze bitul RI. Bitul TI este setat harware la ncheirea transferului unei informa#ii via interfa#a serial!, caz n care dac! ntreruperile corespunz!toare acesteia au fost validate are loc transferul programului c!tre ISR corespunzatoare. Resetarea acestui bit cade n responsabilitatea programatorului, acesta trebuind s-o efectueze n cadrul ISR. Bitul RI semnaleaz! recep#ia complet! a unit!#ii de informa#ie, via interfa#a UART. La recep#ia bitului de stop, flag-ul RI este automat (hardware) setat. Programatorul are obliga#ia ca n ISR corespunz!toare recep#iei datelor s! "tearg! bitul RI, pentru a reancla"a mecanismul de semnalizare a recep#iei datelor pe UART.
"70
MICROCONTROLLERE
Acest registru specific! sursele de ntreruperi admise de microcontroller care vor putea genera ntreruperi. Astfel: IE0 corespunde liniei ntreruperii externe de stare INT0 TF0 corespunde st!rii timer 0 overflow IE$ corespunde liniei ntreruperii externe de stare INT$ TF$ corespunde st!rii timer $ overflow SI corespunde ntreruperilor ce provin de la unitatea UART integrat! pe microcontroller. Registrul IE permite validarea individual! a acestora, dar pentru ca o ntrerupere s! se declan"eze este necesar ca bitul EA s! fie obligatoriu setat. Priorit!#ile n servirea ntreruperilor sunt stabilite de c!tre programator, fiind permise dou! nivele de prioritizare a ntreruperilor: unul superior (high) setat prin nscrierea unui $ logic n dreptul sursei de ntrerupere respective (vezi structura pe surse de ntreruperi a registrului IP - Interuppt Priority Register, este analog! celei a registrului IE), "i restul inferior (low). Sursa de prioritate nalt! va fi capabil! s! ntrerup! o rutin! de servire ISR corespunz!toare unei surse de nivel de prioritate low, dar nu "i invers. Dac! simultan apar mai multe ntreruperi avnd acela"i nivel de prioritate (low), ordinea de analiz! a cererilor se face de la IE0 c!tre SI. Odat! ncheiat! analiza structurii SFR s! specific!m informa#iile adecvate aplica#iei noastre. Iat!-le: In PSW vom scrie: 00000000B. In PCON vom scrie: "0000000B set!m SMOD pentru multiplicarea cu doi a frecven#ei de emisie pe interfa#a serial!. In TMOD vom scrie: 00$00000B, respectiv vom programa n modul 2 temporizatorul $ cu autorenc!rcarea constantei de timp, iar canalul 0 l vom men#ine n modul 0. Constanta de timp o vom calcula dup! ce vom seta "i parametrii interfe#ei UART, respectiv vom transmite 8 bi#i/caracter, la $9200 bauds, cu un bit de start "i unul de stop. n consecin#! n SCON vom scrie: SCON : 0"0"0000B, adic! vom alege modul $ de func#ionare "i vom valida recep#ia caracterelor pe interfa#a serial!. n acest caz, calculul constantei de timp se va face utiliznd formula: Baud Rate=2SMOD/32*fCLK/($2*(256-TH$)). Rezult!, nlocuind n formul! valoarea de 253, respectiv FDH, respectiv """"""0"B ce va trebui nc!rcat! n TH$ drept constanta de timp. n registrul IE vom scrie informa#ia: "00"0000B corespunz!toare st!rii ini#iale a sistemului cnd acesta va trebui doar s! accepte recep#ia comenzilor de la sistemul ierarhic superior.
7. Aplica#ii
"7"
Iat! rutina de ini#ializare a sistemului: INIT: MOV R0,#7FH ;ncarc! n registrul R0 limita superioar! a memoriei interne LOOP0: MOV @R0,#0H ;Scrie ndirect 0 n loca#ia adresat! prin pointer-ul R0 DJNZ R0,LOOP0 ;Efectueaz! umplerea cu zero a memoriei interne a controller-ului LOOP$: JNB P3.2,START_POSITION ;Testare stare piston, Dac! atinge limitatorul L$, sistemul este n pozi#ia de ;referin#! SETB P3.6 SETB P3.5 CLR P3.7 ;Comand! Electrovalva $ "i pompa, "i anuleaz! comanda pentru Electrovalva 2 JMP LOOP$ START_POSITION: SETB STATUS0 MOV PSW,#00H MOV PCON,#80H MOV TMOD,#20H MOV TH$,0FDH SETB TR$ MOV SCON,#50H MOV IE,#90H ;Setarea st!rii ini#iale a microcontroller-ului implic! validarea doar a ntreruperilor ;UART RET Rutina de servire a ntreruperilor corespunz!toare UART va trebui s! realizeze urm!toarele: $. S! citeasc! informa#ia recep#ionat! de pe linia serial!. 2. S! analizeze informa#ia, "i func#ie de aceasta s! reac#ioneze astfel: Dac! este vorba de o comand! s! ini#ieze execu#ia acesteia. Dac! este vorba de o cerere de stare a microcontroller-ului din partea sistemului ierarhic superior s! ini#ieze transferul acesteia. Pentru a rezolva aceast! func#iune va trebui s! introducem o variabil! local! de stare STATUS, avnd structura prezentat! mai jos, actualizat! de fiecare dat! cnd are loc o schimbare a st!rii de c!tre rutinele de servire a ntreruperilor ce asigur! sincronizarea func#ion!rii unit!#ii centrale.
"72
MICROCONTROLLERE
Bitul L$ este setat la atingerea limitatorului L$, n rest este resetat Bitul L2 este setat la atingerea limitatorului L2, n rest este resetat Bitul CDA este setat la ini#ierea unei comenzi de avans sau retragere "i resetat n rest, la sfr"itul mi"c!rii. Rutina de servire a ntreruperilor din partea UART (ISR_SI) asigur! tratarea fiec!rui cuvnt de comand! dintre cele admise de protocolul instituit. Loca#iile STATUS asigur! memorarea st!rii sistemului. n acest sens, asamblorul permite rezervarea de spa#iu de memorie n zona de adrese 20H la 2FH, respectiv bi#ii de la 00H la 7FH. ;Variabile de stare ale actuatorului electo-hidraulic. STATUS0 BIT 20H STATUS$ BIT 2$H STATUS2 BIT 22H ;Rutina de servire a ntreruperilor generate de UART ;Aten#ie UART genereaz! o unic! ntrerupere att la recep#ie ct "i la transmisie ISR_SI: JB RI,RECEPTIE
TRANSMISIE:
CLR TI ;%terge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru ;reanclan"area ntreruperilor la transferul unui nou caracter JB RI,RECEPTIE ;Retestare recep#ie caracter de c!tre UART RETI
RECEPTIE:
MOV A,SBUF ;Cite"te caracterul recep#ionat n registrul ACC CJNE A,#'A',ISR_SI_$ CDA_AVANS: SETB P3.7 ;Comand! Electrovalva$ CLR P3.6 ;Blocheaz! Electrovalva2 SETB P3.5 ;Comand! pompa de presiune ;Comand! mi"carea de avans a actuatorului ac#ionnd Electrovalva$ "i pompa. CLR STATUS0 ;Reseteaz! starea consemnat! anterior, respectiv actuator retras SETB STATUS2 ;Consemneaz! comanda actuatorului SETB IE.$ ;Valideaz! "i ntreruperile corespunz!toare limitatorului 2 JMP END_ISR_SI ISR_SI_$: CJNE A,#'R',ISR_SI_2 SETB P3.6 ;Comand! Electrovalva2 CLR P3.7 ;Blocheaz! Electrovalva$
7. Aplica#ii
"73
SETB P3.5 ;Comand! pompa de presiune ;Comand! mi"carea de retragere a actuatorului ac#ionnd Electrovalva 2 "i pompa. CRL STATUS$ ; Reseteaz! starea consemnat! anterior, respectiv actuator avansat SETB STATUS2 ;Consemneaz! comand! actuatorului SETB IE.0 ;Valideaz! "i ntreruperile corespunz!toare limitatorului $ JMP END_ISR_SI ;Testare cereri de stare din partea sistemului ierarhic superior ;Ecoul la acestea const! ntr-un caracter ce define"te starea curent! a sistemului ISR_SI_2: CJNE A,#'S',ISR_SI_3 JB STATUS2,ISR_SI_4 MOV SBUF,#'D' ;Transmite ecoul corespunz!tor st!rii reaDy - preg!tit JMP END_ISR_SI ISR_SI_3: CJNE A,#'P',END_ISR_SI ;n cazul n care codul nu corespunde protocolului stabillit, - cuvntul recep#ionat ;nu este unul dintre cuvintele cheie- el va fi ignorat JB STATUS0,LIM$ JB STATUS$,LIM2 MOV SBUF,#'M' ;Transmite ecoul actuator n mi"care (pozi#ie intermediar!) JMP END_ISR_SI LIM$: MOV SBUF,#'I' ;Transmite ecoul actuator retras JMP END_ISR_SI LIM2: MOV SBUF,#'E' ;Transmite ecoul actuator avansat END_ISR_SI: CLR RI ;Reseteaza flag-ul recep#ie caracter RETI ISR_SI_4: MOV SBUF,#'B' JMP END_ISR_SI Vom descrie n continuare rutinele de servire a ntreruperilor ce asigur! oprirea comenzilor de avans "i retragere a actuatorului electro-hidraulic. Corespunz!tor fiec!rei linii de ntreruperi externe vom scrie cte o rutin! (ISR_EXT0 "i respectiv ISR_EXT$) ISR_EXT0: CLR IE.0 ;Sterge flag-ul de validare a ntreruperilor corespunz!tor sursei
"74
MICROCONTROLLERE
CLR P3.6 ;%terge comada corespunz!toare lui Ev2 CLR P3.5 ;%terge comanda corespunz!toare pompei CLR STATUS2 ;%terge bitul ce consemneaz! mi"carea actuatorului SETB STATUS0 ;%eteaz! bitul ce specific! starea "actuator retras" RETI ISR_EXT$: CLR IE.2 ;%terge flag-ul de validare a ntreruperilor corespunz!tor sursei CLR P3.7 ;%terge comada corespunz!toare lui Ev$ CLR P3.5 ;%terge comand! corespunz!toare pompei CLR STATUS2 ;%terge bitul ce consemneaz! mi"carea actuatorului SETB STATUS$ ;Seteaz! bitul ce specific! starea "actuator avansat" RETI Programul principal al sistemului va include doar o rutin! de a"teptare a unui eveniment. Iat!-l: ORG 0H JMP MAIN JMP ISR_EXT0 ;Saltul la rutina de ntreruperi corespunz!toare lui L$ ORG $3H JMP ISR_EXT$ ;Saltul la rutina de ntreruperi corespunz!toare lui L2 ORG 23H JMP ISR_SI ;Saltul la rutina de ntreruperi corespunz!toare UART ORG $00H $INCLUDE INIT $INCLUDE SERIAL $INCLUDE EXT$&2 ;Dispozi#ii de inserare a programelor anterioare n cadrul programului principal MAIN: CALL INIT ;Construim tabela cu salturile la rutinele de servire a ntreruperilor sau la programul principal JMP $ ;Instruc#iunea asigur! saltul permanent la ea ns!"i Urmare a scrierii programului, memoria de program a sistemului dup! parcurgerea etapelor de asamblare, link-editare "i conversie OBJ->HEX (IntelHEX code), va cuprinde n ordine, ncepnd de la adresa 0 instruc#iunea de salt la programul principal, instruc#iunile de salt c!tre rutinele de servire a ntreruperilor "i rutinele de servire a ntreruperilor "i programul principal n ordinea specificat! prin dispozi#iile INCLUDE. Odat! nscris n memoria flash a procesorului, sistemul este gata s! satisfac! func#iunile specificate n raport cu protocolul stabilit.
7. Aplica#ii
"75
Dispune de $3 linii utilizabile ca linii de intrare/ie"ire cu capabilitate ridicat! n curent (pn! la 20 mA, fiecare). Arhitectura procesorului este Harvard, cu l!#imea magistralei de date de 8 bi#i "i a celei corespunz!toare memoriei de program de $4 bi#i. Dispune de $Ko memorie de program (flash sau EPROM), de
"76
MICROCONTROLLERE
2x$28 bytes memorie SRAM organizat! n dou! zone, zona SFR (Special Function Regsiter) "i zona GPR (General Purpose Register) "i de 64 bytes memorie EEPROM ce poate fi nscris! "i stears! prin program. Dispune de un canal temporizator/num!r!tor ce poate ndeplini func#ia de Watch Dog de 8 bi#i cu un prescaler de 5 bi#i. Controller-ul de ntreruperi intern admite 4 surse de ntreruperi: una extern! (RB0/INT, una de la canalul TMR0 (timer overflow), una de la portul B comun! pentru 4 dintre liniile portului care genereaz! o ntrerupere la schimbarea nivelului logic de semnal pe ele "i o ntrerupere intern! generat! la
IND ADR TMR0 PCL STATUS FSR PORT A PORT B EEDATA EEADR PCLATCH INTCON 68 x 8 GPR
IND ADR OPTION PLC STATUS FSR TRIS A TRIS B EECON$ EECON2 PCLATCH INTCON Mapped
scrierea datelor n EEPROM. Stiva microcontroller-ului este mai deosebit!, respectiv este implementat! ntr-o zon! special! a memoriei interne "i are maximum 8 nivele nefiind permis! citirea sau nscrierea acesteia prin adresare direct!. Procesorul nu dispune de instruc#iuni PUSH sau POP "i astfel doar prin instruc#iuni de tipul CALL, GOTO, RETURN, RETFIE "i RETLW putem introduce, respectiv extrage informa#ii la nivelul stivei. O observa#ie important! de care va trebui s! #inem cont, este aceea c! nu este prev!zut nici un indicator de dep!"ire a dimensiunii stivei, ceea ce poate duce la grave erori atunci cnd num!rul de apeluri sau de instruc#iuni GOTO este Figura 7. 7 Structura cuvntului instruc#iune mai mare de 8. Instruc#iunile procesorului au o l!#ime de $4 bi#i "i ele includ att codul respectiv ct "i operanzii aferen#i acestuia, respectiv adresa
7. Aplica#ii
"77
registrului din zona file Register "i/sau indexul bitului corespunz!tor loca#iei respective. Instruc#iunile de salt, cum ar fi, CALL "i GOTO sunt singurele care dureaz! mai mult de un ciclu instruc#iune "i care necesit! modificarea con#inutului PC-ului. Setul de instruc#iuni al procesorului este ortogonal, ceea ce presupune c! modalitatea de acces la orice loca#ie de memorie este identic! att la scriere ct "i la citire, att pentru zona GPR ct "i pentru zona SFR. n cazul opera#iilor calate pe bit, instruc#iunile vor citi nti tot registrul, vor opera pe bitul selectat ( specificat ) "i vor ntoarce napoi rezultatul n registrul specificat. Uniformitatea n tratare att la nivel de bit ct "i la nivel de octet, precum "i a registrelor de uz general "i special "i a porturilor permite reducerea semnificativ! a opera#iilor de transfer intermediar care sunt specifice procesoarelor CISC. Este de men#ionat c! Work Register (W Register), func#ioneaz! ca acumulator "i particip! la majoritatea instruc#iunilor att cele de transfer direct ct "i la cele de transfer indirect via un registru de adresare INDR -, adic! un registru ce memoreaz! adresa surs! sau destina#ie a informa#iilor. Iat! cteva instruc#iuni pe care n cadrul programului le vom utiliza. Prezentarea lor o facem pentru c! ele prezint! tr!s!turi specifice n raport cu cele de la microcontroller-ul Atmel. Aceste instruc#iuni le vom putea clasifica a"a n : Instruc%iuni de transfer, aritmetico-logice 'i de redirectare a programului, cum ar fi: Pot con#ine drept parametri pn! la trei valori "i anume: Prin k (8 bi#i) specific!m o valoare imediat! ce este inclus! n corpul instruc#iunii Prin f (8 bi#i) specific!m adresa din zona de memorie File Register la care face referire instruc#iunea. Prin b specific!m bitul la care face referire instruc#iunea (valoare pe 3 bi#i) Falg-ul d specific! registrul destina#ie n care se stocheaz! rezultatul opera#iei sau al transferului, dac! acesta este 0, atunci rezultatul este re#inut n regsitrul W, altfel el este re#inut n registrul f din File Register. MOVF f,d Transfer data ntre W "i registrul f cu indicarea registrului de memorare a rezultatului. MOVWF f Transfer data din W n registrul f MOVLW k Transfer valoare imediat! k (specificat! n cadrul instruc#iunii) n registrul W. SWAPF f,d Comutare semi-bytes n cadrul registrului f cu re#inerea rezultatului n W sau f func#ie de d. ANDWF f,d SI-LOGIC, ntre informa#iile din W "i f, bitul d are acela"i rol,
"78
MICROCONTROLLERE
ANDLW k SI-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W. Rezultatul este re#inut n W. ADDWF f,d Adunarea informa#iilor din W "i f, bitul d specific! destina#ia rezultatului. ADDLW k Adunarea ntre valoarea specificat! k "i valoarea stocat! n W. Rezultatul este stocat n registrul W. SUBWF f,d Sc!derea informa#iile din W "i f cu acela"i rol pentru flag-ul d SUBLW k SI-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W. Rezultatul este stocat n registrul W. IORWF f,d SAU-LOGIC, ntre informa#iile din W "i f, bitul d are acela"i rol, IORLW k SAU-LOGIC ntre valoarea specificat! k "i valoarea stocat! n W. Rezultatul este re#inut n W. XORWF f,d SAU-EXCLULSIV, ntre informa#iile din W "i f, bitul d are acela"i rol, XORLW k SAU-EXCLUSIV, ntre valoarea specificat! k "i valoarea stocat! n W. Rezultatul este re#inut n W. CALL k Apel rutin! k ($$/$3 bi#i specifica#i prin instruc#iune) GOTO k Salt la adresa k ($$/$3 bi#i specifica#i prin instruc#iune) RETURN Revenire din subrutin! RETFIE Revenire din subrutina de tratare a ntreruperilor RETLW k Revenire din subrutin! cu nc!rcarea unei valori literale n W. Instruc#iunilede setare/resetare bytes sau bi#i, cele de rotire pot fi ncadrate n categoria curent!, unele dintre acestea le vom detalia, avnd n vedere particularit!#ile pe care ele le prezint!. Spre exemplu, instruc#iunea : RRF f,d nu face altceva dect s! deplaseze c!tre dreapta cu o pozi#ie informa#ia din registrul f, rezultatul fiind re#inut conform valorii lui d, n W sau chiar n registrul f. La fiecare deplasare, bitul 0 este mutat n bitul de C (de transport), iar acesta este transferat n bitul 7 al registrului f, etc. Analog, func#ioneaz! "i instruc#iunea RLF f,d , caz n care bitul C (de transport) va fi copiat n bitul 0 al registrului f "i bitul 7 al aceluia"i registru fi memorat n C. BTFSS logic BTFSC logic Instruc%iuni de decizie: Test bit "i salt peste instruc#iunea urm!toare dac! acesta este $ Test bit "i salt peste instruc#iunea urm!toare dac! acesta este 0
Instruc%iuni ce permit execu%ia repetitiv& a unui "ir de opera#ii: DECFSZ f,d Decrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este zero rezultatul. Valoarea rezultat este re#inut! func#ie de flag-ul d n W d=0 sau f d=$.
7. Aplica#ii
"79
INCFSZ f,d Incrementeaz! registrul f "i sare instruc#iunea urm!toare dac! este zero rezultatul. Valoarea rezultatului este re#inut! func#ie de flag-ul d n W d=0 sau f d=$. Restul instruc#iunilor de resetare sau setare pe bit "i byte, cele de incrementare "i decrementare, cele de complementare "i instruc#iunea NOP sunt furnizate pe CD. (sau vezi documentul 30430c.pdf de la Microchip). Vom utiliza instruc#iunile de deplasare la dreapta prin bitul de carry pentru emularea UART. Registrele generale ale microcontroller-ului asigur! pe de-o parte implementarea func#iunilor de control pentru program, iar pe de alt! parte permit memorarea datelor "i transferul comenzilor c!tre mediul extern. Iat! structura celor mai importante dintre acestea. STATUS
IRP RP" RP0 T0# PD# Z DC C
IRP este bitul care selecteaz! bancul de registre ( la adresarea indirect!) valoarea 0 corespunde intervalului de adrese 00H la FFH, iar valoarea $ corespunde intervalului $00H la $FFH. RP",RP0 corespunde selec#iei bancului de registre (la adresarea direct!) selec#ie astfel: 00 corespunde intervalului de adrese 00H la 7FH 0$ corespunde intervalului de adrese 80H la FFH $0 corespunde intervalului de adrese $00H la $7FH $$ corespunde intervalului de adrese $80H la $FFH T0# (time out bit), exprim! dep!"irea capacit!#ii de num!rare a canalului 0, respectiv tranzi#ia de stare de la FFH spre 00H. PD# (Power Down), odat! setat exprim! trezirea sistemului, la pornirea acestuia sau dup! execu#ia instruc#iunii CLRWDT. n rest bitul de mai sus este resetat. Z (Zero flag), este setat la ntlnirea coinciden#ei a dou! valori numerice sau cnd rezultatul opera#iei aritmetico-logice este zero. n rest, acesta este resetat. DC (Digital Carry), exprim! transportul sau mprumutul la nivel de semibyte. Setat la apari#ia transportului, resetat la apari#ia unui mprumut. C (Carry), este setat la apari#ia unui transport la nivel de byte, "i resetat n rest. OPTION
RBPU# INTEDG TOCS TOSE PSA PS2 PS" PS0
RBPU#, (Pull up bits port B),setat exprim! invalidarea func#iunii pull-up pentru liniile portului B, iar resetat, asigur! func#ia pull-up pentru aceste linii. INTEDG (Interrupt Edge Select) setat permite generarea ntreruperilor pe frontul cresc!tor, iar resetat realizeaz! generarea ntreruperii pe frontul descresc!tor. TOCS (TMR0 Source Clock), selecteaz! sursa impulsurilor ce sunt num!rate de c!tre canalul 0 num!r!rtor/temporizator, setat permite num!rarea impulsurilor externe, aplicate la pinul RA4, resetat selecteaz! frecven#a intern! de ceas divizat! cu 4.
"80
MICROCONTROLLERE
TOSE (TMR0 Source Edge Select), setat realizeaz! incrementarea num!r!torului canalului pe frontul negativ, iar resetat incrementeaz! impulsurile pe frontul pozitiv. PSA, (Prescaler Assignemet Bit), setat asigneaz! prescaler-ul pentru WDT (Watch Dog Timer), resetat l rezerv! pentru canalul TMR0. PS2, PS", PS0 (Bi#i de selec#ie a constantei de divizare a prescaler-ului), dup! cum urmeaz!: 000H reprezint! $/2 ptr. TMR0 "i $/$ pentru WDT 00$H reprezint! $/4 ptr. TMR0 "i $/2 pentru WDT 0$0H reprezint! $/8 ptr. TMR0 "i $/4 pentru WDT 0$$H reprezint! $/$6ptr. TMR0 "i $/8 pentru WDT $00H reprezint! $/32 ptr. TMR0 "i $/$6 pentru WDT $0$H reprezint! $/64 ptr. TMR0 "i $/32 pentru WDT $$0H reprezint! $/$28 ptr. TMR0 "i $/64 pentru WDT $$$H reprezint! $/256 ptr. TMR0 "i $/$28 pentru WDT Structura canalului temporizator/num!r!tor este ilustrat! n figura 7.8. ntreruperile n cazul microcontroller-ului PIC$6F84 au un singur vector, "i anume cel plasat la adresa 004H din memoria de program, iar cum sursele de ntreruperi sunt n num!r de patru este necesar s! implement!m n cadrul rutinei de servire programul de identificare "i apoi de tratare a acestora. Registrul
INTCON, este cel ce d! posibilitatea utilizatorului s! valideze sau invalideze att decla"area ntreruperilor de la diverse surse, ct "i s! valideze sau invalideze global ntreruperile. INTCOM GIE EEIE TOIE INTE RBIE TOIF INTF RBIF
GIE, (Global Interrupt Enable), permite setat s! valideze acele cereri de ntrerupere ce apar dac! acestea au fost validate "i individual, respectiv resetat inhib! orice cerere de ntrerupere. EEIE (EEPROM Interrupt Enable) setat valideaz! ntreruperile la opera#iile de scriere sau citire a EEPROM-ului intern, resetat ignor! acestecereri de ntrerupere TOIE (TMR0 Overflow Enable), setat valideaz! ntreruperile corespunz!toare dep!"irii la canalul temporizator/num!r!tor, resetat acestea sunt ignorate
7. Aplica#ii
"8"
INTE (External Interrupt Enable), valideaz! ntreruperile datorate varia#iei semnalului aplicat pe intrarea RB0 atunci cnd este setat, respectiv resetat le ignor! RBIE (B Register Interrupt Enable), setat valideaz! ntreruperile datorate schimb!rii st!rii uneia dintre intr!rile portului RB7, RB6, RB5 sau RB4 al microcontroller-ului, respectiv, resetat ignor! schimb!rile de stare la nivelul portului RB TOIF (Timer Overflow Interrupt Flag), este setat hard la apari#ia st!rii dep!"ire a capacit!#ii num!r!torului corespunz!tor canalului 0, resetat n rest. INTF (Interrupt Flag) setat hard la apari#ia unei ntreruperi la nivelul liniei RB0, n rest resetat. RBIF (B Port Interrupt Flag), setat hard, atunci cnd una sau mai multe linii ale portului B au schimbat starea, resetat n rest. Ca observa#ie general! trebuie re#inut c! bi#ii de stare prezen#i n structura registrului INTCON sunt seta#i hard (prin mecanismul implementat n cadrul microcontroller-ului) "i programatorul, n cadrul rutinei de servire a ntreruperilor, va trebui s!-i reseteze, pentru a putea detecta urm!toarea condi#ie de decla"are a ntreruperilor. Registrele EEDATA (EEPROM Data Register), re#ine data de nscris sau de "ters din/n EEPROM, EEADR (EEPROM address), re#ine adresa de memorie la care, sau de la care se face: scrierea, respectiv citirea datelor "i registrele EECON$ "i EECON2 permit efectuarea memor!rii datelor n memoria EEPROM asignnd comenzile de scriere WR sau citire "i cele de validare. Avnd imaginea registrelor procesorului s! gndim cum am putea utiliza acest microcontroller pentru transferul datelor "i implementarea func#iunilor actuatorului electro-hidraulic. Observ!m un fapt mai pu#in mbucur!tor: circuitul nu dispune de o interfa#! serial! implementat! hard, deci va trebui s! o emul!m soft. L2 PB5 n ceea ce nseamn! L" PB4 implementarea controlului, observ!m c! portul B este deosebit de util el detectnd Ev2 PB3 automat varia#ia nivelului logic pe liniile RB4 la RB7. n figura 7.9 d!m schema PB2 Ev" electric! de conectare propus!, schem! n care am ignorat eventualele circuite PA0 p amplificatoare n comuta#ie sau formatoare de implus. Pentru liniile RxD "i respectiv PB" TxD TxD, vom folosi liniile portului B "i anume RB6 (aten#ie vom utiliza "i PB0 RxD facilitatea de generare a ntreruperilor la schimbarea nivelului logic pe aceast! Figura 7. 9 Schema de conectare intrare, n acest sens vom folosi posibilitatea pe care aceast! linie o ofer!,
PIC "6F84
"82
MICROCONTROLLERE
de generare a ntreruperii la sesizarea bitului de START n cazul transmisiei seriale), respectiv RB$ pentru transmisie. Principalele idei n baza c!rora vom emula interfa#a serial! sunt urm!toarele: program!m timer0 astfel nct acesta s! genereze cte o ntrerupere cu frecven#a ct mai apropiat! de frecven#a de transfer serial a informa#iilor. transfer!m cu ocazia servirii ntreruperii corespunz!toare, cte un bit "i rotim informa#ia respectiv! pentru a simula felul n care decurge transferul serial pe un UART implementat hard. vom stabili rata de transfer serial!, programnd corespunz!tor timer-ul 0 pentru aceasta. Iat! cum se realizeaz! acest lucru:
Formula de calcul -aproximativ!3- pentru stabilirea frecven#ei de transfer, dac! presupunem utilizarea unui microcontroller ce func#ioneaz! la fClk=$0MHz va fi:
BR =
f Clk $ , 4 PS (256 CT )
unde BR este rata de tranmisie serial! (o vom stabili la $9200 Bauds), fClk este frecven#a de ceas a sistemului, PS este factorul de divizare al prescaler-ului, iar CT este constanta de timp nc!rcat! de c!tre programator. Formula nu #ine cont de erorile datorate momentului de timp la care are loc renc!rcarea constantei de timp "i de timpul necesar microcontroller-ului pentru a intra n ISR. n cazul nostru, vom ob#ine: $30 valoarea produsului PS*(256-CT). Considernd pentru PS valoarea $, deci nu utiliz!m prescaler-ul, vom nscrie n registrul corespunz!tor timer-ului 0, valoarea 7EH. Aten#ie, este de observat c! timer-ul num!r! n sens direct, deci valoarea corespunz!toare este dat! de diferen#a ntre valoarea la care se realizeaz! consemnarea dep!"irii capacit!#ii canalului "i valoarea dorit!. Eroarea datorat! rotunjirii valorii corespunz!toare ratei de transfer va fi de 0,$6%.4 Pentru a implementa aceast! func#ie, vom folosi cteva loca#ii de memorie "i anume: CHR_TRS: loca#ie ce memoreaz! octetul de transmis CHR_REC: loca#ie ce re#ine octetul recep#ionat RI bit ce specific! recep#ia complet! a caracterului pe linia serial!
3
Formula este aproximativ! c!ci ea nu #ine cont de timpii necesari execu#iei instruc#iunilor din cadrul rutinei de servire a ntreruperilor, timpi care de altfel pot fi diferi#i, func#ie de starea n care este gasit procesorul la ancla"area ntreruperii Formula de calcul a erorii va fi:
p
Err =
r p unde p
7. Aplica#ii
"83
bit ce exprim! transmisia complet! a caracterului pe linia serial! bit ce exprim! transferul n curs la recep#ie (este utilizat de ISR). bit ce exprim! transferul n curs la transmisie(este utilizat de ISR). Transferul se va efectua semi-duplex, cu 8 bi#i/caracter, un bit de start "i unul de stop. Structura byte-ului de stare este cea de mai jos: SI_STARE T Unde: END are semnifica#ia de sfr"it transmisie sau recep#ie byte C2,C$,C0 sunt bi#ii utiliza#i pentru contorul de bi#i, transmi"i sau recep#iona#i Astfel, la transmisie vom face urm!toarele: Transfer!m la loca#ia CHR_TRS octetul de transmis "i set!m flag-ul INT_TRS. Reset!m linia TxD (respectiv bitul corespunz!tor ei, adic! RB$) semnaliznd bitul de start (Break pentru transmisie). Set!m bitul T, ce exprim! ocuparea CPU (Central Processing Unit) cu transferul serial. Ini#iem ceasul de transmisie, adic! program!m TMR0 n scopul gener!rii ntreruperilor Vom nscrie bitul corespunz!tor la fiecare ntrerupere pn! la transferul complet al celor 8 bi#i. Set!m linia RB$, cel pu#in pentru o perioad! de ceas, (bitul de stop), set!m bitul TI ce exprim! ncheierea transmisiei caracterului (buffer de transmisie gol) pentru programul principal "i reset!m bitul T elibernd astfel UC de task-ul de serializare a informa#iilor. La apari#ia schimb!rii de stare pe bitul RB0, set!m bitul ce consemneaz! ocuparea interfe#ei seriale, respectiv bitul R.(recep#ie n curs). Pe fiecare ntrerupere de timp vom citi (e"antiona) linia serial! la recep#ie RB0 "i vom scrie n Carry Flag bitul citit "i vom deplasa la dreapta prin carry byte-l CHR_REC ce va con#ine ceea ce recept!m. Dup! 8 cicli de temporizare, vom seta bitul RI, ce specific! pentru programul principal, recep#ia complet! a caracterului (caracter recep#ionat disponibil), resetnd n acela"i timp bitul CHR_REC. Va fi necesar s! invalid!m ntreruperile corespunz!toare canalului 0 temporizator, respectiv TMR0. R TI RI END C2 C" C0
TI R T
Avnd n vedere structura de registre ale procesorului, precum "i faptul c! punctul de intrare n rutina de servire a ntreruperilor este unic, va trebui ca aceasta
"84
MICROCONTROLLERE
s! implementeze absolut toate func#iunile ce impun sincronizarea CPU cu mediul extern. De aceea, programul principal va ini#ializa sistemul "i nu va face dect s! a"tepte ntreruperile "i s! dea comenzile corespunz!toare informa#iilor recep#ionate din mediul extern dup! prealabila memorare "i analiz! a acestora (informa#iile provin de la interfa#a serial! sau sunt culese din proces). Byte-ul de stare a sistemului va avea aceea"i structur! ca "i n cazul implement!rii anterioare. n plus, avnd n vedere variabilele care controleaz! starea interfe#ei seriale UART, am mai introdus loca#ia INT_TRS ce re#ine cererea de transfer a unui caracter. Iat! n continuare programul ce implementeaz! aplica#ia: list p=$6f84 #include p$6f84.inc ORG 0x00 START GOTO MAIN ORG 0x04 ISR ;Salvare stare microcontroller PIC, respectiv W "i STATUS MOVWF TEMP_WORK ;TEMP_WORK <-W MOVF STATUS,W ; W <- STATUS MOVWF TEMP_WORK$ ;TEMP_WORK$ <- W BTFSC INTCON,INTF ;Testare apari#ie bit de start pe RxD GOTO PRIM_CHR ;Directare spre rutina ce ini#iaz! recep#ia serial! a caracterelor BTFSC INTCON,RBIF ;Testare modificare stare L$ sau L2 GOTO LIMITATORI ;Directare spre rutina de tratare corespunz!toare atingerii limitatorilor de curs! BTFSC INTCON,T0IF ;Testare dep!"ire contor TMR0 GOTO REC_TRS ;Directare spre rutina corespunz!toare dep!"irii contorului de timp corespunz!tor MOVF INTCON,W ; W <- INTCON ANDLW 0xF8 ;Resetez contorul de bi#i MOVF INTCON,F ; INTCON <- W END_ISR ;Refac starea microcontroller-ului MOVF TEMP_WORK$,W MOVWF STATUS MOVF TEMP_WORK,W RETFIE PRIM_CHR BCF INTCON,INTE ;Invalidez INTE Nu accept alte ntreruperi de la RxD. Revalidarea se va face doar ;la sfr"itul recep#iei complete a caracterului curent, odat! cu setarea flag-ului RI) MOVLW 3/2*CT
7. Aplica#ii
"85
;Incarc n W: 3/2 din constanta de timp corespunz!toare perioadei de transmisie ;serial! a datelor (vezi diagrama de timp) ;De ce? C&ci e'antionarea liniei RxD se face ct mai aproape de mijlocul ;perioadei de ceas a UART. MOVF TMR0,F ; TMR0 <- W BSF SI_STARE,6 ;Setez indicatorul "n recep#ie" respectiv flag-ul R MOVF SI_STARE,W ;ncarc n W vectorul de stare: W <- SI_STARE ANDLW 0xF8 ;Resetez bi#ii 0,$ si 2, respectiv contorul de bi#i la recep#ie MOVF SI_STARE,F ; SI_STARE <- W ;Se poate introduce n acest punct testul de "overrun" la recep#ie BCF INTCON,INTF ;Resetez flag-ul INTE corespunz!tor liniei RxD GOTO END_ISR LIMITATORI BCF INTCON,RBIF ;Resetez flag-ul indicator al ntreruperii datorate varia#iei st!rii liniilor RB4-RB7 BTFSS PORTB,4 ;Testare atingere limitator L$? ;Da! A fost atins! GOTO L$_ATINS ;Nu! BTFSS PORTB,5 ;Testare atingere limitator L2? ;Da! A fost atins! GOTO L2_ATINS ;Ignorare ntrerupere la schimbarea de stare, respectiv ignorare fronturi pozitive ;ale semnalelor de la limitatoarele $ "i 2 GOTO END_ISR L"_ATINS BCF PORTB,3 ;Opre"te comanda Ev2 BCF PORTA,0 ;Opre"te comanda pompa de fluid. Actualizare stare sistem n vectorul STARE BSF STARE,0 ;Atins limitator L$ pozi#ie retras BCF STARE,2 ;Oprit! mi"care actuator GOTO END_ISR L2_ATINS BCF PORTB,2 ;Opre"te comanda Ev$ BCF PORTA,0 ;Opre"te comanda pompa de fluid Actualizare stare sistem n vectorul STARE BSF STARE,$ ;Atins limitator L2 pozi#ie avansat BCF STARE,2 ;Oprit! mi"carea actuatorului GOTO END_ISR REC_TRS
"86
MICROCONTROLLERE
BTFSC SI_STARE,6 ;Test ntrerupere de la TMR0 la recep#ia caracterelor? ;Da! Intrerupere la recep#ia caracterelor GOTO RECEPTIE ;Nu! BTFSC SI_STARE,7 ;Test ntrerupere de la TMR0 la transmisia caracterelor? ;Da! Intrerupere la transmisia caracterelor GOTO TRANSMISIE ;Nu! Eroare, refacem doar flag ce semnaleaz! ntreruperea coresp. lui TMR0 BCF INTCON,T0IF GOTO END_ISR RECEPTIE BTFSS PORTB,0 ;E"antionare linie RxD (linia RxD este linia RB0) ;Da, linia este zero! GOTO REC_ZERO ;Nu, Setez carry flag BSF STATUS,C ;Setez bitul 0 din STATUS register care este Carry Flag GOTO REC_CONT REC_ZERO BCF STATUS,C ;Resetez bitul 0 din STATUS register care este Carry Flag REC_CONT RRF CHR_REC,F ;Rotesc prin Carry loca#ia (file register REC_CHR) Bitul de Carry ; va ajunge n pozi#ia bitului 7 din REC_CHR "i dup! 8 bi#i recepta#i pe pozi#ia 0 INCF SI_STARE,F ;Incrementez contorul din SI_STARE "i l salvez n el nsu"i BTFSS SI_STARE,3 ;Testez atingerea recep#iei celui de-al 8-lea bit al caracterului GOTO END_REC_BIT END_REC_CHR BCF SI_STARE,6 ;Resetez flag-ul ce indic! starea "n recep#ie caracter" BSF SI_STARE,4 ;Setez flag-ul RI, "Caracter recep#ionat disponibil" BCF INTCON,T0IF ;Resetez flag-ul ce semnalizeaz! "overflow" canal temporizator BCF INTCON,T0IE ;Invalidez ntreruperile corespunz!toare canalului temporizator BCF SI_STARE,3 ;Resetez contor num!r!tor bi#i recep#iona#i GOTO END_ISR
7. Aplica#ii
"87
END_REC_BIT MOVWF CT ;ncarc constanta de temporizare n W MOVF TMR0,F ;O transfer c!tre TMR0 BCF INTCON,T0IE ;Resetez flag-ul corespunz!tor ntreruperilor de la TMR0 Reanclan"are TMR0 GOTO END_ISR TRANSMISIE BTFSC SI_STARE,3 ;Test corespunz!tor ncheierii transferului datelor ce formeaz! caracterul (8 bi#i) GOTO TEST_END_TRS CONT_TRS BTFSC CHR_TRS,0 GOTO SET_BIT_TRS BCF PORTB,$ ;Scriu 0 logic pe linia TxD GOTO TRS_BITI SET_BIT_TRS BSF PORTB,$ ;Scriu $ logic pe linia TxD TRS_BITI RRF CHR_TRS,F ;Rotesc bi#ii caracterului de transmis n bufferul de transmisie MOVLW CT MOVF TMR0,F ;Rencarc constanta de timp corespunz!toare frecven#ei de transmisie pe UART BCF INTCON,T0IF ;Resetez flag-ul indicator timer "overflow" BSF INTCON,T0IE ;Validez ntreruperile ptr. canalul temporizator INCF SI_STARE ;Incrementez contorul de bi#i la transmisie GOTO END_ISR TEST_END_TRS BTFSC SI_STARE,0 ;Testez dac! este de transmis bitul de STOP GOTO END_TRS TRS_STOP_BIT BSF PORTB,$ ;Scriu $ logic pe linia serial!, corespunz!tor bitului de STOP GOTO TRS_BITI END_TRS BCF INTCON,T0IE ;Invalidez ntreruperilor corespunz!toare TMR0 BCF INTCON,T0IF ;%terg flag-ul indicator de ntrerupere
"88
MICROCONTROLLERE
MOVLW 0x76 ;Maschez bitul T, "i bi#ii contorului de bi#i ai UART ANDWF SI_STARE,F ;Realizez resetarea bi#ilor 7,3 "i 0 din SI_STATUS BSF SI_STARE,5 ;Setez TI, indic! "buffer transmisie gol" GOTO END_ISR INIT MOVLW 0x0C MOVWF FSR NEXT CLRF INDF INCF FSR BTFSC FSR,6 GOTO NEXT BTFSC FSR,4 GOTO NEXT ;Umple cu 0 memoria SRAM a microcontroller-ului de la adresa 0x0C la 0x4F BCF STATUS,RP0 ;Select bank 0 MOVLW 0x02 MOVF PORTB,F MOVLW 0x0$ MOVF PORTA,F BSF STATUS,RP$ ;Select bank $ MOVLW 0x3$ MOVWF TRISB MOVLW 0x00 MOVWF TRISA BCF STATUS,RP0 ;Ini#ializeaz! porturile A "i B RETURN ;******************************************************** MAIN CALL INIT LOOP BTFSC SI_STARE,4 ;Testare dac! a fost recep#ionat un caracter pe UART CALL EXEC_CDA ;Execu#ie comanda venit! pe UART de la PC CONTINUE0 BTFSC INT_TRS,0 ;Testare dac! este de transmis un caracter via UART CALL INIT_TRS CONTINUE" GOTO LOOP EXEC_CDA MOVLW 0x4$ ;ncarc comanda 'A' - avans
7. Aplica#ii
"89
XORWF CHR_REC,W ;Testez identitatea ntre caracterul recep#ionat "i 'A' BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC GOTO AVANS ;Execut! avans MOVLW 0x52 ;ncarc comanda 'R' - retragere XORWF CHR_REC,W ;Testez identitatea ntre caracterul receptionat "i 'r' BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC GOTO RETRAGERE MOVLW 0x53 ;Incarc comanda 'S' - stare XORWF CHR_REC,W ;Testez identitatea ntre caracterul recep#ionat "i 'S' BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC GOTO REQ_STARE MOVLW 0x50 ;ncarc comanda 'P' - pozi#ie XORWF CHR_REC,W ;Testez identitatea ntre caracterul recep#ionat "i 'P' BTFSC STATUS,Z ;Testez identitatea Z=$ IDENTIC GOTO POZITIE END_EXEC_CDA BCF SI_STARE,4 ;Resetez flag corespunz!tor caracterului recep#ionat.Acesta a fost citit "i interpretat RETURN AVANS BSF PORTB,2 ;Comand! Ev$ BSF PORTA,0 ;Comand! pompa BCF STARE,0 ;Resetez stare sistem L$ atins BSF STARE,2 ;Setez starea "actuator n mi"care" GOTO END_EXEC_CDA RETRAGERE BSF PORTB,3 ;Comand! Ev$ BSF PORTA,0 ;Comanda pompa BCF STARE,$ ;Resetez staresistem L$ atins BSF STARE,2 ;Setez starea "actuator in mi"care" GOTO END_EXEC_CDA REQ_STARE BTFSS STARE,2 ;Testez atingere limitator L$ ;Da! Consemneaz! stare "i ini#iaz! emisie ecou GOTO READY BUSY MOVLW 0x42 ; W <-'B' Busy MOVF CHR_TRS,F ; CHR_TRS <- W BSF INT_TRS,0 ;Ini#iere transmisie GOTO END_EXEC_CDA
"90
MICROCONTROLLERE
READY MOVLW 0x44 ; W <-'D' reaDy MOVF CHR_TRS,F ; CHR_TRS <- W BSF INT_TRS,0 ;Ini#iere transmisie GOTO END_EXEC_CDA POZITIE BTFSC STARE,0 GOTO LIM$ BTFSC STARE,$ GOTO LIM2 BTFSC STARE,2 GOTO MOVE GOTO END_EXEC_CDA LIM" MOVLW 0x49 ; W <-'I' retras (L$ Atins) MOVF CHR_TRS,F ; CHR_TRS <- W BSF INT_TRS,0 ;Ini#iere transmisie GOTO END_EXEC_CDA LIM2 MOVLW 0x45 ; W <-'E' avansat (L2 Atins) MOVF CHR_TRS,F ; CHR_TRS <- W BSF INT_TRS,0 ;Ini#iere transmisie GOTO END_EXEC_CDA MOVE MOVLW 0x4C ;W <-'M' in mi"care MOVF CHR_TRS,F ; CHR_TRS <- W BSF INT_TRS,0 ;Ini#iere transmisie GOTO END_EXEC_CDA INIT_TRS BTFSS SI_STARE,5 ;Testez dac! TI este activ, ;n acest caz nu am voie s! ini#iez o nou! transmisie, voi a"tepta! GOTO END_INIT_TRS BCF PORTB,$ ;Scriu 0 logic pe linia TxD MOVLW CT MOVF TMR0,F ;ncarc constanta de timp nTMR0 BSF SI_STARE,7 ;Set "transmisie n curs" BSF INTCON,T0IE ;Validez ntreruperile corespunz!toare canalului TMR0 END_INIT_TRS RETURN STARE DB 0x00 ;Vectorul de stare al actuatorului ;Bit 0 L$ atins ;Bit $ L2 atins ;Bit 2 n mi"care
7. Aplica#ii
"9"
SI_STARE DB 0x00 ;Vectorul stare corespunz!tor UART CHR_REC DB 0x00 ;Loca#ie ce re#ine caracterul recep#ionat CHR_TRS DB 0x00 ;Loca#ie ce re#ine caracterul de transmis TEMP_WORK DB 0x00 ;Loca#ie ce memoreaz! W pe durata ISR TEMP_WORK" DB 0x00 ;Loca#ie ce memoreaz! STATUS register pe durata ISR INT_TRS DB 0x00 ;Loca#ia memoreaz! n bitul 0 cererea de transmisie a unui caracter. CT EQU 0x7E ;Constanta de timp coresp. ceasului UART n text toate etichetele la care se face referire sunt scrise cu caractere ngro"ate. Pentru a avea imaginea modului n care assembler-ul plaseaz! codul nostru, d!m pe CD "i partea referitoare la locatare din listing-ul rezultat n urma asambl!rii. Aceast! list! este dat! cu titlu informativ pentru a putea sesiza modalitatea n care sunt asignate automat loca#iile de memorie, variabilelor. n final vom face o scurt! analiz! comparativ! a solu#iilor avute n vedere la implementarea aplica#iei. Criteriul
Procesorul: Arhitectura Setul de instruc#iuni Registre de uz general Memoria intern! Num!r intr!ri/ie"iri: Linii de comand! "i control Canale temporizatoare WatchDog UART Sistemul de ntreruperi Alte facilit!#i speciale Tensiune alimentare Programarea controller-ului Memoria de program Facilit!#i energetice
Atmel AT89C205$
Von Neumann CISC5 4 bancuri a cte 8 registre fiecare $28 bytes $5 I/O 2 (4 moduri de programare) $ canal (8 bi#i) 256 valori $ canal sincron/asincron Vectorizat6 Dispune de 2 intr!ri analogice7 2,7 la 5 V Flash Reprogramabil 2 Kbytes (CISC) Low Power "i IDLE mode8
PIC$6F84
Harvard RISC9 2 Bancuri File Registres a cte 68 de bytes fiecare Este organizat! sub forma "File Registrers" $3 I/O $ (2 moduri de programare) $ canal (8 bi#i) $6 valori NU Cu unic! adres! de servire NU 2 la 6 V Programare flash tip ICSP $0 $024 x $4 bi#i (RISC) PowerDown$$ "i IDLE mode
5 6
Complex Set Instruction Computer, deci microcontroller cu un set vast de instruc#iuni Prin sistem de ntreruperi vectorizat n#elegem capacitatea dispozitivului respectiv de a realiza automat, la servirea unei ntreruperi saltul la o adres! specific! sursei de ntreruperi
"92
Facilit&%i software: Assembler Compilaror C Link-editor Translator INTEL-HEX code Emulator Mediu integrat Aspecte economice: Pre#/bucat! Optenabilitate: Seria produsului: Grad de pregatire proiectant:calat pentru microcontroller-ul respectiv Suport de dezvoltare"2: Strategia firmei: Timpul preconizat pentru dezvoltarea aplica%iei
MICROCONTROLLERE
A5$, SAM5$, etc. Extrem de multe variante de asambloare, Compilatoare C5$ "i altele L5$ DA DA NU 7,24 DM (Hoepping Elektronik) DA Nu avem date precise Nu avem date precise DA NU NU
MASM macro-asamblor, integrabil n mediul MPLAB DA MPLINK DA DA DA (MPLAB) 8,03 DM (ASA Micros) DA Nu avem date precise Nu avem date precise DA NU NU
Ce concluzii putem trage n urma analizei acestui tablou cu caracteristici ale celor dou! procesoare "i nu numai? Putem stabili factori de pondere corespunz!tori fiec!rui parametru (ace"ti factori trebuie preciza#i de c!tre fiecare proiectant n parte) "i putem calcula coeficientul de eficien#! al implement!rii produsului. Un aspect deseori esen#ial l constituie preg!tirea proiectan#ilor, experien#a lor anterioar! "i timpul n care se preconizeaz! dezvoltarea aplica#iei. Rubricile la care nu se poate r!spunde de la nceput (vezi cele ce con#in NU) pot influen#a substan#ial eficien#a deciziei, c!ci, spre exemplu, preg!tirea unui specialist n domeniu presupune timp "i bani suplimentari pe care nu ntotdeauna i avem. (vezi rubrica strategia firmei).
Intr!rile pot fi conectate intern ca intr!ri inversoare/neinversoare ale unui comparator analogic, ie"irea acestuia fiind accesibil! soft, ca bitul 6 al portului 3 al microcontroller-ului 8 Mod de func#ionare n care procesorul consum! pu#in c!ci reduce tensiunea de alimentare pe liniile porturilor "i opre"te execu#ia instruc#iunilor. Accept! ntreruperile ca modalitate de ie"ire din stare dat! 9 Reduced Set Instruction Computer, deci microcontroller cu set redus de instruc#iuni $0 ICSP prescurtare a In Circuit Serial Programming, este facilitatea prin care utiliznd drept linii de conexiune liniile microcontroller-ului se poate realiza programarea memoriei flash a circuitului f!r! ajutorul unui programator specializat $$ Mod de func#ionare n care procesorul nu execut! instruc#iuni "i se izoleaz! electric n raportul cu procesul controlat. Ie"irea din starea dat! se face doar printr-un RESET hard. $2 Exprim! existen#a att a sistemelor de dezvoltare, a resurselor de programare: asamblor, link-editor, translator, emulator, simulator ct "i a programelor de proiectare asistat! a implement!rii.
7. Aplica#ii
"93
Alte informa#ii privind microcontroller-ele familiei PIC de la Microchip g!si#i la urm!toarele adrese: Don McKenzie: http://www.dontronics.com/dtlinks.html Adam Davis: http://www.ubasics.com/adam/pic/piclinks.shtml Sam Powell: http://come.to/thepicarchive Brian Lane: http://www.nexuscomputing.com/~picarchive/ Richard Spencer: http://engmtasd.derby.ac.uk Michael Covington: ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/ Steve Walz: ftp://ftp.armory.com/pub/user/rstevew/PIC/DaveTait/ http://www.tinaja.com/pic500.html Iar pentru familia I805$ la adresele: www.8052.com www.intel.com www.atmel.com www.philips.com www.hitachi.com
7.2
n acest paragraf vom aborda cteva aplica#ii care presupun folosirea convertoarelor analog-digitale "i a celor digital-analoge n aplica#ii de comand! "i control. n acest sens vom exemplifica interfa#area sistemelor cu urm!toarele tipuri de convertoare: $. 2. 3. 4. 5. Convertoarele analog digitale controlabile serial Convertoarele analog digitale controlabile paralel Convertoarele analog digitale complexe Convertoarele digital analoge controlabile serial Convertoarele digital analoge controlabile serial.
Vom prezenta pentru fiecare dintre aceste cazuri att aspectele legate de implementarea hardware, inclusiv caracteristicile convertoarelor, ct "i aspectele ce #in de implementarea software.
"94
MICROCONTROLLERE
Figura 7. "0 Schema bloc a circuitului ADS7822 convertor analog - digital cu registru de aproxima#ii succesive
Convertorul prezint! un amplificator de instrumenta#ie pe intrare la care ambele intr!ri sunt accesibile din exterior. Registrul cu aproxima#ii succesive SAR (Succesive Aproximation Register), controlat de c!tre semnalele de interfa#are CS#/SHDN declan"eaz! "i apoi controleaz! procesul de conversie, aplicnd succesiv combina#iile ce implementeaz! metoda diviz!rii intervalului n aflarea valorii digitale corespunz!toare semnalului de pe intrare. Domeniul de m!surare este setat de c!tre valoarea tensiunii sursei de referin#! externe ce aplic! tensiunea stabilizat! pe intrarea VREF. Comparatorul ntoarce la fiecare tact al convertorului rezultatul compara#iei "i astfel mpreun! cu logica de control realizeaz! trecerea la testarea urm!torului bit. Convertorul va realiza n $2 ciclii testarea fiec!rui bit de informa#ie sincron cu semnalul de ceas DCLOCK, ncepnd cu al $,5-lea impuls de ceas (perioad! de e"antionare, caracteristic! acestui convertor) dup! care informa#ia va fi disponibil! bit de bit ncepnd cu bitul cel mai semnificativ pe ie"irea DOUT a circuitului. L!#imea implusurilor (durata acestora), nu trebuie s! fie mai mic! de 400ns, circuitul acceptnd astfel frecven#e de ceas cuprinse ntre
7. Aplica#ii
"95
$0KHz "i $,2 MHz, ceea ce corespunde unor rate de e"antionare a semnalului analogic cuprinse ntre:625 Hz "i respectiv 75kHz. Impulsurile corespunz!toare de ceas sunt oferite de conexiunile pe care le vom realiza ntre convertor "i microcontroller. Am ales tot microcontroller-ul Atmel, avnd n vedere simplitatea schemei ce implementeaz! aplica#ia "i faptul c! acesta prezint! dou! canale num!r!toare temporizatoare ceea ce favorizeaz! aplica#ia. Timing-ul este prezentat n figura $$, iar schema de conectare n figura $2.
Figura 7. "" Timing-ul (e"alonarea n timp) semnalelor de comand! pentru circuitul ADS7822
RxD
P".5
CS#
AT89C205"
ADS7822
TxD
Vom utiliza canalul $ al circuitului drept generator al ratei de transmisie serial! a datelor, iar canalul 0 drept generator al frecven#ei de ceas necesar! convertorului A/D. Formarea semnalului DCLOCK va fi realizat! soft, prin generarea ratei de achizi#ie, programnd corespunz!tor canalul respectiv. Aici este momentul s! facem cteva comentarii.
"96
MICROCONTROLLERE
Dac! microcontroller-ul func#ioneaz! la o frecven#! de ceas de 24MHz, teoretic frecven#a maxim! pentru semnalul DCLOCK ar trebui s! fie de $MHz, dar va trebui s! #inem cont de alte cteva am!nunte, "i anume: ntrzierea datorat! procesului de servire a ntreruperilor, care n acest care este de minimum 7 s. De ntrzierea datorat! execu#iei instruc#iunilor rutinei de servire a ntreruperilor De ntrzierile (care pot fi aleatorii) datorate proceselor de schimb de informa#ie concurente procesului de achizi#ie, cum ar fi procesul de transfer serial al datelor c!tre sistemul ierarhic superior, alte procese ce concur! la buna func#ionare a sistemului, etc.
n final, vom specifica cum se calculeaz! frecven#a maxim! de ceas corespunz!toare achizi#iei de semnal. n figura 7.$3 d!m structura principalelor fluxuri de informa#ie n cadrul sistemului propus. Proiectarea programelor n cazul astfel specificat, implic!:
START
ntre rupere
ntre rupere
Ini#ializarea de sistem, ceea ce presupune: Resetarea memoriei sistemului, Setarea valorilor corespunz!toare frecven#ei de achizi#ie, Scrierea rutinelor de servire a ntreruperilor Implementarea transferului semnalului de ceas c!tre convertorul A/D Implementarea achizi#iei datelor de la convertor
7. Aplica#ii
"97
Implementarea buffer-elor de intrare/ie"ire Implementarea transferului serial al datelor, la frecven#a "i n condi#iile dorite. Scrierea programului principal, care are ca principal rol, rolul de a a"tepta producerea unor evenimente.
D!m n continuare programul ce implementeaz! aplica#ia. ;Rutina de servire a ntreruperilor corespunz!toare achizi#iei de semnal ;Realizeaz! achizi#ia unei date n cadrul ei, necesit! urm!toarele loca#ii: CT_H EQU $$H CT_L EQU 00H SET_UART EQU 5CH ;Setarea parametrilor interfe#ei seriale SET_TIMER EQU 2$H ;Setarea modului de func#ionare pentru timer-ele microcontroller-ului SET_T$ EQU 0FDH ;Setarea constantei de timp pentru rata de transfer a UART DSEG ORG 24H STATUS DATA 00H CONTOR DATA 00H ;Loca#ia memoreaz! nr. de pasi la achizi#ie DATA_REC DATA 00H ;Loca#ia memoreaz! comanda venita via UART DATA_LSB DATA 00H ;Loca#ie byte mai pu#in semnificativ DATA_MSB DATA 00H ;Loca#ie byte mai semnificativ BSEG TRS_MSB BIT $0H ;Specific! necesitatea transferului celui mai semnificativ byte al datei achizi#ionate REC_EN BIT $$H ;Specific! recep#ia complet! a unui caracter, caz n care programul principal l va ;analiza genernd ecourile specifice comenzii primite ;Rutina de servire a ntreruperilor corespunz!toare canalului 0 temporizator ;In cadrul programului principal se vor seta: ;rata de e"antionare prin setarea constantei de timp ;modul de achizi#ie: $.un singur punct / 2. puncte multiple CSEG ORG 0H JMP MAIN ORG 0BH ISR_T0: (24) PUSH PSW ;Salvez contextul respectiv registrele PSW "i ACC (24) PUSH ACC ("2) SETB PSW.3 ;Schimb bancul tin#! de registre generale cu bancul$ ("2) MOV TH0,#CT_H ("2) MOV TL0,#CT_L
"98
MICROCONTROLLERE
;Rencarc! constantele de timp "i redecla"eaz! temporizarea corespunz!toare ("2) CLR IE.$ ;Reseteaz! flag-ul de ntrerupere corespunz!tor canalului 0 ("2) SETB P$.5 ("2) CLR P$.5 ;Activeaz! CS# pentru accesul la convertor ("2) CLR P$.4 ;Reseteaz! DCLOCK pentru $ ms. Formeaz! DCLOCK =0 ("2) SETB P$.5 ;Formeaz! DCLOCK =$ ("2) CLR P$.5 ;Formeaza DCLOCK =0 ;S-a ncheiat perioada de e"antionare pentru convertor. Urmeaz! citirea datelor ;Aceasta presupune urm!toarele: DCLOCK=$, Incrementeaz! contor,DCLOCK=0, ;Cite"te data. Num!rul de cicluri este de $3 avnd n vedere c! prima valoare citit! ;de la CAD este 0 ("2) MOV R0,#8 ;Initializez contor ("2) MOV A,#00H;Resetez ACC LOOP_MSB: "80/"2="5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus ("2) SETB P$.4 ;Formeaza DCLOCK =$ ("2) CLR P$.4 ;Formeaza DCLOCK =0 (24) JNB P$.7,CLR_BIT8 ("2) SETB ACC.0 CLR_BIT8: ("2) RL A (24) DJNZ R0,LOOP_MSB ("2) MOV DATA_MSB,A ;Salvez bi#ii 4 la $2 achizi#iona#i ("2) MOV R0,#4 ;Ini#ializez contor ("2) MOV A,#00H;Resetez ACC "80/"2=28,5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus LOOP_LSB: ("2) SETB P$.4 ;Formeaza DCLOCK =$ ("2) CLR P$.4 ;Formeaza DCLOCK =0 (24) JNB P$.7,CLR_BIT0 SETB ACC.0 CLR_BIT0: ("2) RL A (24) DJNZ R0,LOOP_LSB ("2) MOV DATA_MSB,A ;Salvez bi#ii 0 la 3 n DATA_LSB ;Am achizi#ionat to#i cei $2 bi#i oferi#i de ADS7822 "80/"2="4,5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus ("2) SETB P$.5 ;Inactivez CS# ;Formez rezultatul conversiei ("2) MOV A,DATA_MSB ("2) SWAP A (24) PUSH ACC
7. Aplica#ii
"99
("2) ANL A,#0F0H ;Maschez LSB=bi#ii 4-7 ai LSB ("2) ORL A,DATA_LSB ("2) MOV DATA_LSB,A ;Formez primii 8 bi#i ai datei convertite (24) POP ACC ("2) ANL A,#0FH ;Maschez cel mai seminificativ semibyte ("2) MOV DATA_MSB,A ;Formez urm!torii 4 bi#i -cei mai ;semnificativi (24) POP PSW ;Refac starea PSW dinaintea intr!rii n ntreruperi (24) POP ACC ;Refac starea ACC dinaintea intr!rii n ntreruperi (24) RETI "80/"2=8,5S este timpul ct dureaz& execu%ia instruc%iunilor de mai sus 66,5S ESTE TIMPUL TOTAL CORESPUNZ#TOR ISR _T0 ;Rutina de servire a ntreruperilor corespunz!toare UART ;Sistemul va transmite date doar la cererea sistemului ierarhic superior "i ;numai maximum doi bytes ORG 23H ISR_SI: (24) JB RI,REC ;Testare dac! a fost recep#ionat un caracter TRS: ;NU! Intrerupere la transmisie ("2) CLR TI ("2) JNB TRS_MSB,END_TRS;Test dac! mai sunt de transmis date ("2) MOV SBUF,DATA_MSB ;Transfer MSB data achizi#ionat! ("2) CLR TRS_MSB END_TRS: (24) RETI REC: ("2) CLR RI ("2) MOV DATA_REC,SBUF ;Scriu data n buffer-ul de recep#ie ("2) SETB REC_EN ;Specific recep#ia unui caracter (24) RETI MAIN: CALL INIT ;Rutina de initializarea a sistemului LOOP: JNB REC_EN,LOOP ANALIZA: MOV A,#'A' ;Incarc! primul caracter utilizat drept comanda CJNE A,DATA_REC,CONTINUE0 CALL INIT_ACHIZITIE JMP LOOP CONTINUE0: ;Aici pot fi inserate celelate teste pentru comenzile pe care le instituim prin protocol ; NOP
200
MICROCONTROLLERE
INIT_ACHIZITIE: ;Rutina de initiere a achizitiei datelor trebuie sa valideze intreruperile ;corespunzatoare canalului 0 si sa incarce constanta de timp corespunzatoare ;ratei de esantionare MOV TH0,#CT_H MOV TL0,#CT_L SETB TR0 SETB T0 RET INIT: ;Rutina de ini#iere de sistem. Nu mai detaliem ini#ializarea memoriei MOV IE,#90H ;Ini#ializez ntreruperile corespunz!toare UART MOV PSW,#0 ;Ini#ializez PSW MOV SCON,#SET_UART ;Ini#ializez UART MOV TMOD,#SET_TIMER ;Setez modurile de func#ionare ale timer-elor MOV TL$,#0 MOV TH$,#SET_T$ ;Setez constantele de timp RET S! observ!m c! dac! calcul!m timpul de execu#ie corespunz!tor instruc#iunilor rutinei de servire a ntreruperilor la achizi#ia datelor n cazul unei frecven#e de ceas de 24 MHz ob#inem o durat! de 66,5 s, adic! frecven#a maxim! de achizi#ie este de: $5.037 Hz. Putem constata c! "i n situa#ia n care am utilizat facilit!#ile hard de sincronizare, respectiv sistemul de ntreruperi totu"i viteza de achizi#ie este puternic legat! de modul de implementare prin program a acesteia, deci acest aspect va trebui cu cea mai mare grij! analizat "i proiectat. Observ!m c! dac! am fi utilizat la achizi#ia datelor de la convertorul analog-digital facilitatea interfe#ei UART a microcontroller-ului (vezi modul 0 de func#ionare) am fi putut cre"te frecven#a maxim! de achizi#ie aproape de limita superioar! corespunz!toare convertorului analog-digital. n acest caz, observ!m c! ar fi fost necesar s! recep#ion!m sincron doi octe#i, ceea ce ar fi dus la consumarea unui timp de aproximativ $6 ciclii de ceas, adic! la 24 MHz timpul de achizi#ie ar fi fost de 8s, ceea ce corespunde unei rate de e"antionare de $25000Hz ceea ce evident c! dep!"e"te frecven#a maxim! admisibil! a convertorului. Evident, n acest caz am fi renun#at la utilizarea UART drept port de leg!tur! cu sistemul ierarhic superior.
7. Aplica#ii
20"
n acest scop vom utiliza convertorul ADS782$ convertor cu registru de aproxima#ii succesive de $6 bi#i. Cteva date tehnice importante: frecven#a maxim! $00 kHz, domeniul tensiunilor de intrare: 0 la 5 V, poate utiliza att o referin#! de tensiune intern!, ct "i una extern!, poate fi conectat direct la un bus de sistem. Schema bloc a sa este prezentat! n figura 7.$4.
Pentru a-l putea conecta, este necesar s! cunoa"tem care este modul de func#ionare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur! citirea rezultatului sau declan"area conversiei, semnalul CS# permite trecerea busului din starea High Impedance ntr-una din st!rile $ sau 0 logic, semnalul BYTE permut! magistralele low/high de ie"ire, iar linia BUSY# semnaleaz! situa#ia n care convertorul se g!se"te n faza de e"antionare "i conversie a semnalului analogic. Pentru a realiza conversia de semnal va trebui s! cunoa"tem care este succesiunea de semnale de comand!. Combina#iile posibile sunt prezentate n tabelul I.
202
MICROCONTROLLERE
Astfel aplicnd simultan un 0 logic pe liniile CS# "i R/C# "i men#innd cel pu#in 40 ns linia R/C# n zero logic realiz!m e"antionarea "i conversia semnalului analogic. Semnalul BUSY va sta n zero logic din momentul ini#ierii conversiei "i pn! la momentul la care aceasta s-a ncheiat. Convertorul l va aduce automat pe $ logic, moment la care valoarea numeric! corespunz!toare semnalului de intrare va fi valid! pe ie"irea convertorului. Linia BYTE va permuta bi#ii inferiori "i superiori ai rezultatului. Astfel dac! BYTE=0, pinii de ie"ire ai convertorului de la 6 la $3 vor scoate semi-byte-ul mai semnificativ, pentru ca dac! BYTE = $, aceia"i pini s! re#in! cei mai pu#ini 8 bi#i ai rezultatului conversiei. Structura schemei electrice este gndit! pentru procesorul AT89C205$, n urma analizei resurselor pe care acesta le posed!, precum "i a necesit!#ilor datorate convertorului analog-digital ADS782$ (figura 7.$5).
TxD RxD P3.4 P3.5 P3.7 P3.2 CS# R/C# BYTE BUSY
AT89C205 "
ADS782 "
P $ .0-7
6- $ 3
7. Aplica#ii
203
Strategia urmat! va consta n: $. declan"area conversiei prin resetarea liniilor CS# "i R/C# 2. trecerea dup! mai mult de 40 ns a semnalului R/C#n $ logic 3. citirea rezultatului atunci cnd linia BUSY# va trece n $ logic. Pentru implementarea achizi#iei vom putea folosi att unul ct "i cel!lalt dintre controller-e. S! analiz!m avantajele "i dezavantajele acestor implement!ri. Legnd liniile CS#, R/C# "i BYTE la portul 3 al microcontroller-ului nu afect!m func#ionalitatea acestuia c!ci cele dou! canale temporizatoare le vom folosi, unul pentru generarea ratei de e"antionare a semnalului analogic, iar cel!lalt drept generator al frecven#ei de ceas pe linia serial! de date a UART. Liniile portului P$ sunt direct conectate la liniile 6 la $3 ale convertorului. E"alonarea n timp a evolu#iei semnalelor este dat! n figura 7.$6. Semnalul byte permut! pe acela"i grup de 8 linii de ie"ire byte-ul mai semnificativ cu cel mai pu#in semnificativ, func#ie de nivelul logic $, respectiv 0 logic.
Pentru achizi#ia datelor va trebui s! aloc!m resursele disponibile ale microcontroller-ului astfel: $. rutina de servire a ntreruperilor corespunz!toare semnalului BUSY, astfel ca pe frontul pozitiv al acestuia s! se declan"eze rutina de servire. (vezi declan"area se face pe frontul descresc!tor, iar starea de interes la achizi#ie este starea corespunz!toare frontului cresc!tor, deci am introdus un inversor). 2. rutina de start al conversiei A/D rutina de servire corespunz!toare ntreruperilor timer overflow de la canalul 0. 3. vom scrie rutina de servire a ntreruperilor corespunz!toare UART
204
MICROCONTROLLERE
4. vom proiecta rutina de ini#ializare 5. vom scrie programul principal de func#ionare ce cuprinde rutina de analiz! a informa#iilor vehiculate prin UART Programul ce implementeaz! aceast! aplica#ie a considerat urm!torul protocol: Caracterul A reprezint! comanda de achizi#ie necondi#ionat! a datei Caracterul C reprezint! comanda de achizi#ie continu! cu o rata fix! de e"antionare, aprioric stabilit! prin constantele de timp CT_L "i CT_H a datelor Caracterul D reprezint! comanda de transfer a datei achizi#ionate via interfa#a UART. D!m n continuare programul: CT_L CT_H CT_SMOD CT_ST CT_SSCON ;Valori pentru analogic 00H 80H EQU 2$H ; EQU 55H ; EQU 5CH ; constanta de timp necesara la declansarea conversiei semnalului EQU EQU
DSEG BSEG RX BIT $0H ;Specifica receptia unui caracter TX BIT $$H ;Specifica necesitatea transferului DATA_LSB DE BIT $2H ;Specifica existenta unei date achizitionate DATA_UART DATA 30H ;Locatie data receptionata pe UART DATA_LSB DATA 3$H ;Locatie LSB data achizitionata DATA_MSB DATA 32H ;Locatie MSB data achizitionata CSEG ;ISR_EXT0 Rutina de servire a intreruperilor corespunzatoare achizitiei de la CAD ORG 0H JMP MAIN JMP ISR_EXT0 ORG 0BH JMP ISR_T0 ORG 23H JMP ISR_SI ISR_EXT0: PUSH PSW ;Salveaza starea UC SETB PSW.3 ;Seteaza bancul $ de regsitrii generali, ca registrii "tinta" MOV DATA_MSB,P$ ;Salveaza partea mai semnificativa a datei
7. Aplica#ii
205
MOV DATA_LSB,P$ ;Salveaza partea mai putin semnificativa a SETB DE POP PSW ;Reface starea UC RETI ;Iese din ISR ;ISR_T0 Rutina de servire a intreruperilor corespunzatoare frecventei de esantionare ISR_T0: PUSH ACC ;Salveaza acumulatorul MOV A,P3 ANL A,#0E7H MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 POP ACC ;Reface acumulatorul SETB P3.5 ;Pregatim citirea datei coresp.valorii analogice MOV TL0,#CT_L MOV TH0,#CT_H ;Scriu valorile de temporizare RETI ;Iese din ISR ;ISR_SI Rutina de servire a intreruperilor corespunzatoare UART ISR_SI: JB RI,RECEPTIE ;Testare intrerupere la receptie ;NU! Intrerupere la transmisie TRANSMISIE: CLR TI ;Sterg flag pentrua reanclasa intreruperea JB TX,SCRIE ;Test daca trebuie sa transmit si LSB ;NU! RETI ;Iesire din ISR SCRIE: MOV SBUF,DATA_LSB ;Scriu LSB CLR TX ;Sterg flag atentionare transfer via UART a LSB RETI ;Iesire din ISR RECEPTIE: CLR RI ;Sterg flag receptie data pe UART MOV DATA_UART,SBUF ;Citesc data receptionata pe linia seriala SETB RX ;Semnalez receptia si citirea datei RETI ;Programul principal de functionare a sistemului MAIN: CALL INIT LOOP:
206
MICROCONTROLLERE
MOV A,DATA_UART CJNE A,'A',TEST$ ;Comanda SOC ("Start Of Conversion") MOV A,P3 ANL A,#0E7H MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ; SETB P3.5 TEST$: CJNE A,'C',TEST2 MOV A,P3 ANL A,#0E7H MOV P3,A ;Genereaza simultan CS#=0 si R/C#=0 ; POP ACC ;Reface acumulatorul SETB P3.5 ;Pregatim citirea datei coresp.valorii analogice MOV TL0,#CT_L MOV TH0,#CT_H ;Scriu valorile de temporizare SETB TR0 ;Validez impulsurile catre temporizator canalul 0SETB IE.$ ;Validarea intreruperilor "timer 0 overflow" TEST2: CJNE A,'D',FINAL SETB DE FINAL: JNB DE,LOOP INIT_TRS: JB TI,INIT_TRS MOV SBUF,DATA_MSB SETB TX CLR DE JMP LOOP INIT: MOV R0,7FH LP: MOV @R0,#0H DJNZ R0,LP ;Reseteaza memoria interna a controller-ului MOV SP,#60H MOV TMOD,#CT_SMOD MOV TCON,#CT_ST MOV SCON,#CT_SSCON MOV IE,#9$H MOV P3,#0FFH
7. Aplica#ii
207
RET END Locatarea variabilelor "i a registrelor utilizate de c!tre aplica#ie este dat! pe CD.
Circuitul ADS$2$0/$2$$ este un convertor analog-digital cu un domeniul de intrare deosebit de larg. Ofer! o rezolu#ie de 24 de bi#i, cu facilitatea de autocalibrare "i de multiplexare intern! diferen#ial! pentru 4 canale distincte n cazul ADS$2$$. Circuitul posed! un amplificator cu amplificare programabil! digital (PGA), un modulator sigma-delta de ordinul 2, un filtru digital programabil care
208
MICROCONTROLLERE
include un microcontroller ce dispune de regi"trii de instruc#iuni, comenzi, precum "i de regi"trii de date, offset "i calibrare la cap!t de scal!. Referin#a de tensiune este intern! "i setabil! digital cu valori de pn! la 2,5V. Func#ionarea detaliat! a convertorului este prezentat! n foaia sa de catalog. (www.burr-brown.com) unde sunt detaliate "i modurile sale de func#ionare. Dou! sunt tipice: master mode (MODE=$) -caz n care convertorul are ini#iativa transferului datelor achizi#ionate imediat dup! faza de ini#ializare "i slavemode, (MODE=0)caz n care ini#iativa "i frecevn#a de ceas sunt oferite de c!tre controller-ul magistralei de conexiune. n figura 7.$8 d!m diagramele de timp pentru cazul n care circuitul este conectat ca element slave (pinul MODE este plasat pe 0 logic) pe bus.
Schema de conectare aleas! permite realizarea tuturor modurilor de func#ionare pentru convertor, respectiv att a modului "slave" ct "i a modului "master". De asemenea prin controlul liniei CS# este posibil! inserarea mai multor convertoare pe acela"i bus "i adresarea acestora. n figura 7.$9 este prezentat! aceast! schem!.
7. Aplica#ii
209
Pentru a putea scrie programele de ini#ializare "i cele de achizi#ie este necesar s! cunoa"tem structura regi"trilor interni ai convertorului. Registrul de instruc#iuni este cel prin intermediul c!ruia se controleaz! transferul informa#iilor "i are structura: INSTR R/W# MB" MB0 0 A3 A2 A" A0
Bitul R/W# specific! tipul opera#iei: de citire/scriere respectiv $/0 logic. Bi#ii MB$ "i MB2 codific! num!rul de octe#i de comand! pe care circuitul i va recep#iona, via interfa#a serial!: combina#ia 00 corespunde unui octet, 0$ la doi octe#i, $0 la 3 octe#i "i $$ la 4 octe#i transmi"i succesiv. Bi#ii A3,A2,A$,A0 adreseaz! regi"trii interni ai convertorului, conform tabelului al!turat.
Circuitul este astfel conceput nct dup! fiecare sesiune de scriere adreseaz! implicit, din nou, regsitrul de instruc#iuni. Odat! decla"at!, spre exemplu achizi#ia datelor, acestea vor fi emise autonom, func#ie de set!rile stabilite. Registrele de comenzi permit setarea parametrilor de achizi#ie pentru convertorul analog-digital. ntre ace"tia amintim: rata de e"antionare n concordan#! cu frecven#a de decimare "i c"tigul amplificatorului de pe intrare ob#inute pe convertor, canalul selectat, formatul datelor, sursa pentru tensiunea de referin#! "i modul de achizi#ie: unipolar sau bipolar, ordinea de emisie a datelor ncepnd cu LSB (Last Signifiant Bit) sau cu MSB (Most Signifiant Bit). Setarea modurilor de func#ionarese face conform structurii de bi#i de comand! urm!tori.
2"0
MICROCONTROLLERE
Byte 3 (MSB)
BIAS O = Off REF " = On DF " =comp 2 U/B# 0= Bipolar BD 0= MSB MSB 0=MSB SDL 0=SDIO DRDY/ DSYNC# 0
Valorile trecute pe a doua linie sunt cele implicite. Pentru valoarea 0 a bitului BIAS, tensiunea de referin#! este de 2,5V, iar pentru valoarea $ ea este $,33*2,5V adic! aproximativ 3,3V. Un $ logic pe bitul REF asigur! utilizarea sursei interne de referin#!, iar 0 aduce n starea de mare impedan#! aceast! surs!, permitnd utilizarea unei surse de referin#! externe. DF exprim! formatul datelor, 0 implic! formatul datelor n complement fa#! de doi +FSR=7FFFFFH, 0=000000H, iar -FSR=800000H (FSR este abrevierea scalei complete "Full Scale Range"). U/B# exprim! cnd este 0 achizi#ia bipolar! a datelor, iar cnd este $ exprim! achizi#ia unipolar! a acestora. BD exprim! ordinea de transfer a bytes, setnd bitul ordinea este cresc!toare de la LSB c!tre MSB "i invers dac!-l reset!m. MSB exprim! cine este primul bit emis n cadrul fiec!rui byte, $ implic! transferul nti al bitului cel mai nesemnificativ, iar 0 implic! transferul nti al bitului cel mai semnificativ. SDL comand! utilizarea a unei linii bidirec#ionale seriale (SDIO) dac! este resetat, respectiv a dou! linii seriale dac! este setat (SDIO pentru comenzi "i SOUOT pentru date) DRDY# exprim! resetat prezen#a datelor (Data Ready), iar setat exprim! date invalide. MD2 MD" MD0 G2 G" G0 CH" CH0
Byte 2
Acest byte seteaz!, modurile de func#ionare, codate binar de la 0 la 7, valorile c"tigului "i selecteaz! canalul de intrare pentru achizi#ia de semnal. Modurile de func#ionare codate binar sunt n ordine, ncepnd de la 000H urm!toarele: $. Normal, 2. "Self calibration" calibrare automat!, 3. Calibrare de offset, 4. Calibrare la cap!t de scal!, 5. "Pseudo-calibrare", 6. Calibrare n fundal "background calibration", 7. "Sleep" "i 8. Rezervat -neutilizat.
7. Aplica#ii
2""
Byte " SF2 SF" SF0 DR"2 DR"" DR"0 DR9 DR8
SF2, SF$, SF0 selecteaz! una dintre valorile modului turbo de func#ioare a circuitului, iar valorile DR$2 la DR0 seteaz! frecven#a de decimare pentru filtrul digital al convertorului. Byte 0 DR7 DR6 DR5 DR4 DR3 DR2 DR" DR0
n modul de conectare ce utilizeaz! liniile SDIO "i SDOUT convertorul poate fi controlat dinamic, respectiv poate lucra n modul de citire continu!, admitnd n acela"i timp comenzi prin intermediul liniei SDIO "i genernd date via linia SDOUT. (vezi documenta#ia firmei Burr - Brown, memorat! pe CD) Implementarea unui ciclu descriere a comenzilor n modul slave presupune ndeplinirea urm!torilor pa"i: $. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic 2. A"teapt! ca CS# s! treac! la rndul s!u n zero logic 3. Genereaz! 8 cicluri de ceas pentru a trece n instruction register data de configurare via SDIO 4. Genereaz! n ciclii de ceas de transmisie pentru nscrierea regi"trilor #int! ai comenzilor (vezi documenta#ia la ADS$2$0 ads$2$0.pdf de la Burr-Brown) 5. Ads$2$0 pune pe $ logic DRDY Repet! pa"ii 3 la 5 pn! la transmiterea tuturor cuvintelor de comand! c!tre ADS$2$0, dup! care intr! n ciclul/ciclurile de citire a datelor, ceea ce presupune: $. 2. 3. 4. A"teapt! ca ADS$2$$ s! plaseze DRDY# pe zero logic A"teapt! ca CS# s! treac! la rndul s!u n zero logic Dac! este n modul citire continu! (Continous Read), trece la pasul 5 Microcontroller-ul genereaz! 8 ciclii de ceas "i transfer! cuvntul de control n registrul de instruc#iuni via SDIO 5. Dac! utiliz!m SDIO drept linie bidirec#ional! vom urm!rii evolu#ia acesteia n continuare, dac! nu, atunci linia SDIO trece n starea de mare impedan#! 6. Microcontroller-ul emite n ciclii de ceas (n multiplu de 8) "i transmite/recep#ioneaz! informa#ia din registrul specificat prin instruc#iunea de la punctul 4. Recep#ia acestor bi#i se face pe linia SDOUT sau SDIO dup! caz. 7. SDOUT sau SDIO intr! n starea de mare impedan#!, dup! ce a transmis informa#ia comandat!
2"2
MICROCONTROLLERE
8. Testare dac! mai sunt de transmis alte comenzi sau cereri de date. Dac! da se reia ciclul de la punctul 2. CS# r!mne inactiv $0,5 ciclii de ceas. Programul de mai jos prezint! cteva rutine, ca de transfer a unui cuvnt de comand!, precum "i cea de citire a unei date format! din trei octe#i. Programarea microcontroller-ului va fi specific! pentru fiecare aplica#ie n parte, ea trebuind s! realizeze adaptarea parametrilor convertorului n raport cu rezolu#ia "i rata de e"antionare impuse de aplica#ie. Programul de func#ionare permite: $. Sincronizarea transferului comenzilor c!tre CAD; 2. Generarea soft "i emiterea semnalului de ceas (SCLK), c!tre CAD 3. Transferul informa#iilor de ini#ializare "i a comenzilor c!tre CAD 4. Recep#ia datelor corespunz!toare semnalului analogic convertit Iat! acest program: ORG 28H PROG: DB 0$$00$00B ;Cuvnt de instruc#iuni DB 0$0000$0B ;Cuvnt de C-d! nr. 3 DB 00000000B ;Cuvnt de C-d! nr. 2 DB 00000000B ;Cuvnt de C-d! nr. $ DB 00000000B ;Cuvnt de C-d! nr. 0 ;Cuvntul de instruc#iuni asigur! scrierea cuvintelor de comand! 3, 2, $ "i 0 DB $$000000 ;Cuvntul asigur! citirea celor 3 regi"trii corespunz!tori valorii semnalului analogic convertit BUFFER: DS 03H CAD: JB P$.0,CAD ;Testeaz! starea CAD, respectiv DRDY#=0 MOV R$,#04H MOV R0,#PROG ;Preg!te"te transmiterea a 5 octe#i c!tre CAD, ce sunt: cuvntul de instruc#iuni "i ;cele 4 cuvinte de comand!. Cuvintele sunt memorate ncepnd de la adresa PROG LOOP_$: MOV A,@R0 CALL SERIAL_OUT INC R0 DJNZ R$,LOOP_$ CAD$: JB P$.0,CAD$ ;Testeaz! starea CAD, respectiv DRDY#=0 MOV A,@R0 CALL SERIAL_OUT LOOP_2: JB P$.0,LOOP_2 ;A"teapt! conversia datelor de c!tre CAD, semnalul DRDY# va fi resetat MOV R$,#03H MOV R0,#BUFFER ;Preg!te"te citirea celor 3 bytes de date, corespunz!tori semnalului analogic LOOP_3:
7. Aplica#ii
2"3
CALL SERIAL_IN MOV @R0,A INC R0 DJNZ R$,LOOP_3 ;ncheie un ciclu complet Ini#ializare comand! "i achizi#ie data convertit! SERIAL_OUT: CLR P$.3 MOV R7,#08H RL A RL A LOOP_OUT: JB ACC.2,SET_OUT CLR P$.2 JMP CLOCK_OUT SET_OUT: SETB P$.2 CLOCK_OUT: SETB P$.3 CRL P$.3 ;Genereaz! semnalul SCLK RL A DJNZ R7,LOOP_OUT ;Transfer! un octet c!tre CAD RET SERIAL_IN: CLR P$.3 MOV R7,#08H LOOP_IN: JB P$.$,SET_IN CLR ACC.0 JMP CLOCK_IN SET_IN: SETB ACC.0 CLOCK_IN: SETB P$.3 CRL P$.3 RL A DJNZ R7,LOOP_IN ;Recepteaz! un octet de la CAD RET
2"4
MICROCONTROLLERE
"Latch Enable", l!c!tuie"te informa#ia serial receptat! "i o aplic! convertorului la momentul valid!rii l!c!tuirii.
Data este intrarea de "Date", ce sunt transmise n format complement fa#! de 2, sincron cu semnalul de ceas "Clock". Am!nunte privind fronturile "i sincronizarea datelor "i timming-ul corespunz!tor transferului unei date sunt prezentate n figura 7.2$. Se constat! c! datele sunt transmise ncepnd cu cel mai semnificativ octet, frontul negativ realizeaz! deplasarea acestora la dreapta bit de
bit. Frontul pozitiv reprezint! frontul pe care data este memorat! n registrul de deplasare aflat pe intrarea convertorului digital-analog PCM56. Intrarea LE trebuie s! stea pe $ logic cel pu#in un ciclu de ceas, ea plasndu-se pe durata transferului serial al datelor pe 0 logic. La sfr"itul transferului ea va fi trecut! n $ logic pentru cel pu#in $,5 perioade de ceas.
7. Aplica#ii
2"5
Utiliznd microcontroller-ul AT89C205$ vom conecta liniile P$.7 la linia Clock, P$.6 la linia Date, iar P$.5 la linia LE. D!m mai jos rutina care realizeaz! comanda convertorului. CT_TMOD EQU 2$H ;Setare mod functionare canale temporizatoare: ; canalul 0 utilizat pentru rata de e"antionare comand! programat n modul $ ; canalul $ utilizat pentru rata de transfer serial programat n modul 2 CT_TCON EQU 50H ;Setez flag-urile de dezinhibare a num!r!rii pentru canalele 0 & $ CT_SCON EQU 90H ;Setez modul $ de transfer serial UART 8 bi#i pilotat cu rata variabil! de c!tre ;canalul $ temporizator CT_LOW0 EQU 00H CT_HIGH0 EQU 00H CT_LOW$ EQU 0FDH ;Constanta de timp corespunz!toare ratei de 9600 Baud la fceas=$$,059MHz LEN_BUFFER EQU 20H ;Lungime prestabilit! a blocului ;de date de transferat. CONTOR_B este mai mic sau egal cu LEN_BUFFER BSEG REC BIT 0H ;Flag-ul setat exprim! recep#ia complet! a unui caracter via UART RANG_DATA BIT $H ;Flag ce exprima byte-ul care este transferat c!tre CDA DSEG DATA_CDA: DS LEN_BUFFER ;Buffer bloc date DATA_LOW DATA 00H ;LSB corespunz!tor datei de convertit D/A DATA_HIGH DATA 00H ;MSB corespunz!tor datei de convertit D/A ;Loca#ii corespunz!toare datei transferate c!tre CDA n modul transfer cuvnt DATA_SI DATA 00H ;Buffer de recep#ie a datelor (comenzi) via UART CONTOR_B DATA 00H ;M!rime bloc de date de transferat c!tre CDA POINTER_D SET DATA_CDA CSEG ORG 000H BOOT: JMP MAIN ORG 0BH ISRT0: JMP ISR_T0 ORG 23H ISRSI: JMP ISR_SI ;Rutina corespunde transferului unui cuvnt c!tre CDA ISR_T0: PUSH PSW PUSH ACC ;Salvez starea microcontroller-ului
2"6
MICROCONTROLLERE
SETB PSW.3 ;Utilizez bancul $ de regi"trii generali CLR P$.5 ;Invalidez LE, => Posibilitate de scriere in buffer-ul de serializare al CDA MOV R7,08H ;ncarc contor al bi#ilor de serializat corespunz!tor MSB MOV A,DATA_HIGH ;ncarc MSB LOOP_CDA$: RL A ;Rotesc informa#ia din Acumulator CLR P$.7 ;Reset semnal Clock c!tre CDA JB ACC.0,SET_BIT_CDA CLR P$.6 ;Reset DATA c!tre CDA CLK_CDA: SETB P$.7 ;Set semnal Clock c!tre CDA DJNZ R7,LOOP_CDA$ JMP CONT SET_BIT_CDA: SETB P$.6 ;Set DATA c!tre CDA JMP CLK_CDA ;Am transmis MSB c!tre CDA, urmeaz! LSB CONT: MOV R7,08H MOV A,DATA_LOW LOOP_CDA2: RL A CLR P$.7 ;Reset semnal Clock c!tre CDA JB ACC.0,SET_BIT_CDA$ CLR P$.6 ;Reset DATA c!tre CDA CLK_CDA$: SETB P$.7 ;Set semnal Clock c!tre CDA DJNZ R7,LOOP_CDA$ SETB P$.5 ;L!c!tuiesc informa#ia transferat! serial n buffer-ul de ie"ire al CDA CLR P$.5 ;Revalidez accesul la buffer-ul de intrare (serial) al CDA POP ACC POP PSW ;Refac starea UC dinaintea intreruperii de timp RETI SET_BIT_CDA$: SETB P$.6 ;Set DATA catre CDA JMP CLK_CDA$ ISR_SI: JB RI,RECEPTIE TRANSMITE: CLR TI RETI RECEPTIE: MOV DATA_SI,SBUF CLR RI SETB REC RETI MAIN:
7. Aplica#ii
2"7
MOV R0,#7FH LP: MOV @R0,#00H DJNZ R0,LP ;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului MOV SP,70H ;Setez adresa pentru stiva sistemului CALL INIT ;Realizez initializarile canalelor temporizatoare si a interfetei seriale MOV IE,#92H ;Validez ntreruperile corespunz!toare canalului 0 temporizator "i UART LOOP: ;Se va particulariza programul func#ie de protocolul dorit "i func#ie de ;particularit!#ile sistemului JNB REC,LOOP ;Testare caracter recep#ionat "i comanda corespunzatoare codului asignat ; ................ CLR REC ;Reancla"are analiz! a unui eventual nou caracter recep#ionat via UART JMP LOOP INIT: MOV TMOD,CT_TMOD MOV TCON,CT_TCON MOV TL0,#CT_LOW0 MOV TH0,#CT_HIGH0 MOV TL$,#CT_LOW$ SETB 0D7H ;Dublez rata de transfer serial a informa#iilor =>PCON.7=SCON=$ RET END
2"8
MICROCONTROLLERE
2. Subsistemul electronic de m!surare a tensiunii ap!rute n reazemul c!tre sistemul de referin#! fix format din cadrul cntarului. Principiul de func#ionare al cntarului dozator este acela de transformare a greut!#ii corespunz!toare materiilor prime pulverulente n semnal electric prin
AFISAJ SI TASTATUR#
Captor Tensometric
PREAMPLIFICATOR AMPLIFICATOR
CONVERTOR ANALOG-DIGITAL
PORT INTRARE
intermediul unui captor de for#! (Philips PR62$$). Acesta ofer! un semnal de tensiune n diagonala unei pun#i tensometrice rezistive care este alimentat! de la o surs! de tensiune de referin#!. Sensibilitatea senzorului este de 2mV/V, rezultnd la o nc!rcare egal! cu cea maxim admis!, "i cu o tensiune de alimentare a pun#ii de 5V rezult! o diferen#! maxim! de tensiune de $0mV pe diagonala pun#ii de m!surare. Prelucrarea semnalului analogic de la captorul tensometric este realizat! n dou! trepte de amplificare "i filtrare. Pentru semnalul amplificat, - domeniul de varia#ie este 0-$0V el fiind aplicat unui convertor analog-digital ADS7805 (analog convertorului ADS782$), de $6 bi#i cel converte"te n semnal digital. Sistemul digital este coordonat de c!tre un microcontroller de 8 bi#i Philips PCB80C552 (analog unuia Intel 805$), ce dispune de 40 de linii digitale de intrare/ie"ire, la care se adaug! 3 canale num!r!toare/temporizatoare, precum "i un convertor analog/digital de $0 bi#i intern precum "i dou! ie"iri PWM (Pulse Width Modulation). Microcontroller-ul posed! dou! interfe#e seriale, una standard UART
7. Aplica#ii
2"9
(Universal Asyncronus Receiver Transmiter), "i una I2C care asigur! o rat! de transfer mai bun! de 4Mbi#i/secund!. Memoria intern! a controller-ului este de 256 de bytes la care se adaug! regi"trii de func#ii speciale (Special Function Registers). Sistemul dispune de dou! afi"oare, unul cu LED-uri cu "apte segmente, necesar afi"!rii greut!#ii m!surate, iar al doilea cu LCD-uri 2x$6 caractere necesar pentru ghidarea prin intermediul mesajelor a operatorului, precum "i o tastatur! cu $2 taste multifunc#ionale. Memoria sistemului este de 64Kbytes, dintre care 32Kbytes EPROM "i 32Kbytes SRAM. Subsistemul mecanic asigur! transmiterea greut!#ii materiilor prime pulverulente c!tre captorul tensometric prin demultiplicarea efortului pe acesta. Factorul de demultiplicare al cntarului are expresia:
=a
$ , unde: 2( a + b ) +
a,b "i sunt dimensiuni ale bra#elor cntarului diferen#ial. Pentru dimensiunile de a=78 mm, b=300 mm "i =$50 mm, factorul k va fi: k=0,08, Subsistemul electronic de m!surare include captorul de for#! ce traduce reac#iunea normal! aplicat! asupra sa n semnal electric de tensiune. Iat! principalele caracteristici ale elementelor subsistemului: Captorul de for#!: clas! de precizie: D$, respectiv 0,05% eroare integral! de m!surare, (aceasta include toate erorile cea de zero, de neliniaritate, cea corespunz!toare varia#iei temperaturii, etc). Rezisten#a de intrare a captorului $200 , rezisten#a de ie"ire 1200 , rezisten#a de izola#ie a m!rcilor captorului n raport cu masa acestuia mai bun! 5000M. Tensiunea de alimentare a pun#ii tensometrice este de 5V cc, ob#inu#i de la o surs! de tensiune REF02 (Burr Brown) avnd o stabilitate excelent! n domeniul de temperaturi de la - $0 la +85C. Preamplificatorul de semnal este implementat cu ajutorul unui circuit INA$$4(Burr Brown), amplificator de m!surare integrat ce nu necesit! dect o singur! rezisten#! extern! de setare a amplific!rii. Dintre caracteristicile sale amintim: domeniu de tensiuni de alimentare: 2,25V la $8V, tensiune maxim! de offset 50V, drift maxim 0,25V/C, CMRR mai bun de $$5dB, curent maxim de polarizare pe intr!ri 2nA, domeniu temperaturilor de func#ionare ntre -40 "i +85C, este protejat la scurtcircuit pe ie"ire, "i la supratensiuni pe intrare. Circuitului i s-a setat o amplificare de $000. Amplificatorul de semnal: este implementat cu acela"i tip de amplificator ca "i preamplificatorul, amplificarea acestuia fiind de $,$3$6. Convertorul analog-digital ADS7805, cu urm!toarele caracteristici: $6 bi#i rezolu#ie, eroarea maxim! integral! 2-3 LSB (Last Signifiant Bit), f!r! coduri lips!, necesit! doar tensiunea de 5V pe alimentare, domeniul de intrare $0V, codarea n format complement fa#! de 2, rata de e"antionare maxim! $00 kHz, ie"irea
220
MICROCONTROLLERE
convertorului pe $6 bi#i se poate cupla direct la magistrala de date a sistemului $3 digital, domeniul temperaturilor de func#ionare 40 la +85C. Sistemul digital: asigur! comanda "i controlul de ansamblu, permite implementarea func#iunilor de m!surare, prelucrare, memorare, dozare "i afi"are a greut!#ii materiilor prime pulverulente. Unitatea central! PCB80C552, dispune de o memorie intern! de 256 bytes, iar sistemul de o memorie extern! de 64Kbytes( 32K EPROM /32KSRAM). Pentru a se realiza func#iunile sistemului s-au ad!ugat porturi digitale de ie"ire "i intrare de cte 8 bi#i fiecare, implementate cu circuitele 74LS374, 74LS574, respectiv 74LS244 "i 74LS574 care au o capabilitate n curent la ie"ire de 20-24mA/ie"ire. Afi"ajul cu LCD-uri este implementat cu circuitul LTN2$$, circuit ce posed! un microcontroller, memorie intern! "i un generator de caractere necesar afi"!rii a pn! la 5$2 caractere diferite. Capacitatea acestuia este de 2x$6 caractere. Afi"orul cu LED-uri este clasic, transferul informa#iilor binare c!tre acesta realizndu-se serial (vezi schema pe CD). S-a prev!zut o plac! special! de ie"iri numerice pe relee (4 buc!#i cu cte 2 contacte fiecare de cte 8 A), "i 8 intr!ri digitale izolate galvanic. Tastatura sistemului cuprinde $2 taste scanate soft de c!tre procesor. Dintre func#iunile pe care sistemul le implementeaz! amintim: Dozarea n fluxul tehnologic a materiilor prime pulverulente Filtrarea automat! a datelor de m!surare prin medierea unei serii de e"antioane. Tararea automat! realizat! la nceputul procesului de dozare, sau la cereera operatorului. Alte func#iuni implementate: Presetare greutate de dozat Presetare tempozare la sfr"itul procesului de dozare ( rezolu#ie $ secund!, domeniu 0 la 999s) Presetare tempozare pentru pornirea amestec!torului ( rezolu#ie $ secund!, domeniu 0 la 999s) Presetare tempozare la sfr"itul procesului de golire a cntarului ( rezolu#ie $ secund!, domeniu 0 la 999s) Determinare TARA Afi"are presetare greutate de dozat Afi"are preset!ri temporiz!ri Setare constant! de calibrare Afi"are constant! de calibrare
$3
ATEN!IE: se recomand! buffer-area ie"irii convertorului cu buffer-e n tehnologie Shotky pentru a nu permite traversarea convertorului de c!tre glich-uri ce pot apare pe partea analogic! de prelucrare a informa#iilor. Ace"ti parazi#i pot afecta func#ionarea corect! a sistemului!
7. Aplica#ii
22"
Transfer serial n format binar a greut!#ii m!surate n fazele de dozare "i golire a cntarului (formatul datelor: asincron, rata 9600 Bauds, 8 bi#i/cuvnt, f!r! paritate, 2 bi#i de stop)
Sistemul permite reglarea anumitor parametrii ai s!i, precum: cantitatea dozat!, temporiz!rile corespunz!toare diferitelor faze ale procesului de dozare. Utiliznd sistemul de ntreruperi al procesorului putem declan"a procesul de conversie la intervale de timp prestabilite pentru convertorul analog-digital de semnal asigurnd e"antionarea uniform! a semnalului de greutate. Programul complet de func#ionare al sistemului este nscris pe CD unde este dat! "i schema sistemului utilizat pentru aceast! aplica#ie. n continuare prezent!m cteva rutine care implementeaz! comanda unui afi"or LCD, comanda unui afi"or realizat cu afi"oare cu cte 7 segmente (5 afi"oare), rutina de nmul#ire a dou! cifre de cte $6 bi#i fiecare "i explic!m modul de utilizare a canalului "Watch Dog" pentru a evita ag!#area sistemului n cazul apari#iei unor zgomote parazite la nivelul magistralei de sistem. Scrierea c!tre un modul de afi"are LCD (LTN2$$, conectat la un port paralel de adres! $00H), implic! realizarea unor ntrzieri necesare procesului de transfer al datelor "i comenzilor. Implementarea acestora s-a realizat soft (ntrziere prin execu#ia de instruc#iuni), c!ci pe de-o parte nu este critic! durata temporizat!, iar pe de alt! parte n cadrul aplica#iei canalele temporizatoare/num!r!toare au fost dedicate altor procese ce necesit! o precizie mai ridicat!. Am utilizat MACRO-uri pentru scrierea acestor programe. n cadrul rutinelor de ntrziere am avut grij! s! reanclan"!m periodic temporizatorul "Watch Dog", pentru a evita generarea unui RESET al sistemului. ;Rutine pentru afisarea pe LCD EXTERN WAIT WAITVL MACRO ;Macro ce realizeaz! o ntrziere de LOCAL B_0,B_$,B_2 ;Etichete definite local n cadrul MACRO ("2) ;Ini#ializeaz! R5 cu valoarea de ciclare 32 MOV R5,#20H ("2) ;Ini#ializeaz! R6 cu valoarea de ciclare 255 B_$: MOV R6,#0FFH ("2) ;Ini#ializeaz! R6 cu valoarea de ciclare 255 B_0: MOV R7,#0FFH (24) ;Decrementeaz! contoare pe rnd B_2: DJNZ R7,B_2 (24) ;Decrementeaz! contoare pe rnd DJNZ R6,B_0 ORL PCON,#$0H("2) MOV T3,#00H ("2) (24) ;Decrementeaz! contoare pe rnd DJNZ R5,B_$ ENDM n partea dreapt! a mnemonicelor s-au men#ionat num!rul de perioade de ceas necesare execu#iei instuc#iunilor. Considernd frecven#a de ceas egal! cu $2 MHz, vom ob#ine temporizarea de: 4,$92secunde. Men#ion!m c! regi"trii R5, R6 "i R7 sunt utiliza#i drept contoare WAITL MACRO
222
MICROCONTROLLERE
LOCAL B_0,B_$,B_2 MOV R6,#04H B_0: MOV R7,#0FFH B_2: DJNZ R7,B_2 ;Anclansare WATCH DOG ORL PCON,#$0H MOV T3,#00H DJNZ R6,B_0 ENDM ;Temporizarea de: 0,002048secunde. ;Registrul este pointer-ul n buffer-ul de mesaj de scris la afi"or LCD ;Registrul DPTR este pointer-ul c!tre portul microsistemului la care se afl! afi"orul ;LCD BUCLA: MOV A,#0 ;Pointer la buffer-ul de mesaj MOVC A,@A+DPTR ;Rutina de scriere mesaj la LCD INC DPTR MOV R0,DPL MOV R$,DPH MOV DPL,R3 MOV DPH,R4 WAIT ORL PCON,#$0H ; Setare flag corespunz!tor WATCH DOG MOV T3,#00H ;Anclan"are WATCH DOG: scrie constanta MOVX @DPTR,A ;Scrie caracterul c!tre LCD MOV DPL,R0 MOV DPH,R$ DJNZ R2,BUCLA MOV DPL,R3 MOV DPH,R4 MOV A,#2 MOVX @DPTR,A ;Scrie comanda de avans cu un caracter la afi"orul LCD WAIT RET ;Rutin! de scriere a mesajelor c!tre afi"orul LCD ;MESAJ$ "i MESAJ2 adresele de nceput pentru mesajele de afi"at pe primul ;respectiv, pe al doilea rnd al afi"ajului LCD_PRINT MACRO #MESAJ$,#MESAJ2 MOV DPTR,#$00H ;Adresa de scriere la LCD MOV A,#$ ;Selec#ie func#ie: MOVX @DPTR,A ;DISPLAY / CLEAR LCD WAITL MOV A,#80H ;Selec#ie func#ie Cursor plasat pe: MOVX @DPTR,A ;RNDUL $
7. Aplica#ii
223
WAIT MOV R2,#$0H;ncarc! contor caractere ce vor fi afi"ate pe r-dul $ MOV DPTR,#$0$H ;ncarc! adresa de scriere c!tre afi"orul LCD MOV R3,DPL MOV R4,DPH MOV DPTR,#MESAJ$ ;ncarc! pointer c!tre mesajul de afi"at MOV R0,DPL MOV R$,DPH WAITL CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.) WAITL MOV DPTR,#$00H MOV A,#0C0H MOVX @DPTR,A; Comand! saltul la rndul 2 al afi"orului WAIT MOV DPTR,#$0$H MOV R3,DPL MOV R4,DPH MOV DPTR,#MESAJ2 ;ncarc! pointer c!tre mesajul de afi"at MOV R0,DPL MOV R$,DPH MOV R2,#$0H ;Contor de caractere Rnd 2 WAITL CALL BUCLA ;Rutin! de scriere mesaj (lungime mesaj $6 car.) WAITL ENDM n continuare prezent!m rutina de nmul#ire ntreag! a dou! valori memorate n loca#iile OP$ "i OP2 (loca#ii de $6 bi#i fiecare). n loca#iile MREZ$, MREZ2, MREZ3 "i MREZ4 (8 bi#i fiecare), n ordinea cresc!toare a rangului, vom ob#ine rezultatul nmul#irii. Rutina va genera produsul celor doi operanzi, iar flagul C va fi afectat la dep!"irea buffer-ului rezultat. Notnd cu N$H "i N$L, respectiv cu N2H "i N2L octe#ii corespunz!tori celor dou! numere, acestea pot fi scrise astfel: N$=256*N$H+N$L, iar N2=256*N2H+N2L. (N$L=LOW($),N2L=LOW(N2), iar N$H=HIGH(N$) N2L=HIGH(N2)). nmul#indu-le ob#inem: N$*N2=65536*N$H*N2H+256*(N$H*N2L+N2H*N$L)+N$L*N2L. Execu#ia acestei nmul#iri se va face ncepnd de la dreapta spre stnga, #inndu-se cont de eventualul bit de transport ce poate apare la execu#ia opera#iilor. M$6: MOV B,OP$L ;ncarc! n B pe N$L MOV A,OP2L ;ncarc! n A pe N2L MUL AB ;Execut! N$L*N2L
224
MICROCONTROLLERE
MOV MREZ$,A ;Re#ine LSB rezultat din nmul#irea N$L*N2L MOV MREZ2,B ;Re#ine MSB rezultat din nm. N$L*N2L MOV A,OP2H MOV B,OP$L MUL AB ;Execut! produsul: N2H*N$L ADD A,MREZ2 ;Adun!: LSB(N2H*N$L)+MSB(N$L*N2L) MOV MREZ2,A ;Salveaz! rezultatul MOV A,B ;Transfer! n registrul A=MSB(N2H*N$L) ADDC A,MREZ3 ;Adun! cu transport n A=MSB(N2H*N$L) MOV MREZ3,A ;Transfer! rezultat n MREZ3 MOV A,OP$H MOV B,OP2L MUL AB ;Execut! produsul:N$H*N2L ADD A,MREZ2 ;Adun!: LSB(N$H*N2L)+LSB(LSB(N2H*N$L)+MSB(N$L*N2L)) MOV MREZ2,A ;Transfer! rezulatul n MREZ2 MOV A,B ;Transfer! MSB(N$H*N2L) n registrul A ADDC A,MREZ3 MOV MREZ3,A ;Re#ine n MREZ3,MREZ2 "i MREZ$ expresia calculat!: ;256*(N$H*N2L+N2H*N$L)+N$L*N2L ;De observat c! mul#irea cu 256 este specificat! prin loca#ia n care rezultatele sunt ;salvate, dup! regula rangul cel mai ridicat este plasat la o adres! mai mare MOV A,OP$H MOV B,OP2H MUL AB ;Execut! produsul N$H*N2H ADD A,MREZ3 MOV MREZ3,A ;Salvez LSB(N$H*N2H) MOV A,B ADDC A,MREZ4 MOV MREZ4,A ;Salvez MSB(N$H*N2H) RET NR_OCT DATA $3H ;Index octe#i serializa#i SERBUF DATA 2$H ;Loca#ie octet de serializat c!tre afi"oare ;Loca#iile E3 "i E4 reprezint! bi#ii 3, respectiv 4 ai Acumulatorului SERPIN$ BIT 0E3H ;Ie"ire clock registru intrare serial!/ie"ire paralel! SERPIN0 BIT 0E4H ;Ie"ire date registru de deplasare (MMC40$5) BIT_0 BIT 8 ;Bitul 0 al loca#iei SERBUF (2$H) BIT_$ BIT 9 ;Bitul $ al loca#iei SERBUF (2$H) BIT_2 BIT 0AH ;Bitul 2 al loca#iei SERBUF (2$H) BIT_3 BIT 0BH ;Bitul 3 al loca#iei SERBUF (2$H) BIT_4 BIT 0CH ;Bitul 4 al loca#iei SERBUF (2$H) BIT_5 BIT 0DH ;Bitul 5 al loca#iei SERBUF (2$H)
7. Aplica#ii
225
BIT 0EH ;Bitul 6 al loca#iei SERBUF (2$H) BIT 0FH ;Bitul 7 al loca#iei SERBUF (2$H) DB 0$H,23H,45H,67H,89H ;Zon! memorare informa#ii DB $$H,$$H,$$H,$$H,$$H ;de afi"at. DB 22H,22H,22H,22H,22H ;Valori de TEST DB 33H,33H,33H,33H,33H ; Refresh afi"oare MOV SP,#70H ;Setare adres! de baz! stiv! MOV NR_OCT,#0 ;ni#ializare contor MOV DPTR,#(BUF_AF-$) ;Ini#ializare pointer LOOP_BY: INC DPTR ;Incrementare pointer MOVX A,@DPTR ;Cite"te primul caracter (num!r) MOV SERBUF,A PUSH DPH PUSH DPL ;Re#ine n stiv! DPTR MOV DPTR,#$20H ;ncarc! n DPTR adresa portului pentru afi"oarele cu 7 segmente Bi#ii 3 "i 4 sunt folosi#i pentru transferul semnalelor de CLOCK "i respectiv DATE CLR SERPIN$ ;Pune pe zero linia de CLOCK MOV C,BIT_7 ;Transfer! n C falg bitul 7 al datei de serializat MOV SERPIN0,C ;Scrie bitul respectiv ca bit 4 al reg.A MOVX @DPTR,A;Scrie la portul de adres! $20H primul bit MSB SETB SERPIN$ MOVX @DPTR,A ;Pune linia CLOCK pe $ logic ;Repet! pa"ii corepunz!tori bitului 7 pentru bitul 6 al datei de transmis CLR SERPIN$ MOV C,BIT_6 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul 5 MOV C,BIT_5 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul 4 MOV C,BIT_4 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul 3
226
MICROCONTROLLERE
MOV C,BIT_3 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul 2 MOV C,BIT_2 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul $ MOV C,BIT_$ MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A CLR SERPIN$ ;Idem bitul 0 MOV C,BIT_0 MOV SERPIN0,C MOVX @DPTR,A SETB SERPIN$ MOVX @DPTR,A ,0;Reface din stiv! pointer-ul de adresare pentru buffer-ul de date POP DPL POP DPH INC NR_OCT ;Incrementeaz! contorul de transfer octe#i MOV A,NR_OCT CJNE A,#5,LOP_BY ;5 reprezint! num!rul de afi"oare 7 seg. ;Testeaz! dac! au fost serializate toate informa#iile JMP EXIT ;Ie"ire din rutin! LOP_BY: JMP LOOP_BY EXIT: n leg!tur! cu utilizarea canalului Watch Dog (WD) trebuie s! ar!t!m urm!toarele: a"a cum s-a precizat n capitolele $, 2 "i 4 rolul acestui canal temporizator const! n generarea unui RESET-hard atunci cnd el atinge starea"overflow", respectiv are loc tranzi#ia de la $$$$$$$$B la 00000000B. nc!rcnd o anume constant! de timp exprimabil! pe 8 bi#i, putem modifica intervalul de timp dup! care, dac! nu este renc!rcat! constanta, respectivul canal temporizator va genera semnalul de RESET. n cazul nostru, sistemul a prezentat o "sensibilitate" ini#ial! relativ important! la zgomotele din mediul industrial. De aceea am adoptat urm!toarea solu#ie: am setat la 256*$6s perioada temporizat! de c!tre WatchDog "i periodic n programul de func#ionare, am reanclan"at WD prin renc!rcarea constantei de
7. Aplica#ii
227
timp mai sus precizate. Cum sistemul este un sistem de comand! "i control (comanda elementelor auxiliare ale dozatorului care realizeaz! umplerea automat! a sa, precum "i un sistem de m!surare, c!ci sistemul cnt!re"te o anumit! cantitate ce este prescris! pe fluxul tehnologic), cu un num!r de 8 st!ri, acestea au fost numerotate "i stocate mpreun! cu restul variabilelor att n memoria intern! ct "i n cea extins! a microcontroller-ului. Actualizarea st!rii s-a realizat de fiecare dat! imediat dup! ce starea respectiv! a ap!rut. Rutina de ini#ializare a sistemului a fost modificat! astfel nct dup! fiecare RESET, s! analizeze starea sistemului "i func#ie de aceasta s! realizeze saltul la nceputul programului corespunz!tor st!rii. Enumer!m st!rile principale ale sistemului "i variabilele ce sunt modificate n concordan#! cu acestea. 0=stare a"teptare programare / comand! sistem Variabilele: DOZ=0 "i PRG=0 $=stare programare sistem de la tastatur! implic! Variabilele: PRG=$ "i DOZ=0 2=stare dozare: Variabilele: PRG=0 "i DOZ=$ 3=stare temporizare$ Variabilele PRG=0 "i DOZ=0 4=stare temporizare2 Variabilele PRG=0 "i DOZ=0 5=stare temporizare3 Variabilele PRG=0 "i DOZ=0 6=stare aseptare comand! manual! de golire 7=stare temporizare la comanda clapei de golire 8 stare de temporizare pentru blocarea clapetei de golire Sistemul este supervizat de un calculator de proces ce asigur! integrarea sa pe linia tehnologic!, dar poate func#iona "i autonom, caz n care operatorul poate interveni pentru a goli manual containerul dozatorului. Prezent!m n continuare acea parte din programul de func#ionare ce realizeaz! directarea corespunz!toare a execu#iei dup! ce s-a generat semnalul de RESET. MAIN: ANL IE,#00H ;Invalidate ntreruperile MOV DPTR,#HPRT_O2 MOV A,#00H MOV PORT_O2,A ;Opre"te motor ce introduce materie pulverulent! n cntar - comanda este dictat! ;de fluxul tehnologic specific MOV R0,#7FH INIT_$:MOV @R0,#00H DJNZ R0,INIT_$ ;Ini#ializare memorie intern! cu 0 ORL TCON,#0CH ;Valideaz! activarea ntreruperilor exeterne de stare $ pe front - se evit! astfel ;reanclan"area ntreruperilor n cazul cnd nivelul semnalului r!mne prea mult ;timp n 0 logic. MOV SP,#6EH ;Pozi#ionare stiv! sistem la adresa 6EH ;Testare stare sistem - este executat! pentru o eventual! resetare ca urmare a ;ac#iunii Watch Dog-ului, care genereaz! ceea ce se cheam! "Warm Boot"
228
MICROCONTROLLERE
MOV R0,#0D0H ;Loca#ia D0 re#ine STAREA sistemului$4 MOV A,@R0 ;Starea 0 corespunde situa#iei de RESET la pornirea sistemului "COLD RESET" CJNE A,#5AH,PRIM_RESET ;n caz de COLD RESET ;Valoarea 5AH la loca#ia D0H exprim! execu#ia unui "Warm Boot" ca urmare a ;for#!rii de c!tre WD a unui semnal de RESET pentru sistem. MOV PORT_O$,#03h ;Reprezint! traiectoria programului n caz de Warm RESET MOV DPTR,#HPRT_O$ MOV A,PORT_O$ MOVX @DPTR,A ;Comand! de refacere stare port "port0$" de comand! ERR_RESET: MOV R0,#90H MOV R$,#57H MOV R2,#23 ;Preg!tire registre pentru transferul pe bloc al informa#iilor de stare ;Registrul R0 este pointer-ul surs!, registrul R$ este pointer-ul destina#ie "i ;registrul R2 este contorul utilizat pentru transferul blocului de date de stare (23D ;lungimea acestuia), din memoria intern! extins!$5 n memoria SRAM ncepnd de ;la adresa 57H ERR_LOOP$: MOV A,@R0 ;Copiaz! informa#ie surs! n registrul A MOV @R$,A ;Slaveaz! registrul A n memoria intern! INC R$ INC R0 ;Incrementeaz! pointerii ;Execut& copiere bloc de la 90H DJNZ R2,ERR_LOOP$ la 57H ORL PCON,#$0H MOV T3,#00H ;Anclan"are WATCH DOG ;Aceast! opera#ie trebuie realizat! periodic la execu#ia programului pentru a ;preveni generarea unui semnal de RESET MOV A,STARE ;Loca#ia re#ine ultima stare postat!. Indexarea ;st!rilor este f!cut! natural n ordinea de apari#ie a acestora ;Postarea indexului st!rii se face ntotdeauna dup! ce starea respectiv! a fost atins!.
$4
Am plasat n zona de memorie intern! extins! o copie a tuturor variabilelor de stare importante, c!ci pe de-o parte memoria RAM intern! a fost utilizat! pn! la limita ei fizic!, iar pe de alt! parte memoria extins! poate fi cu o probabiliate net mai redus! afectat! de erori, c!ci ea este accesat! doar prin instruc#iunea MOV @R0,A (deci indirect) $5 Procesorul 80C552 prezint! o memorie intern! extins! (256 bytes), dintre care primii $28 sunt identici cu cei ai procesoarelor 805$, iar urm!torii sunt "umbri#i" de zona SFR a UC. Accesarea lor poate fi f!cut! doar indirect prin intermediul registrului R0.
7. Aplica#ii
229
CJNE A,#00,ERR_RESET2 ;Testare "COLD RESET"$6 -stare 0 JMP ERR_RESET$ ERR_RESET2: CJNE A,#0$H,ERR_RESET3 ;Testare - stare $ JMP ERR_RESET$ ;Revenire la starea $ ERR_RESET3: CJNE A,#02H,ERR_RESET4 ;Testare stare 2 MOV DPTR,#ERR_END_DOZ ;Stare DOZARE PUSH DPL PUSH DPH SETB DOZ ;Se reia procesul de dozare cu considerarea greut!#ii dozate pn! la momentul ;apari#iei incidentului$7 JMP ERR_DOZ ERR_RESET4: CJNE A,#03H,ERR_RESET5 ;Testare stare 3 JMP ERR_TEMPO$ ERR_RESET5: CJNE A,#04H,ERR_RESET6 ;Testare stare 4 JMP ERR_WAIT_STGOL ERR_RESET6: CJNE A,#05H,ERR_RESET7 ;Testare stare 5 JMP ERR_TEMPO3 ;Eroare aparut! n bucla de a"teptare ap!sare buton pentru golirea containerului ERR_RESET7: CJNE A,#06H,ERR_RESET8 ;Testare stare 6 JMP ERR_TEMPO2 ERR_RESET8: CJNE A,#07H,ERR_RESET9 ;Testare stare 7 JMP GOLIRE ERR_RESET9: CJNE A,#08H,ERR_RESET$ ;Testare stare 8 JMP ERR_TEMPO_GOL PRIM_RESET: ;Programul de ini#ializare la Cold Reset MOV R2,#7FH MOV R0,#0FFH INIT_2: MOV @R0,#00H
$6
Este necesar! testarea redundant! a acestei st!ri c!ci apari#ia semnalelor parazite are caracter aleator $7 Aceast! stare este tratat! deosebit de celelalte, c!ci este necesar! o cnt!rire distinct! a pulberii aflate n bunc!rul cntarului dozator, iar pe de alt! parte trebuie analizat! valoarea curent! a greut!#ii acesteia n raport cu cea prescris! "i trebuiesc luate acele decizii care se impun, inclusiv generarea semnalelor de eroare n dozare atunci cnd cantitatea de dozat a fost dep!"it!.
230
MICROCONTROLLERE
DEC R0 DJNZ R2,INIT_2 MOV R0,#0D0H MOV @R0,#5AH ;ERR_RESET$: ;Ini#ializare valori prescrise implicite. Reprezint! valorile ini#iale care asigur! ;starea de baz! a sistemului dozator. MOV VAL_PRESCR_L,#40H MOV VAL_PRESCR_H,#$FH ;Urmeaz! instruc#iunile ce detaliaz! ac#iunea sistemului n fiecare dintre posibilele st!ri pe care acesta le poate atinge dup! generarea semnalului de RESET Programul n forma sa complet" este memorat pe CD. n concluzie, putem spune c! proiectarea aplica#iilor dedicate impune o deosebit! rigurozitate. Nu este suficient! proiectarea corect! din punct de vedere hardware "i software a aplica#iei, sistemul realizat va trebui s! fie integrat corect n mediul, procesul, aplica#ia mai larg! pentru care a fost construit. Complexitatea interac#iunilor ce apar n "via#a" sistemului nu poate fi n totalitate simulat!, ceea ce face ca etapa de testare "n sistem" o proiectului s! aibe o importan#! esen#ial!. Nu putem afirma c! o anume etap! a proiect!rii este mai pu#in important! dect alta, dar prin iterarea ra#ional! a etapelor de proiectare, prin testarea cu o colec#ie ct mai larg! de stimuli a sistemului "i prin verificarea sa ntr-un mediu "zgomotos" putem atinge siguran#a necesar! func#ionari satisf!c!toare a acestuia. Este necesar, deseori, s! construim nc! din faza de proiectare odat! cu programele de func#ionare "i "uneltele" specifice de testare a sistemului. Aceste "unelte" nu sunt altceva dect rutine, programe, uneori complexe, ce asigur! validarea corectei func#ion!ri corespunz!toare fiec!rei etape pe care sistemul o parcurge n func#ionare. Dezvoltarea programelor de testare simultan cu proiectarea sistemului reduce substan#ial timpul necesar valid!rii finale. Nu trebuie neglijat principiul redundan#ei func#ionale -oglindit! att la nivel fizic (hard) ct "i la nivel logic (soft), atunci cnd dorim s! realiz!m un sistem robust "i fiabil. Va trebui s! verific!m ntotdeauna dac! suntem corect "ancora#i" n timp, dac! sistemul nostru "i men#ine proprietatea de a fi un sistem de reglare "n timp real", asta presupune s! verific!m dac! toate informa#iile pe care sistemul de comand! le prelucreaz! sunt "oportune", deci n concordan#! cu teorema e"antion!rii. Aplica#iile ce sunt detaliate pe CD-ul ata"at lucr!rii sunt aplica#ii "reale" ce func#ioneaz! n cadrul unor ntreprinderi ca: ELCO- SA Tg. Secuiesc, CIMUS SA Cmpulung "i F.S. SA R"nov. Ele au fost "validate" ntr-o perioad! de func#ionare ce dep!"e"te c#iva ani. Aducem mul#umiri celor ce le-au testat "i ne-au ajutat la implementarea acestora, ajutorul lor a fost deosebit de important, iar pentru aceasta le mul#umim