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

📄 cdt0.c

📁 关于电力CDT规约的程序.超值啊!对于学习CDT的有帮助.
💻 C
📖 第 1 页 / 共 3 页
字号:

#include "mb90540.h"

IO_BYTE com_check[]={0x00,0x01,0x03};
IO_BYTE com_stop[]={0x04,0x0c};
IO_BYTE com_bits[]={0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0xc0};
IO_WORD com_baund[]={0x0,0x0,0x0,0x19f,0xce,0x66,0x32,0x18,0x0b,0x0};

extern unsigned char com_int_tmout[4];//	add 03-2-8
extern unsigned char init_flag[4];
IO_BYTE cdt_soejs0,cdt_zxcount0;
IO_BYTE cdt_gong0,cdt_zxj0,cdt_zcj0,cdt_in_counter0,cdt_zmark0,cdt_zlmark0;
IO_BYTE cdt_tc0[3],cdt_tc10,btemp0=0,cdt_type0,cdt_time_mark0,cdt_dd_time0,cdt_rc0,cdt_rc10,cdt_out_counter0;
IO_BYTE zbzc0[6],cdt_f_led0[5];
IO_BYTE cdt_yc_num0,cdt_yx_num0,cdt_dd_num0;
extern IO_WORD msecond,second,minute;
IO_WORD yc_fm0_counter,dd_fm0_counter,yx_fm0_counter;
IO_WORD cos_in_pointer0,cos_out_pointer0,soe_in_pointer0,soe_out_pointer0;
__far IO_BYTE *cdt_sjta0;
//-----------------
extern IO_BYTE CRC_TAB[];
extern IO_BYTE CRC_TAB1[];
extern IO_BYTE scc_cdt_tab[44];
extern IO_BYTE yca[];
extern IO_BYTE ycb[];
extern IO_BYTE ycc[];
extern IO_BYTE yxz[];
extern IO_BYTE ddzz[];
extern IO_BYTE soez[];
extern IO_BYTE *tbz[];
extern IO_BYTE zcou[];
extern IO_BYTE az[];
extern IO_BYTE abz[];
extern IO_BYTE abcz[];
extern IO_BYTE *cdt_zxta[];
extern IO_BYTE zbzz[];
extern IO_BYTE gongg[];
//__far IO_BYTE *com_sjdz0[]={(__far IO_BYTE*)&yc_2l_0x(0),(__far IO_BYTE*)&yc_2l_0x(0)+64,(__far IO_BYTE*)&yc_2l_0x(0)+128,&yx_2l_0(0)};
__far IO_LWORD com_sjdz0[]={(__far IO_LWORD)&yc_2l_0x(0),(__far IO_LWORD)&yc_2l_0x(0)+64,(__far IO_LWORD)&yc_2l_0x(0)+128,(__far IO_LWORD)&yx_2l_0(0)};

/////////////////////////////////////////////////////
void    sjch0(void);
void    sjdd0(void);
void    sjbw0(void);
void    sjsoe0(void);
void    sjzz120(void);
void    sjzz60(void);
void    cdt_f_cl0(void);
void    cdt_cl_num0(void);
void    init_cdt0(void);
void    init_com0 (void);
void    cdt_send0(void);
void    cdt_start_send0(void);
//void    cdt_cltime(void);
void    cdt_cl0(void);
void    cdt_rec0(void);
void    sjyxbw0(void);
void    ykfj_cl0(void);
void    cdt_yccl0(void);
//void    cdt_ddcl0(void);
void    cdt_yxcl0(void);
void    cdt_rec_cl0(void);
void    cdt_move0(void);
void    yksele0(IO_BYTE l);
void    ykexcu0(IO_BYTE l);
void    ykcanc0(IO_BYTE l);
void    upda_time0(IO_BYTE l);
void    cdt_soe_datcl0(IO_WORD m,unsigned long int  d);
void    cdt_cos_datcl0(IO_WORD m);
void    esi_b0 (void);
void    src_b0 (void);
void    wrb0 (IO_BYTE i,IO_BYTE j);
IO_BYTE rrb0 (IO_BYTE i);
IO_BYTE bch0(IO_BYTE o);
IO_BYTE bchr0(IO_BYTE o);
/********function**********/
void init_com0 (void)
{
	IO_BYTE i,j,k;
    IO_BYTE aa;

    i=0;
    scc_tabb(0,i)=aa=scc_cdt_tab[i];
    while (aa!=0xff)
    {
        i++;
        //if(i==11)  scc_tabb(0,i)=aa=0x89;
        //else
        scc_tabb(0,i)=aa=scc_cdt_tab[i];
    }
    scc_tabb(0,3)=(scc_tabb(0,3)&0xf0)|com_stop[com0_para(2)]|com_check[com0_para(3)];
    scc_tabb(0,27)=scc_tabb(0,27)|com_bits[com0_para(1)];
    scc_tabb(0,29)=scc_tabb(0,29)|(com_bits[com0_para(1)]>>1);
    scc_tabb(0,35)=scc_tabb(0,35)|(com_bits[com0_para(1)]>>1);
    scc_tabb(0,37)=scc_tabb(0,37)|com_bits[com0_para(1)];
	scc_tabb(0,19)=com_baund[com0_para(6)] & 0xff;
	scc_tabb(0,21)=com_baund[com0_para(6)]>>8;
	wrb0(0x09,0x80);
    i=0;k=aa=scc_tabb(0,i);
        j=scc_tabb(0,i+1);
        //
        k=0x09;
        j=0x80;
        //
    while (aa!=0xff)
    {
        i+=2;
        wrb0(k,j);
        k=aa=scc_tabb(0,i);
        j=scc_tabb(0,i+1);
    }
    init_cdt0();
}
IO_BYTE bch0(IO_BYTE o)
{
  IO_BYTE	i,k;
  k=btemp0=0;
  for (i=0;i<5;i++)
  {
    k=btemp0^com0_tl(cdt_in_counter0,i+o);
    btemp0=CRC_TAB[k];
  }
  return btemp0 ^ 0xff;
}
IO_BYTE bchr0(IO_BYTE o)
{
  IO_BYTE	i,k;
  k=btemp0=0;
  for (i=0;i<5;i++)
  {
    k=btemp0^com0_rl1(i+o);
    btemp0=CRC_TAB[k];
  }
  return btemp0 ^ 0xff;
}
void init_cdt0(void)
{
    cdt_cl_num0();
    cdt_f_cl0();
    if (cdt_yc_num0>8) cdt_yc_num0=8;
    cdt_tmark0=3;
    cdt_in_counter0=cdt_out_counter0=0;
    cdt_zlmark0=0x44;
    cdt_zmark0=zbzz[cdt_yc_num0];
    cdt_zxj0=zcou[cdt_yc_num0];
    cdt_zcj0=cdt_f_led0[3];
    cos_in_pointer0=cos_out_pointer0=0;
    soe_in_pointer0=soe_out_pointer0=0;    
    //
    soe_flen0=soe_flen0_bak=0;
    soe_num0=0;
    soe_in_pointer0_bak=0;
    soe_txmark0=0;
    //
    cdt_gong0=0xf0;
	cdt_sjta0=(__far IO_BYTE*)com_sjdz0[cdt_zlmark0-0x41];		//  ^0^ add 03--2--07
    com0_tl(0,0)=com0_para(4);
    com0_tl(0,1)=com0_para(5);
    com0_tl(0,2)=com0_para(4);
    com0_tl(0,3)=com0_para(5);
    com0_tl(0,4)=com0_para(4);
    com0_tl(0,5)=com0_para(5);
    com0_tl(0,6)=yxz[0];
    com0_tl(0,7)=yxz[1];
    com0_tl(0,8)=cdt_zcj0;
    com0_tl(0,9)=com0_para(8);//yxz[3];
    com0_tl(0,10)=yxz[4];
    com0_tl(0,11)=bch0(6);
    cdt_in_counter0^=0x01;
    cdt_bz0=0x00;
    cdt_soejs0=0x00;
    cdt_tc0[0]=11;
    cdt_tc0[1]=0;
    cdt_tc10=1;
    cdt_rc0=cdt_rc10=0;
    cdt_zxcount0=0;
    yc_fm0_counter=0;
    dd_fm0_counter=0;
    cdt_type0=0x00;
    cdt_time_mark0=0;
    cdt_dd_time0=0;////////电度时间标志清零
    msecond=0,second=0,minute=0;
    com_port0_dat=com0_tl(0,0);
}

void wrb0 (IO_BYTE i,IO_BYTE j)
{
    if (i!=0)
    {
        com_port0_cmd=i;
        __wait_nop();
        __wait_nop();
    }
    com_port0_cmd=j;
}

IO_BYTE rrb0 (IO_BYTE i)
{
    if (i!=0)
    {
        com_port0_cmd=i;
        __wait_nop();
        __wait_nop();
    }
    i=com_port0_cmd;
    return(i);
}
/********82530 com0 int***********/
void cdt_send0(void)
{
    IO_BYTE i,j;
	com_int_tmout[0]=0;	//add 03-2-8	
    if (cdt_tc0[cdt_out_counter0]==0)
    {
        cdt_out_counter0^=0x01;
        cdt_tc10=0x00;
        cdt_tmark0_a1=1;
        cdt_tmark0_a1=1;
        i=0x00;j=0x28;
        wrb0(i,j);
    }
    else
    {
        com_port0_dat=com0_tl(cdt_out_counter0,cdt_tc10);
        cdt_tc10++;
        cdt_tc0[cdt_out_counter0]--;
    }
    i=0x00;
    j=0x38;
    wrb0(i,j);
}
void src_b0 (void)
{
    IO_BYTE i,j;

    i=0x00;j=0x01;
    wrb0(i,j);
    i=0x00;j=0x30;
    wrb0(i,j);
    i=0x00;
    j=0x38;
    wrb0(i,j);

}

void esi_b0 (void)
{
    IO_BYTE i,j;

    i=0x00;
    j=0x10;
    wrb0(i,j);
    i=0x00;
    j=0x38;
    wrb0(i,j);
}

void cdt_start_send0(void)
{
    if ((cdt_tmark0_a0==1)&&(cdt_tmark0_a1==1))
    {
        cdt_tc10=0x00;
        cdt_tmark0_a0=cdt_tmark0_a1=0x00;
        cdt_out_counter0=cdt_in_counter0^0x01;
        com_port0_dat=com0_tl(cdt_out_counter0,cdt_tc10);
        cdt_tc10++;
        cdt_tc0[cdt_out_counter0]--;
    }
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**********中断定时器*************/
/*void cdt_cltime(void)
{
    cdt_start_send0();
    msecond+=5;
    cdt_time_mark++;
    if(msecond>=1000)
    {
 //       delay_time1++;
 //       if(r_mark==1) delay_time1=0;
        if (run_mark_a0==1) run_time1++;
        second+=1;
        msecond=0;
        sys_second=sys_second+1;
		/////////////			add 03----2---8
		if(com_int_tmout[0]<20)
		{
			com_int_tmout[0]++;
		}
		else
		{
			com_int_tmout[0]=0;
			init_flag[0]=1;
		}
		/////
		if(com_int_tmout[1]<20)
		{
			com_int_tmout[1]++;
		}
		else
		{
			com_int_tmout[1]=0;
			init_flag[1]=1;
		}
    }
    if(second>59)
    {
        minute+=1;
        second=0;        
        sys_minute+=1;sys_second=0;
        cdt_dd_time++;
        if(cdt_dd_time==5)   cdt_bz_a1=1;//////立电度标志为1 ^.^    
    }
    if(minute>59)
    {
        minute=0;
        sys_hour+=1;sys_minute=0;
    }
    if(sys_hour>=24){sys_day+=1;sys_hour=0;}
}*/

//--------------------CDT规约处理-------------------------------
void cdt_cl0(void)
{
    if(cdt_rc0!=0)
    {
        if(cdt_time_mark0>10)
        {
            cdt_rec_cl0();
        }
    }
    if (cdt_tmark0_a0==0)
    {
        switch (cdt_zcj0)
        {
            case 0x00:
            //06-08-09
    		if((soe_in_pointer0!=soe_out_pointer0)&&(soe_txmark0_d0==0))
    	
    		if((soe_txmark0_d7==0)&&(cos_in_pointer0==cos_out_pointer0))
    		{
    			soe_in_pointer0_bak=soe_in_pointer0;
    			cdt_zcj0=0x00;
    			cdt_zxj0=0x00;
    		}
    		//
                switch (cdt_zxj0)
                {
                    case 0x00:
                        sjch0(); //soe
                        break;
                    case 0x01:
                        sjdd0();//电度
                        break;
                    default :
                        if (cdt_bz0_a0==1) {sjsoe0();} else {sjzz120();}
                }
                break;
            default :   sjbw0();
        }
        cdt_tmark0_a0=1;
    }

⌨️ 快捷键说明

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