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

📄 global_function.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 H
📖 第 1 页 / 共 5 页
字号:
								                }
								break;
						}
		 }
}
// an quan dian liang xie电量(保护)写AAA

void dianliang_write(unsigned char i)
{
unsigned char l,l1;
// ram a jiao
l1=0;
for(l=0;l<4;l++)
	l1=l1+RAM[R_KWH_F_BAKA+4*i+l];
ajiaoyuan_kwh[i]=l1+0x33;
// bcpoy
for(l=0;l<4;l++)
	bcopy_kwh[i][l]=RAM[R_KWH_F_BAKA+4*i+l];
bcopy_kwh[i][4]=ajiaoyuan_kwh[i];
// ccopy
for(l=0;l<4;l++)
	ccopy_kwh[i][l]=(~bcopy_kwh[i][l]);
l1=0;
for(l=0;l<4;l++)
	l1=l1+ccopy_kwh[i][l];
ccopy_kwh[i][4]=l1+0x33;
// write fm fm1
data_addr.addri=FM_KWH_F_BAKA+4*i;
for(l=0;l<4;l++)
	wr_data[l]=RAM[R_KWH_F_BAKA+4*i+l];
write(FM,4);
data_addr.addri=FM_DIANLIANG_COPYA_SUM+i;
wr_data[0]=ajiaoyuan_kwh[i];
write(FM,1);
data_addr.addri=FM_DIANLIANG_COPYB+5*i;
for(l=0;l<5;l++)
	wr_data[l]=bcopy_kwh[i][l];
write(FM,5);
data_addr.addri=FM_DIANLIANG_COPYC+5*i;
for(l=0;l<5;l++)
	wr_data[l]=ccopy_kwh[i][l];
write(FM,5);
}



void byte_5_bcd_add_copy_to_fm(addr)
unsigned int addr;
{
	byte_5_bcd_add(addr);
 	copy_ram_to_fm(addr,4, addr);
}
 

void err_kwh_envent()
{unsigned char l;
 if(1==next_point(TYPE_FM_KWHERR_RECORD,4))
        { //set_addr_by_twobiao(TYPE_FM_KWHERR_RECORD);
       	 data_addr.addri=current_twobiaofm_block_addr(TYPE_FM_KWHERR_RECORD,0);
         	time_to_wrdata();
         	for(l=0;l<80;l++)
         		wr_data[l+6]=RAM[R_KWH_F_BAKA+l];
         	write(FM,86);
         }
}


void err_time_envent()
{unsigned char l;
 if(1==next_point(TYPE_FM_TIMEERR_RECORD,4))
        {
        	data_addr.addri=current_twobiaofm_block_addr(TYPE_FM_TIMEERR_RECORD,0);
         	time_to_wrdata();
         	for(l=0;l<6;l++)
         		wr_data[l+6]=bianchengqian[l];
         	write(FM,12);
         }
}



unsigned int num_day_form_date(unsigned char *day)
{unsigned int j1;
if(3==testday(*day)+testmonth(*(day+1))+testyear(*(day+2)))
   	{
     		j1=value_hex_from_bcd(*(day+2));
     		j1=j1*365+(j1+3)/4;
     		if(((value_hex_from_bcd(*(day+2)))%4)==0)
	  	 	j1=j1+table_month29[value_hex_from_bcd(*(day+1))-1];
     		else 
	   		j1=j1+table_month28[value_hex_from_bcd(*(day+1))-1];
     		j1=j1+value_hex_from_bcd(*day)-1;
     		return j1;
     }
else 
	return 0;
}

unsigned char oneday_can_change_time()// changed do----had  add hour minute>86400
{unsigned char value;
unsigned int l1,l2;
value=0;
data_addr.addri=FM_YIJIAOSHI_MINUTE;
if(1==read(FM,5))
   	{
    		l1=num_day_form_date(&RSOFT_RTC_DAY);
    		l2=num_day_form_date(&wr_data[2]);
    		if(l1>l2)
      			{
      				if(l1==(l2+1)) 
          				{
          					if((256*RSOFT_RTC_HOUR+RSOFT_RTC_MINUTE)>=(256*wr_data[1]+wr_data[0]))
            						value=1;
					}
        			else 
						value=1;
      			}     
    	}
return value;
} 


void yesterday_to_point(unsigned char *point)
{unsigned char l;

 if(RSOFT_RTC_DAY>1)
       {l=value_hex_from_bcd(RSOFT_RTC_DAY)-1;
         *point=one_byte_hex_to_bcd(l);//((l/10)<<4)+(l%10);
         *(point+1)=RSOFT_RTC_MONTH;
         *(point+2)=RSOFT_RTC_YEAR;
        }
 else
 	{
 	 switch(RSOFT_RTC_MONTH)
 	 	{
                case 1:
                	       *point=0x31;
                	       *(point+1)=0x12;
                	       l=value_hex_from_bcd(RSOFT_RTC_YEAR)-1;
                	       l=l%100;
                	       *(point+2)=one_byte_hex_to_bcd(l);//((l/10)<<4)+(l%10);
                	       break;
               case 2:
               case 4:
               case 6:
               case 8:
               case 9:
               case 0x11:
               	          *point=0x31;
               	          l=value_hex_from_bcd(RSOFT_RTC_MONTH)-1;
               	          *(point+1)=one_byte_hex_to_bcd(l);//((l/10)<<4)+(l%10);
               	          *(point+2)=RSOFT_RTC_YEAR;
               	          break;
               case 3:
               	       l=value_hex_from_bcd(RSOFT_RTC_YEAR);
               	       l=l%4;
			       if(l==0)
					{*point=0x29;
			                *(point+1)=0x2;
			                *(point+2)=RSOFT_RTC_YEAR;
				        }
			       else 
				       {*point=0x28;
			                *(point+1)=0x2;
			                *(point+2)=RSOFT_RTC_YEAR;
                                    }
			       break;
	       default:
	       	       *point=0x30;
               	          l=value_hex_from_bcd(RSOFT_RTC_MONTH)-1;
               	          *(point+1)=one_byte_hex_to_bcd(l);//((l/10)<<4)+(l%10);
               	          *(point+2)=RSOFT_RTC_YEAR;
               	          break;
 	 	
 	 	}

        }
}



// jiao shi hou ji lu
void clr_had_jiaoshi()
{unsigned char l;
for(l=0;l<7;l++)
	wr_data[l]=0;
yesterday_to_point(&wr_data[2]);
data_addr.addri=FM_YIJIAOSHI_MINUTE;
write(FM,5);
}


void oneday_had_jiaoshi() // jiao shi wan cheng
{
	if((progfunction_security!=yes)||(RSTATUS_RUN!=TEST))
		{
		 data_addr.addri=FM_YIJIAOSHI_MINUTE;
		 wr_data[0]=RSOFT_RTC_MINUTE;
		 wr_data[1]=RSOFT_RTC_HOUR;
		 wr_data[2]=RSOFT_RTC_DAY;
		 wr_data[3]=RSOFT_RTC_MONTH;
		 wr_data[4]=RSOFT_RTC_YEAR;
		 write(FM,5);
		}
}


unsigned int num_second_canjiaoshi()
{unsigned int day1,day2,num;
num=0;
data_addr.addri=FM_YIJIAOSHI_MINUTE;
if(1==read(FM,5))
  	{
  		day2=num_day_form_date(&wr_data[2]);
    		day1=num_day_form_date(&RSOFT_RTC_DAY);
    		if(day1>day2) 
			num=5*(day1-day2);
    		if(day1<day2) 
			num=5*(day2-day1);  
   	 }
if (num>0)
	if(progfunction_security!=yes)
		num=4*60;
return num;// 2003-8-31 changed
}

// aaa计算剩下的时间SSSSSSSS type 0--90day 1--48hour 2--24 hour
unsigned int remain_time(hour,minute,timetype,currenttime)
unsigned int hour,currenttime;
unsigned char minute,timetype;
{unsigned int value;
  unsigned int l1;
value=0;
switch(timetype)
	{
		case 0:
            // 90 day------unit (hour)
            			if(hour<90*24)
            	  			if(hour<currenttime) 
						value=currenttime-hour;
            			break;
  		case 1:
  	     // 48 hour
  	     			if(hour<48)
  	     	 			{
  	     	 				l1=60*hour+minute;
  	         				if(l1<currenttime) 
							value=currenttime-l1;
					}
  	     			break;
   		case 2:
   	    //ll7* 24 hour
   	     			if(hour<7*24)
  	     	 			{
  	     	 				l1=60*hour+minute;
  	         				if(l1<currenttime) 
							value=currenttime-l1;
					}
  	    		 	break;
	}
return value;
}






// 1 jin wei ,0 wujin wei
unsigned char byte1_bcdadd_byte1(i,c)
// i----bcdaddbuffer point,c----carry
unsigned char i,c;
{unsigned char sum,sumc;
  sum=10*(bcdaddbuffer[i]>>4)+(0xf&bcdaddbuffer[i])
	 	 +10*(bcdaddbuffer[i+5]>>4)+(0xf&bcdaddbuffer[i+5])+c;
if((sum/100)!=0) 
	sumc=1;
else  
	sumc=0;
sum=sum%100;
bcdaddbuffer[i]=one_byte_hex_to_bcd(sum);//((sum/10)<<4)+(sum%10);
return sumc;
}


// hua long gui yue
// l1-----l5+l6--l10---->l1----l5
void byte5_bcdadd_byte5()
{unsigned char j;
j=byte1_bcdadd_byte1(0, 0);
j=byte1_bcdadd_byte1(1, j);
j=byte1_bcdadd_byte1(2, j);
j=byte1_bcdadd_byte1(3, j);
byte1_bcdadd_byte1(4, j);
}
// zhejiang gui yue xiang dui ying----------------------->start
#define recorde_shiduan 0
#define recorde_yonghuhao 1
#define recorde_biaohao 2
#define recorde_biaoaddr 3
const unsigned int tabled_recorde_shiduan_addr[]={EP1_SHIDUAN_SETTIME,EP1_YONGHUHAO_SETTIME,EP1_JUHAO_SETTIME,EP1_BIAOADDR_SETTIME};
void recoder_shiduan_yonghuhao_biaohao_addr(unsigned char type)
{
	data_addr.addri=tabled_recorde_shiduan_addr[type];
  	wr_data[0]=RSOFT_RTC_SECOND;
  	wr_data[1]=RSOFT_RTC_MINUTE;
   	wr_data[2]=RSOFT_RTC_HOUR;
   	wr_data[3]=RSOFT_RTC_DAY;
   	wr_data[4]=RSOFT_RTC_MONTH;
  	wr_data[5]=RSOFT_RTC_YEAR;
  	write(EP1,6);
}
// zhejiang gui yue xiang dui ying----------------------->end

unsigned int value_hex_from_v_4bytebcd(unsigned char *point)
// v_a  v_b  v_c  bcd(format xx xx  dot xx xx) ---changed to--- hex (xxx dot x) 
{unsigned int j;
// point ,point+1,point+2,point+3
  j=(*(point+1))>>4;
  j=j+10*(*(point+2)&0xf)+100*(*(point+2)>>4)+1000*(*(point+3)&0xf);
  return j;
}




//  cun sh jian
void lost_cun_shijian(unsigned int i)
// store to RAM[i](day month year second minute hour)
{unsigned char *d1;
if(1==testsecond_minute_hour_day_month_year(&RSOFT_RTC_SECOND,&RSOFT_RTC_DAY))
     {
       	d1=&RAM[i];
       	(*d1)=RSOFT_RTC_DAY;
       	d1=d1+1;
       	(*d1)=RSOFT_RTC_MONTH;
       	d1=d1+1;
      	(*d1)=RSOFT_RTC_YEAR;
      	d1=d1+1;
      	(*d1)=RSOFT_RTC_SECOND;  
      	d1=d1+1;
      	(*d1)=RSOFT_RTC_MINUTE;
      	d1=d1+1;
      	(*d1)=RSOFT_RTC_HOUR;
    	}
}
void cun_minuter_hour_day_month(unsigned int i)
	// store to RAM[i] (MINUTE HOUR DAY MONTH)
{unsigned char *d1;
if(1==testsecond_minute_hour_day_month_year(&RSOFT_RTC_SECOND,&RSOFT_RTC_DAY))
     {
       	d1=&RAM[i];
       	(*d1)=RSOFT_RTC_MINUTE;
       	d1=d1+1;
       	(*d1)=RSOFT_RTC_HOUR;
       	d1=d1+1;
       	(*d1)=RSOFT_RTC_DAY;
       	d1=d1+1;
       	(*d1)=RSOFT_RTC_MONTH;
     }
}



extern void init_xuliang();


extern unsigned char tingdian_ack();
unsigned char zongqing(value,type)
unsigned int value;
unsigned char type;//==0 all
// VALUE  ----COMMAND MUST 0X55AA
//TYPE ==0 ALL CLR  ,=1 PROG NOT CLR(V10)
{unsigned char a,l;
 unsigned int i;
 showcomm;
  if(value==0x55aa)
 	{
 		qingqiuduishi_rtc=1;
 //ram clr
  		for(i=R_KWH_F_BAKA;i<R_PROG_NUM;i++)
  			RAM[i]=0;
		if(type==0)
			{
			for(i=R_PROG_NUM;i<R_BATTERY_V;i++)
				RAM[i]=0;
			}
  		for(i=R_ALLLOSTV_NUM;i<R_BATTERY_WORKTIME;i++)
  			RAM[i]=0;
   		for(i=R_PASSWORD_LOCK_TIME_0;i<R_SOFT_SECOND;i++)
   			RAM[i]=0;
   		for(i=R_CUOFENG_KWH_F;i<R_TEMP;i++)
   			RAM[i]=0;
   		for(i=R_LOSTV_CURRENT_KWH_F;i<R_CURRENT_QUADRANT;i++)
   			RAM[i]=0;
  		 for(l=0;l<6;l++)
   			RAM[R_CURRENT_KW+l]=0;   		
		RKWH_F_COUNT=0;
		RKWH_R_COUNT=0;
		RKVARH_F_COUNT=0;
		RKVARH_R_COUNT=0;
		RKVARH_1_COUNT=0;
		RKVARH_2_COUNT=0;
		RKVARH_3_COUNT=0;
		RKVARH_4_COUNT=0;
		Dianliang1.byte=0;
		Dianliang2.byte=0;
//		RFLAG_DEMANGCLR_LOCK=0;
//		 RTIMER_DEMANGCLR_LOCK=0;
 		watchdog();
		//fm  KW clr
   		for(a=0;a<200;a++)
			wr_data[a]=0;   
   		data_addr.addri=FM_KW_F;
   		write(FM,70);
    		data_addr.addri=FM_KVAR_F;
   		write(FM,70+28);
   		watchdog();
		if(1==tingdian_ack())
	//		return 0;
 //FM  LOSTV clr
  		data_addr.addri=FM_LOSTV_NUM;
   		write(FM,108);
   		data_addr.addri=FM_LOSTV_AB_NUM ;
  		 write(FM,102);
   		watchdog();
		if(1==tingdian_ack())
	//		return 0;
//FM  CUTV clr
 		 data_addr.addri=FM_CUTV_NUM;
   		write(FM,108);
   		data_addr.addri=FM_CUTV_AB_NUM;
   		write(FM,102);
		if(1==tingdian_ack())
	//		return 0;
 //GUO ZAI
 		data_addr.addri=FM_OVER_KW_NUM;
              if(type==0)// all clr
   			write(FM,13);
	       else// clr except prog
		   	write(FM,9);
   		data_addr.addri=FM_ALLLOSTV_NUM;
   		write(FM,27);
//MIMA
  		data_addr.addri=FM_PASSWORD_LOCK_TIME_0;
   		write(FM,31);
 		data_addr.addri=FM_CUOFENG_KWH_F;
   		write(FM,58);
		watchdog();
    		data_addr.addri=FM_FUHE_POINT1;
   		write(FM,37);// ------------ may changed yu yue cuo feng
   		if(1==tingdian_ack())
	//		return 0;
   		data_addr.addri=FM_YIJIAOSHI_MINUTE;
   		write(FM,23);// l124

		// point clr--------------START
   		data_addr.addri=FM_POINT_TWOTABLE;
		read(FM,80);// WR_DATA[] CHANGED
		for(a=0;a<5;a++)
			wr_data[a]=0;// kwh kw clrkw biaogai duanniu gai
		if(type==0)
			{
				for(a=5;a<7;a++)
					wr_data[a]=0;//yuyue shi jian,cuofeng yuyue,
			}
		for(a=7;a<9;a++)
			wr_data[a]=0;
		if(type==0)
			{
				for(a=9;a<14;a++)
					wr_data[a]=0;//yougong wu gong bian cheng,shitao bian cheng ,fu he qi bian cheng,jie jia ri bian cheng
			}
		for(a=14;a<27;a++)
			wr_data[a]=0;
		if(type==0)
			wr_data[27]=0;
		for(a=28;a<34;a++)
			wr_data[a]=0;
		if(type==0)
			{
				for(a=34;a<41;a++)
					wr_data[a]=0;//yougong wu gong bian cheng,shitao bian cheng ,fu he qi bian cheng,jie jia ri bian cheng
			}
		for(a=41;a<80;a++)
			wr_data[a]=0;
		data_addr.addri=FM_POINT_TWOTABLE;
		write(FM,80);
// point clr--------------END
/*Start of lzh on 2009-2-27 17:12 山东烟台0902*/
		for(a=0;a<200;a++)
			wr_data[a]=0;   // WR_DATA[]  CLR--->0
		data_addr.addri=FM_CURRENT_CHAOBIAORI;
		write(FM,19);
		//dianliang zhuangtai 
		data_addr.addri=FM_STATUS_ZHUANCUN;
		write(FM,3);
		// add by zhanglong ---->start
		data_addr.addri=FM_STATUS_ZHUANCUN+5;
		write(FM,13);
		data_addr.addri=FM_CHAOBIAORIPROGRAM23_RECORD_BLOCKADDR;
		write(FM,70);

		// add by zhanglong ---->end
/*End of lzh on 2009-2-27 17:12 山东烟台0902*/
/*********************************************/

⌨️ 快捷键说明

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