📄 lib.asm
字号:
;**************************************;
; LOOP_FLASH: ;
; FUNCTION: CONTROL LCD FLASHING ... ;
; INPUT: FLASH_CNT ;
LOOP_FLASH: ;
SMB 1 ;
BITR KG_ICON ;
BITR ST_ICON ;
BITR LB_ICON ;
BITR KG_POINT ;
BITR ST_POINT ;
SMB 0 ;
LD A,FLASH_CNT ;
CPSE A,#00H ;
JPS LOOP_FLASH_1 ;
INCS FLASH_CNT ; FLASH_CNT ++
LD EA,#DN_LINE ;
JPS TIP_DISP ;
LOOP_FLASH_1: ;
CPSE A,#01H ;
JPS LOOP_FLASH_2 ;
INCS FLASH_CNT ; NO. FLASH_CNT + +
LD EA,#MD_LINE ;
JPS TIP_DISP ;
LOOP_FLASH_2: ;
CPSE A,#02H ;
RET ;
LD A,#00H ; FLASH_CNT - -
LD FLASH_CNT,A ;
LD EA,#UP_LINE ;
JPS TIP_DISP ;
;**************************************;
;**************************************;
CHK_SENSOR: ;
INCS CHK_ADC_CNT+0 ;
RET ;
INCS CHK_ADC_CNT+1 ; IF CHK_ADC_CNT FULL, ADC'S WORK IS ABNORMAL
RET ; THEN SYSTEM DISP "ERR5"
CHK_SENSOR_1: ;
JPS DISP_ERR5 ;
;**************************************;
;**************************************;
CON_BEN_MINH: EQU 07H ;
CON_BEN_MINL: EQU 0D0H ; 7D0H = 400*5
CON_BEN_MAXH: EQU 12H ;
CON_BEN_MAXL: EQU 0C0H ; 12C0 = 400*12
;**************************************;
;FUNCTION: ;
; CHECK CNT10/CNT21 IN (400*5,--- 400*12) ?
;INPUT: ACC_BUF ;
;C = 1: ACC IN RANGE ;
;C = 0: ACC OUT OF RANGE ;
CHK_BENMARK: ;
SCF ; C= 0
LD HL,#(ACC_BUF+2) ;
LD YZ,#CON_BEN_MINH ;
LD WX,#CON_BEN_MINL ;
CALL COMP_CON ;
JPS CHK_BEN_1 ; ACC_BUF > CON_MIN
JPS CHK_BEN_2 ; ACC_BUF < CON_MIN
CHK_BEN_1: ;
SCF ; C= 0
LD HL,#(ACC_BUF+2) ;
LD YZ,#CON_BEN_MAXH ;
LD WX,#CON_BEN_MAXL ;
CALL COMP_CON ;
CHK_BEN_2: ;
RCF ; ACC_BUF > CON_MAX
RET ; ACC_BUF < CON_MAX
;**************************************;
;***************************************************************************;
; DELAY ;
;***************************************************************************;
; DELAY_3MS ;
; INPUT : EA ;
DELAY_3MS: ;
LD YZ,EA ; 2 CYC ;
DLY_1: LD EA,#0FAH ; 2 CYC ;
DLY_2: NOP ; 1 CYC ;
NOP ; 1 CYC ;
NOP ; 1 CYC ;
NOP ; 1 CYC ;
NOP ; 1 CYC ;
NOP ; 1 CYC ;
NOP ; 1 CYC ;
DECS EA ; 2 CYC ; 12*251
JPS DLY_2 ; 3 CYC ;
DECS YZ ; 2CYC ; (2+13*253+2)*0.95 ~= 3.0ms
JPS DLY_1 ; 3CYC ; EACH CYC IS 0.95 us
RET ;
;**************************************;
;**************************************;
CNT10_DEF_H: EQU 0CH ;
CNT10_DEF_L: EQU 80H ; 0C80H = 400 * 8
CNT21_DEF_H: EQU 19H ;
CNT21_DEF_L: EQU 00H ; 1900H = 800 * 8
;**************************************;
;FUNCTION: GET BENCHMARK ;
;OUTPUT: CNT21,CNT10 ;
;R: [EEP_NUM] ;
; [EEP_RAM_ADDR] ;
; [TRX_ADDR_BUF] ;
; [AVERAGE] ;
GET_BENCHMARK: ;
;-------------------------- ;
;UNIT SELECT: ;
BITR EMB ; KG: KG_FLAG = 1
LD A,P4 ; LB: KG_FLAG = 0 & LB_ST_FLAG = 1
AND A,#0011B ; ST: KG_FLAG = 0 & LB_ST_FLAG = 0
CPSE A,#0011B ;
JPS GB_1 ;
BITS KG_FLAG ;
JPS GB_2 ;
GB_1: BITR KG_FLAG ; KG_FLAG = 0.
BITR LB_ST_FLAG ;
CPSE A,#0001B ; IS LB ?
BITS LB_ST_FLAG ; YES.
;---------------------------- ;
;READ JPS& PROCESS IT ;
GB_2: LDB C,JP0_PIN ;
LD EA,#ADC_DLY_CON1 ;
BTST C ;
LD EA,#ADC_DLY_CON2 ;
LD ADC_DLY_BUF,EA ;
BITS EMB ;
;---------------------------- ;
;READ DATA FROM 24C01 ;
LD A,#5 ; READ 24C01
LD EEP_NUM,A ; BYTE NUM: 6
LD EA,#00H ;
LD EEP_RAM_ADDR,EA ; EEP_RAM_ADDR: 00H
LD EA,#LAST_WEIGHT ; BUFFER ADDR: #LAST_WEIGHT
LD CPU_RAM_ADDR,EA ;
CALL READ_EEP ;
;----------------------------- ;
;ANALYSE CNT10, CNT21 : IN RANGE ? ;
LD2B ACC_BUF,CNT10 ;
CALL CHK_BENMARK ;
BTST C ; C = 1 ?
JPS GB_3 ; NO.
LD2B ACC_BUF,CNT21 ; YES. GO ON CHK CNT21
LD HL,#(ACC_BUF+3) ;
CALL DIVTWO ;
CALL CHK_BENMARK ;
BTST C ; C = 1 ?
JPS GB_3 ; NO.
;-------------- ; YES.
;CNTS_PER_G<= CNT10/400 ; 400 = 190H
LD EA,#01 ;
LD ACC_BUF+2,EA ;
LD EA,#90H ;
LD ACC_BUF+0,EA ;
CALL CLR_BCC_BUF ;
LD2B BCC_BUF,CNT10 ;
CALL CW_DIV ;
LD A,CCC_BUF ;
LD CNTS_PER_G,A ;
RET ;
GB_3: LD EA,#CNT10_DEF_H ;
LD CNT10+2,EA ;
LD EA,#CNT10_DEF_L ;
LD CNT10+0,EA ;
LD EA,#CNT21_DEF_H ;
LD CNT21+2,EA ;
LD EA,#CNT21_DEF_L ;
LD CNT21+0,EA ;
LD A,#08H ;
LD CNTS_PER_G,A ;
RET ;
;**************************************;
;**************************************;
CLR_BCC_BUF: ;
LD EA,#00 ;
LD BCC_BUF+0,EA ;
LD BCC_BUF+2,EA ;
LD BCC_BUF+4,EA ;
LD BCC_BUF+6,EA ;
RET ;
;**************************************;
;**************************************;
CHK_OVERLOAD: ;
;IF WEIGHT > OVERLOAD_CON,DISP "ERR" ;
LD HL,#(CCC_BUF+2) ;
LD YZ,#CON_OVERLOAD_H1 ;
LD WX,#CON_OVERLOAD_L1 ;
BTSF KG_FLAG ; UNIT IS KG ?
JPS CHKO_1 ; YES.UNIT IS KG.
LD YZ,#CON_OVERLOAD_H2 ; NO. UNIT IS LB/STONE
LD WX,#CON_OVERLOAD_L2 ;
CHKO_1: CALL COMP_CON ; OVERLOAD ?
JPS DISP_ERR ; YES.
RET ; NO.
;**************************************;
;***************************************************************************;
; PUSH DATA AVERAGE ;
;***************************************************************************;
; FUNCTION: PUSH SCALE_CNT TO DATA_BUF & AVERAGE FOUR DATA
; INPUT: SCALE_CNT ;
; OUTPUT: BCC_BUF ;
PUSH_DATA_AVERAGE: ;
;----------------------------- ;
SMB 1 ;
LD WX,#(DATA_BUF+08) ;
LD HL,#(DATA_BUF+12) ;
LD Y,#02H ;
PD_1: LD Z,#03H ;
PD_2: PUSH HL ;
LD EA,WX ;
LD HL,EA ;
LD A,@HL ;
POP HL ;
LD @HL,A ;
INCS WX ;
INCS HL ;
DECS Z ;
JPS PD_2 ;
;------------------ ;
LD EA,#08H ;
SBS WX,EA ;
SBS HL,EA ;
DECS Y ;
JPS PD_1 ;
;------------------ ;
SMB 0 ;
BTST CHK_BTCNT_FLAG ; CHK_BTCNT_FLAG = 1 ?
JPS PD_4 ; NO.
LD EA,SCALE_CNT+0 ; YES.
LD WX,#40H ;
SBS EA,WX ; [SCALE_CNT+0] > 40H ?
JPS PD_3 ; YES.
JPS PD_4 ; NO.
PD_3: LD EA,#02H ;
LD SCALE_CNT,EA ;
;-------------------- ;
;PUSH DATA TO DTA BUFFER ;
PD_4: LD EA,SCALE_CNT+0 ;
SMB 1 ;
LD DATA_BUF+0,EA ;
SMB 0 ;
LD EA,SCALE_CNT+2 ;
SMB 1 ;
LD DATA_BUF+2,EA ;
;----------------------------- ;
;DATA_AVERAGE: ;
LD EA,#00 ;
LD B1_BCC_BUF+0,EA ;
LD B1_BCC_BUF+2,EA ;
LD B1_BCC_BUF+4,EA ;
LD B1_BCC_BUF+6,EA ;
LD WX,#(DATA_BUF+0) ;
LD HL,#(B1_BCC_BUF+0) ;
DA_1: LD Z,#03 ;
DA_2: CALL ADD2B3B ;
LD EA,#(256-05) ;
ADS HL,EA ; RESTORE HL TO THE FIRST ADDRESS
NOP ;
DECS Z ;
JPS DA_2 ;
LD X,#01 ;
DA_3: LD W,#05H ;
LD HL,#(B1_BCC_BUF+5) ;
RCF ;
DA_4: LD A,@HL ;
RRC A ;
LD @HL,A ;
DECS HL ;
DECS W ;
JPS DA_4 ;
DECS X ;
JPS DA_3 ;
LD EA,B1_BCC_BUF+0 ;
SMB 0 ;
LD BCC_BUF+0,EA ;
SMB 1 ;
LD EA,B1_BCC_BUF+2 ;
SMB 0 ;
LD BCC_BUF+2,EA ;
RET ;
;**************************************;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -