📄 light.lst
字号:
242 000052 ;P4口初始化,设置P4口为输出口,输出为高电平,测试的时候要观察,呆会要改为低
243 000052 2DFF(1) mov a,#0ffh
244 000053 1FD4(1) mov p4,a
245 000054 1FC4(1) mov p4m,a
246 000055 ;P5口初始化
247 000055 2BD5(1) clr p5 ;将P5口设为输出低
248 000056 2D00(1) mov a,#0
249 000057 1FC5(1) mov p5m,a
250 000058 0E00(2) ret
251 000059 /**************************************************
252 000059 Subroutine: init_t0
253 000059 Description: 初始化T0,采用4M的外部晶振,定时10MS
254 000059 Calls: N0
255 000059 Variables: N0
256 000059 Input: N0
257 000059 Output: N0
258 000059 *************************************************/
259 000059 init_t0:
260 000059 64C9(1) b0bclr ft0ien ;清定时中断
261 00005A 67D8(1) b0bclr ft0enb
262 00005B 2D00(1) mov a,#00h ;设置T0的分频数,64分频
263 00005C 2FD8(1) b0mov t0m,a
264 00005D 2D64(1) mov a,#64h ;设置T0间隔时间的初始值10MS
265 00005E 2FD9(1) b0mov t0c,a
266 00005F 6CC9(1) b0bset ft0ien
267 000060 6FD8(1) b0bset ft0enb
268 000061 64C8(1) b0bclr ft0irq
269 000062 0E00(2) ret
270 000063
271 000063 INCLUDE light_isr.asm
272 000063 ;***********************************************************************************************
273 000063 ;File name :light_isr.asm
274 000063 ;Author :guangyu_yang
275 000063 ;Purpose :Training
276 000063 ;Data :2/8/2007
277 000063 ;Dscription :中断程序
278 000063 ;Version: v1.1
279 000063 ;Hardware&IDE: m2 1.14
280 000063 ;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.
281 000063 ;*************************************************************************************************
282 000063 isr:
283 000063 0204(1) b0xch a,accbuf ;保存累加器的值
284 000064 0400(1) push
285 000065 5CC8(1+S) b0bts1 ft0irq ;是否是tc0中断
286 000066 806B(2) jmp isr90
287 000067 64C8(1) b0bclr ft0irq ;清中断请求标志位
288 000068 690E(1) b0bset ft0_10ms ;计时标志位置1
289 000069 2D64(1) mov a,#64h
290 00006A 2FD9(1) b0mov t0c,a
291 00006B isr90:
292 00006B 0500(1) pop ;退出中断
293 00006C 0204(1) b0xch a,accbuf
294 00006D 0F00(2) reti
295 00006E INCLUDE light_intgnd.asm
296 00006E ;***********************************************************************************************
297 00006E ;File name :light_intgnd.asm
298 00006E ;Author :guangyu_yang
299 00006E ;Purpose :Training
300 00006E ;Data :2/8/2007
301 00006E ;Dscription :定时程序
302 00006E ;Version: v1.1
303 00006E ;Hardware&IDE: m2 1.14
304 00006E ;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.
305 00006E ;input ft0_10ms
306 00006E ;
307 00006E ; delayvalbuf
308 00006E ;*************************************************************************************************
309 00006E
310 00006E mn_intgnd:
311 00006E 590E(1+S) b0bts1 ft0_10ms
312 00006F 807C(2) jmp mn_intgnd90
313 000070 610E(1) b0bclr ft0_10ms
314 000071 C0B2(2) call dkeychat
315 000072 5D0E(1+S) b0bts1 delayflag
316 000073 8077(2) jmp mn_intgnd10
317 000074 650E(1) b0bclr delayflag
318 000075 1E07(1) mov a,delayvalbuf
319 000076 1F08(1) mov delayvalue,a
320 000077 mn_intgnd10:
321 000077
322 000077 2608(1+S) decms delayvalue
323 000078 807C(2) jmp mn_intgnd90
324 000079 1E07(1) mov a,delayvalbuf
325 00007A 1F08(1) mov delayvalue,a
326 00007B 6C0E(1) b0bset timeout ;1S时间到了,益出
327 00007C mn_intgnd90:
328 00007C 0E00(2) ret
329 00007D INCLUDE light_mnkey.asm
330 00007D ;***********************************************************************************************
331 00007D ;File name :light_mnkey.asm
332 00007D ;Author :guangyu_yang
333 00007D ;Purpose :Training
334 00007D ;Data :2/8/2007
335 00007D ;Dscription :按键子程序
336 00007D ;Version: v1.1
337 00007D ;Hardware&IDE: m2 1.14
338 00007D ;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.
339 00007D ;*************************************************************************************************
340 00007D mn_key:
341 00007D C081(2) call keyin ;键盘扫描程序
342 00007E C085(2) call keychk ;去抖处理
343 00007F C099(2) call keycvt ;按键结果转换
344 000080 0E00(2) ret
345 000081 keyin:
346 000081
347 000081 ;读取p1.0,p1.1,p1.2的值,存入keyinbuf
348 000081 ; CLR P1M
349 000081 1ED1(1) mov a,P1 ;读扫描结果
350 000082 2A0E(1) and a,#0Eh
351 000083 1F00(1) mov keyinbuf,a ;将结果存进keyinbuf中
352 000084
353 000084 keyin90:
354 000084 0E00(2) ret
355 000085 /*****************************************************************
356 000085 Subroutine: keychk
357 000085 Description: 去抖处理
358 000085 Output: keycvtbuf
359 000085 ;****************************************************************/
360 000085 keychk:
361 000085 1E00(1) mov a,keyinbuf ;比较扫描结果和上次是否一样
362 000086 0701(1+S) cmprs a,keychkbuf ;
363 000087 8092(2) jmp keychk10 ;不一样,则更新keychkbuf
364 000088
365 000088
366 000088 keychk00: ;每个口扫描结果都和上次一样
367 000088 5A0E(1+S) b0bts1 fkey_in ;是否处于消抖中
368 000089 8098(2) jmp keychk90
369 00008A 1E05(1) mov a,keychat ;是否处理完毕
370 00008B 0600(1+S) cmprs a,#00h
371 00008C 8098(2) jmp keychk90 ;没有则退出
372 00008D keychk01: ;处理完毕,则接下来处理这组按键结果
373 00008D 1E00(1) mov a,keyinbuf ;更新keycvtbuf
374 00008E 2F02(1) b0mov keycvtbuf,a
375 00008F 620E(1) b0bclr fkey_in
376 000090 6B0E(1) b0bset fkeycvt
377 000091 8098(2) jmp keychk90
378 000092
379 000092 keychk10: ;有键按下,准备进入消抖处理
380 000092 1E00(1) mov a,keyinbuf
381 000093 2F01(1) b0mov keychkbuf,a
382 000094 6A0E(1) b0bset fkey_in
383 000095 2D03(1) mov a,#keydelaytime ;delay 50ms
384 000096 2F05(1) b0mov keychat,a
385 000097 8098(2) jmp keychk90
386 000098
387 000098 keychk90:
388 000098 0E00(2) ret
389 000099 /*****************************************************************
390 000099 Subroutine: keycvt
391 000099 Description: 将按键结果转换并存储
392 000099 Output: keyresult
393 000099 ;****************************************************************/
394 000099 keycvt:
395 000099 5B0E(1+S) b0bts1 fkeycvt ;是否有按键需要处理
396 00009A 80B1(2) jmp keycvt90 ;没有则退出
397 00009B 630E(1) b0bclr fkeycvt ;有按键要处理,清按键处理标志位
398 00009C 1E02(1) mov a,keycvtbuf ;比较处理结果和上次是否一样
399 00009D 0703(1+S) cmprs a,keyoldbuf
400 00009E 80A0(2) jmp keycvt10 ;不一样,判断是哪个BUTTON并更新keyoldbuf
401 00009F 80B1(2) jmp keycvt90 ;一样则跳出
402 0000A0
403 0000A0 keycvt10:
404 0000A0 1E02(1) mov a,keycvtbuf
405 0000A1 060C(1+S) cmprs a,#00001100b
406 0000A2 80A5(2) jmp keycvt11
407 0000A3 2D01(1) mov a,#01h
408 0000A4 80AD(2) jmp keycvt20
409 0000A5
410 0000A5 keycvt11:
411 0000A5 060A(1+S) cmprs a,#00001010b
412 0000A6 80A9(2) jmp keycvt12
413 0000A7 2D02(1) mov a,#02h
414 0000A8 80AD(2) jmp keycvt20
415 0000A9
416 0000A9 keycvt12:
417 0000A9
418 0000A9 0606(1+S) cmprs a,#00000110b
419 0000AA 80B0(2) jmp keycvt80
420 0000AB 2D03(1) mov a,#03h
421 0000AC 80AD(2) jmp keycvt20
422 0000AD
423 0000AD keycvt20:
424 0000AD 1F06(1) mov keyresult,a
425 0000AE 1E02(1) mov a,keycvtbuf ;更新keyoldbuf的值
426 0000AF 80B1(2) JMP KEYCVT90
427 0000B0
428 0000B0 KEYCVT80:
429 0000B0 2F03(1) b0mov keyoldbuf,a
430 0000B1 keycvt90:
431 0000B1 0E00(2) ret
432 0000B2
433 0000B2
434 0000B2 dkeychat: ;按键消抖时间处理
435 0000B2 2E05(1) b0mov a,keychat
436 0000B3
437 0000B3 5086(1+S) b0bts0 fz
438 0000B4 80B8(2) jmp dkeychat90
439 0000B5 2605(1+S) decms keychat
440 0000B6 0000(1) NOP
441 0000B7 80B8(2) jmp dkeychat90
442 0000B8 dkeychat90:
443 0000B8 0E00(2) ret
444 0000B9
445 0000B9
446 0000B9
447 0000B9 INCLUDE light_app.asm
448 0000B9 ;***********************************************************************************************
449 0000B9 ;File name :light_main.asm
450 0000B9 ;Author :guangyu_yang
451 0000B9 ;Purpose :Training
452 0000B9 ;Data :2/8/2007
453 0000B9 ;Dscription :管理程序
454 0000B9 ;Version: v1.1
455 0000B9 ;Hardware&IDE: m2 1.14
456 0000B9 ;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.
457 0000B9 ;*************************************************************************************************
458 0000B9 ;input keyresult
459 0000B9 mn_app:
460 0000B9 1E06(1) mov a,keyresult
461 0000BA 0601(1+S) cmprs a,#01h
462 0000BB 80C3(2) jmp mn_app10 ;不是MODE键
463 0000BC
464 0000BC ;///////////////////////////////////////////
465 0000BC ;//初始化灯的初始值
466 0000BC
467 0000BC 160C(1+S) incms mode ;是MODE键,mode<------mode++
468 0000BD 2B06(1) clr keyresult
469 0000BE 1E0C(1) mov a,mode
470 0000BF
471 0000BF 0604(1+S) cmprs a,#4
472 0000C0 80CB(2) jmp mn_app90 ;mode!=4
473 0000C1 2B0C(1) clr mode
474 0000C2 80CB(2) jmp mn_app90
475 0000C3 /*
476 0000C3 ;判断是否是MODE1
477 0000C3 mn_app01:
478 0000C3 mov a,mode
479 0000C3 cmprs a,#01h
480 0000C3 jmp mn_app02
481 0000C3 b0bset fleftled ;set the flag of shift left led
482 0000C3 mov a,#01h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -