📄 ddj.c
字号:
#include "2407.h"
#include "DDJ.h"
#include "math.h"
extern void SAMPLE_ASM();
//LCD-RS-----DIN0(IOPB0)
//LCD-RW-----DIN1(IOPB1)
//LCD-E------DIN2(IOPB2)
struct TabStruct
{
unsigned int scireq;
unsigned int status; /* 事件执行的状态 */
void (*func)(); /*当前状态应该执行的功能操作*/
} ;
struct TabStruct FuncTab[SUM_EVENT]=
{
{0x5555,0x5555, SetTimeToPCF8583}, //0
{0xaaaa,0x5555, resend }, //1
{0x5555,0x5555, HeFenCaoZuo }, //2
{0xaaaa,0x5555, made_cancle }, //3
{0xaaaa,0x5555, made_execute }, //4
{0xaaaa,0x5555, made_choise }, //5
{0x5555,0x5555, dealdata }, //6
{0xaaaa,0x5555, made_time }, //7
{0xaaaa,0x5555, made_resetlianlu}, //8
{0xaaaa,0x5555, made_resetcu }, //9
{0xaaaa,0x5555, made_netstatus }, //10
{0x5555,0x5555, DingZhiLoad }, //11
{0xaaaa,0x5555, made_dzchenggong}, //12
{0xaaaa,0x5555, made_dzshibai }, //13
{0xaaaa,0x5555, made_zongzhaocom}, //14
{0xaaaa,0x5555, made_messure1 }, //15
{0xaaaa,0x5555, made_messure2 }, //16
{0xaaaa,0x5555, made_messure3 }, //17
{0xaaaa,0x5555, made_signal1 }, //18
{0xaaaa,0x5555, made_endrequire }, //19
{0xaaaa,0x5555, made_nodata }, //20
{0xaaaa,0x5555, made_measurechange},//21
{0xaaaa,0x5555, made_statuschange}, //22
{0xaaaa,0x5555, made_soe }, //23
{0xaaaa,0x5555, made_lubo }, //24
{0xaaaa,0x5555, made_dingzhi }, //25
{0xaaaa,0x5555, made_endlianlu }, //26
{0xaaaa,0x5555, made_signal2 }, //27
{0x5555,0xaaaa, DingZhiCRC }, //28
} ;
void resend (void)
{
senddata_length=lengthbak;
//send_length=1;
//SCITXBUF=senddata[0];
FuncTab[1].status=0x5555;
send_data(senddata_length);
}
void DingZhiCRC(void)
{
/* 定值自检,出错后重新从EEPROM中读取定值并重复自检,
反复多次后仍自检出错,发定值出错报文,并闭锁保护
*/
int i;
for (i=0;i<30;i++)
{
if (DingZhiP[i]!=DingZhi[i])
{
DingZhiError_flag=1;
}
}
}
interrupt void nothing(void)
{
return;
}
interrupt void sample_int(void)
{
if (PIVR==0x27)
{
asm(" clrc SXM");
millisecond_js++;
if(millisecond_js>=120)
{
millisecond_js=0; //S0E毫秒位
}
*(int *)0x742F=0x0080;
SAMPLE_ASM();
}
asm(" clrc INTM");
IMR=0x0016;
}
interrupt void baohuchuli_int(void)
{// 保护处理中断
unsigned int Yaoxinb_flag,i,k;
unsigned int one,YX_Flag1,YX_Flag2;
if (PIVR==0x2b)
{
IMR = 0x0003;
EVAIFRB = 0x0001;
//开关量采集和遥信数组组装
YX_Flag1=PBDATDIR&0x0001;
if (YX_Flag1==0x01)
{
YaoXin0 = ( YaoXin0 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin0 = YaoXin0 << 1;
}
if (YaoXin0==0xffff)
{
YaoXin[0]=0x0001;
}
if (YaoXin0==0x0000)
{
YaoXin[0]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0002)>>1;
if (YX_Flag1==0x01)
{
YaoXin1 = ( YaoXin1 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin1 = YaoXin1 << 1;
}
if (YaoXin1==0xffff)
{
YaoXin[1]=0x0001;
}
if (YaoXin1==0x0000)
{
YaoXin[1]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0004)>>2;
if (YX_Flag1==0x01)
{
YaoXin2 = ( YaoXin2 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin2 = YaoXin2 << 1;
}
if (YaoXin2==0xffff)
{
YaoXin[2]=0x0001;
}
if (YaoXin2==0x0000)
{
YaoXin[2]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0008)>>3;
if (YX_Flag1==0x01)
{
YaoXin3 = ( YaoXin3 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin3 = YaoXin3 << 1;
}
if (YaoXin3==0xffff)
{
YaoXin[3]=0x0001;
}
if (YaoXin3==0x0000)
{
YaoXin[3]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0010)>>4;
if (YX_Flag1==0x01)
{
YaoXin4 = ( YaoXin1 << 4 ) + 1; /*低位添1*/
}
else
{
YaoXin4 = YaoXin4 << 1;
}
if (YaoXin4==0xffff)
{
YaoXin[4]=0x0001;
}
if (YaoXin4==0x0000)
{
YaoXin[4]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0020)>>5;
if (YX_Flag1==0x01)
{
YaoXin5 = ( YaoXin5 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin5 = YaoXin5 << 1;
}
if (YaoXin5==0xffff)
{
YaoXin[5]=0x0001;
}
if (YaoXin5==0x0000)
{
YaoXin[5]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0040)>>6;
if (YX_Flag1==0x01)
{
YaoXin6 = ( YaoXin6 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin6 = YaoXin6 << 1;
}
if (YaoXin6==0xffff)
{
YaoXin[6]=0x0001;
}
if (YaoXin6==0x0000)
{
YaoXin[6]=0x0000;
}
YX_Flag1=(PBDATDIR&0x0080)>>7;
if (YX_Flag1==0x01)
{
YaoXin7 = ( YaoXin7 << 1 ) + 1; /*低位添1*/
}
else
{
YaoXin7 = YaoXin7 << 1;
}
if (YaoXin7==0xffff)
{
YaoXin[7]=0x0001;
}
if (YaoXin7==0x0000)
{
YaoXin[7]=0x0000;
}
DiShiQi_1S++;
if (DiShiQi_1S>=20)
{
DiShiQi_1S=21;
for (k=0;k<8;k++)
{
if (YaoXin[k]!=YaoXinp[k])
{
ADC=1;
soe_no++;
soe_xuhao[soe_no]=0x0081+k;
soe_value[soe_no]=YaoXin[k];
soe_millisecond[soe_no]=millisecond_get;
soe_second[soe_no]=second_get;
soe_minute[soe_no]=minute_get;
soe_hour[soe_no]=hour_get;
soe_day[soe_no]=day_get;
soe_month[soe_no]=month_get;
soe_year[soe_no]=year_get;
if (soe_no>16) soe_no=0;
}
YaoXinp[k]=YaoXin[k];
}
}
//////////////////////////////////////////////////////////
if (CPUreset_flag==0x5555)
{
WDKEY=0x55;
WDKEY=0xaa;
}
Fzhzold1=Fzhzold2;
if ((Fzhz==Fzhzold1)&&(Fzhzold1==Fzhzold2))
{
Fzhztimer++;
}
else
{
Fzhztimer=0;
}
Fzhzold2=Fzhz;
if ((Fzhztimer>=5)&&(UamVal<400)&&(UbmVal<400)&&(UcmVal<400))
{
Fzhz=0;
}
//继电器动作脉宽
if (JDQ_DONGZUO_flag==0xaaaa)
{
MaiKuantimer++;
}
if (JDQqudou_flag==0xaaaa)
{
JDQqudou_timer++;
}
if (acc>=25)//三个周波后保护才启动
{
baohu_flag=1;
acc=25;
}
else
{
acc++;
}
if (JS_counter>0)//通讯接收间隔计数器
{
JS_counter--;
}
else
{
dataIndex=0;
}
//if(DSPRUN_FLAG<30)//运行灯
// {
// PEDATDIR=PEDATDIR&0xFF7F;
// }
//else if(DSPRUN_FLAG>60)
// {
// PEDATDIR=PEDATDIR|0x0080;
// }
//if(DSPRUN_FLAG>90) DSPRUN_FLAG=0;
//else DSPRUN_FLAG++;
YouXiaoZhiJS(); //有效值计算
if (((IamVal>=XDLYXQDDingZhi2)||(IbmVal>=XDLYXQDDingZhi2)||(IcmVal>=XDLYXQDDingZhi2))&&(DingZhiError_flag==0))
{
qdb=1;
BaohuSuanFaLJ();
}
else if (((IamVal<XDLYXQDDingZhi2)&&(IbmVal<XDLYXQDDingZhi2)&&(IcmVal<XDLYXQDDingZhi2))||(DingZhiError_flag==1))
{
qdb=0;
SdQiDong_flag=0;
YSdQiDong_flag=0;
DSdQiDong_flag=0;
fsxQD_flag=0;
fsx_flag=0;
}
BaoHuChuKouLJ();
}
IMR = 0x0016;
}
interrupt void Sci_RX_int(void) /*SPI SCI*/
{
int i,j,st;
unsigned int check=0xff;
switch (PIVR)
{
case 0x06: /*通讯处理程序*/
{
IMR = 0x0006;
JS_counter=20;//接收间隔计数器
if((flag_485==_COMPLETE)&&((SCIRXST&0x40)==0x40))
{
receive_datap[dataIndex]=SCIRXBUF;
dataIndex++;
}
if((flag_485==_REQUIRE)&&((SCIRXST&0x40)==0x40))
{
flag_485=_COMPLETE;
dataIndex=0;
receive_datap[dataIndex]=SCIRXBUF;
}
if((receive_datap[0]!=0x10)&&(receive_datap[0]!=0x68))
{
flag_485=_COMPLETE;
dataIndex=0;
//SCICTL1=0X13;
//SCICTL1=0X23;
}
if (receive_datap[0]==0x10)
{
if (dataIndex>=5)
{
check=receive_datap[1]+receive_datap[2];
check=check&0x00ff;
if((ADDR==receive_datap[2])&&(receive_datap[4]==0x16)&&(receive_datap[3]==check))
{
flag_485==_REQUIRE;
for(j=0;j<5;j++)
{
receive_data[j]=receive_datap[j];//临时接收缓冲转入正式缓冲
}
FuncTab[6].status=0xaaaa;
dataIndex=0;
}
else
{
flag_485=_COMPLETE;
dataIndex=0;
}
}
}
else
{
if(receive_datap[0]==0x68)
{
if(dataIndex>=6)
{
if((ADDR==receive_datap[5])&&(receive_datap[1]==receive_datap[2]))
{
len=receive_datap[1]+6;
if((len < dataIndex)||(len == dataIndex))
{
check=0;
for(i=4;i<receive_datap[1]+4;i++)
{
check+=receive_datap[i];
check=check&0x00ff;
}
if ((receive_datap[len-1]==0x16)&&(receive_datap[len-2]==check))
{
flag_485==_REQUIRE;
for(j=0;j<len;j++)
{
receive_data[j]=receive_datap[j];//临时接收缓冲转入正式缓冲
}
FuncTab[6].status=0xaaaa;
len=0;
dataIndex=0;
}
else
{
flag_485=_COMPLETE;
len=0;
dataIndex=0;
}
}
}
else
{
flag_485=_COMPLETE;
dataIndex=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -