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

📄 flash.#3

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #3
字号:
#include "LZK.H"


/**********************************************************************************
** 函数名称: Flash_128_Write()
** 功能描述: FLASH128字节快速存储区写操作
** 入口参数: pwrite为FLASH地址指针,采用xdata强制指明指针类型,以保证采用MOVX操作
**	         注意存储空间的指向,因为MOVX在操作Flash空间时,中间不能转而去操作XRAM
**           BufFrom为数据指针,len为数据长度
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
*********************************************************************************/
void Flash_128_Write(uint8 xdata *pwrite,uint8 *BufFrom,uint8 len,bit k)
{	
    unsigned char i;

	WDTCN = 0xde;
	WDTCN = 0xad;  //禁止看门狗

	EA=0;    //禁止中断

	SFRPAGE=0x00;
	FLSCL = 0x81;        //FLWE=1 Flash擦/写使能
	PSCTL = 0x07;        //SFLE=1 Flash指向128字节快速存储区
	                     //PSEE=1 Flash页擦除使能
						 //PSWE=1 MOVX指向Flash闪存
	*pwrite=0;		     //擦除操作

	PSCTL=0x05;
    

    if(k)
	{
	   for(i=0;i<len;i++)	 //copy BufFrom to FLASH with *pwriter
	   {	
	      *pwrite++ = 0x00;
	   }
	}
	else
	{
	   for(i=0;i<len;i++)	 //copy BufFrom to FLASH with *pwriter
	   {	
	      *pwrite++ = *BufFrom++;
	   }
	}

	 PSCTL = 0;			 // disable FLASH writes,MOVX指向外部RAM空间,将闪存擦除禁止,防止意外操作修改内存内容
	 FLSCL = 0x80;		 // disable FLASH writes  
	 EA=1; 
}

/************************************************************************
** 函数名称: Flash_128_Read()
** 功能描述: FLASH128字节快速存储区读操作
** 入口参数: 采用指针方法实现
**	         BufTo为存放读取值的缓冲指针,对FLASH读操作采用MOVC指令,故采用code指针类型
**           len为数据长度
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
************************************************************************/
void Flash_128_Read(uint8 code *pread, uint8 *BufTo, uint8 len)
{ 
    unsigned char i;

    SFRPAGE=0x00;    
    PSCTL |= 0x04;       //SFLE=1, Flash指向128字节快速存储区

	for(i=0;i<len;i++)
	{
		BufTo[i]=*pread;
		pread++;
	}

    PSCTL = 0;			 //返回RAM空间,将闪存擦除禁止,防止意外操作修改内存内容

}
//////////////////////////////////////////////////////////////////////////////
void HisFlash(uint8 k)
{
   uint8 i;
   for(i=83;i>6;i--)
   Flash[i]=Flash[i-7];

   RTC8563_Read();
   Flash[0]=RTCData[6];
   Flash[1]=RTCData[5];
   Flash[2]=RTCData[3];
   Flash[3]=RTCData[2];
   Flash[4]=RTCData[1];
   Flash[5]=RTCData[0];
   Flash[6]=k;
   Flash_128_Write(0,Flash,128,0);
}
///////////////////////////////////////////////////////////////////////////////
/**********************************************************************************
** 函数名称: Flash_Param_Write()
** 功能描述: FLASH用户设置参数保存存储区写操作
** 入口参数: pwrite为FLASH地址指针,采用xdata强制指明指针类型,以保证采用MOVX操作
**	         注意存储空间的指向,因为MOVX在操作Flash空间时,中间不能转而去操作XRAM
**           BufFrom为数据指针,len为数据长度
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
*********************************************************************************/
void Flash_64K_Write(uint16 xdata *pwrite,uint8 *BufFrom,uint8 len,bit k)
{	
    unsigned char i;

	WDTCN = 0xde;
	WDTCN = 0xad;  //禁止看门狗

	EA = 0;    //禁止中断

	SFRPAGE = 0x00;
	FLSCL = 0x81;        //FLWE=1 Flash擦/写使能
	PSCTL = 0x03;        //SFLE=0 Flash指向64KB程序/数据区
	                     //PSEE=1 Flash页擦除使能
						 //PSWE=1 MOVX指向Flash闪存
	*pwrite = 0xFA02;	   //擦除操作

	PSCTL = 0x01;


   if(k)
	{
		for(i=0;i<len;i++)	 //copy BufFrom to FLASH with *pwriter
		{	
		*pwrite++ = 0x00;
		}
	}
	else
	{
		for(i=0;i<len;i++)	 //copy BufFrom to FLASH with *pwriter
		{	
		*pwrite++ = *BufFrom++;
		}
   }

	 PSCTL = 0;			 // disable FLASH writes,MOVX指向外部RAM空间,将闪存擦除禁止,防止意外操作修改内存内容
	 FLSCL = 0x80;		 // disable FLASH writes  
	 EA = 1; 
}

/************************************************************************
** 函数名称: Flash_Param1_Read()
** 功能描述: FLASH用户设置参数保存存储区读操作
** 入口参数: 采用指针方法实现
**	         BufTo为存放读取值的缓冲指针,对FLASH读操作采用MOVC指令,故采用code指针类型
**           len为数据长度
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
************************************************************************/
void Flash_64K_Read(uint16 code *pread, uint8 *BufTo, uint8 len)
{ 
    unsigned char i;

    SFRPAGE=0x00;    
   // PSCTL &= 0xFD;       //SFLE=0, Flash指向64K程序/数据区

	for(i=0; i<len; i++)
	{
	  BufTo[i] = *pread;
	  pread++;
	}

    PSCTL = 0;			 //返回RAM空间,将闪存擦除禁止,防止意外操作修改内存内容

}
/***********************************************************************/
uint16 uchar_to_uint(uint8 x1,uint8 x2)
{
   uint16 y;
   y=x1;
	y=y<<8;
	y=y+x2;
	return(y);
}
/***********************************************************************/
uint8 uint_to_uchar(uint16 y,bit k)
{
   uint8 x;
	if(k)
	x=y>>8;
	else
	x=y;
	return(x);
}
/***********************************************************************/
void Stc_to_CFlash()
{
	CFlash[0]=EM_NomalPhaDiffCMD;
	CFlash[1]=EM_FulVoltPhaDiffCMD;
	CFlash[2]=AsyncTimOutCMD;
	CFlash[3]=EM_TimCMD;
	CFlash[4]=uint_to_uchar(EM_VoltScaleCMD,1);
	CFlash[5]=uint_to_uchar(EM_VoltScaleCMD,0);
	CFlash[6]=uint_to_uchar(EM_CurrScaleCMD,1);
	CFlash[7]=uint_to_uchar(EM_CurrScaleCMD,0);
	CFlash[8]=uint_to_uchar(EM_VoltMaxCMD,1);
	CFlash[9]=uint_to_uchar(EM_VoltMaxCMD,0);
	CFlash[10]=uint_to_uchar(EM_VoltMinCMD,1);
	CFlash[11]=uint_to_uchar(EM_VoltMinCMD,0);
	CFlash[12]=uint_to_uchar(EM_CurrMaxCMD,1);
	CFlash[13]=uint_to_uchar(EM_CurrMaxCMD,0);
	CFlash[14]=uint_to_uchar(EM_CurrMinCMD,1);
	CFlash[15]=uint_to_uchar(EM_CurrMinCMD,0);
	CFlash[16]=EM_AnglMaxCMD;
	CFlash[17]=EM_AnglMinCMD;
	CFlash[18]=uint_to_uchar(EM_PwrFactMaxCMD,1);
	CFlash[19]=uint_to_uchar(EM_PwrFactMaxCMD,0);
	CFlash[20]=uint_to_uchar(EM_PwrFactMinCMD,1);
	CFlash[21]=uint_to_uchar(EM_PwrFactMinCMD,0);
	CFlash[22]=uint_to_uchar(EM_NulPwrMaxCMD,1);
	CFlash[23]=uint_to_uchar(EM_NulPwrMaxCMD,0);
	CFlash[24]=uint_to_uchar(EM_NulPwrMinCMD,1);
	CFlash[25]=uint_to_uchar(EM_NulPwrMinCMD,0);
	CFlash[26]=uint_to_uchar(TransFormSubVoltCMD,1);
	CFlash[27]=uint_to_uchar(TransFormSubVoltCMD,0);
	CFlash[28]=EM_TimCntEnCMD;
	CFlash[29]=EM_ENH_ModeCMD;
	CFlash[30]=uint_to_uchar(EM_ENH_VoltCMD,1);
	CFlash[31]=uint_to_uchar(EM_ENH_VoltCMD,0);
	CFlash[32]=uint_to_uchar(EM_ENH_CurrCMD,1);
	CFlash[33]=uint_to_uchar(EM_ENH_CurrCMD,0);
	CFlash[34]=EM_ENH_AnglCMD;
	CFlash[35]=EM_ENH_TimeCMD;
	CFlash[36]=S1_Key1;
	CFlash[37]=S1_Key2;
	CFlash[38]=S1_Key3;
	CFlash[39]=S1_Key4;
	CFlash[40]=S1_Key5;
	CFlash[41]=S1_Key6;
	CFlash[42]=EM_ModeCMD;
	CFlash[43]=uint_to_uchar(EM_VoltCMD,1);
	CFlash[44]=uint_to_uchar(EM_VoltCMD,0);
	CFlash[45]=uint_to_uchar(EM_CurrCMD,1);
	CFlash[46]=uint_to_uchar(EM_CurrCMD,0);
	CFlash[47]=EM_AnglCMD;
	CFlash[48]=uint_to_uchar(EM_PwrFactCMD,1);
	CFlash[49]=uint_to_uchar(EM_PwrFactCMD,0);
	CFlash[50]=uint_to_uchar(EM_NulPwrCMD,1);
	CFlash[51]=uint_to_uchar(EM_NulPwrCMD,0);
   ////////////////////////////////////////
	CFlash[52]=BakPrttTimCMD;
	CFlash[53]=AsyncDetEnDelayCMD;
	CFlash[54]=RemoteTestCMD;
	CFlash[55]=ExValueIncPercentCMD;
	CFlash[56]=KQPulseLastCMD;
	CFlash[57]=RevsTrigOutAngle;
	CFlash[58]=PID_VoltKP;
	CFlash[59]=PID_VoltKI;
	CFlash[60]=PID_CurrKP;
	CFlash[61]=PID_CurrKI;
	CFlash[62]=PID_PwrFactKP;
	CFlash[63]=PID_PwrFactKI;
	CFlash[64]=EMDelayTimeCMD;
	CFlash[65]=RFJTestCMD;
	CFlash[66]=FastRemMagneticDelayCMD;
	CFlash[67]=SlideTestDelayTimCMD;
	CFlash[68]=OutOfCtrAlarmDelayCMD;
	CFlash[69]=ClosePulseDelayCMD;
	CFlash[70]=OutOfCtrOnTimCMD;
	CFlash[71]=LowLimitTrigOutAngle;
	CFlash[72]=AttenuationPercentCMD;
	CFlash[73]=IFCO_HighLevlTimCMD;
	CFlash[74]=IFCO_LowLevlTimCMD;
	CFlash[75]=UF_LowLevlTimCMD;
	CFlash[76]=EM_PwrFreqCMD;
	CFlash[77]=EM_RegBrdgMode;
	CFlash[78]=RegulateAftAsyncFuncEN;
	CFlash[79]=LCJ_OnTimCMD;
	CFlash[80]=AsyncAftSyncTimCMD;
	CFlash[81]=S2_Key1;
	CFlash[82]=S2_Key2;
	CFlash[83]=S2_Key3;
	CFlash[84]=S2_Key4;
	CFlash[85]=S2_Key5;
	CFlash[86]=S2_Key6;
}
/***********************************************************************/
void CFlash_to_Stc()
{
	EM_NomalPhaDiffCMD =CFlash[0];
	EM_FulVoltPhaDiffCMD =CFlash[1];
	AsyncTimOutCMD =CFlash[2];
	EM_TimCMD =CFlash[3];
	EM_VoltScaleCMD = uchar_to_uint(CFlash[4],CFlash[5]);
	EM_CurrScaleCMD = uchar_to_uint(CFlash[6],CFlash[7]);

	EM_VoltMaxCMD = uchar_to_uint(CFlash[8],CFlash[9]);
	EM_VoltMinCMD = uchar_to_uint(CFlash[10],CFlash[11]);
	EM_CurrMaxCMD = uchar_to_uint(CFlash[12],CFlash[13]);
	EM_CurrMinCMD = uchar_to_uint(CFlash[14],CFlash[15]);
	EM_AnglMaxCMD = CFlash[16];
	EM_AnglMinCMD = CFlash[17];

	EM_PwrFactMaxCMD = uchar_to_uint(CFlash[18],CFlash[19]);
	EM_PwrFactMinCMD = uchar_to_uint(CFlash[20],CFlash[21]);
	EM_NulPwrMaxCMD = uchar_to_uint(CFlash[22],CFlash[23]);
	EM_NulPwrMinCMD = uchar_to_uint(CFlash[24],CFlash[25]);
	TransFormSubVoltCMD = uchar_to_uint(CFlash[26],CFlash[27]);
	EM_TimCntEnCMD = CFlash[28];

	EM_ENH_ModeCMD = CFlash[29];
	EM_ENH_VoltCMD = uchar_to_uint(CFlash[30],CFlash[31]);
	EM_ENH_CurrCMD = uchar_to_uint(CFlash[32],CFlash[33]);
	EM_ENH_AnglCMD = CFlash[34];
	EM_ENH_TimeCMD = CFlash[35];
	S1_Key1 = CFlash[36];
	S1_Key2 = CFlash[37];
	S1_Key3 = CFlash[38];
	S1_Key4 = CFlash[39];
	S1_Key5 = CFlash[40];
	S1_Key6 = CFlash[41];

	EM_ModeCMD = CFlash[42];
	EM_VoltCMD = uchar_to_uint(CFlash[43],CFlash[44]);
	EM_CurrCMD = uchar_to_uint(CFlash[45],CFlash[46]);
	EM_AnglCMD = CFlash[47];
	EM_PwrFactCMD = uchar_to_uint(CFlash[48],CFlash[49]);
	EM_NulPwrCMD = uchar_to_uint(CFlash[50],CFlash[51]);

	BakPrttTimCMD = CFlash[52];
	AsyncDetEnDelayCMD = CFlash[53];
	RemoteTestCMD = CFlash[54];
	ExValueIncPercentCMD = CFlash[55];
	KQPulseLastCMD = CFlash[56];
	RevsTrigOutAngle = CFlash[57];

	PID_VoltKP = CFlash[58];
	PID_VoltKI = CFlash[59];
	PID_CurrKP = CFlash[60];
	PID_CurrKI = CFlash[61];
	PID_PwrFactKP = CFlash[62];
	PID_PwrFactKI = CFlash[63];

	EMDelayTimeCMD = CFlash[64];
	RFJTestCMD = CFlash[65];
	FastRemMagneticDelayCMD = CFlash[66];
	SlideTestDelayTimCMD = CFlash[67];
	OutOfCtrAlarmDelayCMD = CFlash[68];
	ClosePulseDelayCMD = CFlash[69];

	OutOfCtrOnTimCMD = CFlash[70];
	LowLimitTrigOutAngle = CFlash[71];
	AttenuationPercentCMD = CFlash[72];
	IFCO_HighLevlTimCMD = CFlash[73];
	IFCO_LowLevlTimCMD = CFlash[74];
	UF_LowLevlTimCMD = CFlash[75];

	EM_PwrFreqCMD = CFlash[76];
	EM_RegBrdgMode = CFlash[77];
	RegulateAftAsyncFuncEN = CFlash[78];
	LCJ_OnTimCMD = CFlash[79];
	AsyncAftSyncTimCMD = CFlash[80];
	S2_Key1 = CFlash[81];
	S2_Key2 = CFlash[82];
	S2_Key3 = CFlash[83];
	S2_Key4 = CFlash[84];
	S2_Key5 = CFlash[85];
	S2_Key6 = CFlash[86];
}
/***********************************************************************/
void Dyn_to_Flash()
{
	Flash[84]=EM_arkadress;
	Flash[85]=EM_conadress;
	Flash[86]=EM_baud232;
	Flash[87]=EM_baud485;
	Flash[88]=EM_BackUp;
	Flash[89]=EN_RecMode;
	Flash[90]=EN_ManualRec;
	Flash[91]=EN_StartRec;
	Flash[92]=EN_ErrorRec;
	Flash[93]=StartTemper;
	Flash[94]=CloseTemper;
	Flash[95]=AlarmTemper;
}
/***********************************************************************/
void Flash_to_Dyn()
{
   EM_arkadress=Flash[84];
	EM_conadress=Flash[85];
	EM_baud232=Flash[86];
	EM_baud485=Flash[87];
	EM_BackUp=Flash[88];
	EN_RecMode=Flash[89];
	EN_ManualRec=Flash[90];
	EN_StartRec=Flash[91];
	EN_ErrorRec=Flash[92];
	StartTemper=Flash[93];
	CloseTemper=Flash[94];
	AlarmTemper=Flash[95];
}
/***********************************************************************/

⌨️ 快捷键说明

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