Cuprins
- 1. Organizarea memoriei
- 1.1 Memoria program
- 1.2 Memoria de date
- 1.3 Registri SFR
- 1.4 Bancuri de memorie
- 1.5 Stiva
- 1.6 Contorul de program
- 1.7 Moduri de adresare
- 1.7.1 Adresare directa
- 1.7.2 Adresare indirecta
- 2. Memoria de date EEPROM
- 2.1 Registrul EECON1
- 2.2 Citirea din memoria EEPROM
- 2.3 Scrierea in memoria EEPROM
Extras din proiect
Organizarea memoriei
PIC16F84 are doua blocuri separate de memorie, unul pentru date si celalalt pentru programe. Memoria EEPROM si registrii GPR în memoria RAM constituie un bloc, si memoria FLASH constituie un bloc de programe.
Memoria program
Memoria program a fost realizata în tehnologia FLASH ceea ce face posibil de a programa un microcontroler de mai multe ori înainte de a fi instalat într-un montaj, si chiar dupa instalarea sa daca se întâmpla unele schimbari în program sau parametri de proces. Marimea memoriei program este de 1024 locatii cu latime de 14 biti unde locatiile zero si patru sunt rezervate pentru reset si pentru vectorul întrerupere.
Memoria de date
Memoria de date consta din memoriile EEPROM si RAM. Memoria EEPROM consta din 64 de locatii de opt biti a caror continut nu este pierdut în timpul opririi sursei de alimentare. EEPROM-ul nu este direct adresabil, dar este accesat indirect prin registrii EEADR si EEDATA. Pentru ca memoria EEPROM este folosita curent la memorarea unor parametri importanti (de exemplu, o temperatura data în regulatoarele de temperatura), exista o procedura stricta de scriere în EEPROM ce trebuie urmata pentru a preveni scrierea accidentala. Memoria RAM pentru date ocupa un spatiu într-o harta a memoriei de la locatia 0x0C la 0x4F ceea ce înseamna 68 de locatii. Locatiile memoriei RAM sunt de asemenea denumite registri GPR care este o abreviere General Purpose Registers-Registri cu Scop General. Registrii GPR pot fi accesati indiferent de ce banc este selectat la un moment.
Registri SFR
Registri ce ocupa primele 12 locatii în bancurile 0 si 1 si sunt registri ai functiei specializate asignata cu unele blocuri ale microcontrolerului. Acestia sunt numiti Special Function Registers-Registri ai Functiei Speciale.
Bancuri de Memorie
În afara de aceasta diviziune în 'lungime' a registrilor SFR si GPR, harta memoriei este de asemenea împartita în 'latime' în doua zone numite 'bancuri'. Selectarea unuia din bancuri se face de bitii RPO si RP1 în registrul STATUS-stare.
Exemplu:
bcf STATUS, RP0
Instructiunea BCF sterge bitul RPO (RP0=0) în registrul STATUS si astfel seteaza bancul 0.
bsf STATUS, RP0
Instructiunea BSF seteaza bitul RPO (RP0=1) în registrul STATUS si astfel seteaza bancul 1.
Uzual, grupurile de instructiuni care sunt adesea în uz, sunt conectate într-o singura unitate ce poate fi usor apelata într-un program, si a carei nume are o semnificatie clara, asa-numitul Macros-macrocomanda. Cu ajutorul lor, selectia dintre doua bancuri devine mai clara si programul mult mai elegibil.
BANK0 macro
Bcf STATUS, RP0 ;Select memory bank 0
Endm
BANK1 macro
Bsf STATUS, RP0 ;Select memory bank 1
Endm
Contorul de Program
Contorul de program (PC) este un registru de 13 biti ce contine adresa instructiunii ce se executa. Prin incrementarea sau schimbarea sa (ex. în caz de salturi) microcontrolerul executa instructiunile de program pas-cu-pas.
Stiva
PIC16F84 are o stiva de 13 biti cu 8 nivele, sau cu alte cuvinte, un grup de 8 locatii de memorie de 13 biti latime cu functii speciale. Rolul sau de baza este de a pastra valoarea contorului de program dupa un salt din programul principal la o adresa a unui subprogram. Pentru ca un program sa stie cum sa se întoarca la punctul de unde a pornit, trebuie sa înapoieze valoarea contorului programului din stiva. Când se muta dintr-un program într-un subprogram, contorul programului este împins în stiva (un exemplu de acesta este instructiunea CALL). Când se executa instructiuni ca RETURN, RETLW sau RETFIE ce au fost executate la sfârsitul unui subprogram, contorul programului a fost luat dintr-o stiva, asa ca programul sa poata continua de unde a fost oprit înainte de a fi întrerupt. Aceste operatii de plasare într-o si luare dintr-o stiva de contor de program sunt numite PUSH si POP, si sunt numite conform cu instructiunile similare ale unor microcontrolere mai mari.
Preview document
Conținut arhivă zip
- Memoria Microcontrolerului PIC 16F84.doc