📄 main.c
字号:
cww:
i=buf_ptr->buf0[14]&0x30;
if(i==0x30) yszb=130;
else if(i==0x20) yszb=100;
else if (i==0x10) yszb=80;
else yszb=65;
zbdatpc(yszb);
PLMEND:
// P1=0xf1;
ysrxd=80;
if(buf_ptr->buf0[0]=='D' && buf_ptr->buf0[1]=='A' && buf_ptr->buf0[2]=='T')
{
if(buf_ptr->buf0[4]!=0xbb) goto rcv1end; // 集中器号判断
if(buf_ptr->buf0[5]!=0xbb) goto rcv1end;
if(buf_ptr->buf0[6]!=0xbb) goto rcv1end;
if(buf_ptr->buf0[7]!=0x81) goto rcv1end; // 返回命令码 C 判断
if(a123[0]!=buf_ptr->buf0[11]) goto rcv1end;
if(a123[1]!=buf_ptr->buf0[12]) goto rcv1end;
if(a123[2]!=buf_ptr->buf0[13]) goto rcv1end;
//ewq if(int3==0)ledst(0xef);
return(1);
}
else
{
rcv1end:
return(0);
}
}
U8 PLM_snd_rcv2()
{
unsigned char j,w;
// if(int2==0)
// {
yszb=8;
while(1)
{
if(yszb==0) break;
// P1=0xf4; P1=0xff;
//qwe
}
// }
fsnd();
// buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
buf_ptr->buf0[0] = buf_ptr->buf0[0]-4;
for(w=0;w<3;w++) if (wr_82502(buf_ptr->buf0[0])) break ;
for(j=0;j<buf_ptr->buf0[0];j++)
{
for(w=0;w<3;w++)
if(wr_82502(buf_ptr->buf0[j+3])) break ;
}
w=buf_ptr->buf0[14]&0x30;
if(w==0x30) yszb=130;
else if (w==0x20) yszb=100;
else if (w==0x10) yszb=80;
else yszb=65;
zbdatpc(yszb);
if(buf_ptr->buf0[0]=='D' && buf_ptr->buf0[1]=='A' && buf_ptr->buf0[2]=='T')
{
if(buf_ptr->buf0[4]!=0xbb) goto rcv2end; // 集中器号判断
if(buf_ptr->buf0[5]!=0xbb) goto rcv2end;
if(buf_ptr->buf0[6]!=0xbb) goto rcv2end;
if(buf_ptr->buf0[7]!=0x81) goto rcv2end; // 返回命令码 C 判断
//ewq if(int3==0)ledst(0xef);
return(1);
}
else
{
rcv2end:
return(0);
}
}
void pcrxd(void)
{
U8 i,j,s,len,h,tempp,ma;
U8 x_data;
U8 *pm;
U16 c,cj,n,cc;
//P1=0xf4; P1=0xff;
//qwe
x_data=0;
ledstm(0xef);
// if(int2==0) goto int2rxd;
//int2rxd:
led_data=led_data&0xcf;
//pm=0x1fff;P1=0xf6;*pm=led_data;P1=0xff; // 设置显示状态
ledstm(led_data);//qh add
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
x_data=0;ma=0;
for (ysrxd=500; ysrxd;) // 延时5秒
{
//P1=0xf4;P1=0xf1;
//qwe
if(ysrxd==0) break;
if(x_data>120) break;
// if(!RI) continue;
// RI=0;
if((rUTRSTAT0&0x1)==0) continue;
// if(SBUF!='R')
tempp=rURXH0;
if(tempp != 'R')
{x_data++; continue;}//qh 过滤'R'
x_data=0;
buf_ptr->buf0[0]=buf_ptr->buf0[1]=buf_ptr->buf0[2]=0xff;//qh 清缓冲区
ysrxd=40;
while(ysrxd)
{
//if(RI)
if((rUTRSTAT0&0x1)==1)
{ //RI=0;
//buf_ptr->buf0[0]=SBUF;
buf_ptr->buf0[0]=rURXH0;
len=buf_ptr->buf0[0];
break;} // 接收长度
else if(ysrxd==0) break;
//P1=0xf4;P1=0xff;
//qwe
}
if(!ysrxd) continue; // 延时到 退出
if(len==0)
{ysrxd=100;continue;} // 长度为0 继续等待接收
if(len>=0x60)
{ysrxd=100;continue;} // 长度超界 继续等待接收
len--;
for(i=1;i<=len;i++)
{
for(ysrxd=20;ysrxd;)
{
//if(RI)
if((rUTRSTAT0&0x1)==1)
{
//RI=0;
//buf_ptr->buf0[i]=SBUF; // 接收数据
buf_ptr->buf0[i]=rURXH0; // 接收数据
ysrxd=10;
break;
}
//P1=0xf4;P1=0xf1; // 清狗
//qwe
if(ysrxd==0) break;
}
if(!ysrxd){i=0;goto RETFOR;}
}
//P1=0xf4; P1=0xff;
//qwe
s=0;
for(i=0;i<len;i++)
s=s+buf_ptr->buf0[i]; // 判校验和
if(s==buf_ptr->buf0[i])
{ysrxd=80; i=1;}
else i=0;
RETFOR:
ysrxd=100;
if(i==0){i=0;continue;}
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
if(buf_ptr->buf0[1]==3) break;
if(buf_ptr->buf0[1]==1)
{
//P1=0xf1;
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
len=buf_ptr->buf0[0]-3; s=0;
for(i=0;i<len;i++)
{
h=0;
for(j=1;j<0x0e;j++)
if(buf_ptr->buf0[i+2]==j){h=1;break;}
if(h==0){buf_ptr->buf0[s]=buf_ptr->buf0[i+2];s++;}
}
j=0;
if(s!=0)
{
txdbyte('A');
txdbyte(s+3);
txdbyte(0);j=s+3;
for(i=0;i<s;i++)
{txdbyte(buf_ptr->buf0[i]);j=j+buf_ptr->buf0[i];}
txdbyte(j);
}
else
{
txdbyte('A');
txdbyte(13); // 长度
txdbyte(2);
txdbyte(4);txdbyte(5);txdbyte(6);txdbyte(7);
txdbyte(8);txdbyte(9);txdbyte(0x0a);txdbyte(0x0b);
txdbyte(0x0c);txdbyte(0x0d);
txdbyte(13+2+4+5+6+7+8+9+0x0a+0x0b+0x0c+0x0d); // 累加和
}
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]>0x0d)
{
txdbyte('A');txdbyte(4);txdbyte(0);
txdbyte(buf_ptr->buf0[1]);
//P1=0xf1;
s=buf_ptr->buf0[1]+4;
txdbyte(s);
//P1=0xff;
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==0x0d)
{
for (i=0;i<9;i++)
if(buf_ptr->buf0[i+6]!=mima[i]) goto mimaer1;
ma=1;
txdbyte('A');txdbyte(0);
ysrxd=100; continue;
mimaer1:
for(i=0;i<9;i++)
if(buf_ptr->buf0[i+6]!=buf_ptr->buf3[i]) goto mimaer2;
ma=1;
for(i=0;i<9;i++)
mima[i]=buf_ptr->buf0[i+6];
txdbyte('A');txdbyte(0);
ysrxd=100; continue;
mimaer2:
for(i=0;i<9;i++)
if(buf_ptr->buf0[i+6]!=buf_ptr->buf3[i+100]) goto mimaer;
ma=1;
for(i=0;i<9;i++)
{
mima[i]=buf_ptr->buf0[i+6];
buf_ptr->buf3[i]=buf_ptr->buf0[i+6];
}
txdbyte('A'); txdbyte(0);
ysrxd=100; continue;
mimaer:
ma=0;
txdbyte('A');
for(i=0;i<16;i++)
txdbyte(buf_ptr->buf0[i]); // 实用
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==0x0c)
{
// 52 10 0C 00 00 00 02 30 30 30 30 30 30 30 30 30 CE
//pm=(unsigned char xdata *)(JZQ_ADD); // 取指针地址
pm=(unsigned char *)(JZQ_ADD); // 取指针地址
//dat_ptr=(DAT_ITEM xdata *)pm;
dat_ptr=(DAT_ITEM *)pm;
if(ma==1)
{
for (i=0; i<9; i++)
{
mima[i]=buf_ptr->buf0[i+6];
buf_ptr->buf3[i]=buf_ptr->buf0[i+6];
buf_ptr->buf3[i+100]=buf_ptr->buf0[i+6];
}
miyao[0]='M'; miyao[1]='I'; miyao[2]='Y';
miyao[3]='A'; miyao[4]='O';
txdbyte('A'); txdbyte(0);
ysrxd=100; continue;
}
txdbyte('E'); txdbyte(0);
ysrxd=100; continue;
}
if(ma==1) goto mimast;
else
{
if(buf_ptr->buf0[1]==5) goto mimast;
if(buf_ptr->buf0[1]==7)
if(buf_ptr->buf0[0]==3) goto mimast;
ma=0;
ysrxd=100; continue;
}
mimast:
if(buf_ptr->buf0[1]==4)
{
//P1=0xf4;P1=0xf1;
//qwe
//buf_ptr =(HBUF xdata *)BUF_ADD;
buf_ptr =(HBUF *)BUF_ADD;
//c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3]; //取地址
c=256*(U16)buf_ptr->buf0[2]+(U16)buf_ptr->buf0[3]; //取地址
pm=(unsigned char *)(JZQ_ADD+DAT_ADD*c); // 取指针地址
len=buf_ptr->buf0[0]-1;
for(i=0,len-=5;i<=len;i++) *pm++=buf_ptr->buf0[i+4];
for(;i<DAT_ADD;i++) *pm++=0;
if(c)
{
//dat_ptr=(DAT_ITEM xdata *)pm;
dat_ptr=(DAT_ITEM *)pm;
dat_ptr->e_cnt=255; // 未抄计次
//if(h==0) dat_ptr->zjq_len=c;
dat_ptr->zjq_len=c;
//if(h==1) dat_ptr->zjq_len=c+447;
//if(h==2) dat_ptr->zjq_len=c+894;
}
//P1=0xff;
c_zb=1; loop_l=0;loop_z=0;c_zbpo=0;
txdbyte('A');txdbyte(0);
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==5)
{
//P1=0xf1;
//buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
//c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3]; //取地址
c=256*(U16)buf_ptr->buf0[2]+(U16)buf_ptr->buf0[3]; //取地址
//c=comp1(c);
//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*c);
pm=(unsigned char *)(JZQ_ADD+DAT_ADD*c);
//dat_ptr=(DAT_ITEM xdata *)pm;
dat_ptr=(DAT_ITEM *)pm;
if(c) len=0x18; // 电表库长度 36;
else len=28; // 集中器库长度 27;
txdbyte('A'); txdbyte(len); txdbyte(5);
s=0;
if(c!=0)
{
txdbyte(buf_ptr->buf0[2]); txdbyte(buf_ptr->buf0[3]);
s=buf_ptr->buf0[2]+buf_ptr->buf0[3];
}
else s=0;
s=s+len+5;
if(len==0x18)
{
if(dat_ptr->pre_sno!=0){len=len-2;goto fash;}
if(dat_ptr->s_xh==0){len=len-2;goto fash;}
len=len-7;
for(i=0;i<len;i++)
{
txdbyte(*pm);
s+=*pm++;
}
i=dat_ptr->s_xh>>8;
s+=i; txdbyte(i);
//i=(char)dat_ptr->s_xh;
i=(char)dat_ptr->s_xh;//qqqqqqqqqqqq
s+=i; txdbyte(i);
}
else
{
fash:
for(len-=3,i=0;i<len;i++)
{
txdbyte(*pm);
s+=*pm++;
}
}
txdbyte(s);
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==6)
{
// if(int4==1)
// if (g_md==0xa3)
// initsys(1);
//P1=0xf1; buf_ptr = (HBUF xdata *)BUF_ADD;
buf_ptr = (HBUF *)BUF_ADD;
if((buf_ptr->buf0[2]&0x01)==0x0) // 无 中继标志
{
if(PLM_snd_rcv2())
{
// if(int2!=0 )
// if (int4!=0)
// if (g_md==0xa3) initsys(2); // GSM
txdbyte('A');
len=buf_ptr->buf0[3]+3; txdbyte(len); txdbyte(6); s=len+6;
len=len-3;
for(i=0;i<len;i++)
{
txdbyte(buf_ptr->buf0[i+4]);
s+=buf_ptr->buf0[i+4];
}
txdbyte(s);
}
else
{
// if(int2!=0)
// if(int4!=0)
// if(g_md==0xa3) initsys(2); // GSM
txdbyte('A'); txdbyte(0);
}
}
else // 有中继标志
{
if(PLM_snd_rcv1())
{
// if(int2!=0)
// if(int4!=0)
// if(g_md==0xa3) initsys(2); // GSM
txdbyte('A');
len=buf_ptr->buf0[3]+3; txdbyte(len); txdbyte(6); s=len+6;
len=len-3;
for(i=0;i<len;i++)
{
txdbyte(buf_ptr->buf0[i+4]);
s+=buf_ptr->buf0[i+4];
}
txdbyte(s);
}
else
{
// if(int2!=0)
// if(int4!=0)
// if(g_md==0xa3) initsys(2); // GSM
txdbyte('A'); txdbyte(0);
}
}
// if(int2!=0)
// if(int4!=0)
// if(g_md==0xa3)initsys(2);
//P1=0xf4; P1=0xff;
//qwe
ysrxd=100; continue;
}
if(buf_ptr->buf0[1]==7)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -