📄 tlight_a.lst
字号:
56 static eLight_State Light_state_G;
57
58 // ------ Private function prototypes ------------------------------
59
60 bit TRAFFIC_LIGHTS_Check_Local_Bulb(void);
61
62 /*------------------------------------------------------------------*-
63
64 TRAFFIC_LIGHTS_Init()
65
66 Prepare for scheduling.
67
68 -*-----------------------------------------------------------------*/
69 void TRAFFIC_LIGHTS_Init(void)
70 {
71 1 // Master and slave must start in opposite states
72 1 if (MASTER_SLAVE == MASTER)
73 1 {
74 2 Light_state_G = RED;
75 2 }
76 1 else
77 1 {
78 2 Light_state_G = GREEN;
79 2 }
80 1
81 1 // Display safe output until scheduler starts
82 1 TRAFFIC_LIGHTS_Display_Safe_Output();
83 1 }
84
85 /*------------------------------------------------------------------*-
86
87 TRAFFIC_LIGHTS_Update()
88
89 Must be scheduled once per second.
90
91 -*------------------------------------------------------------------*/
92 void TRAFFIC_LIGHTS_Update(void)
93 {
94 1 static tWord Time_in_state;
95 1
96 1 // Check for blown bulbs on this node
97 1 TRAFFIC_LIGHTS_Check_Local_Bulb();
98 1
99 1 // This is the main update code
100 1 switch (Light_state_G)
101 1 {
102 2 case RED:
103 2 {
104 3 Red_light = ON;
105 3 Amber_light = OFF;
C51 COMPILER V6.10 TLIGHT_A 04/18/2001 16:49:09 PAGE 10
106 3 Green_light = OFF;
107 3
108 3 if (++Time_in_state == RED_DURATION)
109 3 {
110 4 Light_state_G = RED_AMBER;
111 4 Time_in_state = 0;
112 4 }
113 3
114 3 break;
115 3 }
116 2
117 2 case RED_AMBER:
118 2 {
119 3 Red_light = ON;
120 3 Amber_light = ON;
121 3 Green_light = OFF;
122 3
123 3 if (++Time_in_state == RED_AND_AMBER_DURATION)
124 3 {
125 4 Light_state_G = GREEN;
126 4 Time_in_state = 0;
127 4 }
128 3
129 3 break;
130 3 }
131 2
132 2 case GREEN:
133 2 {
134 3 Red_light = OFF;
135 3 Amber_light = OFF;
136 3 Green_light = ON;
137 3
138 3 if (++Time_in_state == GREEN_DURATION)
139 3 {
140 4 Light_state_G = AMBER;
141 4 Time_in_state = 0;
142 4 }
143 3
144 3 break;
145 3 }
146 2
147 2 case AMBER:
148 2 {
149 3 Red_light = OFF;
150 3 Amber_light = ON;
151 3 Green_light = OFF;
152 3
153 3 if (++Time_in_state == AMBER_DURATION)
154 3 {
155 4 Light_state_G = RED;
156 4 Time_in_state = 0;
157 4 }
158 3
159 3 break;
160 3 }
161 2
162 2 case BULB_BLOWN:
163 2 {
164 3 // Blown bulb detected
165 3 // Switch all bulbs off
166 3 // (Drivers won't be happy, but it will be clear
167 3 // that something is wrong)
C51 COMPILER V6.10 TLIGHT_A 04/18/2001 16:49:09 PAGE 11
168 3 Red_light = OFF;
169 3 Amber_light = OFF;
170 3 Green_light = OFF;
171 3
172 3 // We remain in this state until state
173 3 // is changed manually, or system is reset
174 3 break;
175 3 }
176 2 }
177 1 }
178
179 /*------------------------------------------------------------------*-
180
181 TRAFFIC_LIGHTS_Check_Local_Bulb()
182
183 Check the status of the local bulbs (DUMMY FUNCTION HERE)
184
185 -*------------------------------------------------------------------*/
186 bit TRAFFIC_LIGHTS_Check_Local_Bulb(void)
187 {
188 1 // This dummy function confirms the bulbs are OK
189 1 //
190 1 // - See Chapter 32 for further info.
191 1 return RETURN_NORMAL;
192 1 }
193
194 /*------------------------------------------------------------------*-
195
196 TRAFFIC_LIGHTS_Display_Safe_Output()
197
198 Used in the event of system failure, etc.
199
200 -*------------------------------------------------------------------*/
201 void TRAFFIC_LIGHTS_Display_Safe_Output(void)
202 {
203 1 if (TRAFFIC_LIGHTS_Check_Local_Bulb() == RETURN_NORMAL)
204 1 {
205 2 // Bulbs are OK
206 2 // - best thing to do is to display STOP
207 2 Red_light = ON;
208 2 Amber_light = OFF;
209 2 Green_light = OFF;
210 2 }
211 1 else
212 1 {
213 2 // At least one bulb has blown
214 2 // - best thing we can do is extinguish all bulbs
215 2 Red_light = OFF;
216 2 Amber_light = OFF;
217 2 Green_light = OFF;
218 2 }
219 1 }
220
221 /*------------------------------------------------------------------*-
222 ---- END OF FILE -------------------------------------------------
223 -*------------------------------------------------------------------*/
C51 COMPILER V6.10 TLIGHT_A 04/18/2001 16:49:09 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION TRAFFIC_LIGHTS_Init (BEGIN)
; SOURCE LINE # 69
; SOURCE LINE # 70
; SOURCE LINE # 72
; SOURCE LINE # 73
; SOURCE LINE # 74
0000 E4 CLR A
0001 F500 R MOV Light_state_G,A
; SOURCE LINE # 75
; SOURCE LINE # 77
; SOURCE LINE # 78
; SOURCE LINE # 79
0003 ?C0002:
; SOURCE LINE # 82
0003 120000 R LCALL TRAFFIC_LIGHTS_Display_Safe_Outp
; SOURCE LINE # 83
0006 22 RET
; FUNCTION TRAFFIC_LIGHTS_Init (END)
; FUNCTION TRAFFIC_LIGHTS_Update (BEGIN)
; SOURCE LINE # 92
; SOURCE LINE # 93
; SOURCE LINE # 97
0000 120000 R LCALL TRAFFIC_LIGHTS_Check_Local_Bulb
; SOURCE LINE # 100
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 # 101
; SOURCE LINE # 102
0015 ?C0005:
; SOURCE LINE # 103
; SOURCE LINE # 104
0015 C2A0 CLR Red_light
; SOURCE LINE # 105
0017 D2A1 SETB Amber_light
; SOURCE LINE # 106
0019 D2A2 SETB Green_light
; SOURCE LINE # 108
001B 0500 R INC Time_in_state+01H
001D E500 R MOV A,Time_in_state+01H
001F 7002 JNZ ?C0019
0021 0500 R INC Time_in_state
0023 ?C0019:
0023 640A XRL A,#0AH
0025 4500 R ORL A,Time_in_state
0027 7061 JNZ ?C0014
; SOURCE LINE # 109
; SOURCE LINE # 110
0029 750001 R MOV Light_state_G,#01H
; SOURCE LINE # 111
C51 COMPILER V6.10 TLIGHT_A 04/18/2001 16:49:09 PAGE 13
002C F500 R MOV Time_in_state,A
002E F500 R MOV Time_in_state+01H,A
; SOURCE LINE # 112
; SOURCE LINE # 114
0030 22 RET
; SOURCE LINE # 115
; SOURCE LINE # 117
0031 ?C0007:
; SOURCE LINE # 118
; SOURCE LINE # 119
0031 C2A0 CLR Red_light
; SOURCE LINE # 120
0033 C2A1 CLR Amber_light
; SOURCE LINE # 121
0035 D2A2 SETB Green_light
; SOURCE LINE # 123
0037 0500 R INC Time_in_state+01H
0039 E500 R MOV A,Time_in_state+01H
003B 7002 JNZ ?C0020
003D 0500 R INC Time_in_state
003F ?C0020:
003F 640A XRL A,#0AH
0041 4500 R ORL A,Time_in_state
0043 7045 JNZ ?C0014
; SOURCE LINE # 124
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -