📄 lib.asm
字号:
LD @HL,A ;
DECS HL ;
DECS Y ;
JPS DIVTWO_1 ;
RET ;
;**************************************;
;**************************************;
;4NIBS COMPARE WITH CONSTANT ;
; (HL) >= #CON: RET ;
; (HL) < #CON: SRET ;
; LD HL,#(ABS_ERR+2) ;
; LD WX,#CON_L ;
; LD YZ,#CON_H ;
COMP_CON: ;
LD EA,@HL ; (HL) > #CON ?
CPSE EA,YZ ;
JPS COMP_CON_2 ;
COMP_CON_1: ;
DECS HL ;
DECS HL ;
LD EA,@HL ;
SBS EA,WX ;
RET ;
SRET ;
COMP_CON_2: ;
SBS EA,YZ ;
RET ;
SRET ;
;**************************************;
;***************************************************************************;
; RW_USER_INFO ;
;***************************************************************************;
;READ OR WRITE USER INFO TO EEP ;
;INPUT: USER_NUM, WRITE_EEP_EN ;
; WRITE_EEP_EN = 0 , READ EEP ;
; WRITE_EEP_EN = 1 , WRITE EEP ;
;----------------------------- ;
RW_USER_INFO: ;
LD A,USER_NUM ;
DECS A ;
LD E,#0 ;
ADS EA,EA ; 2A
ADS EA,EA ; 4A
ADS EA,EA ; 8A
RCF ;
LD WX,#10H ;
ADC EA,WX ; EA <= EA + 10H
;----------------------------- ;
LD EEP_RAM_ADDR,EA ; EEP_RAM_ADDR <= EA
LD A,#1 ;
LD EEP_NUM,A ; BYTE NUM: 2
LD EA,#BUFFER_TRX ;
LD CPU_RAM_ADDR,EA ;
;----------------------------- ;
BTST WRITE_EEP_EN ; WRITE TO 24C01 ?
JPS RUI_2 ; NO.
BTSF KG_FLAG ; YES. & UNIT IS KG ?
JPS RUI_1 ; YES.
CALL INCH_TO_CM ; NO. INCH CONVERT TO CM
RUI_1: BITS (AGE+1).3 ;
BTST SEX ; (AGE+1).3 <= SEX FOR SAVE TO EEP
BITR (AGE+1).3 ;
CALL WRITE_EEP ;
BITR (AGE+1).3 ; RESTOR AGE
RET ;
RUI_2: CALL READ_EEP ;
BITS SEX ; SEX <= (AGE+1).3
BTST (AGE+1).3 ;
BITR SEX ;
BITR (AGE+1).3 ; RESTORE AGE
CALL CHK_USER_INFO ; IF AGE & HEIGHT OUT OF RANGE,DISPLAY "ERR1"
BTSF KG_FLAG ; UNIT IS KG ?
RET ; YES. EXIT
JPS CM_TO_INCH ; NO. CM CONVERT TO INCH
;**************************************;
;***************************************************************************;
; INITIAL USER INFO ;
;***************************************************************************;
;CONSTANT DEFINE ;
HEIGHT_CON: EQU 175 ;
AGE_CON: EQU 30 ;
;--------------------------- ;
INIT_USER_INFO: ;
BITS SEX ;
LD EA,#HEIGHT_CON ;
LD HEIGHT,EA ;
LD EA,#AGE_CON ;
LD AGE,EA ;
LD A,#01 ;
LD USER_NUM,A ;
BITS WRITE_EEP_EN ;
IUI_1: CALL RW_USER_INFO ;
INCS USER_NUM ;
LD A,USER_NUM ;
CPSE A,#USER_NUM_CON ;
JPS IUI_1 ;
RET ;
;**************************************;
;***************************************************************************;
; ZERO_TRACE ;
;***************************************************************************;
ZERO_TRACE: ;
LD HL,#(WT_BCD+2) ;
;--------------------- ;
;UNIT IS KG ;
BTST KG_FLAG ;
JPS ZT_1 ;
LD WX,#14H ;
LD YZ,#00H ;
CALL COMP_CON ;
RET ;
JPS ZT_12 ;
;--------------------- ;
;UNIT IS LB ;
ZT_1: BTST LB_ST_FLAG ;
JPS ZT_11 ;
LD WX,#30H ;
LD YZ,#00H ;
CALL COMP_CON ;
RET ;
JPS ZT_12 ;
;--------------------- ;
;UNIT IS STONE ;
ZT_11: LD WX,#03H ; WEIGHT > 1.4KG/3LB/0:03 LB ?
LD YZ,#00H ;
CALL COMP_CON ;
RET ; YES.
;--------------------------------------;
ZT_12: LD EA,#00H ;
LD WT_BCD+0,EA ;
LD WT_BCD+2,EA ;
LD FRACTION,EA ;
;----------------------- ;
;START TO ZERO_TRACE,...... ;
ZT_2: BTST STATIC_FLAG ; STATIC_FLAG = 1 ?
JPS ZT_4 ; NO. EXIT
LD HL,#ABS_ERR ; YES.
LD YZ,#MID_POINT ;
LD WX,#CNT0 ;
CALL SUB2BB ; ABS_ERR <= MID_POINT - CNT0
JPS ZT_3 ; MID_POINT >= CNT0
LD HL,#ABS_ERR ; MID_POINT < CNT0
CALL ABS2BB ;
ZT_3: RCF ;
LD E,#0 ;
LD A,CNTS_PER_G ;
LD WX,EA ;
ADC WX,EA ; WX <= 3d
LD YZ,#00H ;
LD HL,#(ABS_ERR+2) ; ABS_ERR >= 3d ?
CALL COMP_CON ;
JPS ZT_4 ; YES. EXIT
LD E,#0H ; NO.
LD A,CNTS_PER_G ;
LD WX,EA ; WX <= 1d
LD YZ,#00H ;
LD HL,#(ABS_ERR+2) ; ABS_ERR >= 1d ?
CALL COMP_CON ;
JPS ZT_31 ; YES.
JPS ZT_32 ; NO.
ZT_31: INCS ZERO_TRACE_CNT ; YES.ZERO_TRACE_CNT ++
RET ;
ZT_32: LD2B CNT0,MID_POINT ; NO.
ZT_4: LD A,#(16-2) ;
LD ZERO_TRACE_CNT,A ;
RET ;
;**************************************;
;***************************************************************************;
; FOOT-INCH <=> CM ;
;***************************************************************************;
;*************************************;
; CM_TO_INCH: ;
; FUNCTION: UNIT CONVERT ;
; INPUT: HEIGHT ;
; OUTPUT: HT_BUF ;
; FOOT = [HT*246/7499] ;( 7499 = 1D4BH )
; INCH = [RM/625] ;( 618 = 26AH)
; [HT_BUF+1] <= FOOT ;
; [HT_BUF+0] <= INCH ;
;*************************************;
CM_TO_INCH: ;
LD EA,HEIGHT ;
LD ACC_BUF+0,EA ;
LD EA,#00 ;
LD ACC_BUF+2,EA ;
LD CCC_BUF+2,EA ;
LD EA,#246 ;
LD CCC_BUF+0,EA ;
CALL CW_MUL ;
LD EA,#4BH ;
LD ACC_BUF+0,EA ;
LD EA,#1DH ;
LD ACC_BUF+2,EA ;
CALL CW_DIV ;
LD A,CCC_BUF+0 ;
LD HT_BUF+1,A ; GET FOOT
LD EA,#00H ;
LD BCC_BUF+4,EA ;
LD BCC_BUF+6,EA ;
LD2B BCC_BUF+0,ABS_ERR+0 ;
LD EA,#67H ;
LD ACC_BUF+0,EA ;
LD EA,#02H ; 267H
LD ACC_BUF+2,EA ;
CALL CW_DIV ;
;---------------------- ;
;CHK ABS_ERR >= 267/2 ? IF YES. BIT_TEMP = 1, ELSE: BIT_TEMP= 0
BITR BIT_TEMP ;
LD HL,#(ABS_ERR+2) ; ABS_ERR >= #133H ?
LD WX,#33H ;
LD YZ,#01H ;
CALL COMP_CON ;
BITS BIT_TEMP ; YES.
BTSF BIT_TEMP ; BIT_TEMP = 1 ?
INCS CCC_BUF ;
NOP ;
;---------------------- ;
LD A,CCC_BUF+0 ;
LD HT_BUF+0,A ; GET INCH
CPSE A,#0CH ; A = 0CH ?
JPS CM2INCH_1 ; NO.
LD A,#0 ; YES.
LD HT_BUF+0,A ;
INCS HT_BUF+1 ;
NOP ;
CM2INCH_1: ;
LD EA,HT_BUF ;
SMB 1 ;
LD HT_BUF_BAK,EA ;
SMB 0 ;
RET ;
;*************************************;
;*************************************;
; INCH_TO_CM: ;
; FUNCTION: UNIT CONVERT ;
; INPUT: HT_BUF ;
; OUTPUT: HEIGHT ;
; [HT_BUF+1]: FOOT ;
; [HT_BUF]: INCH ;
; HEIGHT <= CM ;
; CM<=(12*FOOT +INCH)*254/100 ;
;*************************************;
INCH_TO_CM: ;
LD EA,HT_BUF ;
LD WX,EA ;
SMB 1 ;
LD EA,HT_BUF_BAK ;
SMB 0 ;
CPSE EA,WX ; HT_BUF = HT_BUF_BAK ?
JPS INCH2CM_1 ; NO. BEGIN TO CONVERT
RET ; YES. OLD HEIGHT STILL VALID.
INCH2CM_1: ;
LD A,HT_BUF+1 ;
LD E,#0 ;
RCF ;
ADC EA,EA ;
ADC EA,EA ; 4 * HT_BUF
LD WX,EA ;
ADC EA,EA ; 8 * HT_BUF
ADC WX,EA ; WX <= 12 * HT_BUF
LD A,HT_BUF+0 ;
LD E,#0 ;
ADC EA,WX ; EA <= WX + INCH
LD ACC_BUF+0,EA ;
LD EA,#00 ;
LD ACC_BUF+2,EA ;
LD CCC_BUF+2,EA ;
LD EA,#254 ;
LD CCC_BUF+0,EA ;
CALL CW_MUL ;
LD EA,#100 ;
LD ACC_BUF+0,EA ;
LD EA,#00H ;
LD ACC_BUF+2,EA ;
CALL CW_DIV ;
LD EA,CCC_BUF+0 ;
LD HEIGHT,EA ;
RET ;
;*************************************;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -