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

📄 param_save_restore.c

📁 一整套电梯控制器源程序
💻 C
字号:
#include "global.h"

void restore_factory_param(void)
{
	if(m_factory_flg==1){           //工厂参数恢复标志
		orgdata_init();
		m_factory_flg=0;
	}
}

void restore_user_param(void)         //恢复用户参数
{ uint data i;  
  uchar xdata *data p;                                                       
  uchar xdata *data s; 
  uint xdata count=sizeof(L_Data)+sizeof(E_InputData)+sizeof(E_OutputData)+sizeof(TIMER);
                                                     
  if(m_restore_flg==1){           //用户参数恢复标志    
                                                   
    if(m_save_over_flg==1){	       //存储过标志
      EA=0;
	   p=0xa000;                   //用户参数Flash首地址
	   s=0x1000;					    //用户参数Ram首地址
      for(i=0;i<count;i++){       //恢复0x4ff大小的数据
      	*(s+i)=*(p+i); 
		} 
      m_restore_flg=0; 
     
      EA=1;  
    }      
  }  
}

void save_user_param(void)        //存用户参数到fs4中
{
   uint xdata i;
   uchar xdata *s=0x1000;
   uint xdata count=sizeof(L_Data)+sizeof(E_InputData)+sizeof(E_OutputData)+sizeof(TIMER);
   if(m_save_flg==1){       		//用户参数存储标志
       mE_InputData.mDianTi[0].TongXun.bZhiShi=1;
	   EA=0;
	   erase(0xa000);
	   for(i=0;i<count;i++)
	   	writef((0xa000+i),*(s+i));     
	   m_save_flg=0;          		//用户参数存储标志
		m_save_over_flg=1;	  		//用户参数存储过标志
		SetUserParamSaveOverFlg();
	   EA=1;      
  }
}

uchar erase(uint addr)	                                                       // 擦除 flash 程序区 
{		uchar xdata *s; uchar b,c,d,e;
		s=(0x555+addr); *s=0xaa;
		s=(0xaaa+addr); *s=0x55;
		s=(0x555+addr); *s=0x80;
		s=(0x555+addr); *s=0xaa;
		s=(0xaaa+addr); *s=0x55;
		s=addr; *s=0x30;
		d=0; e=0;
 		do{b=*s; c=b&0x20; b=b&0x80; 
		   if(b==0x80) d=1;
		   if(c==0x20) e=1;
		  }while((d==0)&&(e==0));
		if(e==1)
			{b=*s; b=b&0x80; 
			 if(b==0x80) d=1;
			 s=0x555+addr; *s=0xf0;
           }
		return(d);
}

uchar writef(uint x,uchar y)	                                              
{  uchar xdata *s; uchar xdata a,b,c,d,e;
   uint addr=0;  
	if((x>=0x4000)&&(x<0x6000)) addr=0x4000;
	if((x>=0x6000)&&(x<0x8000)) addr=0x6000;
	if((x>=0x8000)&&(x<0xa000)) addr=0x8000;
   if((x>=0xa000)&&(x<0xc000)) addr=0xa000;
	if(x>=0xc000) addr=0xc000;
		s=0x555+addr; *s=0xaa;
		s=0xaaa+addr; *s=0x55;
		s=0x555+addr; *s=0xa0;
		s=x; *s=y;
 	  	d=e=0;
        a=y;
     	do
		{  b=*s; c=b&0x20; 
           if(b==a) d=1;
           else if(c==0x20) e=1; 
		  }
       while((d==0)&&(e==0));
       if(e==1)
		{ b=*s; 
		  if(b==a) d=1;
		  s=0x555+addr; 
		  *s=0xf0;
		 } 
       if(d==1) return(d);
		 else
		 {s=0x555+addr; *s=0xaa;
		  s=0xaaa+addr; *s=0x55;
		  s=0x555+addr; *s=0xa0;
		  s=x; *s=y;
 	     d=e=0;
        a=y;
     	do
		{  b=*s; c=b&0x20; 
           if(b==a) d=1;
           else if(c==0x20) e=1; 
		  }
       while((d==0)&&(e==0));
       if(e==1)
		{ b=*s; 
		  if(b==a) d=1;
		  s=0x555+addr; 
		  *s=0xf0;
		 } 
	  }
      return(d);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -