📄 sam2_m.l
字号:
475
476 0078 00 0F RRET_HLEA TJP RETHLEA
477 007A 00 12 RRET_WXHLEA TJP RETWXHLEA
478 007C 00 16 RRET_YZWXHLEA TJP RETYZWXHLEA
479 007E 00 0C RIRET_SB TJP IRETSB
480
481 ;----------------------------------------------------------------------------
482 ;
483 0080 .origin Main2Loop
484
485 ;----------------------------------------------------------------------------
486 ; F: On/Zero Button(MaB)
487 ; I: WeightTareNow
488 ; O: WeightTareNow
489 ; N: Rising edge when release key(MaB)
490 ; When enter INT1_Int, IS0, IS1 = 1, 0
491 ;
492 0080 INT1_Int
493 0080 FE AE BITR IRQ1 ;
494 0082 FE A0 BITR IS0 ;
495 0084 73 REF RPush_SB ;
496 0085 20 REF RSMB_Variable ;
497 0086 E2 22 BTSF CalibrateOn ;
498 0088 E0 21 BITR CntDspNow ;
499 ; REF RSMB_MemMapIO ;
500 ;INT1_Int1
501 ; BTST ONZERO_PIN
502 ; JR INT1_Int1
503 ; REF RSMB_Variable ;
504 008A F1 21 BITS WeightTareNow ; Set flag to weight tare
505 008C 77 REF RIRET_SB ;
506
507 ;----------------------------------------------------------------------------
508 ; F: INTB Interrupt for Basic Timer Overflow
509 ; N: Interrupt interval = 2.2886.ms
510 ; when enter into INTB_Int, IS0, IS1 = 1, 0
511 008D INTB_Int
512 008D FE 88 BITR IRQB ;
513 008F FE A0 BITR IS0 ;
514
515 0091 73 REF RPush_SB ;
516 0092 DD 53 SRB RegisterINTB ;
517 0094 20 REF RSMB_Variable ;
518
519 0095 E2 22 BTSF CalibrateOn ; If Calibrate On, skip sleep time
520 0097 90 D2 JPS INTB_Int0_2 ; & Timer counting
521
522 0099 CE 36 LD EA,BCNT_1s_M ;
523 009B C9 01 ADS EA,#1 ;
524 009D 90 D0 JPS INTB_Int0_1 ;
525 009F CA 35 INCS BCNT_1s_H ; never skip
526 00A1 C2 35 BTSF BCNT_1s_H.0 ;
527 00A3 90 D0 JPS INTB_Int0_1 ;
528 00A5 INTB_1000ms
529
530 00A5 D3 7F BTST HoldRd ; Check for hold reading in progress
531 00A7 1C JR INTB_IntA ;
532
533 00A8 CA 3F INCS HoldTimer ; Check hold reading timeout
534 00AA 19 JR INTB_IntA ;
535 00AB D0 7F BITR HoldRd ;
536 00AD C0 7F BITR HoldStableChk ;
537 00AF F1 7F BITS HoldNotAllow ; Hold is not allow unless reading change
538 00B1 BC LD A,#HoldChkTime ; Reset timer
539 00B2 89 3F LD HoldTimer,A ;
540 00B4 INTB_IntA
541 00B4 INTB_IntB
542 00B4 E2 25 BTSF AutoOffEn ; Chk Auto-power off enabled or not
543 00B6 90 CB JPS INTB_IntC ; if not, jump
544 00B8 C2 22 BTSF Chge4stepNow ; Chk 4 step changing
545 00BA 90 CB JPS INTB_IntC ; if change, jump
546 00BC C2 24 BTSF SleepNow ; Goto Sleep if timeout
547 00BE 91 12 JPS Sleep1 ;
548 00C0 CA 3C INCS SleepTimL ;
549 00C2 18 JR INTB_IntC ;
550 00C3 CA 3D INCS SleepTimL+1 ;
551 00C5 15 JR INTB_IntC
552 00C6 CA 3E INCS SleepTimH ;
553 00C8 12 JR INTB_IntC
554 00C9 C1 24 BITS SleepNow ; SleepTim overflow, then set sleep flag
555
556 00CB INTB_IntC
557 00CB B0 LD A,#0 ;
558 00CC 89 35 LD BCNT_1s_H,A ; Reload 1s timer
559 00CE 81 4B LD EA,#BCNT1s_RL&0ffh
560 00D0 INTB_Int0_1
561 00D0 CD 36 LD BCNT_1s_M,EA ;
562
563 00D2 INTB_Int0_2
564 00D2 CA 34 INCS BCNT_36ms ; BCNT Count from 0 -> 15 -> 0 -> 15 ....
565 00D4 77 REF RIRET_SB ;
566 00D5 INTB_36ms
567 ;-----
568 00D5 INTB_Int1_1
569 00D5 CA 29 INCS BCNT_183ms ; Check 183ms interval reached?
570 00D7 90 E7 JPS INTB_Int2_1 ;
571
572 00D9 INTB_183ms
573 ; add by huang for timeout 03-10-23 12:26
574 ; ld a,TimeoutTmr
575 ; ref RCPSE_A0
576 ; jr NewInt0
577 ; jr NewInt1
578 ;NewInt0:
579 ; decs a
580 ; ld TimeoutTmr,a
581 00D9 NewInt1:
582 00D9 BB LD A,#BCNT183ms_RL ;
583 00DA 89 29 LD BCNT_183ms,A ; Reload 183ms timer
584
585 00DC INTB_Int1_2
586 00DC C3 25 BTST AutoZeroEn ; Chk Auto-revert to zero enabled or not
587 00DE 18 JR INTB_Int1_3 ; if not, jump
588 00DF E3 27 BTST UdrWtNow ; Is Now UnderWeight
589 00E1 15 JR INTB_Int1_3 ;
590 00E2 CA 4B INCS AutoZeroTim ;
591 00E4 12 JR INTB_Int1_3 ;
592 00E5 D1 23 BITS AutoZeroNow ; Enable Reset to Zero
593
594 00E7 INTB_Int1_3
595
596 ; LD A,Tag2sec ;
597 ; REF RCPSE_A0 ; if Tag2sec <> 0,
598 ; INCS Tag2sec ; Incs Tag2sec
599 ;--------------------------
600 00E7 INTB_Int2_1
601 00E7 CA 2A INCS BCNT_500ms ; chk 512ms reached?
602 00E9 77 REF RIRET_SB ;
603
604 00EA INTB_500ms
605 00EA B2 LD A,#BCNT500ms_RL ; Reload 512ms Timer
606 00EB 89 2A LD BCNT_500ms,A ;
607 ;--------------------------
608 00ED C3 22 BTST Chge4stepNow
609 00EF 17 JR INTB_Int3_1
610 00F0 CA 8A INCS Chge4stepTimer
611 00F2 14 JR INTB_Int3_1
612 00F3 C0 22 BITR Chge4stepNow ; Set sleep timer delay end
613 00F5 E1 2B BITS ChgeSlpTmrNow
614 00F7 INTB_Int3_1
615 00F7 E3 24 BTST HoldEn ; Check for hold enable
616 00F9 1B JR INTB_Int3_2 ;
617 00FA D2 7F BTSF HoldRd ; Check the reading is not hold
618 00FC 18 JR INTB_Int3_2 ;
619 00FD C2 7F BTSF HoldStableChk ; whether the routine executed or not
620 00FF 15 JR INTB_Int3_2 ;
621 0100 CA 3F INCS HoldTimer ;
622 0102 12 JR INTB_Int3_2 ;
623 0103 C1 7F BITS HoldStableChk ; chk hold stable time interval reach
624 0105 INTB_Int3_2
625 0105 CA 6E INCS Tag2sec
626 0107 12 JR INTB_Int3_3
627 0108 C1 23 BITS CreepZero ;
628
629 010A INTB_Int3_3
630 010A CA 79 INCS CreepTimer ; CREEPING TIMER
631 010C 77 REF RIRET_SB
632 010D D1 24 BITS TimrFinished ;
633 010F 77 REF RIRET_SB ;
634 ;----------------------------------------------------------------------------
635 ;
636 0110 Sleep
637 0110 EA E7 CALLS Dly20 ; simlute the Buzzer tone delay
638 ; REF RKeyTone ;
639 0112 Sleep1
640 0112 FE B2 DI ;
641 0114 Sleep2
642 0114 21 REF RSMB_MemMapIO ;
643
644 0115 B0 LD A,#0 ;
645 0116 89 B8 LD INTA,A ; Disable Basic Timer Interrupt(INTB)
646 0118 89 BA LD INTB,A ; Disable Watch Timer
647 011A 89 BC LD INTC,A ; Disable Timer/Counter Interrupt(INTT0)
648 011C 89 BE LD INTE,A ; Disable INT0 Pin Interrupt
649 ; Disable INT1 Pin Interrupt
650 011E 89 8E LD LCON,A ; Display off
651
652 0120 22 REF RSMB_LCD ; Select LCD Memory Bank1
653 0121 C0 FA BITR POWERON_PIN ; Power Off for Chip
654
655 0123 A0 NOP
656 0124 0E JR $-1 ; Dead loop until no power supply
657
658 ;----------------------------------------------------------------------------
659 ; F: Chk "Off" key press
660 ; O: SMB = Variable Bank
661 ; D: A
662 0125 ChkOffButton
663 0125 21 REF RSMB_MemMapIO ;
664 0126 8C F6 LD A,KEYCOL ;
665 0128 20 REF RSMB_Variable ;
666 0129 DD 11 AND A,#0001b ;
667 012B 48 DECS A ;
668 012C C5 RET ;
669 012D 91 10 JPS Sleep ; Off button
670
671 ;----------------------------------------------------------------------------
672 ; F: External INT0 pin Interrupt
673 ; N: When enter INT0_Int, IS0, IS1 = 1, 0
674 012F INT0_Int
675 012F 73 REF RPush_SB ;
676
677 ;v***** IMPORTANT TO DO FIRST *****v
678 0130 DD 52 SRB RegisterCount ;
679 0132 21 REF RSMB_MemMapIO ;
680 0133 81 70 LD EA,#01110000b ; Stop TCNT0
681 0135 CD 90 LD TMOD0,EA ;
682 0137 22 REF RSMB_LCD ;
683 0138 C0 FB BITR DISCHARGE_PIN ;
684 ;^*********************************^
685
686 013A 21 REF RSMB_MemMapIO ;
687 013B CE 94 LD EA,TCNT0 ; Load LSB
688 013D 26 REF RLD_WXEA ; Store LSB to WX
689 013E 81 7C LD EA,#01111100b ; Enable T/C0
690 0140 CD 90 LD TMOD0,EA ; clear TCNT0 & Restart
691
692 0142 20 REF RSMB_Variable ;
693 0143 D0 21 BITR CntPeriodNow ;
694
695 0145 F9 8C BTST IRQT0 ;
696 0147 15 JR StoreSample ;
697 0148 86 INCS YZ ;
698 0149 13 JR StoreSample ;
699 014A 5A INCS L ;
700 014B FE 8C BITR IRQT0 ; Clear Timer/Counter Request Flag
701
702 014D StoreSample
703 014D 2B PUSH HL ;
704 014E 83 85 LD HL,#HaveData ;
705
706 0150 F4 35 LDB C,@H+PermitUpdate
707 0152 D7 BTST C ; Chk Permit to update sample or not?
708 0153 12 JR StorePermit ;
709 0154 91 72 JPS INT0_Int1 ;
710 0156 StorePermit
711 0156 F4 25 LDB C,@H+UpdateSample0
712 0158 D6 CCF ;
713 0159 FC 25 LDB @H+UpdateSample0,C
714 015B D7 BTST C ; Chk where Sample to store?
715 015C 1B JR StoreSample0 ;
716
717 015D StoreSample1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -