📄 samtestc.src.bak
字号:
JR INTT0_IntE ;
INCS L ; If overflow for 16-bit count number, INCS L
;^*************************************^
INTT0_IntE
REF RIRET_SB ;
; if L overflow, display "EE"
BTSF CntOvrflow ;
REF RIRET_SB ;
BITS CntOvrflow ;
BITS OvrAbMaxNow ;
LD A,#2 ; Set OvrWtNow & Clear Others Flags
LD OperFlg8,A ;
CALLS RL_OWT ;
REF RIRET_SB ;
;---------------------------------------
DischargePeriod
LD EA,CntTCNT ;
DECS EA ;
JPS DischargePeriod8
;v***** IMPORTANT TO DO FIRST *****v
REF RSMB_MemMapIO ; Select Memory Bank
BTST STOPCNT_PIN ; check interrupt pin is high?
JR DischargePeriod4 ; when low, restart timer.
REF RSMB_LCD ;
BITS DISCHARGE_PIN ;
REF RSMB_Variable ;
BITS CntPeriodNow ; Set to Counting Period
LD YZ,#0 ; Clear MSB
LD L,#0 ;
DischargePeriod4
REF RSMB_MemMapIO ; Select Memory Bank
LD EA,#01111100b ; Enable T/C0
LD TMOD0,EA ; clear TCNT0 & Restart
BITR IRQT0 ; Clear Timer/Counter Request Flag
;^*********************************^
REF RSMB_Variable ;
LD EA,#DischargeDelay
DischargePeriod8
LD CntTCNT,EA ;
BITR IRQT0 ; Clear Timer/Counter Request Flag
REF RIRET_SB ;
;============================================================================
;***********************************************************
; F: Chk MaB key
; I: KeyKGLB, KeyFlozML, KeyHold, KeyHeldNow
;
ChkMaBkey
; REMARK IT BY HCY 03-11-22 10:53
BTSF KeyHeldNow ; if key held, exit
RET ;
LD A,MaB_Key ;
DECS A ;
JR ChkMaBkey1 ;
RET ;
ChkMaBkey1
BTST IdleBatLowNow ; if battery low now, skip
JR ChkMaBkey2 ;
LD A,#0 ;
LD MaB_Key,A ;
RET
ChkMaBkey2
; remark by hcy 03-11-22 12:07
; CALLS Dly60 ; Key delay 600ms
BTSF KeyKGLB ;
JR MaB_KGLB ;
BTSF KeyHold ;
JPS MaB_Hold ;
BTSF KeyFlozML ;
JPS MaB_FlozML
RET ;
;***********************************************************
; F: kg/lb button
; O: KeyKGLB
; N: MaB
;
MaB_KGLB
BTSF CntDspNow ; if CntDspNow = 1, exit
RET ;
BITR KeyKGLB ;
BTSF HoldEn ; if hold enable, no funciton
RET
SetSolMeasure
BTST SolLiqMode ;
JPS SetUnit ;
BITR SolLiqMode ; Set Solid mode
JR RstMode ;
SetUnit
SCF ;
LD HL,#OperFlg1 ;
BXOR C,@H+UnitMode ; switch % g/lb
LDB @H+UnitMode,C ;
RstMode
CALLS SetFactoryMode ;
REF RSetBnd ;
CALLS MainCalculate2 ;
RET
;-----------------------------------
; F: fl.oz/ml button
; O: SolLiqMode, UnitMode
; N: MaB
;
MaB_FlozML
BTSF CntDspNow ; if CntDspNow = 1, exit
RET ;
BITR KeyFlozML ;
BTSF HoldEn ; if hold enable, no funciton
RET
SetLiqMeasure
BTSF SolLiqMode ;
JPS SetUnit ;
BITS SolLiqMode ; Set Liquid mode
JPS RstMode ;
;--------------------------------------------------------
; F: Hold key operation
MaB_Hold
BITR KeyHold
BTSF HoldEn
JR IsHoldKey2
IsHoldKey1
BITS HoldEn
BITS Icon_Hold ; Indicate Hold is enable now
LD A,#HoldChkTime ; Reset Hold check interval timer
LD HoldTimer,A ;
LD A,#0
LD HoldState,A
JR IsHoldKey3 ;
IsHoldKey2
BITR HoldEn
BITR Icon_Hold ; Indicate Hold is disable
BITR HoldRd ; Set this flag to allow update the display
IsHoldKey3
RET
;***********************************************************
; O: KeyHeldNow
; N: xxxx0000 - EA : Key scan input
; |||'-- Off button
; ||'--- kg/lb button
; |'---- fl.oz/ml button
; '----- hold button
;
ChkKeyPressed
LD YZ,EA ;
CALLS SetST_RL ; reset sleep timer
REF RSkipSRC_YZ ;
JPS Sleep ; Off button
REF RSkipSRC_YZ ;
JPS IsKeyKGLB ; kg/lb button
REF RSkipSRC_YZ ;
JPS IsKeyFLOZML ; fl.oz/ml button
REF RSkipSRC_YZ ;
; remark by hcy
; JPS IsHoldKey ; Hold key button
JPS IsOnKey
ChkKeyPress9
BITS KeyHeldNow ;
ChkKeyPressE
RET
;***********************************************************
; F: kg/lb button
; O: KeyKGLB
; N: MaB
;
IsKeyKGLB
; remark 03-11-22 12:24
BTST KeyHeldNow ; if key held,
BITS KeyKGLB ;
JP ChkKeyPress9 ; exit
;***********************************************************
; F: kg/lb button
; O: KeyFlozML
; N: MaB
;
IsKeyFLOZML
;03-11-22 12:24
BTST KeyHeldNow ; if key held,
BITS KeyFlozML ;
JP ChkKeyPress9 ; exit
;-----------------------------------
; F: Hold key button
; O: KeyHold
; N: MaB
;
IsHoldKey
BTST KeyHeldNow ; if key held,
BITS KeyHold ;
JP ChkKeyPress9 ; exit
IsOnKey
; remark it by hcy 03-11-19 16:03
; BTST KeyHeldNow ; if key held,
bits IsOnZeroKey
BTSF CalibrateOn ;
BITR CntDspNow ;
BITS WeightTareNow ; Set flag to weight tare
BITR UdrAlrDsp ; clr already display '----'
jp ChkKeyPress9 ; exit
;====== DISPLAY ROUTINE ============================================
;***********************************************************
; F: Set NewWeightBCD & spWeightBCD to display nothing
; O: NewWeightBCD[]
; D: EA
;
InitWeightBCD
REF RLD_EA0
LD NewWeightBCD0,EA ;
LD NewWeightBCD2,EA ;
LD NewWeightBCD4,A ;
RET
;***********************************************************
; F: Clear weighting Symbol, retain low bat & timer icon
; O: Iconset0, Iconset1, Iconset2
; D: A
;
ClearWgtSym
LD A,#0 ; Clear decpt1, colon, g, oz
LD Iconset0,A ; Clear lb, kg, decpt2, low bat
LD Iconset1,A ;
LD A,Iconset3 ; Clear one, decpt3
AND A,#0010b ; retain tare icon
LD Iconset3,A ;
LD A,Iconset2 ; Clear S2, fl., ml
AND A,#0001b ; retain Hold icon
LD Iconset2,A ;
RET
;***********************************************************
; F: Display Version Number
; O: NULL
;
;
DspVerNo
CALL DspWeightTare ; Clear Display
LD EA,#LDsp_0 ;
CALLS LdLDigit ;
LD EA,#LDsp_5 ; Display Samsung II
LD LDigit1xxx,EA ;
LD EA,#LDsp_5 ;
LD LDigitx1xx,EA ;
LD EA,#VerD1 ; Display Version
REF RLD_LDIGxx1xEA ;
LD EA,#VerD2 ;
REF RLD_LDIGxxx1EA ;
REF RDsp4LDigit ; Display ???? Digits
RET
;***********************************************************
; F: Display Overload - " EE"
; O: SDigitx_8
; LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
;
DspADInitErr
DspEE LD EA,#LDsp_E ; Display "EE" when A/D init error
REF RLD_LDIGxxx1EA ;
JR DspHILO ;
;***********************************************************
; F: Display Overload - " LO "
; O: SDigitx_8
; LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
;
DspLO LD EA,#LDsp_O ;
REF RLD_LDIGxxx1EA ;
LD EA,#LDsp_L ;
JR DspHILO ;
;***********************************************************
; F: Display Overload - " HI "
; O: SDigitx_8
; LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
;
DspHI LD EA,#LDsp_I ;
REF RLD_LDIGxxx1EA ;
LD EA,#LDsp_H ;
DspHILO REF RLD_LDIGxx1xEA ;
LD EA,#LDspNul ;
CALLS LdLDigit1 ;
JR ClrDspBuf1 ;
;***********************************************************
; F: Clear display buffer
; D: EA
;
ClrDspBuf
LD EA,#LDspNul ;
CALLS LdLDigit ;
CALL ClearSymbol ;
; add hcy 03-11-24 14:21
ClrDspBuf2:
CALLS ClearWgtSym ;
LD A,#SDsp_Nul ;
REF RDspSDigit ; Display ?/? Digits
RET
ClrDspBuf1
CALLS ClearWgtSym ;
LD A,#SDsp_Nul ;
REF RDspSDigit ; Display ?/? Digits
REF RDsp4LDigit ; Display ???? Digits
REF RDspSymbol ;
RET
;***********************************************************
; F: Display Underweight - "----"
; O: SDigitx_8
; LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
;
DspUnderWeight
LD EA,#LDsp__ ;
CALLS LdLDigit
JR ClrDspBuf1
;***********************************************************
; F: Weight Taring Display - "0000"
; O: SDigitx_8
; LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
;
DspWeightTare
; LD EA,#LDsp_0 ;
; CALLS LdLDigit ;
; remark it by hcy 03-12-4 11:53
LD EA,#LDspNul
JPS ClrDspBuf1 ;
; JPS ClrDspBuf2
;***********************************************************
; F: Display "8888"
; O: LDigit1xxx, LDigitx1xx, LDigitxx1x, LDigitxxx1
LdLDig8888
LD EA,#LDsp_8 ;
;***********************************************************
; F: Load EA into 4 Large digit buffer
; I: EA
; O: LDigitxxx1 = LDigitxx1x = LDigitx1xx = LDigit1xxx = EA
;
LdLDigit
REF RLD_LDIGxxx1EA ;
REF RLD_LDIGxx1xEA ;
LdLDigit1
LD LDigitx1xx,EA ;
LD LDigit1xxx,EA ;
BTSF UdrWtNow ; if underweight now,
LD EA,#LDspNul ; dsp decimal digit to nothing.
LD LDigit___1,EA ;
RET
;***********************************************************
; F: Initialize Mode Setting
; I: FactoryMode = 0..15 Mode
; UnitMode = 0(kg), 1(lb)
; OperFlag5.3,2 = 0: g(Default); 1 = oz; 2 = ml; 3 = fl.oz
; O: Step1, Step2, Bound1, Bound2
; gRatio, oz1_8Ratio, ozRatio, lbRatio
;
SetFactoryMode
LD A,FactoryMode
BTSF UnitMode
JPS Set_oz_Mode
Set_g_Mode
LD Y,#3 ;
LD HL,#Mode_g_1_8 ;
CALLS SetFactory1 ;
JPS SetFactoryModeE ;
Set_oz_Mode
LD Y,#6 ;
LD HL,#Mode_lb_1_8 ;
CALLS SetFactory1 ;
CALLS SetFactory2 ;
BTST SolLiqMode ;
JPS SetFactoryModeE ;
Set_floz_code
CALLS SetFactory3 ;
SetFactoryModeE
RET
;------------------------------------------------------------------
SetFactory1
REF RLD_E0 ; Only have 0..15 mode
CALLS HexMul ;
RCF ;
REF RADC_EAHL ; EA = Start addr of mode data
REF RLD_WXEA ;
LD HL,#Step1 ;
REF RStoreWordCode ; Store Step1
REF RStoreWordCode ; Store Boundary1
REF RStoreByteCode ; Store Unit count
RET
SetFactory2
REF RStoreWordCode ; Store Unit count (1 oz)
REF RStoreWordCode ; Store Unit count (1 lb)
RET
SetFactory3
LD HL,#Bound1 ;
REF RStoreWordCode ; Store fl.oz boundaries
RET
;***********************************************************
; F: Delay routine
; I: EA = ? x 10 ms
;
Dly1 LD EA,#1 ;
Dly2 LD EA,#2 ;
Dly3 LD EA,#3
Dly20 LD EA,#20 ;
Dly25 LD EA,#25
Dly60 LD EA,#60 ;
Dly200 LD EA,#200 ;
Dly250 LD EA,#250 ;
CALL Delay10ms ;
RET
;***********************************************************
; F: Calculate Step value
; I: UnitCnt, Step1, Step2
; O: EA = Step value
; HexCalFlg = 1
; N: Step value = Step count / Unit count / 10
; Step value = 1byte
; For mode 6 & 15, Step value = Step / Unit count
;
CalStepVal
PUSH HL
LD WX,#YS_F_REG_4 ;
REF RCurStep2Ary ;
LD EA,UnitCnt ; Step VaLue = Step count / Unit count
LD HL,#YS_L_REG_4 ;
REF RByteAry ;
REF RDiv_YS ;
; LD A,FactoryMode ;
; CPSE A,#5 ; if mode 6 - g mode, skip RDiv_10_FReg
; JR CalStepVal0 ;
; BTSF UnitMode ;
; JR CalStepVal1 ;
; JR CalStepVal2 ;
;CalStepVal0
;CPSE A,#0 ; if mode 0 - g mode, skip RDiv_10_FReg
; DECS A
; JR CalStepVal1 ;
; BTST UnitMode ;
;CalStepVal1
LD A,FactoryMode ;
DECS A
JR CalStepVal1
BTSF UnitMode ;
JR CalStepVal2 ; if mode 0 - lb mode, skip RDiv_10_FReg
CalStepVal1
REF RDiv_10_FReg ;
CalStepVal2
REF RRound_YS ;
LD A,YS_F_REG_3 ;
LD E,A ;
LD A,YS_F_REG_4 ;
POP HL
RET
;====== INITIALIZATION =============================================
;***********************************************************
; F: Display 8888 7/8 On screen
;
ADInitSc
CALLS LdLDig8888 ;
; remark by hcy 03-11-24 11:33
; REF RDsp4LDigit ; Display 8888 Digits
LD A,FactoryMode ;
DECS A ; For mode 8, display "8888"
JR ADInitSc1 ;
REF RDsp4LDigit ; Display 8888 Digits
RET ;
ADInitSc1
LD A,#SDsp_7_8 ; Display 7/8 Digits
REF RDspSDigit ; for mode 1-7
; add by hcy 03-11-24 11:34
REF RDsp4LDigit ; Display 8888 Digits
RET
;***********************************************************
; F: Initial A/D Convertor using dual slope integrator
; O: SMB = Variable_Bank
; N: If STOPCNT_PIN(Pt C on sch.) is high,
; set DISCHARGE_PIN(Pt A on sch.) to high and vice versa.
; Display " EE" when error.
; D: EA, HL
;
ADInit CALLS RL_ZRT ;
REF RSMB_LCD ;
BITR KEYROW1_PIN ; Turn on keymap row 1
REF RSMB_MemMapIO ;
BTST STOPCNT_PIN ;
JR ADInit_2 ;
REF RSMB_LCD ;
BITS DISCHARGE_PIN ; Set discharging when STOPCNT_PIN is high
ADInit_1
CALLS ChkADInitErr ;
CALLS ChkOffButton ;
;-----v Remark to bypass A/D circuitry v-----
REF RSMB_MemMapIO ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -