📄 save.c
字号:
#include "paramac.h"
#include "24c01.h"
#include "debug.h"
/*
存A
置标志
存B
清标志
#define SAVE_GEAR_POINT 2
#define SAVE_NEXT_POINT 2
#define SAVE_A_POINT 3
#define SAVE_B_POINT 9
#define SAVE_FLAG_POINT 15
*/
bit SaveEEPROM(unsigned char addr,unsigned char val)//面向EEPROM的自更新地址保存
{
unsigned char read_val;
E_write_no_wait((E_read(addr,&read_val),read_val),val); // 第一步:写
wait_5ms(); //等待
if((E_read((E_read(addr,&read_val),read_val),&read_val),read_val)!=val)//读且校验
{
if(save.next_addr==ROM_MAX_ADDR) //超出地址范围
{
work.error=ERROR_ROM_OVER_FLOW; //置错误标志
return FALSE;
}
else
{ BeepN(1,40); //地址加一时叫一声----长
E_write_no_wait(save.next_addr,val); //数据存到新地址
wait_5ms(); //等待
E_write_no_wait(addr,save.next_addr); //更新当前指针
wait_5ms(); //等待
E_write_no_wait(SAVE_NEXT_POINT,++save.next_addr); //更新新地址
wait_5ms(); //等待
return TRUE;
}
}
else return TRUE;
}
bit SaveGearID(void) //保存齿数
{
return SaveEEPROM(SAVE_GEAR_POINT,work.gear_id);
}
bit SaveFlag(unsigned char save_flag)//保存标志
{
return SaveEEPROM(SAVE_FLAG_POINT,save_flag);
}
bit SaveA(void) //保存A
{
while(save.rq_save_timeA<TIME_LEN)
{
SaveEEPROM(save.rq_save_timeA+3,work.time[save.rq_save_timeA]);
save.rq_save_timeA++;
}
return TRUE;
}
bit SaveB(void) //保存B
{
while(save.rq_save_timeB<TIME_LEN)
{
SaveEEPROM(save.rq_save_timeB+3+6,work.time[save.rq_save_timeB]);
save.rq_save_timeB++;
}
return TRUE;
}
// ***** 保存进程 *****
void SaveProcess(void)
{
if(POWER_DOWN_PIN==FALSE)return; //即将掉电,不存储
if(rom_vivid==FALSE)return; //没有有效的rom,不存储
if(rq_save_time==TRUE) //如果要求保存时间
{
// BeepN(1,5); //保存时叫一声-----短
SaveA(); //保存A
SaveFlag(SAVE_B); //保存过程标志,成功否?
SaveB(); //保存B
SaveFlag(SAVE_A); //撤销标志,成功否?
save.rq_save_timeA=TIME_LEN;
save.rq_save_timeB=TIME_LEN;
rq_save_time=FALSE; //撤销请求标志
}
else if(rq_save_gear_id==TRUE) //保存齿数
{
SaveGearID();
rq_save_gear_id=FALSE; //撤销请求标志
}
if(work.error==ERROR_ROM_OVER_FLOW) //若地址溢出
{
rq_save_time=FALSE;
rq_save_gear_id=FALSE;
}
}
EraseRom()
{
unsigned char i,j;
i=0;
if(i<=ROM_MAX_ADDR)
{
do
{ E_write_no_wait(i,0xff);
wait_5ms();
}while((E_read(i,&j),j)!=0xff);
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -