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

📄 hjcomm.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 5 页
字号:
       }
       if(obj==0){           //---------------------指挥中心向通信单元发测试包
         XBYTE[0xeff0-ko_add]=0xAA;/*发送数据体*/
         i=i+0xAA;
         j=0;
         while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
           wdi_reset();
           j=j+1;
         }
         XBYTE[0xeff0-ko_add]=0x55;/*发送数据标体*/
         i=i+0x55;
         j=0;
         while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
           wdi_reset();
           j=j+1;
         }
       }
       else{  //通信单元向指挥中心发测试包
         XBYTE[0xeff0-ko_add]=0x55;/*发送数据体*/
         i=i+0x55;
         j=0;
         while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
           wdi_reset();
           j=j+1;
         }
         XBYTE[0xeff0-ko_add]=0xAA;/*发送数据标体*/
         i=i+0xAA;
         j=0;
         while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
           wdi_reset();
           j=j+1;
         }
         if(ko_add==0){
           P1_5=~P1_5;
         }
       }
       XBYTE[0xeff0-ko_add]=i;/*发送校验和*/
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
         wdi_reset();
         j=j+1;
       }
}
/*-------------------------------------------------------*/
void   service_comm1()  interrupt  0{  /*通信口1接收程序*/

       uchar  data cable_no, i, true, star_bit, star_bc;
       uchar  data one_date,sum;
       uchar  data date_deca,long1,long2;
       uint   data rd_begin,rd_end,date_space,res_add, date_length;

       EA=0;
       star_bit=XBYTE[0xeff0];
       XBYTE[0xf01a]=1;
       true=1;
       i=0;
       star_bc=0x66;
       wdi_reset();
       while(i<9)
            {
             if(star_bit==star_bc){        /*判定起始位0x66*/
             date_space=0;
             while(((XBYTE[0xeff5]&0x01)==0)&(date_space<7000))
                                                       {
                                                        date_space=date_space+1;
                                                        if(date_space==7000)i=9;
                                                        }
            star_bit=XBYTE[0xeff0];
            star_bc=star_bc+0x11;
                                  }
            else{
                 i=10;
                 true=0;
                 }
            i=i+1;
           }

       if(star_bit!=0xff){
                          true=0;
                          }
       if(true){
               i=0;
               date_space=0;
               while(((XBYTE[0xeff5]&0x01)==0)&(date_space<7000))
                      {
                       date_space=date_space+1;
                       wdi_reset();
                       if(date_space==7000){
                                              true=0;
                                            }
                       }
         wdi_reset();
         date_deca=XBYTE[0xeff0];      /*获取数据标识*/
         if(date_deca==0x03){
           sum=10;
           i=0;
           while(i<5){
             date_space=0;
             while(((XBYTE[0xeff5]&0x01)==0)&(date_space<7000)){
               date_space=date_space+1;
               wdi_reset();
               if(date_space==7000){
                 i=9;
               }
             }
             long1=XBYTE[0xeff0];
             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){/*指挥中心进行测试*/
             XBYTE[0xf076]=1;
           }
           if(sum==8){/*路口机测试的返回值进行测试*/
             XBYTE[0xf02a]=0;
             XBYTE[0xf01b]=0;
             P1_4=~P1_4;
           }
           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[0xeff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
             if(date_space==7000){
               i=9;
             }
           }
           long1=XBYTE[0xeff0];
           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[0xeff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
             if(date_space==7000){
               i=9;
             }
           }
           long2=XBYTE[0xeff0];
           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[0xeff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             wdi_reset();
           }
           XBYTE[res_add]=XBYTE[0xeff0];
           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[0xeff5]&0x01)==0)&(date_space<7000)){
           date_space=date_space+1;
           wdi_reset();
           if(date_space==7000){
             date_length=0;
           }
         }
         i=XBYTE[0xeff0];
         if(i==sum){                   /*判断校验和*/
           XBYTE[0xf050+5*cable_no]=1; /*接收寄存器标志置1*/
           i=0;
           while((i<20)&(XBYTE[0xf050+5*cable_no]!=1)){
             XBYTE[0xf050+5*cable_no]=1;/*接收寄存器标志置1*/
             i=i+1;
           }
           if(XBYTE[0xf07e]==0xff){
             XBYTE[0xf07d]=XBYTE[0xf07d]+1;
           }
           XBYTE[0xf07e]=XBYTE[0xf07e]+1;/*接收成功记数*/
           P1_5=~P1_5;
           P1_3=~P1_3;
         }
         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   service_comm2()  interrupt  2{  /*通信口2接收程序*/

       uchar  data cable_no, i, true, star_bit, star_bc;
       uchar  data one_date,sum;
       uchar  data date_deca,long1,long2;
       uint   data rd_begin,rd_end,date_space,res_add, date_length;

       EA=0;
       star_bit=XBYTE[0xdff0];
       XBYTE[0xf01a]=1;
       true=1;
       i=0;
       star_bc=0x66;
       wdi_reset();
       while(i<9){
         if(star_bit==star_bc){        /*判定起始位0x66*/
           date_space=0;
           while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
             date_space=date_space+1;
             if(date_space==7000){
               i=9;
             }
           }
           star_bit=XBYTE[0xdff0];
           star_bc=star_bc+0x11;
         }
         else{
           i=10;
           true=0;
         }
         i=i+1;
       }
       if(star_bit!=0xff){
         true=0;
       }
       if(true){
         P1_4=~P1_4;
         i=0;
         date_space=0;
         while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
           date_space=date_space+1;
           wdi_reset();
           if(date_space==7000){
             true=0;
           }
         }
         wdi_reset();
         date_deca=XBYTE[0xdff0];      /*获取数据标识*/
         if(date_deca==0x03){

⌨️ 快捷键说明

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