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

📄 cdt1.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 3 页
字号:
  if((com1_rl1(l+8)==0x00)&&(com1_rl1(l+14)==0x01)&&(com1_rl1(l+13)==bchr(l+8))&&(com1_rl1(l+19)==bchr(l+14)))
  {  
  	dzh_in_pointer=0;
  	bridge=0;
     len=com1_rl1(l+4)-2;
     dzh_len=com1_rl1(l+11);
     dz_id=com1_rl1(l+9);
     dzh_type=com1_rl1(l+15);
	 dzh_in_pointer+=6;        
     dzh_2l_1(dzh_in_pointer+0)=0x00;
     dzh_2l_1(dzh_in_pointer+1)=com1_rl1(l+9);
     dzh_in_pointer+=2;
     for(y=0;y<len;y++)
     {
       dzh_2l_1(dzh_in_pointer+0)=com1_rl1(l+21+bridge);
       dzh_2l_1(dzh_in_pointer+1)=com1_rl1(l+22+bridge);          
       dzh_2l_1(dzh_in_pointer+2)=com1_rl1(l+23+bridge);          
       dzh_2l_1(dzh_in_pointer+3)=com1_rl1(l+24+bridge);          
       dzh_in_pointer+=4;
       bridge+=6;
     }
     //if(dzh_in_pointer>=66)  dzh_in_pointer=0;      
     bh_gong=com1_rl1(l+10);
     switch(bh_gong)
     {
        case  0x07:   
        cdt_dzh_a0=1; //传定值标志
        break;
        case  0x08:   
        cdt_dzh_a1=1; //写定值标志
        break;
        case  0x09:
        cdt_dzh_a2=1; //读定值标志
        break;
     }         
  }      
}
void cdt_yccl(void)
{
    IO_WORD l,data;
    
    l=com1_para(12);
    l=(l<<8)+com1_para(11);
    if ((yc_fm_para1x(yc_fm1_counter*3)==0xffff)||(yc_fm1_counter>l))//系数为0xffff返回
    {
        yc_fm1_counter=0;
        return;
    }
    else
    {
        switch (yc_fm_para1(yc_fm1_counter*6))//判功能码
        {
            case 0x00:      //new 智能单元
               if((yc_fm_para1(yc_fm1_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para1x(yc_fm1_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_1x(yc_fm1_counter)=data;
                  yc_fm1_counter++;	
                }
                else
                {
                  l=(yc_fm_para1(yc_fm1_counter*6+1)-1)*18+yc_fm_para1x(yc_fm1_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_1x(yc_fm1_counter)=data;                  
                  yc_fm1_counter++;
                }
                break;
            case 0x01:      //FC
                break;
            case 0x02:      //MCK
                l=(yc_fm_para1(yc_fm1_counter*6+1)-1)*18+yc_fm_para1x(yc_fm1_counter*3+1);//偏移量
                data=(yc_1lx(l)>>4)&0x0fff;//取数
                yc_2l_1x(yc_fm1_counter)=data;                
                yc_fm1_counter++;
                break;
            case 0x03:      //MTY
                l=(yc_fm_para1(yc_fm1_counter*6+1)-1)*18+yc_fm_para1x(yc_fm1_counter*3+1);
                data=(yc_1lx(l)>>4)&0x0fff;
                yc_2l_1x(yc_fm1_counter)=data;                
                yc_fm1_counter++;
                break;
            case 0x04:      //转发
                if((yc_fm_para1(yc_fm1_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para1x(yc_fm1_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_1x(yc_fm1_counter)=data;
                  yc_fm1_counter++;	
                }
                else
                {
                  l=(yc_fm_para1(yc_fm1_counter*6+1)-1)*18+yc_fm_para1x(yc_fm1_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_1x(yc_fm1_counter)=data;                  
                  yc_fm1_counter++;
                }
                break;
            case 0x05:      //周波
                break;
            case 0x06:      //总加
                break;
        }
    }
}
void cdt_ddcl(void)
{
    IO_WORD l,datal,datah; 
    IO_BYTE sort;
    l=com1_para(16);
    l=(l<<8)+com1_para(15); 
    if((dd_fm1_counter>=l)||(dd_fm_para1(dd_fm1_counter*2)==0xff))
    {
    	dd_fm1_counter=0;    
    }   

    sort=dd_fm_para1(dd_fm1_counter*2);
    sort=(sort>>6)&0x03;
    switch (sort)//判模块类型
    {
        case 0x00:      //new
             if((dd_fm_para1(dd_fm1_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para1(dd_fm1_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_1x(dd_fm1_counter*2)=datal;
              dd_2l_1x(dd_fm1_counter*2+1)=datah;
              dd_fm1_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm1_counter*2)&0x3f)-1)*4+dd_fm_para1(dd_fm1_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_1x(dd_fm1_counter*2)=datal;
              dd_2l_1x(dd_fm1_counter*2+1)=datah;
              dd_fm1_counter++;
            }
            break;
            
        case 0x01:      //MCK
            break;
        case 0x02:      //转发
            if((dd_fm_para1(dd_fm1_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para1(dd_fm1_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_1x(dd_fm1_counter*2)=datal;
              dd_2l_1x(dd_fm1_counter*2+1)=datah;
              dd_fm1_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm1_counter*2)&0x3f)-1)*4+dd_fm_para1(dd_fm1_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_1x(dd_fm1_counter*2)=datal;
              dd_2l_1x(dd_fm1_counter*2+1)=datah;
              dd_fm1_counter++;
            }
            break;
        case 0x03:      //备用                
            break;            
    }    
}
void  cdt_move(void)
{
    IO_WORD i,l,bb,n,ll;
    IO_BYTE k,j;    
    
    i=com1_para(14);
    i=(i<<8)|com1_para(13);
    if (i>512) i=512;
    i=(i+0x0f)&0xfff0;
    if((yx_fm1_counter*32)>=i)
    {
    	yx_fm1_counter=0;
    }
      for(bb=0;bb<2;bb++)
      {
    	l=0x00;
        for (k=0;k<16;k++)
        {
            ll=(yx_fm1_counter<<6)+bb*32+k*2;
            l=l>>1;
            if (yx_fm_para1(ll)!=0xff)
            {
                if((yx_fm_para1(ll)&0x3f)==0x3c)
                {
                  n=yx_fm_para1(ll+1)/8;
                  j=ioyx_1l(n)<<(7-(yx_fm_para1(ll+1)%8));
                  l=l|((j&0x80)<<8);	
                }
                else
                {
                  n=((yx_fm_para1(ll)&0x3f)-1)<<3;
                  n=yx_fm_para1(ll+1)/8+n;
                  j=yx_1l(n)<<(7-(yx_fm_para1(ll+1)%8));
                  l=l|((j&0x80)<<8);
                }                
            }            
        }
        yx_3l_1x(yx_fm1_counter*2+bb)=l;
      } 
}
 
        //yx_fm1_counter+=1;
    /*while(i!=0)
    {
        l=0x00;
        for (k=0;k<16;k++)
        {
            l=l>>1;
            if (yx_fm_para1(r)!=0xff)
            {
                if((yx_fm_para1(r)&0x3f)==0x3c)
                {
                  n=yx_fm_para1(r+1)/8;
                  j=ioyx_1l(n)<<(7-(yx_fm_para1(r+1)%8));
                  l=l|((j&0x80)<<8);	
                }
                else
                {
                  n=((yx_fm_para1(r)&0x3f)-1)<<3;
                  n=yx_fm_para1(r+1)/8+n;
                  j=yx_1l(n)<<(7-(yx_fm_para1(r+1)%8));
                  l=l|((j&0x80)<<8);
                }                
            }
            i--;
            r+=2;
        }
        yx_3l_1x(m)=l;
        m++;
    }*/

void cdt_yxcl(void)
{
 	unsigned long  d;

    cdt_move();
    if(power_count!=0)
    {
        if (yx_fm1_counter!=0)
        {
            yx_2l_1x(yx_fm1_counter*2)=yx_3l_1x(yx_fm1_counter*2);
            yx_2l_1x(yx_fm1_counter*2+1)=yx_3l_1x(yx_fm1_counter*2+1);
            yx_fm1_counter++;
        }
        else
        {
                power_count--;
            yx_2l_1x(yx_fm1_counter*2)=yx_3l_1x(yx_fm1_counter*2);
            yx_2l_1x(yx_fm1_counter*2+1)=yx_3l_1x(yx_fm1_counter*2+1);
            yx_fm1_counter++;
        }
    }
    else
    {
        
            d=yx_3l_1x(yx_fm1_counter*2+1)^yx_2l_1x(yx_fm1_counter*2+1);
            d=(d<<16)|(yx_3l_1x(yx_fm1_counter*2)^yx_2l_1x(yx_fm1_counter*2));
            if(d!=0)
            {
                cdt_cos_datcl(yx_fm1_counter);
                cdt_soe_datcl(yx_fm1_counter,d);
            }
            yx_fm1_counter+=1;
    }
}
void cdt_rec(void)
{
    IO_BYTE   i,j;
	com_int_tmout[1]=0;	//add 03-2-8
    com1_rl(cdt_rc1)=com_port1_dat;   //接收
    cdt_rc1++;
    cdt_rc++;
    if (cdt_rc1>127) cdt_rc1=cdt_rc=0;
/*    i=0x01;
    rrb(i);
    i&=0x10;
    if (i!=0)
    {
        i=0x00;j=0x30;
        wrb(i,j);
    }*/
    i=0x00;j=0x38;
    wrb(i,j);
    cdt_time_mark=0;
}
void yksele(IO_BYTE l)
{
    IO_BYTE k;

    k=bchr(l+8);
    if((com1_rl1(l+8)==0xe0) && (com1_rl1(l+13)==k))
    {
        cyksm1();
        cyk_sel_num=com1_rl1(l+10);
        cyk_sel_num=(cyk_sel_num<<8)+com1_rl1(l+11);
        cdt_ykmark=0x10;
        yktime1=18000;
        yktime=0x00;
        //yk_time1=1;
    }
}
void ykexcu(IO_BYTE l)
{
    if((com1_rl1(l+8)==0xe2) && com1_rl1(l+13)==bchr(l+8))
    {
        cyk_exe_num=com1_rl1(l+10);
        cyk_exe_num=(cyk_exe_num<<8)+com1_rl1(l+11);
        cdt_ykmark=0x10;
        yk_time=0x0;
        //yk_time1=1;
    }
}
void ykcanc(IO_BYTE l)
{
    if((com1_rl1(l+8)==0xe3) && com1_rl1(l+13)==bchr(l+8))
    {
        cyk_chx_num=com1_rl1(l+10);
        cyk_chx_num=(cyk_chx_num<<8)+com1_rl1(l+11);
        cdt_ykmark=0x10;
        //yk_time1=1;
    }
}
/***********对时************/
void upda_time(IO_BYTE l)
{
    if((com1_rl1(l+8)==0xee) && com1_rl1(l+13)==bchr(l+8)&& (com1_rl1(l+14)==0xef) && com1_rl1(l+19)==bchr(l+14))
    {
        sys_msecond=(com1_rl1(l+10)<<8)+(com1_rl1(l+9)&0x00ff)+500;
        sys_second=com1_rl1(l+11);
        second=com1_rl1(l+11);
        sys_minute=com1_rl1(l+12);
        minute=com1_rl1(l+12);
        sys_hour=com1_rl1(l+15);
        sys_day=com1_rl1(l+16);
        sys_month=com1_rl1(l+17);
        sys_year=com1_rl1(l+18);
    }
}
/**********接收处理**********/
void cdt_rec_cl(void)
{
    IO_BYTE i,l,k;

    l=cdt_rc;
    for (i=0;i<l;i++) com1_rl1(i)=com1_rl(i);
    cdt_rc=cdt_rc1=0;
    for (i=0;i<l;i++)
    {
        if ((com1_rl1(i)==com1_para(4))&&(com1_rl1(i+1)==com1_para(5))&&(com1_rl1(i+2)==0x71)&&(com1_rl1(i+6)==com1_para(8)))
        {
            k=bchr(i+2);
            if(com1_rl1(i+7)==k)
            {
                cdt_type=com1_rl1(i+3);
                switch(cdt_type)
                {
                case 0x61: yksele(i); //遥控选择
                break;
                case 0xc2: ykexcu(i); //遥控执行
                break;
                case 0xb3: ykcanc(i); //遥控撤消
                break;
                case 0xf4: yksele(i); //遥调选择
                break;
                case 0x85: ykexcu(i); //遥调执行
                break;
                case 0x26: ykcanc(i); //遥调撤消
                break;
                case 0x7a: upda_time(i);//对时
                break;
                case 0x3D: cdt_dzhcl(i);//定值
                break;
                }
            }
            return;
        }
    }
}
void cdt_cos_datcl(IO_WORD m)
{
    cdt_cos_data(cos_in_pointer+0)=0xf0+m;
    cdt_cos_data(cos_in_pointer+1)=yx_3l_1(m*4);
    cdt_cos_data(cos_in_pointer+2)=yx_3l_1(m*4+1);
    cdt_cos_data(cos_in_pointer+3)=yx_3l_1(m*4+2);
    cdt_cos_data(cos_in_pointer+4)=yx_3l_1(m*4+3);
    cos_in_pointer+=6;
    if (cos_in_pointer>=600) cos_in_pointer=0;
    yx_2l_1(m*4)=yx_3l_1(m*4);
    yx_2l_1(m*4+1)=yx_3l_1(m*4+1);
    yx_2l_1(m*4+2)=yx_3l_1(m*4+2);
    yx_2l_1(m*4+3)=yx_3l_1(m*4+3);
}

void cdt_soe_datcl(IO_WORD m,unsigned long int  d)
{
    IO_BYTE s;
    unsigned long int  e,l;
    for(s=0;s<32;s++)
    {
        e=d;
        if(e&0x01)
        {
            cdt_soe_data(soe_in_pointer+0)=0x80;
            cdt_soe_data(soe_in_pointer+1)=sys_msecond&0x00ff;
            cdt_soe_data(soe_in_pointer+2)=(sys_msecond>>8)&0x00ff;
            cdt_soe_data(soe_in_pointer+3)=sys_second;
            cdt_soe_data(soe_in_pointer+4)=sys_minute;
            cdt_soe_data(soe_in_pointer+6)=0x81;
            cdt_soe_data(soe_in_pointer+7)=sys_hour;
            cdt_soe_data(soe_in_pointer+8)=sys_day;
            cdt_soe_data(soe_in_pointer+9)=(m*32+s)&0x00ff;
            l=yx_3l_1x(m*2+1);
            l=(l<<16)|yx_3l_1x(m*2);
            if((l>>s)&0x01)
            cdt_soe_data(soe_in_pointer+10)=((m*32+s)>>8)|0x80;
            else {cdt_soe_data(soe_in_pointer+10)=(m*32+s)>>8; }
            soe_in_pointer+=12;
            if (soe_in_pointer>=1200) soe_in_pointer=0;
        }
        d>>=0x01;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -