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

📄 hjcomm.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 5 页
字号:
               true=1;
             }
           }
         }
       }
       if(true==0){
         if((beg_add|0xf000)==(end_add|0xf000)){首尾相等
           if((beg_add|0xf000)!=0xf080){
             true=2;
           }
         }
       }
       if(true==0){查有无收发数据
         i=0;
         true=5;
         while(i<6){
           if((XBYTE[0xf030+5*i]>0)&(XBYTE[0xf030+5*i]<4)){
             true=0;
           }
           if(XBYTE[0xf030+5*i]==0x87){
             true=0;
           }
           if((XBYTE[0xf050+5*i]>0)&(XBYTE[0xf050+5*i]<4)){
             true=0;
           }
           if(XBYTE[0xf050+5*i]==0x87){
             true=0;
           }
           if(true==0){
             i=6;
           }
           i=i+1;
         }
       }
       i=0;
       if(true>0){
         XBYTE[0xf024]=1;
         while(i<20){
           if(XBYTE[0xf023]==0){
             XBYTE[0xf024]=1;
             if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){
               i=20;
             }
           }
           i=i+1;
         }
         if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){
           if(XBYTE[0xf076]==0x88){
             EA=0;
             if(true==1){
               i=0;
               while(i<6){
                 XBYTE[0xf030+5*i]=0;
                 XBYTE[0xf050+5*i]=0;
                 i=i+1;
               }
               if(true>1){
                 XBYTE[0xf01f]=0xf0;
                 XBYTE[0xf020]=0x80;
                 XBYTE[0xf021]=0xf0;
                 XBYTE[0xf022]=0x80;
               }
             }
             EA=1;
           }
         }
       }
       EA=1;
       XBYTE[0xf024]=0;
}*/
/*-------------------------------------------------------*/
void   cpuwrit_dete(uchar  no){        /*CPU板写双口RAM越界检查*/

       uint   data  star_add,data  end_add,data  calc_long,data date_long;

       wdi_reset();
       XBYTE[0xf031+5*no]=XBYTE[0xf031+5*no]|0xf0;/* 屏蔽高四位将高四位置成F */
       XBYTE[0xf033+5*no]=XBYTE[0xf033+5*no]|0xf0;
       star_add=XBYTE[0xf031+5*no]*256+XBYTE[0xf032+5*no];
       end_add=XBYTE[0xf033+5*no]*256+XBYTE[0xf034+5*no];
       date_long=XBYTE[star_add+1]*256+XBYTE[star_add+2];
       if((star_add<0xf080)||(end_add>0xf7ff)){/*CPU写数据地址越界检查*/
         sparkler_main(2);
         XBYTE[0xf030+5*no]=0;
       }
       if(star_add<end_add){
         calc_long=end_add-star_add-2;
       }
       else{
         calc_long=end_add-0xf080+0xf7ff-star_add-1;
       }
       if(date_long!=calc_long){       /*CPU写数据长度与实际地址检查*/
         sparkler_main(2);
         XBYTE[0xf030+5*no]=0;
       }
       wdi_reset();
}
/*-------------------------------------------------------*/
void   reset(){                        /*初始化主程序*/

       uchar  i;

       P1_6=0;
       set_dou_ram();
       sparkler(3);
       set_comm1(4);
       set_comm2(4);
       set_comm3(4);

/*       if(XBYTE[0xF004]==1){           拨号方式*/
         modem_angser(1,1);
         delay(200);
         modem_flow(1,3);
         delay(200);
    /*     if(XBYTE[0xF01E]==1){         互为备用*/
           modem_angser(2,1);
           delay(200);
           modem_flow(2,3);
    /*       delay(200);
         }
       }
       if(XBYTE[0xF005]==1){           拨号方式
         modem_angser(2,1);
         delay(200);
         modem_flow(2,3);
         delay(200);
         if(XBYTE[0xF01E]==1){         互为备用
           modem_angser(1,1);
           delay(200);
           modem_flow(1,3);
           delay(200);
         }
       }*/
       i=0;
       while(i<4){
         XBYTE[0xf070+i]=0;            /*软件定时器1*/
         i=i+1;
       }
       i=0;
       while(i<3){
         XBYTE[0xf02d+i]=4;
         XBYTE[0xf001+i]=4;        //初始化串口波特率为9600
         i=i+1;
       }
}
/*-------------------------------------------------------*/
/*void   writeram(){                     CPU板出错向指挥指挥中心回馈

       uchar  i;

       wdi_reset();
       i=0;
       while(i<0x50){
         XBYTE[0xf030+i]=0;
         i=i+1;
       }
       XBYTE[0xf01f]=0xf0;             初始化双口RAM接收数据最远端地址
       XBYTE[0xf020]=0x80;
       XBYTE[0xf021]=0xf0;             初始化双口RAM发送数据最远端地址
       XBYTE[0xf022]=0x8a;

       XBYTE[0xf080]=0x84;
       XBYTE[0xf081]=0;
       XBYTE[0xf082]=8;
       XBYTE[0xf083]=8;
       XBYTE[0xf084]=0;
       XBYTE[0xf085]=0;
       XBYTE[0xf086]=0;
       XBYTE[0xf087]=0;
       XBYTE[0xf088]=0;
       XBYTE[0xf089]=0;
       XBYTE[0xf08a]=0;

       XBYTE[0xf031]=0xf0;
       XBYTE[0xf032]=0x80;
       XBYTE[0xf033]=0xf0;
       XBYTE[0xf034]=0x8a;
       XBYTE[0xf030]=1;

       XBYTE[0xf036]=0xf0;
       XBYTE[0xf037]=0x80;
       XBYTE[0xf038]=0xf0;
       XBYTE[0xf039]=0x8a;
       XBYTE[0xf035]=2;
}*/
/*-------------------------------------------------------*/
/*void   cpuerr_dete(){                  CPU板工作正常检查

       uchar  data i,j;

       wdi_reset();
       XBYTE[0xf075]=XBYTE[0xf075]+1;
       if((XBYTE[0xf075]%10)==0){
         i=0;
         j=0;
         while(i<4){
           if(XBYTE[0xf078+i]!=0xaa+i*0x11){
             j=j+1;
           }
           XBYTE[0xf078+i]=0;
         i=i+1;
         }
         if(j>0){
           XBYTE[0xf074]=XBYTE[0xf074]+1;
         }
       }
       if(XBYTE[0xf075]==100){
         if((XBYTE[0xf074]&0x0f)>5){
           if((XBYTE[0xf074]&0xf0)==0){
             writeram();
             XBYTE[0xf074]=XBYTE[0xf074]|0x10;
           }
         }
         else{
           XBYTE[0xf074]=0;
         }
         XBYTE[0xf074]=XBYTE[0xf074]&0xf0;
         XBYTE[0xf075]=0;
       }
}*/
/*-------------------------------------------------------*/
main(){
       uchar  data i,data true1,data true2,data connect,data de_true;
       uint   data  time1,data time2,data t_no;
                   /*  0xF070、F071用于通信口1Modem拨号后定时  */
                   /*  0xF072、F073用于通信口2Modem拨号后定时  */
                   /*  0xF074、0xF075用于CPU板工作正常检测     */
                   /*  0xF076         接收指挥中心测试标志     */
       reset();
       true1=0;
       true2=0;
       time2=0;
       de_true=0;
       if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
         time1=15000;
       }
       else{
         time1=0;
       }
       t_no=30;                        /*延迟T_NO*8秒发送测试*/
       sparkler_main(15);

       while(1){
         IE=0x85;                               //开cpu,外部中断0,1
         if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
           if(XBYTE[0xf01b]==1){       /*光端机链路故障时频繁测试*/
             t_no=2;
           }
           else{
             t_no=5;
           }
         }
         if(XBYTE[0xf024]==1){         /*写双口RAM标志检测*/
           XBYTE[0xf024]=0;
         }
         if(XBYTE[0xf000]>0){          /*通信速率设定*/
           set_baud();
           if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
             time1=15000;
           }
           else{
             time1=0;
           }
         }
         wdi_reset();
         if(XBYTE[0xf076]==1){
           if(XBYTE[0xf01b]==1){/*有故障收到对方测试时进行测试*/
             comm_dete(1,1);
             time1=0;
           }
           comm_dete(1,0);
           sparkler_main(2);
           XBYTE[0xf076]=0;
         }
      if((XBYTE[0xf004]==1)||(XBYTE[0xf004]==2))
       {/*MODEM连通链路测试*/
           if(XBYTE[0xeffe]>0x80){     /*MODEM连通链路挂断设置故障*/
                                 connect=0;
                                 t_no=30;
                                 }
           if((XBYTE[0xeffe]<0x80)&(connect==0))
             {connect=1;
              t_no=5;
              comm_dete(1,1);
              time1=0;
              time2=0;
              }
         }

         i=0;
         while(i<6){                   /*是否有数据发送*/
           if((XBYTE[0xf030+5*i]>0)&(XBYTE[0xf030+5*i]<4)){
             i=i+10;
           }
           i=i+1;
         }
         if(i>10){
           i=i-11;
           cpuwrit_dete(i);            /*cpu写双口RAM检测*/
         }
         if(i>5){
                 i=0;
                 }
         if(XBYTE[0xf030+5*i]==3){     /*485口发送*/
                                  send_485(i);
                                 }
         if(XBYTE[0xf030+5*i]==1){     /*com1口发送*/
                                 wdi_reset();
                                 if((XBYTE[0xf004]==1)&(XBYTE[0xeffe]<0x80))
                                                           {/*拨号*/
                                                           if(XBYTE[0xf01b]==0){
                                                                                send_8250(i,1);
                                                                               }
                                                            }
       
                                 if((XBYTE[0xf004]==2)&(XBYTE[0xeffe]<0x80)){/*专线MODE连接*/
                                                                             send_8250(i,1);
                                                                             }
                                 if((XBYTE[0xf004]>2)||(XBYTE[0xf004]==0))
                                                            {
           /*拨号Modem:  01H;
             专线Modem:  02H;
             光端机:     03H
             不用为:     00H*/
                                                             if(XBYTE[0xf01b]==0){
                                                                                  send_8250(i,1);
                                                                                   }
                                                               }
                                  }
         if(XBYTE[0xf030+5*i]==2){   /*com2口发送*/
                                  wdi_reset();
                                  if((XBYTE[0xf005]==1)&(XBYTE[0xeffe]<0x80)){/*拨号或专线MODE连接*/
                                                                              send_8250(i,2);
                                                                              XBYTE[0xf01c]=0;
                                                                              }
                                  else{
                                       XBYTE[0xf01c]=1;
                                       }
                                  if((XBYTE[0xf005]==2)&(XBYTE[0xdffe]<0x80)){/*专线MODE连接*/
                                                                                send_8250(i,2);
                                                                              }
                                  if((XBYTE[0xf005]>2)||(XBYTE[0xf005]==0)){/*光端机*/
                                                                            send_8250(i,2);
                                                                            }
                                  }
         time2=time2+1;
         if(time2==t_no){              /*延迟T_NO*10秒发送测试*/
           time2=0;
           time1=time1+1;              /*通信测试*/
         }
         if((time1==15000)&(time2==1)){
             XBYTE[0xf02a]=1;
             comm_dete(1,1);
             de_true=1;
        /*     comm_dete(2,1);*/
             XBYTE[0xf02b]=1;
         }
         if(time1==17200){             /*写入通信口故障*/
           time1=0;
           if(de_true==1){
             de_true=0;
             XBYTE[0xf01b]=XBYTE[0xf02a];
             XBYTE[0xf01c]=XBYTE[0xf02b];
             if(XBYTE[0xf02a]==1){
               true1=true1+1;
             }
             else{
               true1=0;
             }
             if(XBYTE[0xf02b]==1){
               true2=true2+1;
             }
             else{
               true2=0;
             }
           }
           if((true1>1)&(XBYTE[0xf004]==1)){/*串口1挂断*/
             true1=0;
             XBYTE[0xeffc]=1;
             delay(255);
             XBYTE[0xeffc]=0;
             delay(255);
             modem_angser(1,1);
             delay(200);
             modem_flow(1,3);
             delay(200);
           }
           if((true2>1)&(XBYTE[0xf005]==1)){/*串口2挂断*/
             true2=0;
             XBYTE[0xdffc]=1;
             delay(255);
             XBYTE[0xdffc]=0;
             delay(255);
             modem_angser(2,1);
             delay(200);
             modem_flow(2,3);
             delay(200);
           }
         }
       }
}
/*=======================================================================*/

⌨️ 快捷键说明

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