📄 lib.asm
字号:
DECS WX ; WX + +
INCS Z ; Z - -
JPS PART3_1 ;
JPS PART3_12 ;
PART3_11: ;
SBS A,@HL ; [WX] >= [HL] ? ( SUM1 > SUM2 ?)
JPS PART3_13 ; YES.
PART3_12: ;
JPS DISP_ERR ; NO. DISPLAY ERR
PART3_13: ;
;--------------- ;
SMB 1 ;
LD EA,SUM2+0 ;
SMB 0 ;
LD BCC_BUF+0,EA ;
;---------------- ;
SMB 1 ;
LD EA,SUM2+2 ;
SMB 0 ;
LD BCC_BUF+2,EA ;
;---------------- ;
SMB 1 ;
LD EA,SUM2+4 ;
SMB 0 ;
LD BCC_BUF+4,EA ;
;---------------- ;
SMB 1 ;
LD EA,SUM2+6 ;
SMB 0 ;
LD BCC_BUF+6,EA ; BCC_BUF <= SUM2
;---------------- ;
LD WX,#(SUM1+0) ;
CALL SUM_SUB ; BCC_BUF <= SUM1 - BCC_BUF
LD EA,#FAT_G_CONL ;
LD ACC_BUF+0,EA ;
LD EA,#FAT_G_CONH ; ACC_BUF <= 20000
LD ACC_BUF+2,EA ; CCC_BUF<= (SUM1- SUM2)/20000
CALL CW_DIV ; .... CCC_BUF IS LMB (0.1KG)
LD EA,#0E8H ;
LD ACC_BUF+0,EA ;
LD EA,#03H ;
LD ACC_BUF+2,EA ; ACC_BUF<=1000
CALL CW_MUL ; BCC_BUF <= LMB * 1000
LD2B ACC_BUF,WEIGHT ; ACC_BUF <= WEIGHT
CALL CW_DIV ; CCC<=1000*LMB/WEIGHT
LD HL,#(CCC_BUF+2) ;
LD WX,#0E8H ;
LD YZ,#03H ;
CALL COMP_CON ;
JPS DISP_ERR ;
LD HL,#(CCC_BUF+2) ; <990
LD WX,#0F4H ;
LD YZ,#01H ;
CALL COMP_CON ;
JPS PART3_21 ; > 500
JPS DISP_ERR ;
PART3_21: ;
RCF ;
LD EA,CCC_BUF+0 ;
LD HL,EA ;
LD EA,#0E8H ;
SBC EA,HL ;
LD CCC_BUF+0,EA ;
LD EA,CCC_BUF+2 ;
LD HL,EA ;
LD EA,#03H ;
SBC EA,HL ;
LD CCC_BUF+2,EA ; CCC<=1000 - CCC
;--------------------- ;
CALL HEX_BCD ; BCC_BUF <--- CCC_BUF
LD2B FAT_RATE,BCC_BUF ; FAT_RATE <= BCC_BUF
RET ;
;**************************************;
;**************************************;
;SUM <= SUM + BCC_BUF ;
;INPUT: LD HL,#(SUM+0) ;
SUM_BCC:LD WX,#(BCC_BUF+0) ;
RCF ;
LD Y,#(16-8) ;
SUM_BCC_1: ;
SMB 0 ;
LD A,@WX ;
SMB 1 ;
ADC A,@HL ;
LD @HL,A ;
INCS HL ;
INCS WX ;
INCS Y ;
JPS SUM_BCC_1 ;
SMB 0 ;
RET ;
;**************************************;
;**************************************;
;BCC_BUF <= SUM1 - BCC_BUF ;
;INPUT: LD WX,#(SUM1+0) ;
SUM_SUB:LD HL,#(BCC_BUF+0) ;
RCF ;
LD Y,#(16-8) ;
SUM_SUB_1: ;
PUSH HL ;
LD EA,WX ;
LD HL,EA ;
SMB 1 ;
LD A,@HL ;
SMB 0 ;
POP HL ;
SBC A,@HL ; A <= A - @HL
LD @HL,A ;
INCS HL ;
INCS WX ;
INCS Y ;
JPS SUM_SUB_1 ;
RET ;
;**************************************;
;**************************************;
;FUNCTION: USE TO CLR SUM1 AND SUM2 ;
; INPUT: LD HL,#(SUM+0) ;
CLR_SUM: ;
LD Y,#(16-8) ;
CLR_SUM_1: ;
LD A,#0 ;
SMB 1 ;
LD @HL,A ;
SMB 0 ;
INCS HL ;
INCS Y ;
JPS CLR_SUM_1 ;
RET ;
;**************************************;
;**************************************;
;INPUT L, A ;
;IF A > = L, DISP ERR5. ;
CHK_STATE: ;
; LD L,#DP_STATE_CON ;
; LD A,DP_STATE ;
LD E,#0 ;
LD H,#0 ;
SBS EA,HL ; EA >= HL ?
JP DISP_ERR5 ; YES. STATE OUT OF RANGE
RET ; NO. STATE IN RANGE
;**************************************;
;*******************************************************;
; CALCULATE WATER_RATE ;
;*******************************************************;
; WATER=0.5*HEIGHT-0.36*WEIGHT-6*S+0.001*R-AGE/10
;--------------------------------------------------------
PARA_A_H: EQU 01H ;
PARA_A_L: EQU 0F4H ; A=500
PARA_B_H: EQU 00H ;
PARA_B_L: EQU 24H ; B=36
PARA_C_H: EQU 17H ;
PARA_C_L: EQU 70H ; C=6000
PARA_D_H: EQU 02H ;
PARA_D_L: EQU 58H ; D=600
PARA_E_H: EQU 00H ;
PARA_E_L: EQU 64H ; E=100
PARA_F_H: EQU 00H ;
PARA_F_L: EQU 64H ; F=100
;---------------------------------------;
CAL_WATER_RATE:
SMB 0 ;
LD EA,HEIGHT ;
LD ACC_BUF+0,EA ;
LD EA,#00 ;
LD ACC_BUF+2,EA ;
LD BCC_BUF+0,EA ;
LD BCC_BUF+2,EA ;
LD BCC_BUF+4,EA ;
LD BCC_BUF+6,EA ;
LD EA,#PARA_A_L ;
LD CCC_BUF+0,EA ;
LD EA,#PARA_A_H ;
LD CCC_BUF+2,EA ;
CALL CW_MUL ; TEMP=50*HEIGHT==>BCC
LD EA,BCC_BUF+0 ;
LD ABS_ERR+0,EA ;
LD EA,BCC_BUF+2 ;
LD ABS_ERR+2,EA ;
LD EA,BCC_BUF+4 ;
LD ABS_ERR+4,EA ; BCC==>ABS_ERR
LD EA,#00 ;
LD BCC_BUF+0,EA ;
LD BCC_BUF+2,EA ;
LD BCC_BUF+4,EA ;
LD BCC_BUF+6,EA ;
LD EA,#PARA_B_L ;
LD CCC_BUF+0,EA ;
LD EA,#PARA_B_H ;
LD CCC_BUF+2,EA ;
LD2B ACC_BUF,WEIGHT ; WEIGHT==>ACC_BUF
CALL CW_MUL ; 36*WEIGHT==>BCC_BUF
LD WX,#(ABS_ERR+0) ;
LD HL,#(BCC_BUF+0) ;
RCF ;
LD Z,#05 ;
SUB_W: LD A,@WX ;
SBC A,@HL ;
LD @HL,A ;
INCS WX ;
INCS HL ;
DECS Z ;
JPS SUB_W ; ABS_ERR-BCC_BUF==>BCC_BUF
BTSF SEX ;
JPS ADDRES ; MALE RESULT-0
LD EA,BCC_BUF+0 ;
LD ABS_ERR+0,EA ;
LD EA,BCC_BUF+2 ;
LD ABS_ERR+2,EA ;
LD EA,BCC_BUF+4 ;
LD ABS_ERR+4,EA ; BCC==>ABS_ERR
LD EA,#PARA_C_L ;
LD BCC_BUF+0,EA ;
LD EA,#PARA_C_H ;
LD BCC_BUF+2,EA ; 6000==>BCC_BUF
LD EA,#00 ;
LD BCC_BUF+4,EA ;
LD BCC_BUF+6,EA ;
LD WX,#(ABS_ERR+0) ;
LD HL,#(BCC_BUF+0) ;
RCF ;
LD Z,#04 ;
SUB_S: LD A,@WX ;
SBC A,@HL ;
LD @HL,A ;
INCS WX ;
INCS HL ;
DECS Z ;
JPS SUB_S ; ABS_ERR-BCC_BUF(6000)==>BCC_BUF
NOP
ADDRES: LD EA,#PARA_D_L ;
LD ACC_BUF+0,EA ;
LD EA,#PARA_D_H ;
LD ACC_BUF+2,EA ;
LD WX,#(ACC_BUF+0) ;
LD HL,#(BCC_BUF+0) ;
CALL ADD2B3B ; BCC_BUF+RES(600)==>BCC_BUF
LD EA,BCC_BUF+0 ;
LD ABS_ERR+0,EA ;
LD EA,BCC_BUF+2 ;
LD ABS_ERR+2,EA ;
LD EA,BCC_BUF+4 ;
LD ABS_ERR+4,EA ; BCC_BUF==>ABS_ERR
LD EA,AGE ;
LD CCC_BUF+0,EA ;
LD EA,#00 ; AGE==>CCC_BUF
LD CCC_BUF+2,EA ;
LD EA,#PARA_E_L ;
LD ACC_BUF+0,EA ;
LD EA,#PARA_E_H ;
LD ACC_BUF+2,EA ; 100==>ACC_BUF
CALL CW_MUL ; 100*AGE==>BCC_BUF
LD WX,#(ABS_ERR+0) ; ABS_ERR-BCC_BUF==>BCC_BUF
LD HL,#(BCC_BUF+0) ;
LD Z,#05 ;
RCF ;
SUB_A: LD A,@WX ;
SBC A,@HL ;
LD @HL,A ;
INCS WX ;
INCS HL ;
DECS Z ;
JPS SUB_A ;
LD EA,#PARA_F_L ;
LD ACC_BUF+0,EA ;
LD EA,#PARA_F_H ;
LD ACC_BUF+2,EA ;
CALL CW_DIV ; BCC_BUF/100==>CCC_BUF
CALL HEX_BCD ; CONVERT CCC_BUF TO BCD IN BCC_BUF
LD EA,BCC_BUF+0 ;
SMB 1 ;
LD WATER_RATE+0,EA ;
SMB 0 ;
LD EA,BCC_BUF+2 ;
SMB 1 ;
LD WATER_RATE+2,EA ;
SMB 0 ;
RET ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -