📄 save.c
字号:
#include "public.h"
#include "p_main.H"
/* LF2407.H 的外部变量 */
/*IO端口C数据和方向控制寄存器*/
extern unsigned int *PCDATDIR;
/*SPI状态寄存器*/
extern unsigned int *SPISTS;
/*SPI串行输入缓冲寄存器*/
extern unsigned int *SPIRXBUF;
/*SPI串行输出缓冲寄存器*/
extern unsigned int *SPITXBUF;
/*ad45db041片选信号使能;*/
void Cs_Enable(void)
{
*PCDATDIR=*PCDATDIR&0X0FFDF; /*CS=0;*/
}
/*AD45DB041片选信号禁止*/
void Cs_Disable(void)
{
*PCDATDIR=*PCDATDIR|0X20;
}
/*读状态寄存器*/
unsigned int Ad45_Status(void)
{
uint temp_s;
Cs_Enable();
Delay(20);
*SPITXBUF=0X0d700; /*COMMAND 0X84*/
while((*SPISTS&0x0040)==0);
temp_s=*SPIRXBUF;
*SPITXBUF=0X0000; /*ad45db041 status*/
while((*SPISTS&0x0040)==0);
temp_s=*SPIRXBUF;
temp_s&=0x80;
return(temp_s);
}
/**********************************************************************/
/* main memory page program through buffer */
/* 82h for buffer1 or 85h for buffer2 */
/* 时序顺序:命令 地址 地址 地址 数据 */
/* 地址:ADDR1(**** PA10 PA9 PA8 PA7) */
/* 地址:ADDR2(PA6 PA5 PA4 PA3 PA2 PA1 PA0 BA8) */
/* 地址:ADDR3(BA7 BA6 BA5 BA4 BA3 BA2 BA1 BA0) */
/**********************************************************************/
void Write_Flash(uint page,uint block,uint *buffer,uint num)
{
uint temp,addr1,addr2,addr3;
uint i;
temp=page<<1;
addr1=temp&0xff00;
addr2=temp&0x00ff;
addr2<<=8;
addr3=block&0x0ff;
addr3<<=8;
Cs_Enable();
Delay(20);
*SPITXBUF=0X8200; /* flash write COMMAND 0X82 */
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr1; /*ADDRESS 1*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr2; /*ADDRESS 2*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr3; /*ADDRESS 3*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
for(i=0;i<num;i++)
{
temp=*(buffer+i);
*SPITXBUF=temp<<8;
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
}
Delay(20);
Cs_Disable();
//while(Ad45_Status()==0);
Delay(60000);
}
/**********************************************************************/
/* main memory page program through buffer */
/* 52h for buffer1 */
/* 时序顺序:命令 地址 地址 地址 数据 */
/* 地址:ADDR1(**** PA10 PA9 PA8 PA7) */
/* 地址:ADDR2(PA6 PA5 PA4 PA3 PA2 PA1 PA0 BA8) */
/* 地址:ADDR3(BA7 BA6 BA5 BA4 BA3 BA2 BA1 BA0) */
/**********************************************************************/
void Read_Flash(uint page,uint block,uint *buffer,uint num)
{
uint temp,addr1,addr2,addr3;
uint i;
temp=page<<1;
addr1=temp&0xff00;
addr2=temp&0x00ff;
addr2<<=8;
addr3=block&0x0ff;
addr3<<=8;
Cs_Enable();
Delay(20);
*SPITXBUF=0X5200; /* flash write COMMAND 0X52 */
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr1; /*ADDRESS 1*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr2; /*ADDRESS 2*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
*SPITXBUF=addr3; /*ADDRESS 3*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
for(i=0;i<4;i++)
{
*SPITXBUF=0X0000; /*DATA*/
while((*SPISTS&0x0040)==0);
temp=*SPIRXBUF;
}
for(i=0;i<num;i++)
{
*SPITXBUF=0x0000;
while((*SPISTS&0x0040)==0);
*(buffer+i)=*SPIRXBUF;
}
Delay(20);
Cs_Disable();
// while(Ad45_Status()==0);
}
/*保存设置参数 flash page0 from byte0 */
void Save_Set(void)
{
uint i,temp;
up3_data.set_shuju[0]=set_mm[0]+set_mm[1]*10+set_mm[2]*100+set_mm[3]*1000;
up3_data.set_shuju[1]=set_id[0]+set_id[1]*10+set_id[2]*100+set_id[3]*1000;
for(i=0;i<19;i++)
{
temp=*(&up3_data.set_shuju[0]+i);
flash_buffer[2*i]=temp&0x0ff;
flash_buffer[2*i+1]=temp&0x0ff00;
flash_buffer[2*i+1]>>=8;
}
Write_Flash(0,0,flash_buffer,38);
for(i=0;i<38;i++)flash_buffer[i]=0;
}
/*读出设置参数 flash page0 from byte0*/
void Read_Set(void)
{
uint i,temp;
Read_Flash(0,0,flash_buffer,38);
for(i=0;i<19;i++)
{
*(&up3_data.set_shuju[0]+i)=flash_buffer[2*i]+flash_buffer[2*i+1]*256;
}
set_mm[0]=up3_data.set_shuju[0]%10;
set_mm[1]=up3_data.set_shuju[0]/10%10;
set_mm[2]=up3_data.set_shuju[0]/100%10;
set_mm[3]=up3_data.set_shuju[0]/1000%10;
set_id[0]=up3_data.set_shuju[1]%10;
set_id[1]=up3_data.set_shuju[1]/10%10;
set_id[2]=up3_data.set_shuju[1]/100%10;
set_id[3]=up3_data.set_shuju[1]/1000%10;
for(i=0;i<255;i++)flash_buffer[i]=0;
}
/********************************************************************************/
/***********************************求统计数据***********************************/
/********************************************************************************/
uint IntToLsb(uint itl_int)
{
return(itl_int%256);
}
uint IntToMsb(uint itl_int)
{
return(itl_int>>8);
}
void Tj_Shuju(void)
{
uint i,j,temp;
uint st_out;
up4_data.tj_shuju[0]=p_year;
up4_data.tj_shuju[1]=p_month;
up4_data.tj_shuju[2]=p_day;
for(i=0;i<3;i++)
{
if(up1_data.avr_u[i]/100>SET_U1)
{
temp=up4_data.tj_shuju[2*i+3]+up4_data.tj_shuju[2*i+4]*256;
temp+=1; /*abc电压超上限时间[0]-[5]*/
if(temp>1440)temp=0;
up4_data.tj_shuju[2*i+3]=IntToLsb(temp);
up4_data.tj_shuju[2*i+4]=IntToMsb(temp);
}
}
for(i=0;i<3;i++)
{
if(up1_data.avr_u[i]/100<SET_U2&&up1_data.avr_u[i]/100>100)
{
temp=up4_data.tj_shuju[2*i+9]+up4_data.tj_shuju[2*i+10]*256;
temp+=1; /*abc电压超下限时间[6]-[11]*/
if(temp>1440)temp=0;
up4_data.tj_shuju[2*i+9]=IntToLsb(temp);
up4_data.tj_shuju[2*i+10]=IntToMsb(temp);
}
}
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[2*i+15]+up4_data.tj_shuju[2*i+16]*256;
if(temp>1440)temp=0;
if(up1_data.avr_u[i]/100<80)temp+=1; /*abc电压缺相时间[12]-[17]*/
up4_data.tj_shuju[2*i+15]=IntToLsb(temp);
up4_data.tj_shuju[2*i+16]=IntToMsb(temp);
}
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[4*i+21]+up4_data.tj_shuju[4*i+22]*256;
if(temp>28000)temp=0;
if(up1_data.avr_u[i]>temp) /*abc电压最大值、发生时间[18]-[29]*/
{
up4_data.tj_shuju[4*i+21]=IntToLsb(up1_data.avr_u[i]);
up4_data.tj_shuju[4*i+22]=IntToMsb(up1_data.avr_u[i]);
up4_data.tj_shuju[4*i+23]=p_hour;
up4_data.tj_shuju[4*i+24]=p_minute;
}
}
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[4*i+33]+up4_data.tj_shuju[4*i+34]*256;
if(temp<10000)temp=24000;
if(up1_data.avr_u[i]<temp&&up1_data.avr_u[i]>10000) /*abc电压最小值、发生时间 [30]-[41] */
{
up4_data.tj_shuju[4*i+33]=IntToLsb(up1_data.avr_u[i]);
up4_data.tj_shuju[4*i+34]=IntToMsb(up1_data.avr_u[i]);
up4_data.tj_shuju[4*i+35]=p_hour;
up4_data.tj_shuju[4*i+36]=p_minute;
}
}
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[4*i+45]+up4_data.tj_shuju[4*i+46]*256;
if(temp>65000)temp=0;
if(up1_data.avr_i[i]>temp) /*abc电流最大值、发生时间[42]-[53]*/
{
up4_data.tj_shuju[4*i+45]=IntToLsb(up1_data.avr_i[i]);
up4_data.tj_shuju[4*i+46]=IntToMsb(up1_data.avr_i[i]);
up4_data.tj_shuju[4*i+47]=p_hour;
up4_data.tj_shuju[4*i+48]=p_minute;
}
}
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[4*i+57]+up4_data.tj_shuju[4*i+58]*256;
if(up1_data.avr_i[i]<temp||temp==0x0ffff||temp==0) /*abc电流最小值、发生时间 [54]-[65] */
{
up4_data.tj_shuju[4*i+57]=IntToLsb(up1_data.avr_i[i]);
up4_data.tj_shuju[4*i+58]=IntToMsb(up1_data.avr_i[i]);
up4_data.tj_shuju[4*i+59]=p_hour;
up4_data.tj_shuju[4*i+60]=p_minute;
}
}
/*************abc十五分钟电流最大值,发生时间*****[69]-[80]************/
minute_15++;
if(minute_15>15)
{
minute_15=0;
for(i=0;i<3;i++)
{
temp=up4_data.tj_shuju[4*i+69]+up4_data.tj_shuju[4*i+70]*256;
if(temp>65000)temp=0;
if(up1_data.avr_i[i]>temp)temp=up1_data.avr_i[i];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -