Read and write PIC EEPROM

More a little post-it than a post, I wanted to put somewhere the commands :

Using the eeprom is as simple as these two commands :

[code lang=”c”]EEPROM_READ(addr)
EEPROM_WRITE(addr,value)
[/code]

A little example (reading from the USART a value and putting it in the EEPROM address 0x00)

[code]
while (!DataRdyUSART());
char data = ReadUSART();
EEPROM_WRITE(0x00,data);
[/code]

Note that theses header are defined in the standard xc8 header which will include (or , …) or High Tech C headers if you come from the past :

[code lang=”c”]
// MACROS for EEPROM Access
/* macro versions of EEPROM read and write */

/* NOTE WELL:
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 insert
while(WR)continue;
before calling EEPROM_READ().
*/

#if _EEPROMSIZE > 0 && defined(_PLIB)
#define EEPROM_READ(addr) Read_b_eep(addr)
#define eeprom_read(addr) Read_b_eep(addr)
#else
#define EEPROM_READ(addr) 0 // Added only for code portability
#define eeprom_read(addr) 0
#endif

#if _EEPROMSIZE > 0 && defined(_PLIB)
#define EEPROM_WRITE(addr, value) (Busy_eep(), Write_b_eep(addr,value))
#define eeprom_write(addr, value) (Busy_eep(), Write_b_eep(addr,value))
#else
#define EEPROM_WRITE(addr, value) // Added only for code portability
#define eeprom_write(addr, value)
#endif
[/code]