| | #3 (permalink) Top |
| User 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. |
| | |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| PIC 16F628, ricezione seriale.. | faustog_2 | Circuiti Elettronici | 18 | 11 novembre 10 14:53 |
| alimentazione pic 16f628 | gungun | Circuiti Elettronici | 6 | 04 settembre 09 01:05 |
| Modulo USART 16F628 | SoldatoSemplice | Circuiti Elettronici | 1 | 06 marzo 06 19:20 |
| Schemi - Regolatore con Pic 16F628 | BaroneRosso | News | 0 | 17 giugno 05 16:07 |
| regolatore di giri con pic 16f628 | fabari | Circuiti Elettronici | 5 | 23 marzo 05 22:02 |