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