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

📄 second.lst

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


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

stmt level    source

   1          #include <second.h>
   2          
   3          unsigned char xdata cmd;
   4          
   5          /*遥控处理函数*/
   6          remote_deal()
   7          {
   8   1         unsigned char i;
   9   1         for(i=0;i<8;i++){    /*确认当前被遥控的相位数*/
  10   2         if(re_message[i]==20){
  11   3                               reph_number=(i+1);
  12   3                               //remote_state=1;
  13   3                               }
  14   2                       }
  15   1         for(i=8;i<12;i++){    /*确认当前被遥控的相位数*/
  16   2         if(re_message[i]==20){
  17   3                               reph_number=(i+1);
  18   3                               }
  19   2                           }
  20   1        if((reph_number>0)&&(reph_number<9)){
  21   2            re_coloc++;
  22   2            if(re_coloc>100)re_coloc=100;
  23   2            if(re_coloc==1)re_exe_flag=1;   //一旦有合法遥控输入即建立遥控动作执行标志
  24   2            re_control=1;                   //遥控状态标志
  25   2            forceacting=0;                  //清除强制启动开始标志
  26   2            if(lastreph!=reph_number){      //遥控的相位和上一次遥控的相位不相等
  27   3                   re_coloc=0;
  28   3                   clear_state=1;
  29   3                   lastreph=reph_number;
  30   3                   act_flag=1;
  31   3                   re_keep_flag=0;          //遥控阶段维持标志清,遥控进入指定阶段后该标志1,有新的遥控输入0
  32   3                                      }else {
  33   3                                            act_flag=0;
  34   3                                            }
  35   2                                             }else{
  36   2                                                    re_control=0;
  37   2                                                    act_flag=0;
  38   2      
  39   2                                                    }
  40   1         if((reph_number>step_num)||(reph_number==12)){//退出遥控进入自动
  41   2                                                       re_control=0;
  42   2                                                       re_coloc=0;
  43   2                                                     //  XBYTE[0X6D28]=0;//手动标志一并归零
  44   2                                                       }
  45   1         lastreph=reph_number;
  46   1      }
  47          /***************************************************/
  48          //手动处理函数
  49          man_deal()
  50          {
  51   1         if(force_flag==1){              //6d28单元中字节内容不为0
  52   2                   re_control=0;      //清除遥控标志
  53   2                   re_coloc=0;
  54   2                   force_coloc++;
  55   2                   if(force_coloc>100)force_coloc=100;
C51 COMPILER V6.02  SECOND                                                                 09/28/2006 21:46:49 PAGE 2   

  56   2                   if(force_coloc==1)force_exe_flag=1;
  57   2                   if(force_number!=last_forcenumber){
  58   3                       forceacting=1;   //强制过程开始标志 到运行到指定阶段或遥控操作中断
  59   3                       act_force=1;     //进入强制第一秒标志
  60   3                       re_keep_force=0;
  61   3                       force_coloc=0;
  62   3      
  63   3                                                      }
  64   2                       }
  65   1         if((force_number>step_num)||(force_flag==4)){//退出遥控进入自动
  66   2                                                       force_flag=0;
  67   2                                                       force_coloc=0;
  68   2                                                       XBYTE[0X6D28]=0;//手动标志一并归零
  69   2                                                       }
  70   1         last_forcenumber=force_number;
  71   1      }
  72          
  73          /*****************************************************************************************************/
  74          // 读时间
  75          /*****************************************************************************************************/
  76          
  77          void read_time()  {
  78   1      
  79   1          now_day = XBYTE[0XC006]; /*星期*/
  80   1          now_year= XBYTE[0XC009]; /*年份*/
  81   1          now_month=XBYTE[0XC008]; /*月份*/
  82   1          now_date= XBYTE[0XC007]; /*日子*/
  83   1          now_hour= XBYTE[0XC004]; /*小时*/
  84   1          now_min = XBYTE[0XC002]; /*分钟*/
  85   1          now_sec = XBYTE[0XC000]; /*秒*/
  86   1          now_time=now_hour*60+now_min;    //当前时间以分钟计算
  87   1          begin_time=XBYTE[0X72E2]*60+XBYTE[0X72E3];
  88   1          end_time=XBYTE[0X72E4]*60+XBYTE[0X72E5];
  89   1          if((now_time==begin_time)&&(now_sec==0)){
  90   2                                                   start_counter=0;
  91   2                                                   }
  92   1          if(end_time<begin_time)    //时段开始的时间晚于时段结束的时间,即5点开始,第二天4点关机
  93   1          {
  94   2             if((now_time>=begin_time) || (now_time<end_time))
  95   2                work_time=1;
  96   2             else
  97   2                work_time=0;
  98   2          }
  99   1          else if(end_time>begin_time)
 100   1          {
 101   2             if((now_time>=begin_time) && (now_time<end_time))
 102   2                work_time=1;
 103   2             else
 104   2                work_time=0;
 105   2          }
 106   1          else
 107   1             work_time=1;
 108   1      
 109   1           if((now_hour==0x17)&&(now_min==0x3b)&&(now_sec==0x3B))start_counter=5;
 110   1      }
 111          /*------------求最大值-----------------------*/
 112          //max(array_time)
 113          //uchar   array_time[16];
 114          //{
 115          
 116          // uchar max_value,k;
 117          // max_value=array_time[0];
C51 COMPILER V6.02  SECOND                                                                 09/28/2006 21:46:49 PAGE 3   

 118          // for(k=1;k<16;k++)
 119          //    {
 120          //     if(array_time[k]>max_value)
 121          //     max_value=array_time[k];
 122          //     }
 123          //     return(max_value);
 124          //}
 125          
 126           /*------------------------------------------*/
 127          uchar search_step_time()  using 1         //计算感应控制阶段时间=最小绿灯+红灯+黄灯
 128          {
 129   1         uchar i,max_temp;
 130   1         uint  j;
 131   1         uint offset;
 132   1             mmax_timed=0;
 133   1             ensensor_flag = 1;
 134   1             sensor_car_flag= 0;
 135   1             min_greentime=0;
 136   1             max_greentime = 0;
 137   1      
 138   1             for(i=0; i<16; i++)                             //此循环用于查找当前阶段用到的相位
 139   1             {
 140   2                j = 18*i;
 141   2                offset= 0x0001;
 142   2                offset= offset<<i;
 143   2      
 144   2                now_phase_temp = offset&inuse_phase[step_counter];   ////inuse_phase:阶段用到的相位step_counter:
             -阶段号
 145   2                now_phase_tempn = offset&inuse_phasen[step_counter];
 146   2                if(now_phase_temp!=0)
 147   2                {
 148   3                 /*  if(((XBYTE[baseaddr_now_phasesch+j+2]&0x04)==0x04) && (now_phase_tempn==0)) //行人
 149   3                   {
 150   3                    max_time=XBYTE[baseaddr_now_phasesch+j+12]+XBYTE[baseaddr_now_phasesch+j+16];
 151   3                     //max_time:=最小绿灯+红灯
 152   3                    }   */
 153   3                   if(((XBYTE[baseaddr_now_phasesch+j+2]&0x04)!=0x04) /*&& (now_phase_tempn==0)*/)
 154   3                   {
 155   4                       no_vehicle_step[step_counter]=1;//该阶段有无机动车标志
 156   4                       sensor_distance=XBYTE[baseaddr_now_phasesch+j+11];
 157   4                       //最小绿灯
 158   4                       min_green = XBYTE[baseaddr_now_phasesch+j+12]-XBYTE[baseaddr_now_phasesch+j+17];//;-senso
             -r_distance;
 159   4                       if(min_green>min_greentime)min_greentime =min_green;
 160   4                       //  min_greentime =最小绿灯-绿闪-单位步长
 161   4                       //最大绿灯
 162   4                       max_green= XBYTE[baseaddr_now_phasesch+j+13]-XBYTE[baseaddr_now_phasesch+j+17];
 163   4                       if(max_green>max_greentime)max_greentime =  max_green;
 164   4                       //查找出最小绿灯中最长的绿灯时间
 165   4                       max_temp=XBYTE[baseaddr_now_phasesch+j+12]+XBYTE[baseaddr_now_phasesch+j+15]+XBYTE[basead
             -dr_now_phasesch+j+16];
 166   4                       if(max_temp>mmax_timed)mmax_timed=max_temp;
 167   4                       //max_green_flash=XBYTE[baseaddr_now_phasesch+j+17];
 168   4                   }
 169   3      
 170   3                }
 171   2      
 172   2             }
 173   1      

⌨️ 快捷键说明

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