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