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

📄 data_check.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 H
📖 第 1 页 / 共 2 页
字号:


// 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 + -