⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.asm

📁 给香港公司做的出口欧洲的电子称项目全部源代码 CPU:KS57C2308 RANGE:(0 -150KG)/d = 0.1kg
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;**************************************;
;IF AGE & HEIGHT OUT OF RANGE,DISPLAY "ERR1" THEN INITIAL USER INFO.
CHK_USER_INFO:                         ;
        LD       EA,AGE                ; AGE > 10 ?
        LD       WX,#10                ; |
        SBS      EA,WX                 ; |
        JPS      CHK_UI_1              ; |
        JPS      CHK_UI_3              ; NO.
CHK_UI_1:                              ; |
        LD       EA,AGE                ; YES. AGE < 101 ?
        LD       WX,#101               ;      |
        SBS      EA,WX                 ;      |
        JPS      CHK_UI_3              ;      NO.
        LD       EA,HEIGHT             ;      YES. HEIGHT >101 ?
        LD       WX,#100               ;          |
        SBS      EA,WX                 ;          |
        JPS      CHK_UI_2              ;          |
        JPS      CHK_UI_3              ;          NO.
CHK_UI_2:                              ;          |
        LD       EA,HEIGHT             ;          YES. HEIGHT < 221 ?
        LD       WX,#221               ;                |
        SBS      EA,WX                 ;                |
        JPS      CHK_UI_3              ;                NO.
        RET                            ;                YES.
CHK_UI_3:                              ;
        BITS     SEX                   ; LOAD DEFAULT VALUE TO THAT USER ......
        LD       EA,#HEIGHT_CON        ;
        LD       HEIGHT,EA             ;
        LD       EA,#AGE_CON           ;
        LD       AGE,EA                ;
        BITS     WRITE_EEP_EN          ;
        CALL     RW_USER_INFO          ;
        JPS      DISP_ERR1             ;
;**************************************;

;**************************************;
DLY5S_OFF_PWR:                         ;
        LD       EA,#0FFH              ;
        CALL     DELAY_3MS             ;
        LD       EA,#0FFH              ;
        CALL     DELAY_3MS             ;
TURN_OFF_PWR:                          ;
        JPS      SLEEP                 ;
;**************************************;

;***************************************************************************;
;                              SLEEP MODE                                   ;
;***************************************************************************;

;**************************************;
SLEEP:                                 ;
        LD       A,#SCALE_MODE_CON     ;
        LD       RUN_MODE_REG,A        ; RESET RUN MODE: SCALE MODE
;----------------------                ;
;SET LCD REGISTER:                     ;
        BITR     EMB                   ; <<<<<--------------
        LD       EA,#00H               ;
        LD       SP,EA                 ; RESET STACK POINTER
        LD       LCON,A                ; TURN OFF VLCD
        LD       WMOD,EA               ; DISABLE WATCH TIMER
        LD       LMOD,EA               ; TURN OFF DUTY AND BIAS
        BITS     P2.0                  ;
        LD       A,#1101B              ;
        LD       P3,A                  ; SET P3 PORT TO HIGHT LEVEL
        LD       A,#1111B              ;
        LD       P6,A                  ; SET P6 PORT TO HIGHT LEVEL
        LD       A,#1100B              ; P5.3 = 1  P5.2 = 1
        LD       P5,A                  ; 
        LD       A,#0                  ;  3    2     1     0
        LD       INTA,A                ; IE4  IRQ4  IEB   IRQB
        LD       INTB,A                ;  0    0    IEW   IRQW
        LD       INTC,A                ;  0    0    IET0  IRQT0
        LD       INTD,A                ; IE1  IRQ1  IE0   IRQ0
        LD       INTE,A                ; IE1  IRQ1  IE0   IRQ0
        BITR     IRQ2                  ;
        BITS     IE2                   ;
        STOP                           ; STOP !!! STOP !!! STOP !!! STOP !!!
        NOP                            ;
        NOP                            ;
        NOP                            ;
        NOP                            ;
        BITR     IE2                   ;
        DI                             ;
        LD       A,P7                  ; READ KB PORT
        CPSE     A,#1111B              ; SOME KEY PRESSED ?
        JP       SL_2                  ; YES.
        LD       EA,#00H               ; NO. TAPE ON PWR
        LD       SP,EA                 ; RESET STACK POINT
        LD       A,#0DH                ;
        LD       BMOD,A                ;
        LD       EA,#00H               ;
        LD       WDMOD,EA              ; ENABLE WATCHDOG TIMER
        EI                             ;
        JP       $                     ; WAIT FOR RESET ......
;--------------------------            ;
; SET/USER KEY TO WAKE UP SYSTEM       ;
SL_2:   CALL     READ_KB               ;
        LD       KB_BUF,EA             ; SAVE KEY VALUE TO KB_BUF.
        CPSE     E,#00                 ; E = 0 ?
        JPS      SL_21                 ; NO.
        JPS      SLEEP                 ; YES. NO KEY PRESSED.
SL_21:  LD       WX,#SET_KEY_CON       ;
        CPSE     EA,WX                 ; "SET" KEY PRESSED
        JPS      SL_22                 ;
        JPS      SL_23                 ;
SL_22:  LD       WX,#USER_KEY_CON      ;
        CPSE     EA,WX                 ; "USER" KEY PRESSED
        JPS      SLEEP                 ;
SL_23:  BITS     KEYSCAN_EN            ;
        BITS     KEY_PRESSED           ;
        LD       KEY_VALUE,EA          ;
        LD       A,#03H                ;
        LD       KB_STATE,A            ;
        BITR     VCC_CONTROL           ; ENABLE VCC1
;-----------------------               ;
;RESET LCD REGISTER:                   ;
        BITS     IEW                   ; FOR LCD DISPLAY
        LD       EA,#00000100B         ;
        LD       WMOD,EA               ; ENABLE WATCH TIMER, SELECT Fxx/128
        LD       A,#1                  ;
        LD       LCON,A                ; SET LCD TO NORMAL DISPLAY MODE
        LD       EA,#00011011B         ; SET LMOD  (1/3 DUTY, 1/2 BIAS )
        LD       LMOD,EA               ; 1100 1010
;-------------------------             ;
;SET INTERRUPT:                        ;
        BITS     IET0                  ; SYSTEM CLICK
        BITS     IE0                   ; EXTERNAL INT0
        BITS     IEB                   ; BASIC COUNTER
        CALL     GET_BENCHMARK         ;
        EI                             ;
        BITS     EMB                   ; <<<<<<---------
        CALL     SOFT_INIT_1           ;
        JP       MAIN                  ;
;**************************************;

;***************************************************************************;
;                              CALCULATE FAT_RATE                           ;
;***************************************************************************;
;FUNCTION:
;CALCULATE FAT_RATE,THE ROUTINE INCLUDE THREE PARTS: PART1,PART2 AND PART3.
;CONSTANT DEFINE
;------------------------------------------------------------\
FAT_A_CONH:     EQU        024H        ;                     |
FAT_A_CONM:     EQU        09FH        ;                     |
FAT_A_CONL:     EQU        00H         ; FAT_C_CON=27AC40H   | ==> 249F00H
;--------------------                  ;                     |
FAT_B_CON:      EQU        0F0H        ; FAT_B_CON = 0E4H    | ===>0F0H
;--------------------                  ;                     |
FAT_C_CONH:     EQU        01DH        ; FAT_C_CON = 1D10H   | ===>1DB0
FAT_C_CONL:     EQU        0B0H        ;                     |
;--------------------                  ;                     |
FAT_D_CONH:     EQU        011H        ; FAT_D_CON = 1108H   |
FAT_D_CONL:     EQU        008H        ;                     |
;--------------------                  ;                     |
FAT_E_CONH:     EQU         14H        ; FAT_E_CON =124F80H  | ==> 142440
FAT_E_CONM:     EQU         24H        ;                     |
FAT_E_CONL:     EQU         40H        ;                     |
;-------------------                   ;                     |
FAT_F_CONH:     EQU        076H        ; FAT_F_CON = 76D4H   |
FAT_F_CONL:     EQU        0D4H        ;                     |
;-------------------                   ;                     |
FAT_G_CONH:     EQU        04EH        ; FAT_G_CON = 4E20H   |
FAT_G_CONL:     EQU        020H        ;                     |
;--------------------------------------|---------------------/
; LMB<=[(A+B+C)-(D+E+F)]/20000 (0.1KG) ;
; A = k*13.0                           ;12  ( k = 200000)
; B = k*0.00114* HEIGHT * HEIGHT       ;0.0012
; C = k*0.03720 * WEIGHT               ;0.038
; D = k*0.218 * R                      ;
; E = k*6.00 * SEX                     ;6.6
; F = k*0.1521 * AGE                   ;
; FAT RATE = 1000 - LMB*1000/WEIGHT    ;
;--------------------------------------;
; INPUT:                               ;
;      [AGE]                           ;
;      [SEX]                           ;
;      [WEIGHT]                        ;
;      [HEIGHT]                        ;
;      [BODY_RES]                      ;
;R: ACC_BUF,BCC_BUF,CCC_BUF,SUM1,SUM2  ;
;                                      ;
; OUTPUT: FAT_RAT (BCD)                ;
;--------------------------------------;
;PART1:                                ;
; SUM1 <= A + B + C                    ;
; INPUT: A,B,C                         ;
; OUTPUT: SUM1                         ;
CALCULATE_FAT:                         ;
PART1:  SMB      1                     ;
        LD       EA,#FAT_A_CONL        ;
        LD       SUM1+0,EA             ;
        LD       EA,#FAT_A_CONM        ;
        LD       SUM1+2,EA             ;
        LD       EA,#FAT_A_CONH        ;
        LD       SUM1+4,EA             ;
        LD       EA,#00H               ;
        LD       SUM1+6,EA             ; SUM1 <= #FAT_A_CON
        SMB      0                     ;
;------------------------              ;
        LD       EA,HEIGHT             ;
        LD       ACC_BUF+0,EA          ;  ACC_BUF <= HEIGHT
        LD       CCC_BUF+0,EA          ;  CCC_BUF <= HEIGHT
        LD       EA,#00                ;
        LD       ACC_BUF+2,EA          ;
        LD       CCC_BUF+2,EA          ;
        CALL     CW_MUL                ;
        LD2B     ACC_BUF,BCC_BUF       ;     ACC_BUF <= BCC_BUF <= HEIGHT * HEIGHT
        LD       EA,#FAT_B_CON         ;
        LD       CCC_BUF+0,EA          ;
        LD       EA,#00                ;
        LD       CCC_BUF+2,EA          ;     CCC_BUF <= #FAT_B_CON
        CALL     CW_MUL                ; BCC_BUF <= ACC_BUF * CCC_BUF
        LD       HL,#(SUM1+0)          ;
        CALL     SUM_BCC               ; SUM1 <= #FAT_A_CON + HT* HT *FAT_B_CON
;------------------------              ;
        LD2B     ACC_BUF,WEIGHT        ;      ACC_BUF <= WEIGHT
        LD       EA,#FAT_C_CONL        ;
        LD       CCC_BUF+0,EA          ;
        LD       EA,#FAT_C_CONH        ;
        LD       CCC_BUF+2,EA          ;     CCC_BUF <= #FAT_C_CON
        CALL     CW_MUL                ; BCC_BUF <= WEIGHT * FAT_C_CON
        LD       HL,#(SUM1+0)          ;
        CALL     SUM_BCC               ; SUM1 <= SUM1 + WEIGHT* FAT_C_CON
;-----------------------               ;
;SUM2 <= D+E+F                         ;
;INPUT: D,E,F                          ;
;OUTPUT:SUM2                           ;
PART2:  LD       HL,#(SUM2+0)          ;
        CALL     CLR_SUM               ; CLR SUM2
        LD       EA,#FAT_D_CONL        ;            ACC_BUF <= FAT_D_CON
        LD       ACC_BUF+0,EA          ;
        LD       EA,#FAT_D_CONH        ;
        LD       ACC_BUF+2,EA          ;
;-------------------                   ;
        SMB      1                     ;
        LD       EA,BODY_RES+0         ;
        SMB      0                     ;
        LD       CCC_BUF+0,EA          ;
;-------------------                   ;
        SMB      1                     ;
        LD       EA,BODY_RES+2         ;
        SMB      0                     ;
        LD       CCC_BUF+2,EA          ; CCC_BUF <= BODY_RES
;-------------------                   ;
        CALL     CW_MUL                ; BCC_BUF <= BODY_RES * FAT_D_CON
        LD       HL,#(SUM2+0)          ;
        CALL     SUM_BCC               ; SUM2 <= SUM2 + BODY_RES * FAT_D_CON
;-------------------------             ;
;CHECK SEX= FEMALE OR MALE             ;
        BTSF     SEX                   ; SEX IS FEMALE ?
        JPS      PART2_1               ; NO.
        LD       EA,#FAT_E_CONL        ; YES. THEN:
        LD       BCC_BUF+0,EA          ;        BCC_BUF <= FAT_E_CONL
        LD       EA,#FAT_E_CONM        ;
        LD       BCC_BUF+2,EA          ;
        LD       EA,#FAT_E_CONH        ;
        LD       BCC_BUF+4,EA          ;
        LD       HL,#(SUM2+0)          ;
        CALL     SUM_BCC               ; SUM2 <= SUM2 + FAT_E_CONL
;-----------------------               ;
PART2_1:LD       EA,#FAT_F_CONL        ;
        LD       ACC_BUF+0,EA          ;
        LD       EA,#FAT_F_CONH        ;
        LD       ACC_BUF+2,EA          ; ACC_BUF <= FAT_F_CON
        LD       EA,AGE+0              ;
        LD       CCC_BUF+0,EA          ;
        LD       EA,#00H               ; CCC_BUF <= AGE
        LD       CCC_BUF+2,EA          ;
        CALL     CW_MUL                ; BCC_BUF<= ACC_BUF * CCC_BUF
        LD       HL,#(SUM2+0)          ;
        CALL     SUM_BCC               ; SUM2 <= SUM2 + BCC_BUF
;-----------------------               ;
;PART3:                                ;
; INPUT: SUM1,SUM2                     ;
; OUTPUT:FAT_RATE                      ;
PART3:  LD       HL,#(SUM2+7)          ; CHECK IF SUM1 < SUM2 ,DISPLAY "ERR"  ;
        LD       WX,#(SUM1+7)          ;
        LD       Z,#(16-8)             ;
PART3_1:SMB      1                     ;
        PUSH     HL                    ;
        LD       EA,WX                 ;
        LD       HL,EA                 ;
        LD       A,@HL                 ;
        POP      HL                    ;
        CPSE     A,@HL                 ; [WX] = [HL] ?
        JPS      PART3_11              ; NO.
        DECS     HL                    ; YES.   HL + +

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -