Mega48/88/128中内部EEPROM的读写

1、AVRGCC里面自带有EEPROM读写函数。

    这需要包含头文件#include <avr/eeprom.h>,里面的一些函数如下:  

    #define eeprom_is_ready() bit_is_clear(EECR, EEWE)//检测EEPROM是否准备好。OK返回1(返回EEWE位)

 

    #define eeprom_busy_wait() do {} while (!eeprom_is_ready())//等待EEPROM操作完成

 

    extern uint8_t eeprom_read_byte (const uint8_t *addr);//读取指定地址的一个字节8bit的EEPROM数据

 

    extern uint16_t eeprom_read_word (const uint16_t *addr);//读取指定地址的一个字16bit的EEPROM数据

 

    extern void eeprom_read_block (void *buf, const void *addr, size_t n);//读取由指定地址开始的指定长度的EEPROM数据

 

    extern void eeprom_write_byte (uint8_t *addr, uint8_t val);//向指定地址写入一个字节8bit的EEPROM数据

 

    extern void eeprom_write_word (uint16_t *addr, uint16_t val);//向指定地址写入一个字16bit的EEPROM数据

2、也可以自定义函数读写

1)向EEPROM写入数据

void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
{
    //等待写入周期的完成
    while(EECR & (1<<EEWE));//EEWE为EEPROM写使能
    EEAR=uiAddress;//EEAR为16位EEPROM地址寄存器,可用12位
    EEDR=ucData;//EEDR为8位EEPROM数据寄存器
    EECR|=(1<<EEMWE);//EEMWE为EEPROM主机写使能
    EECR|=(1<<EEWE);
}

注意:按书本上向EEPROM写数据是这样,但在AVR STUDIO中调试却不能向EEPROM写入数据,原因不详。

2)从EEPROM读出数据

unsigned char EEPROM_read(unsigned int uiAddress)
{
    while(EECR & (1<<EEWE));
    EEAR=uiAddress;
    EECR|=(1<<EERE);
    return EEDR;
}


附:

其实直接打开 .h (header) 的文本就可以看到有那些涵数了

uint8_t    eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__   
uint16_t    eeprom_read_word (const uint16_t *__p) __ATTR_PURE__   
uint32_t    eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__   
float    eeprom_read_float (const float *__p) __ATTR_PURE__   
void    eeprom_read_block (void *__dst, const void *__src, size_t __n)   
void    eeprom_write_byte (uint8_t *__p, uint8_t __value)   
void    eeprom_write_word (uint16_t *__p, uint16_t __value)   
void    eeprom_write_dword (uint32_t *__p, uint32_t __value)   
void    eeprom_write_float (float *__p, float __value)   
void    eeprom_write_block (const void *__src, void *__dst, size_t __n)   
void    eeprom_update_byte (uint8_t *__p, uint8_t __value)   
void    eeprom_update_word (uint16_t *__p, uint16_t __value)   
void    eeprom_update_dword (uint32_t *__p, uint32_t __value)   
void    eeprom_update_float (float *__p, float __value)   
void    eeprom_update_block (const void *__src, void *__dst, size_t __n)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值