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

📄 fpgadram.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
               a=answer_fpga(0x99);
               break;
     case 0x9a:break;
     case 0x9b:break;
     case 0x9c:break;
     case 0x9d:break;
     case 0x9f:XBYTE[re_flagaddr]=0x87;      //读取操作完成
               //如果是从机,则改变阶段历时,阶段号,阶段时间
               //非强制,非遥控状况下
               if((re_control==0x00)&&((force_flag==0x00)||(force_flag==4))){

               if((machine_flag==0x00)&&(XBYTE[start_addr+0xa002]==XBYTE[0x8009])&&(XBYTE[start_addr+0xa003]==XBYTE[0x800a])){
                     FarContrlLed= !FarContrlLed;
                     step_time=XBYTE[start_addr+0xa004];
                     now_step_key=XBYTE[start_addr+0xa005];
                     step_counter=XBYTE[start_addr+0xa006];
                                      }
                                                                        }
               break;
     case 0xc6://j=/*(XBYTE[address+1]-1)*/31*41;      //方案  接受降级方案 写到方案32指定的空间
               for(i=0;i<9;i++){
                   address++;
                   if(address>0xa7f0)address=0xa080;
                                } //提取有效数据
               for(i=0;i<32;i++){
                   address++;
                   if(address>0xa7f0)address=0xa080;
               //    sch_step[i]=XBYTE[address];
                                 }
               XBYTE[re_flagaddr]=0x87;      //读取操作完成
               a=answer_fpga(0x96);
               break;
     case 0x82:XBYTE[re_flagaddr]=0x87;
               while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
               XBYTE[0xa023]=0x01;                                 //CPU修改头尾
               XBYTE[0xa024]=0X00;
               data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;  //首地址偏移量
               data_address=(data_address&0x7ff);
               address=data_address;                     //首地址偏移量
               data_address=data_address+17;            //应答数据长度14字节
               if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
               data_address--;
               XBYTE[0XA021]=data_address>>8;          //尾地址偏移量
               XBYTE[0XA022]=data_address;
               XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
               XBYTE[0XA024]=0X00;
               tr_flagaddr=0xa030;
               for(i=0;i<6;i++){
                tr_flagaddr=tr_flagaddr+i*5;
                if(XBYTE[tr_flagaddr]==0x87)break;
                   }
               if(i==6){
                        return 1 ;
                        }
               XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
               XBYTE[tr_flagaddr+2]=address;
               XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
               XBYTE[tr_flagaddr+4]=data_address;
               address=address+0xa000;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=0xc2;address++;          //发送应答数据
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=0x10;address++;          //最大输出通道数

               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=0x20;address++;

               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=0x20;address++;
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=0x20;address++;
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=0x20;address++;
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=0x18;address++;
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=XBYTE[0X72E2];address++;       //开机时间小时
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=XBYTE[0X72E3];address++;       //开机时间分钟
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=XBYTE[0X72E4];address++;       //关机时间小时
               if(address>0xa7f0)address=0xa080;

               XBYTE[address]=XBYTE[0X72E5];address++;       //关机时间分钟
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X72E6];address++;       //关机后状态
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X8000];address++;       //路口编号高位地址
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X8001];address++;      //路口编号低位地址
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X8009];address++;      //主机路口编号高位地址
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X800a];address++;      //主机路口编号低位地址
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0X8008];address++;      //主从机标志   1主机,其它从机
               XBYTE[tr_flagaddr]=0x01;
               break;
     case 0x83:XBYTE[re_flagaddr]=0x87;
               while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
               XBYTE[0xa023]=0x01;                              //CPU修改头尾
               XBYTE[0xa024]=0X00;
               data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
               data_address=(data_address&0x7ff);
               address=data_address;
               data_address=data_address+7;            //应答数据长度7字节
               if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
               data_address--;
               XBYTE[0XA021]=data_address>>8;          //
               XBYTE[0XA022]=data_address;
               XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
               XBYTE[0XA024]=0X00;
               tr_flagaddr=0xa030;
               for(i=0;i<6;i++){
                   tr_flagaddr=tr_flagaddr+i*5;
                   if(XBYTE[tr_flagaddr]==0x87)break;
                   }
               if(i==6)return 1 ;
               XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
               XBYTE[tr_flagaddr+2]=address;
               XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
               XBYTE[tr_flagaddr+4]=data_address;
               address=address+0xa000;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=0xc3;address++;
               if(address>0xa7f0)address=0xa080;                                           //发送应答数据
               XBYTE[address]=XBYTE[0XC009];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC008];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC007];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC004];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC002];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC000];address++;
               if(address>0xa7f0)address=0xa080;
               XBYTE[address]=XBYTE[0XC006];
               XBYTE[tr_flagaddr]=0x01;
               break;
     case 0x84:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x84);break;
     case 0x85:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x85);break;
     case 0x86:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x86);break;
     case 0x87:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x87);break;
     case 0x88:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x88);break;
     case 0x89:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x89);break;
     case 0x8a:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8a);break;
     case 0x8b:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8b);break;
     case 0x8c:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8c);break;
     case 0x8d:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8d);break;
     case 0x8e:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8e);break;
     default:break;
               }
  //  return 1;
}
//address代表标志地址 address+1

deal_fpgadram() using 1
{
 unsigned char i=0;
 unsigned char flag=0;
 extern unsigned char xdata flagg;
 //iiiii=0;
 for(iiiii=0;iiiii<6;iiiii++){
   re_flagaddr=0XA050+iiiii*5;
   flagi=XBYTE[re_flagaddr];
   if((flagi==1)||(flagi==2)){//flagi>0&&flagi<5){

      start_addr=XBYTE[re_flagaddr+1];      //偏移地址
      start_addr=(start_addr<<8);
      start_addr=start_addr+XBYTE[re_flagaddr+2];
     // start_addr=start_addr+0xa000;
    //  start_addr=(XBYTE[re_flagaddr+1]<<8)+XBYTE[re_flagaddr+2];
         //开始地址
   //   end_addr  =(XBYTE[re_flagaddr+3]<<8)+XBYTE[re_flagaddr+4];          //结束地址
      end_addr=XBYTE[re_flagaddr+3];
      end_addr=end_addr<<8;
      end_addr=end_addr+ XBYTE[re_flagaddr+4];
    //  end_addr=end_addr+0xa000;
      address=start_addr+0xa000;        //实际开始地址
      data_address=start_addr;          //偏移开始地址
      flagg=XBYTE[start_addr+0xa000];
      //i=fpga_dram_data(flagg);       //接收fpga送来的数据
      fpga_dram_data(flagg);
                      }
                  }


}

⌨️ 快捷键说明

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