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

📄 cdt2.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 2 页
字号:
          sjzz62();
        }
        else
        {
          if(cdt_zlmark2==0x44)
          {
            cos_out_pointer2=cos_in_pointer2;
            sjzz62();
          }
          else
          {
            if(cdt_zcj2<3)
            {
              sjzz62();
            }
            else
            {
              sjyxbw2();
            }
          }
        }
    }
}
/*********soe***********/
void    sjsoe2 (void)
{
    cdt_zlmark2=0x45;
    com2_tl(cdt_in_counter2,0)=com0_para(4);
    com2_tl(cdt_in_counter2,1)=com0_para(5);
    com2_tl(cdt_in_counter2,2)=com0_para(4);
    com2_tl(cdt_in_counter2,3)=com0_para(5);
    com2_tl(cdt_in_counter2,4)=com0_para(4);
    com2_tl(cdt_in_counter2,5)=com0_para(5);
    com2_tl(cdt_in_counter2,6)=soez[0];
    com2_tl(cdt_in_counter2,7)=soez[1];
    com2_tl(cdt_in_counter2,8)=soez[2];
    com2_tl(cdt_in_counter2,9)=com0_para(8);//soez[3];
    com2_tl(cdt_in_counter2,10)=soez[4];
    com2_tl(cdt_in_counter2,11)=bch2(6);

    com2_tl(cdt_in_counter2,12)=cdt_soe_data2(soe_out_pointer2+0);
    com2_tl(cdt_in_counter2,13)=cdt_soe_data2(soe_out_pointer2+1);
    com2_tl(cdt_in_counter2,14)=cdt_soe_data2(soe_out_pointer2+2);
    com2_tl(cdt_in_counter2,15)=cdt_soe_data2(soe_out_pointer2+3);
    com2_tl(cdt_in_counter2,16)=cdt_soe_data2(soe_out_pointer2+4);
    com2_tl(cdt_in_counter2,17)=bch2(12);
    com2_tl(cdt_in_counter2,18)=cdt_soe_data2(soe_out_pointer2+6);
    com2_tl(cdt_in_counter2,19)=cdt_soe_data2(soe_out_pointer2+7);
    com2_tl(cdt_in_counter2,20)=cdt_soe_data2(soe_out_pointer2+8);
    com2_tl(cdt_in_counter2,21)=cdt_soe_data2(soe_out_pointer2+9);
    com2_tl(cdt_in_counter2,22)=cdt_soe_data2(soe_out_pointer2+10);
    com2_tl(cdt_in_counter2,23)=bch2(18);
    cdt_tc2[cdt_in_counter2]=24;
    cdt_in_counter2^=0x01;
    cdt_bz2_a0=0;
    cdt_soejs2--;
    if (cdt_soejs2==0)
    {
        cdt_soejs2=0;
        soe_out_pointer2+=12;
        if (soe_out_pointer2>=1200) soe_out_pointer2=0;
    }
}
/************组报头**********/
void    sjzz122 (void)
{
    cdt_f_cl2();
    cdt_zlmark2=*(cdt_zxta[cdt_yc_num2]+cdt_zxcount2);
    cdt_zxcount2++;
    if ((cdt_zlmark2==cdt_zmark2)&&(cdt_soejs2!=0)) cdt_bz2_a0=0x01;
    cdt_zcj2=cdt_f_led2[cdt_zlmark2-0x41];
    cdt_gong2=gongg[cdt_zlmark2-0x41];
    cdt_sjta2=(__far IO_BYTE*)com_sjdz2[cdt_zlmark2-0x41];

    com2_tl(cdt_in_counter2,0)=com0_para(4);
    com2_tl(cdt_in_counter2,1)=com0_para(5);
    com2_tl(cdt_in_counter2,2)=com0_para(4);
    com2_tl(cdt_in_counter2,3)=com0_para(5);
    com2_tl(cdt_in_counter2,4)=com0_para(4);
    com2_tl(cdt_in_counter2,5)=com0_para(5);
    com2_tl(cdt_in_counter2,6)=*tbz[cdt_zlmark2-0x41];
    com2_tl(cdt_in_counter2,7)=*(tbz[cdt_zlmark2-0x41]+1);
    com2_tl(cdt_in_counter2,8)=cdt_zcj2;
    com2_tl(cdt_in_counter2,9)=com0_para(8);//*(tbz[cdt_zlmark2-0x41]+3);
    com2_tl(cdt_in_counter2,10)=*(tbz[cdt_zlmark2-0x41]+4);
    com2_tl(cdt_in_counter2,11)=bch2(6);
    cdt_tc2[cdt_in_counter2]=12;
    cdt_in_counter2^=0x01;
    cdt_zxj2--;
}
/**********组信息字***********/
void    sjzz62 (void)
{
    if ((cdt_zcj2==0x01)&&(cdt_zlmark2==cdt_zmark2))
    {
        com2_tl(cdt_in_counter2,0)=0x8a;
        com2_tl(cdt_in_counter2,1)=zbzc2[0];
        com2_tl(cdt_in_counter2,2)=zbzc2[1];
        com2_tl(cdt_in_counter2,3)=zbzc2[0];
        com2_tl(cdt_in_counter2,4)=zbzc2[1];
        com2_tl(cdt_in_counter2,5)=bch2(0);
        cdt_gong2++;
        cdt_zcj2--;
        cdt_tc2[cdt_in_counter2]=0x06;
        cdt_in_counter2^=0x01;
    }
    else
    {
        com2_tl(cdt_in_counter2,0)=cdt_gong2++;
        com2_tl(cdt_in_counter2,1)=*cdt_sjta2++;
        com2_tl(cdt_in_counter2,2)=*cdt_sjta2++;
        com2_tl(cdt_in_counter2,3)=*cdt_sjta2++;
        com2_tl(cdt_in_counter2,4)=*cdt_sjta2++;
        com2_tl(cdt_in_counter2,5)=bch2(0);
        cdt_zcj2--;
        cdt_tc2[cdt_in_counter2]=0x06;
        cdt_in_counter2^=0x01;
    }
}
/*********计算板数**********/
void    cdt_f_cl2 (void)
{
    IO_BYTE i,j,k;

    i=0;j=0x10;
    k=cdt_yc_num2;
    if (k>2)
    {
        k-=2;
        if(k>6) k=6;
        i=k*0x10;
    }
    cdt_f_led2[0]=j;
    cdt_f_led2[1]=j;
    cdt_f_led2[2]=i;
    k=cdt_yx_num2;
    if(k>16) k=16;
    cdt_f_led2[3]=k;    
}
void    cdt_cl_num2(void)
{
    IO_WORD i;
    i=com0_para(12);
    i=(i<<8)+com0_para(11);
    cdt_yc_num2=(i+31)/32;
    i=com0_para(14);
    i=(i<<8)+com0_para(13);
    cdt_yx_num2=(i+31)/32;
}
void cdt_yccl2(void)
{
    IO_WORD l,data;
    
    l=com0_para(12);
    l=(l<<8)+com0_para(11);
    if ((yc_fm_para0x(yc_fm2_counter*3)==0xffff)||(yc_fm2_counter>l))//系数为0xffff返回
    {
        yc_fm2_counter=0;
        return;
    }
    else
    {
        switch (yc_fm_para0(yc_fm2_counter*6))//判功能码
        {
            case 0x00:      //new 智能单元
                if((yc_fm_para0(yc_fm2_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para0x(yc_fm2_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_2x(yc_fm2_counter)=data;
                  yc_fm2_counter++;	
                }
                else
                {
                  l=(yc_fm_para0(yc_fm2_counter*6+1)-1)*18+yc_fm_para0x(yc_fm2_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_2x(yc_fm2_counter)=data;
                  yc_fm2_counter++;
                }
                break;
            case 0x01:      //FC
                break;
            case 0x02:      //MCK
                l=(yc_fm_para0(yc_fm2_counter*6+1)-1)*18+yc_fm_para0x(yc_fm2_counter*3+1);//偏移量
                data=(yc_1lx(l)>>4)&0x0fff;//取数
                yc_2l_2x(yc_fm2_counter)=data;
                yc_fm2_counter++;
                break;
            case 0x03:      //MTY
                l=(yc_fm_para0(yc_fm2_counter*6+1)-1)*18+yc_fm_para0x(yc_fm2_counter*3+1);
                data=(yc_1lx(l)>>4)&0x0fff;
                yc_2l_2x(yc_fm2_counter)=data;
                yc_fm2_counter++;
                break;
            case 0x04:      //转发
                if((yc_fm_para0(yc_fm2_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para0x(yc_fm2_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_2x(yc_fm2_counter)=data;
                  yc_fm2_counter++;	
                }
                else
                {
                  l=(yc_fm_para0(yc_fm2_counter*6+1)-1)*18+yc_fm_para0x(yc_fm2_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_2x(yc_fm2_counter)=data;
                  yc_fm2_counter++;
                }
                break;
            case 0x05:      //周波
                break;
            case 0x06:      //总加
                break;
        }
    }
}
void cdt_ddcl2(void)
{
    IO_WORD l,datal,datah; 
    IO_BYTE sort;
    l=com0_para(16);
    l=(l<<8)+com0_para(15);  
    if((dd_fm2_counter>=l)||(dd_fm_para0(dd_fm2_counter*2)==0xff))
    {
    	dd_fm2_counter=0;
    
    }    
    sort=dd_fm_para0(dd_fm2_counter*2);
    sort=(sort>>6)&0x03;
    switch (sort)//判模块类型
    {
        case 0x00:      //new
             if((dd_fm_para0(dd_fm2_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para0(dd_fm2_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_2x(dd_fm2_counter*2)=datal;
              dd_2l_2x(dd_fm2_counter*2+1)=datah;
              dd_fm2_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm2_counter*2)&0x3f)-1)*4+dd_fm_para0(dd_fm2_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_2x(dd_fm2_counter*2)=datal;
              dd_2l_2x(dd_fm2_counter*2+1)=datah;
              dd_fm2_counter++;
            }
            break;
        case 0x01:      //MCK
            break;
        case 0x02:      //转发
            if((dd_fm_para0(dd_fm2_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para0(dd_fm2_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_2x(dd_fm2_counter*2)=datal;
              dd_2l_2x(dd_fm2_counter*2+1)=datah;
              dd_fm2_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm2_counter*2)&0x3f)-1)*4+dd_fm_para0(dd_fm2_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_2x(dd_fm2_counter*2)=datal;
              dd_2l_2x(dd_fm2_counter*2+1)=datah;
              dd_fm2_counter++;
            }
            break;
        case 0x03:      //备用                
            break;            
    }    
}
void  cdt_move2(void)
{
    IO_WORD i,l,bb,n,ll;
    IO_BYTE k,j;    
    
    i=com0_para(14);
    i=(i<<8)|com0_para(13);
    if (i>512) i=512;
    i=(i+0x0f)&0xfff0;
    if((yx_fm2_counter*32)>=i)
    {
    	yx_fm2_counter=0;
    }
      for(bb=0;bb<2;bb++)
      {
    	l=0x00;
        for (k=0;k<16;k++)
        {
            ll=(yx_fm2_counter<<6)+bb*32+k*2;
            l=l>>1;
            if (yx_fm_para0(ll)!=0xff)
            {
                if((yx_fm_para0(ll)&0x3f)==0x3c)
                {
                  n=yx_fm_para0(ll+1)/8;
                  j=ioyx_1l(n)<<(7-(yx_fm_para0(ll+1)%8));
                  l=l|((j&0x80)<<8);	
                }
                else
                {
                  n=((yx_fm_para0(ll)&0x3f)-1)<<3;
                  n=yx_fm_para0(ll+1)/8+n;
                  j=yx_1l(n)<<(7-(yx_fm_para0(ll+1)%8));
                  l=l|((j&0x80)<<8);
                }                
            }            
        }
        yx_3l_2x(yx_fm2_counter*2+bb)=l;
      } 
}
void cdt_yxcl2(void)
{
    
 	unsigned long  d;

    cdt_move2();
    if(power_count!=0)
    {
        if (yx_fm2_counter!=0)
        {
            yx_2l_2x(yx_fm2_counter*2)=yx_3l_2x(yx_fm2_counter*2);
            yx_2l_2x(yx_fm2_counter*2+1)=yx_3l_2x(yx_fm2_counter*2+1);
            yx_fm2_counter++;
        }
        else
        {
                power_count--;
            yx_2l_2x(yx_fm2_counter*2)=yx_3l_2x(yx_fm2_counter*2);
            yx_2l_2x(yx_fm2_counter*2+1)=yx_3l_2x(yx_fm2_counter*2+1);
            yx_fm2_counter++;
        }
    }
    else
    {
        
            d=yx_3l_2x(yx_fm2_counter*2+1)^yx_2l_2x(yx_fm2_counter*2+1);
            d=(d<<16)|(yx_3l_2x(yx_fm2_counter*2)^yx_2l_2x(yx_fm2_counter*2));
            if(d!=0)
            {
                cdt_cos_datcl2(yx_fm2_counter);
                cdt_soe_datcl2(yx_fm2_counter,d);
            }
            yx_fm2_counter+=1;
    }
}
void cdt_rec2(void)  //////////////COM0 接收中断
{
    IO_BYTE   i,j;
	com_int_tmout[2]=0;	//add 03-2-8
    com2_rl(cdt_rc12)=com_port2_dat;   //接收
    cdt_rc12++;
    cdt_rc2++;
    if (cdt_rc12>63) cdt_rc12=cdt_rc2=0;
/*    i=0x01;
    rrb2(i);
    i&=0x10;
    if (i!=0)
    {
        i=0x00;j=0x30;
        wrb2(i,j);
    }*/
    i=0x00;j=0x38;
    wrb2(i,j);
    cdt_time_mark2=0;
}
void yksele2(IO_BYTE l)
{
    IO_BYTE k;

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

    l=cdt_rc2;
    for (i=0;i<l;i++) com2_rl1(i)=com2_rl(i);
    cdt_rc2=cdt_rc12=0;
    for (i=0;i<l;i++)
    {
        if ((com2_rl1(i)==com0_para(4))&&(com2_rl1(i+1)==com0_para(5))&&(com2_rl1(i+2)==0x71)&&(com2_rl1(i+6)==com0_para(8)))
        {
            k=bchr2(i+2);
            if(com2_rl1(i+7)==k)
            {
                cdt_type2=com2_rl1(i+3);
                switch(cdt_type2)
                {
                case 0x61: yksele2(i); //遥控选择
                break;
                case 0xc2: ykexcu2(i); //遥控执行
                break;
                case 0xb3: ykcanc2(i); //遥控撤消
                break;
                case 0xf4: yksele2(i); //遥调选择
                break;
                case 0x85: ykexcu2(i); //遥调执行
                break;
                case 0x26: ykcanc2(i); //遥调撤消
                break;
                case 0x7a: upda_time2(i);//对时
                break;
                }
            }
            return;
        }
    }
}
void cdt_cos_datcl2(IO_WORD m)
{
    cdt_cos_data2(cos_in_pointer2+0)=0xf0+m;
    cdt_cos_data2(cos_in_pointer2+1)=yx_3l_2(m*4);
    cdt_cos_data2(cos_in_pointer2+2)=yx_3l_2(m*4+1);
    cdt_cos_data2(cos_in_pointer2+3)=yx_3l_2(m*4+2);
    cdt_cos_data2(cos_in_pointer2+4)=yx_3l_2(m*4+3);
    cos_in_pointer2+=6;
    if (cos_in_pointer2>=600) cos_in_pointer2=0;
    yx_2l_2(m*4)=yx_3l_2(m*4);
    yx_2l_2(m*4+1)=yx_3l_2(m*4+1);
    yx_2l_2(m*4+2)=yx_3l_2(m*4+2);
    yx_2l_2(m*4+3)=yx_3l_2(m*4+3);
}

void cdt_soe_datcl2(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_data2(soe_in_pointer2+0)=0x80;
            cdt_soe_data2(soe_in_pointer2+1)=sys_msecond&0x00ff;
            cdt_soe_data2(soe_in_pointer2+2)=(sys_msecond>>8)&0x00ff;
            cdt_soe_data2(soe_in_pointer2+3)=sys_second;
            cdt_soe_data2(soe_in_pointer2+4)=sys_minute;
            cdt_soe_data2(soe_in_pointer2+6)=0x81;
            cdt_soe_data2(soe_in_pointer2+7)=sys_hour;
            cdt_soe_data2(soe_in_pointer2+8)=sys_day;
            cdt_soe_data2(soe_in_pointer2+9)=(m*32+s)&0x00ff;
            l=yx_3l_2x(m*2+1);
            l=(l<<16)|yx_3l_2x(m*2);
            if((l>>s)&0x01)
            cdt_soe_data2(soe_in_pointer2+10)=((m*32+s)>>8)|0x80;
            else {cdt_soe_data2(soe_in_pointer2+10)=(m*32+s)>>8; }
            soe_in_pointer2+=12;
            if (soe_in_pointer2>=1200) soe_in_pointer2=0;
        }
        d>>=0x01;
    }
}

⌨️ 快捷键说明

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