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

📄 cdt0.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_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,1)=(scc_tabb(0,1)&0xf0)|com_stop[com0_para(2)]|com_check[com0_para(3)];
    scc_tabb(0,25)=scc_tabb(0,25)|com_bits[com0_para(1)];
    scc_tabb(0,27)=scc_tabb(0,27)|(com_bits[com0_para(1)]>>1);
    scc_tabb(0,33)=scc_tabb(0,33)|(com_bits[com0_para(1)]>>1);
    scc_tabb(0,35)=scc_tabb(0,35)|com_bits[com0_para(1)];
	scc_tabb(0,17)=com_baund[com0_para(6)] & 0xff;
	scc_tabb(0,19)=com_baund[com0_para(6)]>>8;
	wrb0(0x09,0x80);
    i=0;k=aa=scc_tabb(0,i);
        j=scc_tabb(0,i+1);
    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;    
    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:
                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;
    }
    if ((run_mark_a1==1)&&(run_mark_a0==0))
    {
      if(com_int_tmout[0]>3)
      {
       // PDR5_P51=0;//03-1-12
    //__wait_nop();
   //__wait_nop();
    //PDR5_P51=1;
	com_int_tmout[0]=0;
	init_com0();
	ICR02=6;
      }
    }
}
/*********大循环完成*********/
void    sjch0 (void)
{
  if(soe_in_pointer0!=soe_out_pointer0)  cdt_soejs0=3;
  cdt_f_cl0();
  if(cdt_yc_num0>8) cdt_yc_num0=8;
  cdt_zxj0=zcou[cdt_yc_num0];
  cdt_zmark0=zbzz[cdt_yc_num0];
  cdt_zxcount0=0;
  sjzz120();
}
/*********电度*********/
void    sjdd0 (void)
{    
    IO_WORD a;
    if(cdt_bz0_a1==1)    ////定时电度标志
    {      
      a=com0_para(16);
      a=(a<<8)+com0_para(15);
      cdt_dd_num0=a;    
      if(a>64) a=64;      
      cdt_zlmark0=0x46;
      cdt_zxcount0++;
      cdt_zcj0=a;
      cdt_gong0=0xa0;
      cdt_sjta0=(__far IO_BYTE*) (&dd_2l_0(0));
      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)=ddzz[0];
      com0_tl(cdt_in_counter0,7)=ddzz[1];
      com0_tl(cdt_in_counter0,8)=cdt_zcj0;
      com0_tl(cdt_in_counter0,9)=com0_para(8);//ddzz[3];
      com0_tl(cdt_in_counter0,10)=ddzz[4];
      com0_tl(cdt_in_counter0,11)=bch0(6);      
      cdt_tc0[cdt_in_counter0]=12;
      cdt_in_counter0^=0x01;
      cdt_zxj0--;
      cdt_bz0_a1=0;//////清电度标志
      cdt_dd_time0=0;              
    }    
    else
    {
    	sjzz120();
    }   
}
/**********组变位*********/
void sjyxbw0(void)
{
    com0_tl(cdt_in_counter0,0)=cdt_cos_data0(cos_out_pointer0+0);
    com0_tl(cdt_in_counter0,1)=cdt_cos_data0(cos_out_pointer0+1);
    com0_tl(cdt_in_counter0,2)=cdt_cos_data0(cos_out_pointer0+2);
    com0_tl(cdt_in_counter0,3)=cdt_cos_data0(cos_out_pointer0+3);
    com0_tl(cdt_in_counter0,4)=cdt_cos_data0(cos_out_pointer0+4);
    com0_tl(cdt_in_counter0,5)=bch0(0);
    com0_tl(cdt_in_counter0,6)=cdt_cos_data0(cos_out_pointer0+0);
    com0_tl(cdt_in_counter0,7)=cdt_cos_data0(cos_out_pointer0+1);
    com0_tl(cdt_in_counter0,8)=cdt_cos_data0(cos_out_pointer0+2);
    com0_tl(cdt_in_counter0,9)=cdt_cos_data0(cos_out_pointer0+3);
    com0_tl(cdt_in_counter0,10)=cdt_cos_data0(cos_out_pointer0+4);
    com0_tl(cdt_in_counter0,11)=bch0(6);
    com0_tl(cdt_in_counter0,12)=cdt_cos_data0(cos_out_pointer0+0);
    com0_tl(cdt_in_counter0,13)=cdt_cos_data0(cos_out_pointer0+1);
    com0_tl(cdt_in_counter0,14)=cdt_cos_data0(cos_out_pointer0+2);
    com0_tl(cdt_in_counter0,15)=cdt_cos_data0(cos_out_pointer0+3);
    com0_tl(cdt_in_counter0,16)=cdt_cos_data0(cos_out_pointer0+4);
    com0_tl(cdt_in_counter0,17)=bch0(12);
    cos_out_pointer0+=6;
    if (cos_out_pointer0>=600) cos_out_pointer0=0;
    cdt_gong0+=3;
    cdt_zcj0-=3;
    cdt_tc0[cdt_in_counter0]=18;
    cdt_in_counter0^=0x01;
    cdt_sjta0+=12;
}
void ykfj_cl0(void)
{
    if (cdt_ykmark0&01)
    {
        if (cdt_zlmark0==0x44) {sjzz60();return;}
        if (cdt_zcj0<=2) {sjzz60();return;}
        com0_tl(cdt_in_counter0,0)=0xe1;
        com0_tl(cdt_in_counter0,1)=yk_xz;
        com0_tl(cdt_in_counter0,2)=yk_dx;
        com0_tl(cdt_in_counter0,3)=yk_xz;
        com0_tl(cdt_in_counter0,4)=yk_dx;
        com0_tl(cdt_in_counter0,5)=bch0(0);
        com0_tl(cdt_in_counter0,6)=0xe1;
        com0_tl(cdt_in_counter0,7)=yk_xz;
        com0_tl(cdt_in_counter0,8)=yk_dx;
        com0_tl(cdt_in_counter0,9)=yk_xz;
        com0_tl(cdt_in_counter0,10)=yk_dx;
        com0_tl(cdt_in_counter0,11)=bch0(6);
        com0_tl(cdt_in_counter0,12)=0xe1;
        com0_tl(cdt_in_counter0,13)=yk_xz;
        com0_tl(cdt_in_counter0,14)=yk_dx;
        com0_tl(cdt_in_counter0,15)=yk_xz;
        com0_tl(cdt_in_counter0,16)=yk_dx;
        com0_tl(cdt_in_counter0,17)=bch0(12);
        cdt_gong0+=3;
        cdt_zcj0-=3;
        cdt_tc0[cdt_in_counter0]=18;
        cdt_in_counter0^=0x01;
        cdt_ykmark0=0x00;
        cdt_sjta0+=12;
        return;
    }
    if (cdt_ykmark0&02)
    {
        if (cdt_zlmark0==0x44) {sjzz60();return;}
        if (cdt_zcj0<=2) {sjzz60();return;}
        com0_tl(cdt_in_counter0,0)=0xe1;
        com0_tl(cdt_in_counter0,1)=0x00;
        com0_tl(cdt_in_counter0,2)=0x00;
        com0_tl(cdt_in_counter0,3)=yk_xz;
        com0_tl(cdt_in_counter0,4)=yk_dx;
        com0_tl(cdt_in_counter0,5)=bch0(0);
        com0_tl(cdt_in_counter0,6)=0xe1;
        com0_tl(cdt_in_counter0,7)=0x00;
        com0_tl(cdt_in_counter0,8)=0x00;
        com0_tl(cdt_in_counter0,9)=yk_xz;
        com0_tl(cdt_in_counter0,10)=yk_dx;
        com0_tl(cdt_in_counter0,11)=bch0(6);
        com0_tl(cdt_in_counter0,12)=0xe1;
        com0_tl(cdt_in_counter0,13)=0x00;
        com0_tl(cdt_in_counter0,14)=0x00;
        com0_tl(cdt_in_counter0,15)=yk_xz;
        com0_tl(cdt_in_counter0,16)=yk_dx;
        com0_tl(cdt_in_counter0,17)=bch0(12);
        cdt_gong0+=3;
        cdt_zcj0-=3;
        cdt_tc0[cdt_in_counter0]=18;
        cdt_in_counter0^=0x01;
        cdt_sjta0+=12;
        cdt_ykmark0=0x00;
        return;
    }
    cdt_ykmark0=0x00;
    sjzz60();
}
void    sjbw0 (void)
{
    if (cdt_zlmark0==0x46) {sjzz60();}
    else
    {
        if (cos_out_pointer0==cos_in_pointer0)
        {
          if(cdt_ykmark0&0x80)
          {
            ykfj_cl0();
            return;

⌨️ 快捷键说明

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