📄 gy33485.c
字号:
#include "mylib.h"
#define RELEASE
uchar Curtime[7] = {0x07,0x05,0x06,0x08,0x15,0x04,0x25};//年,周,月,日,时,分,秒
uchar disnum[9] = {0,0,0,0,0,0,0,0,0};
bdata uint fbase;
bdata uint prefbase;
bdata uint disnum_flag;
bit send_flag=0;//发送标志
bit times_flag=0; //1~9次,次数增加标志
bit swith_phase=0;
bit error_flag=0;
uchar n=0;
uchar m1=0;//地址加k1值提取下一个故障时间
uchar m2=1;//
uint Fault_adress;
uchar CountTimer=0;
////---------------------------////////
sbit Ua_enable = disnum_flag^0;
sbit Ub_enable = disnum_flag^1;
sbit Uc_enable = disnum_flag^2;
sbit Ia_enable = disnum_flag^3;
sbit Ic_enable = disnum_flag^4;
sbit Ip_enable = disnum_flag^5;
sbit UaIflag = disnum_flag^8;
sbit UbIflag = disnum_flag^9;
sbit UcIflag = disnum_flag^10;
sbit IaIflag = disnum_flag^11;
sbit IcIflag = disnum_flag^12;
sbit IpIflag = disnum_flag^13;
uchar IdNum = 0;
uchar Key3Num = 0;//5_18 added
bit ResetNum = 0; //
bit mail_box_flag = 0; //every second set this flag with 1
bit a_start = 0; //display "起始" while a_start is 1
bit a_stop = 0; //display "终/到" while a_stop is 1
//flag for interval min
sbit IntervalUaFlag = fbase^8;
sbit IntervalUbFlag = fbase^9;
sbit IntervalUcFlag = fbase^10;
sbit IntervalIaFlag = fbase^11;
sbit IntervalIbFlag = fbase^12; //for low voltage ammeter
sbit IntervalIcFlag = fbase^13;
sbit IntervalIpFlag = fbase^14;
sbit IntervalUXFlag = fbase^15; //for low voltage ammeter
//this flag used to reflect fault occurs
sbit UX_fault_flag = fbase^7;
sbit Ip_fault_flag = fbase^6;
sbit Ic_fault_flag = fbase^5;
sbit Ib_fault_flag = fbase^4;
sbit Ia_fault_flag = fbase^3;
sbit Uc_fault_flag = fbase^2;
sbit Ub_fault_flag = fbase^1;
sbit Ua_fault_flag = fbase^0;
//this flag used to reflect fault prestatus
sbit preUX_fault_flag = prefbase^7;
sbit preIp_fault_flag = prefbase^6;
sbit preIc_fault_flag = prefbase^5;
sbit preIb_fault_flag = prefbase^4;
sbit preIa_fault_flag = prefbase^3;
sbit preUc_fault_flag = prefbase^2;
sbit preUb_fault_flag = prefbase^1;
sbit preUa_fault_flag = prefbase^0;
//this flag used to reflect prestatus of Ua.Ub.....UX
sbit PreUaIn = prefbase^15;
sbit PreUbIn = prefbase^14;
sbit PreUcIn = prefbase^13;
sbit PreIaIn = prefbase^12;
sbit PreIbIn = prefbase^11;
sbit PreIcIn = prefbase^10;
sbit PreIpIn = prefbase^9;
sbit PreUXIn = prefbase^8;
//start_min is the time(min) that fault occur,interval_min is the lasting time of fault
uchar idata Ua_start_min,Ua_start_hour,Ua_interval_min=0;
uchar idata Ub_start_min,Ub_start_hour,Ub_interval_min=0;
uchar idata Uc_start_min,Uc_start_hour,Uc_interval_min=0;
uchar idata Ia_start_min,Ia_start_hour,Ia_interval_min=0;
//uchar idata Ib_start_min,Ib_start_hour,Ib_interval_min=0;
uchar idata Ic_start_min,Ic_start_hour,Ic_interval_min=0;
uchar idata Ip_start_min,Ip_start_hour,Ip_interval_min=0;
//uchar idata UX_start_min,UX_start_hour,UX_interval_min=0;
//this struct used to store fault.hour,fault.min,fault.sec
struct fault_time idata Ua_fault;
struct fault_time idata Ub_fault;
struct fault_time idata Uc_fault;
struct fault_time idata Ia_fault;
struct fault_time idata Ib_fault;
struct fault_time idata Ic_fault;
struct fault_time idata Ip_fault;
struct fault_time idata UX_fault;
//#define sending_data_x_axial 8
//#define sending_data_y_axial 6
/*
uchar idata sendingdata[sending_data_x_axial][sending_data_y_axial]=
{{0x00,0x00,0x00,0x00,0x00,0x00}, //UA //Ua
{0x00,0x00,0x00,0x00,0x00,0x00}, //UB //Ub
{0x00,0x00,0x00,0x00,0x00,0x00}, //UC //Uc
{0x00,0x00,0x00,0x00,0x00,0x00}, //IA //Ia
{0x00,0x00,0x00,0x00,0x00,0x00}, //IC //Ib
{0x00,0x00,0x00,0x00,0x00,0x00}, //I- //Ic
{0x00,0x00,0x00,0x00,0x00,0x00}, //I.. //Ip
{0x00,0x00,0x00,0x00,0x00,0x00},};//U..//Ux*/
//this array used to store fault start_time and stop_time
uchar idata FaultTime[6];
uchar SpIntval = 0;
/*uint UaStartEeprom = 72;
uint UbStartEeprom = 96;
uint UcStartEeprom = 120;
uint IaStartEeprom = 144;
uint IcStartEeprom = 168;
uint IpStartEeprom = 192;*/
uint UaStartEeprom = 80;
uint UbStartEeprom = 200;
uint UcStartEeprom = 320;
uint IaStartEeprom = 440;
uint IcStartEeprom = 560;
uint IpStartEeprom = 680; // 修改定义位置,定义在库函数中
void KickDog(void)
{
#ifdef RELEASE
WDT = 0x1E;
WDT = 0x0E1;
#else
;
#endif
}
/*
void s_send (void) interrupt 4 using 3
{
void str(void); //发送数据块
uchar mm;
RI = 0;
ES = 0;
mm = SBUF;
if(mm!='0'){goto reti;}
while(RI==0);
RI=0;
mm=SBUF;
if(mm!='3'){goto reti;}
while(RI==0);
RI=0;
mm=SBUF;
if(mm!='1'){goto reti;}
while(RI==0);
RI=0;
mm=SBUF;
if(mm!='2'){goto reti;}
while(RI==0);
RI=0;
mm=SBUF;
if(mm!='8'){goto reti;}
while(RI==0);
RI=0;
mm=SBUF;
if(mm!='5'){goto reti;}
//P3_2=1;
SM2=0;
str();
//P3_2=0;
reti:;
SM2=1;
ES=1;
}
void str(void) //发送数据块
{
uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<6;i++)
{
SBUF=sendingdata[j][i];
while(TI==0);
TI=0;
}
}
}*/
/*************************************************/
/* Delay 60us/unit at 11.0592 MHz crystal clock */
/*************************************************/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
for(j=0;j<2;j++);
KickDog();
}
}
/***************************************/
/*void timer0() interrupt 1 using 2
{
if (SpIntval) SpIntval--;
}*/
/***************************************/
/***************************************/
void timer2() interrupt 5 using 1
{ TF2=0;
if (SpIntval) SpIntval--;
}
/******************************************************/
/*定时器T0中断子程序,产生38.4千赫兹载波*/
/**************************************/
/*************************************设计日期*2007.6.8*****/
t0()interrupt 1 using 2//
{ P2_7= !P2_7;
}
/******************************************************/
/*串行接收中断子程序***********************************/
/********************************************************/
/*************************************设计日期*2007.6.8***/
void serial(void) interrupt 4 using 3//
{uchar mm;
if(RI)
{RI=0;
mm=SBUF;
if(!(mm^0xaa))
send_flag=1;
if(!(mm^0xbb))
swith_phase=1;
if(!(mm^0xee))
error_flag=1;
}
}
void faultcount(void)
{
uchar i;
if(Ua_fault_flag&& !preUa_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[1]++;
wr_s_eeprom(disnum+1, 66, sizeof(disnum[1]));
}
if(Ub_fault_flag && !preUb_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[2]++;
wr_s_eeprom(disnum+2, 67, sizeof(disnum[2]));
}
if(Uc_fault_flag && !preUc_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[3]++;
wr_s_eeprom(disnum+3, 68, sizeof(disnum[3]));
}
if(Ia_fault_flag && !preIa_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[4]++;
wr_s_eeprom(disnum+4, 69, sizeof(disnum[4]));
}
/* if(Ib_fault_flag && !preIb_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[5]++;
}*/
if(Ic_fault_flag && !preIc_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[6]++;
wr_s_eeprom(disnum+6, 70, sizeof(disnum[6]));
}
if(Ip_fault_flag && !preIp_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[7]++;
wr_s_eeprom(disnum+7, 71, sizeof(disnum[7]));
}
/* if(UX_fault_flag && !preUX_fault_flag)
{
disnum[0]++;
wr_s_eeprom(disnum, Num_EEPROM, sizeof(disnum[0]));
disnum[8]++;
}*/
preUa_fault_flag = Ua_fault_flag;
preUb_fault_flag = Ub_fault_flag;
preUc_fault_flag = Uc_fault_flag;
preIa_fault_flag = Ia_fault_flag;
// preIb_fault_flag = Ib_fault_flag;
preIc_fault_flag = Ic_fault_flag;
preIp_fault_flag = Ip_fault_flag;
// preUX_fault_flag = UX_fault_flag;
for(i=0;i<9;i++)
{
if(*(disnum+i) > 9)*(disnum+i) = 0;
}
}
void loop(void)
{
uint i;
Curtime[5]=R1302(0x83);
Curtime[4]=R1302(0x85);
Curtime[3]=R1302(0x87);
Curtime[2]=R1302(0x89);
Curtime[1]=R1302(0x8B);
Curtime[0]=R1302(0x8D);
for(i=0;i<6;i++)
Curtime[i] = hex_to_dec(Curtime[i]);
if(a_start)
DispIC2_time(S12,Curtime);
else if(a_stop)
DispIC2_time(S14,Curtime);
else
DispIC2_time(S13,Curtime);
}
void gzsmdy(void)
{
uint i;
Ua_in=1;
if(!Ua_in) //Ua fault processing
{
Ua_fault.sec=Ua_fault.sec + 1;
if(Ua_fault.sec>=60)
{
Ua_fault.sec = 0;
Ua_fault.min++;
if(Ua_fault.min>=60)
{
Ua_fault.min = 0;
Ua_fault.hour++;
if(Ua_fault.hour>=10000)
{
Ua_fault.hour = 9999;
}
}
}
wr_s_eeprom((uchar idata *)(&Ua_fault), Ua_EEPROM, sizeof(Ua_fault));
//----------------------------//
if(UaStartEeprom > 194)
UaStartEeprom = 80;
//----------------------------//
if(!PreUaIn)
{
IntervalUaFlag = 1;
// start Ua_fault ,read start time,read Ua_fault.min
Ua_start_min = Ua_fault.min;
Ua_start_hour = Ua_fault.hour;
for(i=2;i<6;i++)
FaultTime[i] = Curtime[i]; //fault start time(include month,date,hour,minute)
FaultTime[1] = Curtime[0];
FaultTime[0] = Ua;
wr_s_eeprom(FaultTime,UaStartEeprom,sizeof(FaultTime));
UaStartEeprom += 6;
}
if(IntervalUaFlag)
Ua_interval_min = Ua_fault.min +(Ua_fault.hour-Ua_start_hour)*60 - Ua_start_min;
if(Ua_interval_min >= 1) //10
{
Ua_fault_flag = 1;
IntervalUaFlag = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -