Copertina FE 228

Transcript

Copertina FE 228
GALIZIA-impaginato
1-06-2004
9:51
Pagina 20
TUTORIAL
®
PIC MICROCONTROLLER
BY
EXAMPLE
ottava parte
di Tiziano Galizia ([email protected]) e Sergio Tanzilli ([email protected])
Scopriamo questo mese come si usa la EEPROM interna del PIC16F84 per memorizzare
permanentemente i nostri dati, mantenendoli anche in assenza di alimentazione.
Finora abbiamo trascurato una delle
caratteristiche più interessanti del
PIC16F84, la EEPROM DATI interna.
Colmiamo ora questa lacuna andando
ad analizzare il funzionamento di questo utilissimo componente dell'architettura interna del PIC16F84. La
EEPROM DATI è una particolare area
di memoria da 64 byte nella quale
possiamo scrivere i valori numerici che
desideriamo non vengano persi in
mancanza di tensione di alimentazione. Si intuisce immediatamente quanto possa essere utile questo tipo di
memoria. Pensate, ad esempio, ad un
sistema anti intrusione in cui il PIC
deve mantenere il codice di accesso
anche quando il sistema è spento in
modo che non sia necessario riprogrammarlo ogni volta che si riaccende, oppure ad una chiave elettronica
realizzata con un PIC che riceve alimentazione solo quando l'utente inserisce la chiave nel lettore. In tutti questi casi la EEPROM DATI integrata nel
PIC16F84 garantisce un ottimo livello
di sicurezza nella conservazione dei
dati, unito ad una relativa facilità
d'uso.
La memoria EEPROM è scrivibile e leggibile in condizioni di normale alimentazione e senza dover ricorrere ad
alcun programmatore esterno. Le
modalità di accesso sono notevolmente diverse dalla memoria RAM dei
REGISTER FILE e devono seguire una
serie di procedure particolari atte ad
20 TUTORIAL
evitare eventuali perdite di dati in condizioni di funzionamento anomale.
movlw 0
movwf EEADR
REGISTRI SPECIALI PER
L'ACCESSO ALLA EEPROM DATI
Per accedere alla EEPROM DATI vengono utilizzati i seguenti registri
speciali:
Nel registro EEDATA dobbiamo ora
scrivere il valore che intendiamo inviare alla locazione EEPROM indirizzata
con il registro EEADR:
movlw 10
movwf EEDATA
EEADR è il registro utilizzato per
indirizzare una delle 64 locazioni di
memoria EEPROM in cui si desidera
effettuare una lettura o scrittura di
un dato.
EECON1 ed EECON2 sono due registri di controllo utilizzati nelle operazioni di lettura e scrittura come
descritto di seguito.
A questo punto dobbiamo settare il
flag WREN (WRite ENable), contenuto nel registro di controllo
EECON1, per poter abilitare l'accesso alle successive operazioni di scrittura. Dato che il registro EECON1 è
situato nel banco registri 1, dovremo indirizzare questo banco settando il bit RP0 del registri STATUS
prima di accedervi:
;Indirizza il banco 1
bsf STATUS,RP0
;Abilita la scrittura
bsf EECON1,WREN
SCRITTUTA DI UN DATO SU
EEPROM
Vediamo ora come si può scrivere
un dato su una locazione EEPROM.
Ipotizziamo di voler scrivere il valore
decimale 10 nella locazione 0 della
EEPROM dati. La prima operazione
da compiere è scrivere nel registro
EEADR l'indirizzo della locazione di
memoria che intendiamo scrivere.
Possiamo usare per far questo le
seguenti istruzioni:
Ora dobbiamo eseguire una sequenza
di scritture sul registro EECON2 per
comunicare al PIC che abbiamo intenzione di scrivere sulla EEPROM.
Questa sequenza rappresenta una
specie di codice di accesso alla
EEPROM e serve ad evitare scritture
accidentali in caso di funzionamento
anomalo del PIC dovuto a sbalzi di
tensione o errori di programmazione.
In pratica dobbiamo scrivere i due
valori esadecimali 55h e AAh in
EEDATA è il registro che viene usato
per inviare un byte alla EEPROM in
scrittura oppure per ricevere un byte
dalla EEPROM in lettura.
GALIZIA-impaginato
1-06-2004
9:51
Pagina 21
TUTORIAL
sequenza nel registro EECON2:
movlw 55h
movwf EECON2
movlw AAh
movwf EECON2
Arrivati a questo punto abbiamo effettuato tutte le operazioni preliminari
per scrivere sulla EEPROM e non ci
rimane altro da fare che avviare la
scrittura settando il flag WR (WRite)
del regsistro EECON1 con l'istruzione:
bsf EECON1,WR
L'hardware del PIC impiega un certo
tempo, a partire da questo momento,
per programmare la cella EEPROM
con il valore da noi inviato. Quando
l'operazione ha avuto termine, l'hardware del PIC ci avverte azzerando
nuovamente il flag WR del registri
EECON1.
Se nel nostro programma decidiamo
di aspettare che la cella sia stata programmata prima di proseguire dovremo inserire il seguente loop di attesa:
WriteDoneLoop
btfsc EECON1,WR
;Finito di scrivere ?
goto WriteDoneLoop
;No, aspetta
;Si, continua con le
; istruzioni successive
Per evitare questa attesa è possibile
richiedere all'hardware del PIC di
generare un interrupt di avvenuta
programmazione.
Per scrivere un nuovo valore nella
stessa cella EEPROM non è necessario effettuare operazioni di cancellazione ma più semplicemente ripetere le stesse operazioni di scrittura.
LETTURA DI UN DATO DA
EEPROM
Vediamo ora come si rilegge quello
che abbiamo appena scritto nella
locazione di memoria EEPROM.
Assicuriamoci anzitutto di essere tornati sul banco registri 0 azzerando
nuovamente il flag RP0 del registro
STATUS:
bcf STATUS,RP0
;Indirizza il banco 0
Quindi scriviamo in EEADR l'indirizzo di memoria che vogliamo leggere:
movlw 0
movwf EEADR
Comunichiamo all'hardware del PIC
che intendiamo leggere la locazione
di memoria indirizzata da EEADR,
settando il flag RD (ReaD) del registro di controllo EECON1.
Ricordiamoci, però, di passare prima
al banco registri 1 dove si trova
appunto il registro EECON1:
bsf STATUS,RP0
;Indirizza il banco 1
bsf EECON1,RD
A questo punto possiamo immediatamente leggere dal registro EEDATA il valore contenuto nella locazione di memoria richiesta.
Anche in questo caso dobbiamo
però prima di tutto ricordarci di passare al banco registri giusto:
bcf STATUS,RP0
;Indirizza il banco 0
movf EEDATA,W
Nel registro accumulatore W, ora c'è
il dato letto dalla EEPROM.
CONCLUSIONI
Con questa ottava parte si conclude
il nostro tutorial.
Ringraziamo tutti i lettori che ci
hanno inviato messaggi di apprezzamento per il lavoro svolto e speriamo di aver trasmesso a tutti voi la
nostra passione per questi microprocessori.
Vi preannunciamo che abbiamo in
cantiere un libro che tratterà lo stesso argomento in maniera molto più
approfondita, appena disponibile lo
presenteremo in queste pagine.
PIANETAELETTRONICA
)
NUTCHIP
Il nuovo modo di programmare
perchè non richiede conoscenza di linguaggi di programmazione
)
)
)
Rivoluz
ionario
perchè non richiede un costoso programmatore
perchè lo programmi tutte le volte che vuoi
)
è un’ottima esperienza per chi si avvicina al mondo della programmazione
SOFTWARE
NUTCHIP
GRATIS PER HOBBISTI E STUDENTI
LO TROVI DA:
PER ORDINI E INFORMAZIONI
PIANETAELETTRONICA
prodotti innovativi per l’elettronica fai da te
software di sviluppo · cd-rom divulgativi · strumenti innovativi
TUTORIAL
21