当前位置:文档之家› 单片机EEPROM的使用函数

单片机EEPROM的使用函数

for(i=addr,j=0;i<=addr+n;i++,j++)
EEt(i,w[j]);
EEinit();
}
void EEe(uint m)
{
uint addr=(m-1)*512,i;
for(i=addr;i<addr+512;i++)
EEs(i);
EEinit();
}
#include"EEPROMus.h"
typedef unsigned char uchar;
typedef unsigned int uint;
void EEinit()//末尾清零
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0x80;
IAP_ADDRL=0x00;
********************************************************************/
/**********************************************
m的最小值是1,n的最小值是0
**********************************************/
#define_EEPROMus_h
#include<STC12C5A60S2.H>
#include<intrins.h>
extern void EEw(unsigned int m,unsigned int,unsigned char w);//将第m扇区的第n个存储空间数据改成w
extern void EEr(unsigned int m,unsigned int n,unsigned char *r);//将第m扇区的第n个存储空间数据读到r
_nop_();
//EEinit();
}
void EEr(uint m,uint n,unsigned char *r)//将第m扇区的第n个存储空间数据读到r
{
*r=EEd((m-1)*512+n);
EEinit();
}
void EEra(uint m,uint n,uchar r[])
{
uint addr=(m-1)*512,i,j;
}
uchar EEd(uint addr)//读数据read
{
uint dat;
IAP_CONTR=0x82;
IAP_CMD=0x01;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>IG=0xa5;
_nop_();
dat=IAP_DATA;
B3:/
B2B1B0:设置CPU等待时间
IAP_TRIG:
每次发送命令后要用此寄存器发送5a,然后a5后,命令生效
IAP_CMD:
对IAP进行命令输入:
0x00:无操作
0x01:读
0x02:写
0x03:擦除
IAP_ADDRH和IAP_ADDRL分别存放地址的高字节和低字节
IAP_DATA:数据读写时的存放地(先写地址,再向此写数据)
extern void EEe(unsigned int m);//删除第m扇区内的内容
extern void EEwa(unsigned int m,unsigned int n,unsigned char w[]);//在m扇区,从0x00写到第n个,写数组w里的数
extern void EEra(unsigned int m,unsigned int n,unsigned char r[]);//在m扇区,从0x00读到第n个,读到数组r里
/********************************************************************
这是EEROM.h文件
********************************************************************/
#ifndef _EEPROMus_h//对EEROM进行操作
#endif
/********************************************************************
这是EEPROM.c文件
********************************************************************/
//EEinit();
return dat;
}
void EEt(uint addr,uint dat)//写数据write
{
IAP_CONTR=0x82;
IAP_CMD=0x02;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0x5a;
for(i=addr,j=0;i<=addr+n;i++,j++)
r[j]=EEd(i);
EEinit();
}
void EEw(uint m,uint n,uchar w)
{
EEt((m-1)*512+n,w);
}
void EEwa(uint m,uint n,uchar w[])
{
uint addr=(m-1)*512,i,j;
/********************************************************************
IAP_CONTR:
B7:
0:禁止IAP
1:允许IAP
B6和B5配合让程序从AP区和ISP监控区复位及程序的开始
B4:当IAP_TRIG触发的5a/a5失败,则为1,且由软件清零
IAP_TRIG=0xa5;
_nop_();
//EEinit();
}
void EEs(uint addr)//擦除数据erase
{
IAP_CONTR=0x82;
IAP_CMD=0x03;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
相关主题