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

📄 cdt2.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "mb90540.h"

extern IO_BYTE  com_check[];
extern IO_BYTE  com_stop[];
extern IO_BYTE  com_bits[];
extern IO_WORD  com_baund[];
extern unsigned char com_int_tmout[4];//	add 03-2-8
extern unsigned char init_flag[4];
IO_BYTE cdt_soejs2,cdt_zxcount2;
IO_BYTE cdt_gong2,cdt_zxj2,cdt_zcj2,cdt_in_counter2,cdt_zmark2,cdt_zlmark2;
IO_BYTE cdt_tc2[3],cdt_tc12,btemp2=0,cdt_type2,cdt_time_mark2,cdt_dd_time2,cdt_rc2,cdt_rc12,cdt_out_counter2;
IO_BYTE zbzc2[6],cdt_f_led2[5];
IO_BYTE cdt_yc_num2,cdt_yx_num2,cdt_dd_num2;
extern IO_WORD msecond,second,minute;
IO_WORD yc_fm2_counter,dd_fm2_counter,yx_fm2_counter;
IO_WORD cos_in_pointer2,cos_out_pointer2,soe_in_pointer2,soe_out_pointer2;
__far IO_BYTE *cdt_sjta2;
//-----------------
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_sjdz2[]={(__far IO_BYTE*)&yc_2l_2x(0),(__far IO_BYTE*)&yc_2l_2x(0)+64,(__far IO_BYTE*)&yc_2l_2x(0)+128,&yx_2l_2(0)};
__far IO_LWORD com_sjdz2[]={(__far IO_LWORD)&yc_2l_2x(0),(__far IO_LWORD)&yc_2l_2x(0)+64,(__far IO_LWORD)&yc_2l_2x(0)+128,(__far IO_LWORD)&yx_2l_2(0)};

/////////////////////////////////////////////////////
void    sjch2(void);
void    sjdd2(void);
void    sjbw2(void);
void    sjsoe2(void);
void    sjzz122(void);
void    sjzz62(void);
void    cdt_f_cl2(void);
void    cdt_cl_num2(void);
void    init_cdt2(void);
void    init_com2 (void);
void    cdt_send2(void);
void    cdt_start_send2(void);
//void    cdt_cltime(void);
void    cdt_cl2(void);
void    cdt_rec2(void);
void    sjyxbw2(void);
void    ykfj_cl2(void);
void    cdt_yccl2(void);
void    cdt_ddcl2(void);
void    cdt_yxcl2(void);
void    cdt_rec_cl2(void);
void    cdt_move2(void);
void    yksele2(IO_BYTE l);
void    ykexcu2(IO_BYTE l);
void    ykcanc2(IO_BYTE l);
void    upda_time2(IO_BYTE l);
void    cdt_soe_datcl2(IO_WORD m,unsigned long int  d);
void    cdt_cos_datcl2(IO_WORD m);
void    esi_b2 (void);
void    src_b2 (void);
void    wrb2 (IO_BYTE i,IO_BYTE j);
IO_BYTE rrb2 (IO_BYTE i);
IO_BYTE bch2(IO_BYTE o);
IO_BYTE bchr2(IO_BYTE o);
/********function**********/
void init_com2 (void)
{
	IO_BYTE i,j,k;
    IO_BYTE aa;

    i=0;
    scc_tabb(2,i)=aa=scc_cdt_tab[i];
    while (aa!=0xff)
    {
        i++;
        
        scc_tabb(2,i)=aa=scc_cdt_tab[i];
    }
    scc_tabb(2,1)=(scc_tabb(2,1)&0xf0)|com_stop[com0_para(2)]|com_check[com0_para(3)];
    scc_tabb(2,25)=scc_tabb(2,25)|com_bits[com0_para(1)];
    scc_tabb(2,27)=scc_tabb(2,27)|(com_bits[com0_para(1)]>>1);
    scc_tabb(2,33)=scc_tabb(2,33)|(com_bits[com0_para(1)]>>1);
    scc_tabb(2,35)=scc_tabb(2,35)|com_bits[com0_para(1)];
	scc_tabb(2,17)=com_baund[com0_para(6)] & 0xff;
	scc_tabb(2,19)=com_baund[com0_para(6)]>>8;
	wrb2(0x09,0x80);
    i=0;k=aa=scc_tabb(2,i);
        j=scc_tabb(2,i+1);
    while (aa!=0xff)
    {
        i+=2;
        wrb2(k,j);
        k=aa=scc_tabb(2,i);
        j=scc_tabb(2,i+1);
    }
    init_cdt2();
}
IO_BYTE bch2(IO_BYTE o)
{
  IO_BYTE	i,k;
  k=btemp2=0;
  for (i=0;i<5;i++)
  {
    k=btemp2^com2_tl(cdt_in_counter2,i+o);
    btemp2=CRC_TAB[k];
  }
  return btemp2 ^ 0xff;
}
IO_BYTE bchr2(IO_BYTE o)
{
  IO_BYTE	i,k;
  k=btemp2=0;
  for (i=0;i<5;i++)
  {
    k=btemp2^com2_rl1(i+o);
    btemp2=CRC_TAB[k];
  }
  return btemp2 ^ 0xff;
}
void init_cdt2(void)
{
    cdt_cl_num2();
    cdt_f_cl2();
    if (cdt_yc_num2>8) cdt_yc_num2=8;
    cdt_tmark2=3;
    cdt_in_counter2=cdt_out_counter2=0;
    cdt_zlmark2=0x44;
    cdt_zmark2=zbzz[cdt_yc_num2];
    cdt_zxj2=zcou[cdt_yc_num2];
    cdt_zcj2=cdt_f_led2[3];
    cos_in_pointer2=cos_out_pointer2=0;
    soe_in_pointer2=soe_out_pointer2=0;
    cdt_gong2=0xf0;
	cdt_sjta2=(__far IO_BYTE*)com_sjdz2[cdt_zlmark2-0x41];		//  ^0^ add 03--2--07
    com2_tl(0,0)=com0_para(4);
    com2_tl(0,1)=com0_para(5);
    com2_tl(0,2)=com0_para(4);
    com2_tl(0,3)=com0_para(5);
    com2_tl(0,4)=com0_para(4);
    com2_tl(0,5)=com0_para(5);
    com2_tl(0,6)=yxz[0];
    com2_tl(0,7)=yxz[1];
    com2_tl(0,8)=cdt_zcj2;
    com2_tl(0,9)=com0_para(8);//yxz[3];
    com2_tl(0,10)=yxz[4];
    com2_tl(0,11)=bch2(6);
    cdt_in_counter2^=0x01;
    cdt_bz2=0x00;
    cdt_soejs2=0x00;
    cdt_tc2[0]=11;
    cdt_tc2[1]=0;
    cdt_tc12=1;
    cdt_rc2=cdt_rc12=0;
    cdt_zxcount2=0;
    yc_fm2_counter=0;
    dd_fm2_counter=0;
    cdt_type2=0x00;
    cdt_time_mark2=0;
    cdt_dd_time2=0;////////电度时间标志清零
    msecond=0,second=0,minute=0;
    com_port2_dat=com2_tl(0,0);
}

void wrb2 (IO_BYTE i,IO_BYTE j)
{
    if (i!=0)
    {
        com_port2_cmd=i;
        __wait_nop();
        __wait_nop();
    }
    com_port2_cmd=j;
}

IO_BYTE rrb2 (IO_BYTE i)
{
    if (i!=0)
    {
        com_port2_cmd=i;
        __wait_nop();
        __wait_nop();
    }
    i=com_port2_cmd;
    return(i);
}
/********82530 com0 int***********/
void cdt_send2(void)
{
    IO_BYTE i,j;
	com_int_tmout[2]=0;	//add 03-2-8	
    if (cdt_tc2[cdt_out_counter2]==0)
    {
        cdt_out_counter2^=0x01;
        cdt_tc12=0x00;
        cdt_tmark2_a1=1;
        cdt_tmark2_a1=1;
        i=0x00;j=0x28;
        wrb2(i,j);
    }
    else
    {
        com_port2_dat=com2_tl(cdt_out_counter2,cdt_tc12);
        cdt_tc12++;
        cdt_tc2[cdt_out_counter2]--;
    }
    i=0x00;
    j=0x38;
    wrb2(i,j);
}
void src_b2 (void)
{
    IO_BYTE i,j;

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

}

void esi_b2 (void)
{
    IO_BYTE i,j;

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

void cdt_start_send2(void)
{
    if ((cdt_tmark2_a0==1)&&(cdt_tmark2_a1==1))
    {
        cdt_tc12=0x00;
        cdt_tmark2_a0=cdt_tmark2_a1=0x00;
        cdt_out_counter2=cdt_in_counter2^0x01;
        com_port2_dat=com2_tl(cdt_out_counter2,cdt_tc12);
        cdt_tc12++;
        cdt_tc2[cdt_out_counter2]--;
    }
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**********中断定时器*************/
/*void cdt_cltime(void)
{
    cdt_start_send2();
    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_cl2(void)
{
    if(cdt_rc2!=0)
    {
        if(cdt_time_mark2>10)
        {
            cdt_rec_cl2();
        }
    }
    if (cdt_tmark2_a0==0)
    {
        switch (cdt_zcj2)
        {
            case 0x00:
                switch (cdt_zxj2)
                {
                    case 0x00:
                        sjch2(); //soe
                        break;
                    case 0x01:
                        sjdd2();//电度
                        break;
                    default :
                        if (cdt_bz2_a0==1) {sjsoe2();} else {sjzz122();}
                }
                break;
            default :   sjbw2();
        }
        cdt_tmark2_a0=1;
    }
    if ((run_mark_a1==1)&&(run_mark_a0==0))
    {
      if(com_int_tmout[2]>3)
      {
        //PDR5_P51=0;//03-1-12
   // __wait_nop();
    //__wait_nop();
    //PDR5_P51=1;
	com_int_tmout[2]=0;
	init_com2();	
	ICR04=6;
      }
    }
}
/*********大循环完成*********/
void    sjch2 (void)
{
  if(soe_in_pointer2!=soe_out_pointer2)  cdt_soejs2=3;
  cdt_f_cl2();
  if(cdt_yc_num2>8) cdt_yc_num2=8;
  cdt_zxj2=zcou[cdt_yc_num2];
  cdt_zmark2=zbzz[cdt_yc_num2];
  cdt_zxcount2=0;
  sjzz122();
}
/*********电度*********/
void    sjdd2 (void)
{    
    IO_WORD a;
    if(cdt_bz2_a1==1)    ////定时电度标志
    {      
      a=com0_para(16);
      a=(a<<8)+com0_para(15);
      cdt_dd_num2=a;    
      if(a>64) a=64;      
      cdt_zlmark2=0x46;
      cdt_zxcount2++;
      cdt_zcj2=a;
      cdt_gong2=0xa0;
      cdt_sjta2=(__far IO_BYTE*) (&dd_2l_2(0));
      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)=ddzz[0];
      com2_tl(cdt_in_counter2,7)=ddzz[1];
      com2_tl(cdt_in_counter2,8)=cdt_zcj2;
      com2_tl(cdt_in_counter2,9)=com0_para(8);//ddzz[3];
      com2_tl(cdt_in_counter2,10)=ddzz[4];
      com2_tl(cdt_in_counter2,11)=bch2(6);      
      cdt_tc2[cdt_in_counter2]=12;
      cdt_in_counter2^=0x01;
      cdt_zxj2--;
      cdt_bz2_a1=0;//////清电度标志
      cdt_dd_time2=0;              
    }    
    else
    {
    	sjzz122();
    }   
}
/**********组变位*********/
void sjyxbw2(void)
{
    com2_tl(cdt_in_counter2,0)=cdt_cos_data2(cos_out_pointer2+0);
    com2_tl(cdt_in_counter2,1)=cdt_cos_data2(cos_out_pointer2+1);
    com2_tl(cdt_in_counter2,2)=cdt_cos_data2(cos_out_pointer2+2);
    com2_tl(cdt_in_counter2,3)=cdt_cos_data2(cos_out_pointer2+3);
    com2_tl(cdt_in_counter2,4)=cdt_cos_data2(cos_out_pointer2+4);
    com2_tl(cdt_in_counter2,5)=bch2(0);
    com2_tl(cdt_in_counter2,6)=cdt_cos_data2(cos_out_pointer2+0);
    com2_tl(cdt_in_counter2,7)=cdt_cos_data2(cos_out_pointer2+1);
    com2_tl(cdt_in_counter2,8)=cdt_cos_data2(cos_out_pointer2+2);
    com2_tl(cdt_in_counter2,9)=cdt_cos_data2(cos_out_pointer2+3);
    com2_tl(cdt_in_counter2,10)=cdt_cos_data2(cos_out_pointer2+4);
    com2_tl(cdt_in_counter2,11)=bch2(6);
    com2_tl(cdt_in_counter2,12)=cdt_cos_data2(cos_out_pointer2+0);
    com2_tl(cdt_in_counter2,13)=cdt_cos_data2(cos_out_pointer2+1);
    com2_tl(cdt_in_counter2,14)=cdt_cos_data2(cos_out_pointer2+2);
    com2_tl(cdt_in_counter2,15)=cdt_cos_data2(cos_out_pointer2+3);
    com2_tl(cdt_in_counter2,16)=cdt_cos_data2(cos_out_pointer2+4);
    com2_tl(cdt_in_counter2,17)=bch2(12);
    cos_out_pointer2+=6;
    if (cos_out_pointer2>=600) cos_out_pointer2=0;
    cdt_gong2+=3;
    cdt_zcj2-=3;
    cdt_tc2[cdt_in_counter2]=18;
    cdt_in_counter2^=0x01;
    cdt_sjta2+=12;
}
void ykfj_cl2(void)
{
    if (cdt_ykmark2&01)
    {
        if (cdt_zlmark2==0x44) {sjzz62();return;}
        if (cdt_zcj2<=2) {sjzz62();return;}
        com2_tl(cdt_in_counter2,0)=0xe1;
        com2_tl(cdt_in_counter2,1)=yk_xz;
        com2_tl(cdt_in_counter2,2)=yk_dx;
        com2_tl(cdt_in_counter2,3)=yk_xz;
        com2_tl(cdt_in_counter2,4)=yk_dx;
        com2_tl(cdt_in_counter2,5)=bch2(0);
        com2_tl(cdt_in_counter2,6)=0xe1;
        com2_tl(cdt_in_counter2,7)=yk_xz;
        com2_tl(cdt_in_counter2,8)=yk_dx;
        com2_tl(cdt_in_counter2,9)=yk_xz;
        com2_tl(cdt_in_counter2,10)=yk_dx;
        com2_tl(cdt_in_counter2,11)=bch2(6);
        com2_tl(cdt_in_counter2,12)=0xe1;
        com2_tl(cdt_in_counter2,13)=yk_xz;
        com2_tl(cdt_in_counter2,14)=yk_dx;
        com2_tl(cdt_in_counter2,15)=yk_xz;
        com2_tl(cdt_in_counter2,16)=yk_dx;
        com2_tl(cdt_in_counter2,17)=bch2(12);
        cdt_gong2+=3;
        cdt_zcj2-=3;
        cdt_tc2[cdt_in_counter2]=18;
        cdt_in_counter2^=0x01;
        cdt_ykmark2=0x00;
        cdt_sjta2+=12;
        return;
    }
    if (cdt_ykmark2&02)
    {
        if (cdt_zlmark2==0x44) {sjzz62();return;}
        if (cdt_zcj2<=2) {sjzz62();return;}
        com2_tl(cdt_in_counter2,0)=0xe1;
        com2_tl(cdt_in_counter2,1)=0x00;
        com2_tl(cdt_in_counter2,2)=0x00;
        com2_tl(cdt_in_counter2,3)=yk_xz;
        com2_tl(cdt_in_counter2,4)=yk_dx;
        com2_tl(cdt_in_counter2,5)=bch2(0);
        com2_tl(cdt_in_counter2,6)=0xe1;
        com2_tl(cdt_in_counter2,7)=0x00;
        com2_tl(cdt_in_counter2,8)=0x00;
        com2_tl(cdt_in_counter2,9)=yk_xz;
        com2_tl(cdt_in_counter2,10)=yk_dx;
        com2_tl(cdt_in_counter2,11)=bch2(6);
        com2_tl(cdt_in_counter2,12)=0xe1;
        com2_tl(cdt_in_counter2,13)=0x00;
        com2_tl(cdt_in_counter2,14)=0x00;
        com2_tl(cdt_in_counter2,15)=yk_xz;
        com2_tl(cdt_in_counter2,16)=yk_dx;
        com2_tl(cdt_in_counter2,17)=bch2(12);
        cdt_gong2+=3;
        cdt_zcj2-=3;
        cdt_tc2[cdt_in_counter2]=18;
        cdt_in_counter2^=0x01;
        cdt_sjta2+=12;
        cdt_ykmark2=0x00;
        return;
    }
    cdt_ykmark2=0x00;
    sjzz62();
}
void    sjbw2 (void)
{
    if (cdt_zlmark2==0x46) {sjzz62();}
    else
    {
        if (cos_out_pointer2==cos_in_pointer2)
        {
          if(cdt_ykmark2&0x80)
          {
            ykfj_cl2();
            return;
          }

⌨️ 快捷键说明

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