📄 tlight_b.lst
字号:
80 2 }
81 1 else
82 1 {
83 2 Light_state_G = GREEN;
84 2 }
85 1
86 1 // Display safe output until scheduler starts
87 1 TRAFFIC_LIGHTS_Display_Safe_Output();
88 1 }
89
90 /*------------------------------------------------------------------*-
91
92 TRAFFIC_LIGHTS_Update()
93
94 Must be scheduled once per second.
95
96 -*------------------------------------------------------------------*/
97 void TRAFFIC_LIGHTS_Update(void)
98 {
99 1 static tWord Time_in_state;
100 1
101 1 // Check for blown bulbs on master or slave
102 1 TRAFFIC_LIGHTS_Check_for_Hardware_Faults();
103 1
104 1 // This is the main update code
105 1 switch (Light_state_G)
106 1 {
107 2 case RED:
108 2 {
109 3 Red_light = ON;
110 3 Amber_light = OFF;
111 3 Green_light = OFF;
C51 COMPILER V7.06 TLIGHT_B 12/25/2007 19:33:31 PAGE 10
112 3
113 3 if (++Time_in_state == RED_DURATION)
114 3 {
115 4 Light_state_G = RED_AMBER;
116 4 Time_in_state = 0;
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;
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;
C51 COMPILER V7.06 TLIGHT_B 12/25/2007 19:33:31 PAGE 11
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;
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 }
C51 COMPILER V7.06 TLIGHT_B 12/25/2007 19:33:31 PAGE 12
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 V7.06 TLIGHT_B 12/25/2007 19:33:31 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_Output
; 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_Hardware_Faults
; 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 C2E8 CLR Red_light
; SOURCE LINE # 110
0017 D2E9 SETB Amber_light
; SOURCE LINE # 111
0019 D2EA 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -