Visualizza messaggio singolo
Vecchio 02 marzo 11, 10:20   #3 (permalink)  Top
MSchiepp
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Il codice sembra 'quasi' giusto e deve funzionare; nel primo esempio di scrittura la posizione dell'etichetta ZZZ è sbagliata e va posizionata una riga sotto, altrimenti continui a settare il bit WR intanto che lo aspetti a '0'.

Dopo aver settato il it WR devi anche mettere a '0' il bit WREN.
Il test su WR può essere fatto solo all'inizio o alla fine del ciclo di scrittura.

Il problema potrebbe essere la rilettura del dato scritto in EEPROM; prova a scrivere un valore poi resetta il micro e prova a leggerlo.

Questo è il codce della libreria del compilatore C che a me funziona da qualche anno...

/************************************************** *********************/
/****** EEPROM memory read/write macros and function definitions *******/
/************************************************** *********************/
/* NOTE WELL:
The macro EEPROM_READ() is NOT safe to use immediately after any
write to EEPROM, as it does NOT wait for WR to clear. This is by
design, to allow minimal code size if a sequence of reads is
desired. To guarantee uncorrupted writes, use the function
eeprom_read() or insert
while(WR)continue;
before calling EEPROM_READ().
*/
#if EEPROM_SIZE > 0
#ifdef __FLASHTYPE
// macro versions of EEPROM write and read
#define EEPROM_WRITE(addr, value) \
do{ \
while(WR)continue;EEADR=(addr);EEDATA=(value); \
EECON1&=0x7F;CARRY=0;if(GIE)CARRY=1;GIE=0; \
WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \
if(CARRY)GIE=1; \
}while(0)
#define EEPROM_READ(addr) ((EEADR=(addr)),(EECON1&=0x7F),(RD=1),EEDATA)
#else // else doesn't write flash
#define EEPROM_WRITE(addr, value) \
do{ \
while(WR)continue;EEADR=(addr);EEDATA=(value); \
CARRY=0;if(GIE)CARRY=1;GIE=0; \
WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \
if(CARRY)GIE=1; \
}while(0)
#define EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)
#endif

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando