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

📄 fpgadram.lst

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  FPGADRAM                                                               08/02/2006 14:44:15 PAGE 1   


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

stmt level    source

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

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

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

 180   2                     for(i=0;i<60;i++){
 181   3                         XBYTE[0X6ce2+i]=XBYTE[address];
 182   3                         address++;
 183   3                         if(address>0xa7f0)address=0xa080;
 184   3                                       }
 185   2                     answer_fpga(0x99);
 186   2                     break;
 187   2           case 0x9a:break;
 188   2           case 0x9b:break;
 189   2           case 0x9c:break;
 190   2           case 0x9d:break;
 191   2           case 0xc6:j=/*(XBYTE[address+1]-1)*/31*41;      //方案  接受降级方案 写到方案32指定的空间
 192   2      
 193   2                     for(i=0;i<40;i++){
 194   3                         address++;
 195   3                         if(address>0xa7f0)address=0xa080;
 196   3                         XBYTE[0X5e82+i+j]=XBYTE[address];
 197   3                                       }
 198   2                     answer_fpga(0x96);
 199   2                     break;
 200   2           case 0x82:XBYTE[re_flagaddr]=0x87;
 201   2                     data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1;      //首地址偏移量
 202   2                     address=data_address;                               //首地址偏移量
 203   2                     data_address=data_address+14;              //应答数据长度14字节
 204   2                     if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
 205   2                     while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
 206   2                     XBYTE[0xa023]=0x01;                                 //CPU修改头尾
 207   2                     XBYTE[0xa024]=0X00;
 208   2                     data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;  //首地址偏移量
 209   2                     address=data_address;                     //首地址偏移量
 210   2                     data_address=data_address+14;            //应答数据长度14字节
 211   2                     if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
 212   2                     data_address--;
 213   2                     XBYTE[0XA021]=data_address>>8;          //尾地址偏移量
 214   2                     XBYTE[0XA022]=data_address;
 215   2                     XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
 216   2                     XBYTE[0XA024]=0X00;
 217   2                     tr_flagaddr=0xa030;
 218   2                     for(i=0;i<6;i++){
 219   3                      tr_flagaddr=tr_flagaddr+i*5;
 220   3                      if(XBYTE[tr_flagaddr]==0x87)break;
 221   3                         }
 222   2                     if(i==6)return 1 ;

⌨️ 快捷键说明

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