⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 save.c

📁 2051数字频率计源码,运行在AT892051上
💻 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 + -