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

📄 jiashiqi.asm

📁 加湿器程序源代码,4位机,tenx tm8726
💻 ASM
📖 第 1 页 / 共 5 页
字号:
DispTemperatureCF_3_2:
		lda		power_big
		jb0		DispTemperatureCF_3_3	
		jmp		DispTemperatureCF_3_4
DispTemperatureCF_3_3
		ori*	TempReg+4,0010b			
;------------;缺水显示
DispTemperatureCF_3_4:	
		lda		power_big
		jb3		DispTemperatureCF_3_5
		jmp		DispTemperatureCF_3_6
DispTemperatureCF_3_5:
		lda		Schmitt_on_off
		jb3		DispTemperatureCF_3_5_1
		lds		temp_2,1000b
		or*		Schmitt_on_off
		
		ori*	TempReg+3,0001b	
		jmp		DispTemperatureCF_3_6
DispTemperatureCF_3_5_1:
		lds		temp_2,0111b
		and*	Schmitt_on_off
		jmp		DispTemperatureCF_3_6
;------------连续运行标志
DispTemperatureCF_3_6:
		lda		Schmitt_on_off
		jb2		DispTemperatureCF_3_7
		jmp		DispTemperatureCF_3_8
DispTemperatureCF_3_7:
		ori*	TempReg+3,0010b	
;------------湿度达到则关闭湿度加湿标志
DispTemperatureCF_3_8:
		lda		disp_no
		jb0		DispTemperatureCF_3_9
		andi*	TempReg+4,1101b		;关闭大功率显示
		andi*	TempReg+3,0111b		;关闭小功率显示
		jmp		DispTemperatureCF_3_12
DispTemperatureCF_3_9:				;小功率长显示
		ori*	TempReg+3,1000b
DispTemperatureCF_3_10:
		lda		power_big
		jb3		DispTemperatureCF_3_11
		ori*	TempReg+3,1000b
		jmp		DispTemperatureCF_3_12
DispTemperatureCF_3_11:				;小功率长显示
		andi*	TempReg+4,1101b		;关闭大功率显示
		andi*	TempReg+3,0111b		;关闭小功率显示
;------------
DispTemperatureCF_3_12:
		ori*	TempReg+3,0100b
		lda		TempReg+3
		lcp		02h,TempReg+4
;-----------------------------------------设定时间
DispTemperatureCF_4:
		mrw		TempReg+2,timer_hour_h
		mrw		TempReg+1,timer_hour_l
		lda		TempReg+2
		jnz		DispTemperatureCF_4_1
DispTemperatureCF_4_no_1:
		lda		TempReg+1
		jz		DispTemperatureCF_4_no_2	;为0则不显示
		
DispTemperatureCF_4_1:
		call	reduce
		lda		TempReg+3
		jz		DispTemperatureCF_4_2
		
		lda		TempReg+1
		sta		TempReg+2
		call	Disp_table_end
		ori		TempReg+3,1000b
		lcp		03h,TempReg+4
		rts	
DispTemperatureCF_4_2:			
		lda		TempReg+1
		sta		TempReg+2
		call	Disp_table_end
		lda		TempReg+3
		lcp		03h,TempReg+4
		rts
DispTemperatureCF_4_no_2:
		lds		TempReg+3,0
		lcp		03h,TempReg+3
		rts
;-----------------------------------------设定湿度时闪动,关闭显示
screen_clr:
		lds		TempReg+3,0
		lcp		00h,TempReg+3
		lds		TempReg+3,0
		lcp		01h,TempReg+3
		rts
;-----------------------------------------关闭显示屏
screen_all_clr:
		lds		TempReg+4,0000b
		lds		TempReg+3,0000b
		lcp		00h,TempReg+4
		lcp		01h,TempReg+4
		lcp		02h,TempReg+4
		lcp		03h,TempReg+4
		rts
;-----------------------------------------
screen_all_disp:
		rts
;------------------------------------------


Disp_table_end:
		lds		TempReg+3,0011b			;TempReg+3=hgfe
		lds		TempReg+4,1111b			;TempReg+4=dcba
		subi	TempReg+2,00
		jz		Disp_table_end_1

		lds		TempReg+3,0000b
		lds		TempReg+4,0110b
		subi	TempReg+2,01
		jz		Disp_table_end_1

		lds		TempReg+3,0101b
		lds		TempReg+4,1011b
		subi	TempReg+2,02
		jz		Disp_table_end_1
		
		lds		TempReg+3,0100b
		lds		TempReg+4,1111b
		subi	TempReg+2,03
		jz		Disp_table_end_1
		
		lds		TempReg+3,0110b
		lds		TempReg+4,0110b
		subi	TempReg+2,04
		jz		Disp_table_end_1
		
		lds		TempReg+3,0110b
		lds		TempReg+4,1101b
		subi	TempReg+2,05
		jz		Disp_table_end_1
		
		lds		TempReg+3,0111b
		lds		TempReg+4,1101b
		subi	TempReg+2,06
		jz		Disp_table_end_1
		
		lds		TempReg+3,0000b
		lds		TempReg+4,0111b
		subi	TempReg+2,07
		jz		Disp_table_end_1
		
		lds		TempReg+3,0111b
		lds		TempReg+4,1111b
		subi	TempReg+2,08
		jz		Disp_table_end_1
		
		lds		TempReg+3,0110b
		lds		TempReg+4,1111b
		subi	TempReg+2,09
		jz		Disp_table_end_1

		rts

		lds		TempReg+3,0011b
		lds		TempReg+4,1000b
		subi	TempReg+2,10	;L
		jz		Disp_table_end_1
		
		lds		TempReg+3,0101b
		lds		TempReg+4,1100b
		subi	TempReg+2,11	;o
		jz		Disp_table_end_1
		
		lds		TempReg+3,0111b
		lds		TempReg+4,0110b
		subi	TempReg+2,12	;H
		jz		Disp_table_end_1
		
		lds		TempReg+3,0000b
		lds		TempReg+4,0110b
		subi	TempReg+2,13	;1
		jz		Disp_table_end_1
		rts
Disp_table_end_1
		rts
		
;------------------------------------十六进制分解为十进制
;TempReg+2,TempReg+1	为十六进制数
;TempReg+3,TempReg+1	为十进制数
;------------------------------------		
reduce:
		lds		TempReg+3,0
reduce_1:
		subi	TempReg+1,10
		jnc		reduce_2
		subi*	TempReg+1,10
		inc*	TempReg+3
		jmp		reduce_1
reduce_2:
		subi	TempReg+2,1
		jnc		reduce_3
		subi*	TempReg+1,10
		sbci*	TempReg+2,00
		inc*	TempReg+3
		jmp		reduce_1
reduce_3:
		rts
;**************************************************************************
;**************************************************************************
Initialize:
InitPortSub:
		lds   	TempReg+0,00H     ;output Port Initialize
		opb   	TempReg+0         ;output Port Initialize
		spb   	1111B             ;output Port Initialize

		spc   	10000B            ;Input Port Initialize



InitRAMSub_1:
	    lds   	TempReg+0,0fH     ;clear RAM 80h~1ffh
		lds   	TempReg+1,0fH
		lds		TempReg+2,01h
		lds		TempZero,00h
ClearRAMLoop:
		mvu		TempReg+2
		mvh   	TempReg+1
		mvl   	TempReg+0
		mrw   	@HL,TempZero
		subi* 	TempReg+0,01h
		sbci* 	TempReg+1,00h
		sbci*	TempReg+2,00h
		
		lda		TempReg+2
		jnz		ClearRAMLoop		
ClearRAMLoop_1:
		andi	TempReg+1,1000b
		jnz		ClearRAMLoop
		
InitRAMSub_2:						
	    lds   	TempReg+0,0fH     ;clear RAM 00h~6fh
		lds   	TempReg+1,06H
		lds		TempReg+2,00h		
		
ClearRAMLoop3:
		mvu		TempReg+2
		mvh   	TempReg+1
		mvl   	TempReg+0
		mrw   	@HL,TempZero
		subi* 	TempReg+0,01h
		sbci* 	TempReg+1,00h
		sbci*	TempReg+2,00h		
		
		jc    	ClearRAMLoop3

		rts
;**************************************************************************
;**************************************************************************
ClearBCF:       
		lda		IntFlag
		jnz		_rts
		rf		10B		  ;Clear BCF flag
_rts:
		rts
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
Reset:
;-------------------------------------------
		 fast
		sf		10h
;-------------------------------------------
disp_all_1:
		lds		TempReg+3,0fh
		lcp		00h,TempReg+3
		lcp		01h,TempReg+3
		lcp		02h,TempReg+3
		lcp		03h,TempReg+3
;-------------------------------------------
		 lds	temp_2,00h
		 opa	temp_2
		 opb	temp_2
		 opc	temp_2
		 opd	temp_2
		 spa	0fh;
		 spb	0fh;
		 spc	0fh;
		 spd	0fh;
		 lds	temp_2,00h
		 opa	temp_2
		 opb	temp_2
		 opc	temp_2
		 opd	temp_2
		 
		 sca   	000000B         ;prevent port A and C halt release
		 she   	0000000B        ;prevent timer1,2 int 0.5S RFC HaltRe
		 sie*  	0000000B        ;prevent all interrupts
		 sre   	0000000B        ;prevent all stop release source
		 rf    	10010101B       ;disable timer 1 reload function
								;disable watchdog
								;disable EL-light
								;clear CF
		 rf2   	111B            ;enable LCD
								;reset DED flag
								;disable timer 2 reload function
		 call   Initialize
		 plc   	1111111B      ;clear all the halt release flags
		 
		 lds    C_TIME1,7      ;inernal couter to control timer2 overflow times
		 lds    C_TIME2,0
		
		 srf    1AH            	;Build up the Rt NetWork and enable counter
		 
		 TMSX	7FH				;
		 tm2x   7FH				;
		 
		 lds	read_th,Rr_rt	;选择RT!
		 
		 sf		80h				;enable timer1 re-load
		 sf2    0011B			;enable timer2 re-load and set DED flag
		 
		 scc	1010010b
		 
		 spc	0fh				;disables all the pull-down devices on the internal IOC port
		 spkx	10110000b		;sets all the IOC pins as the output mode.		
		 
		 she   	28h		        ;enable 0.5 S ,key,halt release
		 sie*  	10010B          ;enable timer 1,2 interrupt
;-------------------------------------------
		 lds	disp_all_time,0fh;
		 lds	temp_6,0001b
		 opd	temp_6	

		 lds	buz_time,0fh
		 lds	consumer_set_humitity_h,03h
		 lds	consumer_set_humitity_l,02h		;预设50的湿度
		 lds	power_big,0001b
		 lds	Shortage_time,15	;缺水十五分钟后,关闭风扇
		 
		 spd	0fh;
		 spb	1110b;
MainProLoop:
		slow
		sf		10h
		halt
		fast
		MSC     TempReg+0       ;check 0.5 second halt release flag
		jb3     HaltRelease05Second
		MCX		TempReg+0       ;check  key
		jb0		key_putdown
		jmp   	MainProLoop
;**************************************************************************
;**************************************************************************
;**************************************************************************
HaltRelease05Second:
		plc		1000B		;Clear 0.5 second halt release flag
;----------------------------------------0.5*12*10*6*10=0.5*120*60=3600s,用于小时
hour_dec_part:					
		lda		delay_time
		jb0		hour_dec_part_in
		jmp		hour_dec_part_out_1
hour_dec_part_in:				;*12
		inc*	time_hour_1
		lds		temp_2,12
		sub		time_hour_1
		jz		hour_dec_part_1
		jmp		hour_dec_part_out
hour_dec_part_1:				;*10
		lds		time_hour_1,0
		inc*	time_hour_2
		lds		temp_2,10
		sub		time_hour_2
		jz		hour_dec_part_2
		jmp		hour_dec_part_out
hour_dec_part_2:				;*6
		lds		time_hour_2,0
		inc*	time_hour_3
		lds		temp_2,6
		sub		time_hour_3
		jz		hour_dec_part_3
		jmp		hour_dec_part_out
hour_dec_part_3:				;*10
		lds		time_hour_3,0
		inc*	time_hour_4
		lds		temp_2,10
		sub		time_hour_4
		jz		hour_dec_part_4
		jmp		hour_dec_part_out
hour_dec_part_4:
		lds		time_hour_4,0
		
		lds		temp_2,1
		sub*	timer_hour_l
		lds		temp_2,0
		sbc*	timer_hour_h
hour_dec_part_out:	
		lda		timer_hour_h
		or		timer_hour_l
		jz		off_machine
		jmp		hour_dec_part_out_1
hour_dec_part_out_1:
;----------------------------------用于分钟
minute_dec_part:
		lda		Shortage_time
		jz		minute_dec_part_out
		
		inc*	time_minute_1
		lds		temp_2,15
		sub		time_minute_1
		jz		minute_dec_part_1
		jmp		minute_dec_part_out
minute_dec_part_1:
		lds		time_minute_1,0
		inc*	time_minute_2
		lds		temp_2,8
		sub		time_minute_2
		jz		minute_dec_part_2
		jmp		minute_dec_part_out		
minute_dec_part_2:
		lds		time_minute_2,0
		dec*	Shortage_time
minute_dec_part_out:
;----------------------------------
		jmp		Ph15OverFlow
		
;		msc    	TempReg+0
;		jb2     Ph15OverFlow
;
;		inc*	SecondCounter
;		lds		TempReg+0,0010B
;		and		SecondCounter
;		jz      MainProLoop
;
;		lds		SecondCounter,00h
;		call  	EnableTimer2ToTestTemperature
;		jmp   	MainProLoop

Ph15OverFlow:
		call	CalculateTemperature
;		call	ClearBCF
		
		lda     IntFlag         	;Is data for test ready?
		jb3     again_1         	;Ready
		jmp   	MainProLoop
again_1:
		call	EnableTimer2ToTestTemperature
		jmp   	MainProLoop
;**************************************************************************
key_putdown:
;---------------------------2column
		spkx 	41h			;checks the key depressed on k1 column
		plc		20h			;Clear key halt release flag
		call	wait_scan_again
		ipc		TempReg+0
		jb0		on_off_key
;---------------------------1column
		spkx	40h			;checks the key depressed on k1 column
		call	wait_scan_again
		ipc		TempReg+0
		jb0		up_key
		jb1		down_key
		jb2		mode_key
		jb3		timer_key
		
		spkx	10110000b
		plc		20h
		jmp   	MainProLoop	
;---------------------------
wait_scan_again:
		halt
		plc		20h
		rts
;---------------------------
up_key:
		spkx	10110000b
		plc		20h
		
		lda		power_big
		jb2		up_key_in
		jmp   	MainProLoop
		
up_key_in:
		lds		buz_time,08h
			
		lds		temp_1,1101b		;按下时不闪动
		and*	power_big
		
		lda		humitity_set_time
		jnz		up_key_2
		lds		humitity_set_time,0fh
		jmp		up_key_end
up_key_2:
		lds		humitity_set_time,0fh
		lda		consumer_set_humitity_h
		sta		temp_1+1
		lda		consumer_set_humitity_l
		sta		temp_1
		
		subi	temp_1+1,06h
		jc		up_key_end
		
		subi	temp_1+1,05h
		jnc		up_key_1
		subi	temp_1,05h
		jnc		up_key_1
		
		lds		consumer_set_humitity_h,05h
		lds		consumer_set_humitity_l,0ah		;Co
		lds		temp_1,0100b
		or*		Schmitt_on_off
		jmp		up_key_end
		
up_key_1:						;+5
		addi*	temp_1,5
		adci*	temp_1+1,0
		mwr		consumer_set_humitity_h,temp_1+1
		mwr		consumer_set_humitity_l,temp_1
up_key_end:
		call	DispTemperatureCF

		jmp   	MainProLoop
;==============================		
down_key:
		spkx	10110000b
		plc		20h
		lda		power_big
		jb2		down_key_in
		jmp   	MainProLoop
		
down_key_in:
		lds		buz_time,08h

		lds		temp_1,1101b		;按下时不闪动
		and*	power_big
		
		lda		humitity_set_time
		jnz		down_key_3

⌨️ 快捷键说明

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