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

📄 fpgadram.lst

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  FPGADRAM                                                               09/28/2006 21:46:50 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE FPGADRAM
OBJECT MODULE PLACED IN F:\LAIWORK\GB_ASC\FPGADRAM.OBJ
COMPILER INVOKED BY: c:\COMP51V6\C51.EXE F:\LAIWORK\GB_ASC\FPGADRAM.C DB SB OE LARGE

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          extern bit re_control;
   4          unsigned int xdata start_addr;
   5          unsigned int xdata end_addr;
   6          unsigned int xdata address;
   7          unsigned int xdata data_address=0xa080;    //双口RAM数据存放地址计数器
   8          unsigned char xdata iiiii,flagi;
   9          unsigned char xdata KB=0;
  10          unsigned char xdata sch_step[16];
  11          unsigned int re_flagaddr;
  12          unsigned int xdata tr_flagaddr=0xa030;
  13          unsigned int tr_startaddr;     //发送数据开始地址
  14          unsigned int tr_endaddr;   //
  15          unsigned char c080=0x81;
  16          sbit FarContrlLed=P1^1;
  17          extern unsigned char xdata machine_flag;   //主机或从机标志     1:主机  0:从机
  18          extern  unsigned char step_time;
  19          extern  unsigned char now_step_key;
  20          extern  unsigned char step_counter;              //阶段号
  21          extern  unsigned char xdata force_flag;
  22          
  23          unsigned int detail_answer(/*unsigned char *ptr,*/unsigned int len,unsigned char detail)
  24          {
  25   1        unsigned char i;
  26   1      
  27   1        while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
  28   1        XBYTE[0xa023]=0x01;                              //CPU修改头尾
  29   1        XBYTE[0xa024]=0X00;
  30   1        data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;    //CPU程序可以应用的首地址,偏移地址
  31   1        data_address=(data_address&0x7ff);
  32   1      
  33   1      
  34   1        address=data_address;                     //首地址偏移量
  35   1        data_address=data_address+len;            //应答数据长度1字节
  36   1        if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
  37   1        data_address--;
  38   1        XBYTE[0XA021]=data_address>>8;          //尾地址偏移量
  39   1        XBYTE[0XA022]=data_address;
  40   1        XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
  41   1        XBYTE[0XA024]=0X00;
  42   1        tr_flagaddr=0xa030;
  43   1        for(i=0;i<6;i++){
  44   2            tr_flagaddr=tr_flagaddr+i*5;
  45   2            if(XBYTE[tr_flagaddr]==0x87)break;
  46   2                         }
  47   1        if(i==6)return 1 ;
  48   1        XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
  49   1        XBYTE[tr_flagaddr+2]=address;
  50   1      
  51   1        XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
  52   1        XBYTE[tr_flagaddr+4]=data_address;
  53   1        address=address+0xa000;                 //发送应答数据   绝对地址
  54   1        if(address>0xa7f0)address=0xa080;
  55   1        XBYTE[address]=detail;
C51 COMPILER V6.02  FPGADRAM                                                               09/28/2006 21:46:50 PAGE 2   

  56   1        XBYTE[tr_flagaddr]=0x01;
  57   1        return 1;
  58   1      }
  59          
  60          unsigned char answer_fpga(unsigned char flag) using 1
  61          {
  62   1        unsigned char i,a;
  63   1      
  64   1      
  65   1       //相应的接收标志写成0x87
  66   1           XBYTE[re_flagaddr]=0x87;
  67   1      
  68   1            for(i=0;i<6;i++){
  69   2                 tr_flagaddr=0XA030+5*i;
  70   2                 if(XBYTE[tr_flagaddr]==0x87)break;
  71   2                            }
  72   1                 if(i==6)return 1;
  73   1                 switch(flag){ //FPG对CPU进行设置
  74   2                    case 0x92:break;
  75   2                    case 0x93:a=detail_answer(1,0xd3);break;
  76   2                    case 0x94:a=detail_answer(1,0xd4);break;
  77   2                    case 0x95:a=detail_answer(1,0xd5);break;
  78   2                    case 0x96:a=detail_answer(1,0xd6);break;
  79   2                    case 0x97:a=detail_answer(1,0xd7);break;
  80   2                    case 0x98:a=detail_answer(1,0xd8);break;
  81   2                    case 0x99:a=detail_answer(1,0xd9);break;
  82   2                    case 0x9a:a=detail_answer(1,0xda);break;
  83   2                    case 0x9c:a=detail_answer(1,0xdc);break;
  84   2                    case 0x9d:break;
  85   2                    case 0x9e:break;
  86   2                    case 0x9f:a=detail_answer(1,0xDF);
  87   2                             break;
  88   2                    default:break;
  89   2                        }
  90   1      
  91   1          return 1;
  92   1           }
  93          
  94          unsigned char fpga_dram_data(unsigned char flag)  using 1
  95          {
  96   1      
  97   1        unsigned int i,j;
  98   1        unsigned char a;
  99   1        switch(flag){
 100   2           case 0x92:break;
 101   2           case 0x93://设置时间   数据由双口RAM读到VNRAM中
 102   2                     address++;
 103   2                     if(address>0xa7f0)address=0xa080;
 104   2                     a=XBYTE[address];
 105   2                     XBYTE[0XC009]=a;  //year
 106   2      
 107   2                     address++;
 108   2                     if(address>0xa7f0)address=0xa080;
 109   2                     XBYTE[0XC008]=XBYTE[address];  //month
 110   2                     address++;
 111   2                     if(address>0xa7f0)address=0xa080;
 112   2                     a=XBYTE[address];
 113   2                     XBYTE[0XC007]=a;  //date
 114   2      
 115   2                     address++;
 116   2                     if(address>0xa7f0)address=0xa080;
 117   2                     a=XBYTE[address];
C51 COMPILER V6.02  FPGADRAM                                                               09/28/2006 21:46:50 PAGE 3   

 118   2                     XBYTE[0XC004]=a;  //hour
 119   2                     address++;
 120   2                     if(address>0xa7f0)address=0xa080;
 121   2                     a=XBYTE[address];
 122   2                     XBYTE[0XC002]=a;  //min
 123   2                     address++;
 124   2                     if(address>0xa7f0)address=0xa080;
 125   2                     a=XBYTE[address];
 126   2                     XBYTE[0XC000]=a;  //sec
 127   2      
 128   2                     address++;
 129   2                     if(address>0xa7f0)address=0xa080;
 130   2                     a=XBYTE[address];
 131   2                     XBYTE[0XC006]=XBYTE[address];  //day
 132   2                     data_address=address;          //实际地址
 133   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 134   2                     //应答
 135   2                     a=answer_fpga(0x93);
 136   2                     break;
 137   2           case 0x94:KB++;
 138   2                     address++;
 139   2                     if(address>0xa7f0)address=0xa080;
 140   2                     if(XBYTE[address]==0){
 141   3                         for(i=0;i<289;i++){
 142   4                                            XBYTE[0X5000+i]=XBYTE[address];
 143   4                                            address++;
 144   4                                            if(address>0xa7f0)address=0xa080;
 145   4                                            }
 146   3                                             }else{
 147   3                             for(i=0;i<289;i++){
 148   4                                               XBYTE[0X5121+i]=XBYTE[address];
 149   4                                               address++;
 150   4                                               if(address>0xa7f0)address=0xa080;
 151   4                                                }
 152   3                                                   }
 153   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 154   2                     a=answer_fpga(0x94);
 155   2                      break;
 156   2           case 0x95:address++;
 157   2                     if(address>0xa7f0)address=0xa080;
 158   2                     j=(XBYTE[address]-1)*98;   //阶段表
 159   2                     for(i=0;i<98;i++){
 160   3                         XBYTE[0X5242+i+j]=XBYTE[address];
 161   3                         address++;
 162   3                         if(address>0xa7f0)address=0xa080;
 163   3                                       }
 164   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 165   2                     a=answer_fpga(0x95);
 166   2                     break;
 167   2           case 0x96:address++;
 168   2                     if(address>0xa7f0)address=0xa080;
 169   2                     j=(XBYTE[address]-1)*41;      //方案
 170   2                     for(i=0;i<41;i++){
 171   3                         XBYTE[0X5e82+i+j]=XBYTE[address];
 172   3                         address++;
 173   3                         if(address>0xa7f0)address=0xa080;
 174   3                                       }
 175   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 176   2                     a=answer_fpga(0x96);
 177   2                     break;
 178   2           case 0x97:
 179   2                     break;
C51 COMPILER V6.02  FPGADRAM                                                               09/28/2006 21:46:50 PAGE 4   

 180   2           case 0x98:address++;
 181   2                     if(address>0xa7f0)address=0xa080;
 182   2                     j=(XBYTE[address]-1)*74;        // 计划
 183   2                     for(i=0;i<74;i++){
 184   3                         XBYTE[0X63a2+i+j]=XBYTE[address];
 185   3                         address++;
 186   3                         if(address>0xa7f0)address=0xa080;
 187   3                                  }
 188   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 189   2                     a=answer_fpga(0x98);
 190   2                     break;
 191   2           case 0x99:address++;
 192   2                     if(address>0xa7f0)address=0xa080;
 193   2                     for(i=0;i<60;i++){
 194   3                         XBYTE[0X6ce2+i]=XBYTE[address];
 195   3                         address++;
 196   3                         if(address>0xa7f0)address=0xa080;
 197   3                                       }
 198   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 199   2                     a=answer_fpga(0x99);
 200   2                     break;
 201   2           case 0x9a:break;
 202   2           case 0x9b:break;
 203   2           case 0x9c:break;
 204   2           case 0x9d:break;
 205   2           case 0x9f:XBYTE[re_flagaddr]=0x87;      //读取操作完成
 206   2                     //如果是从机,则改变阶段历时,阶段号,阶段时间
 207   2                     //非强制,非遥控状况下
 208   2                     if((re_control==0x00)&&((force_flag==0x00)||(force_flag==4))){
 209   3      
 210   3                     if((machine_flag==0x00)&&(XBYTE[start_addr+0xa002]==XBYTE[0x8009])&&(XBYTE[start_addr+0xa00
             -3]==XBYTE[0x800a])){
 211   4                           FarContrlLed= !FarContrlLed;
 212   4                           step_time=XBYTE[start_addr+0xa004];
 213   4                           now_step_key=XBYTE[start_addr+0xa005];
 214   4                           step_counter=XBYTE[start_addr+0xa006];
 215   4                                            }
 216   3                                                                              }
 217   2                     break;
 218   2           case 0xc6://j=/*(XBYTE[address+1]-1)*/31*41;      //方案  接受降级方案 写到方案32指定的空间
 219   2                     for(i=0;i<9;i++){
 220   3                         address++;
 221   3                         if(address>0xa7f0)address=0xa080;
 222   3                                      } //提取有效数据
 223   2                     for(i=0;i<32;i++){
 224   3                         address++;
 225   3                         if(address>0xa7f0)address=0xa080;
 226   3                     //    sch_step[i]=XBYTE[address];
 227   3                                       }
 228   2                     XBYTE[re_flagaddr]=0x87;      //读取操作完成
 229   2                     a=answer_fpga(0x96);
 230   2                     break;
 231   2           case 0x82:XBYTE[re_flagaddr]=0x87;
 232   2                     while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
 233   2                     XBYTE[0xa023]=0x01;                                 //CPU修改头尾
 234   2                     XBYTE[0xa024]=0X00;
 235   2                     data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;  //首地址偏移量
 236   2                     data_address=(data_address&0x7ff);
 237   2                     address=data_address;                     //首地址偏移量
 238   2                     data_address=data_address+17;            //应答数据长度14字节
 239   2                     if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
 240   2                     data_address--;
C51 COMPILER V6.02  FPGADRAM                                                               09/28/2006 21:46:50 PAGE 5   

 241   2                     XBYTE[0XA021]=data_address>>8;          //尾地址偏移量
 242   2                     XBYTE[0XA022]=data_address;
 243   2                     XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
 244   2                     XBYTE[0XA024]=0X00;

⌨️ 快捷键说明

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