📄 zone.lst
字号:
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 + -