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

📄 samtestc.src.bak

📁 用SAM72N9写的电子秤文档
💻 BAK
📖 第 1 页 / 共 5 页
字号:
	LD	NewWeightBCD3,A	;
	JR      CalculateLB70
CalculateLB60	
	LD	A,YS_F_REG_4	;
	LD	NewWeightBCD4,A	;
CalculateLB70	
	RET
;***********************************************************
;	F: Calculate Fuild oz
;	I: NewWeightCnt
;	O: NewWeightBCD[]
;	D: EA, HL, WX, YZ
;
CalculateFLOZ
	LD	A,FactoryMode
	DECS    A               ; if mode = 1, use CalculateLB
	JR	CalculateFLOZ_1
	JPS	CalculateLB
CalculateFLOZ_1
	CALLS	Rnd2Step_floz	;
	CALLS	CalStepVal	;
	PUSH	EA		;

	CALL	ozRatio2LReg	;
	LD	WX,#YS_L_REG_4	;
	LD	HL,#YS_F_REG_4	;
	REF	RCpyBuf		; Copy YS_L_REG[] to YS_F_REG[]
	REF	RDiv_10_FReg	;
	REF	RCpy_F2LReg	;

	REF	RNWCnt2FReg	;
	REF	RDiv_YS		;
	REF	RHxFReg2Dec	;
	LD	WX,#DecBuf4	;
	LD	HL,#NewWeightBCD3
	CALL	CpyBuf2		;
;------
	REF	RCpy_R2FReg	; get remainder
	REF	RMul_10_FReg	;
	LD	WX,#YS_L_REG_4	;
	REF	RCurStep2Ary	;
	REF	RDiv_YS		;
	POP	EA		; get step value
	CALL	Mul_EA_FReg	;

	LD	A,YS_F_REG_4	;
	LD	NewWeightBCD4,A	;
	RET

;***********************************************************
;	F: Check 4 dsp Step change
;	I: AverageCount, NewWeightCnt, ZeroCount
;	O: Chge4stepNow = 0: within 4 dsp step range
;	                = 1: beyond 4 dsp step count
;
Chk_4stepChange
	LD	HL,#PreviousCount	; compare with previous count
	CALL	GetDif			; and check 4 step change

	REF	RActCurStp2Ary	;
	LD	HL,#YS_F_REG_4	;
	REF	RDouble_YS	;
	LD	HL,#YS_F_REG_4	;
	REF	RDouble_YS	;
	LD	WX,#YS_F_REG_4	;
	LD	HL,#DecBuf+2	; DecBuf = Step Count * 4
	CALLS	Ary2Wrd		;

	LD	HL,#HexBuf	; HL = HexBuf = weight change
	LD	WX,#DecBuf	; WX = DecBuf = 4 step count
	REF	RCmpHex		; if @WX => @HL, skip
	JR	GoSetSlpTmr	;
	RET			;
GoSetSlpTmr
	BITS	Chge4stepNow	;
	BITR	IdleCnstRdNow	;
	BITR	IdleZeroRdNow	;

	BITR	ChgeSlpTmrNow
	LD	A,#ChgeSlpTmrDly	; Reset set sleep timer delay
	LD	Chge4stepTimer,A
	RET

;***********************************************************
;	F: Main Calculation Routine
;	I: SampleCount0, SampleCount1, HaveData, UnitMode
;	O: NewWeightBCD
;	   LDigitxxx1, LDigitxx1x, LDigitx1xx, LDigit1xxx
;	D: EA, HL, WX, YZ
;
MainCalculate
	BTSF	IdleBatLowNow	; if battery low now,
	RET			; exit

	BTST	HaveSample0	; Got 2 Samples?
	RET			;
	BTST	HaveSample1	;
	RET			;

	REF	RAverageSample	;
	
	BTST	EnCreeping		; check creeping enable
	JPS	MainCalculate22

	CALL	ChkZeroOne

;=======================
; Compare to the previous count
; Calculate the difference
	LD	HL,#PreviousCount	; compare with the previous count
	CALL	GetDif			; and check for creeping

	LD	EA,HexBuf+2		; store the difference for further
	LD	YZ,EA			; calculation

	LD	HL,#AverageCount	; HL = HexBuf = AverageCount
	LD	WX,#PreviousCount	; WX = DecBuf = PreviousCount
	REF	RCmpHex			; if @WX => @HL, skip
	JR	MainCalculate1
	LD	EA,#0FFh		; complement in case of negative difference
	XOR	YZ,EA
	INCS	YZ
	NOP

; Compare to Difference with the creep limit
MainCalculate1
	LD	EA,#CreepingDif4
	REF	RPutDec
	
	LD	HL,#HexBuf	; HL = HexBuf = weight change
	LD	WX,#DecBuf	; WX = DecBuf = Hold stable count
	REF	RCmpHex		; if @WX => @HL, skip
	JPS	MainCalculate22

;=====================================
; Check Creep Zero
MainCalculate20
	; Modified by Dennis 1-12-2003
	BTST	ZeroOne			; For ZeroOne Range
	JPS	MainCalculate20b	; Reset Zero

	BTST    CreepZero		; Check creep zero timer
	JPS     MainCalculate21
		
	RCF
	LD	EA,AverageCount+2	;
	LD	HL,#ZeroRtnUpBnd	;
	REF	RADC_EAHL		;
	LD	ZeroCount+2,EA		;
	LD	EA,AverageCount		;
	LD	HL,#0			;
	REF	RADC_EAHL		;
	LD	ZeroCount,EA		;

	REF	RSetBnd
	JPS	MainCalculate22
MainCalculate20b
	LD      A,#ZeroUpdate
	LD      Tag2sec,A	
	BITR    CreepZero	

;=====================================
; Check creeping exist
MainCalculate21
	BTST	TimrFinished		;
	JPS	MainCalculate26		; Creeping timer = 8s? 
	
; creeping exist, update zero
	LD	HL,#0			; HL = MSB of different	
	LD	EA,#80h	
	RCF
	ADS	EA,YZ		
	JR	MainCalculate21a
	BTSF	ZeroOne			; For Zero one,
	JPS	MainCalculate22		; not compensate for dropping
	LD	HL,#0FFH		; Change to negative for dropping
MainCalculate21a
	RCF				; ZeroCount = ZeroCount + diff
	LD	EA,ZeroCount+2		; lsb
	ADC	EA,YZ			;
	LD	ZeroCount+2,EA		;
	LD	EA,ZeroCount		; msb
	REF     RADC_EAHL		;
	LD	ZeroCount,EA		;
		
	RCF				; StartZero = StartZero + diff
	LD	EA,StartZero+2		; lsb
	ADC	EA,YZ			;
	LD	StartZero+2,EA		;
	LD	EA,StartZero		; msb
	REF     RADC_EAHL		;
	LD	StartZero,EA		;		

	REF	RSetBnd			; Set Zero Bound

MainCalculate22
	LD	A,#CreepTimer_RL4	; reset timer
	BTST	ZeroOne			;
	LD	A,#CreepTimer_RL6	;
	LD	CreepTimer,A		;
	BITR	TimrFinished		;

	LD      A,#ZeroUpdate		;
	LD      Tag2sec,A		;
	BITR    CreepZero		;
MainCalculate23	
	CALLS	Chk_4stepChange		;
	LD	HL,#PreviousCount	; AverageCount ---> PreviousCount
	REF	RGetAverageCnt

;------------------------------------------------------------------------
MainCalculate26
	REF	RCalWeightCnt	;
;=====================================
MainCalculate2
	BITR	OvrWtNow	;
	CALLS	ChkOverloading	; Chk overload
	JR	MainCalculate3	;
	BITS	OvrWtNow	;
	CALLS	OverloadingProc	;
	RET			;

MainCalculate3
	BITR	UdrWtNow	;
	CALLS	ChkUnderweight	; Chk underweight
	JR	UMainCalculate6	;
	BITS	UdrWtNow	;
	CALLS	UnderweightProc	;
	BTST	UdrWtNow	;
	JR	MainCalculate7	;
	RET			;
	; add by hcy 03-12-2 9:45
UMainCalculate6:
	BITR	UdrAlrDsp	; clr already display '----'	
	; add by hcy 03-12-2 10:37
;	bits	PermitSend
MainCalculate6
	BITR	UdrWtNow	; Clear UdrWtNow
	BITR	OvrWtNow	; Clear OvrWtNow
	BITR	AutoZeroNow	; Disable Reset to Zero
	LD	A,#BCNT2s_RL	;
	LD	AutoZeroTim,A	; reload Auto zero timer

MainCalculate7
	BTST	SolLiqMode	; if Solid mode,
	JR	MainCalculate8	; jump
	BTST	UnitMode	;
	JPS	CalculateML	;
	JPS	CalculateFLOZ	; Remark for temporary Creep testing
MainCalculate8
	BTST	UnitMode	;
	JPS	CalculateKG	;
	JPS	CalculateLB	; Remark for temporary Creep testing

;***********************************************************
;	F: Main Calculation Routine
;	I: SampleCount0, SampleCount1, HaveData, UnitMode
;	O: NewWeightBCD
;	   LDigitxxx1, LDigitxx1x, LDigitx1xx, LDigit1xxx
;	D: EA, HL, WX, YZ
;
;MainCalculate
;	BTSF	IdleBatLowNow	; if battery low now,
;	RET			; exit
;
;	BTST	HaveSample0	; Got 2 Samples?
;	RET			;
;	BTST	HaveSample1	;
;	RET			;
;
;
;	
;	REF	RAverageSample	;
;	
;	BTST	EnCreeping
;	JPS	MainCalculate22
;
;	CALL	ChkZeroOne
;
;	LD	HL,#PreviousCount	; compare with the previous count
;	CALL	GetDif			; and check for creeping
;
;	LD	EA,HexBuf+2		; store the difference for further
;	LD	YZ,EA			; calculation
;
;	LD	HL,#AverageCount	; HL = HexBuf = AverageCount
;	LD	WX,#PreviousCount	; WX = DecBuf = PreviousCount
;	REF	RCmpHex		; if @WX => @HL, skip
;	JR	MainCalculate1
;	LD	EA,#0FFh
;	XOR	YZ,EA
;	INCS	YZ
;	NOP
;MainCalculate1
;	LD	EA,#CreepingDif4
;	REF	RPutDec
;	
;	LD	HL,#HexBuf	; HL = HexBuf = weight change
;	LD	WX,#DecBuf	; WX = DecBuf = Hold stable count
;	REF	RCmpHex		; if @WX => @HL, skip
;	JPS	MainCalculate22
;
;=====================================
; Check creep zero
;MainCalculate20
;	; HexBuf = ZeroCount - AverageCount
;	LD	HL,#AverageCount
;	LD	WX,#ZeroCount
;	REF	RSubHex			; HexBuf = @WX - @HL
;
;	BTST	C
;	JR	MainCalculate20a
;	JPS	MainCalculate20b	; if ZeroCount < Average Count, check no creep zero
;
;MainCalculate20a
;	LD	EA,#ZeroRtnUpBnd
;	REF	RPutDec
;
;	LD	HL,#DecBuf		; 
;	LD	WX,#HexBuf		; HexBuf = ZeroCount - AverageCount
;	REF	RCmpHex			; If @HL <= @WX, skip
;	JPS	MainCalculate20b
;
;	LD	EA,#ZeroRtnLowBnd
;	REF	RPutDec
;
;	LD	HL,#HexBuf		; HexBuf = ZeroCount - AverageCount
;	LD	WX,#DecBuf		; 
;	REF	RCmpHex			; If @HL <= @WX, skip
;	JPS	MainCalculate20b
;
;	BTST    CreepZero		; Check creep zero timer
;	JPS     MainCalculate21
;		
;	RCF
;	LD	EA,AverageCount+2	;
;	LD	HL,#ZeroRtnUpBnd	;
;	REF	RADC_EAHL		;
;	LD	ZeroCount+2,EA		;
;	LD	EA,AverageCount		;
;	LD	HL,#0			;
;	REF	RADC_EAHL		;
;	LD	ZeroCount,EA		;
;
;	REF	RSetBnd
;	JPS	MainCalculate22
;MainCalculate20b
;	LD      A,#ZeroUpdate
;	LD      Tag2sec,A	
;	BITR    CreepZero	

;=====================================
; Check creeping exist
;MainCalculate21
;	BTST	TimrFinished		;
;	JPS	MainCalculate26		; Creeping timer = 8s? 
;	
;	LD	HL,#0			; HL = MSB of different	
;	LD	EA,#80h	
;	RCF
;	ADS	EA,YZ		
;	JR	MainCalculate21a
;	BTSF	ZeroOne
;	JPS	MainCalculate22
;	LD	HL,#0FFH
;MainCalculate21a
;	RCF				; ZeroCount = ZeroCount + diff
;	LD	EA,ZeroCount+2		; lsb
;	ADC	EA,YZ			;
;	LD	ZeroCount+2,EA		;
;	LD	EA,ZeroCount		; msb
;	REF     RADC_EAHL		;
;	LD	ZeroCount,EA		;
;		
;	RCF				; StartZero = StartZero + diff
;	LD	EA,StartZero+2		; lsb
;	ADC	EA,YZ			;
;	LD	StartZero+2,EA		;
;	LD	EA,StartZero		; msb
;	REF     RADC_EAHL		;
;	LD	StartZero,EA		;		
;
;	REF	RSetBnd			; Set Zero Bound
;
;MainCalculate22
;	LD	A,#CreepTimer_RL4	; reset timer
;	BTST	ZeroOne			;
;	LD	A,#CreepTimer_RL6	;
;	LD	CreepTimer,A		;
;	BITR	TimrFinished		;
;
;	LD      A,#ZeroUpdate		;
;	LD      Tag2sec,A		;
;	BITR    CreepZero		;
;MainCalculate23	
;	CALLS	Chk_4stepChange		;
;	LD	HL,#PreviousCount	; AverageCount ---> PreviousCount
;	REF	RGetAverageCnt
;
;------------------------------------------------------------------------
;MainCalculate26
;----------------------------------------------------------
;MainCalculate29
;	REF	RCalWeightCnt	;
;=====================================
;MainCalculate2
;	BITR	OvrWtNow	;
;	CALLS	ChkOverloading	; Chk overload
;	JR	MainCalculate3	;
;	BITS	OvrWtNow	;
;	CALLS	OverloadingProc	;
;	RET			;
;
;MainCalculate3
;	BTSF	HoldRd		; check reading is hold now
;	RET
;
;	BITR	UdrWtNow	;
;	CALLS	ChkUnderweight	; Chk underweight
;	JR	UMainCalculate6	;
;	BITS	UdrWtNow	;
;	CALLS	UnderweightProc	;
;	BTST	UdrWtNow	;
;	JR	MainCalculate7	;
;	RET			;
;
;UMainCalculate6:
;	; add by hcy 03-12-1 18:27
;	BITR	UdrAlrDsp	; clr already display '----'		
;MainCalculate6
;	BITR	UdrWtNow	; Clear UdrWtNow
;	BITR	OvrWtNow	; Clear OvrWtNow
;	BITR	AutoZeroNow	; Disable Reset to Zero
;	LD	A,#BCNT2s_RL	;
;	LD	AutoZeroTim,A	; reload Auto zero timer
;
;MainCalculate7
;	BTST	SolLiqMode	; if Solid mode,
;	JR	MainCalculate8	; jump
;	BTST	UnitMode	;
;	JPS	CalculateML	;
;	JPS	CalculateFLOZ	; Remark for temporary Creep testing
;MainCalculate8
;	BTST	UnitMode	;
;	JPS	CalculateKG	;
;	JPS	CalculateLB	; Remark for temporary Creep testing

;***********************************************************
;	F: Calculate NewWeightCnt
;	I: AverageCount, ZeroCount
;	O: NewWeightCnt
CalWeightCount
	PUSH	EA
	PUSH	HL
	PUSH	WX

	; Show Zero in case of negative
	LD	HL,#ZeroCount		;
	LD	WX,#AverageCount	;
	REF	RCmpHex			; if @HL <= @WX, skip
	JPS	CalWeightCnt2		;

	; Modificated by Dennis 1-12-2003
	BTST	EnCreeping		; check creeping enable
	JPS	CalWeightCnt1
	; Show Zero in case of ZeroOne
	BTSF	ZeroOne
	JPS	CalWeightCnt2

CalWeightCnt1
	; NewWeightCnt = AverageCount - ZeroCount
	LD	HL,#ZeroCount
	LD	WX,#AverageCount
	REF	RSubHex			; HexBuf = @WX - @HL
	LD	EA,HexBuf+2
	LD	NewWeightCnt+2,EA
	LD	EA,HexBuf
	LD	NewWeightCnt,EA

	; display 2 grams until the actual weight is 3.5 grams
	LD	EA,#22			; Load 2 grams display magin
	REF	RPutDec

	LD	HL,#NewWeightCnt	; HL = HexBuf = AverageCount
	LD	WX,#DecBuf		; WX = DecBuf = PreviousCount
	REF	RCmpHex			; if @WX => @HL, skip
	JR	CalWeightCntE

	LD	EA,#12			; display 2 grams
	LD	NewWeightCnt+2,EA
	REF     RLD_EA0
	LD	NewWeightCnt,EA
	JR	CalWeightCntE

CalWeightCnt2
	REF	RLD_EA0			;
	LD	NewWeightCnt,EA		; MSB
	LD	NewWeightCnt+2,EA	; LSB

CalWeightCntE
	REF	RRET_WXHLEA



;***********************************************************
;	F: Calculate NewWeightCnt
;	I: AverageCount, ZeroCount
;	O: NewWeightCnt
;CalWeightCount
;	PUSH	EA
;	PUSH	HL
;	PUSH	WX
;
;	LD	HL,#ZeroCount		;
;	LD	WX,#AverageCount	;
;	REF	RCmpHex			; if @HL <= @WX, skip
;	JR	CalWeightCnt2		;
;
;	; NewWeightCnt = AverageCount - ZeroCount
;	LD	HL,#ZeroCount
;	LD	WX,#AverageCount
;	REF	RSubHex			; HexBuf = @WX - @HL
;	LD	EA,HexBuf+2
;	LD	NewWeightCnt+2,EA
;	LD	EA,HexBuf
;	LD	NewWeightCnt,EA
;	JR	CalWeightCntE
;
;CalWeightCnt2
;	REF	RLD_EA0			;
;	LD	NewWeightCnt,EA		; MSB
;	LD	NewWeightCnt+2,EA	; LSB
;
;CalWeightCntE
;	REF	RRET_WXHLEA

;***********************************************************
;	F: Take Average of 2 Samples Count
;	I: Samp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -