📄 data_check.h
字号:
// return 0--ok,,1----/c err 2----/b err 3----/a err 4---all err
unsigned char anquan_jianca()
{unsigned char a,b,c,ab,ac,bc;
unsigned char l,l1,l2;
// a bcd jiao
l2=1;
l1=0;
for(l=0;l<4;l++)
{
if(0==testbcd(anquan_use[l]))
l2=0;
l1=l1+anquan_use[l];
}
l1=l1+0x33;
if(l1!=anquan_use[4])
l2=0;
a=l2;
// b bcd jiao
l2=1;
l1=0;
for(l=5;l<9;l++)
{
if(0==testbcd(anquan_use[l]))
l2=0;
l1=l1+anquan_use[l];
}
l1=l1+0x33;
if(l1!=anquan_use[9])
l2=0;
b=l2;
// c bcd jiao
l2=1;
l1=0;
for(l=10;l<14;l++)
{
if(0==testbcd(~anquan_use[l]))
l2=0;
l1=l1+anquan_use[l];
}
l1=l1+0x33;
if(l1!=anquan_use[14])
l2=0;
c=l2;
// ab
l2=1;
for(l=0;l<4;l++)
if(anquan_use[l]!=anquan_use[l+5])
l2=0;
ab=l2;
// a=c
l2=1;
for(l=0;l<4;l++)
if(anquan_use[l]!=(~anquan_use[l+10]))
l2=0;
ac=l2;
// b=c
l2=1;
for(l=0;l<4;l++)
if(anquan_use[l+5]!=(~anquan_use[l+10]))
l2=0;
bc=l2;
if(6==a+b+c+ab+bc+ac)
return 0; //ok
else
{
if(3==a+b+ab)
return 1; // c err
else
{
if(3==a+c+ac)
return 2; // b err
else
{
if(3==b+c+bc)
return 3; // a err
else
return 4; // all err
}
}
}
}
unsigned char anquan_dianliang_jiuzhen(unsigned char i)
{
unsigned char l0, v0,v1,value,l,v2,m;
for(l0=0;l0<4;l0++)
anquan_use[l0]=RAM[R_KWH_F_BAKA+l0+i*4];
anquan_use[4]=ajiaoyuan_kwh[i];
for(l0=0;l0<5;l0++)
anquan_use[l0+5]=bcopy_kwh[i][l0];
for(l0=0;l0<5;l0++)
anquan_use[l0+10]=ccopy_kwh[i][l0];
v0=anquan_jianca();
value=v0;
if(v0!=0)
{
err_kwh_envent();
RAM[R_TEST]=0x1;
data_addr.addri=FM_KWH_F_BAKA+i*4;
v2=read(FM,4);
for(l0=0;l0<4;l0++)
anquan_use[l0]=wr_data[l0];
data_addr.addri=FM_DIANLIANG_COPYA_SUM+i;
v2=v2+read(FM,1);
anquan_use[4]=wr_data[0];
data_addr.addri=FM_DIANLIANG_COPYB+5*i;
v2=v2+read(FM,5);
for(l0=0;l0<5;l0++)
anquan_use[l0+5]=wr_data[l0];
data_addr.addri=FM_DIANLIANG_COPYC+5*i;
v2=v2+read(FM,5);
for(l0=0;l0<5;l0++)
anquan_use[l0+10]=wr_data[l0];
v1=anquan_jianca();
if(v2!=4)
v1=4;
if(v1==0)
{// hui fu
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=anquan_use[l0];
ajiaoyuan_kwh[i]=anquan_use[4];
}
else
{// fmeeprom err
RAM[R_TEST]=0x2;
if(v0==4)
{// err fm---->
switch(v1)
{
case 1: //a b ok
case 2: //acok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=anquan_use[l0];
ajiaoyuan_kwh[i]=anquan_use[4];
break;
case 3: // bc ok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=anquan_use[l0+5];
ajiaoyuan_kwh[i]=anquan_use[9];
break;
default:
break;
}
}
else
{
switch(v0)
{
case 3: // bc ok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=bcopy_kwh[i][l0];
ajiaoyuan_kwh[i]=bcopy_kwh[i][4];
default:
break;
}
}
}
}
if(value==0)
RAM[R_TEST]=0x99;
else
if(4!=testbcdnum(&RAM[R_KWH_F_BAKA+4*i],4))
// bcd
for(l=0;l<4;l++)
{
m=value_hex_from_bcd(RAM[R_KWH_F_BAKA+4*i+l])%100;
RAM[R_KWH_F_BAKA+4*i+l]=one_byte_hex_to_bcd(m);//((m/10)<<4)+(m%10);
}
return value;
}
// hhhh电量加AAAAAA
void dianliang_add(unsigned char i)
{
anquan_dianliang_jiuzhen(i);
byte_5_bcd_add(R_KWH_F_BAKA+4*i);
dianliang_write(i);
}
//hui fu 恢复,铁电优先AAAA
unsigned char huifu_dianliang_fm(unsigned char i)
{
unsigned char l0, v0,v1,v2;
unsigned char a[6],b[6],c[6];
data_addr.addri=FM_KWH_F_BAKA+i*4;
v2=read(FM,4);
for(l0=0;l0<4;l0++)
anquan_use[l0]=wr_data[l0];
data_addr.addri=FM_DIANLIANG_COPYA_SUM+i;
v2=v2+read(FM,1);
anquan_use[4]=wr_data[0];
data_addr.addri=FM_DIANLIANG_COPYB+5*i;
v2=v2+read(FM,5);
for(l0=0;l0<5;l0++)
anquan_use[l0+5]=wr_data[l0];
data_addr.addri=FM_DIANLIANG_COPYC+5*i;
v2=v2+read(FM,5);
for(l0=0;l0<5;l0++)
anquan_use[l0+10]=wr_data[l0];
v1=anquan_jianca();
if(v2!=4)
v1=4;
//if(v1!=0)
//err_kwh_envent();
if(v1==0)
{
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=anquan_use[l0];
ajiaoyuan_kwh[i]=anquan_use[4];
}
else
{
for(l0=0;l0<5;l0++)
a[l0]=anquan_use[l0];
for(l0=0;l0<5;l0++)
b[l0]=anquan_use[l0+5];
for(l0=0;l0<5;l0++)
c[l0]=anquan_use[l0+10];
for(l0=0;l0<4;l0++)
anquan_use[l0]=RAM[R_KWH_F_BAKA+l0+i*4];
anquan_use[4]=ajiaoyuan_kwh[i];
for(l0=0;l0<5;l0++)
anquan_use[l0+5]=bcopy_kwh[i][l0];
for(l0=0;l0<5;l0++)
anquan_use[l0+10]=ccopy_kwh[i][l0];
v0=anquan_jianca();
if(v0!=0)// ram ok
{
if(v1==4)
{// err fm---->
switch(v0)
{
case 3: // bc ok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=anquan_use[l0+5];
ajiaoyuan_kwh[i]=anquan_use[9];
break;
default:
break;
}
}
else
{
switch(v1)
{
case 1:
// ab ok
case 2: // ac ok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=a[l0];
ajiaoyuan_kwh[i]=a[4];
break;
case 3: // bc ok
for(l0=0;l0<4;l0++)
RAM[R_KWH_F_BAKA+l0+i*4]=b[l0];
ajiaoyuan_kwh[i]=b[4];
break;
default:
break;
}
}
}
}
return v1;
}
//00--100
void huifu_dianliang1()
{unsigned char i,value;
value=0;
for(i=0;i<24;i++)
{
if(0!=huifu_dianliang_fm(i))
{dianliang_write(i);//---------------------->
value=1;
}
}
if(1==value)
err_kwh_envent();
watchdog();
}
void huifu_xuliang()
{unsigned int i,addr;
unsigned char l,value;
addr=R_KW_F;
for(i=0;i<24;i++)
{
data_addr.addri=addr+i*7;
value=read(FM,7);
if(7!=testbcdnum(&wr_data[0],7))
value=0;
if(value==1)
for(l=0;l<7;l++)
RAM[addr+7*i+l]=wr_data[l];
}
watchdog();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -