📄 battery_check.lst
字号:
299 00F2 1F00 R clr check_times
300 00F3 mmov check_end, 01h
301 00F5 0003 ret
302 00F6 voltage_40:
303 00F6 1F00 R clr adbuf_h
304 00F7 1F00 R clr adbuf_hc
305 00F8 1F00 R clr adbuf_l
306 00F9 3494 clr pb.1
307 00FA 3114 set pb.2
308 00FB 1F00 R clr check_times
309 00FC mmov check_end, 01h
310 00FE 0003 ret
311 00FF voltage_38:
312 00FF 1F00 R clr adbuf_h
313 0100 1F00 R clr adbuf_hc
314 0101 1F00 R clr adbuf_l
315 0102 3094 set pb.1
316 0103 3514 clr pb.2
317 0104 1F00 R clr check_times
318 0105 mmov check_end, 01h
319 0107 0003 ret
320 0108 voltage_35:
321 0108 1F00 R clr adbuf_h
322 0109 1F00 R clr adbuf_hc
323 010A 1F00 R clr adbuf_l
324 010B 3094 set pb.1
325 010C 3114 set pb.2
326 010D 1480 R inc check_times
327 010E mmov check_end, 01h
328 0110 0003 ret
329 0111 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
330 0111 ; check power one times on 14s
331 0111 check_delay:
332 0111 350A clr status.2
333 0112 0F7D mov a, 07dh
334 0113 0600 R and a, delay_in ;if timer_in=0 so result is 0
335 0114 390A snz status.2 ;if result=0 so status.2=1
336 0115 0003 ret ;1 times loop is 2s
337 0116 mmov delay_in, 07dh
338 0118 1580 R dec check_4s ;delays is 4
339 0119 3D0A sz status.2 ;2X2=4s
340 011A 1480 R inc check_01
341 011B 0003 ret
342 011C ;***************************************
343 011C ; enter timing mode , backup register
344 011C timer_bak:
345 011C 360E clr tmrc.4
346 011D mmov tmr, 06h ;timer is 8ms
347 011F 320E set tmrc.4
348 0120 mmov adcr, 0h
349 0122 mmov pbc_bak, pbc
350 0124 mmov pb_bak, pb
351 0126 mmov intc_bak, intc
352 0128 3492 clr pa.1
353 0129 3414 clr pb.0
354 012A 3494 clr pb.1
355 012B 3514 clr pb.2
356 012C mmov intc, 047h ;only disable a/d interrupt
357 012E 0003 ret
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次7
358 012F ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
359 012F ; timing end , comeback register and reset timer paramiter
360 012F timer_back_write:
361 012F mmov intc, intc_bak
362 0131 3092 set pa.1
363 0132 mmov pbc, pbc_bak
364 0134 mmov pb, pb_bak
365 0136 1F18 clr pd
366 0137 mmov timer_in, 0fah ;2s
367 0139 mmov time5min, 06ah ;2X150=300s
368 013B mmov time_a, 09ch ;2X100=200s loop
369 013D mmov time30min, 0f7h ;200X9=30min loop
370 013F mmov time60min, 0eeh ;200X18=60min loop
371 0141 0003 ret
372 0142 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
373 0142 ; 1min timing
374 0142 time_5min:
375 0142 211C call timer_bak ;do timer_bak IO status, all IO set output 0
376 0143 loop1:
377 0143 21BA call ptled_sleep
378 0144 3C12 sz pa.0
379 0145 1F00 R clr on_01
380 0146 21D1 call long_push
381 0147 350A clr status.2
382 0148 0FFA mov a, 0fah
383 0149 0600 R and a, timer_in ;if timer_in=0 so result is 0
384 014A 390A snz status.2 ;if result=0 so status.2=1
385 014B 2943 jmp loop1 ;1 times loop is 2s
386 014C mmov timer_in, 0fah
387 014E 350A clr status.2
388 014F 1480 R inc time5min ;time5min is 150
389 0150 390A snz status.2 ;2X150=300s is 5 minutes
390 0151 2943 jmp loop1
391 0152 mmov time5min, 06ah ;reset time5min=106
392 0154 212F call timer_back_write ; back write IO status
393 0155 0003 ret
394 0156 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
395 0156 ; 30min timing
396 0156 time_30min:
397 0156 211C call timer_bak
398 0157 loop2:
399 0157 21BA call ptled_sleep
400 0158 3C12 sz pa.0
401 0159 1F00 R clr on_01
402 015A 21D1 call long_push
403 015B 350A clr status.2
404 015C 0FFA mov a, 0fah
405 015D 0600 R and a, timer_in
406 015E 390A snz status.2
407 015F 2957 jmp loop2 ;2s timer reached
408 0160 mmov timer_in, 0fah
409 0162 350A clr status.2
410 0163 1480 R inc time_a ;time_a=156
411 0164 390A snz status.2 ;100X2=200s status.2=1
412 0165 2957 jmp loop2
413 0166 mmov time_a, 09ch ;reset time_a
414 0168 350A clr status.2
415 0169 1480 R inc time30min ;time30min=247
416 016A 390A snz status.2 ;200X9=1800s status.2=1
417 016B 2957 jmp loop2
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次8
418 016C mmov time30min, 0f7h ;reset time30min
419 016E 212F call timer_back_write
420 016F 0003 ret
421 0170 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
422 0170
423 0170 ; 60min timing
424 0170 time_60min:
425 0170 211C call timer_bak
426 0171 loop3:
427 0171 21BA call ptled_sleep
428 0172 3C12 sz pa.0
429 0173 1F00 R clr on_01
430 0174 21D1 call long_push
431 0175 350A clr status.2
432 0176 0FFA mov a, 0fah
433 0177 0600 R and a, timer_in
434 0178 390A snz status.2
435 0179 2971 jmp loop3 ;2s reached
436 017A mmov timer_in, 0fah
437 017C 350A clr status.2
438 017D 1480 R inc time_a ;time_a=156
439 017E 390A snz status.2 ;100X2=200s status.2=1
440 017F 2971 jmp loop3
441 0180 mmov time_a, 09ch ;reset time_a
442 0182 350A clr status.2
443 0183 1480 R inc time60min ;time60min=18
444 0184 390A snz status.2 ;200X18=3600s
445 0185 2971 jmp loop3
446 0186 mmov time60min, 0eeh ;reset time60min=237
447 0188 212F call timer_back_write
448 0189 0003 ret
449 018A ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
450 018A
451 018A check_mode1:
452 018A 3818 snz pd.0 ; default mode, timer is no seting enter idle mode
453 018B 2088 call idle_mode
454 018C 3C18 sz pd.0
455 018D 2142 call time_5min ;if pd=1, enter 5min set
456 018E 0003 ret
457 018F ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
458 018F
459 018F check_mode2:
460 018F 3818 snz pd.0 ;if pd=0 enter time_30min setup, otherwise enter time_60min setup
461 0190 2156 call time_30min
462 0191 3C18 sz pd.0
463 0192 2170 call time_60min
464 0193 0003 ret
465 0194 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
466 0194 time_set:
467 0194 1F00 R clr sl_idle
468 0195 1F00 R clr main_01
469 0196 360E clr tmrc.4
470 0197 mmov tmr, 06h
471 0199 320E set tmrc.4
472 019A 3293 set pac.5
473 019B 3992 snz pa.3 ;if pa.3=0 enter check_mode1,
474 019C 218A call check_mode1
475 019D 3D92 sz pa.3 ;if pa.3=1 enter check_mode2
476 019E 218F call check_mode2
477 019F 0003 ret
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次9
478 01A0 ;***************************************
479 01A0
480 01A0 intc_inform:
481 01A0 360E clr tmrc.4
482 01A1 mmov tmr, 06h ;timer is 8ms
483 01A3 320E set tmrc.4
484 01A4 mmov timer_in, 0fah
485 01A6 0000 nop
486 01A7 0000 nop
487 01A8 3693 clr pac.5
488 01A9 3292 set pa.5
489 01AA delay1:
490 01AA 350A clr status.2
491 01AB 0FFA mov a, 0fah
492 01AC 0600 R and a, timer_in ;if timer_in=0 so result is 0
493 01AD 390A snz status.2 ;if result=0 so status.2=1
494 01AE 29AA jmp delay1 ;1 times loop is 2s
495 01AF mmov timer_in, 0fah
496 01B1 350A clr status.2
497 01B2 1580 R dec delay_4s ;delays is 2
498 01B3 390A snz status.2 ;2X2=4s
499 01B4 mmov delay_4s, 02h
500 01B6 3293 set pac.5
501 01B7 3692 clr pa.5
502 01B8 1F00 R clr intc_out
503 01B9 0003 ret
504 01BA ;***************************************
505 01BA ;photosensitive diode
506 01BA ptled_sleep:
507 01BA 3C12 sz pa.0
508 01BB 1F00 R clr on_01
509 01BC 3994 snz pb.3
510 01BD 2077 call sleep_mode ;if pb3=0 enter sleep_mode
511 01BE 0003 ret
512 01BF ;***************************************
513 01BF ; open pvi
514 01BF open:
515 01BF 1080 R sz on_off_bit ;if on_off_bit = 0, so open pvi
516 01C0 29C7 jmp over ;if on_off_bit = 1, so do nothing
517 01C1 3112 set pa.2
518 01C2 3092 set pa.1
519 01C3 mmov on_off_bit, 01h ;open after set on_off_bit
520 01C5 mmov on_01, 01h ;if first on power, so on_01=1
521 01C7 over:
522 01C7 0003 ret
523 01C8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
524 01C8 ; infom main_cpu will shut down
525 01C8 inform:
526 01C8 3312 set pa.6 ;inform to mian_cpu save register
527 01C9 shut_loop:
528 01C9 3B92 snz pa.7 ;if pa7=1 shut_down
529 01CA 29C9 jmp shut_loop
530 01CB 0003 ret
531 01CC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
532 01CC ; shutdown pvi
533 01CC shut_down:
534 01CC 1080 R sz sl_idle
535 01CD 21C8 call inform ;before shut_down, inform main_cpu to save status
536 01CE 3492 clr pa.1
537 01CF 3512 clr pa.2
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次10
538 01D0 0003 ret
539 01D1
540 01D1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
541 01D1
542 01D1 ; if POWERCK is pushed, and holding_timer > 200ms, to justify
543 01D1 long_push:
544 01D1 3C12 sz pa.0 ;pa.0 = 0, indicat switch_key did pushed
545 01D2 0003 ret
546 01D3 360E clr tmrc.4
547 01D4 mmov tmr, 06h
548 01D6 320E set tmrc.4
549 01D7 mmov timer_in, 046h
550 01D9 loop: ; 560ms timer_delay
551 01D9 1080 R sz timer_in
552 01DA 29D9 jmp loop
553 01DB 3812 snz pa.0 ;powerck push_holding >256ms
554 01DC 1080 R sz on_01 ;if on_01 = 1, indicate key don't undo on last times, so not check open_down function
555 01DD 29E1 jmp next1 ;if on_01 = 0, call open_down function
556 01DE 1080 R sz on_off_bit ;if on_off_bit = 1, call shut_down
557 01DF 21CC call shut_down
558 01E0 21BF call open
559 01E1 next1:
560 01E1 0003 ret
561 01E2 ;***************************************
562 01E2 main:
563 01E2 201F call initial
564 01E3 main_loop:
565 01E3 mmov sl_idle, 01h
566 01E5 mmov main_01, 01h
567 01E7 21D1 call long_push ; long_time push_key run pvi
568 01E8 3812 snz pa.0 ;pa.0 = 0 , not undo key
569 01E9 29EB jmp next2
570 01EA 1F00 R clr on_01
571 01EB next2:
572 01EB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
573 01EB ;enter sleep_mode mode check
574 01EB 21BA call ptled_sleep
575 01EC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
576 01EC ; power check
577 01EC 1F00 R clr check_end
578 01ED 1080 R sz on_off_bit ;only run status, check battery's power
579 01EE 2111 call check_delay ;5s check 1 time
580 01EF 1080 R sz check_01 ;if check_01 = 1, check power of battery
581 01F0 20A3 call adpro
582 01F1 350A clr status.2
583 01F2 0F03 mov a, 03h ;if three times low power , so shut down
584 01F3 0200 R sub a, check_times
585 01F4 3D0A sz status.2
586 01F5 21CC call shut_down
587 01F6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
588 01F6 ; timing check
589 01F6 mmov timer_in, 0fah
590 01F8 3F92 sz pa.7 ;if pa7=1 check time_mode
591 01F9 2194 call time_set
592 01FA ;;;;;;;;;;;;;;;;
593 01FA 1080 R sz intc_out
594 01FB 21A0 call Intc_Inform
595 01FC 29E3 jmp main_loop
596 01FD ;*************************************************
597 01FD ;*************************************************
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次11
598 01FD end
0 Errors
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -