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

📄 second.lst

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


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

stmt level    source

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

  56   3                       act_force=1;     //进入强制第一秒标志
  57   3                       re_keep_force=0;
  58   3                       force_coloc=0;
  59   3      
  60   3                                                      }
  61   2                       }
  62   1         if((force_number>step_num)||(force_flag==4)){//退出遥控进入自动
  63   2                                                       force_flag=0;
  64   2                                                       force_coloc=0;
  65   2                                                       XBYTE[0X6D28]=0;//手动标志一并归零
  66   2                                                       }
  67   1         last_forcenumber=force_number;
  68   1      }
  69          
  70          /*****************************************************************************************************/
  71          // 读时间
  72          /*****************************************************************************************************/
  73          
  74          void read_time()  {
  75   1      
  76   1          now_day = XBYTE[0XC006]; /*星期*/
  77   1          now_year= XBYTE[0XC009]; /*年份*/
  78   1          now_month=XBYTE[0XC008]; /*月份*/
  79   1          now_date= XBYTE[0XC007]; /*日子*/
  80   1          now_hour= XBYTE[0XC004]; /*小时*/
  81   1          now_min = XBYTE[0XC002]; /*分钟*/
  82   1          now_sec = XBYTE[0XC000]; /*秒*/
  83   1      
  84   1          now_time=now_hour*60+now_min;
  85   1          if(end_time<begin_time)
  86   1          {
  87   2             if((now_time>=begin_time) || (now_time<end_time))
  88   2                work_time=1;
  89   2             else
  90   2                work_time=0;
  91   2          }
  92   1          else if(end_time>begin_time)
  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
 100   1             work_time=0;
 101   1      
 102   1      }
 103          /*------------求最大值-----------------------*/
 104          //max(array_time)
 105          //uchar   array_time[16];
 106          //{
 107          
 108          // uchar max_value,k;
 109          // max_value=array_time[0];
 110          // for(k=1;k<16;k++)
 111          //    {
 112          //     if(array_time[k]>max_value)
 113          //     max_value=array_time[k];
 114          //     }
 115          //     return(max_value);
 116          //}
 117          
C51 COMPILER V6.02  SECOND                                                                 08/02/2006 15:11:10 PAGE 3   

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

 177   2      
 178   2              toto = 0x0001;
 179   2              toto = toto<<i;
 180   2              phasek = 18*i;
 181   2      
 182   2                 now_phase_temp = (toto&inuse_phase[step_counter]);   //当前阶段是否包含该相位
 183   2                 now_phase_tempn = toto&inuse_phasen[step_counter];
 184   2               if((now_phase_temp!=0)&& (now_phase_tempn==0))
 185   2                // if(now_phase_temp!=0)
 186   2                 {
 187   3                   if(max_yellow<XBYTE[baseaddr_now_phasesch+phasek+15])
 188   3                   max_yellow=XBYTE[baseaddr_now_phasesch+phasek+15];
 189   3                   if(max_red_clear<XBYTE[baseaddr_now_phasesch+phasek+16])
 190   3                   max_red_clear=XBYTE[baseaddr_now_phasesch+phasek+16];
 191   3                   if(max_green_flash<XBYTE[baseaddr_now_phasesch+phasek+17])
 192   3                   max_green_flash=XBYTE[baseaddr_now_phasesch+phasek+17];
 193   3      
 194   3                 }
 195   2            }
 196   1      }
 197          /************计算个阶段的各相位的清空时间***在每阶段的开始时执行一次****************/
 198           void cal_clear_time()
 199          {

⌨️ 快捷键说明

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