📄 flash.#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 + -