|
Microcontroler - Memoria de date EEPROM
PIC16F84 are 64 de bytes de locatii de memorie EEPROM
la adresele de la 00h la 63h unde se poate scrie sau de unde se poate citi. Cea
mai importanta caracteristica a acestei memorii este ca nu
pierde continutul in timpul inchideri sursei de alimentare. Aceasta
inseamna practic ca ceea ce a fost scris in ea va ramane chiar
si cand microcontrolerul este inchis. Datele pot fi retinute in
EEPROM fara sursa de alimentare pana la 40 de ani. (dupa
cum declara producatorul lui PICD16F84), si se pot executa 10000
de cicluri de scriere.
In practica, memoria EEPROM este folosita pentru stocarea unor date
importante sau a unor parametri de proces.
Un asemenea parametru este o temperatura data, asignata cand se
seteaza un regulator de temperatura la un proces. Daca nu s-a
retinut, va fi nevoie sa se ajusteze temperatura data dupa
fiecare intrerupere a alimentarii. Pentru ca aceasta este
foarte nepractic (chiar periculos), producatorii de microntrolere au
inceput sa instaleze un tip mai mic de memorie EEPROM.
Memoria EEPROM este plasata intr-un loc special al memoriei si poate
fi accesata prin registri speciali. Acesti registri sunt:
. EEDATA la adresa 08h, care retine datele de citit sau cele de
scris.
. EEADR la adresa 09h, ce contine o adresa a locatiei
EEPROM ce este accesata.
. EECON1 la adresa 88h, ce contine biti de control.
. EECON2 la adresa 89h. Acest registru nu exista fizic si
serveste la protejarea EEPROM-ului de scrieri accidentale.
Registrul EECON1 la adresa 88h este un registru de control cu 5 biti
implementati.
Bitii 5, 6 si 7 nu sunt folositi, si prin citire sunt
totdeauna zero. Interpretarea bitilor registrului EECON1 urmeaza.
Registrul EECON1
bit 0 RD (Read Control bit-bit Control Citire)
Setarea acestui bit initializeaza transferul de date definit in EEADR
la registrul EEDATA. Pentru ca timpul nu este esential in citirea
datelor ca la scriere, datele din EEDATA pot fi deja folosite in
urmatoarea instructiune.
1=initializeaza citirea
0=nu initializeaza citirea
bit 1 WR (Write Control bit-bit Control Scriere)
Setarea acestui bit initializeaza scrierea datelor din registrul
EEDATA la adresa specifcata prin registrul EEADR.
1=initializeaza scrierea
0=nu initializeaza scrierea
bit 2 WREN (EEPROM Write Enable bit-bit Permite Scrierea EEPROM) Permite
scrierea in EEPROM
Daca acest bit nu a fost setat, microcontrolerul nu va permite scrierea in
EEPROM.
1=scriere permisa
0=scriere interzisa
bit 3 WRERR (Write EEPROM Error Flag-Stegulet Eroare Scriere EEPROM
) Eroare in timpul scrierii in EEPROM
Acest bit a fost setat doar in caz ca scrierea in EEPROM a fost
intrerupta de un semnal sau prin terminarea timpului din timer-ul watchdog
(daca este activat).
1=a avut loc eroare
0=nu a avut loc eroare
bit 4 EEIF (EEPROM Write Operation Interrupt Flag bit-bit Stegulet
Intrerupere Operatie Scriere EEPROM) Bit folosit pentru a informa ca
scrierea datelor s-a terminat.
Cand s-a terminat scrierea, acest bit va fi setat automat. Programtorul trebuie
sa stearga bitul EEIF in programul sau pentru a detecta
noua terminare a scrierii.
1=scrierea terminata
0=scrierea inca neterminata, sau inca nu a inceput
Citirea din memoria EEPROM
Setarea bitului RD initializeaza transferul de date de la adresa
gasita in EEADR la registrul EEDATA. Ca si la citirea datelor nu
avem nevoie de atat de mult timp ca la scriere, datele luate din registrul
EEDATA pot deja fi folosite mai departe in urmatoarea
instructiune.
O mostra a partii programului ce citeste datele in EEPROM,
ar putea arata ca mai jos:
Dupa ultima instructiune de program,
continutul de la o adresa EEPROM zero poate fi gasit in
registrul w.
Scrierea in memoria EEPROM
Pentru a scrie datele in locatia EEPROM, programatorul trebuie mai intai
sa scrie adresa in registrul EEADR si datele in registrul EEDATA.
Numai atunci este folositor de a seta bitul WR ce pune totul in miscare.
Bitul WR va fi resetat, si bitul EEIF setat urmand o scriere ce poate fi
folosita in procesarea intreruperilor. Valorile 55h si AAh sunt prima
si a doua cheie care interzic ca scrierea accidentala in EEPROM
sa se intample. Aceste doua valori sunt scrise in EECON2 care
serveste doar pentru acel scop, de a primi aceste doua valori si
de a preveni orice scriere accidentala in memoria EEPROM. Liniile de
program marcate ca 1, 2, 3 si 4 trebuie sa fie executate in acea
ordine in intervale egale de timp. De aceea este foarte important, sa inchideti
intreruperile ce ar putea schimba timpul necesar pentru executare
instructiunilor. Dupa scriere, intreruperile, pot fi permise din nou.
Exemplu unei parti a programului ce scrie datele 0xEE in prima
locatie in memoria EEPROM ar putea arata ca mai jos: