#include <avr/io.h>
#include <avr/eeprom.h>
#include <string.h>
/*EEPROM读取函数*/
/*addr:地址;number:长度;p_buff:读出数据存放指针*/
void my_eeprom_read(unsigned char *p_buff, unsigned char addr, unsigned char number)
{
EEARH = 0x00; /* 高地址位为0 */
/* 等待上一次写操作结束 */
while (EECR & (1 << EEWE))
;
while (number --)
{
EEARL = addr++;
EECR |= (1 << EERE); /* 读使能 */
*p_buff++ = EEDR; /* 读数据 */
}
}
/*EEPROM写入函数*/
/*addr:地址;number:长度;p_buff:写入数据存放指针*/
void my_eeprom_write(unsigned char *p_buff, unsigned char addr, unsigned char number)
{
EEARH = 0x00; /* 高地址位为0 */
while(number --)
{
/* 等待上一次写操作结束 */
while(EECR & (1 << EEWE))
;
EEARL = addr++;
EEDR = *p_buff++; /* 写数据 */
EECR |= (1 << EEMWE); /* 主机写使能 */
EECR |= (1 << EEWE); /* 写使能 */
}
}
/*主函数*/
int main(void)
{
unsigned char buf[10];
/* 使用自定义函数 */
memset(buf, 0x00, sizeof(buf));
my_eeprom_write(buf, 0x10,10); /*读出记录*/
memset(buf, 0x00, sizeof(buf));
my_eeprom_read(buf, 0x10, 10); /*写入记录*/
memset(buf, 0xff, sizeof(buf));
my_eeprom_write(buf, 0x10,10); /*读出记录*/
memset(buf, 0x00, sizeof(buf));
my_eeprom_read(buf, 0x10, 10); /*写入记录*/
/* 使用avr-gcc库函数 */
memset(buf, 0x00, sizeof(buf));
eeprom_write_block(buf, (char *)0x10,10); /*读出记录*/
memset(buf, 0x00, sizeof(buf));
eeprom_read_block(buf, (char *)0x10, 10); /*写入记录*/
memset(buf, 0xff, sizeof(buf));
eeprom_write_block(buf, (char *)0x10,10); /*读出记录*/
memset(buf, 0x00, sizeof(buf));
eeprom_read_block(buf, (char *)0x10, 10); /*写入记录*/
return 0;
}