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

📄 transflow.lst

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


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

stmt level    source

   1          #include <reg51.h>
   2          #include <absacc.h>
   3          sbit   WatchDog = P1^3;       //看门狗
   4          extern  unsigned char xdata send_liul[32],send_occ[32];
   5          extern  unsigned int xdata  loop_ratio[32];
   6          unsigned char xdata T;
   7          unsigned char xdata fl,fh;
   8          unsigned char xdata last_recetimeid,record_day;
   9          unsigned char xdata steptime[16];
  10          extern unsigned int xdata data_address;
  11          extern unsigned int xdata address;
  12          extern unsigned int xdata tr_flagaddr;
  13          extern unsigned char xdata now_day_planid;
  14          extern unsigned char xdata period_sch[41];
  15          extern unsigned char xdata now_step_schid;
  16          extern unsigned char xdata timeid;
  17          extern unsigned int xdata savecount;
  18          extern unsigned char xdata sch_step[16];
  19          extern unsigned char xdata selcal_flag;
  20          unsigned char xdata per[24][70];
  21          extern unsigned char xdata per_count;
  22          trans_volum()     //流量和占有率发送程序,在周期结束时,发送到FPGA板
  23          {
  24   1        unsigned char i;
  25   1        savecount++;
  26   1        while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
  27   1        XBYTE[0xa023]=0x01;                              //CPU修改头尾
  28   1        XBYTE[0xa024]=0X00;
  29   1      
  30   1        data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
  31   1        data_address=(data_address&0x7ff);
  32   1      
  33   1        address=data_address;
  34   1        data_address=data_address+70;            //应答数据长度70字节
  35   1        if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
  36   1        data_address--;
  37   1        XBYTE[0XA021]=data_address>>8;          //
  38   1        XBYTE[0XA022]=data_address;
  39   1        XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
  40   1        XBYTE[0XA024]=0X00;
  41   1        for(i=0;i<6;i++){
  42   2                 tr_flagaddr=0XA030+5*i;
  43   2                 if(XBYTE[tr_flagaddr]==0x87)break;
  44   2                            }
  45   1        if(i==6)return 1;
  46   1      
  47   1        XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
  48   1        XBYTE[tr_flagaddr+2]=address;
  49   1        XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
  50   1        XBYTE[tr_flagaddr+4]=data_address;
  51   1      
  52   1        address=address+0xa000;                 //发送应答数据
  53   1        if(address>0xa7f0)address=0xa080;
  54   1        XBYTE[address]=0XFD;                    //发送标识
  55   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
C51 COMPILER V6.02  TRANSFLOW                                                              09/28/2006 21:46:49 PAGE 2   

  56   1        address++;
  57   1        if(address>0xa7f0)address=0xa080;
  58   1        XBYTE[address]=XBYTE[0XC008];           //发送月
  59   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  60   1        address++;
  61   1        if(address>0xa7f0)address=0xa080;
  62   1        XBYTE[address]=XBYTE[0XC007];           //日
  63   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  64   1        address++;
  65   1        if(address>0xa7f0)address=0xa080;
  66   1        XBYTE[address]=XBYTE[0XC004];           //时
  67   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  68   1        address++;
  69   1        if(address>0xa7f0)address=0xa080;
  70   1        XBYTE[address]=XBYTE[0XC002];           //分
  71   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  72   1        address++;
  73   1        if(address>0xa7f0)address=0xa080;
  74   1        XBYTE[address]=XBYTE[0XC000];           //秒
  75   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  76   1        address++;
  77   1        if(address>0xa7f0)address=0xa080;
  78   1        for(i=0;i<32;i++){
  79   2            XBYTE[address]=send_liul[i];  //发送流量
  80   2        //    SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  81   2            address++;
  82   2            if(address>0xa7f0)address=0xa080;
  83   2            send_occ[i]=(loop_ratio[i]*10/1000)/T;
  84   2            XBYTE[address]=send_occ[i];   //发送占有率
  85   2          //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  86   2            address++;
  87   2            if(address>0xa7f0)address=0xa080;
  88   2                           }
  89   1        XBYTE[tr_flagaddr]=0x01;
  90   1        for(i=0;i<32;i++){
  91   2           send_liul[i]=0;
  92   2           send_occ[i]=0;
  93   2           loop_ratio[i]=0;
  94   2                         }
  95   1      // SBUF=0XFF;
  96   1      // while(!TI);TI=0;
  97   1         for(i=0;i<32;i++){
  98   2           send_liul[i]=0;
  99   2           send_occ[i]=0;
 100   2           loop_ratio[i]=0;
 101   2                         }
 102   1      }
 103          
 104          void self_learn() using 1
 105          {
 106   1        unsigned char i,j,k;
 107   1        unsigned char good;
 108   1        unsigned int  addr;
 109   1      
 110   1        for(i=0;i<16;i++){ //本周期结束的时候  
 111   2            good=period_sch[9+i];
 112   2            for(j=0;j<70;j++){
 113   3                if((j==good)&&(j!=0))per[i][j]++;
 114   3                              }
 115   2                          }
 116   1      
 117   1        //时段切换后计算学习结果
C51 COMPILER V6.02  TRANSFLOW                                                              09/28/2006 21:46:49 PAGE 3   

 118   1      
 119   1        if(last_recetimeid!=timeid){
 120   2             for(i=0;i<16;i++){ //对上次能学习结果清0
 121   3                 steptime[i]=0;
 122   3                               }
 123   2             for(i=0;i<16;i++){
 124   3                 good=0;
 125   3                 for(j=0;j<70;j++){
 126   4                    if(good<=per[i][j])good=per[i][j];
 127   4                                   }
 128   3                    k=0;
 129   3                    do{
 130   4                      k++;
 131   4                       }while(per[i][k-1]!=good);
 132   3                    k--;
 133   3                    steptime[i]=k;
 134   3                             }
 135   2             addr=(last_recetimeid-1)*16;
 136   2             record_day=XBYTE[0XC006];
 137   2             if(record_day>7)record_day=3;
 138   2             addr=addr+(record_day-1)*384;
 139   2             addr=addr+0x3f00;
 140   2             for(i=0;i<16;i++){//写到0X3F00开始的地址
 141   3                XBYTE[addr+i]=steptime[i];
 142   3                               }
 143   2             for(i=0;i<41;i++){// 清空自学习缓冲区
 144   3                       period_sch[i]=0;
 145   3                                    }
 146   2             for(i=0;i<32;i++){    //mei
 147   3        	   	  for(j=0;j<70;j++){
 148   4        	   	  	  per[i][j]=0;
 149   4        	   	  	     	}
 150   3        	   	  }
 151   2             }
 152   1        last_recetimeid=period_sch[3];
 153   1      
 154   1      
 155   1      
 156   1      
 157   1      }
 158          void tran_psh() //每周期发送一次方案
 159          {
 160   1        selcal_flag=0;
 161   1      //  unsigned char i;
 162   1      //  period_sch[0]=0x20;              //当前方案号 方案32作为备用降级方案
 163   1        period_sch[0]=now_day_planid;    //当前日计划号
 164   1        period_sch[1]=now_step_schid;    //当前的阶段表号
 165   1        period_sch[3]=timeid;            //当前的时段号
 166   1        period_sch[6]=XBYTE[0XC006];     //当前星期号
 167   1        self_learn();
 168   1      
 169   1      /*
 170   1      
 171   1        while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
 172   1        XBYTE[0xa023]=0x01;                              //CPU修改头尾
 173   1        XBYTE[0xa024]=0X00;
 174   1        data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
 175   1        address=data_address;
 176   1        data_address=data_address+43;            //应答数据长度+1字节

⌨️ 快捷键说明

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