📄 second.lst
字号:
C51 COMPILER V6.02 SECOND 09/28/2006 21:46:49 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE SECOND
OBJECT MODULE PLACED IN F:\LAIWORK\GB_ASC\SECOND.OBJ
COMPILER INVOKED BY: c:\COMP51V6\C51.EXE F:\LAIWORK\GB_ASC\SECOND.C DB SB OE LARGE
stmt level source
1 #include <second.h>
2
3 unsigned char xdata cmd;
4
5 /*遥控处理函数*/
6 remote_deal()
7 {
8 1 unsigned char i;
9 1 for(i=0;i<8;i++){ /*确认当前被遥控的相位数*/
10 2 if(re_message[i]==20){
11 3 reph_number=(i+1);
12 3 //remote_state=1;
13 3 }
14 2 }
15 1 for(i=8;i<12;i++){ /*确认当前被遥控的相位数*/
16 2 if(re_message[i]==20){
17 3 reph_number=(i+1);
18 3 }
19 2 }
20 1 if((reph_number>0)&&(reph_number<9)){
21 2 re_coloc++;
22 2 if(re_coloc>100)re_coloc=100;
23 2 if(re_coloc==1)re_exe_flag=1; //一旦有合法遥控输入即建立遥控动作执行标志
24 2 re_control=1; //遥控状态标志
25 2 forceacting=0; //清除强制启动开始标志
26 2 if(lastreph!=reph_number){ //遥控的相位和上一次遥控的相位不相等
27 3 re_coloc=0;
28 3 clear_state=1;
29 3 lastreph=reph_number;
30 3 act_flag=1;
31 3 re_keep_flag=0; //遥控阶段维持标志清,遥控进入指定阶段后该标志1,有新的遥控输入0
32 3 }else {
33 3 act_flag=0;
34 3 }
35 2 }else{
36 2 re_control=0;
37 2 act_flag=0;
38 2
39 2 }
40 1 if((reph_number>step_num)||(reph_number==12)){//退出遥控进入自动
41 2 re_control=0;
42 2 re_coloc=0;
43 2 // XBYTE[0X6D28]=0;//手动标志一并归零
44 2 }
45 1 lastreph=reph_number;
46 1 }
47 /***************************************************/
48 //手动处理函数
49 man_deal()
50 {
51 1 if(force_flag==1){ //6d28单元中字节内容不为0
52 2 re_control=0; //清除遥控标志
53 2 re_coloc=0;
54 2 force_coloc++;
55 2 if(force_coloc>100)force_coloc=100;
C51 COMPILER V6.02 SECOND 09/28/2006 21:46:49 PAGE 2
56 2 if(force_coloc==1)force_exe_flag=1;
57 2 if(force_number!=last_forcenumber){
58 3 forceacting=1; //强制过程开始标志 到运行到指定阶段或遥控操作中断
59 3 act_force=1; //进入强制第一秒标志
60 3 re_keep_force=0;
61 3 force_coloc=0;
62 3
63 3 }
64 2 }
65 1 if((force_number>step_num)||(force_flag==4)){//退出遥控进入自动
66 2 force_flag=0;
67 2 force_coloc=0;
68 2 XBYTE[0X6D28]=0;//手动标志一并归零
69 2 }
70 1 last_forcenumber=force_number;
71 1 }
72
73 /*****************************************************************************************************/
74 // 读时间
75 /*****************************************************************************************************/
76
77 void read_time() {
78 1
79 1 now_day = XBYTE[0XC006]; /*星期*/
80 1 now_year= XBYTE[0XC009]; /*年份*/
81 1 now_month=XBYTE[0XC008]; /*月份*/
82 1 now_date= XBYTE[0XC007]; /*日子*/
83 1 now_hour= XBYTE[0XC004]; /*小时*/
84 1 now_min = XBYTE[0XC002]; /*分钟*/
85 1 now_sec = XBYTE[0XC000]; /*秒*/
86 1 now_time=now_hour*60+now_min; //当前时间以分钟计算
87 1 begin_time=XBYTE[0X72E2]*60+XBYTE[0X72E3];
88 1 end_time=XBYTE[0X72E4]*60+XBYTE[0X72E5];
89 1 if((now_time==begin_time)&&(now_sec==0)){
90 2 start_counter=0;
91 2 }
92 1 if(end_time<begin_time) //时段开始的时间晚于时段结束的时间,即5点开始,第二天4点关机
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 if(end_time>begin_time)
100 1 {
101 2 if((now_time>=begin_time) && (now_time<end_time))
102 2 work_time=1;
103 2 else
104 2 work_time=0;
105 2 }
106 1 else
107 1 work_time=1;
108 1
109 1 if((now_hour==0x17)&&(now_min==0x3b)&&(now_sec==0x3B))start_counter=5;
110 1 }
111 /*------------求最大值-----------------------*/
112 //max(array_time)
113 //uchar array_time[16];
114 //{
115
116 // uchar max_value,k;
117 // max_value=array_time[0];
C51 COMPILER V6.02 SECOND 09/28/2006 21:46:49 PAGE 3
118 // for(k=1;k<16;k++)
119 // {
120 // if(array_time[k]>max_value)
121 // max_value=array_time[k];
122 // }
123 // return(max_value);
124 //}
125
126 /*------------------------------------------*/
127 uchar search_step_time() using 1 //计算感应控制阶段时间=最小绿灯+红灯+黄灯
128 {
129 1 uchar i,max_temp;
130 1 uint j;
131 1 uint offset;
132 1 mmax_timed=0;
133 1 ensensor_flag = 1;
134 1 sensor_car_flag= 0;
135 1 min_greentime=0;
136 1 max_greentime = 0;
137 1
138 1 for(i=0; i<16; i++) //此循环用于查找当前阶段用到的相位
139 1 {
140 2 j = 18*i;
141 2 offset= 0x0001;
142 2 offset= offset<<i;
143 2
144 2 now_phase_temp = offset&inuse_phase[step_counter]; ////inuse_phase:阶段用到的相位step_counter:
-阶段号
145 2 now_phase_tempn = offset&inuse_phasen[step_counter];
146 2 if(now_phase_temp!=0)
147 2 {
148 3 /* if(((XBYTE[baseaddr_now_phasesch+j+2]&0x04)==0x04) && (now_phase_tempn==0)) //行人
149 3 {
150 3 max_time=XBYTE[baseaddr_now_phasesch+j+12]+XBYTE[baseaddr_now_phasesch+j+16];
151 3 //max_time:=最小绿灯+红灯
152 3 } */
153 3 if(((XBYTE[baseaddr_now_phasesch+j+2]&0x04)!=0x04) /*&& (now_phase_tempn==0)*/)
154 3 {
155 4 no_vehicle_step[step_counter]=1;//该阶段有无机动车标志
156 4 sensor_distance=XBYTE[baseaddr_now_phasesch+j+11];
157 4 //最小绿灯
158 4 min_green = XBYTE[baseaddr_now_phasesch+j+12]-XBYTE[baseaddr_now_phasesch+j+17];//;-senso
-r_distance;
159 4 if(min_green>min_greentime)min_greentime =min_green;
160 4 // min_greentime =最小绿灯-绿闪-单位步长
161 4 //最大绿灯
162 4 max_green= XBYTE[baseaddr_now_phasesch+j+13]-XBYTE[baseaddr_now_phasesch+j+17];
163 4 if(max_green>max_greentime)max_greentime = max_green;
164 4 //查找出最小绿灯中最长的绿灯时间
165 4 max_temp=XBYTE[baseaddr_now_phasesch+j+12]+XBYTE[baseaddr_now_phasesch+j+15]+XBYTE[basead
-dr_now_phasesch+j+16];
166 4 if(max_temp>mmax_timed)mmax_timed=max_temp;
167 4 //max_green_flash=XBYTE[baseaddr_now_phasesch+j+17];
168 4 }
169 3
170 3 }
171 2
172 2 }
173 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -