⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samtestc.src.bak

📁 用SAM72N9写的电子秤文档
💻 BAK
📖 第 1 页 / 共 5 页
字号:
	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 + -