📄 main.c
字号:
//time_ptr = (TIME xdata *)TIME_ADD;
time_ptr = (TIME *)TIME_ADD;
if(buf_ptr->buf0[0]==3)
{
timerd: //
rRTCCON=0x01;
/* time_ptr->sec =rBCDSEC;
time_ptr->min =rBCDMIN;
time_ptr->hour =rBCDHOUR;
time_ptr->day =rBCDDAY;
time_ptr->month =rBCDMON;
time_ptr->week =rBCDDATE;
time_ptr->year =rBCDYEAR; // 读时钟*/
time_ptr->sec =rBCDSEC;
time_ptr->min =rBCDMIN;
time_ptr->hour =rBCDHOUR;
time_ptr->day =rBCDDAY;
time_ptr->month =rBCDMON;
time_ptr->week =rBCDDATE;
time_ptr->year =rBCDYEAR; // 读时钟
rRTCCON=0x00;
buf_ptr->buf0[0]=10; buf_ptr->buf0[1]=7;
buf_ptr->buf0[2]=time_ptr->sec; buf_ptr->buf0[3]=time_ptr->min;
buf_ptr->buf0[4]=time_ptr->hour; buf_ptr->buf0[5]=time_ptr->day;
buf_ptr->buf0[6]=time_ptr->month; buf_ptr->buf0[7]=time_ptr->week;
buf_ptr->buf0[8]=time_ptr->year;
txdbyte('A');
for (s=i=0;i<9;i++)
{
txdbyte(buf_ptr->buf0[i]);
s=s+buf_ptr->buf0[i];
buf_ptr->buf0[9]+=buf_ptr->buf0[i];
}
txdbyte(s); // 累加和
}
else
if(buf_ptr->buf0[0]==10)
{
write_dallas(0x80,buf_ptr->buf0[2]); write_dallas(0x82,buf_ptr->buf0[3]);
write_dallas(0x84,buf_ptr->buf0[4]); write_dallas(0x86,buf_ptr->buf0[5]);
write_dallas(0x88,buf_ptr->buf0[6]); write_dallas(0x8A,buf_ptr->buf0[7]);
write_dallas(0x8C,buf_ptr->buf0[8]); // 重写
goto timerd;
}
//P1=0xf4; P1=0xff;
//qwe
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==8)
{
loop_l=buf_ptr->buf0[2];
loop_l_up=1;
txdbyte('A'); txdbyte(0);
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==9)
{
//jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
//P1=0xf4; P1=0xff; P1=0xf1;
cj=jzq_ptr->meter_num; // 集中器管理的电表数量
//c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
c=256*(U16)buf_ptr->buf0[2]+(U16)buf_ptr->buf0[3];
cc=c;
//c=comp1(c);
//dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
dat_ptr=(DAT_ITEM *)JZQ_ADD ;
while (cc<=cj)
{
i=0;
buf_ptr->buf0[i]=11; i++;
for(j=0;j<6;i++,j++)
{buf_ptr->buf0[i]=dat_ptr[c].s_no[j];} // 电表表号
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=1;i++;
for(j=0;j<4;i++,j++) // 总电能
{buf_ptr->buf0[i]=dat_ptr[c].s_base[j];}
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=2;i++;
for(j=0;j<4;i++,j++) // 峰有功电能
{buf_ptr->buf0[i]=dat_ptr[c].s_base2[j];}
buf_ptr->buf0[i]=4;i++; buf_ptr->buf0[i]=3;i++;
for(j=0;j<4;i++,j++) // 平有功电能
{buf_ptr->buf0[i]=dat_ptr[c].s_base3[j];}
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=4;i++;
for (j=0;j<4;i++,j++) // 谷有功电能
{buf_ptr->buf0[i]=dat_ptr[c].s_base4[j];}
if((dat_ptr[c].d_type&0x10)==0x0) // 无需量
{buf_ptr->buf0[0]=buf_ptr->buf0[0]-2; goto azz3;}
buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x5; i++;
for(j=0;j<3;i++,j++) // 有功总最大需量
{buf_ptr->buf0[i]=dat_ptr[c].s_xq[j];}
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x6;i++;
for(j=0;j<4;i++,j++) // 有功总最大需量发生时间
{buf_ptr->buf0[i]=dat_ptr[c].s_time[j];}
azz3:
buf_ptr->buf0[i]=1; i++; buf_ptr->buf0[i]=7; i++;
buf_ptr->buf0[i]=dat_ptr[c].s_qdx; i++; // 继电器状态
buf_ptr->buf0[i]=2; i++; buf_ptr->buf0[i]=8; i++;
if(dat_ptr[c].s_xh!=0) n=dat_ptr[c].s_xh;
else n=dat_ptr[c].pre_sno;
buf_ptr->buf0[i]=(char)n; i++;
n=n>>8; buf_ptr->buf0[i]=(char)n; i++; //中继顺序号
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=9; i++;
buf_ptr->buf0[i]=dat_ptr[c].c_min; i++; buf_ptr->buf0[i]=dat_ptr[c].c_hour; i++;
buf_ptr->buf0[i]=dat_ptr[c].c_day; i++; buf_ptr->buf0[i]=dat_ptr[c].c_mon; i++;
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x0a; i++;
buf_ptr->buf0[i]=dat_ptr[c].e_min; i++; buf_ptr->buf0[i]=dat_ptr[c].e_hour; i++;
buf_ptr->buf0[i]=dat_ptr[c].e_day; i++; buf_ptr->buf0[i]=dat_ptr[c].e_mon; i++;
buf_ptr->buf0[i]=1; i++; buf_ptr->buf0[i]=0x0b; i++;
buf_ptr->buf0[i]=dat_ptr[c].e_cnt; i++; // 未抄计次
txdbyte('A'); txdbyte(i+3); h=0;
if(cc==cj) { txdbyte(9); h=i+3+9; }
else{ txdbyte(0x89); h=i+3+0x89; }
for(j=0;j<i;j++)
{txdbyte(buf_ptr->buf0[j]); h=h+buf_ptr->buf0[j];}
txdbyte(h);
j=0;
for(ysrxd=80; ysrxd;)
{
//s=P1; P1=0xf4; P1=s; // 清狗
//qwe
//if(!RI) continue;
//RI=0;
if((rUTRSTAT0&0x1)==0) continue;
//if(SBUF=='N') j=1;
//if(SBUF=='W') j=2;
//if(SBUF=='E') j=3;
if(rURXH0=='N') j=1;
if(rURXH0=='W') j=2;
if(rURXH0=='E') j=3;
//if((j>0)&&(SBUF==0))
if((j>0)&&(rURXH0==0))
{j=(j&0x0f)+0x10; break;}
}
ysrxd=80;
if(j==0x11)
{
c++; cc++;
//if(cc==448){ P1=0xf9; c=1; }
//if(cc==895){ P1=0xf2; c=1; }
}
else if (j==0x12) continue;
else if (j==0x13) break;
else break;
}
//P1=0xff;
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==0x0a)
{
//jzq_ptr = (JZQ_HEAD xdata *)JZQ_ADD;
jzq_ptr = (JZQ_HEAD *)JZQ_ADD;
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
//P1=0xf1;
cj=jzq_ptr->meter_num; // 集中器管理的电表数量
c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
cc=c;
//c=comp1(c);
//dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
dat_ptr=(DAT_ITEM *)JZQ_ADD ;
while (cc<=cj)
{
i=0;
buf_ptr->buf0[i]=8; i++;
for(j=0;j<6;i++,j++)
{buf_ptr->buf0[i]=dat_ptr[c].s_no[j];} // 电表表号
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x21;i++;
for(j=0;j<4;i++,j++) // 冻总电能
{ buf_ptr->buf0[i]=dat_ptr[c].z_base[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x22; i++;
for(j=0;j<4;i++,j++) // 日冻峰有功电能
{buf_ptr->buf0[i]=dat_ptr[c].z_base2[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x23;i++;
for(j=0;j<4;i++,j++) // 日冻平有功电能
{buf_ptr->buf0[i]=dat_ptr[c].z_base3[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x24; i++;
for(j=0;j<4;i++,j++) // 日冻谷有功电能
{buf_ptr->buf0[i]=dat_ptr[c].z_base4[j];}
if((dat_ptr[c].d_type&0x10)==0) // 无需量
{buf_ptr->buf0[0]=buf_ptr->buf0[0]-2; goto aazz3; }
buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x25; i++;
for(j=0;j<3;i++,j++) // 日冻有功总最大需量
{buf_ptr->buf0[i]=dat_ptr[c].z_xq[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x26; i++;
for(j=0;j<4;i++,j++) // 日冻有功总最大需量发生时间
{buf_ptr->buf0[i]=dat_ptr[c].z_time[j];}
aazz3:
buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x27;i++;buf_ptr->buf0[i]=dat_ptr[c].z_qdx; i++; // 日冻继电器状态
buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x28;i++;
buf_ptr->buf0[i]=dat_ptr[c].z_mon; i++; // 日冻结时间
txdbyte('A');txdbyte(i+3); h=0;
if(cc==cj){txdbyte(0x0a);h=i+3+0x0a;}
else { txdbyte(0x8a); h=i+3+0x8a;}
for (j=0;j<i;j++)
{txdbyte(buf_ptr->buf0[j]); h=h+buf_ptr->buf0[j];}
txdbyte(h);
j=0;
for(ysrxd=80;ysrxd;) // 接收特殊命令
{
//s=P1; P1=0xf4; P1=s; // 清狗
//qwe
//if(!RI) continue;
//RI=0;
//if(SBUF=='N') j=1;
//if(SBUF=='W') j=2;
//if(SBUF=='E') j=3;
//if((j>0)&&(SBUF==0))
if((rUTRSTAT0&0x1)==0) continue;
if(rURXH0=='N') j=1;
if(rURXH0=='W') j=2;
if(rURXH0=='E') j=3;
if((j>0)&&(rURXH0==0))
{j=(j&0x0f)+0x10; break;}
if(ysrxd==0) break;
}
ysrxd=80;
if(j==0x11)
{
c++; cc++;
//if(cc==448){ P1=0xf9; c=1; }
//if(cc==895){ P1=0xf2; c=1; }
}
else if (j==0x12) continue;
else if (j==0x13) break;
else break;
}
//P1=0xff;
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==0x0b)
{
//jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
//P1=0xf4;P1=0xff;P1=0xf1;
//qwe
cj=jzq_ptr->meter_num; // 集中器管理的电表数量
c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
cc=c;
//c=comp1(c);
//dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
dat_ptr=(DAT_ITEM *)JZQ_ADD ;
while(cc<=cj)
{
i=0;
buf_ptr->buf0[i]=8; i++;
for(j=0;j<6;i++,j++)
{buf_ptr->buf0[i]=dat_ptr[c].s_no[j];} // 电表表号
buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x31;i++;
for(j=0;j<4;i++,j++) // 月冻总电能
{buf_ptr->buf0[i]=dat_ptr[c].r_base[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x32;i++;
for(j=0;j<4;i++,j++) // 月冻峰有功电能
{buf_ptr->buf0[i]=dat_ptr[c].r_base2[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x33;i++;
for(j=0;j<4;i++,j++) // 月冻平有功电能
{buf_ptr->buf0[i]=dat_ptr[c].r_base3[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x34;i++;
for(j=0;j<4;i++,j++) // 月冻谷有功电能
{buf_ptr->buf0[i]=dat_ptr[c].r_base4[j];}
if((dat_ptr[c].d_type&0x10)==0) // 无需量
{buf_ptr->buf0[0]=buf_ptr->buf0[0]-2; goto bzz3;}
buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x35;i++;
for (j=0;j<3;i++,j++) // 月冻有功总最大需量
{buf_ptr->buf0[i]=dat_ptr[c].r_xq[j];}
buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x36;i++;
for(j=0;j<4;i++,j++) // 月冻有功总最大需量发生时间
{buf_ptr->buf0[i]=dat_ptr[c].r_time[j];}
bzz3:
buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x37;i++;buf_ptr->buf0[i]=dat_ptr[c].r_qdx;i++; // 月冻继电器状态
buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x38;i++;
buf_ptr->buf0[i]=dat_ptr[c].r_mon;i++; // 月冻结时间
txdbyte('A');txdbyte(i+3); h=0;
if(cc==cj){txdbyte(0x0b);h=i+3+0x0b;}
else{txdbyte(0x8b);h=i+3+0x8b;}
for (j=0;j<i;j++)
{txdbyte(buf_ptr->buf0[j]);h=h+buf_ptr->buf0[j];}
txdbyte(h);
j=0;
for(ysrxd=80;ysrxd;)
{
//s=P1;P1=0xf4;P1=s; // 清狗
//qwe
//if(!RI) continue;
//RI=0;
//if(SBUF=='N') j=1;
//if(SBUF=='W') j=2;
//if(SBUF=='E') j=3;
//if((j>0)&&(SBUF==0))
if((rUTRSTAT0&0x1)==0) continue;
if(rURXH0=='N') j=1;
if(rURXH0=='W') j=2;
if(rURXH0=='E') j=3;
if((j>0)&&(rURXH0==0))
{j=(j&0x0f)+0x10;break;}
}
ysrxd=80;
if(j==0x11)
{
c++; cc++;
//if(cc==448){P1=0xf9;c=1;}
//if(cc==895){P1=0xf2;c=1;}
}
else if(j==0x12) continue;
else if(j==0x13) break;
else break;
}
//P1=0xff;
ysrxd=100;continue;
}
}
for (yszb=2;yszb;)
{
//P1=0xf4; P1=0xff;
//qwe
if (yszb==0) break;}
//RI=0;//qqqqqqqqqqqq
led_data=0xfb; // 设置显示状态
ledstm(led_data);
}
U16 readsettings(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
//uchar xdata *pm; // 地址指针
uchar *pm; // 地址指针
//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(0)); // 取指针地址
pm=(unsigned char *)(JZQ_ADD); // 取指针地址
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x81;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x05;
buf_ptr->buf0[6]=*(pm+5);
buf_ptr->buf0[7]=*(pm+6);
buf_ptr->buf0[8]=*(pm+7);
buf_ptr->buf0[9]=*(pm+12);
buf_ptr->buf0[10]=*(pm+13);
buf_ptr->buf0[11]=0x00;
buf_ptr->buf0[12]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=12;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[13]=info_check%0x0100;
buf_ptr->buf0[14]=info_check/0x0100;
buf_ptr->buf0[15]=0xDD;
return(15);
}
U16 loadsettings(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
//uchar xdata *pm; // 地址指针
uchar *pm; // 地址指针
//long data lngname;
U32 lngname;
//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(0)); // 取指针地址
pm=(unsigned char *)(JZQ_ADD); // 取指针地址
*(pm+5)=buf_ptr->buf0[6];
*(pm+6)=buf_ptr->buf0[7];
*(pm+7)=buf_ptr->buf0[8];
lngname=(carr_svr_name[0] / 0x10 * 1000 + carr_svr_name[0] % 0x10 * 100
+ carr_svr_name[1] / 0x10 * 10 + carr_svr_name[1] % 0x10);
*(pm+10)=lngname/0x0100;
*(pm+11)=lngname%0x0100;
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x8D;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
// 读取集中器时钟
U16 readclock(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x82;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x06;
rRTCCON=0x01;
buf_ptr->buf0[6]=rBCDYEAR;
buf_ptr->buf0[7]=rBCDMON;
buf_ptr->buf0[8]=rBCDDAY;
buf_ptr->buf0[9]=rBCDHOUR;
buf_ptr->buf0[10]=rBCDMIN;
buf_ptr->buf0[11]=rBCDSEC;
rRTCCON=0x00;
buf_ptr->buf0[12]=0x00;
buf_ptr->buf0[13]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=13;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[14]=info_check%0x0100;
buf_ptr->buf0[15]=info_check/0x0100;
buf_ptr->buf0[16]=0xDD;
return(16);
}
// 设置集中器时钟
//uint setclock(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -