📄 eeprom.c
字号:
/*******************************************
文件:EEPROM.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:实现MEGA16的EEPROM的读和写操作
备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#include <stdio.h> //标准输入输出头文件
#include <AVR_PQ1A.h> //包含自定义常量头文件
/*******************************************
函数名称: Eeprom_writeB
功 能: 向EEPROM中的指定地址写入一个字节
参 数: eaddr--EEPROM的指定地址
edata--写入EEPROM的数据
返回值 : 无
/********************************************/
void Eeprom_writeB(uint eaddr,uchar edata)
{
SREG&=~BIT(7); //在写入EEPROM期间应该关闭全局中断,防止中断打断写EEPROM的特殊时序
while(EECR&BIT(EEWE)); //等待上次写操作完毕
EEAR=eaddr; //配置地址寄存器
EEDR=edata; //配置数据寄存器
EECR|=BIT(EEMWE); //主写使能置高
EECR|=BIT(EEWE); //EEMWE置高后,4个时钟周期内将EEWE置高才能将数据写入
SREG|=BIT(7); //写入完毕后,开放全局中断
}
/*******************************************
函数名称: Eeprom_readB
功 能: 从EEPROM中的指定地址读出一个字节
参 数: eaddr--EEPROM的指定地址
返回值 : edata--读出的EEPROM数据
/********************************************/
uchar Eeprom_readB(uint eaddr)
{
uchar edata;
while(EECR&BIT(EEWE)); //等待上次写操作完毕
EEAR=eaddr; //配置地址寄存器
EECR|=BIT(EERE); //读使能置高
edata=EEDR; //读出数据
return edata; //返回读出的数据
}
/*******************************************
函数名称: main
功 能: 实现EEPROM的0-254地址单元写入0-254,然后读出
参 数: 无
返回值 : 无
/********************************************/
void main(void)
{
uchar i;
Board_init( ); //初始化开发板
for(i=0;i<255;i++) //连续写入
{
Eeprom_writeB(i,i);
}
for(i=0;i<255;i++) //连续读出
{
Eeprom_readB(i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -