关于 EPPROM 存储和读取,求指导哪里错了,为什么我只能读到最新存储的数据
/***********************************************-----------------保存测量结果----------------
//程序功能:把测量结果存到EEPROM中
只存储100个数据
************************************************/
void result_save(void)
{
if(save_flag1<100) //第一扇区数据不满100个数据直接存于第一扇区
{
sector_ep(START_ADDR+save_flag1*2,sum,0); //将厚度值保存到数据单元 当y为1时,每次写之前都要擦除扇区
//当y为0时,保存数据不擦除扇区,应用于厚度值的保存
++save_flag1; //第一单元测量值个数的标志
sector_ep(START_ADDR2,save_flag1,1); //保存第一单元测量值个数的标志
}
else if(save_flag1==100) //第一扇区已存满100个数据
{
int i;
for(i=1;i<100;i++)
{
if(i==1)
{
sector_read(START_ADDR+2); //从第一扇区倒数第二个数开始读
sector_ep(START_ADDR1+2,sum,1); //把第一扇区的数存到第二扇区,写入第一个数据之前先擦除
++save_flag2; //第二单元测量值个数的标志
sector_ep(START_ADDR3,save_flag2,1); //保存第二单元测量值个数的标志
}
else
{
sector_read(START_ADDR+2*i); //从第一扇区倒数第二个数开始读
sector_ep(START_ADDR1+save_flag2*2,sum,0); //把第一扇区的数存到第二扇区
++save_flag2; //第二单元测量值个数的标志
sector_ep(START_ADDR3,save_flag2,1); //保存第二单元测量值个数的标志
}
}
}
if(save_flag2==99)
{
int n;
for(n=0;n<=99;n++)
{
if(n==0)
{
sector_read(START_ADDR1); //从第二扇区倒数第一个数开始读
sector_ep(START_ADDR+save_flag1*2,sum,1); //把第二扇区的数存到第一扇区,写入第一个数据之前先擦除扇区
++save_flag1;
sector_ep(START_ADDR2,save_flag1,1); //保存第一单元测量值个数的标志
}
else
{
sector_read(START_ADDR1+2*n); //从第二扇区倒数第以个数开始读
sector_ep(START_ADDR+save_flag1*2,sum,0); //把第二扇区的数存到第一扇区
++save_flag1;
sector_ep(START_ADDR2,save_flag1,1); //保存第一单元测量值个数的标志
}
}
sector_ep(START_ADDR+200,sum,0); //第100个数据存到第一扇区
}
}
//******数据读取,先读最新存储的数据*********************//
void read(void)
{
sector_read(START_ADDR+save_flag1*2-k*2);//读取,从最近存储的开始读
lcdfill(0); //清屏
string_display1(); //显示读取数值
k++; //初始化时已设置k=0,
if(k>save_flag1) //当按键次数超过存储个数时
{
k=0; //当查询次数超过存储数值时,从开始从新查询
}
}