📄 traffic light firmware.lst
字号:
192 00008A CHECKE18:
193 00008A 2D18(1) MOV A,#18H
194 00008B 07D1(1+S) CMPRS A,P1
195 00008C 808E(2) JMP CHECKE14
196 00008D 809A(2) JMP SETE20 ;检查led是否为18h,设定东边为20s
197 00008E CHECKE14:
198 00008E 2D14(1) MOV A,#14H
199 00008F 07D1(1+S) CMPRS A,P1
200 000090 8092(2) JMP CHECKE42
201 000091 809F(2) JMP SETE03 ;检查led是否为14h,设定东边为03s
202 000092 CHECKE42:
203 000092 2D42(1) MOV A,#42H
204 000093 07D1(1+S) CMPRS A,P1
205 000094 8096(2) JMP CHECKE22
206 000095 80A4(2) JMP SETE17 ;检查led是否为14h,设定东边为17s
207 000096 CHECKE22:
208 000096 2D22(1) MOV A,#22H
209 000097 07D1(1+S) CMPRS A,P1
210 000098 80B9(2) JMP NORMAL01
211 000099 809F(2) JMP SETE03 ;检查led是否为22h,设定东边为03s
212 00009A SETE20:
213 00009A 2D01(1) MOV A,#01
214 00009B 1F12(1) MOV E_L,A
215 00009C 2D02(1) MOV A,#02
216 00009D 1F13(1) MOV E_H,A
217 00009E 80B9(2) JMP NORMAL01
218 00009F SETE03:
219 00009F 2D03(1) MOV A,#03
220 0000A0 1F12(1) MOV E_L,A
221 0000A1 2D00(1) MOV A,#00
222 0000A2 1F13(1) MOV E_H,A
223 0000A3 80B9(2) JMP NORMAL01
224 0000A4 SETE17:
225 0000A4 2D08(1) MOV A,#08
226 0000A5 1F12(1) MOV E_L,A
227 0000A6 2D01(1) MOV A,#01
228 0000A7 1F13(1) MOV E_H,A
229 0000A8 80B9(2) JMP NORMAL01
230 0000A9 ;*********************************
231 0000A9 ;北边减一秒
232 0000A9 ;*********************************
233 0000A9 NORMAL00:
234 0000A9 1E10(1) MOV A,N_L ;北边秒低位
235 0000AA 2401(1) SUB A,#01 ;减1
236 0000AB 1F10(1) MOV N_L,A
237 0000AC
238 0000AC 1E10(1) MOV A,N_L
239 0000AD 06FF(1+S) CMPRS A,#0FFH ;比较是否为FF
240 0000AE 80FA(2) JMP EXIT_IRQ ;no,跳出中断
241 0000AF 2D09(1) MOV A,#09 ;yes,赋值09
242 0000B0 1F10(1) MOV N_L,A
243 0000B1
244 0000B1 1E11(1) MOV A,N_H ;北边秒高位
245 0000B2 2401(1) SUB A,#01 ;减1
246 0000B3 1F11(1) MOV N_H,A
247 0000B4
248 0000B4 06FF(1+S) CMPRS A,#0FFH ;比较是否为FF
249 0000B5 80FA(2) JMP EXIT_IRQ ;no,跳出中断
250 0000B6 2D09(1) MOV A,#09 ;yes,赋值09
251 0000B7 1F11(1) MOV N_H,A
252 0000B8
253 0000B8 80FA(2) JMP EXIT_IRQ ;跳出中断
254 0000B9 ;*********************************
255 0000B9 ;南边减一秒
256 0000B9 ;*********************************
257 0000B9 NORMAL01:
258 0000B9 1E12(1) MOV A,E_L ;东边秒低位
259 0000BA 2401(1) SUB A,#01 ;减1
260 0000BB 1F12(1) MOV E_L,A
261 0000BC
262 0000BC 1E12(1) MOV A,E_L
263 0000BD 06FF(1+S) CMPRS A,#0FFH ;比较是否为FF
264 0000BE 80FA(2) JMP EXIT_IRQ ;no,跳出中断
265 0000BF 2D09(1) MOV A,#09 ;yes,赋值09
266 0000C0 1F12(1) MOV E_L,A
267 0000C1
268 0000C1 1E13(1) MOV A,E_H ;东边秒高位
269 0000C2 2401(1) SUB A,#01 ;减1
270 0000C3 1F13(1) MOV E_H,A
271 0000C4 06FF(1+S) CMPRS A,#0FFH ;比较是否为FF
272 0000C5 80FA(2) JMP EXIT_IRQ ;no,跳出中断
273 0000C6 2D09(1) MOV A,#09 ;yes,赋值09
274 0000C7 1F13(1) MOV E_H,A
275 0000C8 80FA(2) JMP EXIT_IRQ ;跳出中断
276 0000C9 ;*********************************
277 0000C9 ;选择中断
278 0000C9 ;*********************************
279 0000C9 CYC:
280 0000C9 7EC9(1+S) B0BTS1 FTC1IEN
281 0000CA 80CD(2) JMP @F
282 0000CB 76C8(1+S) B0BTS0 FTC1IRQ
283 0000CC 803E(2) JMP MY_IRQ
284 0000CD @@:
285 0000CD 7CC9(1+S) B0BTS1 FT0IEN
286 0000CE 80FA(2) JMP EXIT_IRQ
287 0000CF 74C8(1+S) B0BTS0 FT0IRQ
288 0000D0 807A(2) JMP INTT0
289 0000D1 0E00(2) RET
290 0000D2 ;*********************************
291 0000D2 ;初始化
292 0000D2 ;*********************************
293 0000D2 INIT_IO:
294 0000D2 2DFF(1) MOV A,#0FFH
295 0000D3 1FC1(1) MOV P1M,A
296 0000D4 1FC2(1) MOV P2M,A
297 0000D5 1FC5(1) MOV P5M,A
298 0000D6 1FD2(1) MOV P2,A
299 0000D7 2BD1(1) CLR P1
300 0000D8 0E00(2) RET
301 0000D9 INIT_DATA:
302 0000D9 2B00(1) CLR DLY1
303 0000DA 2B02(1) CLR DLY2
304 0000DB 2B10(1) CLR N_L
305 0000DC 2B11(1) CLR N_H
306 0000DD 2B12(1) CLR E_L
307 0000DE 2B13(1) CLR E_H
308 0000DF 0E00(2) RET
309 0000E0 ;初始化TC1
310 0000E0 INIT_TIMER:
311 0000E0 66C9(1) B0BCLR FTC1IEN ;关闭中断
312 0000E1 67DC(1) B0BCLR FTC1ENB
313 0000E2 2D04(1) MOV A,#00000100B
314 0000E3 1FDC(1) MOV TC1M,A ;设定tc1 clock=Fcpu/256
315 0000E4 2D3D(1) MOV A,#61
316 0000E5 1FDD(1) MOV TC1C,A ;设定每50ms中断一次
317 0000E6 2D14(1) MOV A,#20
318 0000E7 1F04(1) MOV TIMER00,A
319 0000E8
320 0000E8 6EC9(1) B0BSET FTC1IEN
321 0000E9 66C8(1) B0BCLR FTC1IRQ
322 0000EA 6FDC(1) B0BSET FTC1ENB
323 0000EB 6FDF(1) B0BSET FGIE
324 0000EC 0E00(2) RET
325 0000ED ;初始化T0
326 0000ED INIT_TC0:
327 0000ED 64C9(1) B0BCLR FT0IEN ;关闭中断
328 0000EE 67D8(1) B0BCLR FT0ENB
329 0000EF 2D04(1) MOV A,#00000100B
330 0000F0 1FD8(1) MOV T0M,A ;设定tc1 clock=Fcpu/256
331 0000F1 2D3D(1) MOV A,#61
332 0000F2 1FD9(1) MOV T0C,A ;设定每50ms中断一次
333 0000F3 2D14(1) MOV A,#20
334 0000F4 1F05(1) MOV TIMER01,A
335 0000F5
336 0000F5 6CC9(1) B0BSET FT0IEN
337 0000F6 64C8(1) B0BCLR FT0IRQ
338 0000F7 6FD8(1) B0BSET FT0ENB
339 0000F8 6FDF(1) B0BSET FGIE
340 0000F9 0E00(2) RET
341 0000FA EXIT_IRQ:
342 0000FA 0500(1) POP
343 0000FB 0F00(2) RETI
344 0000FC ;********************************
345 0000FC ;查表
346 0000FC ;********************************
347 0000FC BCD_DISP:
348 0000FC 3401(1) B0MOV Y,#TABLE$M
349 0000FD 3302(1) B0MOV Z,#TABLE$L
350 0000FE 1283(1) ADD A,Z
351 0000FF 1F83(1) MOV Z,A
352 000100 0D00(2) MOVC
353 000101 0E00(2) RET
354 000102 ;********************************
355 000102 ;数据表
356 000102 ;********************************
357 000102 TABLE:
358 000102 01C0(1) DW 01C0H
359 000103 01F9(1) DW 01F9H
360 000104 01A4(1) DW 01A4H
361 000105 01B0(1) DW 01B0H
362 000106 0199(1) DW 0199H
363 000107 0192(1) DW 0192H
364 000108 0182(1) DW 0182H
365 000109 01F8(1) DW 01F8H
366 00010A 0180(1) DW 0180H
367 00010B 0190(1) DW 0190H
368 00010C DELAY:
369 00010C 2D60(1) MOV A,#60H
370 00010D 1F00(1) MOV DLY1,A
371 00010E
372 00010E 2D04(1) MOV A,#04H
373 00010F 1F02(1) MOV DLY2,A
374 000110 @@:
375 000110 2600(1+S) DECMS DLY1
376 000111 8110(2) JMP @B
377 000112 2602(1+S) DECMS DLY2
378 000113 8110(2) JMP @B
379 000114 0E00(2) RET
380 000115 ENDP
381 000115
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -