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

📄 zone.lst

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


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

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          sbit   WatchDog = P1^3;       //看门狗
   4          unsigned char xdata sequ_code=0;
   5          unsigned char xdata zone_count[5][60]; //5个路口,没个路口60个备用变化,每个阶段提供60秒的变化范围
   6          unsigned char xdata zone_step_time[5][60];//对应的阶段时间
   7          unsigned char xdata zone_now_step_key[5][60];//对应的阶段历时
   8          unsigned char xdata zone_differ[5]={2,3,4,5,7};//5个路口的 相位差
   9          unsigned char xdata zone_step_number[5][60];//变化时刻的阶段号
  10          unsigned int  xdata zone_number[5];     //路口编号
  11          unsigned char xdata tran_inform_flag=0;
  12          
  13          unsigned char  pq1,pq2,pq3;
  14          unsigned int   pq0;
  15          
  16          extern  unsigned char step_time;
  17          extern  unsigned char now_step_key;
  18          extern  unsigned char step_counter;              //阶段号
  19          
  20          extern unsigned int xdata data_address;
  21          extern unsigned int xdata address;
  22          extern unsigned int xdata tr_flagaddr;
  23          sbit FarContrlLed=P1^1;
  24          
  25          //发送:路口编号,阶段时间,阶段历时,阶段号
  26          tran_split(unsigned int troadnumber,unsigned char tstep_time,unsigned char  tstep_now_key,unsigned char ts
             -tep_number) using 1
  27          
  28          {
  29   1        unsigned char i;
  30   1      
  31   1        data_address=((XBYTE[0XA021]<<8)+XBYTE[0XA022]+1);        //首地址 偏移量
  32   1        address=data_address;                                 //首地址 偏移量
  33   1        data_address=data_address+12;                         //发送数据长度12字节
  34   1        if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
  35   1        while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
  36   1        XBYTE[0xa023]=0x01;                              //CPU修改头尾
  37   1        XBYTE[0xa024]=0X00;
  38   1        data_address=((XBYTE[0XA021]<<8)+XBYTE[0XA022]+1);
  39   1        address=data_address;
  40   1        data_address=data_address+12;            //应答数据长度12字节
  41   1        if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
  42   1        data_address--;
  43   1        XBYTE[0XA021]=data_address>>8;          //
  44   1        XBYTE[0XA022]=data_address;
  45   1        XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
  46   1        XBYTE[0XA024]=0X00;
  47   1        for(i=0;i<6;i++){                        //判断有无发送缓冲区
  48   2                 tr_flagaddr=0XA030+5*i;
  49   2                 if(XBYTE[tr_flagaddr]==0x87)break;
  50   2                            }
  51   1        if(i==6)return 1;                        //如果没有,崩溃
  52   1        XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
  53   1        XBYTE[tr_flagaddr+2]=address;
  54   1        XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
C51 COMPILER V6.02  ZONE                                                                   09/28/2006 21:46:49 PAGE 2   

  55   1        XBYTE[tr_flagaddr+4]=data_address;
  56   1      
  57   1        address=address+0xa000;
  58   1      
  59   1        if(address>0xa7f0){
  60   2                           address=0xa080;
  61   2                           }
  62   1        XBYTE[address]=0x9F;                    //新增协议0X9F
  63   1        address++;
  64   1        if(address>0xa7f0)address=0xa080;
  65   1        XBYTE[address]=0xc5;                    //新增协议0XC5
  66   1      
  67   1        address++;
  68   1        if(address>0xa7f0)address=0xa080;
  69   1        XBYTE[address]=(troadnumber>>8);       //从机路口编号
  70   1      
  71   1        address++;
  72   1        if(address>0xa7f0)address=0xa080;
  73   1        XBYTE[address]=troadnumber;
  74   1        address++;
  75   1        if(address>0xa7f0)address=0xa080;
  76   1        XBYTE[address]=tstep_time;
  77   1        address++;
  78   1        if(address>0xa7f0)address=0xa080;
  79   1        XBYTE[address]=tstep_now_key;
  80   1        address++;
  81   1        if(address>0xa7f0)address=0xa080;
  82   1        XBYTE[address]=tstep_number;
  83   1      
  84   1        address++;
  85   1        if(address>0xa7f0)address=0xa080;
  86   1        XBYTE[address]=XBYTE[0XC008];           //发送月
  87   1        address++;
  88   1        if(address>0xa7f0)address=0xa080;
  89   1        XBYTE[address]=XBYTE[0XC007];           //日
  90   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  91   1        address++;
  92   1        if(address>0xa7f0)address=0xa080;
  93   1        XBYTE[address]=XBYTE[0XC004];           //时
  94   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  95   1        address++;
  96   1        if(address>0xa7f0)address=0xa080;
  97   1        XBYTE[address]=XBYTE[0XC002];           //分
  98   1      //  SBUF=XBYTE[address];while(!TI);TI=0;      /////////////////////////////////////////
  99   1        address++;
 100   1        if(address>0xa7f0)address=0xa080;
 101   1        XBYTE[address]=XBYTE[0XC000];           //秒
 102   1      
 103   1        XBYTE[tr_flagaddr]=0x02;
 104   1        FarContrlLed= !FarContrlLed;
 105   1      }
 106          
 107          
 108          
 109          //本函数对状态发生后的需要计时,与相位差比较的数据进行初始化 只在关键点,阶段更迭,绿时修改的情况下运行
 110          deal_zone()
 111          {
 112   1        unsigned char xdata i;
 113   1      //关键点到来时刻,每个从机路口相应的标志置为1,并保留相对应的阶段时间和阶段数,阶段号
 114   1        for(i=0;i<5;i++){
 115   2              zone_count[i][sequ_code]=1;                   //开始计数
 116   2              zone_step_time[i][sequ_code]=step_time;       //保留当时的阶段时间
C51 COMPILER V6.02  ZONE                                                                   09/28/2006 21:46:49 PAGE 3   

 117   2              zone_now_step_key[i][sequ_code]=now_step_key; //保留当前的阶段历时
 118   2              zone_step_number[i][sequ_code]=step_counter;                   //发生时刻的阶段号
 119   2      
 120   2                         }
 121   1      
 122   1        sequ_code++;
 123   1        if(sequ_code>=60)sequ_code=0;
 124   1      }

⌨️ 快捷键说明

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