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

📄 hjcomm.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 5 页
字号:
           sum=10;
           i=0;
           while(i<5){
             date_space=0;
             while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
               date_space=date_space+1;
               wdi_reset();
               if(date_space==7000){
                 i=9;
               }
             }
             long1=XBYTE[0xdff0];
             if(i==0){/*数据体长度0*/
               if(long1!=0){
                 i=9;
               }
             }
             if(i==1){/*数据体长度2*/
               if(long1!=2){
                 i=9;
               }
             }
             if(i==2){/*AA*/
               if(long1==0xaa){/*指挥中心进行测试*/
                 sum=sum+1;
               }
               if(long1==0x55){/*路口机进行测试*/
                 sum=sum-1;
               }
               if((long1!=0xaa)&(long1!=0x55)){
                 i=9;
               }
             }
             if(i==3){            /*AA*/
               if(long1==0x55){/*指挥中心进行测试*/
                 sum=sum+1;
               }
               if(long1==0xaa){/*路口机进行测试*/
                 sum=sum-1;
               }
               if((long1!=0xaa)&(long1!=0x55)){
                 i=9;
               }
             }
             if(i==4){/*校验和02*/
               if(long1!=2){
                 i=9;
               }
             }
             i=i+1;
           }
           if(sum==12){/*指挥中心进行测试*/
             comm_dete(2,0);
           }
           if(sum==8){/*路口机测试的返回值进行测试*/
             XBYTE[0xf02b]=0;
           }
           i=10;
           true=0;
         }
         else{
           sum=date_deca;
           cable_no=0;
           while(i<6){                   /*查找空的接收标志寄存器*/
             if((XBYTE[0xf050+i*5]>0)&(XBYTE[0xf050+i*5]<4)){
               cable_no=cable_no+1;
               i=i+1;
             }
             else{
               XBYTE[0xf050+i*5]=0x87;
               i=6;
             }
           }
           if(cable_no==6){
             true=0;
           }
           date_space=0;
           while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
             if(date_space==7000){
               i=9;
             }
           }
           long1=XBYTE[0xdff0];
           i=0;
           XBYTE[0xf024]=1;
           while(i<20){
             i=i+1;
             if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){/*判CPU是否修改头尾*/
               i=20;
             }
             else{
               if(i==20){
                 true=0;
                 XBYTE[0xf024]==0;
               }
             }
             i=i+1;
           }
           date_space=0;
           while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
             if(date_space==7000){
               i=9;
             }
           }
           long2=XBYTE[0xdff0];
           date_length=long1*256+long2;
           if(date_length>1600){
             true=0;
           }
         }
       }
       if(true){
         XBYTE[0xf01f]=XBYTE[0xf01f]|0xf0;/*屏蔽高四位*/
         XBYTE[0xf021]=XBYTE[0xf021]|0xf0;
         rd_begin=XBYTE[0xf021]*256+XBYTE[0xf022]+1;/*设置头地址*/
         if((XBYTE[0xf021]==0xf7)&(XBYTE[0xf022]==0xff)){/*设置头地址--尾处于F7FF处*/
           rd_begin=0xf080;
         }
         if(XBYTE[0xf01f]>XBYTE[0xf021]){/*计算数据空间设置尾地址*/
           date_space=(XBYTE[0xf01f]-XBYTE[0xf021])*256+XBYTE[0xf020]-XBYTE[0xf022];
         }
         if(XBYTE[0xf01f]==XBYTE[0xf021]){/*计算数据空间设置尾地址*/
           if(XBYTE[0xf020]>XBYTE[0xf022]){
             date_space=XBYTE[0xf020]-XBYTE[0xf022];
           }
           else{
             date_space=0x7ff+XBYTE[0xf022]-XBYTE[0xf020];
           }
         }
         if((XBYTE[0xf01f]==XBYTE[0xf021])&(XBYTE[0xf020]==XBYTE[0xf022])){/*设置头地址--处于头=尾*/
           rd_begin=0xf080;
           date_space=0xf7ff;
         }
         if(XBYTE[0xf01f]<XBYTE[0xf021]){/*计算数据空间设置尾地址*/
           date_space=0x7ff-(XBYTE[0xf021]-XBYTE[0xf01f])*256+XBYTE[0xf022]-XBYTE[0xf020];
         }
         if(date_space<date_length+3){ /*判断数据空间是否够用*/
           true=0;
         }
         else{
           if(rd_begin+date_length+2>0xf7ff){
             rd_end=date_length+rd_begin-0xf77e;
           }
           else{
             rd_end=rd_begin+date_length+2;
           }
           XBYTE[0xf051+5*cable_no]=rd_begin/256;
           XBYTE[0xf052+5*cable_no]=rd_begin%256;
           XBYTE[0xf053+5*cable_no]=rd_end/256;
           XBYTE[0xf054+5*cable_no]=rd_end%256;
           XBYTE[0xf021]=rd_end/256;   /*设置尾标志*/
           XBYTE[0xf022]=rd_end%256;
           XBYTE[0xf024]=0;
         }
       }
       if(true){
         res_add=rd_begin;
         XBYTE[res_add]=date_deca;
         if(res_add==0xf7ff){
           res_add=0xf080;
         }
         else{
           res_add=res_add+1;
         }
         XBYTE[res_add]=long1;
         if(res_add==0xf7ff){
           res_add=0xf080;
         }
         else{
           res_add=res_add+1;
         }
         XBYTE[res_add]=long2;
         if(res_add==0xf7ff){
           res_add=0xf080;
         }
         else{
           res_add=res_add+1;
         }
         while(date_length>0){         /*接收数据并写RAM*/
           date_space=0;
           while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
           }
           XBYTE[res_add]=XBYTE[0xdff0];
           sum=sum+XBYTE[res_add];
           if(res_add==0xf7ff){
             res_add=0xf080;
           }
           else{
             res_add=res_add+1;
           }
           date_length=date_length-1;
         }
         date_space=0;
         while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
           date_space=date_space+1;
           wdi_reset();
           if(date_space==7000){
             date_length=0;
           }
         }
         i=XBYTE[0xdff0];
         if(i==sum){                   /*判断校验和*/
           XBYTE[0xf050+5*cable_no]=2; /*接收寄存器标志置1*/
           i=0;
           while((i<20)&(XBYTE[0xf050+5*cable_no]!=2)){
             XBYTE[0xf050+5*cable_no]=2;/*接收寄存器标志置1*/
             i=i+1;
           }
         }
         else{
           true=true+1;
         }
       }
       if(true==2){
         XBYTE[0xf050+5*cable_no]=0;   /*接收寄存器清0*/
         i=0;
         while((i<20)&(XBYTE[0xf050+5*cable_no]>0)){
           XBYTE[0xf050+5*cable_no]=0; /*接收寄存器清0*/
           i=i+1;
         }
         i=0;
         XBYTE[0xf024]=1;
         while(i<20){
           if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){/*判CPU是否修改头尾*/
             i=20;
           }
           else{
             XBYTE[0xf024]=1;
           }
           i=i+1;
         }
         if(XBYTE[0xf024]==1){
           if((XBYTE[0xf021]==XBYTE[0xf050+3+5*cable_no])&(XBYTE[0xf022]==XBYTE[0xf050+4+5*cable_no])){
             if(XBYTE[0xf022]==0){
               XBYTE[0xf021]=rd_begin/256-1;/*设置尾标志*/
               XBYTE[0xf022]=0xff;
             }
             else{
               XBYTE[0xf021]=rd_begin/256;/*设置尾标志*/
               XBYTE[0xf022]=rd_begin%256;
             }
           }
         }
       }
       XBYTE[0xf024]=0;
       XBYTE[0xf01a]=0;
       EA=1;
}
/*-------------------------------------------------------*/
void   modem_flow(uchar comm_no,mode){ /*设置MODEM为自动应答*/
       uchar  data date;
       uint   data i;

       EA=0;
       wdi_reset();
       if(comm_no==1){         //--------------------串口1----------------------------
         date=0x41;                    /*A*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x54;                    /*T*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x26;                    /*&*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x4b;                    /*k*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x30+mode;               /*0:k0,1:k1*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x0d;                    /*回车符*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         delay(200);
                                       /*屏蔽MODEM回显*/
         date=0x41;                    /*A*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x54;                    /*T*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x65;                    /*e*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x30;                    /*0*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x0d;                    /*回车符*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         delay(200);
         date=0x41;                    /*A*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x54;                    /*T*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x71;                    /*q*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x31;                    /*1*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x0d;                    /*回车符*/
         XBYTE[0xeff0]=date;
         i=0;
         while((XBYTE[0xeffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         delay(200);
       }
       else{                        //串口 2
         date=0x41;                    /*A*/
         XBYTE[0xdff0]=date;
         i=0;
         while((XBYTE[0xdffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x54;                    /*T*/
         XBYTE[0xdff0]=date;
         i=0;
         while((XBYTE[0xdffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x26;                    /*&*/
         XBYTE[0xdff0]=date;
         i=0;
         while((XBYTE[0xdffd]<0x60)&(i<7000)){
           i=i+1;
           wdi_reset();
         }
         date=0x4b;                    /*k*/
         XBYTE[0xdff0]=date;
         i=0;
         while((XBYTE[0xdffd]<0x60)&(i<7000)){
           i=i+1;

⌨️ 快捷键说明

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