📄 sam2t.l
字号:
485 00BA 90 CB JPS INTB_IntC ; if change, jump
486 00BC C2 24 BTSF SleepNow ; Goto Sleep if timeout
487 00BE 91 12 JPS Sleep1 ;
488 00C0 CA 3C INCS SleepTimL ;
489 00C2 18 JR INTB_IntC ;
490 00C3 CA 3D INCS SleepTimL+1 ;
491 00C5 15 JR INTB_IntC
492 00C6 CA 3E INCS SleepTimH ;
493 00C8 12 JR INTB_IntC
494 00C9 C1 24 BITS SleepNow ; SleepTim overflow, then set sleep flag
495
496 00CB INTB_IntC
497 00CB B0 LD A,#0 ;
498 00CC 89 35 LD BCNT_1s_H,A ; Reload 1s timer
499 00CE 81 4B LD EA,#BCNT1s_RL&0ffh
500 00D0 INTB_Int0_1
501 00D0 CD 36 LD BCNT_1s_M,EA ;
502
503 00D2 INTB_Int0_2
504 00D2 CA 34 INCS BCNT_36ms ; BCNT Count from 0 -> 15 -> 0 -> 15 ....
505 00D4 77 REF RIRET_SB ;
506 00D5 INTB_36ms
507 ;-----
508 00D5 INTB_Int1_1
509 00D5 CA 29 INCS BCNT_183ms ; Check 183ms interval reached?
510 00D7 90 E7 JPS INTB_Int2_1 ;
511
512 00D9 INTB_183ms
513 00D9 BB LD A,#BCNT183ms_RL ;
514 00DA 89 29 LD BCNT_183ms,A ; Reload 183ms timer
515
516 00DC INTB_Int1_2
517 00DC C3 25 BTST AutoZeroEn ; Chk Auto-revert to zero enabled or not
518 00DE 18 JR INTB_Int1_3 ; if not, jump
519 00DF E3 27 BTST UdrWtNow ; Is Now UnderWeight
520 00E1 15 JR INTB_Int1_3 ;
521 00E2 CA 4B INCS AutoZeroTim ;
522 00E4 12 JR INTB_Int1_3 ;
523 00E5 D1 23 BITS AutoZeroNow ; Enable Reset to Zero
524
525 00E7 INTB_Int1_3
526
527 ; LD A,Tag2sec ;
528 ; REF RCPSE_A0 ; if Tag2sec <> 0,
529 ; INCS Tag2sec ; Incs Tag2sec
530 ;--------------------------
531 00E7 INTB_Int2_1
532 00E7 CA 2A INCS BCNT_500ms ; chk 512ms reached?
533 00E9 77 REF RIRET_SB ;
534
535 00EA INTB_500ms
536 00EA B2 LD A,#BCNT500ms_RL ; Reload 512ms Timer
537 00EB 89 2A LD BCNT_500ms,A ;
538 ;--------------------------
539 00ED C3 22 BTST Chge4stepNow
540 00EF 17 JR INTB_Int3_1
541 00F0 CA 8A INCS Chge4stepTimer
542 00F2 14 JR INTB_Int3_1
543 00F3 C0 22 BITR Chge4stepNow ; Set sleep timer delay end
544 00F5 E1 2B BITS ChgeSlpTmrNow
545 00F7 INTB_Int3_1
546 00F7 E3 24 BTST HoldEn ; Check for hold enable
547 00F9 1B JR INTB_Int3_2 ;
548 00FA D2 7F BTSF HoldRd ; Check the reading is not hold
549 00FC 18 JR INTB_Int3_2 ;
550 00FD C2 7F BTSF HoldStableChk ; whether the routine executed or not
551 00FF 15 JR INTB_Int3_2 ;
552 0100 CA 3F INCS HoldTimer ;
553 0102 12 JR INTB_Int3_2 ;
554 0103 C1 7F BITS HoldStableChk ; chk hold stable time interval reach
555 0105 INTB_Int3_2
556 0105 CA 6E INCS Tag2sec
557 0107 12 JR INTB_Int3_3
558 0108 C1 23 BITS CreepZero ;
559
560 010A INTB_Int3_3
561 010A CA 79 INCS CreepTimer ; CREEPING TIMER
562 010C 77 REF RIRET_SB
563 010D D1 24 BITS TimrFinished ;
564 010F 77 REF RIRET_SB ;
565 ;----------------------------------------------------------------------------
566 ;
567 0110 Sleep
568 0110 EA C0 CALLS Dly20 ; simlute the Buzzer tone delay
569 ; REF RKeyTone ;
570 0112 Sleep1
571 0112 FE B2 DI ;
572 0114 Sleep2
573 0114 21 REF RSMB_MemMapIO ;
574
575 0115 B0 LD A,#0 ;
576 0116 89 B8 LD INTA,A ; Disable Basic Timer Interrupt(INTB)
577 0118 89 BA LD INTB,A ; Disable Watch Timer
578 011A 89 BC LD INTC,A ; Disable Timer/Counter Interrupt(INTT0)
579 011C 89 BE LD INTE,A ; Disable INT0 Pin Interrupt
580 ; Disable INT1 Pin Interrupt
581 011E 89 8E LD LCON,A ; Display off
582
583 0120 22 REF RSMB_LCD ; Select LCD Memory Bank1
584 0121 C0 FA BITR POWERON_PIN ; Power Off for Chip
585
586 0123 A0 NOP
587 0124 0E JR $-1 ; Dead loop until no power supply
588
589 ;----------------------------------------------------------------------------
590 ; F: Chk "Off" key press
591 ; O: SMB = Variable Bank
592 ; D: A
593 0125 ChkOffButton
594 0125 21 REF RSMB_MemMapIO ;
595 0126 8C F6 LD A,KEYCOL ;
596 0128 20 REF RSMB_Variable ;
597 0129 DD 11 AND A,#0001b ;
598 012B 48 DECS A ;
599 012C C5 RET ;
600 012D 91 10 JPS Sleep ; Off button
601
602 ;----------------------------------------------------------------------------
603 ; F: External INT0 pin Interrupt
604 ; N: When enter INT0_Int, IS0, IS1 = 1, 0
605 012F INT0_Int
606 012F 73 REF RPush_SB ;
607
608 ;v***** IMPORTANT TO DO FIRST *****v
609 0130 DD 52 SRB RegisterCount ;
610 0132 21 REF RSMB_MemMapIO ;
611 0133 81 70 LD EA,#01110000b ; Stop TCNT0
612 0135 CD 90 LD TMOD0,EA ;
613 0137 22 REF RSMB_LCD ;
614 0138 C0 FB BITR DISCHARGE_PIN ;
615 ;^*********************************^
616
617 013A 21 REF RSMB_MemMapIO ;
618 013B CE 94 LD EA,TCNT0 ; Load LSB
619 013D 26 REF RLD_WXEA ; Store LSB to WX
620 013E 81 7C LD EA,#01111100b ; Enable T/C0
621 0140 CD 90 LD TMOD0,EA ; clear TCNT0 & Restart
622
623 0142 20 REF RSMB_Variable ;
624 0143 D0 21 BITR CntPeriodNow ;
625
626 0145 F9 8C BTST IRQT0 ;
627 0147 15 JR StoreSample ;
628 0148 86 INCS YZ ;
629 0149 13 JR StoreSample ;
630 014A 5A INCS L ;
631 014B FE 8C BITR IRQT0 ; Clear Timer/Counter Request Flag
632
633 014D StoreSample
634 014D 2B PUSH HL ;
635 014E 83 85 LD HL,#HaveData ;
636
637 0150 F4 35 LDB C,@H+PermitUpdate
638 0152 D7 BTST C ; Chk Permit to update sample or not?
639 0153 12 JR StorePermit ;
640 0154 91 72 JPS INT0_Int1 ;
641 0156 StorePermit
642 0156 F4 25 LDB C,@H+UpdateSample0
643 0158 D6 CCF ;
644 0159 FC 25 LDB @H+UpdateSample0,C
645 015B D7 BTST C ; Chk where Sample to store?
646 015C 1B JR StoreSample0 ;
647
648 015D StoreSample1
649 015D DC FC LD EA,WX ; LSB
650 015F CD 5C LD SampleCount1+2,EA
651 0161 DC FE LD EA,YZ ; MSB
652 0163 CD 5A LD SampleCount1,EA ;
653 0165 D1 85 BITS HaveSample1 ; Set Flag for Sample 1 reach
654 0167 1A JR INT0_Int1 ;
655
656 0168 StoreSample0 ;
657 0168 DC FC LD EA,WX ; LSB
658 016A CD 58 LD SampleCount0+2,EA
659 016C DC FE LD EA,YZ ; MSB
660 016E CD 56 LD SampleCount0,EA ;
661 0170 C1 85 BITS HaveSample0 ; Set Flag for Sample 0 reach
662
663 0172 INT0_Int1
664 0172 2A POP HL ;
665 0173 E1 26 BITS OvrAbMaxNow ; Exact absolute max
666 0175 D9 02 CPSE L,#0 ;
667 0177 1E JR INT0_Int3 ;
668
669 0178 81 C7 LD EA,#AbsMaxCnt/256-1
670 017A DC BE SBS EA,YZ ; Chk MSB
671 017C 17 JR INT0_Int2 ;
672 017D 25 REF RLD_HLEA
673 017E 82 INCS HL ; if MSB = AbsMaxCnt/256,
674 017F 16 JR INT0_Int3 ; chk LSB
675 0180 81 00 LD EA,#AbsMaxCnt%256
676
677 0182 DC BC SBS EA,WX ;
678 0184 INT0_Int2
679 0184 E0 26 BITR OvrAbMaxNow ; Not Exact absolute max
680 0186 INT0_Int3
681 0186 FE 8E BITR IRQ0 ; Clear INT0 Interrupt Request Flag
682 0188 77 REF RIRET_SB ;
683
684 ;----------------------------------------------------------------------------
685 ; F: INTT0 Interrupt for Timer/Counter 0 Compare Match
686 ; I: CntPeriodNow = 0: DischargePeriod
687 ; 1: CountingPeriod
688 ; N: When enter INTT0_Int, IS0, IS1 = 0, 1
689 0189 INTT0_Int
690 0189 73 REF RPush_SB ;
691
692 018A DD 52 SRB RegisterCount ;
693 018C 20 REF RSMB_Variable ;
694 018D D3 21 BTST CntPeriodNow ;
695 018F 91 A2 JPS DischargePeriod ;
696
697 ;v***** IMPORTANT - COUNTING PART *****v
698 0191 CountingPeriod ;
699 0191 86 INCS YZ ; MSB for Counting Value
700 0192 11 JR INTT0_IntE ;
701 0193 5A INCS L ; If overflow for 16-bit count number, INCS L
702 ;^*************************************^
703 0194 INTT0_IntE
704 0194 77 REF RIRET_SB ;
705
706 ; if L overflow, display "EE"
707 0195 C2 2B BTSF CntOvrflow ;
708 0197 77 REF RIRET_SB ;
709 0198 C1 2B BITS CntOvrflow ;
710 019A E1 26 BITS OvrAbMaxNow ;
711 019C B2 LD A,#2 ; Set OvrWtNow & Clear Others Flags
712 019D 89 27 LD OperFlg8,A ;
713 019F EC A4 CALLS RL_OWT ;
714 01A1 77 REF RIRET_SB ;
715 ;---------------------------------------
716 01A2 DischargePeriod
717 01A2 CE 5E LD EA,CntTCNT ;
718 01A4 DC D8 DECS EA ;
719 01A6 91 C0 JPS DischargePeriod8
720
721 ;v***** IMPORTANT TO DO FIRST *****v
722 01A8 21 REF RSMB_MemMapIO ; Select Memory Bank
723 01A9 F9 C1 BTST STOPCNT_PIN ; check interrupt pin is high?
724 01AB 1A JR DischargePeriod4 ; when low, restart timer.
725
726 01AC 22 REF RSMB_LCD ;
727 01AD C1 FB BITS DISCHARGE_PIN ;
728 01AF 20 REF RSMB_Variable ;
729 01B0 D1 21 BITS CntPeriodNow ; Set to Counting Period
730 01B2 87 00 LD YZ,#0 ; Clear MSB
731 01B4 D9 0A LD L,#0 ;
732 01B6 DischargePeriod4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -