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

📄 cm-941.asm

📁 本程序是测试脂肪的程序,利用他可以测试一个人的身上有多少脂肪,但是精度不是很高的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		ANDI	FlgSet_12Hr,2
		JZ		LightColone
		JMP		FlashColone          						
ExtinguishClockHr:						;adjust clock_hr
		LDS		Dummy,		0           ;E_HR
		LCP		1,			Dummy	
		LCP		2,			Dummy
		ANDI	FlgSet_12Hr,2
		JZ		LightColone
		JMP		FlashColone

LightC_Clk:								;Dly clock
		MRW		Dummy,		SData1	
		LCT		4,			Dummy
		MRW		Dummy,		SData2
		LCT		3,			Dummy	
		
		LDA		SData4						
		STA		TempR2
		LDA		SData3
		STA		TempR1
		CALL	Set12hr
		MRW		Dummy,		TempR1
		LCT		2,			Dummy
		MRW		Dummy,		TempR2
		LCB		1,			Dummy		
		LDS		TempR0,		0
		LCP		6,			DisplayR	
		
		ANDI	KeyDoneFlg,	8
		JNZ		ExtinguishColone			   ;enter mainmode1 at first
		ANDI	FlgSet_12Hr,2
		JZ		LightColone
		JMP		FlashColone
;--------------------------		
DlyClock:                         		;MainMode= 0
		LDS		Dummy,	0
		LCP		9,		Dummy
		LCP		8,		Dummy
		LCP		5,		Dummy
		
		LDA		Pendulum1
		LCP		0,		Pendulum2	 	;DLY Pendulum Icon
		
		ANDI	AlmFlg,	1
		STA		Dummy
		LDS		TempR0,	0
		LCP		0AH,	Dummy      		;DLY ALM Icon
		
		LDA		Hr_L
		STA		TempR1
		LDA		Hr_H
		STA		TempR2		
		CALL	Set12hr
		MRW		Dummy,	Min_L		
		LCT		4,		Dummy
		MRW		Dummy,	Min_H
		LCT		3,		Dummy
		MRW		Dummy,	TempR1
		LCT		2,		Dummy
		MRW		Dummy,	TempR2
		LCB		1,		Dummy			;DLY CLOCK 
		LDS		Dummy,	0
		LCP		6,		DisplayR		;DLY AM/PM ICON
FlashColone:		
		LDA		R_2Hz
		JZ		ExtinguishColone    	;R_2Hz =1 ,Colone extinguish
LightColone:							;Dly colone Icon
		LDS		Dummy,	1
		LDS		TempR0,	0
		LCP		7,		Dummy
		RTS
ExtinguishColone:
		LDS		Dummy,	0
		LCP		7,		Dummy
		RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MeasureFat:
		LDA		M_FatFlg
		JZ		Exit_MeasureFat			;Measure Fat? No,exit
		
		SUBI	M_FatFlg,	1
		JZ		FatDelay5s				;First,	delay5s
		SUBI	M_FatFlg,	2			;Then,	check PortA.4 lo
		JZ		CheckFatLo				;The last,	After check PortA.4 hi , Count time  to Measure fat
		SUBI	M_FatFlg,	3
		JZ		CheckFatHi
		SUBI	M_FatFlg,	4
		JZ		TestFat
Exit_MeasureFat:
		NOP
		NOP
		RTS

;;;;;;;;
FatDelay5s:
		LDS		TempR0,		2
		SUB		MaxM_FatTm
		JC		Exit_MeasureFat			;not reach  5s ,exit
		LDS		M_FatFlg,		2
		RTS
CheckFatLo:
		IPA		Dummy
		JB3		Exit_MeasureFat
		LDS		M_FatFlg,		3
		RTS
CheckFatHi:
		IPA		Dummy
		JB3		$+2
		RTS	
		LDS		M_FatFlg,		4
		LDS		FatTest1,		0
		LDS		FatTest2,		0
		LDS		FatTest3,		0
		TM2X	001000011B			 ;(001)8*4/32.768=0.9765625ms
		RTS
;;;;;;;
TestFat:
		IPA		Dummy
		JB3		Exit_MeasureFat
		LDS		M_FatFlg,	5		;Stop Counting
		
		LDA		FatTest1
		STA		s1
		LDA		FatTest2
		STA		s2
		LDA		FatTest3
		STA		s3
	    call	Hex_Dex
		
		MRW		Dummy,		s1
		LCT		0DH,		Dummy
		MRW		Dummy,		s2
		LCT		0CH,		Dummy
		MRW		Dummy,		s3
		LCT		0BH,		Dummy
		
		LDS		TempR0,		01H		;Subtract 0A1H
		SUB*	FatTest1
		LDS		TempR0,		7	;dec the min time
		SBC*	FatTest2		
		LDS		TempR0,		0
		SBC*	FatTest3
		MAF		Dummy
		CALL	CheckFatError
		LDA		R_Error
		JZ		TestFat1
Re_MeasureFat:		
		LDS		M_FatFlg,	2
		LDS		R_Error,	0
		RTS
TestFat1:		
		CALL	CompareZ
		
		LDA		FatTest1
		ADD*	FatTest1
		LDA		FatTest2
		ADC*  	FatTest2
		LDA		FatTest3
		ADC*  	FatTest3
		MVU		FatTest3
		MVH		FatTest2
		MVL		FatTest1
		LDL		FatTest3,	@HL
		LDH*	FatTest4,	@HL
		LDL		FatTest1,	@HL
		LDH		FatTest2,	@HL
	    
	    LDA		FatTest1
		STA		s5
		LDA		FatTest2
		STA		s6
		LDA		FatTest3
		STA		s7
		LDA		FatTest4
		STA		s8
		
		
		
		MRW		Dummy,		s5
		LCT		11H,		Dummy
		MRW		Dummy,		s6
		LCT		10H,		Dummy
		MRW		Dummy,		s7
		LCT		0FH,		Dummy		
		MRW		Dummy,		s8
		LCT		0EH,		Dummy	
		
		
		LDA 	TestFatCnt
		JNZ		Re_MeasureFat
	
		CALL	Fatcal
		LDS		KeySound,	0FH
		ALM		80H
		LDA		R_Error
		JNZ		InactiveM_Fat1
;;;;;;;;;;;;;;;;;;;;;
CheckFat:
		ANDI	OptionR,		8
		JZ		CheckFatwomen
checkFatman:                    
		LDS		TempR0,3       
		SUB		Age2           
		JC		MenUnder30      

MenOver30:                      
		LDS		TempR0,	7       
		SUB		P_FAT2            
		LDS		TempR0,	1       
		SBC		P_FAT3            
		JNC		Thinest        
		LDS		TempR0,	4       
		SUB		P_FAT2            
		LDS		TempR0,	2       
		SBC		P_FAT3            
		JNC		Thin            
		LDS		TempR0,	6       
		SUB		P_FAT2            
		LDS		TempR0,	2       
		SBC		P_FAT3            
		JNC		Fat             
		JMP		Fatest          
MenUnder30:                     
		LDS		TempR0,	4       
		SUB		P_FAT2            
		LDS		TempR0,	1       
		SBC		P_FAT3            
		JNC		Thinest         
		LDS		TempR0,	1       
		SUB		P_FAT2            
		LDS		TempR0,	2       
		SBC		P_FAT3            
		JNC		Thin            
		LDS		TempR0,	6       
		SUB		P_FAT2            
		LDS		TempR0,	2       
		SBC		P_FAT3            
		JNC		Fat             
		JMP		Fatest          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
CheckFatwomen:
	
		LDS		TempR0,	3
		SUB		Age2
		JNC		WomenUnder30
WomenOver30:
		LDS		TempR0,	2
		SUB		P_FAT3
		JNC		Thinest
		LDS		TempR0,	8
		SUB		P_FAT2
		LDS		TempR0,2
		SBC		P_FAT3
		JNC		Thin
		LDS		TempR0,	1
		SUB		P_FAT2
		LDS		TempR0,	3
		SBC		P_FAT3
		JNC		Fat
Fatest:
		LDS		FatLevel,	8
		JMP		InactiveM_Fat
Fat:
		LDS		FatLevel,	4
		JMP		InactiveM_Fat
Thin:
		LDS		FatLevel,	2
		JMP		InactiveM_Fat
Thinest:
		LDS		FatLevel,	1
		JMP		InactiveM_Fat
WomenUnder30:
		LDS		TempR0,		7
		SUB		P_FAT2
		LDS		TempR0,		1
		SBC		P_FAT3
		JNC		Thinest		
		LDS		TempR0,		5
		SUB		P_FAT2
		LDS		TempR0,		2
		SBC		P_FAT3
		JNC		Thin
		LDS		TempR0,		1
		SUB		P_FAT2
		LDS		TempR0,		3
		SBC		P_FAT3
		JNC		Fat
		JMP		Fatest

InactiveM_Fat:	
		LDS		Mode1,		0
InactiveM_Fat1:		
		LDS		M_FatFlg,	0
		LDS		PortA,		2
		OPA		PortA
		RF		4H








			ORG		800H
;---------------------------------------------	
;Input:	TempR1(store the low index address of the Operated data)
;Output:No
;-----------------------------------------------
AddSecMin:				
		INC*	@HL   
		DAA*	@HL
		JNZ		Exit_AddSecMin		
		
		INC*	TempR1
		MVL		TempR1
		INC*	@HL
			
		LDS		TempR0,		6
		SUB		@HL
		JNZ		Exit_AddSecMin
		LDS		TempR0,		0
		STA  	@HL
Exit_AddSecMin:					
		RTS
	
;--------------------------------------------------
;Input:	TempR1(store the low index address of the Operated data)
;Output:No
;-------------------------------------------------
AddHour:
		INC*	@HL
		DAA*	@HL
		JNZ		AddHour1
		
		
		INC*	TempR1
		MVL		TempR1
		INC*	@HL
		RTS
AddHour1:	
		INC*	TempR1
		LDS		TempR0,		4
		SUB		@HL	
			
		MVL		TempR1
		LDS 	TempR0,		2
		SBC 	@HL
		JNZ		Exit_AddHour
	    
	    LDS		TempR0,		0
		STA		@HL
		DEC*	TempR1
		MVL		TempR1
		LDS		TempR0,		0
		STA		@HL
Exit_AddHour:
		RTS	
;------------------------------------------------
;---------------------------------------------	
;Input:	TempR1(store the low index address of the Operated data)
;Output:No
;-----------------------------------------------
SubSecMin:				
		DEC*	@HL   
		DAS*	@HL
		JC		Exit_SubSecMin		
		INC*	TempR1
		MVL		TempR1
		DEC*	@HL
		JC 		Exit_SubSecMin
		LDS		TempR0,		5
		STA		@HL	
Exit_SubSecMin:					
		RTS
	
;--------------------------------------------------
;Input:	TempR1(store the low index address of the Operated data)
;Output:No
;-------------------------------------------------
SubHour:
		DEC*	@HL
		DAS*	@HL
		JC		Exit_SubHour
		INC*	TempR1
		MVL		TempR1
		DEC*	@HL
		JC		Exit_SubHour
		LDS		TempR0,		2
		STA		@HL
		DEC*	TempR1
		MVL		TempR1
		LDS		TempR0,		3
		STA		@HL
Exit_SubHour:
		RTS	
;------------------------------------------------
Set12hr
		LDS		DisplayR,	0
		ANDI	FlgSet_12Hr,1
		JNZ		Exit_Set12hr
		
		LDS		TempR0,		2
		SUB		TempR1
		DAS		
		STA		TempR3
		
		LDS		TempR0,		1
		SBC		TempR2
		DAS
		STA		TempR4
		JNC	   	DisplayAM					
;DisplayPM:
		LDS		DisplayR,	2
		LDA		TempR4
		STA		TempR2
		LDA		TempR3
		STA		TempR1
		OR		TempR2
		JNZ		Exit_Set12hr
		LDS		TempR1,		2
		LDS		TempR2,		1
		RTS
DisplayAM:
		LDS 	DisplayR,   1
		LDA		TempR1
		OR		TempR2
		JNZ		Exit_Set12hr
		LDS		TempR1,		2
		LDS		TempR2,		1
Exit_Set12hr:			
		RTS
;;;;;;;;;;;;;;;;;;;;;
CheckFatError:
		ANDI	Dummy,		8           ;CF
		JC		CheckFatError1
		LDS		R_Error,	1
		RTS
CheckFatError1:		
		LDS		TempR0,		1
		SUB		FatTest1
		LDS		TempR0,		5
		SBC		FatTest2
		LDS		TempR0,		0
		SBC		FatTest3
		JNC		Exit_CheckFatError
		LDS		R_Error,	1
Exit_CheckFatError:		
		RTS
;;;;;;;;;;;;;;;;;;;;;
CompareZ:
		LDA		FatTest1
		SUB		FatTest1_1
		STA		Result1
		LDA		FatTest2
		SBC		FatTest2_1
		STA		Result2
		LDA		FatTest3
		SBC		FatTest3_1
		STA		Result3
		JC		OneGeTwo	
		
		LDA		FatTest1_1
		SUB		FatTest1
		STA		Result1
		LDA		FatTest2_1
		SBC		FatTest2
		STA		Result2
		LDA		FatTest3_1
		SBC		FatTest3
		STA		Result3
OneGeTwo:		
		LDS		TempR0,		2
		SUB		Result1
		LDS		TempR0,		0
		SBC		Result2
		LDS		TempR0,		0
		SBC		Result3
		JC		$+3		
		DEC*	TestFatCnt
		JMP		$+2
		
		LDS		TestFatCnt,		3
		LDA		FatTest1
		STA		FatTest1_1
		LDA		FatTest2
		STA		FatTest2_1
		LDA		FatTest3
		STA		FatTest3_1
		RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckBMIFlow:
	
 		LDS		TempR0,	 1
	    SUB		BMI2
	    LDS		TempR0,	 5
	    SBC		BMI3
	    JNC		CheckBMIFlow1
	    LDS		R_Error,	1
	    RTS
CheckBMIFlow1:
	    LDS		TempR0,	0
	    SUB		BMI1  	    
	    LDS		TempR0,	5
	  	SBC		BMI2
	  	LDS		TempR0,	0
	  	SBC		BMI3
	  	JC		$+2
	  	LDS		R_Error,	1
	  	RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckFatFlow:
		LDS		TempR0,	 1
	    SUB		P_FAT2
	    LDS		TempR0,	 6
	    SBC		P_FAT3
	    JNC		CheckFatFlow1
	    LDS		R_Error,	1
	    RTS
CheckFatFlow1:
	    LDS		TempR0,	0
	    SUB		P_FAT1	    
	    LDS		TempR0,	5
	  	SBC		P_FAT2
	  	LDS		TempR0,	0
	  	SBC		P_FAT3
	  	JC		$+2
	  	LDS		R_Error,	1
	  	RTS
;CALC OPRATION SUBROUTINE
;-----------------------------------------------------
;Fucion:Add /Sub / Mul / Div Operation
;input:R_A0,R_A1,R_A2,R_A3,R_A4,R_A5,R_A6  		 R_AP
;	   R_B0,R_B1,R_B2,R_B3,R_B4,R_B5,R_B6  		 R_BP
;output:R_W0,R_W1,R_W2,R_W3,R_W4,R_W5,R_W6,R_W7	 R_WP
;----------------------------------------------------
F_Add:
;
Stepadd1:
		CALL	ClearW
;------
Stepadd2:
		LDA		R_A6
		JNZ		Stepadd2_1
		INC*	R_AP
		CALL	LeftA
		JMP		Stepadd2				
Stepadd2_1:
		LDA		R_B6
		JNZ		Stepadd3
		INC*	R_BP
		CALL	LeftB
		JMP		Stepadd2_1
;------
Stepadd3:
		LDA		R_AP
		SUB		R_BP
		JNC		Stepadd3_2
		STA		TempR0
Stepadd3_1:
		LDA		TempR0
		JZ		Stepadd4
		CALL	RightB
		DEC*	R_BP
		DEC*	TempR0
		JMP		Stepadd3_1				
Stepadd3_2:
		LDA		R_BP
		SUB		R_AP
		STA		TempR0
Stepadd3_2_1:
		LDA		TempR0
		JZ		Stepadd4
		CALL	RightA
		DEC*	R_AP
		DEC*	TempR0
		JMP		Stepadd3_2_1		
;-------		
Stepadd4:
		CALL	CopyAtoW
		CALL	WaddB
;--------
Stepadd5:
		LDA		R_W7
		JZ		Stepadd6
		LDA		R_WP
		JNZ		Stepadd6
		LDS		R_Error,	1
		RTS
;-----
Stepadd6:
		LDA		R_W0
		JNZ		Stepadd7
		LDA		R_WP
		JZ		Stepadd7
		CALL	RightW
		DEC*	R_WP
		JMP		Stepadd6
		
Stepadd7:
		CALL	CopyWtoA
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Sub:
;---------
Stepsub1:
		CALL	ClearW
;-------
Stepsub2:
		LDA		R_A6
		JNZ		Stepsub2_1
		INC*	R_AP
		CALL	LeftA
		JMP		Stepsub2
Stepsub2_1:
		LDA		R_B6
		JNZ		Stepsub3
		INC*	R_BP
		CALL	LeftB
		JMP		Stepsub2_1
Stepsub3:
		LDA		R_AP
		SUB		R_BP
		JNC		Stepsub3_2
		STA		TempR0
Stepsub3_1:
		LDA		TempR0
		JZ		Stepsub4
		CALL	RightB
		DEC*	R_BP
		DEC*	TempR0
		JMP		Stepsub3_1
Stepsub3_2:
		LDA		R_BP
		SUB		R_AP
		STA		TempR0

Stepsub3_2_1:
		LDA		TempR0
		JZ		Stepsub4 
		CALL	RightA
		DEC*	R_AP
		DEC*	TempR0
		JMP		Stepsub3_2_1
;---------------
Stepsub4:
		CALL	CopyAtoW
		CALL	WsubB
;-------------
Stepsub5:
		LDA		R_W7
		JZ		Stepsub6
		LDA		R_WP
		JNZ		Stepsub6
		LDS		R_Error,	1
		RTS
Stepsub6:
		LDA		R_W0
		JNZ		Stepsub7
		LDA		R_WP
		JZ		Stepsub7
		CALL	RightW
		DEC*	R_WP
		JMP		Stepsub6
Stepsub7:
		CALL	CopyWtoA
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Mul:
Stepmul1:
		CALL	ClearW                     ;The first clear w & flg
Stepmul2:
		LDA		R_A6
		JNZ		Stepmul2_1
		INC*	R_AP
		CALL	LeftA
		JMP		Stepmul2
Stepmul2_1:
		LDA		R_B6
		JNZ		Stepmul3
		INC*	R_BP
		CALL	LeftB
		JMP		Stepmul2_1					;the second data shift the high bit 

Stepmul3:
		LDA		R_BP
		ADD		R_AP
		STA		R_WP						;R_AP +R_BP ---R_WP

Stepmul4:
		LDA		R_B0
		JZ		Stepmul7_1					
Stepmul5:
		LDS		TempR0,		0AH
		SUB		R_B0
		JZ		Stepmul10					;Mul Over
Stepmul6:
		LDA		R_WP
		JNZ		Stepmul7
		LDA		R_W1
		JZ		Stepmul7
		LDS		R_Error,	1
		RTS
Stepmul7:
		LDA		R_B0
		JZ		Stepmul7_1
		CALL	WaddA
		DEC*	R_B0
		JMP		Stepmul7
Stepmul7_1:
		DEC*	R_BP
		CALL	Right_B
		DEC*	R_WP
		CALL	RightW
Stepmul8:
		LDA		R_WP	
		JNZ		Stepmul9
		LDA		R_W7
		JZ		Stepmul9
		LDS		R_Error,	1
		RTS
Stepmul9:
		JMP		Stepmul4
Stepmul10:
		LDA		R_WP
		JZ		Stepmul10_1
		LDA		R_W0
		JNZ		Stepmul10_1
		DEC*	R_WP
		CALL	RightW
		JMP		Stepmul10
Stepmul10_1:
		CALL	CopyWtoA		
		RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Div:
StepDiv1:
		LDA		R_B0
		OR		R_B1
		OR		R_B2
		OR		R_B3
		OR		R_B4

⌨️ 快捷键说明

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