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

📄 lib.asm

📁 给香港公司做的出口欧洲的电子称项目全部源代码 CPU:KS57C2308 RANGE:(0 -150KG)/d = 0.1kg
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;**************************************;
;PRJ : FAT_SCALE                       ;
;MODULE:   LIB                         ;
;***************************************************************************;
;                                 CW_MUL                                    ;
;***************************************************************************;
;[TWO BYTES]*[TWO BYTES]=[FOUR BYTES]  ;
;INPUT: CCC_BUF:  MULTIPLIER           ;
;       ACC_BUF:  MULTIPLICAND         ;
;OUTPUT:BCC_BUF:  PRODUCT              ;
;**************************************;
;[BCC_BUF] <= [ACC_BUF] * [CCC_BUF]    ;
;**************************************;
CW_MUL: CALL     CLR_BCC_BUF           ; CLEAR PRODUCT
        LD       W,#0                  ; W AS COUNT
        RCF                            ;
MULTI_L1:                              ;
        LD       HL,#(BCC_BUF+0)       ; ROTATE LEFT PRODUCT
        LD       Y,#03H                ;
        CALL     ROTATE_LEFT           ;
        RCF                            ; ROTATE LEFT MULTIPLIER
        LD       HL,#(CCC_BUF+0)       ;
        LD       Y,#01H                ;
        CALL     ROTATE_LEFT           ;
        BTST     C                     ;
        JPS      MULTI_L2              ; C = 0
        RCF                            ; PRODUCT <= MULTIPLICAND + MULTIPLIER
        LD       EA,ACC_BUF+0          ; BCC_BUF <= ACC_BUF + CCC_BUF
        LD       HL,EA                 ;
        LD       EA,BCC_BUF+0          ;
        ADC      EA,HL                 ;
        LD       BCC_BUF+0,EA          ;
        LD       EA,ACC_BUF+2          ;
        LD       HL,EA                 ;
        LD       EA,BCC_BUF+2          ;
        ADC      EA,HL                 ;
        LD       BCC_BUF+2,EA          ;
;----------------------------          ;
        LD       HL,#00                ;
        LD       EA,BCC_BUF+4          ;
        ADC      EA,HL                 ;
        LD       BCC_BUF+4,EA          ;
        LD       EA,BCC_BUF+6          ;
        ADC      EA,HL                 ;
        LD       BCC_BUF+6,EA          ;
MULTI_L2:                              ;
        INCS     W                     ;
        JPS      MULTI_L1              ;
        RET                            ;
;**************************************;

;***************************************************************************;
;                                CW_DIV                                     ;
;***************************************************************************;
;CW_DIV:                               ;
;INPUT : [ACC_BUF]: 4 NIBS,DIVISOR     ;
;        [BCC_BUF]: 8 NIBS,DIVIDEND    ;
;        [ABS_ERR]: 6 NIBS,REMAINDER   ;
;OUTPUT: [CCC_BUF]: 4 NIBS,RESULT      ;
;**************************************;
;[CCC_BUF] <= [BCC_BUF]/[ACC_BUF]      ;
;**************************************;
CW_DIV: LD       EA,#00H               ;
        LD       ABS_ERR+0,EA          ;
        LD       ABS_ERR+2,EA          ;
        LD       ABS_ERR+4,EA          ; CLEAR REMAINDER
        LD       CCC_BUF+0,EA          ;
        LD       CCC_BUF+2,EA          ; CLEAR RESULT
        LD       WX,#31                ;
DIV_L1: RCF                            ; DIVIDEND ROTATE LEFT ONE BIT
        LD       HL,#(BCC_BUF+0)       ;
        LD       Y,#03H                ;
        CALL     ROTATE_LEFT           ;
        LD       HL,#(ABS_ERR+0)       ;
        LD       Y,#02                 ;
        CALL     ROTATE_LEFT           ; REMAINDER ROTATE LEFT ONE BIT
; COMPARE REMAINDER WITH DIVISOR       ;
        LD       A,ABS_ERR+4           ;
        CPSE     A,#00H                ;
        JPS      DIV_L3                ;
        LD       EA,ACC_BUF+2          ; REMAINDER_H >= DIVISOR_H ?
        LD       HL,EA                 ;
        LD       EA,ABS_ERR+2          ;
        SBS      EA,HL                 ;
        JPS      DIV_L2                ; YES. GO ON COMPARE
        JPS      DIV_L4                ; NO.  REMAINDER < DIVISOR
DIV_L2: LD       EA,ABS_ERR+2          ;
        CPSE     EA,HL                 ; REMAINDER_H = DIVISOR_H ?
        JPS      DIV_L3                ; NO. ABS_ERR (REMAINDER) > ACC_BUF(DIVISOR)
; REMAINDER_H = DIVISOR_H
        LD       EA,ACC_BUF+0          ; YES. GO ON COMPARE LOW ORDER BYTE ....
        LD       HL,EA                 ;
        LD       EA,ABS_ERR+0          ;
        SBS      EA,HL                 ; REMAINDER_L > = DIVISOR_L ?
        JPS      DIV_L3                ; YES.
        JPS      DIV_L4                ; NO.  REMAINDER < DIVISOR
;-----------------------------         ;
DIV_L3: LD       EA,ACC_BUF+0          ; REMAINDER <= REMAINDER - DIVISOR
        LD       HL,EA                 ;
        LD       EA,ABS_ERR+0          ;
        SBC      EA,HL                 ;
        LD       ABS_ERR+0,EA          ;
        LD       EA,ACC_BUF+2          ;
        LD       HL,EA                 ;
        LD       EA,ABS_ERR+2          ;
        SBC      EA,HL                 ;
        LD       ABS_ERR+2,EA          ;
        LD       YZ,#00                ;
        LD       EA,ABS_ERR+4          ;
        SBC      EA,YZ                 ;
        LD       ABS_ERR+4,EA          ;
        SCF                            ; C = 1
;--------------------------            ;
DIV_L4: LD       HL,#(CCC_BUF+0)       ; RESULT ROTATE LEFT ONE BIT
        LD       Y,#01H                ;
        CALL     ROTATE_LEFT           ;
        DECS     WX                    ;
        JPS      DIV_L1                ;
        RET                            ;
;**************************************;

;***************************************************************************;
;                                  HEX_BCD                                  ;
;***************************************************************************;
; HEX_BCD                              ;
; FUNCTION: HEX DATA CONVERT TO BCD DATA
; INPUT: [CCC_BUF] (4 NIBS)            ;
; OUTPUT:[BCC_BUF] (6 NIBS)            ;
;**************************************;
HEX_BCD:CALL     CLR_BCC_BUF           ;
        LD       Z,#0                  ; Z AS COUNT
HEX_BCD_1:                             ;
        RCF                            ; C = 0
        LD       HL,#(CCC_BUF+0)       ; ROTATE LEFT ACC_BUF
        LD       Y,#01H                ;
        CALL     ROTATE_LEFT           ;
        LD       HL,#(BCC_BUF+0)       ; ROTATE LEFT BCC_BUF
        LD       Y,#02H                ;
        CALL     ROTATE_LEFT           ;
        INCS     Z                     ; Z ++
        JPS      HEX_BCD_2             ;
        RET                            ;
HEX_BCD_2:                             ;
        LD       Y,#05H                ;
        LD       HL,#(BCC_BUF+0)       ;
HEX_BCD_3:                             ;
        CALL     ADJ_BCD               ;
        INCS     HL                    ;
        DECS     Y                     ;
        JPS      HEX_BCD_3             ;
        JPS      HEX_BCD_1             ;
;**************************************;

;**************************************;
ADJ_BCD:LD       A,@HL                 ;
        ADS      A,#03H                ;
        NOP                            ;
        ADS      A,#08H                ; (HL) +3 > 7 ?
        RET                            ; NO. EXIT
        LD       A,@HL                 ; YES.
        ADS      A,#03H                ;
        NOP                            ;
        LD       @HL,A                 ;
        RET                            ;
;**************************************;

;**************************************;
;SHIFT 4 NIBBLS LEFT ONS BIT           ;
;        LD      HL,#AAA               ;
;        LD      Y,#03H                ;
ROTATE_LEFT:                           ;
        LD       EA,@HL                ;
        ADC      EA,EA                 ;
        LD       @HL,EA                ;
        INCS     HL                    ;
        INCS     HL                    ;
        DECS     Y                     ;
        JPS      ROTATE_LEFT           ;
        RET                            ;
;**************************************;

;**************************************;
; AAA<==AAA+BBB                        ;
; AAA: 6 NIBS,  BBB; 4 NIBS            ;
ADD2B3B:                               ;
;        LD      WX,#BBB               ;
;        LD      HL,#AAA               ;
;--------------------------            ;
        LD       Y,#03                 ;
        RCF                            ;
ADD2B3B_1:                             ;
        PUSH     HL                    ;
        LD       EA,WX                 ;
        LD       HL,EA                 ;
        LD       A,@HL                 ;
        POP      HL                    ;
        ADC      A,@HL                 ;
        LD       @HL,A                 ;
        INCS     WX                    ;
        INCS     HL                    ;
        DECS     Y                     ;
        JPS      ADD2B3B_1             ;
;--------------------------            ;
        LD       A,#0                  ;
        ADC      A,@HL                 ;
        LD       @HL,A                 ;
        INCS     HL                    ;
        LD       A,#0                  ;
        ADC      A,@HL                 ;
        LD       @HL,A                 ;
        RET                            ;
;**************************************;

;**************************************;
;       LD       HL,#ABS_ERR           ;
ABS2BB: LD       Y,#03H                ;
ABS2BB_1:                              ;
        LD       A,@HL                 ;
        COM      A                     ;
        LD       @HL,A                 ;
        INCS     HL                    ;
        DECS     Y                     ;
        JPS      ABS2BB_1              ;
        LD       EA,#(256-04)          ;
        ADS      HL,EA                 ;
        NOP                            ;
        RCF                            ;
        LD       EA,@HL                ;
        LD       WX,#01                ;
        ADC      EA,WX                 ;
        LD       @HL,EA                ;
        INCS     HL                    ;
        INCS     HL                    ;
        LD       WX,#00                ;
        LD       EA,@HL                ;
        ADC      EA,WX                 ;
        LD       @HL,EA                ;
        RET                            ;
;**************************************;

;**************************************;
;FUNCTION:  [HL] <= [YZ] - [WX]        ;
;INPUT: [AAA],[BBB]                    ;
;OUTPUT: C,[CCC]                       ;
;     CCC<= BBB - AAA                  ;
;       LD       YZ,#BBB               ; BBB >= AAA:  RET
;       LD       WX,#AAA               ; BBB < AAA:   SRET
;       LD       HL,#CCC               ;
;      CCC<= BBB - AAA                 ;
SUB2BB: LD       E,#03                 ; CCC <= AAA
SUB2BB_1:                              ;
        LD       A,@WX                 ;
        LD       @HL,A                 ;
        INCS     WX                    ;
        INCS     HL                    ;
        DECS     E                     ;
        JPS      SUB2BB_1              ;
        LD       EA,#(256-04)          ;
        ADS      HL,EA                 ; HL <= HL -4 (RESEST HL)
        NOP                            ;
;-------------------------             ;
        RCF                            ; CCC<= BBB - CCC
        LD       EA,YZ                 ;
        LD       WX,EA                 ;
        LD       Z,#03                 ;
SUB2BB_2:                              ;
        LD       A,@WX                 ;
        SBC      A,@HL                 ;
        LD       @HL,A                 ;
        INCS     WX                    ;
        INCS     HL                    ;
        DECS     Z                     ;
        JPS      SUB2BB_2              ;
        BTST     C                     ; C = 1 ?
        RET                            ; NO.  (WX) >= (HL)
        SRET                           ; YES.
;**************************************;

;**************************************;
;DIV/2                                 ;
;INPUT : (HL)                          ;
;4 NIBBS                               ;
;        LD       HL,#(AAA+3)          ;
DIVTWO:  RCF                           ;
         LD       Y,#03H               ;
DIVTWO_1:LD       A,@HL                ;
         RRC      A                    ;

⌨️ 快捷键说明

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