ATmega328p EEprom读写

这篇博客详细介绍了如何在AVR微控制器上进行EEPROM的操作,包括使用EEARH、EEARL和EEDR寄存器进行地址和数据的存储,以及通过EECR寄存器设置操作模式。代码示例展示了读写EEPROM的函数实现,并在一个无限循环中不断读写和更新EEPROM的数据。
摘要由CSDN通过智能技术生成
1、EEARH EEARL位存放地址的寄存器
2、EEDR为数据位
3、EECR
                                                                            EECR
76543210
---------------EEPM1EEPM0EERIEEEMPEEEPEEERE
EEPM1EEPM0编程时间
00
3.4ms
在一个操作中删除和写入
01
1.8ms
仅擦除
10
1.8ms
只写
11-预留给将来使用

EERIE:置1中断

EEMPE:主写使能,置1时,设置EEPE在四个时钟周期内将数据写入所选地址的EEPROM。

EEPE:使能

EERE:读使能

代码:

#ifndef F_CPU
#define  F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// #include <avr/eeprom.h>
#include <GPIO_IO.h>
#include "usart.h" 

void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
{
    cli();        //关总中断
    while(EECR & (1<<EEPE));//等待写入周期的完成,EEWE为EEPROM写使能
    EEAR=uiAddress;         //EEAR为16位EEPROM地址寄存器,Mega16可用12位  atmega328p可用16位
    EEDR=ucData;            //EEDR为8位EEPROM数据寄存器
    EECR|=(1<<EEMPE);       //EEMWE为EEPROM主机写使能
    EECR|=(1<<EEPE);
    sei();         //开总中断
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
    cli();        //关总中断
    while(EECR & (1<<EEPE));
    EEAR=uiAddress;
    EECR|=(1<<EERE);
    return EEDR;
    sei();         //开总中断
}
int  main()
{  
    uchar asd;
    init_USART();  //USART初始化
    sei();         //开总中断
//     cli();        //关总中断
    asd=EEPROM_read(0x0000);
    while(1)
    {
         asd++;
         EEPROM_write(0x0000,asd);         
         put_d(48+EEPROM_read(0x0000));
         put_s("\r\n"); 
         _delay_ms(2000);
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值