📄 tlight_b.lst
字号:
117 4 }
118 3
119 3 break;
120 3 }
121 2
122 2 case RED_AMBER:
123 2 {
124 3 Red_light = ON;
125 3 Amber_light = ON;
126 3 Green_light = OFF;
127 3
128 3 if (++Time_in_state == RED_AND_AMBER_DURATION)
129 3 {
130 4 Light_state_G = GREEN;
131 4 Time_in_state = 0;
132 4 }
133 3
134 3 break;
135 3 }
136 2
137 2 case GREEN:
138 2 {
139 3 Red_light = OFF;
140 3 Amber_light = OFF;
141 3 Green_light = ON;
142 3
143 3 if (++Time_in_state == GREEN_DURATION)
144 3 {
145 4 Light_state_G = AMBER;
146 4 Time_in_state = 0;
147 4 }
148 3
149 3 break;
150 3 }
151 2
152 2 case AMBER:
153 2 {
154 3 Red_light = OFF;
155 3 Amber_light = ON;
156 3 Green_light = OFF;
157 3
158 3 if (++Time_in_state == AMBER_DURATION)
159 3 {
160 4 Light_state_G = RED;
C51 COMPILER V6.10 TLIGHT_B 04/18/2001 16:48:10 PAGE 11
161 4 Time_in_state = 0;
162 4 }
163 3
164 3 break;
165 3 }
166 2
167 2 case BULB_BLOWN:
168 2 {
169 3 // Blown bulb detected
170 3 // Switch all bulbs off
171 3 // (Drivers won't be happy, but it will be clear
172 3 // that something is wrong)
173 3 Red_light = OFF;
174 3 Amber_light = OFF;
175 3 Green_light = OFF;
176 3
177 3 // We remain in this state until state
178 3 // is changed manually, or system is reset
179 3 break;
180 3 }
181 2 }
182 1 }
183
184 /*------------------------------------------------------------------*-
185
186 TRAFFIC_LIGHTS_Check_for_Hardware_Faults()
187
188 Tests for and reports errors.
189
190 -*------------------------------------------------------------------*/
191 bit TRAFFIC_LIGHTS_Check_for_Hardware_Faults(void) reentrant
192 {
193 1 tByte Return = RETURN_NORMAL;
194 1
195 1 // Check the status of the other node
196 1 if (MASTER_SLAVE == MASTER)
197 1 {
198 2 // This is a master unit
199 2 // - check the status of the slave unit
200 2 if (Ack_message_data_G == RETURN_ERROR)
201 2 {
202 3 // A bulb has blown on the SLAVE unit
203 3 Light_state_G = BULB_BLOWN;
204 3 Return = RETURN_ERROR;
205 3 }
206 2 }
207 1 else
208 1 {
209 2 // This is a slave unit
210 2 // - check the status of the master unit
211 2 if (Tick_message_data_G == RETURN_ERROR)
212 2 {
213 3 // A bulb has blown on the MASTER unit
214 3 Light_state_G = BULB_BLOWN;
215 3 Return = RETURN_ERROR;
216 3 }
217 2 }
218 1
219 1 // We check the local bulb status every time
220 1 if (TRAFFIC_LIGHTS_Check_Local_Bulb() == RETURN_ERROR)
221 1 {
222 2 Light_state_G = BULB_BLOWN;
C51 COMPILER V6.10 TLIGHT_B 04/18/2001 16:48:10 PAGE 12
223 2
224 2 // Must report this to the other node!
225 2 if (MASTER_SLAVE == MASTER)
226 2 {
227 3 Tick_message_data_G = RETURN_ERROR;
228 3 }
229 2 else
230 2 {
231 3 Ack_message_data_G = RETURN_ERROR;
232 3 }
233 2
234 2 Return = RETURN_ERROR;
235 2 }
236 1
237 1 return (bit) Return;
238 1 }
239
240 /*------------------------------------------------------------------*-
241
242 TRAFFIC_LIGHTS_Check_Local_Bulb()
243
244 Check the status of the local bulbs (DUMMY FUNCTION HERE)
245
246 -*------------------------------------------------------------------*/
247 bit TRAFFIC_LIGHTS_Check_Local_Bulb(void)
248 {
249 1 // This dummy function confirms the bulbs are OK
250 1 //
251 1 // - See Chapter 32 for complete version of this function.
252 1 return RETURN_NORMAL;
253 1 }
254
255 /*------------------------------------------------------------------*-
256
257 TRAFFIC_LIGHTS_Display_Safe_Output()
258
259 Used in the event of system failure, etc.
260
261 -*------------------------------------------------------------------*/
262 void TRAFFIC_LIGHTS_Display_Safe_Output(void)
263 {
264 1 if (TRAFFIC_LIGHTS_Check_for_Hardware_Faults() == RETURN_NORMAL)
265 1 {
266 2 // Bulbs are OK on both nodes
267 2 // - best thing to do is to display STOP
268 2 Red_light = ON;
269 2 Amber_light = OFF;
270 2 Green_light = OFF;
271 2 }
272 1 else
273 1 {
274 2 // At least one bulb has blown
275 2 // - best thing we can do is extinguish all bulbs
276 2 Red_light = OFF;
277 2 Amber_light = OFF;
278 2 Green_light = OFF;
279 2 }
280 1 }
281
282 /*------------------------------------------------------------------*-
283 ---- END OF FILE -------------------------------------------------
284 -*------------------------------------------------------------------*/
C51 COMPILER V6.10 TLIGHT_B 04/18/2001 16:48:10 PAGE 13
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION TRAFFIC_LIGHTS_Init (BEGIN)
; SOURCE LINE # 74
; SOURCE LINE # 75
; SOURCE LINE # 77
; SOURCE LINE # 78
; SOURCE LINE # 79
0000 E4 CLR A
0001 F500 R MOV Light_state_G,A
; SOURCE LINE # 80
; SOURCE LINE # 82
; SOURCE LINE # 83
; SOURCE LINE # 84
0003 ?C0002:
; SOURCE LINE # 87
0003 120000 R LCALL TRAFFIC_LIGHTS_Display_Safe_Outp
; SOURCE LINE # 88
0006 22 RET
; FUNCTION TRAFFIC_LIGHTS_Init (END)
; FUNCTION TRAFFIC_LIGHTS_Update (BEGIN)
; SOURCE LINE # 97
; SOURCE LINE # 98
; SOURCE LINE # 102
0000 120000 R LCALL _?TRAFFIC_LIGHTS_Check_for_Hardwar
; SOURCE LINE # 105
0003 E500 R MOV A,Light_state_G
0005 14 DEC A
0006 6029 JZ ?C0007
0008 14 DEC A
0009 6042 JZ ?C0009
000B 14 DEC A
000C 605B JZ ?C0011
000E 14 DEC A
000F 6073 JZ ?C0013
0011 2404 ADD A,#04H
0013 7075 JNZ ?C0014
; SOURCE LINE # 106
; SOURCE LINE # 107
0015 ?C0005:
; SOURCE LINE # 108
; SOURCE LINE # 109
0015 C2A0 CLR Red_light
; SOURCE LINE # 110
0017 D2A1 SETB Amber_light
; SOURCE LINE # 111
0019 D2A2 SETB Green_light
; SOURCE LINE # 113
001B 0500 R INC Time_in_state+01H
001D E500 R MOV A,Time_in_state+01H
001F 7002 JNZ ?C0027
0021 0500 R INC Time_in_state
0023 ?C0027:
0023 640A XRL A,#0AH
0025 4500 R ORL A,Time_in_state
0027 7061 JNZ ?C0014
; SOURCE LINE # 114
; SOURCE LINE # 115
0029 750001 R MOV Light_state_G,#01H
; SOURCE LINE # 116
C51 COMPILER V6.10 TLIGHT_B 04/18/2001 16:48:10 PAGE 14
002C F500 R MOV Time_in_state,A
002E F500 R MOV Time_in_state+01H,A
; SOURCE LINE # 117
; SOURCE LINE # 119
0030 22 RET
; SOURCE LINE # 120
; SOURCE LINE # 122
0031 ?C0007:
; SOURCE LINE # 123
; SOURCE LINE # 124
0031 C2A0 CLR Red_light
; SOURCE LINE # 125
0033 C2A1 CLR Amber_light
; SOURCE LINE # 126
0035 D2A2 SETB Green_light
; SOURCE LINE # 128
0037 0500 R INC Time_in_state+01H
0039 E500 R MOV A,Time_in_state+01H
003B 7002 JNZ ?C0028
003D 0500 R INC Time_in_state
003F ?C0028:
003F 640A XRL A,#0AH
0041 4500 R ORL A,Time_in_state
0043 7045 JNZ ?C0014
; SOURCE LINE # 129
; SOURCE LINE # 130
0045 750002 R MOV Light_state_G,#02H
; SOURCE LINE # 131
0048 F500 R MOV Time_in_state,A
004A F500 R MOV Time_in_state+01H,A
; SOURCE LINE # 132
; SOURCE LINE # 134
004C 22 RET
; SOURCE LINE # 135
; SOURCE LINE # 137
004D ?C0009:
; SOURCE LINE # 138
; SOURCE LINE # 139
004D D2A0 SETB Red_light
; SOURCE LINE # 140
004F D2A1 SETB Amber_light
; SOURCE LINE # 141
0051 C2A2 CLR Green_light
; SOURCE LINE # 143
0053 0500 R INC Time_in_state+01H
0055 E500 R MOV A,Time_in_state+01H
0057 7002 JNZ ?C0029
0059 0500 R INC Time_in_state
005B ?C0029:
005B 640A XRL A,#0AH
005D 4500 R ORL A,Time_in_state
005F 7029 JNZ ?C0014
; SOURCE LINE # 144
; SOURCE LINE # 145
0061 750003 R MOV Light_state_G,#03H
; SOURCE LINE # 146
0064 F500 R MOV Time_in_state,A
0066 F500 R MOV Time_in_state+01H,A
; SOURCE LINE # 147
; SOURCE LINE # 149
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -