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

📄 main.c

📁 集中数据采集系统中
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -