Sunteți pe pagina 1din 27

1.

STRUCTURA HARDWARE A MICROCONTROLERULUI PIC 18LF4520

Scopul leciei: Prezentarea succint a arhitecturii i componentelor de baz ale microcontrolerului PIC 18LF4520, componenta central n sistemul de dezvoltare PICDEM 2 Plus folosit pentru leciile practie din acest manual. Familiarizarea cu documentaia i pagina de
internet a firmei Microchip.

1.1. Introducere
Microcontrolerele sunt de fapt structuri de microcalculator special concepute pentru aplicaii de comand i control ale unor sisteme dedicate (embedded). n esen, un microcontroler integreaz pe acelai chip urmtoarele componente de baz ale unui microcalculator: unitatea central de prelucrare (CPU), memoria de date, memoria program i funcii periferice cum ar fi: porturi, timere, comunicaii serie, interfee analogice (convertor analog-digital, comparatoare analogice), memorie suplimentar de date de tip EEPROM etc. Arhitectura microcontrolerelor PIC ale firmei Microchip (Fig. 1.1) este bazat pe un set modificat de instruciuni Harvard RISC care asigur o cale de migrare uoar de la 6 la 80 de pini i de la 384 bytes la 128 Kbytes de memorie program. Un set de instruciuni simple i o migraie lin ntre familiile de produse fac din microcontrolerele PIC o alegere bun pentru cei care au nevoie de flexibilitate i performan. Instruciunile cu limea de 12 bii (gama de baz), de 14 bii (gama medie i medie mbuntit) i de 16 bii (PIC18) sunt compatibile n sus i sunt adaptate pentru a maximiza eficiena procesrii i pentru creterea performanei. Fig. 1.1. Arhitectura microcontrolerelor PIC pe 8 bii Instruciunile i datele sunt transferate pe magistrale diferite pentru evitarea blocajelor n prelucrare (arhitectur Harvard). Aceasta crete viteza i performana global a sistemului. Tehnica pipeline cu dou etaje permite ca n timp ce o instruciune este executat o alta s fie preluat. Instruciunile avnd un singur cuvnt cresc eficiena codului i reduc memoria program necesar. Sistemul de dezvoltare PICDEM 2 Plus, folosit pentru leciile din prezenta lucrare, este echipat cu microcontrolerul de nalt performan 18LF4520 avnd urmtoarele caracteristici: Este un microcontroler de 8 bii cu arhitectur RISC; Are un set redus de instruciuni (77); 1

Instruciunile se execut ntrun singur ciclu main, cu excepia celor de salt care necesit dou cicluri; Este realizat ntr-o tehnologie CMOS de tip nano-watt, ceea ce permite o reducere substanial a consumului de energie; Este special conceput pentru aplicaii de tip comand i control necesitnd un numr minim de componente suplimentare n exterior, ceea ce permite reducerea costurilor cu creterea concomintent a fiabilitii; Are o structur flexibil pentru oscilatorul de ceas; Memorie program proprie de tip flash de 32 Kbytes; Memorie de date de 1536 bytes de tip SRAM i 256 bytes de tip EEPROM; Cinci porturi paralele; Convertor analog-digital (A/D) de 10 bii cu 13 canale analogice de intrare; Dou module Captur/Comparare/Modulare n durat a impulsurilor (Capture/Compare/Pulse Width Modulation CCP); Patru circuite timer (unul pe 8 bii i trei pe 16 bii); Un modul receptor/transmitor universal sincron/asincron (Universal Synchronous Asynchronous Receiver Transmitter USART); Port serial sincron master (Master Synchronous Serial Port MSSP) pentru comunicaii de tipul SPI sau I2C; Dou comparatoare analogice; Circuit de multiplicare hardware de 8 x 8 bii; Circuit de detectare a tensiunii de alimentare prea coborte (Low Voltage Detect); Circuit de supraveghere de tip Watchdog Timer WDT; Dispune de numeroase posibiliti de lucru n ntreruperi pe dou nivele de prioritate; Circuit de programare n-circuit serial integrat (In Circuit Serial Programming ICSP); Circuit de depanare n-circuit serial integrat (In Circuit Debug ICD); Are o gam larg de tensiuni de alimentare de la 2 V la 5,5 V. n cadrul prezentului manual se va descrie i prezenta pe scurt structura hardware a microcontrolerului doar cu acele detalii care sunt necesare nelegerii aplicaiilor prezentate. Pentru detalii sumplimentare se recomand consultarea foii de catalog a microcontrolerului PIC18F4520 fiierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data Sheet precum i manualul de referin al familiei de microcontrolere PIC18 de la firma Microchip fiierul LAB PICDEM 2 Plus\Datasheets\PICmicro 18C MCU Reference Manual.

1.2. Structura intern a microcontrolerului


Componentele structurii interne ale microcontrolerului pot fi incluse ntr-una din urmtoarele categorii: Componente de baz (core) Componentele de baz asigur funcionarea sistemului i sunt urmtoarele: oscilatorul, circuitul de reset, concepia arhitectural, unitatea central de prelucrare, circuitul de multiplicare hardware, memoria intern, magistralele de sistem, suportul pentru lucrul n ntreruperi i setul de instruciuni. Componente care asigur funcii periferice (peripherals) Componentele care asigur funcii periferice difereniaz microcontrolerul de un microprocesor. Acestea asigur, pe de o parte, interfaarea cu mediul exterior (porturi, comunicaia serie, intrrile analogice), iar pe de alt parte, asigur ndeplinirea unor funcii interne cum ar fi 2

generarea unor baze de timp diferite (circuitele timer). Din aceast categorie fac parte urmtoarele circuite: porturile paralele de intrare/ieire, circuitele timer, modulul CCP (Compare/Capture/ PWM), Parallel Slave Port (PSP), Serial Slave Port (SSP), Master Synchronous Serial Port (MSSP), Adressable USART, comparatoare analogice i convertorul A/D. Componente cu funcii speciale (special feature) La microcontrolerele aparinnd unor structuri evoluate se gsesc i urmtoarele circuite care ndeplinesc funcii speciale: Low Voltage Detect, Watchdog Timer, bii de configurare a microcontrolerului, In-Circuit Serial Programming (ICSP).

Schema bloc a microcontrolerului


Schema bloc a microcontrolerului 18F4520 este prezentat n Fig. 1.2. Arhitectura RISC a microcontrolerului presupune existena unor memorii interne de date i de program separate. Memoria program de 32 Kbytes este de tip flash, existnd posibilitatea scrierii i tergerii pe cale electric de ctre sistemul n care este ncorporat. Acest tip de memorie este foarte potrivit pentru un sistem de dezvoltare. Pentru sisteme dedicate consacrate sunt folosite, din considerente de cost, variante de microcontroler avnd memoria program programabil o singur dat (One-Time Programmable OTP) de tip ROM sau EPROM. Memoria program este adresabil fie din contorul de instruciuni printr-o magistral de 20 bii (Programm Counter PC), fie din tabela de pointeri (Table Pointer TP) printr-o magistral de 21 de bii. Contorul de instrunciuni specific adresa instruciunii care urmeaz a fi extras i este mprit n trei entiti: PCU, PCH i PCL. Octetul inferior aflat n PCL poate fii citit sau scris direct de ctre sistem pe cnd PCU i PCH pot fi scrise sau citite doar indirect prin intermediul registrelor PCLATU i PCLATH. Pentru a asigura alinierea instruciunilor (cuvintelor) de doi octei la adres par, contorul de instruciuni adreseaz octeii n memoria program avnd bitul cel mai puin semnificativ fixat pe valoarea zero, ceea ce nseamn c PC incrementeaz adresele instruciunilor din doi n doi iar n schema bloc magistrala corespunztoare figureaz ca fiind de 20 de bii. Memoria program mai poate fi adresat printr-o adres de 21 bii generat de Table Pointer prevzut i cu un hardware de incrementare decrementare propriu (mai multe detalii vor fi prezentate la descrierea memoriei). Microcontrolerul este prevzut i cu o memorie stiv cu 31 de niveluri (care poate stoca pn la 31 de cuvinte de adres avnd 21 de bii) care este organizat ntr-o zon de memorie RAM. Adresa vrfului stivei este gestionat de un indicator de stiv de 5 bii (Stack Pointer). Memoria de date este realizat ca o memorie de tip SRAM de 4096 bytes adresat prin cuvinte de adres de 12 bii. Memoria este organizat n 16 blocuri (banks) a cte 256 bytes fiecare. Pentru a facilita o accesare rapid a tuturor acestor blocuri, este utilizat un pointer de 4 bii (Bank Select Register BSR) iar pentru o accesare rapid ntr-un singur ciclu main a locaiilor cele mai frecvent utilizate este implementat o structur numit Acces Bank. Acesta conine prima jumtate a blocul zero de memorie RAM cu registre generale i a doua jumtate a blocului 15 cu registre cu functii speciale (Special Function Registers SFR). Acces Bank este gestionat la rndul ei de un Pointer Acces Bank. Anumite instruciuni apeleaz la o adresare indirect a memoriei de date prin intermediul unor pointer-i (File Select Registers FSRs FSR0, FSR1, FSR2) aflai n zona registrelor speciale. Aceti pointer-i (Indirect Data Memory Access Pointer) sunt prevzui i cu un hardware special care asigur decrementarea sau incrementarea acestora. Adresarea memoriei de date mai poate fi fcut i cu un cuvnt de adres de 12 bii direct din registrul de instruciuni (Instruction Register IR).

Fig. 1.2. Schema bloc a microcontrolerului 18F4520

Memoria program este organizat pe cuvinte de 16 bii, iar memoria de date pe 8 bii. Citirea memoriei program se face octet cu octet, scrierea n memoria program se face pe blocuri de 32 de octei, iar stergerea pe blocuri de 64 de octei. Pentru a scrie sau citi date din memoria program sunt utilizate operaiile Table Read (TBLRD) respectiv Table Write (TBLWT). Cum memoria program este organizat pe 16 bii iar cea de date pe 8 bii, operaiile Table Read respectiv Table Write vor transfera octeii ntre cele dou memorii prin intermediul unui registru de 8 bii numit Table Latch (TABLAT). Astfel, la citirea memoriei program, aceasta va fi adresat de un pointer de 21 de bii (Table Pointer), octetul citit va fi depus n registrul TABLAT iar de acolo n memoria de date RAM. La scrierea memoriei program datele din memoria de date RAM vor fidepuse n registrul intermediar TABLAT iar de acolo n memoria program la adresa indicat de pointerul Table Pointer (detalii legate de aceste operaii vor fi prezentate ulterior). Instruciunea citit din memoria program (cuvnt de 16 bii) este interpretat ntr-o memorie de tip ROM (ROM Latch) din care se obin, pe de o parte, comenzile pentru decodorul de adres al setului de registre cu functii speciale (Special Function Registers SFR), i pe de alt parte, instruciunea propriu zis care este depus n registrul de instruciuni (Instruction Register IR) n vederea decodrii i interpretrii. Unitatea aritmetico-logic (ALU) este organizat pe 8 bii. Una din intrrile sale este legat direct la magistrala intern de date, iar pe celalt intrare se poate selecta fie registrul de lucru W (Working Register), fie registrul BITOP. Registrul W poate stoca rezultatul unei operaii, este utilizat i pentru a furniza operanzi ctre multiplicatorul hardware de 8 bii, respectiv de a prelua rezultatul multiplicrii. Registrul BITOP este defapt un tabel de 8 octei adresabil cu 3 bii direct din codul instruciunii. Schema mai conine: Blocul oscilatorului avnd o arhitectur care permite o manier flexibil de generare a semnalului de tact; Cirucuitele timer pentru ntrzierea la alimentare (Power On Timer) i ntrzierea pornirii oscilatorului (Oscilator Start Up Timer); Circuite de iniializare (reset) la pornire (Power-On Reset) i la cderea tensiunii de alimentare (Brown-Out Reset); Circuitul de supraveghere a bunei funcionri (Watchdog Timer); Circuitul de programare a dispozitivului folosind o singur surs de tensiune (Single Supply Programming); Circuitul de depanare n-circuit a programelor ncrcate (In Circuit Debugger); Circuitul de supraveghere a generatorului de tact (Fail Safe Clock Monitor); Restul de circuite din categoria de periferice sunt conectate direct la magistrala intern de date: Cinci porturi paralele de intrare/iesire cu terminale multifuncionale (PORTA, , PORTE); Patru circuite de tip timer (Timer0, , Timer3); Convertorul A/D de 10 bii (ADC 10-bit); Memoria suplimentar de date EEPROM; Blocurile Compare/Capture/PWM (ECCP1 i CCP2); Comparatoarele analogice; Circuitele pentru comunicaie serie (EUSART i MSSP); Circuitul de detectare a schimbrii strii logice High to Low Voltage Detect (BOR HLVD). n continuare, vor fi descrise succint doar componentele de baz. Componentele pentru funcii periferice i pentru cele speciale fac obiectul leciilor propuse n continuare i vor fi prezentate n cadrul acestora. 5

1.3. Componentele de baz ale microcontrolerului


1.3.1. Oscilatorul

Proiectantul dispozitivului a conceput o structur de oscilator extrem de flexibil, capabil s lucreze n zece moduri diferite mprite n trei categorii: oscilator primar, oscilator secundar i oscilator intern. Schema de selectare a surselor semnalelor de tact este prezentat n Fig. 1.3.

Fig. 1.3. Schema de selectare a surselor semnalelor de tact Cele zece configuraii ale oscilatorului sunt: 1. LP Oscilator cu cristal de cuar de joas putere (Low Power Crystal); 2. XT Oscilator cu cristal de cuar sau rezonator ceramic (Crystal/Resonator); 3. HS Oscilator cu cristal de cuar sau rezonator ceramic de frecven ridicat (High-Speed Crystal/Resonator); 4. HSPLL Oscilator cu cristal de cuar sau rezonator ceramic de frecven ridicat cu circuitul PLL activat (High-Speed Crystal/Resonator with PLL enabled); 5. RC Oscilator cu circuit RezistorCondensator extern cu ieire Fosc/4 pe RA6 (External Resistor/Capacitor with Fosc/4 output on RA6); 6. RCIO Oscilator cu RC extern cu pin I/O pe RA6 (External Resistor/Capacitor with I/O on RA6); 7. INTIO1 Oscilator intern cu ieire pe RA6 i pin I/O pe RA7 (Internal Oscilator with output on RA6 and I/O on RA7); 8. INTIO2 Oscilator intern cu pini I/O pe RA6 i RA7 (Internal Oscilator with I/O on RA6 and RA7); 9. EC Ceas extern i ieire Fosc/4 (External Clock with Fosc/4 Output); 10. ECIO Ceas extern cu pin I/O pe RA6 (External Clock with I/O on RA6). Oscilatoare cu cristal de cuar sau rezonator ceramic n modurile LP, XT, HS i HSPLL, un cristal de cuar sau un rezonator ceramic este conectat ntre terminalele OSC1/CLK1/RA7 i OSC2/CLK0/RA6. Valori tipice de frecven pentru aceste configuraii de oscilator sunt: LP 32 KHz, XT 1 MHz sau 4 MHz i HS 4 MHz, 10 MHz, 20 MHz i 25 MHz. 6

Schema hardware a blocului oscilator mai conine i un circuit de multiplicare a frecvenei semnalului de ieire a oscilatorului, un circuit bazat pe o bucl cu calare de faz (Phase Locked Loop PLL), proiectat s multiplice cu 4 frecvena de oscilaie. n felul acesta, n modul de lucru HSPLL, cu un cuar de 10 MHz, se poate obine o frecven a semnalului de tact de 40 MHz. Oscilatorul cu surs extern de semnal Modurile de oscilaie EC i ECIO presupun conectarea din exterior pe borna OSC1/RA7 a unui semnal provenit de la un oscilator extern. n modul EC, pe borna OSC2/RA6 se va genera un semnal Fosc/4 (util pentru teste sau pentru sincronizarea altor circuite digitale externe), iar n modul ECIO borna OSC2/RA6 poate fi folosit ca pin de intrare/ieire digital obinuit a portului A (RA6). Oscilatorul RC O soluie ieftin pentru sursa de oscilaie este oscilatorul RC obinut prin conectarea din exterior a unui grup rezistorcondensator pe borna OSC1/RA7. n configuraia RC, pe borna OSC2/RA6 va fi disponibil o oscilaie avnd Fosc/4, iar n configuraia RCIO borna OSC2/RA6 va putea fi utilizat ca un pin obinuit de intrare/ieire digital a portului A (RA6). Aceast structur de oscilator este recomandat pentru aplicaii la care stabilitatea oscilaiilor generate nu este critic, frecvena tactului fiind alterat de variaiile tensiunii de alimentare VDD, de dispersia componentelor RC externe, precum i de variaiile de temperatur. Blocul oscilator intern Acest bloc este capabil de a genera dou semnale de tact diferite, ambele putnd fi utilizate de ctre microcontroler ca surs pentru tact fr a mai fi necesare componente suplimentare din exterior. Ieirea principal INTOSC generaz un semnal de tact de 8 MHz care poate fi folosit direct sau prin intermediul unui circuit de postscalare. Astfel se poate obine o gam larg de frecvene de tact de la 31 KHz la 4 MHz. A doua surs intern de oscilaie este un oscilator RC care genereaz o frecven nominal de 31 KHz i care este activat dac este selectat ca surs pentru tact sau dac sunt activate funcii de temporizare care l folosesc ca semnal de tact. Cele dou configuraii pentru blocul de oscilator intern sunt: INTIO1 n care pe borna OSC2/RA6 se genereaz semnalul Fosc/4 iar borna OSC1/RA7 este folosit ca pin de intrare/ieire digital a portului A (RA7); INTIO2 n care terminalele OSC1/RA7 i respectiv OSC2/RA6 sunt folosite ca pini de intrare/ieire digital a portului A (RA6 i RA7). Microcontrolerul 18F4520 are i o surs secundar de oscilaie, i anume oscilatorul intern al circuitului Timer1 care este utilizat ca semnal de tact n modurile de lucru Power Managed Mode ale microcontrolerului. Cel mai adesea, acest oscilator se realizeaz prin conectarea unui cristal de cuar de frecven 31,768 KHz ntre terminalele RC0/T10S0 i RC1/T10S1. Selectarea modului de oscilaie, a frecvenei, precum i posibilitatea de ajustare a acesteia se realizeaz prin configurarea corespunztoare a biilor de control din registrul de comand ale blocului oscilator aflat n zona SFR.

1.3.2.

Managementul Puterii (Power Management Mode)

Microcontrolerul 18F4520 ofer utilizatorului un total de apte moduri de lucru diferite pentru realizarea unui consum eficient de energie. Aceste moduri ofer posibilitatea reducerii substaniale a energiei consumate n aplicaii n care acest lucru este deosebit de important (de exemplu, cazul alimentrii de la baterie). Exist trei categorii ale modului de lucru din punct de vedere al managementului puterii: Moduri active (Run modes); Moduri n asteptare (Idle modes); Mod inactiv (Sleep mode). 7

Aceste categorii stabilesc care subsisteme ale microcontrolerului vor fi funcionale, i uneori vor stabili frecvena de lucru a acestora. Cele apte moduri de lucru sunt prezentate n Tabelul 1.1. Selectarea modurilor se face cu biii 7,1 i 0 din registrul de comand OSCCON. Consumul de curent tipic este de 11 A pentru modurile active (Run), 2,5 A pentru modurile n asteptare (Idle) i 100 nA n modul inactiv (Sleep). Tabelul 1.1. Modurile de lucru

1.3.3.

Circuitul de iniializare hardware

Microcontrolerul 18F4520 are prevzute mai multe posibiliti de iniilizare (reset) utile n aplicaii. Schema bloc simplificat a mecanismului de iniializare este prezentat n Fig. 1.4. Power-On Reset (POR) POR reprezint iniializarea sistemului la pornire (alimentare) atunci cnd tensiunea de alimentare VDD depete un anumit prag. Acest lucru permite microcontrolerului s porneasc de fiecare dat dintr-o anumit stare predefinit numai atunci cnd tensiunea de alimentare a atins valoarea prescris care asigur o funcionare stabil i previzibil a sa. Brown-Out Reset (BOR) Orice scdere a tensiunii de alimentare VDD sub un anumit nivel de prag VBOR (controlabil) pe un interval de timp mai mare decat TBOR (controlabil) va declana generarea unui semnal de iniializare. Circuitul va rmne n aceast stare (Brown-Out Reset) atta timp ct tensiunea de alimentare VDD nu depete valoarea de prag VBOR. Proiectantul a prevzut mai multe opiuni de configurare pentru BOR utilizabile n soluiile de reducere a consumului de energie (vezi seciunea 4.4 Brown-Out Reset (BOR) din foaia de catalog a microcontrolerului PIC18F4520). Master Clear ( MCLR ) Terminalul MCLR permite utilizatorului s declaneze o iniializare a circuitului printr-o comand Reset aplicat din exterior. Aceast comand poate fi aplicat att n regimul de funcionare normal ct i n regimul de funcionare Power Managed Mode. Watchdog Timer Reset n multe aplicaii dedicate (Embedded Systems) se impune o supraveghere a bunei funcionri a sistemului. Microcontrolerul are ncorporat un circuit de supraveghere (Watchdog Timer) care n esen este un numrtor invers, ncrcat cu o anumit valoare iniial i care apoi este decrementat la fiecare ciclu main. n momentul n care ajunge la zero numrtorul genereaz 8

o comand de Reset. ntr-o funcionare normal, n programul aplicaiei sunt prevzute instruciuni de reiniializare periodic a acestui timer, evitndu-se n felul acesta ajungerea lui n starea zero.

Fig. 1.4. Schema bloc a mecanismului de iniializare

Stack Full/Underflow Reset Microcontrolerul este prevzut cu o memorie stiv de 31 de niveluri folosit pentru memorarea strii unor registre interne n cazul apariiei unei ntreruperi. Depirea capacitii acestei memorii stiv, att la scriere ct i la citire, va genera o comand Reset. Iniializare software Exist posibilitatea aducerii la zero a microcontrolerului i printr-o comand software cu instruciunea RESET. Iniializare cu timere speciale Microcontrolerul 18F4520 are ncorporate trei circuite timer speciale care gestioneaz corectitudinea procesului de iniializare la pornire (Power On Reset) pentru a asigura condiii iniiale corecte n momentul n care ncepe execuia programului. Acestea sunt: Power-up Timer (PWRT) Oscillator Start-up Timer (OST) PLL Lock Time-out Timer Timer-ul PWRT este un numrtor de 11 bii care numr impulsurile oscilatorului RC intern INTRC i genereaz, la pornire, un interval de timp de 2048 32 s = 65,6 ms. Pe durata numrrii microcontrolerul este meninut n starea de Reset. 9

Timer-ul OST este realizat cu un numrtor de 10 bii i asigur o ntrziere suplimentar de 1024 cicluri main dup terminarea perioadei de numrare a timer-ului PWRT. Acest lucru v-a asigura c oscilatorul cu cuar sau rezonatorul ceramic a intrat n regimul normal de lucru. ntrzierea generat de timer-ul OSC este utilizat numai n modurile de lucru LP, XT, HS sau HSPLL ale oscilatorului, numai la pornire (POR) sau la ieirea din majoritatea situaiilor de Power Managed Mode. Timer-ul PLL Lock Time-out este necesar pentru a asigura ntrziere necesar n regimul normal de lucru al blocului PLL pentru calarea sa pe frecvena oscilatorului principal. Aceast ntrziere are o valoare tipic de 2 ms dup ntrzierea generat de timer-ul OST. Mecanismul de generare a semnalului de Reset este de asemenea controlat de anumii bii din registrele de comand asociate acestei funcii (vezi foaia de catalog a microcontrolerului PIC 18F4520).

1.3.4.

Circuitul de multiplicare

Microcontrolerul 18F4520 conine i un multiplicator hardware de 8 x 8 bii ca parte a unitii ALU. Rezultatul pe 16 bii al multiplicrii este stocat n registrele interne PRODH i PRODL asociate multiplicatorului. Realizarea operaiei de multiplicare printr-o structur hardware specializat permite realizarea acestei operaii ntr-un singur ciclu main. n exemplele de mai jos sunt indicate rutine de multiplicare pentru numere fr semn respectiv cu semn:
; 8 x 8 UNSIGNED MULTIPLY ROUTINE MOVF ARG1, W MULWF ARG2 ; ; ARG1 * ARG2 -> ; PRODH:PRODL

; 8 x 8 SIGNED MULTIPLY ROUTINE MOVF ARG1, W MULWF ARG2 BTFSC SUBWF MOVF BTFSC SUBWF ARG2, SB PRODH, F ARG2, W ARG1, SB PRODH, F

; ; ; ;

ARG1 * ARG2 -> PRODH:PRODL Test Sign Bit PRODH = PRODH - ARG1

; Test Sign Bit ; PRODH = PRODH - ARG2

n Tabelul 1.2 este fcut o comparaie ntre operaiile de multiplicare efectuate hardware respectiv software, att din punct de vedere al spaiului de memorare ocupat ct i al vitezei de execuie. Tabelul 1.2. Comparaia performanelor unor operaii de multiplicare

10

1.3.5.

ntreruperile

ntreruperea este un mecanism extrem de util n aplicaii permind o reacie rapid a sistemului la situaii neprevzute precum i o tratare ierarhizat dup prioriti a acestora. Microcontrolerul 18F4520 are prevzute un mare numr de surse de ntreruperi crora li se poate asocia o prioritate superioar (adresa vectorului de ntrerupere se afl la adresa 0008H) respectiv o prioritate inferioar (adresa vectorului de ntrerupere se afl la adresa 0018H). ntreruperile se afl sub controlul unor registre cu funcii speciale (se recomand consultarea seciunii 9.0 Interrupts din foaia de catalog a microcontrolerului PIC 18F4520). Logica ntreruperilor este prezentat schematic n Fig. 1.5.

Fig. 1.5. Logica ntreruperilor n principiu, mecanismul de generare a unei ntreruperi se deruleaz astfel: Circuitul gndit s poat genera ntreruperi (de exemplu un timer), la apariia fenomenului generator (depirea capacitii de numrare n cazul circuitului timer), va seta un bit numit fanion (flag) ntr-un anumit registru special (bitul TMR0IF n cazul timer-ului T0). Acest bit semnific o solicitare de ntrerupere. Proiectanii microcontrolerului au prevzut i un mecanism de validare, n general n dou trepte, a acestei solicitri. Acest lucru nseamn c exist, ntr-un anumit registru cu funcii speciale, un bit de validare a ntreruperilor pentru timerul n cauz, n cazul exemplului nostru (Timer 0 Interrupt Enable TMR0IE), precum i un bit de validare general a ntreruperilor (General Interrupt Enable GIE). Cum n cazul acestui microcontroler sunt prevzute i dou niveluri de prioritate pentru tratarea ntreruperilor, v-a trebui setat i bitul corespunztor nivelului de prioritate alocat respectivei solicitri (TMROIP n cazul exemplului nostru). 11

n concluzie, o cerere de ntrerupere, solicitat de un anumit circuit, v-a fi declanat acceptat doar dac sunt ndeplinite concomitent (funcia logic I) condiiile de mai sus: TMROIF TMROIE TMROIP GIE.

1.3.6.

Organizarea memoriei

Microcontrolerul 18F4520 este prevzut cu trei tipuri de memorie intern: memoria program, memoria de date i o memorie suplimentar de date de tip EEPROM. Memoria de date i memoria program sunt conectate la magistrale interne separate, ceea ce permite folosirea simultan a acestora (arhitectur Harvard). Memoria EEPROM de date este accesat, din considerente practice, ca un dispozitiv periferic. 1.3.6.1. Organizarea memoriei program n cadrul descrierii organizrii memoriei program, se impune abordarea urmtoarele subiecte principale: harta memoriei program, contorul de instruciuni PC, memoria stiv, modul de execuie a instruciunilor i organizarea cuvintelor n memoria program. Contorul de instruciuni PC genereaz adrese de 21 de bii, ceea ce permite accesarea unui spaiu de memorie de 2 Mbytes. La microcontrolerul 18F4520, memoria program este de tip flash i are o capacitate de 32 Kbytes. Accesarea unei locaii inexistente fizic n dispozitiv ntoarce 0 peste tot (instruciunea NOP). Harta memoriei program Harta memoriei program este prezentat n Fig. 1.6. Se observ c zona memoriei stiv cu 31 de locaii nu face parte din spaiul memoriei program. La adresa 0000H se afl vectorul subrutinei de RESET iar la adresele 0008H respectiv 0018H se afl vectorii de ntrerupere pentru prioritatea superioara respectiv inferioar, urmate de zona propriu-zis de memorie program. Contorul de instruciuni Contorul de instruciuni este de 21 bii i se mparte n urmtoarele trei registre separate (Fig. 1.7): PCL pentru biii <7:0>, PCH pentru biii <15:8> i PCU pentru biii <21:16>. Registrul inferior PCL poate fi accesat pentru scriere sau citire direct pe cnd registrele PCH i PCU nu pot fi accesate direct, ci doar prin intermediul unor registre intermediare PCLATH i PCLATU. Fig. 1.6. Harta memoriei program Coninutul registrelor PCLATH i PCLATU este transferat n PCH respectiv n PCU la orice operaie de scriere n PCL i, n mod similar, coninutul registrelor PCH i PCU se transfer n registrele PCLATH i PCLATU la orice operaie de citire a lui PCL. 12

Fig. 1.7. Structura contorului de instruciuni

Memoria stiv pentru adrese de ntoarcere (Return Address Stack) Aceast memorie stiv este destinat memorrii coninutului contorului de instruciuni n cazul apariiei unei instruciuni de salt la o subrutin sau a unei ntreruperi. Memoria stiv este de tip RAM i poate stoca 31 de cuvinte a cte 21 de bii, ceea ce nseamn c permite gestionarea a pn la 31 de salturi sau ntreruperi. Memoria stiv nu face parte din spaiul de adresare a memoriei interne sau de date fiind o entitate complet separat. Pentru adresarea memoriei stiv este utilizat un registru de 5 bii numit Stack Pointer (STKPTR). Acest registru este iniializat la baza stivei 0000H (dup reset) i v-a conine n permanen adresa vrfului stivei. La apariia unei instruciuni de tip CALL sau a unei ntreruperi, coninutul registrului STKPTR este incrementat cu o unitate iar apoi coninutul lui PC este depus la adresa respectiv (n vrful stivei). La apariia unor instruciuni de tip RETURN, mai nti este citit locaia din vrful stivei indicat de coninutul registrului STKPTR iar apoi este decrementat coninutul acestuia. n ceea ce privete memoria stiv propriu-zis, doar locaia aflat n vrful stivei (adresat de STKPTR) este accesibil pentru scriere sau citire prin intermediul unui registru cu funcii special numit Top Of the Stack (TOS) format tot din trei registre TOSU, TOSH respectiv TOSL, similare cu structura registrului PC (vezi Fig. 1.8).

Fig. 1.8. Memoria stiv pentru adrese de ntoarcere i registrele asociate

Observaie: Existena registrului TOS permite utilizatorului s-i construiasc, prin soft, propria sa memorie stiv. De exemplu, n cazul apariiei unei instruciuni de tip CALL, are loc o operaie de scriere n stiv i deci n registrul TOS, coninut ce poate fi preluat i plasat n stiva de tip soft. 13

Pointer-ul STKPTR este prevzut i cu o logic de sesizare a depirii capacitii memoriei stiv i de generare a unei cereri de ntrerupere ntr-o astfel de situaie. De exemplu, dup 31 de scrieri consecutive i fr nici o citire, se seteaz bitul STKFUL (Stack Full). n mod similar, n cazul a 31 de citiri consecutive, se seteaz bitul STKUNF (Stack Underflow). n cazul n care bitul de validare STVREN (Stack Overflow Reset Enable) este la rndul su setat, apariia depirilor menionate anterior va duce la generarea unui semnal de Reset. Cum vrful memoriei stiv este accesibil pentru operaii de scriere respectiv citire de date n anumite situaii (salvarea respectiv refacerea contextului unui program n cazul apariiei unei cereri de ntrerupere), este util scrierea sau citirea n sau din vrful stivei fr a perturba prin aceasta desfurarea normal a derulrii programului. Proiectanii au prevzut n setul de instruciuni al microcontrolerului dou instruciuni cu ajutorul crora se poate scrie (PUSH) respectiv citi (POP) din vrful stivei. Deoarece, n cazul apariiei unei cereri de ntrerupere, n registrele interne ale procesorului se afl date importante ale programului ntrerupt, se impune salvarea coninutului acestora naintea ncrcrii subrutinei de servire a ntreruperii care le poate altera. Salvarea se face n memoria stiv, iar la revenirea n programul principal, pentru a putea continua programul principal din punctul n care el a fost ntrerupt, trebuie refcute coninuturile registrelor interne prin citiri din memoria stiv. Deoarece aceste operaii de scriere respectiv citire n i din memoria stiv sunt mari consumatoare de timp, proiectanii microcontrolerului au prevzut o memorie stiv special (Fast Register Stack) pentru stocarea temporar a coninutului celor mai importante trei registre: STATUS, WREG i BSR. Stiva pentru fiecare dintre aceste trei registre are doar un singur nivel. La apariia unei cereri de ntrerupere, coninutul acestor trei registre este salvat n mod automat n aceast memorie stiv special, iar la revenirea n programul principal, dup derularea rutinei de servire a ntreruperii, tot n mod automat, are loc rencrcarea acestor registre din aceast memorie stiv special. Modul de execuie al instruciunilor La acest microcontroler, durata unui ciclu main este de patru perioade de tact, notate cu Q1, Q2, Q3 i Q4. Pentru a mri viteza de execuie a instruciunilor, proiectanii microcontrolerului au implementat o variant de execuie prin suprapunerea ciclurilor (tehnica pipeline), ceea ce permite ca majoritatea instruciunilor s se execute ntr-un singur ciclu main. Execuia unei instruciuni are loc n felul urmtor (vezi Fig. 1.9): n faza Q1 a ciclului main unu se extrage codul operaiei care apoi se depune n registrul de instruciuni IR n faza Q4 a ciclului main unu. Decodarea i execuia instruciunii se fac n fazele Q1 la Q4 ale ciclului main doi. Se realizeaz astfel o suprapunere a fazei de extragere a instruciunii curente cu faza de execuie a instruciunii precedente (vezi Fig. 1.10). Organizarea instruciunilor n memoria program Memoria program este adresat pe octei iar instruciunile sunt de doi sau patru octei. Pentru a asigura alinierea instruciunilor stocate, octetul cel mai puin semnificativ al instruciunii este stocat de fiecare dat la adres par (LSb = 0). Pentru a menine alinierea, contorul de instruciuni PC este incrementat de fiecare dat cu 2 pentru a asigura c ntotdeauna LSb = 0. 1.3.6.2. Memoria program de tip flash n principiu, memoria program trebuie s fie o memorie nevolatil, ceea ce se poate realiza prin utilizarea unor circuite de memorie de tipul ROM, EPROM sau flash.

14

Fig. 1.9. Ciclul instruciune

Fig. 1.10. Fluxul pipeline al instruciunilor Memoriile de tip ROM (Read-Only Memory) sunt recomandate n cazul unor produse bine puse la punct, realizate ntr-un numr foarte mare de exemplare, caz n care acest tip de memorie asigur costuri minime. Realizarea cu memorii de tip EPROM (Erasable Programmable Read Only Memory) ofer facilitatea de a putea fi terse (nu pe cale electric), ceea ce ofer inginerului proiectant o anumit flexibilitate, dar costul acestor memorii este ceva mai mare deoarece capsula circuitului trebuie prevzut cu o fereastr de cuar pentru a permite tergerea cu raze ultraviolete. Memoriile flash sunt de tipul EEPROM (Electrically Erasable Programmable Read-Only Memory) putnd fi scrise, citite i terse pe cale electric de ctre sistemul care le utilizeaz. Sunt ncapsulate ntr-un material plastic, ceea ce permite realizarea lor la costuri mici avantajoase, fiind foarte potrivite n activitatea de proiectare sau de realizare a unor sisteme de dezvoltare. Din punct de vedere constructiv, memoriile de tip flash pot fi citite octet cu octet, scrise doar pe blocuri de 32 de octei i terse pe blocuri de 64 de octei. Operaiile de scriere respectiv citire pe blocuri sunt realizate de un hardware ncorporat n memorie i pe durata acestor operaii memoria program nu poate fi accesat. Operaiile de scriere, respectiv citire, n i din memoria program presupun un transfer de date cu memoria i sunt gestionate de microcontroler prin intermediul a dou operaii numite Table Read (Fig. 1.11), respectiv Table Write (Fig. 1.12).

15

Deoarece memoria program este organizat pe cuvinte de 16 bii i memoria de date pe cuvinte de 8 bii, operaiile de transfer dintre cele dou memorii se realizeaz prin intermediul unui registru de 8 bii (Table Latch TABLAT) iar adresarea memoriei program pentru aceast operaie se face printr-un pointer (Table pointer TBLPTR). Registrele TABLAT respectiv TBLPTR fac parte din setul de registre SFR ai microcontrolerului. Structura pe bii a pointer-ului TBLPTR i modul de utilizare a acestor secvene de bii pentru operaiile de citire, scriere i tergere este dat n Fig. 1.13. Mecanismul exact de citire a memoriei program este ilustrat n Fig. 1.14.

Fig. 1.11. Operaia Table Read

Fig. 1.12. Operaia Table Write

16

Fig. 1.13. Structura pointer-ului TBLPTR i limitele lui n funcie de operaia efectuat

Fig. 1.14. Mecanismul de citire din memoria flash de program

Fig. 1.15. Mecanismul de scriere n memoria flash de program

17

Scrierea n memoria program se face pe blocuri de 32 de octei cu ajutorul unui hardware special implementat (Fig. 1.15). Operaia de scriere n memoria propriu-zis se face din 32 de registre auxiliare (Holding Register) care trebuie ncrcate din registrul TABLAT prin 32 de operaii de scriere consecutive. Aceste scrieri sunt operaii scurte, deoarece sunt scrise doar Holding Register. Dup actualizarea tuturor acestor 32 de registre, registrul EECON1 trebuie scris pentru a declana operaia de programare a blocului de memorie, care este scrierea propriu-zis a memoriei flash i este o scriere de lung durat. n aplicaii este recomandat ca operaia de scriere s fie urmat de o operaie de verificare a corectitudinii scrierii (Write Verify). Gestionarea memoriei program flash se face prin intermediul unui numr de registre cu funcii speciale (pentru detalii se recomand consultarea seciunii 7.0 DATA EEPROM MEMORY din foaia de catalog a microcontrolerului PIC18F4520). Observaie: Mediile de programare elaborate de firmele productoare pentru produsele pe care le comercializeaz, conin programe speciale pentru a facilita utilizatorului operaiile de scriere, citire, verificare i tergere a memoriei program fr ca utilizatorul sa fie nevoit a gestiona la nivel de amnunt aceste operaii (de exemplu mediul MPLAB al firmei Microchip). 1.3.6.3. Organizarea memoriei de date

Generaliti Memoria de date a microcontrolerului este de tip SRAM i are o capacitate de 4096 octei. Fiecare locaie de memorie (denumit i registru) este adresabil printr-un cuvnt de cod de adres de 12 bii. Pentru o gestionare eficient i pentru un acces rapid la informaie, acest spaiu de memorie este mprit n 16 blocuri a cte 256 de octei fiecare. Registrele de memorie din acest spaiu sunt de dou categorii: registre de memorie de uz general (General Purpose Register) i registre cu funcii speciale (Special Function Register). Acestea din urm ocup ultima parte a zonei adresabile. Harta memoriei de date este prezentat n Fig. 1.16. Bank Select Register Datorit modului de organizare a memoriei de date, o anume locaie de memorie (registru) va putea fi adresat n doua moduri diferite: prin generarea unei adrese de 12 bii (adresare absolut); printr-o adresare care s permit mai nti selecia blocului n care se afl locaia dorit printr-un pointer de 4 bii cu Bank Pointer, iar apoi accesul registrului dorit din blocul selectat prin cei mai puin semnificativi 8 bii (adresare indexat). Cea de-a doua modalitate de adresare este mai rapid deoarece, n general, n cadrul majoritii programelor aplicative, se lucreaz cu un numr mic de registre care pot fi accesate ntrun singur bloc. n felul acesta, adresa blocului rmne practic neschimbat, modificndu-se doar offset-ul (cei mai puin semnificativi 8 bii ai adresei) care face parte din instruciune. Pointer-ul pentru aceste blocuri poart numele de Bank Select Register (BSR). Access Bank Cu ajutorul pointer-ului BSR i a celor mai puin semnificativi 8 bii inclui n instruciuni exist posibilitatea accesrii rapide a ntregului spaiu al memoriei de date. Dar n majoritatea aplicaiilor este necesar accesul doar la setul de registre speciale i la un numr redus de registre generale pentru stocarea unor date curente ale programului. Pentru acest gen de aplicaii, proiectanii au realizat o structur de memorie numit Acces Bank care cuprinde un numr redus de 128 de locaii de memorie pentru date curente (locaiile 00H7FH din blocul 0) i 128 de locaii de memorie pentru registrele cu funcii speciale (locaiile 80FFH din blocul 15) vezi Fig. 1.17. Aceast structur de memorie poate fi utilizat de toate instruciunile de baz ale microcontrolerului i este adresat cu 8 bii direct din instruciune. 18

Fig. 1.16. Harta memoriei de date Adresarea memoriei de date este gestionat suplimentar i cu un parametru a cuprins de asemenea n instruciune. Pentru a = 1, instruciunea utilizeaz pointer-ul BSR i poate fi accesat ntreg spaiul memoriei de date, iar pentru a = 0 instruciunea utilizeaz doar spaiul de memorie din Acces Bank. 19

Fig. 1.17. Utilizarea Bank Select Register (adresare direct)

Regristele care compun memoria de date n memoria de date se ntlnesc dou tipuri de registre: registre generale de date (GPR); registre cu funcii speciale (SFR). Registrele cu funcii speciale, la rndul lor, se pot mpri n dou categorii: cele care sunt asociate cu structura de baz a microcontrolerului (ALU, ntreruperi etc.); registre cu care se gestioneaz funcionarea perifericelor. Moduri de adresare a memoriei de date Dac pentru adresarea memoriei program se folosete exclusiv contorul de instruciuni (Program Counter), pentru adresarea memoriei de date exista urmtoarele patru posibiliti: Adresarea implicit O astfel de instruciune nu necesit argumente suplimentare, afecteaz n general tot sistemul sau lucreaz implicit cu un singur registru. Exemplu: RESET. Adresarea explicit n acest caz, instruciunea conine n mod explicit registrul cu care se lucreaz precum i operandul. Exemplu: MOVLW 7FH. Adresarea direct n acest caz, cel de-al doilea octet al instruciunii este o adres care poate fi, de exemplu, adresa locaiei n cadrul unui bloc de date selectat. Exemplu: ADDWF f,d,a. Instruciunea adun la coninutul registrului W, coninutul registrului selectat f. Cei doi parametrii suplimentari aflai n argumentul instruciunii sunt folosii astfel: 20

o Cu parametrul a se selecteaz sursa pentru f: Pentru a = 1 registrul f este selectat, din tot spaiul memoriei de date, cu pointer-ul BSR i cu cei 8 bii din octetul inferior al instruciunii (practic cu 12 bii de adres), Pentru a = 0 registrul f este selectat doar din spaiul de memorie delimitat de Acces Bank; o Cu parametrul d se selecteaz destinaia pentru rezultatul operaiei: Pentru d = 1 rezultatul este stocat napoi n registrul f, Pentru d = 0 rezultatul este stocat napoi n registrul W. Adresarea indirect Adresarea indirect permite utilizatorului s acceseze o anumit locaie de memorie fr a-i preciza n mod concret adresa acesteia. Acest lucru este realizat prin utilizarea unor pointer-i (notai cu FSRs) pentru adresarea locaiei de memorie ce urmeaz a fi accesat. Pointer-ii FSR fac parte din setul de registre speciale SFR, n consecin se afl n memoria de date i vor putea fi, la rndul lor, accesai cu uurin de programul aplicativ. n felul acesta, aceti pointer-i FSR vor fi foarte utili pentru implementarea unor tabele sau structuri de date. Microcontrolerul 18F4520 conine trei pointer-i de tipul FSR notai cu FSR0, FSR1 i FSR2. Fiecare din aceti pointer-i este realizat cu cte doua registre a cte 8 bii (FSRnH i FSRnL) i va conine un cuvnt de adres de 12 bii (cei mai semnificativi 4 bii din registrul FSRnH nu sunt folosii). Registrele pentru adresarea indirecta (FSR) sunt implementate prin intermediul Indirect File Operands (INDF) care va permite o manipulare a pointer-ului pentru incrementare i decrementare automat, precum i ncrcarea automat a unui offset, ceea ce va duce la eficientizarea programelor, de exemplu, n cazul unor bucle. Adresarea indirect (Fig. 1.18) presupune existena a Indirect File Operands (de asemenea n numr de 3 INDF0, INDF1, INDF2). Acetia pot fi imaginai ca nite registre virtuale care fac parte din registrele speciale (SFR) fr ns a fi implementate n mod fizic.

Fig. 1.18. Adresarea indirect

21

Scrierea sau citirea unui registru de tip INDFn acceseaz de fapt perechea de registre SFRnH i SFRnL asociate acestuia. Folosirea lui INDFn ca operand va utiliza de fapt coninutul pointer-ului aferent FSRnH i FSRnL. Observaie: Deoarece adresarea indirect folosete o adres de 12 bii, mecanismul de mprire n 16 blocuri a cte 256 de locaii (RAM-Banking) nu este luat n considerare. Pointer-ului FSRn, i mai sunt asociai, pe lng registrul INDFn, ali patru registre-operanzi suplimentari. Ca i INDFn, i aceti registre-operanzi vor reprezenta de fapt nite registre virtuale. Accesarea acestor registre-operanzi nseamn de fapt accesarea pointer-ului asociat FSRn, dar i efectuarea, suplimentar, a unei anumite operaii asupra coninutului acestora. Aceste registre-operanzi sunt: POSTDEC acceseaz pointer-ul FSR, dup care l decrementeaz n mod automat; POSTINC acceseaz pointer-ul FSR, dup care l incrementeaz n mod automat; PREINC incrementeaz coninutul lui FSR iar apoi l folosete pe acesta ca operand; PLUSW adun la coninutul pointer-ului FSR un numr (offset) cu semn (127 la 128) stocat n registrul W, dup care folosete noua valoare calculat n operaie. Observaii: Accesarea registrului INDFn permite utilizarea coninutului pointer-ului asociat FSRn fr modificarea valorii acestuia. Accesarea registrului PLUSW permite calculul unui offset (ca mai sus) i folosirea acestei valori ntr-o operaie fr ns ca prin aceasta s se modifice coninutul pointer-ului FSRn sau a registrului W. Folosirea unei tehnici de adresare indirect pentru a accesa registrele virtuale mai sus menionate poate duce la rezultate imprevizibile (pentru detalii se recomand consultarea seciunii 5.4.3.3 Operations by FSRs on FSRs din foaia de catalog a microcontrolerului PIC18F4520). Folosirea setului extins de instruciuni presupune i o anumit schimbare n organizarea i folosirea memoriei de date (pentru detalii se recomand consultarea seciunii 5.5 Data Memory and the Extended Instruction Set din foaia de catalog a microcontrolerului PIC18F4520). 1.3.6.4. Memoria de date EEPROM Memoria de date EEPROM este o memorie separat de memoria program sau de memoria de date SRAM i este folosibil pentru stocarea pe termen lung a unor date de program. Nu face parte din spaiul de adresare al memoriilor program sau de date i este accesibil doar printr-o adresare indirect prin intermediul unor registre speciale (SFR). Controlul memoriei EEPROM se realizeaza prin intermediul urmatoarelor registre speciale: EECON1, EECON2, EEDATA i EEADR. Operaiile de citire i scriere din i n memoria EEPROM se efectueaz pe octet prin intermediul registrelor EEDATA resprectiv EEADR. Octetul citit sau cel care urmeaz a fi scris se afla n registrul de 8 bii EEDATA, iar adresa la care se face operaia de citire/scriere se afla n registrul de 8 bii EEADR (spaiul memoriei EEPROM este de 256 de octei). Accesul la datele din memoria EEPROM este controlat de registrele EECON1 respectiv EECON2, aceleai care controleaz i accesul la datele memoriei program.

22

Semificaia biilor registrului de control EECON1 este prezentat n Fig. 1.19. Registrul EECON2 nu este fizic realizat i este folosit de ctre microcontroler exclusiv pentru operaiile de scriere i tergere a memoriei EEPROM. Operaia de citire a memoriei EEPROM Pentru o operaie de citire, utilizatorul trebuie s scrie adresa operandului n registrul EEADR, s tearg bitul EEPG0 i s seteze bitul RD. Data adresat va fi depus n registrul EEDATA i va fi disponibil pentru citire n ciclul main urmtor. Registrul EEDATA va pstra data citit pn la o nou ntrebuinare a acestuia de ctre utilizator pentru o operaie de scriere sau citire.

Fig. 1.19. Registrul 1 EEPROM de control (EECON1)

23

O secven tipic de program pentru citirea memoriei EEPROM este urmtoarea:


MOVLW MOVWF BCF BCF BSF MOVF DATA_EE_ADDR EEADR EECON1, EEPGD EECON1, CFGS EECON1, RD EEDATA, W ; ; ; ; ; ; Data Memory Address to read Point to DATA memory Access EEPROM EEPROM Read W = EEDATA

Operaia de scriere n memoria EEPROM Scrierea unui octet n memoria EEPROM va determina n mod automat tergerea prealabil a respectivei locaii de memorie i apoi scrierea noului octet (aplicaie de tipul erase before write). La scriere, octetul care urmeaz a fi scris se depune n registrul EEDATA iar adresa la care se face scrierea n registrul EEADR. Pentru a iniia un ciclu de scriere, trebuie urmat cu strictee secvena din urmtorul exemplu:
MOVLW DATA_EE_ADDR ; MOVWF EEADR ; Data Memory Address to write MOVLW DATA_EE_DATA ; MOVWF EEDATA ; Data Memory Value to write BCF EECON1, EEPGD ; Point to DATA memory BCF EECON1, CFGS ; Access EEPROM BSF EECON1, WREN ; Enable writes BCF INTCON, GIE ; Disable Interrupts ; Required sequence =================================== MOVLW 55h ; MOVWF EECON2 ; Write 55h MOVLW 0AAh ; MOVWF EECON2 ; Write 0AAh BSF EECON1, WR ; Set WR bit to begin write ; Required sequence =================================== BSF INTCON, GIE ; Enable Interrupts ; User code execution BCF EECON1, WREN ; Disable writes on write complete ; (EEIF set)

Ciclul de scriere nu poate s nceap dac nu se respect urmtoarea secven: scrierea valorii 55H n EECON2 urmat de scrierea valorii 0AAH n EECON2 iar apoi setarea bitului WR operaie ce trebuie repetat pentru fiecare octet ce urmeaz a fi scris. Observaii: Pe durata acestei secvene, ntreruperile trebuie dezactivate. Dup aceasta se va seta bitul de validare a scrierii (bitul WREN din registrul EECON1) pentru a permite desfurarea operaiei de scriere. Prezena mecanismului de validare a scrierii prin bitul WREN permite prevenirea unor operaii de scriere accidentale, motiv pentru care acest bit trebuie meninut la valoarea zero cu excepia situaiilor de scriere sau a remprosptrii memoriei. Dup iniierea procedurii de scriere, coninutul registrelor EEADR, EEDATA i EECON1 nu vor putea fi modificate. Timpul de scriere este controlat de hardware-ul microcontrolerului printr-un timer special destinat acestei operaii. Operaia propriu-zis de scriere ncepe prin setarea bitului de comanda WR. Observaie: Bitul WR nu va putea fi setat dac n prealabil WREN nu a fost setat. 24

Dup terminarea ciclului de scriere, bitul WR este resetat de hardware iar fanionul (flag) de ntrerupere a memoriei EEPROM bitul EEIF va fi setat. Programatorul poate lua n considerare sau nu aceast solicitare de ntrerupere prin setarea sau nu a biilor de validare corespunztori. Observaie: Bitul EEIF trebuie ters prin soft. De regul este bine ca operaia de scriere s fie urmat i de o operaie de verificare a corectitudinii scrierii. Mecanisme de protecie Memoria EEPROM este prevzut cu un mecanism de protecie prin setarea unor bii din cuvntul de cod de configurare (vezi seciunea 23.0 Special Features of the CPU din foaia de catalog a microcontrolerului PIC18F4520). Odat mecanismul activat, operaiile de scriere sau citire din exterior a memoriei EEPROM nu vor mai fi posibile dar microcontrolerul nsui va putea citi sau scrie aceast memorie intern EEPROM. Un mecanism suplimentar de protecie mpotriva unor operaii de scriere accidentale i nedorite este asigurat de bitul de validare WREN (pus pe zero la POR) mpreun cu secvena obligatorie ce precede o operaie de scriere a unui octet. Folosirea memoriei de date EEPROM Memoria de data EEPROM este o memorie de nalt fiabilitate (permite circa 1.000.000 de operaii de scriere/tergere i garanteaz calitatea informaiei stocate pentru circa 100 de ani). Este recomandat utilizarea ei pentru informaii supuse unor modificri frecvente (de exemplu variabile de program sau date supuse unor update-uri frecvente). n astfel de situaii, se impune o operaie de remprosptare a datelor din memorie. O rutin simpl de remprosptare a memoriei EEPROM este urmtoarea:
CLRF BCF BCF BCF BSF Loop BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSC BRA INCFSZ BRA BCF BSF EECON1, RD 55h EECON2 0AAh EECON2 EECON1, WR EECON1, WR $-2 EEADR, F LOOP EECON1, WREN INTCON, GIE EEADR EECON1, EECON1, INTCON, EECON1, CFGS EEPGD GIE WREN ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Start at address 0 Set for memory Set for Data EEPROM Disable interrupts Enable writes Loop to refresh array Read current address Write 55h Write 0AAh Set WR bit to begin write Wait for write to complete Increment address Not zero, do it again Disable writes Enable interrupts

25

1.4. Desfurarea leciei


ACTIVITATEA 1.1 Studiul altor materiale informative
Studiai manualele de utilizare, foile de catalog i documentele informative incluse n urmtoarele directoare: LAB Picdem 2 Plus\User's Guide, LAB Picdem 2 Plus\Datasheets i LAB PICDEM 2 Plus\Documents.

ACTIVITATEA 1.2 Studiul structurii paginilor WEB ale firmei Microchip


Studiai structura paginilor de internet oferite de firma Microchip pentru documentare suplimentar: www.microchip.com/tools i http://forum.microchip.com.

ACTIVITATEA 1.3 Sintetizarea structurilor de memorie implementate n microcontrolerul PIC 18LF4520


Facei un tabel cu memoriile prezente n microcontrolerul PIC18LF4520 preciznd pentru fiecare tipul, rolul, capacitatea, pe ci bii este organizat, cu ci bii este adresat i modalitile de citire, scriere i tergere a memoriei.

ACTIVITATEA 1.4 Comparaie ntre posibilitile a dou sisteme de dezvoltare


Facei o comparaie a dotrilor i facilitilor celor dou sisteme de dezvoltare disponibile n laborator: PICKIT 1 FLASH Starter Kit i PICDEM 2 Plus.

1.5. Activiti propuse


[1] [2] [3] Facei o comparaie din punct de vedere al caracteristicilor i funcionalitilor ntre urmtoarele dou microcontrolere: PIC18LF4520 i PIC18LF4620. Comparai caracteristicile i facilitile celor dou dispozitive de programare/depanare disponibile n laborator: ICD2 i ICD3. Studiai i celelalte sisteme de dezvoltare oferite de firma Microchip. Alegei unul i precizai care sunt componentele i posibilitile suplimentare ale sale care nu sunt prezente la cele din laborator. Imaginai i descriei dou aplicaii didactice bazate pe sistemul de dezvoltare ales. Facei o organigram (schem logic) care s descrie sugestiv desfurarea evenimentelor i aciunilor n cadrul mecanismul de generare i tratare a ntreruperilor n cazul microcontrolerului PIC 18LF4520.

[4]

1.6. ntrebri
[1] Care este diferena principal ntre microcontrolerele PIC18LF4520 i PIC18F4520? Ce consecine practice nseamn acest lucru pentru aplicaiile n care se utilizeaz respectivele microcontrolere? (Indicaie: vezi seciunea 26.0 Electrical Characteristics din fiierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data Sheet)

26

[2] [3] [4] [5] [6] [7]

Care credei c sunt utilizrile principale n aplicaiile practice ale memoriei EEPROM prezente la microcontrolerul PIC18LF4520? Care sunt modalitile de adresare ale memoriei de date? Care sunt motivele pentru care proiectantul a introdus structura de memorie Access Bank n microcontrolerele PIC? Pentru un automat de vnzare, ce fel de oscilator i de gestionare a consumului de energie ai alege? Dai un exemplu n care supravegherea programului aplicativ prin intermediul unui Watchdog Timer este necesar. De ce au fost introduse n schema microcontrolerului memorii de date i de program distincte?

27