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

📄 greenflic.lst

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 LST
字号:
C51 COMPILER V6.02  GREENFLIC                                                              09/28/2006 21:46:49 PAGE 1   


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

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          
   4          extern unsigned char xdata now_day_planid;
   5          unsigned int xdata conflc_set[32],constep[32];
   6          unsigned char xdata conflag=0,hconflag=0;
   7          extern unsigned char xdata now_schemeid;
   8          extern  unsigned char step_counter;              //阶段号
   9          extern  unsigned int xdata  g_read;
  10          void hard_greenconflic() using 1
  11          {
  12   1        unsigned int addr,an_addr,th_addr,for_addr;
  13   1        unsigned char i,j,k;
  14   1        unsigned char ste_id,phsch_id;
  15   1      
  16   1        unsigned int now_phase,now_lamp,xlht;
  17   1        unsigned int ph_lamp=0;
  18   1        unsigned int xdata crush;
  19   1        unsigned int xdata setpl;
  20   1      
  21   1        hconflag=0x00;
  22   1        addr=0x5e83;
  23   1        addr=addr+(now_schemeid-1)*41;   //方案表号地址
  24   1        ste_id=XBYTE[addr];              //阶段表号
  25   1        addr=0x5246+(ste_id-1)*98;
  26   1        phsch_id=XBYTE[addr];            //用到的相位表号
  27   1        an_addr=0x5244;
  28   1        an_addr=an_addr+(ste_id-1)*98;   //阶段表号
  29   1        th_addr=an_addr+step_counter*3;                   //
  30   1        now_phase=XBYTE[th_addr]*256+XBYTE[th_addr+1];    // 当前阶段放行的相位
  31   1        //当前时刻输出的绿灯灯组
  32   1        now_lamp=g_read;
  33   1        //for_addr=0x5001+(phsch_id-1)*288;
  34   1        for(j=0;j<16;j++){
  35   2             xlht=(0x0001<<j);
  36   2             if((now_lamp&xlht)==xlht){//当前放行的灯组
  37   3                for(k=0;k<16;k++){    //逐相位的查找
  38   4                    for_addr=0x5001+(phsch_id)*288;
  39   4                    for_addr=for_addr+k*18;
  40   4                    setpl=XBYTE[for_addr];
  41   4                    setpl=(setpl<<8);
  42   4                    for_addr++;
  43   4                    setpl=setpl+XBYTE[for_addr];
  44   4                 //   setpl=XBYTE[for_addr]*256+XBYTE[for_addr+1];//相位表中每个相位放行的灯组
  45   4                    //ph_lamp就是当前检测到的绿灯灯组所归属的全部相位
  46   4                    if((setpl&xlht)==xlht){       //若该相位包含了该灯组,则在相应的相位位置置1
  47   5                          ph_lamp=(ph_lamp|(0x0001<<k));
  48   5                                           }
  49   4                                                       }
  50   3                                       }
  51   2                          }
  52   1          // for_addr=0x5000+(phsch_id-1)*288;
  53   1        for(i=0;i<16;i++){
  54   2           xlht=(0x0001<<i);//本阶段里放行的相位
  55   2           if((now_phase&xlht)==xlht){   //逐放行相位 查找其冲突相位
C51 COMPILER V6.02  GREENFLIC                                                              09/28/2006 21:46:49 PAGE 2   

  56   3                 for_addr=0x500a+(phsch_id)*288;
  57   3                 for_addr=for_addr+i*18;
  58   3                 crush=XBYTE[for_addr];
  59   3                 crush=(crush<<8);
  60   3                 for_addr++;
  61   3                 crush=crush+XBYTE[for_addr];
  62   3                // crush=XBYTE[for_addr]*256+ XBYTE[for_addr+1];//查找到的i+1相位的冲突相位
  63   3                 if((crush&ph_lamp)!=0){
  64   4                       hconflag=0x01;
  65   4                                        }
  66   3                                      }
  67   2      
  68   2      
  69   2                          }
  70   1      }
  71          /////////////////////////////////////////////////////////////////////////////////////////
  72          //软件绿冲突检测函数:每周期开始时对信号机对应日计划内的所有方案中对应的相位表进行冲突统计
  73          //在方案指定的阶段表中,逐阶段查找放行的相位,确认没接中有无冲突的相位在同一阶段中出现
  74          ////////////////////////////////////////////////////////////////////////////////////////
  75          void  soft_greenconflic()
  76          {
  77   1       unsigned int addr,an_addr,th_addr,for_addr;
  78   1       unsigned char per_id;   //时段数
  79   1       unsigned char sch_id,step_id,step_nu,phase_id;
  80   1       unsigned char i,k,m;
  81   1       unsigned int j,xlht;
  82   1       conflag=0;
  83   1       addr=0x63a3;            //日计划开始地址
  84   1       per_id=XBYTE[addr];
  85   1      // addr=0x63a6;
  86   1      
  87   1       for(i=0;i<per_id;i++){//每个方案 中都要判断
  88   2           j=i*3;
  89   2           addr=0x63a6;
  90   2           sch_id=XBYTE[addr+j];  //每个时段使用的方案
  91   2           an_addr=0x5e83;
  92   2           an_addr=an_addr+(sch_id-1)*41;
  93   2           step_id=XBYTE[an_addr]; //方案对应的阶段表号
  94   2           step_nu=XBYTE[an_addr+1]; //方案对应的阶段数
  95   2           th_addr=0x5246;
  96   2           th_addr=th_addr+(step_id-1)*98;
  97   2           phase_id=XBYTE[th_addr]; //方案对应的相位表号
  98   2      
  99   2           for(k=0;k<16;k++){
 100   3              for_addr=0x500a+phase_id*288;
 101   3              for_addr=for_addr+k*18;                  //确认每个相位对应的冲突相位
 102   3              conflc_set[k]=XBYTE[for_addr]*256+XBYTE[for_addr+1];
 103   3                             }
 104   2           EA=0;
 105   2           for(k=0;k<step_nu;k++){       //各相位 的冲突相位
 106   3      
 107   3                 //各阶段放行的相位
 108   3                 an_addr=0x5244+k*3;
 109   3                 constep[k]=XBYTE[an_addr]*256+XBYTE[an_addr+1];
 110   3                 for(m=0;m<16;m++){
 111   4                    xlht=0x0001;
 112   4                    xlht=(0x0001<<m);
 113   4                    if((constep[k]&xlht)==xlht){
 114   5                                if((constep[k]&conflc_set[m])!=0x0000){
 115   6                                                            conflag=0x01;
 116   6                                                                       }
 117   5                                                }
C51 COMPILER V6.02  GREENFLIC                                                              09/28/2006 21:46:49 PAGE 3   

 118   4                                    }
 119   3                                  } EA=1;
 120   2                      
 121   2                            }
 122   1      
 123   1      }
C51 COMPILER V6.02  GREENFLIC                                                              09/28/2006 21:46:49 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


constep. . . . . . . . . . . . . . . .  PUBLIC   XDATA  ARRAY    0000H  64
T0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
AC . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D6H  1
T1 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
RD . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
soft_greenconflic. . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  addr . . . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0000H  2
  an_addr. . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0002H  2
  th_addr. . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0002H  2
  for_addr . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0004H  2
  per_id . . . . . . . . . . . . . . .  AUTO     XDATA  U_CHAR   0006H  1
  sch_id . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  step_id. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  step_nu. . . . . . . . . . . . . . .  AUTO     XDATA  U_CHAR   0007H  1
  phase_id . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0002H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0001H  1
  k. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  m. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0002H  1
  j. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
  xlht . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0004H  2
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
INT0 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B2H  1
CY . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D7H  1
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
INT1 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
PS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BCH  1
step_counter . . . . . . . . . . . . .  EXTERN   XDATA  U_CHAR   -----  1
OV . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D2H  1
conflc_set . . . . . . . . . . . . . .  PUBLIC   XDATA  ARRAY    0040H  64
WR . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B6H  1
IE0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0089H  1
IE1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008BH  1
hconflag . . . . . . . . . . . . . . .  PUBLIC   XDATA  U_CHAR   0080H  1
ET0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A9H  1
ET1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ABH  1
TF0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008DH  1
TF1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008FH  1
RB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009AH  1
EX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A8H  1
IT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0088H  1
TB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009BH  1
EX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AAH  1
IT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008AH  1
P. . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D0H  1
SM0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009FH  1
SM1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009EH  1
SM2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009DH  1
PT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B9H  1
PT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BBH  1
RS0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D3H  1
TR0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008CH  1
RS1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D4H  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
PX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B8H  1
PX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BAH  1
C51 COMPILER V6.02  GREENFLIC                                                              09/28/2006 21:46:49 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


conflag. . . . . . . . . . . . . . . .  PUBLIC   XDATA  U_CHAR   0081H  1
g_read . . . . . . . . . . . . . . . .  EXTERN   XDATA  U_INT    -----  2
REN. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009CH  1
RXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B0H  1
TXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B1H  1
F0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D5H  1
hard_greenconflic. . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  addr . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    000AH  2
  an_addr. . . . . . . . . . . . . . .  * REG *  DATA   U_INT    000CH  2
  th_addr. . . . . . . . . . . . . . .  * REG *  DATA   U_INT    000CH  2
  for_addr . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0000H  2
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   000BH  1
  j. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   000BH  1
  k. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   000AH  1
  ste_id . . . . . . . . . . . . . . .  AUTO     XDATA  U_CHAR   0002H  1
  phsch_id . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0009H  1
  now_phase. . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0003H  2
  now_lamp . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0005H  2
  xlht . . . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0007H  2
  ph_lamp. . . . . . . . . . . . . . .  AUTO     XDATA  U_INT    0009H  2
  crush. . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    000CH  2
  setpl. . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    000CH  2
now_schemeid . . . . . . . . . . . . .  EXTERN   XDATA  U_CHAR   -----  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    932    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    130      19
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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