📄 samtestc.src.bak
字号:
JR SetST5 ;
BITS ZeroRdNow ; Zero reading
BITR CnstRdNow ;
JR SetST6 ;
SetST4 LD EA,#LDspNul ;
CPSE EA,@HL ; Digit = Null?
JR SetST5 ;
JPS SetST3 ;
SetST5 BITR ZeroRdNow ;
BITS CnstRdNow ;
SetST6
BTST ChgeSlpTmrNow ; if now have 4 steps changed, skip
RET ;
BITR ChgeSlpTmrNow
BTSF OvrWtNow ; if now not overweight, skip
JR RstIdleOWT ;
BTSF UdrWtNow ; if now not underweight, skip
JR RstIdleUWT ;
BTSF CnstRdNow ; if now not constant reading, skip
JPS RstIdleCRT ;
BTSF ZeroRdNow ; if now not zero reading, skip
JPS RstIdleZRT ;
RET
RstIdleOWT
BTST IdleOvrWtNow ;
SetIdleOWT
CALLS RL_OWT ;
JPS Rst_IO ;
RstIdleUWT
BTST IdleUdrWtNow ;
SetIdleUWT
CALLS RL_UWT ;
JR Rst_IU ;
RstIdleCRT
BTST IdleCnstRdNow ;
SetIdleCRT
CALLS RL_CRT ;
JR Rst_IC ;
RstIdleZRT
BTST IdleZeroRdNow ;
SetIdleZRT
CALLS RL_ZRT ;
JR Rst_IZ ;
Rst_IC LD A,#0001b ; set IdleCnstRdNow
Rst_IO LD A,#0010b ; set IdleOvrWtNow
Rst_IU LD A,#0100b ; set IdleUdrWtNow
Rst_IZ LD A,#1000b ; set IdleZeroRdNow
LD OperFlg9,A ;
RET
SetST_RL
LD EA,SleepTimLRL ;
LD SleepTimL,EA ;
LD A,SleepTimHRL ;
LD SleepTimH,A ;
BITR SleepNow ;
RET
;***********************************************************
;ChkHoldState
; BTST HoldEn ; Check is Hold enable
; RET ;
;
; LD HL,#HoldChkCount ; restore previous interal count
; CALL ChkHoldStable ;
;
; BTSF HoldRd ; Check is the reading is not Hold
; JPS ChkHoldState_Ret
;
; BTST HoldStableChk ; Check time interval reach
; RET ;
;
; BITR HoldStableChk
; LD A,#HoldChkTime ; Reset timer
; LD HoldTimer,A ;
;
; LD A,OperFlg8 ; Check OperFlg8 to determinate is it sitable for hold
; AND A,#1110b ;
; REF RCPSE_A0 ;
; JPS ChkHoldState_Ex ;
;
; BTSF HoldRd ; Check is the reading is not Hold
; JPS ChkHoldState_Ret
;
; BTSF HoldRdChange ; Check is there any reading change
; JR ChkHoldState_Ret
;
; BTSF HoldNotAllow ;
; JR ChkHoldState_Ret;
;
; CALL KeyTone ; Beep !!!
; BITS HoldRd ; --
; LD A,#HoldTimConst ; Reset Hold timer
; LD HoldTimer,A ;
; JR ChkHoldState_Ret
;ChkHoldState_Ex
; BITS HoldNotAllow ;
;ChkHoldState_Ret
; BITR HoldRdChange ;
; RET
;====== CALCULATION ================================================
;***********************************************************
; F: Check weight taring function
; I: WeightTareNow = 1: Weight Tare
; O: WeightTareNow, ZeroOffset, ZeroCount, NewWeightCnt, NewWeightBCD
; CnstRdNow, ZeroRdNow
; N: if OvrWtNow set, exit
; if OvrAbMaxNow set, exit
; if UdrWtNow set, No tare, reset zero position
;
ChkWeightTare
BTST WeightTareNow ;
RET ;
; REF RSMB_MemMapIO ;
;ChkWeightTare1
; BTSF ONZERO_PIN
; JR ChkWeightTare2
; REF RSMB_Variable ;
; RET
btsf IsOnZeroKey
jr ChkWeightTare2
ret
ChkWeightTare2
REF RSMB_Variable ;
BITR WeightTareNow ;
BTSF HoldEn ; if hold enable, no function
RET ;
BTSF OvrWtNow ; If over weight now, exit
RET ;
BTSF OvrAbMaxNow ; If over absolute max count, exit
RET ;
BTSF OvrHiVoltNow ; If over Hi-Volt Boundary, exit
RET ;
BTSF BlwLoVoltNow ; If below Lo-Volt Boundary, exit
RET ;
BTSF HoldRd ; If Hold enable now, exit
RET ;
WeightTare
CALLS SetIdleZRT ; Set zero-reading sleep time
BTST UdrWtNow ;
JR WeightTare1 ;
CALLS UdrWgtProc2 ; If under weight now, reset zero position
BITR OvrWtNow ; Clear OvrWtNow
RET ;
WeightTare1
BTSF CalibrateOn ; In Calibration mode, no totaling function
JPS WeightTare10
BTST TotalFlag
JPS WeightTare10
BTST TareNow
JPS WeightTare9
;-----------------------------------------
; Totalling occur
LD EA,StartZero+2 ; StartZero ---> ZeroCount
LD ZeroCount+2,EA
LD EA,StartZero
LD ZeroCount,EA
BITR TareNow
BITR Icon_Tare
JR WeightTareE
WeightTare9
BITS TareNow
BITS Icon_Tare
WeightTare10
CALL Dly60 ; DELAY 600ms
;-------------------------------------------
; Tare occur (default)
REF RAverageSample
LD HL,#ZeroCount
REF RGetAverageCnt
WeightTareE
REF RSetBnd ;
REF RCalWeightCnt ;
CALLS InitWeightBCD ;
BITR UdrWtNow ; Clear UdrWtNow
; add by hcy 03-12-2 10:32
; remark by hcy 03-12-9 16:04
; bits PermitSend
RET
;***********************************************************
; F: Underweight Procedures
; I: UdrWtNow, AverageCount, NewWeightCnt
; O: ZeroOffset, ZeroCount
; IdleUdrWtNow = 1: currently is underweight
; = 0: currently is not underweight
; D: EA, HL, WX, YZ
;
UnderweightProc
BITR OvrWtNow ; Clear OvrWtNow
btst UdrAlrDsp
CALL DspUnderWeight ;
; add by hcy for tare for negative value
bits UdrAlrDsp
; modify by hcy 03-12-9 16:37
ld EA,#LDsp__
LD PrevWeight0,EA ;
LD PrevWeight2,EA ;
LD PrevWeight4,A ;
BTST AutoZeroNow ; 1 = Reset Zero now
RET
UdrWgtProc2
CALLS Dly20 ; DELAY 400ms
CALLS Dly20
REF RAverageSample ;
BTST TotalFlag
JPS UdrWgtProc4
BTSF TareNow
JR UdrWgtProc3
LD HL,#StartZero ; Reset Zero Reading
REF RGetAverageCnt
JPS UdrWgtProc4
UdrWgtProc3
BITR TareNow
BITR Icon_Tare
LD EA,StartZero ; Reset Zero Reading
LD ZeroCount,EA ; MSB
LD EA,StartZero+2
LD ZeroCount+2,EA ; LSB
JR UdrWgtProc7
UdrWgtProc4
LD HL,#ZeroCount
REF RGetAverageCnt
UdrWgtProc7
REF RCalWeightCnt ; get NewWeightCnt
REF RSetBnd ;
CALLS InitWeightBCD ;
; add by hcy 03-11-29 16:21
; remark by hcy 03-12-9 16:04
; bits PermitSend
RET
;***********************************************************
; F: Overloading Procedure
; I: IdleOvrWtNow
; D: EA
;
OverloadingProc
BITR UdrWtNow ; Clear UdrWtNow
BITR HoldRd ; if loading occur,disable hold reading
BITR HoldStableChk ;
BITS HoldNotAllow ;
LD A,#HoldChkTime ; Reset timer
LD HoldTimer,A ;
CALL DspOverloaded ;
RET
;***********************************************************
; F: Check if now underweight
; I: AverageCount, ZeroBound
; O: Skip return if underweight(ZeroBound > AverageCount)
; return if not underweight or OvrAbMaxNow set
; D: HL, WX
;
ChkUnderweight
BTSF OvrAbMaxNow ;
RET
ChkUnderweight1
LD HL,#ZeroBound ;
LD WX,#AverageCount;
REF RCmpHex ; If @HL <= @WX, skip
SRET ;
RET ;
;***********************************************************
; F: Check if now overloading
; I: NewWeightCnt, MaxBound
; O: Skip return if overloading(MaxBound < NewWeightCnt + ZeroOffset) or OvrAbMaxNow set
; return if Not overloading(MaxBound >= NewWeightCnt + ZeroOffset)
; D: HexBuf[], EA, HL, WX
;
ChkOverloading
BTSF OvrAbMaxNow ;
SRET ;
BTSF CntDspNow ;
RET
LD HL,#StartZero ;
LD WX,#AverageCount;
REF RCmpHex ; if @HL <= @WX, skip
RET ;
; HexBuf = AverageCount - StartZero
LD HL,#StartZero
LD WX,#AverageCount
REF RSubHex ; HexBuf = @WX - @HL
LD HL,#HexBuf ; HexBuf = AverageCount - StartZero
LD WX,#MaxBound ;
REF RCmpHex ; If @HL <= @WX, skip
SRET ;
RET ;
;***********************************************************
; F: To Round NewWeightCnt correct to step count width for kg/ml mode
; I: NewWeightCnt
; O: NewWeightCnt
;
Rnd2Step_kgml
LD WX,#YS_F_REG_4 ;
REF RCurStep2Ary ;
REF RDiv_10_FReg ;
REF RCpy_F2LReg ;
LD HL,#NewWeightCnt+2
LD WX,#YS_F_REG_4 ; Copy NewWeightCnt to YS_F_REG[]
REF RWrd2Ary ;
REF RDiv_YS ;
REF RRound_YS ; Round to nearest step in kg/ml
LD WX,#YS_F_REG_4 ; Copy YS_F_REG[] to DecBuf[]
LD HL,#DecBuf4 ; for backup
REF RCpyBuf ;
REF RActCurStp2Ary ;
REF RCpy_F2LReg ;
LD WX,#DecBuf4 ; Copy DecBuf[] to YS_F_REG[]
LD HL,#YS_F_REG_4 ; for restore
REF RCpyBuf ;
CALLS Mul_YS ;
LD WX,#YS_R_REG_4 ; Copy YS_R_REG[] to NewWeightCnt
LD HL,#NewWeightCnt+2
CALLS Ary2Wrd ;
RET
;***********************************************************
; F: To Round NewWeightCnt correct to step count width for fl.oz mode
; I: NewWeightCnt
; O: NewWeightCnt
;
Rnd2Step_floz
REF RNWCnt2FReg ;
REF RMul_10_FReg ;
CALLS Cal_oz_Part ; oz = remainder / ozRatio
REF RCpy_R2FReg ; get remainder
JR Rnd2Stpoz1 ;
;***********************************************************
; F: To Round NewWeightCnt correct to step count width for oz/lb mode
; I: NewWeightCnt
; O: NewWeightCnt
;
Rnd2Step_lb
CALL lbRatio2LReg ;
REF RNWCnt2FReg ;
REF RDiv_YS ; LB = NewWeightCnt / lbRatio
REF RCpy_R2FReg ; get remainder
REF RMul_10_FReg ;
CALLS Cal_oz_Part ; oz = remainder / ozRatio
REF RCpy_R2FReg ; get remainder
Rnd2Stpoz1
LD WX,#YS_L_REG_4 ;
REF RCurStep2Ary ; 1/8oz step
REF RDiv_YS ;
LD A,YS_F_REG_4 ;
REF RRound_YS ;
LD HL,#YS_F_REG_4 ;
CPSE A,@HL ; if no round, skip
JR Rnd2Stpoz2 ;
RET
Rnd2Stpoz2
REF RActCurStp2Ary ;
LD HL,#YS_F_REG_4 ;
REF RDouble_YS ;
LD HL,#YS_F_REG_4 ; YS_L_REG[] = YS_L_REG * 4
REF RDouble_YS ;
REF RDiv_10_FReg ;
; LD A,FactoryMode ;
; CPSE A,#5 ; if mode 6 - lb mode, RDiv_10_FReg once more
; JR Rnd2Stpoz3 ;
; JR Rnd2Stpoz5
;BTSF UnitMode ;
;REF RDiv_10_FReg ;
;Rnd2Stpoz3
; DECS A
; JR Rnd2Stpoz8
;Rnd2Stpoz5
; BTSF UnitMode ;
; REF RDiv_10_FReg ;
Rnd2Stpoz8
REF RRound_YS ;
LD WX,#YS_F_REG_4 ; Convert YS_L_REG[] to HexBuf[]
LD HL,#HexBuf+2 ;
CALLS Ary2Wrd ;
RCF ;
LD EA,HexBuf+2 ; NewWeightCnt = NewWeightCnt + HexBuf
REF RLD_HLEA ;
LD EA,NewWeightCnt+2
REF RADC_EAHL ; Substract LSB
LD NewWeightCnt+2,EA;
LD EA,HexBuf ;
REF RLD_HLEA ;
LD EA,NewWeightCnt ;
REF RADC_EAHL ; Substract MSB
LD NewWeightCnt,EA ;
RET
;***********************************************************
; F: Part routine to calculate oz
; I: YS_F_REG[], ozRatio
; O: YS_F_REG[] = oz
; YS_R_REG[] = Remainder
; D: A
;
Cal_oz_Part
CALL ozRatio2LReg ;
REF RDiv_YS ;
RET
;***********************************************************
; F: Calculate kg
; I: NewWeightCnt[] - Relative count of weight
; gRatio - Count per 1g
; O: NewWeightBCD[]
; N: kg/ml dsp = NewWeightCnt/(CurStep/10)*StepVal
; D: EA, HL, WX, YZ
;
CalculateML
CalculateKG
CALLS Rnd2Step_kgml
CALLS CalStepVal ;
PUSH EA ;
REF RActCurStp2Ary ;
REF RCpy_F2LReg ;
REF RNWCnt2FReg ;
REF RDiv_YS ;
POP EA ;
CALL Mul_EA_FReg ; YS_F_REG = YS_F_REG * step value
REF RHxFReg2Dec ;
LD HL,#NewWeightBCD4
LD WX,#DecBuf4 ; Copy DecBuf[] to NewWeightBCD[]
REF RCpyBuf ;
RET
;***********************************************************
; F: Calculate solid oz/lb
; I: NewWeightCnt
; O: NewWeightBCD[]
; D: EA, HL, WX, YZ
;
CalculateLB
CALLS Rnd2Step_lb ;
CALLS CalStepVal ;
PUSH EA ;
CALL lbRatio2LReg ;
REF RNWCnt2FReg ;
REF RDiv_YS ; LB = NewWeightCnt / lbRatio
REF RHxFReg2Dec ;
LD A,FactoryMode ;
DECS A ; if mode = 1, fill first one display location only
JR CalculateLB1
LD A,DecBuf4 ;
LD NewWeightBCD0,A ;
JR CalculateLB2
CalculateLB1
LD A,DecBuf4 ;
LD NewWeightBCD1,A ;
LD A,DecBuf3 ;
LD NewWeightBCD0,A ;
;-----
CalculateLB2
REF RCpy_R2FReg ; get remainder
REF RMul_10_FReg ;
CALLS Cal_oz_Part ; return YS_F_REG[] ... YS_R_REG[]
REF RHxFReg2Dec ;
LD A,FactoryMode ;
DECS A ; if mode = 1, fill next two display location only
JR CalculateLB5
LD A,DecBuf3 ;
LD NewWeightBCD1,A ;
LD A,DecBuf4 ;
LD NewWeightBCD2,A ;
JR CalculateLB6
CalculateLB5
LD A,DecBuf4 ;
LD NewWeightBCD3,A ;
LD A,DecBuf3 ;
LD NewWeightBCD2,A ;
;-----
CalculateLB6
REF RCpy_R2FReg ; get remainder
LD WX,#YS_L_REG_4 ;
REF RCurStep2Ary ;
REF RDiv_YS ;
POP EA ; get step value
CALL Mul_EA_FReg ;
LD A,FactoryMode ;
DECS A ; if mode = 1, fill last one display location only
JR CalculateLB60
REF RHxFReg2Dec ; Hex --> Dec
LD A,DecBuf4 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -