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

📄 jiashiqi.asm

📁 加湿器程序源代码,4位机,tenx tm8726
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;output:TempReg+3
;          TempReg+7~4/RtRFC2~1~0=TempReg+3
;**********************************************
TempReg7To4_SubRtRFC:
		lds     TempReg+3,00h
		lds     TempReg+2,00h
		lds     TempReg+1,00h
SubAgain:
		lda     RtRFC0
		sub     TempReg+4
		lda     RtRFC1
		sbc     TempReg+5
		lda     RtRFC2
		sbc     TempReg+6
		lda     RtRFC3
		sbc     TempReg+7
		sbci    TempReg+8,00
		jnc     SubRts
		

		addi*   TempReg+3,01h
		adci*	TempReg+2,00h
		adci*	TempReg+1,00h
		
		lda     RtRFC0
		sub*    TempReg+4
		lda     RtRFC1
		sbc*    TempReg+5
		lda     RtRFC2
		sbc*    TempReg+6
		lda     RtRFC3
		sbc*    TempReg+7
		sbci*   TempReg+8,00
		jmp     SubAgain
SubRts:
		rts
;**************************************************************************
;name:GetTemperatureFromTab:
;input:Result3,Result2,Result1,Result0
;output:TemperatureC1,TemperatureC0,(hex code Table Index)
;
;**************************************************************************
GetTemperatureFromTab:
		lda		read_th
		jb0		temperature_GetTemperatureFromTab
;********************************************
;********************************************		
humidity_GetTemperatureFromTab:
;--------------------------------------------确定温度
		lds		humidity_disp_l,0dh
		lds		humidity_disp_h,01h		;29湿度起

		lda		TemperatureC0
		sta		TempReg+8
		lda		TemperatureC1
		sta		TempReg+9
		
		or      TempReg+8          		;温度为0则显示Lo
		or      TempReg+9
		jz		humidity_value_too_low
		
		lds		Result0,0fh				;温度超过40显示H1
		lds		Result1,0fh
		call	CompareResultWithTempReg_2bit
		jz		humidity_value_OutOfRange	;温度超过40?
;---------------------------------------------------------1degree
		lds		TemperatureTableAddrL,04
		lds		TemperatureTableAddrH,05
		lds		TemperatureTableAddrF,00
		mvu		TemperatureTableAddrF
		mvh     TemperatureTableAddrH
		mvl     TemperatureTableAddrL			;表格

		lds		Result0,2				;先读取1degree表首
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取3degree表首
		lds		Result0,4
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value
		
		call	table_humidity			;先读取5degree表首
		lds		Result0,6
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value	

		call	table_humidity			;先读取7degree表首
		lds		Result0,8
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value	

		call	table_humidity			;先读取9degree表首		
		lds		Result0,10
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取11degree表首		
		lds		Result0,12
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取13degree表首		
		lds		Result0,14
		lds		Result1,0
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取15degree表首	
		lds		Result0,0
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取17degree表首	
		lds		Result0,2
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取19degree表首	
		lds		Result0,4
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取21degree表首	
		lds		Result0,6
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取23degree表首	
		lds		Result0,8
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取25degree表首	
		lds		Result0,10
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取27degree表首	
		lds		Result0,12
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取29degree表首	
		lds		Result0,14
		lds		Result1,1
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取31degree表首	
		lds		Result0,0
		lds		Result1,2
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取33degree表首	
		lds		Result0,2
		lds		Result1,2
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取35degree表首	
		lds		Result0,4
		lds		Result1,2
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取37degree表首	
		lds		Result0,6
		lds		Result1,2
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value

		call	table_humidity			;先读取39degree表首	
		lds		Result0,8
		lds		Result1,2
		call	CompareResultWithTempReg_2bit
		jnc		humidity_value
;		jz		humidity_value
;--------------------------------------------
temperature_zero:
temperature_40degree:
		rts
;--------------------------------------------		
humidity_value:
;		lda		Result_rh0
;		sta		Result0
;		lda		Result_rh1
;		sta		Result1
;		lda		Result_rh2
;		sta		Result2
;		lda		Result_rh3
;		sta		Result3
;		mvu		TemperatureTableAddrF
;		mvh     TemperatureTableAddrH
;		mvl     TemperatureTableAddrL			;表格
;------------------------------------------湿度太低判断
		lda		Result_rh4
		jnz		humidity_value_too_low
		call	GIVE_DEC_DIGITAL
		jz		humidity_value_too_low
;-----------------------------------------
		call	GetDataFromTabLeAndIncHL
		call	CompareResultWithTempReg
		jnc		humidity_value_too_low
;-----------------------------------不低于一定湿度,则		
		mvu		TemperatureTableAddrF
		mvh     TemperatureTableAddrH
		mvl     TemperatureTableAddrL			;表格
;-----------------------------------		
		lds		humidity_disp_H1_Lo_Co,0
humidity_value_LookUpAgain:
		call	GetDataFromTabLeAndIncHL
		jz		humidity_value_OutOfRange	
		call	CompareResultWithTempReg
		jnc		humidity_value_get
		
		call	humidity_value_add
		jmp		humidity_value_LookUpAgain
humidity_value_too_low:
		lds		humidity_disp_H1_Lo_Co,1
		rts
humidity_value_OutOfRange:
		lds		humidity_disp_H1_Lo_Co,2
		rts
humidity_value_add:
		lds		TempReg+0,02h
		add*	humidity_disp_l
		lds		TempReg+0,00h
		adc*    humidity_disp_h
		rts
humidity_value_get:
		rts
;********************************************
;********************************************为温度求值部分1
temperature_GetTemperatureFromTab:
		lda		Result_rt0
		sta		Result0
		lda		Result_rt1
		sta		Result1
		lda		Result_rt2
		sta		Result2
		lda		Result_rt3
		sta		Result3
		
		lda		Result0
		or      Result1
		or      Result2
		or      Result3
		jz		TemperatureOutOfRange_1		;Temperature Too Low  ;Result<TempReg温度低于0度则显示00
		

		lds		TempReg+0,TemperatureTabAddressL
		lds		TempReg+1,TemperatureTabAddressH
LookUpBegin:
		mvu		TempZero
		mvh     TempReg+1
		mvl     TempReg+0

		lds		TemperatureC1,00h
		lds		TemperatureC0,00h

;		call    GetDataFromTabLeAndIncHL
;		mwr     TemperatureTableAddrL,TempReg+0
;		mwr     TemperatureTableAddrH,TempReg+1
;		call	CompareResultWithTempReg
;		jnc     TemperatureOutOfRange_1    		;Temperature Too Low  ;Result<TempReg

LookUpAgain:
		call    GetDataFromTabLeAndIncHL
		jz      TemperatureOutOfRange_2         ;Table end Flag is found
		call	CompareResultWithTempReg
		jnc     GetResult					  	;Result>TempReg

		call    TemperatureInc1Degree
		jmp     LookUpAgain

TemperatureOutOfRange_1:			;温度低于0度
		lds		TemperatureC1,00h
		lds		TemperatureC0,00h
		rts
TemperatureOutOfRange_2:			;温度大于40度
		lds		TemperatureC1,0fh
		lds		TemperatureC0,0fh
		rts
GetResult:
		rts
;--------------------------------------------为温度求值部分2
TemperatureInc1Degree:
;------------------用于查湿度表,十六进制
		lds		TempReg+0,01h                   ;Temperature Inc 1 Degree,
		add*    TemperatureC0             ;because Temperature table
		lds		TempReg+0,00h
		adc*    TemperatureC1
		rts
;***************************************
;***************************************比较大小
CompareResultWithTempReg_2bit:
		lda     Result0
		sub     TempReg+8
		lda     Result1
		sbc     TempReg+9
		rts
;***************************************比较大小
CompareResultWithTempReg:
		lda     Result0
		sub     TempReg+4
		lda     Result1
		sbc     TempReg+5
		lda     Result2
		sbc     TempReg+6
		lda     Result3
		sbc     TempReg+7
		rts
;***************************************查表
;***************************************
GetDataFromTabLeAndIncHL:
		ldh		TempReg+7,@hl
		ldl*    TempReg+6,@hl
		ldh		TempReg+5,@hl
		ldl*    TempReg+4,@hl
		or      TempReg+5          		;check table end flag
		or      TempReg+6
		or      TempReg+7
		rts
;**************************************切换表格
;**************************************
table_humidity:
		mrw		TempReg+5,TemperatureTableAddrL
		mrw		TempReg+6,TemperatureTableAddrH		
		mrw		TempReg+7,TemperatureTableAddrF
		
		addi*	TempReg+5,08h
		adci*	TempReg+6,03h
		adci*	TempReg+7,00h
		
		mwr		TemperatureTableAddrL,TempReg+5
		mwr		TemperatureTableAddrH,TempReg+6	
		mwr		TemperatureTableAddrF,TempReg+7
		
		mvu		TemperatureTableAddrF
		mvh     TemperatureTableAddrH
		mvl     TemperatureTableAddrL			;表格
		rts	
;**************************************湿度表格加2
;**************************************
table_ok:
		mrw		TempReg+5,TemperatureTableAddrL
		mrw		TempReg+6,TemperatureTableAddrH		
		mrw		TempReg+7,TemperatureTableAddrF
		
		addi*	TempReg+5,02h
		adci*	TempReg+6,00h
		adci*	TempReg+7,00h
		
		mvu		TemperatureTableAddrF
		mvh     TemperatureTableAddrH
		mvl     TemperatureTableAddrL			;表格
		rts
;************************************************************************
GIVE_DEC_DIGITAL:
		lda		Result_rh3
		sta		Result3
		lda		Result_rh2
		sta		Result2
		lda		Result_rh1
		sta		Result1
		lda		Result_rh0
		sta		Result0							;放入比较数值
		or      Result1          		;check table end flag
		or      Result2
		or      Result3
		rts
;**************************************************************************
;**************************************************************************
;name:DispTemperatureCF
;input:TempReg+4,TempReg+3,TempReg+2,(Bcd code)
;      Tempra*F2,Tempra*1, Tempra*0
;
;**************************************************************************
DispTemperatureCF:
		lda		disp_all_time
		jnz		screen_all_disp
		lda		power_big
		jb2		DispTemperatureCF_x_next;开
		jmp		screen_all_clr			;关
;--------------温度和湿度显示转化部分
DispTemperatureCF_x_next:
		jmp		DispTemperatureCF_x
;		lda		read_th
		jb1		DispTemperatureCF_x
;--------------
		mrw		TempReg+2,TemperatureC1
		mrw		TempReg+1,TemperatureC0
		jmp		DispTemperatureCF_1			;此部为设定显示温度,保留
DispTemperatureCF_x:
		lda		humitity_set_time
		jnz		DispTemperatureCF_1_set		;是否处于设定湿度状态
		lda		humidity_disp_H1_Lo_Co
		jz		DispTemperatureCF_1_2		;判断湿度是否超过范围
		mrw		TempReg+1,humidity_disp_H1_Lo_Co
		subi	TempReg+1,1
		jz		DispTemperatureCF_1_low		;湿度太低
		subi	TempReg+1,2
		jz		DispTemperatureCF_1_high	;湿度太高
		rts
;=========================================;湿度太低;湿度太高
DispTemperatureCF_1_low:
		lds		TempReg+3,0011b
		lds		TempReg+4,1000b
		lda		TempReg+3
		lcp		00h,TempReg+4
		
		lds		TempReg+3,0101b
		ori*	TempReg+3,1000b	;显示当前湿度标志
		lds		TempReg+4,1100b
		lda		TempReg+3
		lcp		01h,TempReg+4
		jmp		DispTemperatureCF_3
DispTemperatureCF_1_high:
		lds		TempReg+3,0111b
		lds		TempReg+4,0110b
		lda		TempReg+3
		lcp		00h,TempReg+4
		
		lds		TempReg+3,0000b
		ori*	TempReg+3,1000b	;显示当前湿度标志
		lds		TempReg+4,0110b
		lda		TempReg+3
		lcp		01h,TempReg+4
		jmp		DispTemperatureCF_3
;=========================================
DispTemperatureCF_1_set:			;显示设定湿度
		mrw		TempReg+2,consumer_set_humitity_h
		mrw		TempReg+1,consumer_set_humitity_l
		
		lda		power_big
		jb1		DispTemperatureCF_1_set_3
		jmp		DispTemperatureCF_1_set_1
DispTemperatureCF_1_set_3:	
		lds		temp_2,1101b		;闪动
		and*	power_big
		
		call	screen_clr				;设定时闪烁	
		jmp		DispTemperatureCF_3
DispTemperatureCF_1_set_1:
		lds		temp_2,0010b		;闪动
		or*		power_big

		subi	TempReg+2,5				;如果小于85则显示正常设定数值
		jnz		DispTemperatureCF_1
		subi	TempReg+1,0ah
		jnz		DispTemperatureCF_1
		
		lds		TempReg+3,0011b
		lds		TempReg+4,1001b
		ori*	TempReg+3,1000b
		lcp		00h,TempReg+4			;C
		
		lds		TempReg+3,0101b
		lds		TempReg+4,1100b
		lda		TempReg+3
		lcp		01h,TempReg+4			;o
		jmp		DispTemperatureCF_3
;------------------------------------------;显示实际湿度
DispTemperatureCF_1_2:				
		mrw		TempReg+2,humidity_disp_h
		mrw		TempReg+1,humidity_disp_l
;-----------------------------------------高位数值温度
DispTemperatureCF_1:
		call	reduce
		lda		TempReg+3
		sta		TempReg+2
		call	Disp_table_end
		
		lda		humitity_set_time			;判断是否处于设定状态
		jz		DispTemperatureCF_1_1
		ori*	TempReg+3,1000b
		
DispTemperatureCF_1_1:
		lda		TempReg+3
		lcp		00h,TempReg+4
		lda		TempReg+1
		sta		TempReg+2
		call	Disp_table_end
		
		lda		humitity_set_time			;判断是否处于设定状态,如果不为设定状态则显示当前湿度图标
		jnz		DispTemperatureCF_1_3
		ori*	TempReg+3,1000b
DispTemperatureCF_1_3:
		lda		TempReg+3
		lcp		01h,TempReg+4
;-----------------------------------------
DispTemperatureCF_3:
		lds		TempReg+3,0
		lds		TempReg+4,0
;------------;无定时,有定时,定时标志
		lda		timer_hour_h
		jnz		DispTemperatureCF_3_1
		lda		timer_hour_l
		jnz		DispTemperatureCF_3_1
		jmp		DispTemperatureCF_3_2	
DispTemperatureCF_3_1:					
		ori*	TempReg+4,0101b
;------------;显示大功率标志

⌨️ 快捷键说明

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