You are on page 1of 28

Fig. 1.1.

Arhitectura microcontrolerelor PIC pe 8 biţi

1. STRUCTURA HARDWARE A MICROCONTROLERULUI
PIC 18LF4520

Scopul lecţiei:
Prezentarea succintă a arhitecturii şi componentelor de bază ale microcontrolerului
PIC 18LF4520, componenta centrală în sistemul de dezvoltare PICDEM 2 Plus
folosit pentru lecţiile practice din acest manual . Familiarizarea cu documentaţia şi pagina de
internet a firmei Microchip.

1.1. Introducere
Microcontrolerele sunt de fapt structuri de microcalculator special concepute pentru
aplicaţii de comandă şi control ale unor sisteme dedicate (embedded). În esenţă, un microcontroler
integrează pe acelaşi chip următoarele componente de bază ale unui microcalculator: unitatea
centrală de prelucrare (CPU), memoria de date, memoria program şi funcţii periferice cum ar fi:
porturi, timere, comunicaţii serie, interfeţe 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 instrucţiuni Harvard RISC care asigură o cale de migrare uşoară de la 6 la 80 de pini
şi de la 384 bytes la 128 Kbytes de memorie program. Un set de instrucţiuni simple şi o migraţie
lină între familiile de produse fac din microcontrolerele PIC o alegere bună pentru cei care au
nevoie de flexibilitate şi performanţă.
Instrucţiunile cu lăţimea de 12 biţi (gama de bază), de 14 biţi (gama medie şi medie
îmbunătăţită) şi de 16 biţi (PIC18) sunt compatibile în sus şi sunt adaptate pentru a maximiza
eficienţa procesării şi pentru creşterea performanţei.
Instrucţiunile şi datele sunt transferate pe magistrale diferite pentru evitarea blocajelor în
prelucrare (arhitectură Harvard). Aceasta creşte viteza şi performanţa globală a sistemului. Tehnica
7

pipeline cu două etaje permite ca în timp ce o instrucţiune este executată o alta să fie preluată.
Instrucţiunile având un singur cuvânt cresc eficienţa codului şi reduc memoria de program
necesară.
Sistemul de dezvoltare PICDEM 2 Plus, folosit pentru lecţiile din prezenta lucrare, este
echipat cu microcontrolerul de înaltă performanţă 18LF4520 având următoarele caracteristici:
 Este un microcontroler de 8 biţi cu arhitectură RISC;
 Are un set redus de instrucţiuni (77);
 Instrucţiunile se execută într-un singur ciclu maşină, cu excepţia celor de salt care
necesită două cicluri;
 Este realizat într-o tehnologie CMOS de tip nano–watt, ceea ce permite o reducere
substanţială a consumului de energie;
 Este special conceput pentru aplicaţii de tip comandă şi control necesitând un număr
minim de componente suplimentare în exterior, ceea ce permite reducerea costurilor cu
creşterea concomintentă a fiabilităţii;
 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 biţi 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 biţi şi trei pe 16 biţi);
 Un modul receptor/transmiţător universal sincron/asincron (Universal Synchronous
Asynchronous Receiver Transmitter – USART);
 Port serial sincron master (Master Synchronous Serial Port – MSSP) pentru comunicaţii
de tipul SPI sau I2C;
 Două comparatoare analogice;
 Circuit de multiplicare hardware de 8 x 8 biţi;
 Circuit de detectare a tensiunii de alimentare prea coborâte (Low Voltage Detect);
 Circuit de supraveghere de tip Watchdog Timer – WDT;
 Dispune de numeroase posibilităţi de lucru în întreruperi pe două nivelurie 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 înţelegerii aplicaţiilor prezentate.
Pentru detalii sumplimentare se recomandă consultarea foii de catalog a microcontrolerului
PIC18F4520 [???DS] – fişierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data
Sheet – precum şi manualul de referinţă al familiei de microcontrolere PIC18 de la firma
Microchip [???RM] – fişierul 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
următoarele categorii:
 Componente de bază (core)
8

biţi de configurare a microcontrolerului. este utilizat un pointer de 4 biţi (Bank Select Register – BSR) iar pentru o accesare rapidă într-un singur ciclu maşină a locaţiilor cele mai frecvent utilizate este implementată o structură numită Acces Bank. In–Circuit Serial Programming (ICSP). circuitul de multiplicare hardware. Octetul inferior aflat în PCL poate fii citit sau scris direct de către sistem pe când PCU şi PCH pot fi scrise sau citite doar indirect prin intermediul registrelor PCLATU şi PCLATH. memoria internă. Acestea asigură. intrările analogice). pe de o parte. Serial Slave Port (SSP). Memoria program de 32 Kbytes este de tip flash. 1 . contorul de instrucţiuni adresează octeţii în memoria program având bitul cel mai puţin semnificativ fixat pe valoarea zero. Microcontrolerul este prevăzut şi cu o memorie stivă cu 31 de niveluri (care poate stoca până la 31 de cuvinte de adresă având 21 de biţi) care este organizată într-o zonă de memorie RAM. Parallel Slave Port (PSP). Memoria este organizată în 16 blocuri (banks) a câte 256 bytes fiecare. din considerente de cost. Contorul de instruncţiuni specifică adresa instrucţiunii care urmează a fi extrasă şi este împărţit în trei entităţi: PCU. variante de microcontroler având memoria program programabilă o singură dată (One–Time Programmable – OTP) de tip ROM sau EPROM. suportul pentru lucrul în întreruperi şi setul de instrucţiuni. Memoria program mai poate fi adresată printr-o adresă de 21 biţi generată de Table Pointer prevăzut şi cu un hardware de incrementare/ decrementare propriu (mai multe detalii vor fi prezentate la descrierea memoriei). existând posibilitatea scrierii şi ştergerii pe cale electrică de către sistemul în care este încorporată. Pentru a asigura alinierea instrucţiunilor (cuvintelor) de doi octeţi la adresă pară. comunicaţia serie. circuitele timer. Memoria program este adresabilă fie din contorul de instrucţiuni printr-o magistrală de 20 biţi (Programm Counter – PC). circuitul de reset. Acest tip de memorie este foarte potrivit pentru un sistem de dezvoltare. concepţia arhitecturală. Memoria de date este realizată ca o memorie de tip SRAM de 4096 bytes adresată prin cuvinte de adresă de 12 biţi. Adresa vârfului stivei este gestionată de un indicator de stivă de 5 biţi (Stack Pointer). Acesta conţine prima jumătate a blocului zero de memorie RAM cu registre generale şi a doua jumătate a blocului 15 cu registre cu funcţtii speciale (Special Function Registers – SFR). Acces Bank este gestionată la rândul ei de un Pointer Acces Bank. Pentru sisteme dedicate consacrate sunt folosite. Arhitectura RISC a microcontrolerului presupune existenţa unor memorii interne de date şi de program separate. Master Synchronous Serial Port (MSSP). asigură îndeplinirea unor funcţii interne cum ar fi generarea unor baze de timp diferite (circuitele timer). ceea ce înseamnă că PC incrementează adresele instrucţiunilor din doi în doi iar în schema bloc magistrala corespunzătoare figurează ca fiind de 20 de biţi. comparatoare analogice şi convertorul A/D. 9 . Pentru a facilita o accesare rapidă a tuturor acestor blocuri. modulul CCP (Compare/Capture/ PWM). fie din tabela de pointeri (Table Pointer – TP) printr-o magistrală de 21 de biţi. iar pe de altă parte. interfaţarea cu mediul exterior (porturi. magistralele de sistem. Adressable USART.Componentele de bază asigură funcţionarea sistemului şi sunt următoarele: oscilatorul. Watchdog Timer.  Componente care asigură funcţii periferice (peripherals) Componentele care asigură funcţii periferice diferenţiază microcontrolerul de un microprocesor.  Componente cu funcţii speciale (special feature) La microcontrolerele aparţinând unor structuri evoluate se găsesc şi următoarele circuite care îndeplinesc funcţii speciale: Low Voltage Detect. PCH şi PCL.2. Din această categorie fac parte următoarele circuite: porturile paralele de intrare/ieşire. unitatea centrală de prelucrare. Schema bloc a microcontrolerului Schema bloc a microcontrolerului 18F4520 este prezentată în Fig.

Anumite instrucţiuni apelează la o adresare indirectă a memoriei de date prin intermediul unor pointer-i (File Select Registers – FSRs – FSR0. FSR1. 10 . Aceşti pointer-i (Indirect Data Memory Access Pointer) sunt prevăzuţi şi cu un hardware special care asigură decrementarea sau incrementarea acestora. FSR2) aflaţi în zona registrelor speciale. Adresarea memoriei de date mai poate fi făcută şi cu un cuvânt de adresă de 12 biţi direct din registrul de instrucţiuni (Instruction Register – IR).

Fig.2. 1. Schema bloc a microcontrolerului 18F4520 11 .

 Circuitul de programare a dispozitivului folosind o singură sursă de tensiune (Single Supply Programming). şi pe de altă parte. este utilizat şi pentru a furniza operanzi către multiplicatorul hardware de 8 biţi. Schema mai conţine:  Blocul oscilatorului având o arhitectură care permite o manieră flexibilă de generare a semnalului de tact. comenzile pentru decodorul de adresă al setului de registre cu funcţtii speciale (Special Function Registers – SFR). Citirea memoriei program se face octet cu octet. scrierea în memoria program se face pe blocuri de 32 de octeţi. aceasta va fi adresată de un pointer de 21 de biţi (Table Pointer).  Cirucuitele timer pentru întârzierea la alimentare (Power On Timer) şi întârzierea pornirii oscilatorului (Oscilator Start Up Timer). Timer3). iar stergerea pe blocuri de 64 de octeţi.  Patru circuite de tip timer (Timer0. Instrucţiunea citită din memoria program (cuvânt de 16 biţi) este interpretată într-o memorie de tip ROM (ROM Latch) din care se obţin. Unitatea aritmetico–logică (Arithmetic Logic Unit – ALU) este organizată pe 8 biţi.  Circuitul de supraveghere a bunei funcţionări (Watchdog Timer). la citirea memoriei program. instrucţiunea propriu zisă care este depusă în registrul de instrucţiuni (Instruction Register – IR) în vederea decodării şi interpretării. ….  Circuitul de supraveghere a generatorului de tact (Fail Safe Clock Monitor).  Circuitul de depanare în-circuit a programelor încărcate (In Circuit Debugger). Restul de circuite din categoria de periferice sunt conectate direct la magistrala internă de date:  Cinci porturi paralele de intrare/iesire cu terminale multifuncţionale (PORTA. Cum memoria program este organizată pe 16 biţi iar cea de date pe 8 biţi. Astfel. 12 .  Circuite de iniţializare (reset) la pornire (Power–On Reset) şi la căderea tensiunii de alimentare (Brown–Out Reset – BOR).  Convertorul A/D de 10 biţi (ADC 10-bit).  Memoria suplimentară de date EEPROM. pe de.  Circuitul de detectare a schimbării stării logice High to Low Voltage Detect (BOR HLVD).  Circuitele pentru comunicaţie serie (EUSART şi MSSP). PORTE). Pentru a scrie sau citi date din memoria program sunt utilizate operaţiile Table Read (TBLRD) respectiv Table Write (TBLWT).o parte.Memoria program este organizată pe cuvinte de 16 biţi.  Blocurile Compare/Capture/PWM (ECCP1 şi CCP2). Registrul BITOP este de fapt un tabel de 8 octeţi adresabil cu 3 biţi direct din codul instrucţiunii. respectiv de a prelua rezultatul multiplicării. iar memoria de date pe 8 biţi. Registrul W poate stoca rezultatul unei operaţii. Una din intrările sale este legată direct la magistrala internă de date. …. octetul citit va fi depus în registrul TABLAT iar de acolo în memoria de date RAM. iar pe cealaltă intrare se poate selecta fie registrul de lucru W (Working Register). fie registrul BITOP. La scrierea memoriei program datele din memoria de date RAM vor fi depuse în registrul intermediar TABLAT iar de acolo în memoria program la adresa indicată de pointerul Table Pointer (detalii legate de aceste operaţii vor fi prezentate ulterior). operaţiile Table Read respectiv Table Write vor transfera octeţii între cele două memorii prin intermediul unui registru de 8 biţi numit Table Latch (TABLAT).  Comparatoarele analogice.

10. vor fi descrise succint doar componentele de bază. Schema de selectare a surselor semnalelor de tact În continuare. LP – Oscilator cu cristal de cuarţ de joasă putere (Low Power Crystal). 3. EC – Ceas extern şi ieşire Fosc/4 (External Clock with Fosc/4 Output). Schema de selectare a surselor semnalelor de tact este prezentată în Fig. 1.1. Componentele pentru funcţii periferice şi pentru cele speciale fac obiectul lecţiilor propuse în continuare şi vor fi prezentate în cadrul acestora. ECIO – Ceas extern cu pin I/O pe RA6 (External Clock with I/O on RA6). RCIO – Oscilator cu RC extern cu pin I/O pe RA6 (External Resistor/Capacitor with I/O on RA6). HS – Oscilator cu cristal de cuarţ sau rezonator ceramic de frecvenţă ridicată (High–Speed Crystal/Resonator). 6. Oscilatorul Proiectantul dispozitivului a conceput o structură de oscilator extrem de flexibilă.3.3. 1 . 5.3.Fig. 1. 7. oscilator secundar şi oscilator intern. INTIO2 – Oscilator intern cu pini I/O pe RA6 şi RA7 (Internal Oscilator with I/O on RA6 and RA7). 8. XT – Oscilator cu cristal de cuarţ sau rezonator ceramic (Crystal/Resonator). 9. capabilă să lucreze în zece moduri diferite împărţite în trei categorii: oscilator primar. 13 . 2. RC – Oscilator cu circuit Rezistor–Condensator extern cu ieşire Fosc/4 pe RA6 (External Resistor/Capacitor with Fosc/4 output on RA6). HSPLL – Oscilator cu cristal de cuarţ sau rezonator ceramic de frecvenţă ridicată cu circuitul PLL activat (High–Speed Crystal/Resonator with PLL enabled).3. Cele zece configuraţii ale oscilatorului sunt: 1. Componentele de bază ale microcontrolerului 1. 4. INTIO1 – Oscilator intern cu ieşire pe RA6 şi pin I/O pe RA7 (Internal Oscilator with output on RA6 and I/O on RA7).

1. Valori tipice de frecvenţă pentru aceste configuraţii de oscilator sunt: LP – 32 KHz. XT.  INTIO2 în care terminalele OSC1/RA7 şi respectiv OSC2/RA6 sunt folosite ca pini de intrare/ieşire digitală a portului A (RA6 şi RA7).3. acest oscilator se realizează prin conectarea unui cristal de cuarţ de frecvenţă 31. În modul EC. 20 MHz şi 25 MHz. Cele două configuraţii 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/ieşire digitală a portului A (RA7). Ieşirea principală INTOSC generază un semnal de tact de 8 MHz care poate fi folosit direct sau prin intermediul unui circuit de postscalare. 10 MHz.768 KHz între terminalele RC0/T10S0 şi RC1/T10S1. Microcontrolerul 18F4520 are şi o sursă secundară de oscilaţie.Oscilatoare cu cristal de cuarţ sau rezonator ceramic În modurile LP. un circuit bazat pe o buclă cu calare de fază (Phase Locked Loop – PLL). frecvenţa tactului fiind alterată de variaţiile tensiunii de alimentare VDD. Aceste moduri oferă posibilitatea reducerii 14 . iar în configuraţia RCIO borna OSC2/RA6 va putea fi utilizată ca un pin obişnuit de intrare/ieşire digitală a portului A (RA6). Managementul Puterii (Power Management Mode) Microcontrolerul 18F4520 oferă utilizatorului un total de şapte moduri de lucru diferite pentru realizarea unui consum eficient de energie. cu un cuarţ de 10 MHz. În felul acesta. Această structură de oscilator este recomandată pentru aplicaţii la care stabilitatea oscilaţiilor generate nu este critică. A doua sursă internă de oscilaţie 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 funcţii de temporizare care îl folosesc ca semnal de tact. În configuraţia RC. iar în modul ECIO borna OSC2/RA6 poate fi folosită ca pin de intrare/ieşire digitală obişnuită a portului A (RA6). precum şi posibilitatea de ajustare a acesteia se realizează prin configurarea corespunzătoare a biţilor de control din registrul de comandă ale blocului oscilator aflat în zona SFR. pe borna OSC2/RA6 se va genera un semnal Fosc/4 (util pentru teste sau pentru sincronizarea altor circuite digitale externe). Astfel se poate obţine o gamă largă de frecvenţe de tact de la 31 KHz la 4 MHz. XT – 1 MHz sau 4 MHz şi HS – 4 MHz. un cristal de cuarţ sau un rezonator ceramic este conectat între terminalele OSC1/CLK1/RA7 şi OSC2/CLK0/RA6. Cel mai adesea. şi anume oscilatorul intern al circuitului Timer1 care este utilizat ca semnal de tact în modurile de lucru Power Managed Mode ale microcontrolerului. Blocul oscilator intern Acest bloc este capabil de a genera două semnale de tact diferite. Schema hardware a blocului oscilator mai conţine şi un circuit de multiplicare a frecvenţei semnalului de ieşire a oscilatorului. în modul de lucru HSPLL. proiectat să multiplice cu 4 frecvenţa de oscilaţie. pe borna OSC2/RA6 va fi disponibilă o oscilaţie având Fosc/4. de dispersia componentelor RC externe.2. ambele putând fi utilizate de către microcontroler ca sursă pentru tact fără a mai fi necesare componente suplimentare din exterior. Oscilatorul cu sursă externă de semnal Modurile de oscilaţie EC şi ECIO presupun conectarea din exterior pe borna OSC1/RA7 a unui semnal provenit de la un oscilator extern. a frecvenţei. Oscilatorul RC O soluţie ieftină pentru sursa de oscilaţie este oscilatorul RC obţinut prin conectarea din exterior a unui grup rezistor–condensator pe borna OSC1/RA7. Selectarea modului de oscilaţie. HS şi HSPLL. se poate obţine o frecvenţă a semnalului de tact de 40 MHz. precum şi de variaţiile de temperatură.

Consumul de curent tipic este de 11 µA pentru modurile active (Run).  Mod inactiv (Sleep mode). Circuitul de iniţializare hardware Microcontrolerul 18F4520 are prevăzute mai multe posibilităţi de iniţializare (reset) utile în aplicaţii. Acest lucru permite microcontrolerului să pornească de fiecare dată dintr-o anumită stare predefinită numai atunci când tensiunea de alimentare a atins valoarea prescrisă care asigură o funcţionare stabilă şi previzibilă a sa.5 µA pentru modurile în asteptare (Idle) şi 100 nA în modul inactiv (Sleep). 1.1. Schema bloc simplificată a mecanismului de iniţializare este prezentată în Fig. 2. Circuitul va rămâne în această stare (Brown–Out Reset) atâta timp cât tensiunea de alimentare VDD nu depăşeşte valoarea de prag VBOR.Tabelul 1.3. Cele şapte moduri de lucru sunt prezentate în Tabelul 1 . şi uneori vor stabili frecvenţa de lucru a acestora. Aceste categorii stabilesc care subsisteme ale microcontrolerului vor fi funcţionale. 1 .4 Brown–Out Reset din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]).  Moduri în asteptare (Idle modes).3.1 şi 0 din registrul de comandă OSCCON. cazul alimentării de la baterie). Selectarea modurilor se face cu biţii 7. Proiectantul a prevăzut mai multe opţiuni de configurare pentru BOR utilizabile în soluţiile de reducere a consumului de energie (vezi secţiunea 4. 15 . Există trei categorii ale modului de lucru din punct de vedere al managementului puterii:  Moduri active (Run modes). Power–On Reset (POR) POR reprezintă iniţializarea sistemului la pornire (alimentare) atunci când tensiunea de alimentare VDD depăşeşte un anumit prag.1.4. Brown–Out Reset (BOR) Orice scădere a tensiunii de alimentare VDD sub un anumit nivel de prag VBOR (controlabil) pe un interval de timp mai mare decat TBOR (controlabil) va declanşa generarea unui semnal de iniţializare. Modurile de lucru substanţiale a energiei consumate în aplicaţii în care acest lucru este deosebit de important (de exemplu.

Fig.4. În momentul în care ajunge la zero numărătorul generează o comandă de Reset. Iniţializare software Există posibilitatea aducerii la zero a microcontrolerului şi printr-o comandă software cu instrucţiunea RESET. atât la scriere cât şi la citire. 16 . încărcat cu o anumită valoare iniţială şi care apoi este decrementat la fiecare ciclu maşină. va genera o comandă Reset. 1. Depăşirea capacităţii acestei memorii stivă. evitându-se în felul acesta ajungerea lui în starea zero. Microcontrolerul are încorporat un circuit de supraveghere (Watchdog Timer) care în esenţă este un numărător invers. Schema bloc a mecanismului de iniţializare Master Clear ( MCLR ) Terminalul MCLR permite utilizatorului să declanşeze o iniţializare a circuitului printr-o comandă Reset aplicată din exterior. Într-o funcţionare normală. Stack Full/Underflow Reset Microcontrolerul este prevăzut cu o memorie stivă de 31 de niveluri folosită pentru memorarea stării unor registre interne în cazul apariţiei unei întreruperi. Această comandă poate fi aplicată atât în regimul de funcţionare normală cât şi în regimul de funcţionare Power Managed Mode. în programul aplicaţiei sunt prevăzute instrucţiuni de reiniţializare periodică a acestui timer. Watchdog Timer Reset În multe aplicaţii dedicate (Embedded Systems) se impune o supraveghere a bunei funcţionări a sistemului.

Timer-ul PLL Lock Time–out este necesar pentru a asigura întârzierea necesară în regimul normal de lucru al blocului PLL pentru calarea sa pe frecvenţa oscilatorului principal. . PRODH = PRODH . ARG1 * ARG2 -> .6 ms. Circuitul de multiplicare Microcontrolerul 18F4520 conţine şi un multiplicator hardware de 8 x 8 biţi ca parte a unităţii ALU. 8 x 8 UNSIGNED MULTIPLY ROUTINE MOVF ARG1. PRODH:PRODL . Realizarea operaţiei de multiplicare printr-o structură hardware specializată permite realizarea acestei operaţii într-un singur ciclu maşină. În exemplele de mai jos sunt indicate rutine de multiplicare pentru numere fără semn respectiv cu semn: . F ARG2. ARG1 * ARG2 -> . W ARG1.3. un interval de timp de 2048 · 32 s = 65. Rezultatul pe 16 biţi al multiplicării este stocat în registrele interne PRODH şi PRODL asociate multiplicatorului. Întârzierea generată de timer-ul OSC este utilizată numai în modurile de lucru LP. 8 x 8 SIGNED MULTIPLY ROUTINE MOVF ARG1. XT. 1. Pe durata numărării microcontrolerul este menţinut în starea de Reset. HS sau HSPLL ale oscilatorului. PRODH = PRODH .2 este făcută o comparaţie între operaţiile de multiplicare efectuate hardware respectiv software. F .ARG1 . SB PRODH. Această întârziere are o valoare tipică de 2 ms după întârzierea generată de timer-ul OST. Timer-ul OST este realizat cu un numărător de 10 biţi şi asigură o întârziere suplimentară de 1024 cicluri maşină după terminarea perioadei de numărare a timer-ului PWRT. SB PRODH.Iniţializare cu timere speciale Microcontrolerul 18F4520 are încorporate trei circuite timer speciale care gestionează corectitudinea procesului de iniţializare la pornire (Power On Reset) pentru a asigura condiţii iniţiale corecte în momentul în care începe execuţia programului. Acestea sunt:  Power–up Timer (PWRT)  Oscillator Start–up Timer (OST)  PLL Lock Time–out Timer Timer-ul PWRT este un numărător de 11 biţi care numără impulsurile oscilatorului RC intern INTRC şi generează. W MULWF ARG2 BTFSC SUBWF MOVF BTFSC SUBWF ARG2. atât din punct de vedere al spaţiului de memorare ocupat cât şi al vitezei de execuţie. 17 . PRODH:PRODL . Test Sign Bit . Acest lucru va v-a asigura că oscilatorul cu cuarţ sau rezonatorul ceramic a intrat în regimul normal de lucru. la pornire. W MULWF ARG2 . Test Sign Bit .4. numai la pornire (POR) sau la ieşirea din majoritatea situaţiilor de Power Managed Mode.ARG2 În Tabelul 1 . Mecanismul de generare a semnalului de Reset este de asemenea controlat de anumiţi biţi din registrele de comandă asociate acestei funcţii (vezi foaia de catalog a microcontrolerului PIC 18F4520 [??? DS]).

precum şi un bit de validare generală a întreruperilor (General Interrupt Enable – GIE).5.3. Întreruperile se află sub controlul unor registre cu funcţii speciale (se recomandă consultarea secţiunii 9. în general în două trepte.0 Interrupts din foaia de catalog a microcontrolerului PIC 18F4520 [??? DS]). va seta un bit numit fanion (flag) într-un anumit registru special (bitul TMR0IF în cazul timer-ului T0). Comparaţia performanţelor unor operaţii de multiplicare Fig.Tabelul 1. în cazul exemplului nostru (Timer 0 Interrupt Enable – TMR0IE). Acest lucru înseamnă că există. Întreruperile Întreruperea este un mecanism extrem de util în aplicaţii permiţând o reacţie rapidă a sistemului la situaţii neprevăzute precum şi o tratare ierarhizată după priorităţi a acestora. 1. într-un anumit registru cu funcţii speciale.5. Microcontrolerul 18F4520 are prevăzute un mare număr de surse de întreruperi cărora 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). un bit de validare a întreruperilor pentru timerul în cauză. mecanismul de generare a unei întreruperi se derulează astfel:  Circuitul gândit să poată genera întreruperi (de exemplu un timer). 1 .5. a acestei solicitări. În principiu.2. Logica întreruperilor 1. 18 . Logica întreruperilor este prezentată schematic în Fig.  Proiectanţii microcontrolerului au prevăzut şi un mecanism de validare. la apariţia fenomenului generator (depăşirea capacităţii de numărare în cazul circuitului timer). Acest bit semnifică o solicitare de întrerupere.

din considerente practice.1.  În concluzie. ca un dispozitiv periferic. contorul de instrucţiuni PC. memoria de date şi o memorie suplimentară de date de tip EEPROM. 1. Memoria de date şi memoria program sunt conectate la magistrale interne separate. v-a trebui setat şi bitul corespunzător nivelului de prioritate alocat respectivei solicitări (TMROIP în cazul exemplului nostru). Cum în cazul acestui microcontroler sunt prevăzute şi două niveluri de prioritate pentru tratarea întreruperilor. o cerere de întrerupere. ceea ce permite folosirea simultană a acestora (arhitectură Harvard). Organizarea memoriei program În cadrul descrierii organizării memoriei program.6.6.3. memoria stivă. 1.3. 19 . se impune abordarea următoarelore subiecte principale: harta memoriei program. Memoria EEPROM de date este accesată. modul de execuţie a instrucţiunilor şi organizarea cuvintelor în memoria program. solicitată de un anumit circuit. v-a fi declanşată acceptată doar dacă sunt îndeplinite concomitent (funcţia logică ŞI) condiţiile de mai sus: TMROIF · TMROIE · TMROIP · GIE. Organizarea memoriei Microcontrolerul 18F4520 este prevăzut cu trei tipuri de memorie internă: memoria program.

6. Structura contorului de instrucţiuni Fig. 1. Harta memoriei program Contorul de instrucţiuni PC generează adrese de 21 de biţi. 1 . 1 . Accesarea unei locaţii inexistente fizic în dispozitiv întoarce „0” peste tot (instrucţiunea NOP). ci doar prin intermediul unor registre intermediare PCLATH şi PCLATU. ceea ce permite accesarea unui spaţiu de memorie de 2 Mbytes. Harta memoriei program Harta memoriei program este prezentată în Fig. La microcontrolerul 18F4520. Registrul inferior PCL poate fi accesat pentru scriere sau citire directă pe când registrele PCH şi PCU nu pot fi accesate direct.6.7): PCL pentru biţii <7:0>. PCH pentru biţii <15:8> şi PCU pentru biţii <21:16>. memoria program este de tip flash şi are o capacitate de 32 Kbytes. Contorul de instrucţiuni Contorul de instrucţiuni este de 21 biţi şi se împarte în următoarele trei registre separate (Fig. 20 . Conţinutul registrelor PCLATH şi PCLATU este transferat în PCH respectiv în PCU la orice operaţie de scriere în PCL şi. conţinutul registrelor PCH şi PCU se transferă în registrele PCLATH şi PCLATU la orice operaţie de citire a lui PCL.7. în mod similar. 1.Fig. 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. Se observă că zona memoriei stivă cu 31 de locaţii nu face parte din spaţiul memoriei program.

De exemplu. apariţia depăşirilor menţionate anterior va duce la generarea unui semnal de Reset. Memoria stivă nu face parte din spaţiul de adresare a memoriei interne sau de date fiind o entitate complet separată. La apariţia unor instrucţiuni de tip RETURN. după 31 de scrieri consecutive şi fără nici o citire. 1. are loc o operaţie de scriere în stivă şi deci în registrul TOS. Proiectanţii au prevăzut în setul de instrucţiuni al microcontrolerului două instrucţiuni cu ajutorul cărora se poate scrie (PUSH) respectiv citi (POP) din vârful stivei. Acest registru este iniţializat la baza stivei 0000H (după reset) şi v-a conţine în permanenţă adresa vârfului stivei. se setează bitul STKFUL (Stack Full). în cazul apariţiei unei instrucţiuni de tip CALL. De exemplu. La apariţia unei instrucţiuni de tip CALL sau a unei întreruperi. În ceea ce priveşte memoria stivă propriu-zisă. Salvarea se face 21 . se setează bitul STKUNF (Stack Underflow). Memoria stivă este de tip RAM şi poate stoca 31 de cuvinte a câte 21 de biţi. În mod similar. doar locaţia aflată în vârful stivei (adresată de STKPTR) este accesibilă pentru scriere sau citire prin intermediul unui registru cu funcţii special numit Top Of the Stack (TOS) format tot din trei registre TOSU. ceea ce înseamnă că permite gestionarea a până la 31 de salturi sau întreruperi. Memoria stivă pentru adrese de întoarcere şi registrele asociate Memoria stivă pentru adrese de întoarcere (Return Address Stack) Această memorie stivă este destinată memorării conţinutului contorului de instrucţiuni în cazul apariţiei unei instrucţiuni de salt la o subrutină sau a unei întreruperi. Observaţie: Existenţa registrului TOS permite utilizatorului să-şi construiască. în cazul apariţiei unei cereri de întrerupere. Deoarece. este utilă scrierea sau citirea în sau din vârful stivei fără a perturba prin aceasta desfăşurarea normală a derulării programului. În cazul în care bitul de validare STVREN (Stack Overflow Reset Enable) este la rândul său setat. propria sa memorie stivă.8. 1 . Pentru adresarea memoriei stivă este utilizat un registru de 5 biţi numit Stack Pointer (STKPTR). Cum vârful memoriei stivă este accesibil pentru operaţii de scriere respectiv citire de date în anumite situaţii (salvarea respectiv refacerea contextului unui program în cazul apariţiei unei cereri de întrerupere).8). în cazul a 31 de citiri consecutive. similare cu structura registrului PC (vezi Fig. TOSH respectiv TOSL. conţinut ce poate fi preluat şi plasat în stiva de tip soft.Fig. Pointer-ul STKPTR este prevăzut şi cu o logică de sesizare a depăşirii capacităţii memoriei stivă şi de generare a unei cereri de întrerupere într-o astfel de situaţie. mai întâi este citită locaţia din vârful stivei indicată de conţinutul registrului STKPTR iar apoi este decrementat conţinutul acestuia. prin soft. se impune salvarea conţinutului acestora înaintea încărcării subrutinei de servire a întreruperii care le poate altera. în registrele interne ale procesorului se află date importante ale programului întrerupt. conţinutul registrului STKPTR este incrementat cu o unitate iar apoi conţinutul lui PC este depus la adresa respectivă (în vârful stivei).

Pentru a menţine alinierea. contorul de instrucţiuni PC este incrementat de fiecare dată cu 2 pentru a asigura că întotdeauna LSb = 0. 1 . 1 . Memoria program de tip flash În principiu. Ciclul instrucţiune în memoria stivă. după derularea rutinei de servire a întreruperii. Organizarea instrucţiunilor în memoria program Memoria program este adresată pe octeţi iar instrucţiunile sunt de doi sau patru octeţi. 1. pentru a putea continua programul principal din punctul în care el a fost întrerupt. trebuie refăcute conţinuturile registrelor interne prin citiri din memoria stivă. notate cu Q1. proiectanţii microcontrolerului au implementat o variantă de execuţie prin suprapunerea ciclurilor (tehnica pipeline). Se realizează astfel o suprapunere a fazei de extragere a instrucţiunii curente cu faza de execuţie a instrucţiunii precedente (vezi Fig. Pentru a mări viteza de execuţie a instrucţiunilor. memoria program trebuie să fie o memorie nevolatilă. EPROM sau flash. iar la revenirea în programul principal.2. ceea ce se poate realiza prin utilizarea unor circuite de memorie de tipul ROM. Pentru a asigura alinierea instrucţiunilor stocate. Stiva pentru fiecare dintre aceste trei registre are doar un singur nivel. 1.Fig. WREG şi BSR.10). Q2. 1. ceea ce permite ca majoritatea instrucţiunilor să se execute într-un singur ciclu maşină. Decodarea şi execuţia instrucţiunii se fac în fazele Q1 la Q4 ale ciclului maşină doi. proiectanţii microcontrolerului au prevăzut o memorie stivă specială (Fast Register Stack) pentru stocarea temporară a conţinutului celor mai importante trei registre: STATUS.10. durata unui ciclu maşină este de patru perioade de tact.6. Q3 şi Q4. 22 . Deoarece aceste operaţii de scriere respectiv citire în şi din memoria stivă sunt mari consumatoare de timp. octetul cel mai puţin semnificativ al instrucţiunii este stocat de fiecare dată la adresă pară (LSb = 0). conţinutul acestor trei registre este salvat în mod automat în această memorie stivă specială. Modul de execuţie al instrucţiunilor La acest microcontroler.3.9): în faza Q1 a ciclului maşină unu se extrage codul operaţiei care apoi se depune în registrul de instrucţiuni IR în faza Q4 a ciclului maşină unu. are loc reîncărcarea acestor registre din această memorie stivă specială. La apariţia unei cereri de întrerupere. Execuţia unei instrucţiuni are loc în felul următor (vezi Fig. Fluxul pipeline al instrucţiunilor Fig. iar la revenirea în programul principal.9. tot în mod automat.

fiind foarte potrivite în activitatea de proiectare sau de realizare a unor sisteme de dezvoltare.15). Deoarece memoria program este organizată pe cuvinte de 16 biţi şi memoria de date pe cuvinte de 8 biţi. Read Fig. Structura pe biţi a pointer-ului TBLPTR şi modul de utilizare a acestor secvenţe de biţi pentru operaţiile de citire. 1 . Operaţiile de scriere respectiv citire pe blocuri sunt realizate de un hardware încorporat în memorie şi pe durata acestor operaţii memoria program nu poate fi accesată. caz în care acest tip de memorie asigură costuri minime. memoriile de tip flash pot fi citite octet cu octet. 1. scriere şi ştergere este dată în Fig.14. 1 . 1. Aceste scrieri sunt operaţii scurte. 1. Operaţia Table Write Memoriile de tip ROM (Read–Only Memory) sunt recomandate în cazul unor produse bine puse la punct. respectiv Table Write (Fig. citite şi şterse pe cale electrică de către sistemul care le utilizează. 1. Memoriile flash sunt de tipul EEPROM (Electrically Erasable Programmable Read–Only Memory) putând fi scrise. Mecanismul de scriere în memoria flash de program Fig. dar costul acestor memorii este ceva mai mare deoarece capsula circuitului trebuie prevăzută cu o fereastră de cuarţ pentru a permite ştergerea cu raze ultraviolete.12. ceea ce oferă inginerului proiectant o anumită flexibilitate. Mecanismul de Operaţia citire din Table memoria flash de program Fig.11. Realizarea cu memorii de tip EPROM (Erasable Programmable Read Only Memory) oferă facilitatea de a putea fi şterse (nu pe cale electrică). Scrierea în memoria program se face pe blocuri de 32 de octeţi cu ajutorul unui hardware special implementat (Fig. 1 . realizate într-un număr foarte mare de exemplare. scrise doar pe blocuri de 32 de octeţi şi şterse pe blocuri de 64 de octeţi. Operaţia de scriere în memoria propriu-zisă se face din 32 de registre auxiliare (Holding Register) care trebuie încărcate din registrul TABLAT prin 32 de operaţii de scriere consecutive. Registrele TABLAT respectiv TBLPTR fac parte din setul de registre SFR aile microcontrolerului. respectiv citire.Fig.15.12). Sunt încapsulate într-un material plastic. 1 . 1 . operaţiile de transfer dintre cele două memorii se realizează prin intermediul unui registru de 8 biţi (Table Latch – TABLAT) iar adresarea memoriei program pentru această operaţie se face printr-un pointer (Table pointer – TBLPTR).14. 1. Structura pointer-ului TBLPTR şi limitele lui în funcţie de operaţia efectuată Fig. în şi din memoria program presupun un transfer de date cu memoria şi sunt gestionate de microcontroler prin intermediul a două operaţii numite Table Read (Fig.11). ceea ce permite realizarea lor la costuri mici avantajoase. deoarece sunt scrise doar Holding 23 .13.13. Din punct de vedere constructiv. Operaţiile de scriere. Mecanismul exact de citire a memoriei program este ilustrat în Fig.

adresa blocului rămâne practic neschimbată. Harta memoriei de date este prezentată în Fig. Pentru acest gen de aplicaţii. 1 . 1. Pentru o gestionare eficientă şi pentru un acces rapid la informaţie. Această structură de memorie poate fi utilizată de toate instrucţiunile de bază ale microcontrolerului şi este adresată cu 8 biţi direct din instrucţiune. Observaţie: Mediile de programare elaborate de firmele producătoare pentru produsele pe care le comercializează. Cea de-a doua modalitate de adresare este mai rapidă deoarece. 1 . 24 . verificare şi ştergere a memoriei program fără ca utilizatorul sa fie nevoit a gestiona la nivel de amănunt aceste operaţii (de exemplu mediul MPLAB al firmei Microchip). În felul acesta. proiectanţii au realizat o structură de memorie numită Acces Bank care cuprinde un număr redus de 128 de locaţii de memorie pentru date curente (locaţiile 00H–7FH din blocul 0) şi 128 de locaţii de memorie pentru registrele cu funcţii speciale (locaţiile 80–FFH din blocul 15) – vezi Fig. în cadrul majorităţii programelor aplicative. conţin programe speciale pentru a facilita utilizatorului operaţiile de scriere. acest spaţiu de memorie este împărţit în 16 blocuri a câte 256 de octeţi fiecare. registrul EECON1 trebuie scris pentru a declanşa operaţia de programare a blocului de memorie. În aplicaţii este recomandat ca operaţia de scriere să fie urmată de o operaţie de verificare a corectitudinii scrierii (Write Verify).0 DATA EEPROM MEMORY din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]). care este scrierea propriu-zisă a memoriei flash şi este o scriere de lungă durată. Dar în majoritatea aplicaţiilor este necesar accesul doar la setul de registre speciale şi la un număr redus de registre generale pentru stocarea unor date curente ale programului. Pointer-ul pentru aceste blocuri poartă numele de Bank Select Register (BSR).16. Organizarea memoriei de date Generalităţi Memoria de date a microcontrolerului este de tip SRAM şi are o capacitate de 4096 octeţi.  printr-o adresare care să permită mai întâi selecţia blocului în care se află locaţia dorită – printr-un pointer de 4 biţi cu Bank Pointer.Register. Bank Select Register Datorită modului de organizare a memoriei de date. citire. După actualizarea tuturor acestor 32 de registre. în general.3.6. Fiecare locaţie de memorie (denumită şi registru) este adresabilă printr-un cuvânt de cod de adresă de 12 biţi. se lucrează cu un număr mic de registre care pot fi accesate întrun singur bloc. Registrele de memorie din acest spaţiu sunt de două categorii: registre de memorie de uz general (General Purpose Register) şi registre cu funcţii speciale (Special Function Register). o anume locaţie de memorie (registru) va putea fi adresată în doua moduri diferite:  prin generarea unei adrese de 12 biţi (adresare absolută). Gestionarea memoriei program flash se face prin intermediul unui număr de registre cu funcţii speciale (pentru detalii se recomandă consultarea secţiunii 7. iar apoi accesul registrului dorit din blocul selectat prin cei mai puţin semnificativi 8 biţi (adresare indexată).3.17. Access Bank Cu ajutorul pointer-ului BSR şi a celor mai puţin semnificativi 8 biţi incluşi în instrucţiuni există posibilitatea accesării rapide a întregului spaţiu al memoriei de date. modificându-se doar offset-ul (cei mai puţin semnificativi 8 biţi ai adresei) care face parte din instrucţiune. Acestea din urmă ocupă ultima parte a zonei adresabile.

instrucţiunea utilizează pointer-ul BSR şi poate fi accesat 25 . 1.16. Harta memoriei de date Adresarea memoriei de date este gestionată suplimentar şi cu un parametru „a” cuprins de asemenea în instrucţiune.Fig. Pentru a = 1.

Exemplu: MOVLW 7FH. se pot împărţi în două categorii: – cele care sunt asociate cu structura de bază a microcontrolerului (ALU. iar pentru a = 0 instrucţiunea utilizează doar spaţiul de memorie din Acces Bank.).  registre cu funcţii speciale (SFR). de exemplu.d. Moduri de adresare a memoriei de date Dacă pentru adresarea memoriei program se foloseşte exclusiv contorul de instrucţiuni (Program Counter). instrucţiunea conţine în mod explicit registrul cu care se lucrează precum şi operandul. Exemplu: RESET. Utilizarea Bank Select Register (adresare directă) întreg spaţiul memoriei de date. la rândul lor. cel de-al doilea octet al instrucţiunii este o adresă care poate fi. – registre cu care se gestionează funcţionarea perifericelor.17. 1. Instrucţiunea adună la conţinutul registrului W. întreruperi etc. Regristrele care compun memoria de date În memoria de date se întâlnesc două tipuri de registre:  registre generale de date (GPR). Exemplu: ADDWF f. afectează în general tot sistemul sau lucrează implicit cu un singur registru. Registrele cu funcţii speciale. conţinutul registrului selectat f. adresa locaţiei în cadrul unui bloc de date selectat. Cei doi parametrii suplimentari aflaţi în argumentul instrucţiunii sunt folosiţi astfel: 26 .a.  Adresarea explicită În acest caz.  Adresarea directă În acest caz.Fig. pentru adresarea memoriei de date exista următoarele patru posibilităţi:  Adresarea implicită O astfel de instrucţiune care nu necesită argumente suplimentare.

1.  Pentru d = 0 rezultatul este stocat înapoi în registrul W. 1 . din tot spaţiul memoriei de date.18. INDF2). FSR1 şi FSR2. o Cu parametrul d se selectează destinaţia pentru rezultatul operaţiei:  Pentru d = 1 rezultatul este stocat înapoi în registrul f. accesaţi cu uşurinţă de programul aplicativ. În felul acesta. 27 . Acest lucru este realizat prin utilizarea unor pointer-i (notaţi cu FSRs) pentru adresarea locaţiei de memorie ce urmează a fi accesată. INDF1. în consecinţă se află în memoria de date şi vor putea fi. de exemplu.Fig. Microcontrolerul 18F4520 conţine trei pointer-i de tipul FSR notaţi cu FSR0. 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ă. Adresarea indirectă o Cu parametrul a se selectează sursa pentru f:  Pentru a = 1 registrul f este selectat.  Pentru a = 0 registrul f este selectat doar din spaţiul de memorie delimitat de Acces Bank.  Adresarea indirectă Adresarea indirectă permite utilizatorului să acceseze o anumită locaţie de memorie fără a-i preciza în mod concret adresa acesteia. la rândul lor. cu pointer-ul BSR şi cu cei 8 biţi din octetul inferior al instrucţiunii (practic cu 12 biţi de adresă). ceea ce va duce la eficientizarea programelor. aceşti pointer-i FSR vor fi foarte utili pentru implementarea unor tabele sau structuri de date. precum şi încărcarea automată a unui offset. în cazul unor bucle.18) presupune existenţa a Indirect File Operands (de asemenea în număr de 3 – INDF0. Fiecare din aceşti pointer-i este realizat cu câte doua registre a câte 8 biţi (FSRnH şi FSRnL) şi va conţine un cuvânt de adresă de 12 biţi (cei mai semnificativi 4 biţi din registrul FSRnH nu sunt folosiţi). Pointer-ii FSR fac parte din setul de registre speciale SFR. Adresarea indirectă (Fig. Aceştia pot fi imaginaţi ca nişte registre „virtuale” care fac parte din registrele speciale (SFR) fără însă a fi implementate în mod fizic.

Observaţie: Deoarece adresarea indirectă foloseşte o adresă de 12 biţi. EEDATA şi EEADR. Aceste registre–operanzi sunt:  POSTDEC – accesează pointer-ul FSR. aceleaşi care controlează şi accesul la datele memoriei program. EECON2.3.  PLUSW – adună la conţinutul pointer-ului FSR un număr (offset) cu semn (–127 la 128) stocat în registrul W.4. Controlul memoriei EEPROM se realizeaza prin intermediul urmatoarelor registre speciale: EECON1. Operaţiile de citire şi scriere din şi în memoria EEPROM se efectuează pe octet prin intermediul registrelor EEDATA resprectiv EEADR. şi aceşti registre–operanzi vor reprezenta de fapt nişte registre „virtuale”. Memoria de date EEPROM Memoria de date EEPROM este o memorie separată de memoria program sau de memoria de date SRAM şi este folositabilă pentru stocarea pe termen lung a unor date de program. suplimentara. îi mai sunt asociaţi. Pointer-ului FSRn.  Folosirea unei tehnici de adresare indirectă pentru a accesa registrele virtuale mai sus menţionate poate duce la rezultate imprevizibile (pentru detalii se recomandă consultarea secţiunii 5. 1. Observaţii:  Accesarea registrului INDFn permite utilizarea conţinutului pointer-ului asociat FSRn fără modificarea valorii acestuia.6.3. Folosirea lui INDFn ca operand va utiliza de fapt conţinutul pointer-ului aferent FSRnH şi FSRnL.3 Operations by FSRs on FSRs din foaia de catalog a microcontrolerului PIC18F4520).  Folosirea setului extins de instrucţiuni presupune şi o anumită schimbare în organizarea şi folosirea memoriei de date (pentru detalii se recomandă consultarea secţiunii 5. pe lângă registrul INDFn. Octetul citit sau cel care urmează a fi scris se afla în registrul de 8 biţi EEDATA. Nu face parte din spaţiul de adresare al memoriilor program sau de date şi este accesibilă doar printr-o adresare indirectă prin intermediul unor registre speciale (SFR). iar adresa la care se face operaţia de citire/scriere se afla în registrul de 8 biţi EEADR (spaţiul memoriei EEPROM este de 256 de octeţi). a unei anumite operaţii asupra conţinutului acestora. după care foloseşte noua valoare calculată în operaţie.  POSTINC – accesează pointer-ul FSR. mecanismul de împărţire în 16 blocuri a câte 256 de locaţii (RAM–Banking) nu este luat în considerare. Accesul la datele din memoria EEPROM este controlat de registrele EECON1 respectiv EECON2.4. după care îl incrementează în mod automat. 28 . după care îl decrementează în mod automat. alţi patru registre– operanzi suplimentari.  Accesarea registrului PLUSW permite calculul unui offset (ca mai sus) şi folosirea acestei valori într-o operaţie fără însă ca prin aceasta să se modifice conţinutul pointerului FSRn sau a registrului W.Scrierea sau citirea unui registru de tip INDFn accesează de fapt perechea de registre SFRnH şi SFRnL asociate acestuia. dar şi efectuarea. Ca şi INDFn.  PREINC – incrementează conţinutul lui FSR iar apoi îl foloseşte pe acesta ca operand. Accesarea acestor registre–operanzi înseamnă de fapt accesarea pointer-ului asociat FSRn.5 Data Memory and the Extended Instruction Set din foaia de catalog a microcontrolerului PIC18F4520).

Data adresată va fi depusă în registrul EEDATA şi va fi disponibilă pentru citire în ciclul maşină următor.Fig. Operaţia de citire a memoriei EEPROM Pentru o operaţie de citire. 1. Registrul EECON2 nu este fizic realizat şi este folosit de către microcontroler exclusiv pentru operaţiile de scriere şi ştergere a memoriei EEPROM. utilizatorul trebuie să scrie adresa operandului în registrul EEADR. 29 .19. 1 . să şteargă bitul EEPG0 şi să seteze bitul RD. Registrul 1 EEPROM de control (EECON1) Semificaţia biţilor registrului de control EECON1 este prezentată în Fig.19. Registrul EEDATA va păstra data citită până la o nouă întrebuinţare a acestuia de către utilizator pentru o operaţie de scriere sau citire.

30 . Observaţii:  Pe durata acestei secvenţe. Data Memory Address to write MOVLW DATA_EE_DATA . Disable Interrupts . User code execution BCF EECON1. Timpul de scriere este controlat de hardware-ul microcontrolerului printr-un timer special destinat acestei operaţii. W . Enable Interrupts . WREN . întreruperile trebuie dezactivate. Observaţie: Bitul WR nu va putea fi setat dacă în prealabil WREN nu a fost setat. Enable writes BCF INTCON. . Pentru a iniţia un ciclu de scriere. Point to DATA memory BCF EECON1. Set WR bit to begin write .O secvenţă tipică de program pentru citirea memoriei EEPROM este următoarea: MOVLW MOVWF BCF  BCF  BSF  MOVF  DATA_EE_ADDR EEADR EECON1. MOVWF EECON2 . EEPGD EECON1. Write 55h MOVLW 0AAh .  Prezenţa mecanismului de validare a scrierii prin bitul WREN permite prevenirea unor operaţii de scriere accidentale. Write 0AAh BSF EECON1. RD EEDATA. MOVWF EEADR . După aceasta se va seta bitul de validare a scrierii (bitul WREN din registrul EECON1) pentru a permite desfăşurarea operaţiei de scriere. (EEIF set) Ciclul de scriere nu poate să înceapă dacă nu se respectă următoarea secvenţă: scrierea valorii 55H în EECON2 urmată de scrierea valorii 0AAH în EECON2 iar apoi setarea bitului WR – operaţie ce trebuie repetată pentru fiecare octet ce urmează a fi scris. WREN . trebuie urmată cu stricteţe secvenţa din următorul exemplu: MOVLW DATA_EE_ADDR . MOVWF EECON2 . Data Memory Value to write BCF EECON1. După iniţierea procedurii de scriere. octetul care urmează a fi scris se depune în registrul EEDATA iar adresa la care se face scrierea în registrul EEADR. conţinutul registrelor EEADR. CFGS EECON1. Required sequence =================================== MOVLW 55h . GIE . Point to DATA memory . CFGS . motiv pentru care acest bit trebuie menţinut la valoarea zero cu excepţia situaţiilor de scriere sau a reîmprospătării memoriei. MOVWF EEDATA . La scriere. EEPGD . EEPROM Read . W = EEDATA Operaţia de scriere în memoria EEPROM Scrierea unui octet în memoria EEPROM va determina în mod automat ştergerea prealabilă a respectivei locaţii de memorie şi apoi scrierea noului octet (aplicaţie de tipul erase – before – write). Data Memory Address to read . Disable writes on write complete . Access EEPROM BSF EECON1. WR . GIE . Required sequence =================================== BSF INTCON. EEDATA şi EECON1 nu vor putea fi modificate. Access EEPROM . Operaţia propriu-zisă de scriere începe prin setarea bitului de comanda WR.

De regulă este bine ca operaţia de scriere să fie urmată şi de o operaţie de verificare a corectitudinii scrierii. Increment address Not zero. . . . Programatorul poate lua în considerare sau nu această solicitare de întrerupere prin setarea sau nu a biţilor de validare corespunzători. se impune o operaţie de reîmprospătare a datelor din memorie. INTCON. Este recomandată utilizarea ei pentru informaţii supuse unor modificări frecvente (de exemplu variabile de program sau date supuse unor update-uri frecvente). Folosirea memoriei de date EEPROM Memoria de data EEPROM este o memorie de înaltă fiabilitate (permite circa 1. . Un mecanism suplimentar de protecţie împotriva unor operaţii de scriere accidentale şi nedorite este asigurat de bitul de validare WREN (pus pe zero la POR) împreună cu secvenţa obligatorie ce precede o operaţie de scriere a unui octet. . . WR $-2 EEADR.0 Special Features of the CPU din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]). .După terminarea ciclului de scriere. F LOOP EECON1. WR EECON1. do it again Disable writes Enable interrupts Write 55h Write 0AAh Set WR bit to begin write Wait for write to complete 31 .000 de operaţii de scriere/ştergere şi garantează calitatea informaţiei stocate pentru circa 100 de ani). EECON1. Mecanisme de protecţie Memoria EEPROM este prevăzută cu un mecanism de protecţie prin setarea unor biţi din cuvântul de cod de configurare (vezi secţiunea 23. BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSC BRA INCFSZ BRA BCF BSF EECON1. WREN INTCON. . . . . Start at address 0 Set for memory Set for Data EEPROM Disable interrupts Enable writes Loop to refresh array Read current address . În astfel de situaţii. Observaţie: Bitul EEIF trebuie şters prin soft. EECON1. . O rutină simplă de reîmprospătare a memoriei EEPROM este următoarea: Loop CLRF BCF BCF BCF BSF EEADR EECON1. bitul WR este resetat de hardware iar fanionul (flag) de întrerupere a memoriei EEPROM – bitul EEIF – va fi setat. . . operaţiile de scriere sau citire din exterior a memoriei EEPROM nu vor mai fi posibile dar microcontrolerul însuşi va putea citi sau scrie această memorie internă EEPROM. Odată mecanismul activat. . GIE CFGS EEPGD GIE WREN . RD 55h EECON2 0AAh EECON2 EECON1.000.

LAB Picdem 2 Plus\Datasheets şi LAB PICDEM 2 Plus\Documents.3 Sintetizarea structurilor de memorie implementate în microcontrolerul PIC 18LF4520 Faceţi un tabel cu memoriile prezente în microcontrolerul PIC18LF4520 precizând pentru fiecare tipul. rolul.4. Întrebări [1] 32 Care este diferenţa principală între microcontrolerele PIC18LF4520 şi PIC18F4520? Ce consecinţe practice înseamnă acest lucru pentru aplicaţiile în care se utilizează respectivele microcontrolere? (Indicaţie: vezi secţiunea 26. Activităţi propuse [1] Faceţi o comparaţie din punct de vedere al caracteristicilor şi funcţionalităţilor între următoarele două microcontrolere: PIC18LF4520 şi PIC18LF4620. cu câţi biţi este adresat şi modalităţile de citire. 1. Imaginaţi şi descrieţi două aplicaţii didactice bazate pe sistemul de dezvoltare ales. foile de catalog şi documentele informative incluse în următoarele directoare: LAB Picdem 2 Plus\User's Guide. Desfăşurarea lecţiei ACTIVITATEA 1.5.0 Electrical Characteristics din fişierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data Sheet [??? DS]) . Alegeţi unul şi precizaţi care sunt componentele şi posibilităţile suplimentare ale sale care nu sunt prezente la cele din laborator. ACTIVITATEA 1. scriere şi ştergere a memoriei. ACTIVITATEA 1.com/tools şi http://forum. [2] Comparaţi caracteristicile şi facilităţile celor două dispozitive de programare/depanare disponibile în laborator: ICD2 şi ICD3. capacitatea.microchip.1 Studiul altor materiale informative Studiaţi manualele de utilizare.microchip.4 Comparaţie între posibilităţile a două sisteme de dezvoltare Faceţi o comparaţie a dotărilor şi facilităţilor celor două sisteme de dezvoltare disponibile în laborator: PICKIT 1 FLASH Starter Kit şi PICDEM 2 Plus.6.com.1.2 Studiul structurii paginilor WEB ale firmei Microchip Studiaţi structura paginilor de internet oferite de firma Microchip pentru documentare suplimentară: www. [4] Faceţi o organigramă (schemă logică) care să descrie sugestiv desfăşurarea evenimentelor şi acţiunilor în cadrul mecanismului de generare şi tratare a întreruperilor în cazul microcontrolerului PIC 18LF4520. [3] Studiaţi şi celelalte sisteme de dezvoltare oferite de firma Microchip. 1. pe câţi biţi este organizat. ACTIVITATEA 1.

[2] Care credeţi că sunt utilizările principale în aplicaţiile practice ale memoriei EEPROM prezente la microcontrolerul PIC18LF4520? [3] Care sunt modalităţile de adresare ale memoriei de date? [4] Care sunt motivele pentru care proiectantul a introdus structura de memorie Access Bank în microcontrolerele PIC? [5] Pentru un automat de vânzare. [7] De ce au fost introduse în schema microcontrolerului memorii de date şi de program distincte? 33 . ce fel de oscilator şi de gestionare a consumului de energie aţi alege? [6] Daţi un exemplu în care supravegherea programului aplicativ prin intermediul unui Watchdog Timer este necesară.

34 .