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

📄 lcddram.lst

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


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

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          #define  eeprom_addr    0x8050;
   4          //sbit cs_dram=P3^2;
   5          sbit busy=P1^5;
   6          sbit   WatchDog = P1^3;       //看门狗
   7          //  运行状态1,自动 2,手动3,遥控 4,软件绿冲突 5.硬件绿冲突 6.线圈故障降级使用
   8          unsigned char xdata run_state=1;     //  运行状态1,自动 2,手动3,遥控 4,软件绿冲突 5.硬件绿冲突
             - 6.
   9          extern unsigned int xdata data_address;
  10          extern unsigned int xdata address;
  11          extern unsigned int xdata tr_flagaddr;
  12          
  13          extern unsigned char xdata now_day_planid;
  14          extern unsigned char xdata timeid;
  15          extern unsigned char xdata now_schemeid;
  16          extern unsigned char xdata now_step_schid;
  17          extern unsigned char xdata step_counter;
  18          extern unsigned char xdata now_step_uncount;
  19          extern unsigned char xdata  led83[30],led82[5];
  20          extern unsigned char xdata step_num;
  21                 unsigned char xdata tt,ttd,ch[100];
  22                 unsigned int  xdata utemp;
  23          
  24          unsigned char cpu_fpga_set(unsigned char flag,unsigned int ptr,unsigned int len)
  25          {
  26   1        unsigned int i;
  27   1        data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1;
  28   1        address=data_address;
  29   1        data_address=data_address+len;            //应答数据长度1字节
  30   1        if(data_address>0xa7f0)data_address=data_address-0xa7f0+0xa080;
  31   1        while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
  32   1        XBYTE[0xa023]=0x01;                              //CPU修改头尾
  33   1        XBYTE[0xa024]=0X00;
  34   1        data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
  35   1        data_address=(data_address&0x7ff);
  36   1        address=data_address;
  37   1        data_address=data_address+len;            //应答数据长度1字节
  38   1        if(data_address>0xa7f0)data_address=data_address-0x7f0+0x80;
  39   1        data_address--;
  40   1        XBYTE[0XA021]=data_address>>8;          //
  41   1        XBYTE[0XA022]=data_address;
  42   1        XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
  43   1        XBYTE[0XA024]=0X00;
  44   1        XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
  45   1        XBYTE[tr_flagaddr+2]=address;
  46   1        XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
  47   1        XBYTE[tr_flagaddr+4]=data_address;
  48   1        address=address+0xa000;                 //发送应答数据
  49   1        if(address>0xa7f0)address=0xa080;
  50   1        XBYTE[address]=flag;
  51   1        address++;
  52   1        for(i=0;i<len;i++){
  53   2            XBYTE[address+i]=XBYTE[ptr+i];
  54   2                           }
C51 COMPILER V6.02  LCDDRAM                                                                09/28/2006 21:46:50 PAGE 2   

  55   1        XBYTE[tr_flagaddr]=0x01;
  56   1        return 1;
  57   1      }
  58          deal_lcddram()
  59          {
  60   1       unsigned char flag,tq;
  61   1       unsigned char id,fu;
  62   1       unsigned char idcode;
  63   1       unsigned int i,j,k,num,addr;
  64   1      
  65   1      //查询
  66   1       do{ }while(busy==0);
  67   1       flag=XBYTE[0XC408];
  68   1       do{ }while(busy==0);
  69   1       id=XBYTE[0XC40A];
  70   1       do{ }while(busy==0);
  71   1       fu=XBYTE[0XC40b];
  72   1       do{ }while(busy==0);
  73   1       idcode=XBYTE[0XC40c];
  74   1       if(flag==1){
  75   2         // EA=0;
  76   2          switch(id){
  77   3                  case 0x80: //do{WatchDog = !WatchDog;}while(busy==0);XBYTE[0XC410]=0XC0;
  78   3                             do{ }while(busy==0);XBYTE[0XC410]=XBYTE[0X8002];
  79   3                             do{ }while(busy==0);XBYTE[0XC411]=XBYTE[0X8003];
  80   3                             do{ }while(busy==0);XBYTE[0XC412]=XBYTE[0X8004];
  81   3                             do{ }while(busy==0);XBYTE[0XC413]=XBYTE[0X8005];
  82   3                             do{ }while(busy==0);XBYTE[0XC414]=XBYTE[0X8006];
  83   3                             do{ }while(busy==0);XBYTE[0XC415]=XBYTE[0X8007];
  84   3                             do{ }while(busy==0);XBYTE[0XC416]=XBYTE[0X8008];
  85   3                             do{ }while(busy==0);XBYTE[0XC408]=0;
  86   3                             break;
  87   3                  case 0x82: do{ }while(busy==0);XBYTE[0XC410]=0XC2;
  88   3                             do{ }while(busy==0);XBYTE[0XC411]=0x20;                   //最大输出通道数
  89   3                             do{ }while(busy==0);XBYTE[0XC412]=0X20;                   //支持阶段表数
  90   3                             do{}while(busy==0);XBYTE[0XC413]=0X20;                   //一个阶段表支持的最大阶段
             -数
  91   3                             do{}while(busy==0);XBYTE[0XC414]=0X20;                   //最大控制方案数
  92   3                             do{}while(busy==0);XBYTE[0XC415]=0X20;                   //最大日计划数
  93   3                             do{}while(busy==0);XBYTE[0XC416]=0X18;                   //一个日计划支持的最大时段
  94   3                             do{}while(busy==0);XBYTE[0XC417]=XBYTE[0X72E2];          //开机时间小时
  95   3                             do{}while(busy==0);XBYTE[0XC418]=XBYTE[0X72E3];          //开机时间分钟
  96   3                             do{}while(busy==0);XBYTE[0XC419]=XBYTE[0X72E4];          //关机时间小时
  97   3                             do{}while(busy==0);XBYTE[0XC41a]=XBYTE[0X72E5];          //关机时间分钟
  98   3                             do{}while(busy==0);XBYTE[0XC41b]=XBYTE[0X72E6];          //关机后状态
  99   3                             do{}while(busy==0);XBYTE[0XC41c]=XBYTE[0X8000];
 100   3                             do{}while(busy==0);XBYTE[0XC41d]=XBYTE[0X8001];
 101   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 102   3                             break;
 103   3      
 104   3                 case 0x83: do{}while(busy==0);XBYTE[0XC410]=0XC3;
 105   3                             do{}while(busy==0);XBYTE[0XC411]=XBYTE[0XC009];  //year
 106   3                             do{}while(busy==0);XBYTE[0XC412]=XBYTE[0XC008];  //month
 107   3                             do{}while(busy==0);XBYTE[0XC413]=XBYTE[0XC007];  //date
 108   3                             do{}while(busy==0);XBYTE[0XC414]=XBYTE[0XC004];  //hour
 109   3                             do{}while(busy==0);XBYTE[0XC415]=XBYTE[0XC002];  //min
 110   3                             do{}while(busy==0);XBYTE[0XC416]=XBYTE[0XC000];  //sec
 111   3                             do{}while(busy==0);XBYTE[0XC417]=XBYTE[0XC006];  //day
 112   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 113   3                             break;
 114   3                  case 0x84: do{}while(busy==0);XBYTE[0XC410]=0XC4;       //相位信息
 115   3                             if(idcode==0){
C51 COMPILER V6.02  LCDDRAM                                                                09/28/2006 21:46:50 PAGE 3   

 116   4                               tq=XBYTE[0XC40D];
 117   4                               j=(tq-1)*18;
 118   4                                for(i=0;i<18;i++){
 119   5      
 120   5                                             XBYTE[0XC411+i]=XBYTE[0x5001+i+j];
 121   5                                                  }
 122   4                                           }else{
 123   4                                    j=XBYTE[0XC40D];
 124   4                                    j=(j-1)*18;
 125   4                                    for(i=0;i<18;i++){
 126   5                                             do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5122+i+j];
 127   5                                                       }
 128   4                                                 }
 129   3      
 130   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 131   3                             break;
 132   3                  case 0x85: XBYTE[0XC410]=0XC5;       //阶段表
 133   3                             j=(idcode-1)*98;
 134   3                             for(i=0;i<98;i++){
 135   4                                  if(i==4){
 136   5                                           do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j]+1;
 137   5                                           }else{
 138   5                                           do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j];
 139   5                                                 }
 140   4                                               }
 141   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 142   3                             break;
 143   3                  case 0x86: do{}while(busy==0);XBYTE[0XC410]=0XC6;      //控制方案
 144   3                             j=(idcode-1)*41;
 145   3                             for(i=0;i<41;i++){
 146   4                                  do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5e82+i+j];
 147   4                                              }
 148   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 149   3                             break;
 150   3               //   case 0x87:break;
 151   3                  case 0x88: do{}while(busy==0);XBYTE[0XC410]=0XC8;      //日计划
 152   3                             j=(idcode-1)*74;
 153   3                             for(i=0;i<74;i++){
 154   4      
 155   4                                  do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x63A2+i+j];
 156   4      
 157   4                                              }
 158   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 159   3                             break;
 160   3                  case 0x89: do{}while(busy==0);XBYTE[0XC410]=0XC9;      //日计划
 161   3                             j=XBYTE[0XC40c];
 162   3                             j=(j-1)*6;
 163   3                             for(i=0;i<60;i++){
 164   4                                      do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x6cE2+i+j];
 165   4                                              }
 166   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 167   3                             break;
 168   3                  case 0x8a:  ////////////////////////////////////////////
 169   3                             do{}while(busy==0);XBYTE[0XC410]=0XCa;            //当前控制信息
 170   3                             do{}while(busy==0);XBYTE[0XC411]=led82[0];        //当天日计划号
 171   3                             do{}while(busy==0);XBYTE[0XC412]=led82[1];        //当天时段号
 172   3                             do{}while(busy==0);XBYTE[0XC413]=led82[2];        //当前控制方案号
 173   3                             j=(led82[2]-1)*41;
 174   3                             j=0x5e85+j;
 175   3                             if(XBYTE[j]==0){
 176   4                                             do{}while(busy==0);XBYTE[0XC414]=0;    //非协调方案
 177   4                                             }else  {
C51 COMPILER V6.02  LCDDRAM                                                                09/28/2006 21:46:50 PAGE 4   

 178   4                                                    do{}while(busy==0);XBYTE[0XC414]=1;  //协调方案
 179   4                                                    }
 180   3                             do{}while(busy==0);XBYTE[0XC408]=0;
 181   3                             break;
 182   3                  case 0x8b: //阶段放行的相位
 183   3                             if((step_counter+1)==step_num){
 184   4                                          led83[6]=1;
 185   4                                           utemp=0x5244+(led83[0]-1)*98;
 186   4                                                }else{
 187   4                                          led83[6]=led83[1]+1;
 188   4                                          utemp=0x5247+(led83[0]-1)*98+step_counter*3;
 189   4                                                            }
 190   3                             led83[9]=XBYTE[utemp];
 191   3                             led83[10]=XBYTE[utemp+1];
 192   3                             do{}while(busy==0);XBYTE[0XC410]=0XCb;                //当前信号机状态
 193   3                             do{}while(busy==0);XBYTE[0XC411]=led83[0];            //当前控制方案附加信息 :当前
             -阶段表号
 194   3                             do{}while(busy==0);XBYTE[0XC412]=led83[1];            //当前阶段
 195   3                             do{}while(busy==0);XBYTE[0XC413]=0x00;

⌨️ 快捷键说明

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