Sunteți pe pagina 1din 19

ORGANIZAREA MEMORIEI

46


3. ORGANIZAREA MEMORIEI



Cuprins
Introducere
Obiective
3.1 MEMORIA PROGRAM
3.1.1 Structura memoriei program
3.1.2 Numrtorul de program
3.1.3 Stiva adreselor de revenire
3.2 MEMORIA DE DATE RAM
3.2.1 Utilizarea Bank-urilor
3.2.2 Utilizarea Access Bank-ului
3.2.3 Utilizarea instruciunii MOVFF
3.3 MEMORIA DE DATE EEPROM
Concluzii
ntrebri de autoevaluare
Termeni eseniali













SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
47

Introducere
Buna nelegere a organizrii memoriei permite realizarea unor programe
care utilizeaz eficient memoria. n cazul microcontrolerelor, aceast
problem este deosebit de important din cauza limitrilor impuse de
resursele fizice disponibile. Microcontrolerele din familia PIC18 cuprind
de regul n arhitectura lor trei tipuri de memorie:
- memorie program;
- memorie de date RAM;
- memorie de date EEPROM.

Obiective
Dup parcurgerea acestui capitol cursantul va trebui:
- s cunoasc structura i harta memoriei program i a memoriei de
date, dar i rolul pe care aceste memorii l ndeplinesc n cadrul
microcontrolerului PIC18F4455;
- s neleag mecanismul de adresare implementat prin bank-uri i
legtura sa cu registrul de selecie al bank-urilor BSR
- s cunoasc rolul i structura Access Bank-ului
- s cunoasc rolul i structura stivei
- s cunoasc rolul i structura numrtorului de program i a
regitrilor asociai


3.1 MEMORIA PROGRAM

3.1.1 Stuctura memoriei program

Rolul pe care l ndeplinete memoria program este de a furniza un spaiu de stocare
pentru instruciunile care formeaz programul executat de microcontroler.
Capacitatea total de adresare a microcontrolerelor din familia PIC18 este de 2MByte.
n aceste condiii magistrala de adrese a memoriei program va avea limea de 21 de bii
(2MByte=2
21
Byte), iar numrtorul de program, asupra cruia se va reveni n paragraful
urmtor, va avea i el dimensiunea de 21 de bii. Din cei 2MBytes, n cazul
microcontrolerului PIC18F4455 este implementat fizic o memorie program de tip Flash cu
dimensiunea de 24KBytes. Acest lucru permite ca memoria s poat fi tears i rescris de
foarte multe ori, datele tehnice menionnd un numr de 100000 de tergeri/scrieri posibile.
Din punct de vedere al dimensiunii programului care poate fi stocat n aceast
memorie, o scurt analiz ne conduce la concluzia conform creia n 24kB de memorie
ORGANIZAREA MEMORIEI
48
program se poate stoca un program format din pn la 12268 de instruciuni scurte (de 16
bii).
Accesarea unei locaii de memorie cuprins ntre limita superioar a memoriei
implementate fizic i limita maxim a spaiului de adresare de 2MByte va ntoarce valoarea
zero, fiind echivalent execuiei instruciunii NOP (No OPeration).
Microcontrolerele din familia PIC18 dispun de doi vectori de ntrerupere care se
gsesc la adresele 0008h i 0018h. La apariia unor nteruperi vor fi executate n mod
automat instruciunile care se vor regsi n memorie la aceste adrese. Asupra acestei chestiuni
se va reveni n capitolul dedicat sistemului de ntreruperi. Adresa de reset a
microcontrolerului se gsete la locaia 0000h. Aceasta este adresa la care se reseteaz
numrtorul de program. n afara acestor trei locaii de memorie mai speciale, restul locaiilor
memoriei program sunt echivalente.[10,15]
n Fig. 3.1 se prezint harta memoriei program pentru microcontrolerul PIC18F4455.


Fig. 3.1. Harta memoriei program

Dup cum s-a putut vedea n capitolul anterior, din punct de vedere al dimensiunii,
instruciunile pot fi mprite n dou categorii: instruciuni scurte (16 bii) i instruciuni lungi
(32 bii). Instruciunile scurte vor ocupa dou locaii de memorie succesive, iar instruciunile
lungi vor ocupa patru locaii de memorie. n ambele cazuri octetul cel mai puin semnificativ
al instruciunii va ocupa o adres par. Urmtorul exemplu prezint modul de reprezentare al
instruciunilor n memoria program.
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
49

Exemplu
Se consider o seciune de cod format din trei instruciuni scurte a cror
codificare n memoria program are forma prezentat n Fig. 3.2.


Fig. 3.2. Reprezentarea instruciunilor n memoria program

Citirea si scrierea memoriei program a microcontrolerelor (fr a lua n considerare
execuia propriu-zis a codului) se realizeaz de regul utiliznd un circuit extern de
programare i un set de pini bine definii pentru acest scop. Microcontrolerul PIC18F4455
permite citirea i scrierea memoriei program i prin intermediul instruciunilor de sciere/citire
tabelar de tip TBLRD/TBLWT. Utiliznd aceste instruciuni, se poate citi codul, se pot
efectua programatic modificri asupra codului, se pot stoca date i se pot citi date din
memoria program.[8]

3.1.2 Numrtorul de program

Numrtorul de program (en. PC=Program Counter) conine adresa urmtoarei
instruciuni care va fi extras din memorie. Pentru a putea adresa ntreaga memorie,
numrtorul de program are dimensiunea de 21 de bii mprii n trei regitri de 8 bii: PCL,
PCH i PCU.
Registrul PCL (en. Program Counter Low) conine primii opt bii ai numrtorului de
program PC<7:0>, registrul PCH (en. Program Counter High) conine urmtorii opt bii ai
numrtorului de program PC<15:8>, iar registrul PCU (en. Program Counter Upper)
conine cei cinci bii superiori ai numrtorului de program PC<20:16>.
n mod normal, numrtorul de program se incrementeaz de dou ori, automat, dup
fiecare faz de extragere a unei instruciuni din memorie, funcionnd n esen asemenea
unui numrtor binar uzual. Totui, instruciuni precum GOTO, care permit efectuarea de
ORGANIZAREA MEMORIEI
50
salturi la diverse instruciuni din memoria program, intervin n incrementarea obinuit
realizat de numrtorul de program modificndu-i valoarea. Chiar dac modificarea valorii
numrtorului program este lsat de obicei n seama instruciunilor specializate, exist
posibilitatea de a accesa regitrii numrtorului program i de a interveni n evoluia sa
normal. n general, acest lucru este util atunci cnd se dorete accesul la elementele unor
tablouri implementate n memoria program, dup cum se va vedea n unul din capitolele
urmtoare.
Accesul la regitrii numrtorului de program este ntr-o oarecare msur problematic,
din cauza faptului c regitrii si au dimensiunea de opt bii, iar toate modificrile
numrtorului de program trebuie s afecteze simultan toi cei 21 de bii ai si, pentru a
realiza modificarea atomic a valorii sale.
Dintre regitrii numrtorului de program, doar PCL poate fi scris i citit direct, fiind
mapat sub forma unui registru special n memorie. Pentru PCH i PCU s-au introdus doi
regitri tampon PCLATH (en. PC LATch High) i PCLATU (en. PC LATch Upper).
Pentru a rezolva problema modificrii coninutului numrtorului de program, scrierea
unei valori n registrul PCL (ex. MOVWF PCL) transfer simultan i coninutul regitrilor
tampon PCLATU:PCLATH n regitrii PCU:PCH. La citirea registrului PCL (ex. MOVF
PCL,W) se transfer simultan i coninutul regitrilor PCU:PCH n regitrii tampon
PCLATU:PCLATH. n acest fel, scrierea i citirea valorii efective a numrtorului de program
se realizeaz ntr-un singur pas.[6,8,15]
Structura numrtorului de program i modul n care se face accesul la regitrii si se
prezint n Fig. 3.3.


Fig. 3.3. Structura numrtorului de program i accesul la regitrii si

Pentru a ilustra procesul de modificare a valorii numrtorului de program se
consider exemplul urmtor
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
51

Exemplu
Se analizeaz cazul creterii valorii numrtorului de program cu 32
(PC+32) realizndu-se astfel un salt peste urmtoarele 16 instruciuni (32
octei) ale programului fr a se utiliza instruciuni de control al execuiei.
Presupunnd c a fost declarat n prealabil un registru de uz general denumit
TEMP, atunci urmtoarea poriune de cod va realiza cele propuse.

MOVF PCL,W ; se salveaz PCL n registrul TEMP
MOVWF TEMP
MOVLW d32 ; se mut constanta 24 n WREG
ADDWF TEMP,F ; se adun la valoarea din PCL
MOVLW 0 ; se pune valoarea 0 n WREG
ADDWFC PCLATH,F ; se adun bitul de transport la PCLATH
MOVLW 0 ; se pune valoarea 0 n WREG
ADDWFC PCLATU,F ; se adun bitul de transport la PCLATU
MOVF TEMP,W ; se nscrie noua valoare n PCL pentru a
MOVWF PCL ; actualiza i restul regitrilor PC

Depirea cu o unitate a valorii maxime stocate ntr-unul din regitrii
numrtorului program nu conduce la incrementarea automat a valorii
registrului superior.
Codul prezentat mai sus ofer o soluie la aceast problem. Astfel,
deoarece nu se cunoate valoarea iniial a PC, adunarea valorii 32 la PCL
poate conduce la depirea valorii maxime care poate fi stocat pe 8 bii
(255) n acest registru. Prin utilizarea bitului de transport care se adun la
valoarea din PCLATH, i apoi la valoarea din PCLATU se asigur
modificarea corect a valorii PC.

Ca o msur de protecie suplimentar, bitul 0 al numrtorului program va avea tot
timpul valoarea 0 (PC<0>=0). n acest fel se evit obinerea de adrese invalide ca urmare a
modificrii valorii numrtorului de program, iar acesta va indica ntotdeauna spre adresa de
nceput a unei instruciuni.

3.1.3 Stiva adreselor de revenire

Apelul unei subrutine este echivalent cu ncrcarea adresei primei instruciuni a
subrutinei n numrtorul de program (PC), efectundu-se astfel un salt la adresa respectiv,
practic un GOTO. Astfel, dac subrutina noastr (denumit SR_exemplu) ar ncepe la adresa
0400h n memoria program, atunci GOTO 0x400 ar fi echivalent cu apelul subrutinei.
ORGANIZAREA MEMORIEI
52
Presupunnd c programatorul a plasat eticheta SR_exemplu naintea primei instruciuni a
subrutinei, atunci am avea GOTO SR_exemplu.
Apare totui o problem n mecanismul prezentat. Procesorul trebuie s i aduc
aminte din ce loc al programului s-a efectuat apelul subrutinei, pentru a se putea ntoarce cu
execuia la instruciunea imediat urmtoare apelului de subrutin, odat ce a finalizat de
executat instruciunile din subrutin. Acest lucru este pus n eviden n Fig. 3.4 unde apelul
de subrutin se poate produce din dou locuri diferite ale programului principal sau chiar
dintr-o alt subrutin, dup cum se va vedea n Fig. 3.6.


Fig. 3.4. Apelul de subrutin

O soluie la aceast problem este de a salva, nainte de a efectua apelul/saltul, adresa
de revenire ntr-un registru de adrese sau ntr-o locaie de memorie. La sfritul subrutinei,
adresa salvat poate fi mutat napoi n numrtorul de program, realizndu-se astfel
ntoarcerea din subrutin. Din pcate, aceast abordare nu va funciona n cazul apelului a
dou subrutine imbricate, deoarece la apelul celei de-a doua subrutine se va suprascrie adresa
de revenire a primei subrutine i evoluia programului nu va mai fi cea dorit. Prin utilizarea
unui numr mai mare de regitri de adres sau locaii de memorie, care vor forma o stiv de
tip LIFO (Last In First Out) i care va stoca adresele de revenire s-ar rezolva i aceast
problem.
Microcontrolerele din seria PIC18 implementeaz o stiv format din 31 de regitri cu
dimensiunea de 21 de bii utilizat pentru stocarea adreselor de revenire a subrutinelor i
rutinelor de tratare a ntreruperilor. n Fig. 3.5 se prezint aceast structur cunoscut sub
denumirea de stiva adreselor de revenire. Aceast stiv reprezint un spaiu de memorie
distinct, nefiind mapat n spaiul de adrese al memoriei de date, iar structura ei permite
efectuarea unui numr maxim de 31 de apeluri de subrutine imbricate.[10,15]
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
53

Fig. 3.5. Utilizarea stivei adreselor de revenire

Stiva are asociat un indicator de stiv (en. Stack Pointer) cu dimensiunea de 5 bii,
care se gsete n registrul STKPTR, biii <4:0>. La fiecare apel de subrutin (CALL)
indicatorul de sitv se incrementeaz automat i starea numrtorului de program este copiat
n registrul din stiv spre care acesta indic. Adresa salvat reprezint adresa instruciunii
imediat urmtoare (dup CALL). Dup ce PC a fost pus pe stiv, acesta este suprascris cu
adresa instruciunii destinaie. La fel ca i n cazul instruciunii GOTO, i instruciunea CALL
este tot o instruciune lung, lucru care permite subrutinelor implementate s fie plasate
oriunde n spaiul memoriei program.
Fig. 3.5-a prezint configuraia stivei la reset, atunci cnd indicatorul de stiv are
valoarea 0. Adresa 0 a stivei nu este utilizat niciodat, deoarece ntotdeauna indicatorul de
stiv se incrementeaz nainterea punerii PC pe stiv. n situaia prezentat n Fig. 3.5-b se
arat configuraia stivei dup apelul unei subrutine cu eticheta SR_exemplu.
Apelul subrutinei CALL SR_exemplu determin urmtoarele:
1. Indicatorul de stiv se incrementeaz;
2. Cei 21 de bii ai PC se copiaz n locaia din stiv spre care indic indicatorul de stiv.
Datele stocate reprezint adresa instruciunii care urmeaz dup CALL;
ORGANIZAREA MEMORIEI
54
3. Adresa instruciunii de destinaie, marcat prin eticheta SR_exemplu, care
corespunde primei instruciuni a subrutinei, va suprascrie PC. Acest lucru determin
transferul execuiei ctre subrutin.
Revenirea din subrutin, prezentat n Fig. 3.5-c, se produce la execuia instruciunii
RETURN, i determin urmtoarele operaii:
1. Se copiaz n PC adresa de 21 de bii din registrul stivei spre care indic indicatorul
de stiv;
2. Se decrementeaz indicatorul de stiv.[6]
Mecanismul implementat de stiv i prezentat n Fig. 3.5 permite execuia corect a
apelurilor de subrutin, dar avantajul oferit de stiv este mult mai evident n cazul subrutinelor
imbricate. Petru a exemplifica acest lucru se consider situaia prezentat n Fig. 3.6, unde
programul principal apeleaz subrutina SR_1, care apeleaz la rndul ei subrutina SR_2,
revenindu-se apoi pe rnd la programul principal. Structura de tip LIFO a stivei permite
rezolvarea oricrei situaii de imbricare de pn la 31 de subrutine.


Fig. 3.6. Subrutine imbricate

Pe lng funcionarea automat a stivei, care a fost prezentat pn acum, exist i
posibilitatea de a accesa manual coninutul stivei. n Fig. 3.7 se prezint structura stivei care
utilizeaz, pe lng indicatorul de stiv din registrul STKPTR, i tripletul format din regitrii
de la vrful stivei: TOSU:TOSH:TOSL (Top Of Stack Upper/High/Low). La orice moment
dat, regitrii TOS conin cei 21 de bii de date de pe poziia din stiv spre care indic
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
55
indicatorul de stiv STKPTR<4:0>. Modificarea regitrilor TOS va conduce la modificarea
coninutului de pe poziia corespunztoare a stivei. n acest fel se permite examinarea sau
chiar modificarea valorilor adreselor de revenire stocate n stiv.


Fig. 3.7. Structura stivei adreselor de revenire

Prin deplasarea indicatorului de stiv n sus i n jos pot fi accesate datele localizate pe
diferite poziii n stiv. Astfel, indicatorul de stiv STKPTR<4:0> poate lua valori de la 0 la
31. n momentul n care ajunge la valoarea 31, bitul STKFUL (en. STAcK FuLl) este pus pe 1
indicnd stiva plin, iar n momentul n care ajunge la valoarea 0, bitul STKFUNF (en.
STAcK UNderFlow) este pus pe 1. Structura registrului STKPTR care conine indicatorul de
stiv i cei doi bii de stare se prezint n Fig. 3.8.

7 0
STKFUL STKUNF - SP4 SP3 SP2 SP1 SP0
Fig. 3.8. Structura registrului STKPTR

n afara instruciunilor de apel i revenire din subrutin, setul de instruciuni al
microcontrolerelor din seria PIC18 mai curpinde dou instruciuni: PUSH i POP special
concepute pentru manipularea indicatorului de stiv fr a produce saltul spre sau revenirea
dintr-o subrutin.
Instruciunea PUSH, prezentat n Fig. 3.9-a, incrementeaz indicatorul de stiv i
copiaz coninutul numrtorului de program (care indic spre instruciunea care urmeaz
dup PUSH) pe stiv, care va fi apoi accesibil prin regitrii TOS. Instruciunea este
asemntoare lui CALL fr a suprascrie ns PC cu adresa de nceput a unei subrutine.
Instruciunea POP, prezentat n Fig. 3.9-b, decrementeaz indicatorul de stiv, iar
TOS se modific pentru a reflecta coninutul stivei de pe noua poziie spre care indic
indicatorul de stiv.[6]

ORGANIZAREA MEMORIEI
56

Fig. 3.9. Instruciunile PUSH i POP


3.2 MEMORIA DE DATE RAM

Acest tip de memorie este utilizat de regul pentru stocarea datelor temporare necesare
rulrii programelor (ex. variabile i constante de program).
Capacitatea total de adresare a memoriei RAM pentru microcontrolerele din familia
PIC18 este de 4096 de octei, fiecare octet purtnd denumirea de registru. Aceti regitri sunt
mprii n dou categorii: regitri destinai stocrii datelor denumii Regitri de Uz General
(en. GPR = General Purpose Registers), respectiv regitri cu anumite funcii de configurare /
monitorizare cunoscui sub denumirea de Regitri Speciali (en. SFR = Special Function
Registers). Maparea regitrilor GPR i SFR n acelai spaiu de adrese permite accesarea lor
prin intermediul unui singur set de instruciuni. Din cei 4096 octei de memorie RAM,
microcontrolerul PIC18F4455 implementeaz un total de 2048 de octei.
Un spaiu de stocare de 4kBytes necesit o adres de 12 bii (4096 Bytes = 2
12
Bytes).
Dup cum s-a putut vedea n capitolul anterior, pentru marea majoritate a instruciunilor,
cmpul prevzut pentru adres n codul instruciunii este de doar 8 bii. Exist patru modaliti
de a ocoli acest inconvenient pentru a putea accesa ntreaga memorie:
- utilizarea Bank-urilor;
- utilizarea Access Bank-ului;
- utilizarea instruciunii MOVFF;
- utilizarea pointerilor (vezi capitolul urmtor).





SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
57
3.2.1 Utilizarea Bank-urilor

Pentru a asigura adresarea pe un octet a ntregii zone de memorie (utiliznd
instruciuni scurte), memoria de date este mprit n bank-uri (Fig. 3.10). O asemenea
mprire nseamn c nu este necesar specificarea ntregii adrese (de 12 bii) pentru fiecare
operaie de scriere sau citire a memoriei, ci doar a unei pri a acesteia (8 bii din cei 12).


Fig. 3.10. Structura memoriei RAM la microcontrolerul PIC18F4455 conform foii de catalog [15]

Numrul de bank-uri pentru seria PIC18 este de 16, fiecare bank coninnd 256 de
octei. Din aceste 16 bank-uri, microcontrolerul PIC18F4455 implementeaz doar 8. Regitrii
SFR sunt implementai n partea superioar a bank-ului 15 (160 de octei), iar n rest regitrii
sunt de uz general. Dac se utilizeaz comunicarea prin USB, bank-urile 4-7 sunt folosite
pentru a asigura transferul de date USB.
ORGANIZAREA MEMORIEI
58
Pentru formarea adresei complete de 12 bii se va utiliza un octet care specific adresa
n cadrul bank-ului (cei 8 bii inferiori ai adresei complete) i 4 bii reprezentnd numrul
bank-ului accesat (restul de 4 bii ai adresei complete).
Majoritatea instruciunilor din familia PIC18 utilizeaz cei 4 bii pentru selecia bank-
ului, acetia fiind accesibili prin intermediul registrului special BSR (en. Bank Select
Register). Acest registru conine biii cei mai semnificativi ai adresei de 12 bii (BSR<3:0>),
ceilali 8 bii ai adresei fiind specificai n cadrul instruciunii.
Pentru modificarea coninutului acestui registru este disponibil o instruciune
special: MOVLB (en. Move Literal to BSR).
De exemplu, selectarea bank-ului 2 se poate realiza cu urmtoarea instruciune:
MOVLB 0x02
sau, lund n considerare c BSR este un simplu registru ca oricare altul, valoarea sa se poate
modifica i pe baza urmtoarei secvene de instruciuni:
MOVLW 0x02
MOVWF BSR
Trebuie menionat faptul c toate instruciunile de lucru cu regitrii se aplic i asupra
registrului BSR.

n exemplul urmtor se prezint modul de adresare al memoriei folosind bank-urile.

Exemplu
Pentru a modifica valoarea registrului de la adresa 0x20 din Bank-ul 2
trebuie parcuri urmtorii pai:
- se mut constanta 2 n registrul BSR
- se acceseaz registrul de la adresa 0x20 asigurndu-ne c bitul a din
codul instruciunii are valoarea 1 (a=1 sau a=BANKED)
Urmtoarea secven de cod terge coninutul registrului de la adresa 0x202.
;selectare Bank 2 (BSR = 2)
MOVLB 0x02
;accesare registrul 0x20 din Bank 2
CLRF 0x20, BANKED


Avnd n vedere c pn la 16 regitri pot avea aceeai adres inferioar, utilizatorul
trebuie s se asigure c a selectat bank-ul de lucru potrivit nainte de a realiza operaii de
scriere sau citire. Aceast situaie este exemplificat n continuare:


SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
59

Exemplu
;selectare Bank 2 (BSR = 2)
MOVLB 0x02
;accesare registrul 0x00 din Bank 2.
CLRF 0x00, BANKED

;selectare Bank 3 (BSR = 3)
MOVLB 0x03
;accesare registrul 0x00 din Bank 3
INCF 0x00, BANKED

n exemplul anterior se observ faptul c cei doi regitri accesai, unul din bank-
ul 2 i cellalt din bank-ul 3, dispun de aceeai adres inferioar (0x00)
introdus prin intermediul instruciunilor.
n Fig. 3.11 se prezint modul de formare al adresei complete n cazul accesrii
directe a memoriei prin intermediul bank-urilor i a registrului BSR.

Fig. 3.11. Formarea adresei n vederea accesrii memoriei RAM prin Bank-uri


3.2.2 Utilizarea Access Bank-ului

Utilizarea registrului BSR mpreun cu adresa de 8 bii specificat prin intermediul
instruciunilor permite adresarea ntregii memorii, dar ridic i anumite inconveniente pe care
utilizatorul trebuie s le ia n considerare. Acesta trebuie s se asigure ntotdeauna c este
selectat bank-ul de lucru corect, pentru a accesa datele din zona dorit de memorie. Aceste
inconveniente sunt mai evidente atunci cnd se dorete accesul la regitrii speciali (care se
gsesc n Bank 15) pentru anumite configurri, lucru care presupune schimbarea bank-ului de
lucru, iar apoi revenirea la bank-ul curent de lucru n vederea utilizrii regitrilor de uz
general. Astfel, verificarea i/sau modificarea coninutului registrului BSR pentru fiecare
ORGANIZAREA MEMORIEI
60
operaie de scriere sau citire a memoriei poate deveni foarte ineficient din cauza creterii
numrului de instruciuni utilizate, care conduce, n mod evident, spre creterea timpului de
execuie al programului, i predispune frecvent la erori.
Aceast problem a fost rezolvat prin introducerea unei zone virtuale de memorie
denumit Access Bank, accesibil fr modificarea bank-ului. Aceast zon de memorie
mapeaz primii 96 de regitri GPR (din Bank 0) i cei 160 de regitri SFR (din Bank 15).
Pentru a accesa zona de memorie mapat n Access Bank, utilizatorul va fi nevoit s
reseteze bitul de acces (a=0 sau a=ACCESS) existent n cadrul instruciunilor.
Astfel, cnd bitul de access (a) al instruciunilor va avea valoarea 1 (BANKED), la
formarea adresei se va lua n considerare coninutul registrului BSR, iar operandul f al
instruciunilor va reprezenta locaia accesat din cadrul bank-ului selectat. Cnd bitul de
access (a) al instruciunilor va avea valoarea 0 (ACCESS), coninutul registrului BSR este
ignorat, iar operandul f al instruciunilor va reprezenta adresa unei locaii din Access Bank.

n exemplul urmtor se prezint modul de adresare al memoriei prin intermediul
Access Bank-ul.

Exemplu
Se consider cazul accesului la registrul special TRISA, aflat n Bank-ul 15
la adresa 0xF92, precum i accesul la registrul de uz general de la adresa
0x007 din Bank-ul 0, ambii regitri utilizai fiind mapai n Access Bank:
CLRF TRISA, ACCESS
BSF TRISA, 4, ACCESS
INCF 0x07, ACCESS


3.2.3 Utilizarea instruciunii MOVFF

Instruciunea MOVFF permite mutarea unui octet de date dintr-un loc n orice alt loc al
memoriei RAM de date. MOVFF este una din cele doar patru instruciuni lungi (avnd 32 bii)
disponibile n setul de instruciuni al microcontrolerului, lucru care i permite s stocheze, de
una singur, adresele complete de 12 bii ale regitrilor surs i destinaie. Astfel, dac se
dorete, de exemplu, s se mute un octet din registrul de la adresa 0xF81 (PORTB) n locaia
de memorie de la adresa 0x220 se poate utiliza MOVFF 0xF81, 0x220, fr a recurge la
Access Bank sau Bank-uri. Totui, avnd n vedere c MOVFF este o instruciune lung,
aceasta va necesita dou cicluri instruciune pentru a fi extras din memoria program, avnd
astfel un timp de execuie dublu fa de instruciunile simple.

SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
61
3.3 MEMORIA DE DATE EEPROM

Memoria EEPROM este o memorie nevolatil utilizat de regul pentru stocarea
datelor program persistente. De exemplu, aceast zon de memorie poate fi util la
memorarea configurrilor unui proces, astfel nct acestea s nu se piard cnd sistemul nu
este alimentat. Numrul de octei EEPROM disponibili pentru P18F4455 este de 256. Datele
se citesc i se scriu pe un octet. Specificaiile tehnice menioneaz un numr de 1.000.000 de
stergeri/scrieri posibile.
Memoria EEPROM nu este mapat n spaiul de memorie RAM sau program. n
schimb, se acceseaz indirect utiliznd un set de regitri speciali: EECON1, EECON2,
EEDATA i EEADR.



Concluzii
n acest capitol s-a prezentat modul de organizare a memoriei
microcontrolerului PIC18F4455. Acest microcontroler dispune de trei
tipuri diferite de memorie.
Memoria program este utilizat pentru stocarea programului,
avnd o capacitate total de adresare de 2MB, din care sunt implementai
fizic 24kB. Pentru a putea adresa ntreaga memorie, microcontrolerul
dispune de un numrtor de program cu dimensiunea de 21 de bii, care
poate fi accesat prin intermediul a trei regitri mapai n spaiul de
memorie RAM. Stiva adreselor de revenire este implementat sub forma
unei structuri LIFO cu 31 de nivele.
Memoria RAM de date are rolul de a stoca datele temporare
necesare rulrii programelor. Are dimensiunea de 4kB, fiind mprit n
16 Bank-uri de 256B. Primii 96 de regitri GPR din Bank 0 i cei 160 de
regitri SFR din Bank 15 pot fi accesai prin intermediul unei zone
virtuale de memorie denumit Access Bank.
Memoria EEPROM este o memorie nevolatil utilizat pentru
stocarea datelor program persistente care poate fi accesat prin
instuciunile cunoscute cu ajutorul unor regitri SFR mapai n memoria
RAM.



ORGANIZAREA MEMORIEI
62
1. Cum se formeaz adresa complet n cazul utilizrii Access Bank-
ului?
2. De ce este necesar modificarea atomic a regitrilor numrtorului
de program?
3. Care este diferena ntre instruciunile GOTO i CALL din punct de
vedere al stivei i al numrtorului de program?
4. Care este rolul Access Bank-ului?
5. Cum se poate modifica manual coninutul stivei?
6. Ce rol ndeplinete parametrul a n codul instruciunii?
7. Cum se formeaz adresa complet n cazul utilizrii Bank-urilor?

ntrebri de
autoevaluare
8. Ce rol ndeplinete registrul BSR?



Termeni
eseniali
Access Bank
Zon virtual de memorie prin intermediul creia se pot accesa primii 96
de regitri GPR din Bank 0 i cei 160 de regitri SFR din Bank 15.
Bank
Zon de memorie format din 256 de octei utilizat ca diviziune a
memoriei RAM de date.
BSR
Bank Select Register. Registru de selecie a Bank-urilor
EEPROM
Electrically Erasable Programmable Read-Only Memory. Memorie
nevolatil utilizat pentru a stoca mici cantiti de date care trebuie
pstrate n lipsa alimentrii.
Etichet
Identificator introdus n codul surs pentru a marca adresa de nceput a
unei instruciuni
GPR
General Purpose Registers. Regitri de uz general
LIFO
Last In First Out. Mod n care sunt stocate i scoase datele din stiv.
Memorie de date
Spaiu de stocare temporar (RAM) pentru datele cu care lucreaz
programul
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
63
Memorie program
Spaiu de stocare pentru program
Memorie virtual
Tehnic de gestiune a memoriei care virtualizeaz diferite forme de
stocare a datelor (ex. RAM) care pot fi accesate din program n mod
asemntor memoriei fizice.
Numrtor de program
Numrtor binar utilizat pentru adresarea instruciunilor. Conine adresa
instruciunii care urmeaz a fi executat
Octet
1 Byte = 8 bii. Capacitatea de stocare a unui registru
PCL
Program Counter Low. Registrul care conine biii <7:0> ai numrtorului
de program.
PCLATH
Program Counter Latch High. Registru tampon asociat PCH
PCLATU
Program Counter Latch Upper. Registru tampon asociat PCU
PCH
Program Counter High. Registrul care conine biii <15:8> ai
numrtorului de program. Este un registru ascuns i nu poate fi accesat
direct.
PCU
Program Counter Upper. Registrul care conine biii <20:16> ai
numrtorului de program. Este un registru ascuns i nu poate fi accesat
direct.
Registru
Spaiu de stocare . Locaie de memorie. Octet n memoria RAM de date
SFR
Special Function Registers. Regitri cu funcii speciale
STKPTR
Stack Pointer Register. Registrul care conine indicatorul de stiv i doi
bii care indic starea stivei.


ORGANIZAREA MEMORIEI
64
Stiv
Spaiu de memorie n care se salveaz adresele de revenire n cazul
apelurilor de subrutin
TOS
Top of stack. Regitrii de la vrful stivei (TOSU:TOSH:TOSL) care
conin imaginea datelor din stiv spre care indic indicatorul de stiv

S-ar putea să vă placă și