原创 AVR内部EEPROM读写函数库

2009-6-4 00:31 3998 5 6 分类: MCU/ 嵌入式

EEPROM.H


#pragma used+
///写单字节EEPROM
void EEPROM_write(unsigned int uiAddress, unsigned char ucData);


///读单字节EEPROM
unsigned char EEPROM_read(unsigned int uiAddress);


///写双字节EEPROM
void EEPROM_write2(unsigned int uiAddress, unsigned int ucData);


///读双字节EEPROM
unsigned int EEPROM_read2(unsigned int uiAddress);


///读4字节EEPROM
unsigned long EEPROM_read4(unsigned int uiAddress);


///写4字节EEPROM
void EEPROM_write4(unsigned int uiAddress, unsigned long ucData);


 


#pragma used-


#pragma library eeprom.lib


EEPROM.C


//#include "eeprom.h"


/* EEPROM Control Register */
#define    EERIE        3
#define    EEMWE        2
#define    EEWE         1
#define    EERE         0


#if  funcused EEPROM_write
///写单字节EEPROM
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
//#asm("cli")
////* 等待上一次写操作结束
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress;
EEDR = ucData;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);


//#asm("sei")
}
#endif



#if  funcused EEPROM_read
///读单字节EEPROM
unsigned char EEPROM_read(unsigned int uiAddress)
{
 #asm("cli")
///* 等待上一次写操作结束
while(EECR & (1<<EEWE));
///* 设置地址寄存器*/
EEAR = uiAddress;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
return EEDR;


//#asm("sei")
}
#endif


#if  funcused EEPROM_read2
///读双字节EEPROM
unsigned int EEPROM_read2(unsigned int uiAddress)
{ unsigned int  ucdata;
// #asm("cli")
///* 等待上一次写操作结束



while(EECR & (1<<EEWE));
///* 设置地址寄存器*/
EEAR = uiAddress+1;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata = EEDR;
ucdata =ucdata<<8;


while(EECR & (1<<EEWE));
///* 设置地址寄存器*/
EEAR = uiAddress;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata |= EEDR;


return ucdata;
//#asm("sei")
}
#endif


#if  funcused EEPROM_write2
///写双字节EEPROM
void EEPROM_write2(unsigned int uiAddress, unsigned int ucData)
{


//#asm("cli")
////* 等待上一次写操作结束
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress;


EEDR = ucData & 0x00ff;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);


while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress+1;


EEDR = (ucData & 0xff00)>>8;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);
//#asm("sei")
}
#endif


#if  funcused EEPROM_read4
///读4字节EEPROM
unsigned long EEPROM_read4(unsigned int uiAddress)
{ unsigned long  ucdata;
// #asm("cli")
///* 等待上一次写操作结束



while(EECR & (1<<EEWE));
///* 设置地址寄存器*/
EEAR = uiAddress+3;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata = EEDR;
ucdata =ucdata<<8;


EEAR = uiAddress+2;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata |= EEDR;
ucdata =ucdata<<8;


EEAR = uiAddress+1;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata |= EEDR;
ucdata =ucdata<<8;


while(EECR & (1<<EEWE));
///* 设置地址寄存器*/
EEAR = uiAddress;
///* 设置EERE 以启动读操作
EECR |= (1<<EERE);
///* 自数据寄存器返回数据
ucdata |= EEDR;


return ucdata;
//#asm("sei")
}
#endif


#if  funcused EEPROM_write4
///写4字节EEPROM
void EEPROM_write4(unsigned int uiAddress, unsigned long ucData)
{


//#asm("cli")
////* 等待上一次写操作结束
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress;


EEDR = ucData & 0x000000ff;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);


ucData = ucData>>8;
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress+1;
EEDR = ucData & 0x000000ff;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);


ucData = ucData>>8;
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress+2;
EEDR = ucData & 0x000000ff;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);


ucData = ucData>>8;
while(EECR & (1<<EEWE));
////* 设置地址和数据寄存器
EEAR = uiAddress+3;
EEDR = ucData & 0x000000ff;
////* 置位EEMWE
EECR |= (1<<EEMWE);
////* 置位EEWE 以启动写操作
EECR |= (1<<EEWE);
//#asm("sei")
}
#endif
https://static.assets-stash.eet-china.com/album/old-resources/2009/3/18/6335faa5-ff40-4952-a760-04547102a0f7.rar

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户588864 2011-5-11 13:59

请问ATtiny13是不是也有双字节读取的内部函数,把头文件包含之后,在程序中是不是就不用写eeprom读取的子函数了?谢谢您,我是新手,很多东东不明白
相关推荐阅读
用户389572 2010-12-12 21:02
2010工商管理-资源与营运管理机考答案
2010工商管理-资源与营运管理机考答案...
用户389572 2010-04-27 21:21
千古望江 百世芙蓉
横批:千古望江 百世芙蓉 上联:望江楼,望江流,望江楼上望江流,江楼千古,江流千古。 下联:芙蓉城,芙蓉盛,芙蓉城下扶蓉盛,蓉城百世,蓉盛百世。高人请指正或对下联。...
用户389572 2009-11-27 12:50
川电09秋工商专全部答案
川电09秋工商专全部答案(地域文化外)RAR解压后用金山WPS2009打开。https://static.assets-stash.eet-china.com/album/old-resources/...
用户389572 2009-10-09 01:08
寒热交错型H1N1流感中药方
特别说明:1、本方仅使用于寒热错杂型H1N1流感预防和治疗中药方,其他类型的H1N1不能应用!切记切记,人命关天,不得儿戏!2、鉴于西药的副作用:耐药性、病毒变异、治标不治本等,治病首选中药,西药次之...
用户389572 2009-10-09 00:37
药名四季歌
药名四季歌春春风和煦满常山,芍药天麻及牡丹;远志去寻使君子,当归何必问泽兰。夏端阳半夏五月天,菖蒲制酒乐半年;庭前娇女红娘子,笑与槟榔同采莲。秋秋菊开花遍地黄,一日雨露一回香;牧童去取国公酒,醉到天南...
用户389572 2009-10-09 00:34
中药名歇后语
中药名歇后语我国中草药品种繁多,使用历史悠久,中草药知识在民间传播甚广,不少已为人们用作歇后语,读起来十分形象、生动。如下:  口吃青果——先苦后甜。  花椒大料——两味。  水银泻地——无孔不入。 ...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /1 下一条