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

来源:互联网 发布:知君本无邪txt 编辑:程序博客网 时间:2024/04/30 02:47

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 0
原创粉丝点击