Tutorials - PIC18 by Data Sheet

 

Inizializzazione della EEPROM


Può essere utile inserire dati nella EEEPROM all' atto della programmazione del chip.

In pratica la zona EEPROM può essere dichiarata e inizializzata nel suo contenuto come si fa normalmente con le altre aree di memoria programma.

(Va compreso che qui stiamo pre caricando il contenuto della EEPROM e non scrivendo come abbiamo visto finora.)

Un esempio con l' uso delle direttive ORG e DB:

  ORG 0xF00000             ; area EEPROM
; carico stringhe di testo

eeptxt1   DB "Messaggio #1"
eeptxt2   DB "Warning !"

; carico tabelle

eeptb1    DB  0x00, 0x05, 0x01, 0x04
eeptb2    DB  d'22', d'55'
          DB  d'11'
  
 

Si avrà la seguente situazione:

eeptxt1 0xF00000-0xF0000b contiene i caratteri ASCII di "Messaggio1"
eeptxt2 0xF0000C-0xF00014 contiene i caratteri ASCII di "Warning !"
0xF00015  contiene 0, che completa il numero dispari di byte , dato che il messaggio             precedente è composto da un numero dispari di caratteri
eeptb1 0xF00016-19  contiene 00h, 05h, 01h, 04h
eeptb2 0xF001A-1C contiene 16h, 37h, 11h
0xF001D contiene 0, che completa il numero dispari di byte , dato la stringa precedente è composta da un numero dispari di caratteri

Ovvero, lo statement DB di MPASM lavora su word (2 bytes) ed eventualmente completa con uno 00h.   

Va notato che non sarà possibile utilizzare le label di indirizo assegnato nella forma semplice: 

; scrivi messaggio da EEPROM
;---------------------------------------------------------
SCRMEEP
   movlw  eeptxt1          
; indirizzo del messaggio
   movwf  EEADR            
; carica indirizzo

in quanto MPASM genererà il messaggio:

Warning[202] C:\PIC\PICbyDS\samples\SCRMEEP.ASM 252 : Argument out of range. Least significant bits used.

dato che eeptxt2 vale 0xF00000, che è un indirizzo a 24 bit, mentre l' oggetto di movlw può essere al massimo di 8  bit.

Per un massimo di 256 bytes di EEPROM, l' indirizzo relativo è costituito solamente dai primi 8 bit meno significativi dell' indirizzo assoluto, il che ci permetterà di scrivere: 

; scrivi messaggio da EEPROM
;---------------------------------------------------------
SCRMEEP
   movlw 
low (eeptxt1)      ; indirizzo relativo del messaggio
   movwf  EEADR        
     
; carica indirizzo

scrittura che viene accettata dall' Assembler e compilata correttamente.

Un' altra via può essere quella di dichiarare un offset in fase di definizione della memoria EEPROM:

  ORG 0xF00000             ; area EEPROM
; carico stringhe di testo

eep_txt1   DB "Messaggio #1"
eep_txt2   DB "Warning !"

; carico tabelle

eep_tb1    DB  0x00, 0x05, 0x01, 0x04
eep
_tb2    DB  d'22', d'55'
       
    DB  d'11'
  

eeptxt1   EQU  low (eep_txt1)
eeptxt2   EQU  low (eep_txt2)
eeptb1    EQU  low (eep_tb1)
eeptb2    EQU  low (eep_tb2)
 

I valori inizializzati nel sorgente saranno scritti, all' atto della programmazione del chip, direttamente in EEPROM senza alcuna particolare altra necessità di azione da parte dell' utente.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 07/12/10.