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

📄 cdt0.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 2 页
字号:
          }
          sjzz60();
        }
        else
        {
          if(cdt_zlmark0==0x44)
          {
            cos_out_pointer0=cos_in_pointer0;
            sjzz60();
          }
          else
          {
            if(cdt_zcj0<3)
            {
              sjzz60();
            }
            else
            {
              sjyxbw0();
            }
          }
        }
    }
}
/*********soe***********/
void    sjsoe0 (void)
{
    cdt_zlmark0=0x45;
    com0_tl(cdt_in_counter0,0)=com0_para(4);
    com0_tl(cdt_in_counter0,1)=com0_para(5);
    com0_tl(cdt_in_counter0,2)=com0_para(4);
    com0_tl(cdt_in_counter0,3)=com0_para(5);
    com0_tl(cdt_in_counter0,4)=com0_para(4);
    com0_tl(cdt_in_counter0,5)=com0_para(5);
    com0_tl(cdt_in_counter0,6)=soez[0];
    com0_tl(cdt_in_counter0,7)=soez[1];
    com0_tl(cdt_in_counter0,8)=soez[2];
    com0_tl(cdt_in_counter0,9)=com0_para(8);//soez[3];
    com0_tl(cdt_in_counter0,10)=soez[4];
    com0_tl(cdt_in_counter0,11)=bch0(6);

    com0_tl(cdt_in_counter0,12)=cdt_soe_data0(soe_out_pointer0+0);
    com0_tl(cdt_in_counter0,13)=cdt_soe_data0(soe_out_pointer0+1);
    com0_tl(cdt_in_counter0,14)=cdt_soe_data0(soe_out_pointer0+2);
    com0_tl(cdt_in_counter0,15)=cdt_soe_data0(soe_out_pointer0+3);
    com0_tl(cdt_in_counter0,16)=cdt_soe_data0(soe_out_pointer0+4);
    com0_tl(cdt_in_counter0,17)=bch0(12);
    com0_tl(cdt_in_counter0,18)=cdt_soe_data0(soe_out_pointer0+6);
    com0_tl(cdt_in_counter0,19)=cdt_soe_data0(soe_out_pointer0+7);
    com0_tl(cdt_in_counter0,20)=cdt_soe_data0(soe_out_pointer0+8);
    com0_tl(cdt_in_counter0,21)=cdt_soe_data0(soe_out_pointer0+9);
    com0_tl(cdt_in_counter0,22)=cdt_soe_data0(soe_out_pointer0+10);
    com0_tl(cdt_in_counter0,23)=bch0(18);
    cdt_tc0[cdt_in_counter0]=24;
    cdt_in_counter0^=0x01;
    cdt_bz0_a0=0;
    cdt_soejs0--;
    if (cdt_soejs0==0)
    {
        cdt_soejs0=0;
        soe_out_pointer0+=12;
        if (soe_out_pointer0>=1200) soe_out_pointer0=0;
    }
}
/************组报头**********/
void    sjzz120 (void)
{
    cdt_f_cl0();
    cdt_zlmark0=*(cdt_zxta[cdt_yc_num0]+cdt_zxcount0);
    cdt_zxcount0++;
    if ((cdt_zlmark0==cdt_zmark0)&&(cdt_soejs0!=0)) cdt_bz0_a0=0x01;
    cdt_zcj0=cdt_f_led0[cdt_zlmark0-0x41];
    cdt_gong0=gongg[cdt_zlmark0-0x41];
    cdt_sjta0=(__far IO_BYTE*)com_sjdz0[cdt_zlmark0-0x41];

    com0_tl(cdt_in_counter0,0)=com0_para(4);
    com0_tl(cdt_in_counter0,1)=com0_para(5);
    com0_tl(cdt_in_counter0,2)=com0_para(4);
    com0_tl(cdt_in_counter0,3)=com0_para(5);
    com0_tl(cdt_in_counter0,4)=com0_para(4);
    com0_tl(cdt_in_counter0,5)=com0_para(5);
    com0_tl(cdt_in_counter0,6)=*tbz[cdt_zlmark0-0x41];
    com0_tl(cdt_in_counter0,7)=*(tbz[cdt_zlmark0-0x41]+1);
    com0_tl(cdt_in_counter0,8)=cdt_zcj0;
    com0_tl(cdt_in_counter0,9)=com0_para(8);//*(tbz[cdt_zlmark0-0x41]+3);
    com0_tl(cdt_in_counter0,10)=*(tbz[cdt_zlmark0-0x41]+4);
    com0_tl(cdt_in_counter0,11)=bch0(6);
    cdt_tc0[cdt_in_counter0]=12;
    cdt_in_counter0^=0x01;
    cdt_zxj0--;
}
/**********组信息字***********/
void    sjzz60 (void)
{
    if ((cdt_zcj0==0x01)&&(cdt_zlmark0==cdt_zmark0))
    {
        com0_tl(cdt_in_counter0,0)=0x8a;
        com0_tl(cdt_in_counter0,1)=zbzc0[0];
        com0_tl(cdt_in_counter0,2)=zbzc0[1];
        com0_tl(cdt_in_counter0,3)=zbzc0[0];
        com0_tl(cdt_in_counter0,4)=zbzc0[1];
        com0_tl(cdt_in_counter0,5)=bch0(0);
        cdt_gong0++;
        cdt_zcj0--;
        cdt_tc0[cdt_in_counter0]=0x06;
        cdt_in_counter0^=0x01;
    }
    else
    {
        com0_tl(cdt_in_counter0,0)=cdt_gong0++;
        com0_tl(cdt_in_counter0,1)=*cdt_sjta0++;
        com0_tl(cdt_in_counter0,2)=*cdt_sjta0++;
        com0_tl(cdt_in_counter0,3)=*cdt_sjta0++;
        com0_tl(cdt_in_counter0,4)=*cdt_sjta0++;
        com0_tl(cdt_in_counter0,5)=bch0(0);
        cdt_zcj0--;
        cdt_tc0[cdt_in_counter0]=0x06;
        cdt_in_counter0^=0x01;
    }
}
/*********计算板数**********/
void    cdt_f_cl0 (void)
{
    IO_BYTE i,j,k;

    i=0;j=0x10;
    k=cdt_yc_num0;
    if (k>2)
    {
        k-=2;
        if(k>6) k=6;
        i=k*0x10;
    }
    cdt_f_led0[0]=j;
    cdt_f_led0[1]=j;
    cdt_f_led0[2]=i;
    k=cdt_yx_num0;
    if(k>16) k=16;
    cdt_f_led0[3]=k;    
}
void    cdt_cl_num0(void)
{
    IO_WORD i;
    i=com0_para(12);
    i=(i<<8)+com0_para(11);
    cdt_yc_num0=(i+31)/32;
    i=com0_para(14);
    i=(i<<8)+com0_para(13);
    cdt_yx_num0=(i+31)/32;
}
void cdt_yccl0(void)
{
    IO_WORD l,data;
    
    l=com0_para(12);
    l=(l<<8)+com0_para(11);
    if ((yc_fm_para0x(yc_fm0_counter*3)==0xffff)||(yc_fm0_counter>l))//系数为0xffff返回
    {
        yc_fm0_counter=0;
        return;
    }
    else
    {
        switch (yc_fm_para0(yc_fm0_counter*6))//判功能码
        {
            case 0x00:      //new
                 if((yc_fm_para0(yc_fm0_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para0x(yc_fm0_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_0x(yc_fm0_counter)=data;
                  yc_fm0_counter++;	
                }
                else
                {
                  l=(yc_fm_para0(yc_fm0_counter*6+1)-1)*18+yc_fm_para0x(yc_fm0_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_0x(yc_fm0_counter)=data;                  
                  yc_fm0_counter++;
                }
                break;
            case 0x01:      //FC
                break;
            case 0x02:      //MCK
                l=(yc_fm_para0(yc_fm0_counter*6+1)-1)*18+yc_fm_para0x(yc_fm0_counter*3+1);//偏移量
                data=(yc_1lx(l)>>4)&0x0fff;//取数
                yc_2l_0x(yc_fm0_counter)=data;
                yc_fm0_counter++;
                break;
            case 0x03:      //MTY
                l=(yc_fm_para0(yc_fm0_counter*6+1)-1)*18+yc_fm_para0x(yc_fm0_counter*3+1);
                data=(yc_1lx(l)>>4)&0x0fff;
                yc_2l_0x(yc_fm0_counter)=data;
                yc_fm0_counter++;
                break;
            case 0x04:      //转发
                if((yc_fm_para0(yc_fm0_counter*6+1)&0x3f)==0x3c)
                {
                  l=yc_fm_para0x(yc_fm0_counter*3+1);
                  data=ioyc_1lx(l)&0x0fff;
                  yc_2l_0x(yc_fm0_counter)=data;
                  yc_fm0_counter++;	
                }
                else
                {
                  l=(yc_fm_para0(yc_fm0_counter*6+1)-1)*18+yc_fm_para0x(yc_fm0_counter*3+1);
                  data=yc_1lx(l)&0x0fff;
                  yc_2l_0x(yc_fm0_counter)=data;                  
                  yc_fm0_counter++;
                }
                break;
            case 0x05:      //周波
                break;
            case 0x06:      //总加
                break;
        }
    }
}
void cdt_ddcl0(void)
{
    IO_WORD l,datal,datah; 
    IO_BYTE sort;
    l=com0_para(16);
    l=(l<<8)+com0_para(15);  
    if((dd_fm0_counter>=l)||(dd_fm_para0(dd_fm0_counter*2)==0xff))
    {
    	dd_fm0_counter=0;    
    }
  
    sort=dd_fm_para0(dd_fm0_counter*2);
    sort=(sort>>6)&0x03;
    switch (sort)//判模块类型
    {
        case 0x00:      //new
             if((dd_fm_para0(dd_fm0_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para0(dd_fm0_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_0x(dd_fm0_counter*2)=datal;
              dd_2l_0x(dd_fm0_counter*2+1)=datah;
              dd_fm0_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm0_counter*2)&0x3f)-1)*4+dd_fm_para0(dd_fm0_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_0x(dd_fm0_counter*2)=datal;
              dd_2l_0x(dd_fm0_counter*2+1)=datah;
              dd_fm0_counter++;
            }
            break;
        case 0x01:      //MCK
            break;
        case 0x02:      //转发
            if((dd_fm_para0(dd_fm0_counter*2)&0x3f)==0x3c)
            {
              l=dd_fm_para0(dd_fm0_counter*2+1);
              datal=iodd_1lx(l*2);
              datah=iodd_1lx(l*2+1)&0x20ff;
              dd_2l_0x(dd_fm0_counter*2)=datal;
              dd_2l_0x(dd_fm0_counter*2+1)=datah;
              dd_fm0_counter++;	
            }
            else
            {
              l=((dd_fm_para0(dd_fm0_counter*2)&0x3f)-1)*4+dd_fm_para0(dd_fm0_counter*2+1);//偏移量
              datal=dd_1lx(l*2);          //取数
              datah=dd_1lx(l*2+1)&0x20ff;
              dd_2l_0x(dd_fm0_counter*2)=datal;
              dd_2l_0x(dd_fm0_counter*2+1)=datah;
              dd_fm0_counter++;
            }
            break;
        case 0x03:      //备用                
            break;            
    }    
}
void  cdt_move0(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_fm0_counter*32)>=i)
    {
    	yx_fm0_counter=0;
    }
      for(bb=0;bb<2;bb++)
      {
    	l=0x00;
        for (k=0;k<16;k++)
        {
            ll=(yx_fm0_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_0x(yx_fm0_counter*2+bb)=l;
      } 
}
void cdt_yxcl0(void)
{
    
 	unsigned long  d;

    cdt_move0();
    if(power_count!=0)
    {
        if (yx_fm0_counter!=0)
        {
            yx_2l_0x(yx_fm0_counter*2)=yx_3l_0x(yx_fm0_counter*2);
            yx_2l_0x(yx_fm0_counter*2+1)=yx_3l_0x(yx_fm0_counter*2+1);
            yx_fm0_counter++;
        }
        else
        {
                power_count--;
            yx_2l_0x(yx_fm0_counter*2)=yx_3l_0x(yx_fm0_counter*2);
            yx_2l_0x(yx_fm0_counter*2+1)=yx_3l_0x(yx_fm0_counter*2+1);
            yx_fm0_counter++;
        }
    }
    else
    {
        
            d=yx_3l_0x(yx_fm0_counter*2+1)^yx_2l_0x(yx_fm0_counter*2+1);
            d=(d<<16)|(yx_3l_0x(yx_fm0_counter*2)^yx_2l_0x(yx_fm0_counter*2));
            if(d!=0)
            {
                cdt_cos_datcl0(yx_fm0_counter);
                cdt_soe_datcl0(yx_fm0_counter,d);
            }
            yx_fm0_counter+=1;
    }
}
void cdt_rec0(void)  //////////////COM0 接收中断
{
    IO_BYTE   i,j;
	com_int_tmout[0]=0;	//add 03-2-8
    com0_rl(cdt_rc10)=com_port0_dat;   //接收
    cdt_rc10++;
    cdt_rc0++;
    if (cdt_rc10>63) cdt_rc10=cdt_rc0=0;
/*    i=0x01;
    rrb0(i);
    i&=0x10;
    if (i!=0)
    {
        i=0x00;j=0x30;
        wrb0(i,j);
    }*/
    i=0x00;j=0x38;
    wrb0(i,j);
    cdt_time_mark0=0;
}
void yksele0(IO_BYTE l)
{
    IO_BYTE k;

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

    l=cdt_rc0;
    for (i=0;i<l;i++) com0_rl1(i)=com0_rl(i);
    cdt_rc0=cdt_rc10=0;
    for (i=0;i<l;i++)
    {
        if ((com0_rl1(i)==com0_para(4))&&(com0_rl1(i+1)==com0_para(5))&&(com0_rl1(i+2)==0x71)&&(com0_rl1(i+6)==com0_para(8)))
        {
            k=bchr0(i+2);
            if(com0_rl1(i+7)==k)
            {
                cdt_type0=com0_rl1(i+3);
                switch(cdt_type0)
                {
                case 0x61: yksele0(i); //遥控选择
                break;
                case 0xc2: ykexcu0(i); //遥控执行
                break;
                case 0xb3: ykcanc0(i); //遥控撤消
                break;
                case 0xf4: yksele0(i); //遥调选择
                break;
                case 0x85: ykexcu0(i); //遥调执行
                break;
                case 0x26: ykcanc0(i); //遥调撤消
                break;
                case 0x7a: upda_time0(i);//对时
                break;
                }
            }
            return;
        }
    }
}
void cdt_cos_datcl0(IO_WORD m)
{
    cdt_cos_data0(cos_in_pointer0+0)=0xf0+m;
    cdt_cos_data0(cos_in_pointer0+1)=yx_3l_0(m*4);
    cdt_cos_data0(cos_in_pointer0+2)=yx_3l_0(m*4+1);
    cdt_cos_data0(cos_in_pointer0+3)=yx_3l_0(m*4+2);
    cdt_cos_data0(cos_in_pointer0+4)=yx_3l_0(m*4+3);
    cos_in_pointer0+=6;
    if (cos_in_pointer0>=600) cos_in_pointer0=0;
    yx_2l_0(m*4)=yx_3l_0(m*4);
    yx_2l_0(m*4+1)=yx_3l_0(m*4+1);
    yx_2l_0(m*4+2)=yx_3l_0(m*4+2);
    yx_2l_0(m*4+3)=yx_3l_0(m*4+3);
}

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

⌨️ 快捷键说明

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