Post on 19-Oct-2015
SISTEME CU MICROPROCESOARE note de curs
1
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
Teste de autoevaluare
Bibliografie
Dicionar
Teste de evaluare
ORGANIZAREA MEMORIEI
2
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=221Byte), 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.
SISTEME CU MICROPROCESOARE note de curs
3
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
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.
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
ORGANIZAREA MEMORIEI
4
al instruciunii va ocupa o adres par. Urmtorul exemplu prezint modul de reprezentare al
instruciunilor n memoria program.
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.
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 program PC, registrul PCH (en. Program Counter High) conine urmtorii opt bii ai numrtorului program PC, iar registrul PCU (en. Program Counter Upper) conine cei cinci bii superiori ai numrtorului program PC.
SISTEME CU MICROPROCESOARE note de curs
5
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 salturi la diverse instruciuni din memoria program, intervin n incrementarea obinuit
realizat de numrtorul de program prin 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.
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
ORGANIZAREA MEMORIEI
6
Exemplu
Se analizeaz cazul creterii valorii numrtorului de program cu 24
(PC+24) realizndu-se astfel un salt peste urmtoarele 12 instruciuni (24 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 d24 ; 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 aMOVWF 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 24 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). 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 salvarea adresei primei instruciuni a
subrutinei n numrtorul de program (PC), efectund practic un GOTO. Astfel, dac subrutina noastr ar ncepe la adresa 0400h din memoria program, atunci GOTO 0x400 ar fi
SISTEME CU MICROPROCESOARE note de curs
7
echivalent cu apelul subrutinei. Presupunnd c programatorul a plasat eticheta Delay_1ms naintea primei instruciuni a subrutinei, atunci am avea GOTO Delay_1ms.
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. 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.
ORGANIZAREA MEMORIEI
8
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 . 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 Delay_1ms.
Apelul subrutinei CALL Delay_1ms 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;
SISTEME CU MICROPROCESOARE note de curs
9
3. Adresa instruciunii de destinaie, marcat prin eticheta Delay_1ms, 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.
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 SR1, care apeleaz la rndul ei subrutina SR2, 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
poate utiliza, 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
ORGANIZAREA MEMORIEI
10
indicatorul de stiv STKPTR. 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.8. 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 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.
SISTEME CU MICROPROCESOARE note de curs
11
Fig. 3.8. 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 pot fi
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 = 212 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).
ORGANIZAREA MEMORIEI
12
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.9). 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.9. Structura memoriei RAM la microcontrolerul PIC18F4455
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.
SISTEME CU MICROPROCESOARE note de curs
13
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), 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:
ORGANIZAREA MEMORIEI
14
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.10 se prezint modul de formare al adresei complete n cazul
accesrii directe a memoriei prin intermediul bank-urilor i a registrului
BSR.
Fig. 3.10. 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 operaie de scriere sau citire a memoriei poate deveni foarte ineficient din cauza creterii
SISTEME CU MICROPROCESOARE note de curs
15
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.
ORGANIZAREA MEMORIEI
16
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.
SISTEME CU MICROPROCESOARE note de curs
17
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?
Teste de autoevaluare
8. Ce rol ndeplinete registrul BSR?
[1] Sid Katzen The Essential PIC18 Microcontroller, Springer Verlag
London, 2010
[2] Genge Bela, Haller Piroska Proiectarea sistemelor dedicate i
ncorporate cu microcontrolerul PIC, Editura universitii Petru
Maior din Tg. Mure, 2008
[3] Microchip PIC18F2455/2550/4455/4550 Data Sheet, Microchip
Technology Inc. 2006
Bibliografie
[4] www.microchip.com
ORGANIZAREA MEMORIEI
18
Dicionar
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
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 ai numrtorului
SISTEME CU MICROPROCESOARE note de curs
19
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 ai
numrtorului de program. Este un registru ascuns i nu poate fi accesat
direct.
PCU
Program Counter Upper. Registrul care conine biii 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.
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