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

📄 mainloop.asm

📁 这是一个完整的除湿机方案!另包含SCH原理图。希望对用松翰单片机的朋友有帮助!
💻 ASM
字号:
start:
	nop
	call	pdelay
	@rst_wdt
	call	pdelay
	@rst_wdt
	call	pdelay
	call	PortInitial
	b0bts1	fnt0
	jmp	start10
	call	RAMInitial
start10:	
	call	SysInitial
	call	PortInitial
	mov	a,#5			;三声BUZZER
	mov	buzcount,a
	b0bclr	t500msflag
	clr	timer500ms
	clr	timer10ms
	b0bclr	t10msflag
	b0bset	buzzerflag
	b0bset	ptled2
start15:
	@rst_wdt
	call	timing
	b0bts1	t500msflag
	jmp	start15
	b0bclr	t500msflag
	notbit	buzzerflag
	decms	buzcount
	jmp	start15
	b0bclr	buzzerflag
	call	initdisplay
standby:
	@rst_wdt
	b0bclr	fp00ien
	b0bclr	fp00irq
	b0bclr	temphumiflag
	b0bclr	ptled1
	b0bclr	ptmg2
	b0bclr	ptcompres
	b0bclr	ptfanh
	b0bclr	ptfanl
	b0bclr	pttop123
	b0bclr	ptmg1
;	b0bset	ptled2
	call	timing

	b0bts1	t15sflag
	jmp	standby10
	b0bclr	t15sflag
	b0bset	ptled2
standby10:
	call	mnkey
	b0bts1	testmodef
	jmp	standby80
	b0bclr	ptled2		;开启背光
	clr	t15s
	b0bclr	t15sflag
	b0bts1	keyerrflag1
	jmp	standby50
	clr	Flag
	b0bset	testmodef
	b0bts0	testmfirf
	jmp	standby40
	b0bset	testmfirf
	b0bclr	t500msflag
	clr	timer500ms
;	clr	timer10ms
;	b0bclr	t10msflag
	b0bset	buzzerflag
	mov	a,#1
	mov	buzcount,a
	jmp	start15
standby40:
	call	SetLCD
	jmp	standby
standby50:
	call	SetLCD
	b0bts1	t5sflag
	jmp	standby
	b0bclr	testmodef
	b0bset	ptled2
standby80:
	call	turnofflcd
	b0bts1	keyflag			;AN2是否按下
	jmp	standby
	b0bclr	keyflag
	b0bclr	ptled2		;开启背光
	clr	t15s
	b0bclr	t15sflag
	clr	keycode
	clr	Flag
	clr	Flag1
	clr	flag3
	clr	flag6
	clr	flag7
	b0bts0	firstandbyf
	jmp	mainadd
	b0bset	firstandbyf
	clr	keycodeold
;;;;;;;;;;;;;;;;;;;
	clr	flag3old	
	b0bset	lcdt1flag
	b0bclr	lcdt2flag
	b0bclr	lcdt3flag
	mov	a,flag3
	mov	flag3old,a
	b0bset	ptcompres
	b0bset	ptfanl
	b0bclr	ptfanh
	b0bset	ptcompresf
	b0bset	ptfanlf
	b0bclr	ptfanhf
	mov	a,flag6
	mov	flag6old,a
	mov	a,flag7
	mov	flag7old,a
	mov	a,#0
	mov	preset_dis,a
	mov	preset_disold,a

mainadd:
	b0bclr	t500msflag
	clr	timer500ms
;	clr	timer10ms
;	b0bclr	t10msflag
	b0bset	buzzerflag
	b0bset	lcdt1flag
	mov	a,#1
	mov	buzcount,a


	b0bclr	tempfirflag		;开机时取消温湿度的误差限制
	b0bclr	humidfirflag
;	mov	buzcountold,a
mainadd80:				;恢复保存值
	@rst_wdt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	mov	a,Flagold
;	mov	Flag,a

	b0bclr	nooperationf
;	b0bclr	flash456f
;	b0bclr	lindwarfirf
;	b0bclr	lindwarfirf2
	b0bts1	ptled1f		;闪动变成789,闪动时不保留其状态,pt789f仍为闪之前状态,以此进行恢复
	jmp	mainadd0
	b0bset	ptled1
	b0bset	ptled1f
	jmp	mainadd00
mainadd0:
	b0bclr	ptled1
	b0bclr	ptled1f
mainadd00:


	mov	a,keycodeold
	mov	keycode,a
;	mov	a,buzcountold
;	mov	buzcount,a
	mov	a,preset_disold
	mov	preset_dis,a
	mov	a,flag3old
	mov	flag3,a
	mov	a,flag6old
	mov	flag6,a
	mov	a,flag7old
	mov	flag7,a
	b0bclr	keepflag
	b0bts1	ptcompresf
	jmp	mainadd81
	b0bset	turnonflag
	jmp	mainadd82
mainadd81:
	b0bclr	ptcompres
mainadd82:
	b0bts1	ptfanhf
	jmp	mainadd83
	b0bset	ptfanh
	jmp	mainadd84
mainadd83:
	b0bclr	ptfanh
mainadd84:
	b0bts1	ptfanlf
	jmp	mainadd85
	b0bset	ptfanl
	jmp	mainadd86
mainadd85:
	b0bclr	ptfanl
mainadd86:
	b0bts1	pt789f
	jmp	mainadd87
	b0bset	pt789
	jmp	mainadd88
mainadd87:
	b0bclr	pt789
mainadd88:
;	b0bts1	ptled1f
;	jmp	mainadd89
;	b0bset	ptled1
;	jmp	mainadd90
;mainadd89:
;	b0bclr	ptled1
mainadd90:
	b0bts1	ptmg2f
	jmp	mainadd91
	b0bclr	ptmg2
	b0bclr	ptmg2f
	jmp	mainadd92
mainadd91:
	b0bclr	ptmg2
	b0bclr	ptmg2f		;恢复时抽水机不工作
mainadd92:
;	b0bts1	pttop123f
;	jmp	mainadd93
;	b0bset	pttop123
;	jmp	mainadd94
;mainadd93:
;	b0bclr	pttop123
mainadd94:
	b0bts1	ptmg1f
	jmp	mainadd95
	b0bclr	ptmg1
	b0bclr	ptmg1f
	jmp	mainadd96
mainadd95:
	b0bclr	ptmg1
	b0bclr	ptmg1f
mainadd96:

				;预设值
	b0mov	y,#lcdwtable$m
	b0mov	z,#lcdwtable$l
	swap	preset_dis
	and	a,#0fh
	add	z,a
	movc
	mov	seg18,a
	mov	a,r
	mov	seg17,a
	b0mov	y,#lcdwtable$m
	b0mov	z,#lcdwtable$l
	mov	a,preset_dis
	and	a,#0fh
	add	z,a
	movc
	mov	seg16,a
	mov	a,r
	or	a,#00010000b
	mov	seg15,a
	mov	a,seg14
	or	a,#00010000b
	mov	seg14,a
;	call	LCDON

main:
	@rst_wdt
	call	timing
	b0bts0	nooperationf		;为1时LIND WATER超过两分钟不进行其他动作
	jmp	main19


	mov	a,buzcount
	b0bts0	fz
	jmp	main10
	b0bts1	t500msflag
	jmp	main10
	notbit	buzzerflag
	b0bclr	t500msflag

	decms	buzcount
	jmp	main10
	b0bclr	buzzerflag


main10:
	b0bts1	flashflag
	jmp	main11
	b0bts1	tim500msflag
	jmp	main11
	b0bclr	tim500msflag
;	b0bts1	flashfirf
;	jmp	main11
;	b0bclr	flashfirf
	notbit	lcdt4flag
;	jmp	main13
;main11:
;	b0bset	flashfirf

main11:
	b0bts1	turnonflag		;压缩机保护
	jmp	main13	
	b0bts1	t3minflag
	jmp	main13
	b0bset	ptcompres	
	b0bset	ptcompresf
	b0bclr	turnonflag
	b0bclr	firturnoffflg
main13:
	b0bts1	t15sflag
	jmp	main14
	b0bclr	t15sflag
	b0bset	ptled2
main14:
	call	tempretp
	b0bts1	detctflag
	jmp	main15
	b0bclr	detctflag
	mov	a,temp4
	mov	data1,a
	mov	a,temp5
	mov	data2,a
	call	detector
	b0bset	detctflag1

main15:
	call	humidretp
	b0bts1	humidcomflag		;湿度是否小于预设值
	jmp	main16
	b0bclr	humidcomflag
	mov	a,humid_dis_i
	sub	a,preset_dis
	b0bts0	fc
	jmp	main16add
	b0bclr	lcdt1flag
	b0bclr	lcdt2flag
	b0bclr	lcdt3flag
	b0bset	flashflag

	b0bts0	firturnoffflg
	jmp	main15add
	b0bset	firturnoffflg				
	clr	t1min		;压缩机保护
	clr	t3min
	b0bclr	t3minflag
main15add:
	b0bclr	turnonflag
	b0bclr	ptcompres
	b0bclr	ptfanl
	b0bclr	ptfanh
	b0bclr	ptcompresf
	b0bclr	ptfanlf
	b0bclr	ptfanhf
	b0bclr	pt789
	b0bclr	pt789f
	b0bclr	lcdt5flag


	jmp	main16
main16add:
	b0bts0	hightolflag
	jmp	main16add1
	b0bset	lcdt1flag
	b0bclr	lcdt2flag
	b0bclr	lcdt3flag
	
	b0bset	turnonflag

;	b0bset	ptcompres
	b0bset	ptfanl
	b0bclr	ptfanh
;	b0bset	ptcompresf
	b0bset	ptfanlf
	b0bclr	ptfanhf
	jmp	main16
main16add1:
	b0bclr	lcdt1flag
	b0bset	lcdt2flag
	b0bset	lcdt3flag
	b0bset	turnonflag
;	b0bset	ptcompres
	b0bset	ptfanh
	b0bclr	ptfanl
;	b0bset	ptcompresf
	b0bset	ptfanhf
	b0bclr	ptfanlf


main16:

	b0bts1	ptcompresf	;是否要除霜
	jmp	main19
	b0bts1	detctflag1
	jmp	main18
	b0bclr	detctflag1
	mov	a,temp_dis_i
	sub	a,#00010110b	;BCD 16  #00010110b
	b0bts0	fc
	jmp	main17
	b0bset	frogflag
	jmp	main18
main17:
	b0bclr	frogfirsf
	b0bclr	frogflag
	b0bclr	frogisflag
	b0bclr	lcdt5flag
	b0bclr	pt789
	b0bclr	pt789f
	b0bts1	ptcompresf
	jmp	main17add
	b0bset	turnonflag
	jmp	main18
main17add:
	b0bclr	ptcompres
main18:
	b0bts1	frogflag		;除霜
	jmp	main19
	b0bts0	frogfirsf
	jmp	main18add1
	b0bset	frogfirsf
	b0bts0	testflag
	jmp	main18a1
	clr	t40min
	clr	t60s
	b0bclr	t40minflag
	jmp	main18add1
main18a1:
	clr	time8s
	b0bclr	time8sflag

main18add1:
	b0bts1	testflag
	jmp 	main18a2 
	b0bts1	time8sflag
	jmp	main18add2
	b0bclr	time8sflag
	b0bset	frogisflag
	clr	time2s
	b0bclr	time2sflag
	jmp	main18add2
main18a2:		
	b0bts1	t40minflag
	jmp	main18add2
	b0bclr	t40minflag
	b0bset	frogisflag
	clr	t10min
	clr	t60s
	b0bclr	t10minflag
main18add2:
	b0bts1	frogisflag
	jmp	main19
	b0bset	lcdt5flag
	b0bset	pt789
	b0bset	pt789f

	b0bts0	firturnoffflg
	jmp	main18add3
	b0bset	firturnoffflg
	clr	t1min		;压缩机保护
	clr	t3min
	b0bclr	t3minflag

main18add3:
	b0bclr	turnonflag

	b0bclr	ptcompres
;	b0bclr	ptcompresf

	b0bts1	testflag
	jmp	main18a3
	b0bts1	time2sflag
	jmp	main19
	b0bclr	time2sflag
	jmp	main18a4
main18a3:
	b0bts1	t10minflag
	jmp	main19
	b0bclr	t10minflag
main18a4:
	b0bclr	frogisflag
	b0bclr	frogfirsf
	b0bset	ptcompres
;	b0bset	ptcompresf
	b0bclr	lcdt5flag
	b0bclr	pt789
	b0bclr	pt789f	
main19:
	call	mnkey
	b0bts0	nooperationf		;为1时LIND WATER超过两分钟不进行其他动作
	jmp	main35

	b0bts1	keyflag			;AN2有按下时
	jmp	main30
	b0bclr	keyflag
	b0bclr	ptled2		;开启背光
	clr	t15s
	b0bclr	t15sflag
	b0bclr	t500msflag
	clr	timer500ms
;	clr	timer10ms
	b0bset	buzzerflag
	mov	a,#1
	add	buzcount,a
	b0bts0	hightolflag
	jmp	main20
	b0bset	lcdt1flag
	b0bclr	lcdt2flag
	b0bclr	lcdt3flag
	b0bset	turnonflag
;	b0bset	ptcompres
	b0bset	ptfanl
	b0bclr	ptfanh
;	b0bset	ptcompresf
	b0bset	ptfanlf
	b0bclr	ptfanhf
	jmp	main21
main20:
	b0bclr	lcdt1flag
	b0bset	lcdt2flag
	b0bset	lcdt3flag
	b0bset	turnonflag
;	b0bset	ptcompres
	b0bset	ptfanh
	b0bclr	ptfanl
;	b0bset	ptcompresf
	b0bset	ptfanhf
	b0bclr	ptfanlf
main21:
	b0bset	flashflag
	clr	ww0
	mov	a,keycode
	sub	a,#1
	mov	ww1,a
main22:
	mov	a,ww1
	b0bts0	fz
	jmp	main25
	mov	a,#5
	add	ww0,a
	decms	ww1
	nop
	jmp	main22	
main25:
	mov	a,#30
	add	a,ww0
	mov	r0,a
	call	CHA_HEX1BTOBCD
	mov	a,r2
	mov	preset_dis,a
	b0mov	y,#lcdwtable$m
	b0mov	z,#lcdwtable$l
	swap	preset_dis
	and	a,#0fh
	add	z,a
	movc	
	mov	seg18,a
	mov	a,r
	mov	seg17,a
	b0mov	y,#lcdwtable$m
	b0mov	z,#lcdwtable$l
	mov	a,preset_dis
	and	a,#0fh
	add	z,a
	movc	
	mov	seg16,a
	mov	a,r
	or	a,#00010000b
	mov	seg15,a
	mov	a,seg14
	or	a,#00010000b
	mov	seg14,a
main30:
	b0bts1	an1flag
	jmp	main35
	b0bclr	an1flag
	b0bclr	ptled2		;开启背光
	clr	t15s
	b0bclr	t15sflag
	b0bclr	t500msflag
	clr	timer500ms
;	clr	timer10ms
;	b0bclr	t10msflag
;	b0bclr	tim500msflag
	b0bset	buzzerflag
	mov	a,#1
	add	buzcount,a
	b0bts0	ledfirf
	jmp	main31
	b0bset	ptled1
	b0bset	ptled1f
	b0bset	ledfirf
	jmp	main32	
main31:
	b0bclr	ptled1
	b0bclr	ptled1f
	b0bclr	ledfirf
main32:
main35:
	b0bts0	lindwarisf		;已处于警示状态
	b0bclr	lindflag

	b0bts1	lindflag
	jmp	main37
	b0bclr	lindflag
	b0bts0	ptled1f
	jmp	main36
	b0bset	mg1flag
	b0bclr	mg2flag
	b0bclr	ptmg2
	b0bclr	ptmg2f
	b0bclr	mg1firsf
	b0bclr	mgendflag
	jmp	main37
main36:
	b0bset	mg2flag
	b0bclr	mg1flag	
	b0bclr	ptmg1
	b0bclr	ptmg1f
	b0bclr	mg1firsf
	b0bclr	mgendflag
main37:
	b0bts1	mg1flag		;MG1自动抽水
	jmp	main42
	b0bts0	mg1firsf
	jmp	main38
	b0bset	mg1firsf
	b0bset	ptmg1
	b0bset	ptmg1f
	clr	t1000ms
	mov	a,#3
	mov	tns,a
	b0bclr	mgendflag
	b0bclr	kipflag
main38:
	b0bts0	kipflag
	jmp	main39
	mov	a,tns
	b0bts1	fz
	jmp	main40
	b0bclr	ptmg1
	b0bclr	ptmg1f
	clr	t1000ms
	mov	a,#2
	mov	tns,a
	b0bset	kipflag	
main39:
	b0bts0	mgendflag
	jmp	main40
	mov	a,tns
	b0bts1	fz
	jmp	main40
	b0bset	ptmg1
	b0bset	ptmg1f
	clr	t1000ms
	mov	a,#30
	mov	tns,a
	b0bset	mgendflag
main40:
	b0bts1	mgendflag
	jmp	main42
	mov	a,tns
	b0bts1	fz
	jmp	main42
	b0bclr	ptmg1
	b0bclr	ptmg1f
	b0bclr	mg1flag	
	b0bclr	mg1firsf
	b0bclr	mgendflag		
main42:
				;MG2自动抽水
	b0bts1	mg2flag		
	jmp	main52
	b0bts0	mg1firsf
	jmp	main45
	b0bset	mg1firsf
	b0bset	ptmg2
	b0bset	ptmg2f
	clr	t1000ms
	mov	a,#3
	mov	tns,a
	b0bclr	mgendflag
	b0bclr	kipflag
main45:
	b0bts0	kipflag
	jmp	main46
	mov	a,tns
	b0bts1	fz
	jmp	main48
	b0bclr	ptmg2
	b0bclr	ptmg2f
	clr	t1000ms
	mov	a,#2
	mov	tns,a
	b0bset	kipflag	
main46:
	b0bts0	mgendflag
	jmp	main48
	mov	a,tns
	b0bts1	fz
	jmp	main48
	b0bset	ptmg2
	b0bset	ptmg2f
	clr	t1000ms
	mov	a,#120
	mov	tns,a
	b0bset	mgendflag
main48:
	b0bts1	mgendflag
	jmp	main52
	mov	a,tns
	b0bts1	fz
	jmp	main52
	b0bclr	ptmg2
	b0bclr	ptmg2f
	b0bclr	mg2flag	
	b0bclr	mg1firsf
	b0bclr	mgendflag

main52:
	b0bts1	lindwarflag		;警示
	jmp	main52add
	b0bset	lindwarisf
	b0bclr	mg1flag
	b0bclr	mg2flag
	
;	b0bclr	lindwarflag
main52add:
	b0bts1	lindwarisf
	jmp	main60	
	b0bts0	lindwarfirf2
	jmp	main53
	b0bset	lindwarfirf2
	clr	t1000ms
	clr	timerms
	clr	timer5min
	b0bclr	time5minf
	b0bts0	ptled1f
	jmp	main52add00
	b0bset	ptmg1
	b0bclr	ptmg2
	jmp	main53
main52add00:
	b0bset	ptmg2
	b0bclr	ptmg1
main53:
	b0bts1	time5minf
	jmp	main60
	b0bclr	ptmg1
	b0bclr	ptmg2
	b0bts0	lindwarflag
	jmp	main53add
	b0bclr	flash456f
	b0bclr	lindwarisf
	b0bclr	lindwarfirf
	b0bclr	lindwarfirf2
	b0bclr	buzzerflag
	b0bclr	nooperationf
	b0bclr	keepflag
	jmp	mainadd80	;恢复原先值
main53add:	
	b0bts0	lindwarfirf
	jmp	main55
	b0bset	lindwarfirf
	clr	t1000ms
	mov	a,#30
	mov	tns,a
main55:
	mov	a,tns
	b0bts0	fz
	jmp	main56
	b0bts1	t500msflag
	jmp	main60
	b0bclr	t500msflag
	notbit	buzzerflag
	jmp	main60
main56:				;30秒后
	call	turnofflcd
;	b0bclr	lindwarisf
;	b0bclr	lindwarfirf
;	b0bclr	lindwarfirf2
;	b0bclr	time5minf
;	b0bclr	ptmg2

	b0bts0	firturnoffflg
	jmp	main56add
	b0bset	firturnoffflg

	clr	t1min		;压缩机保护
	clr	t3min
	b0bclr	t3minflag
main56add:
	b0bclr	ptcompres
	b0bclr	ptfanh
	b0bclr	ptfanl
	b0bclr	ptmg1
	b0bclr	ptmg2
	b0bclr	buzzerflag
	b0bclr	ptbuzz
	b0bclr	fp00ien
	b0bclr	fp00irq
	b0bclr	temphumiflag
;	b0bclr	ptmg2f
;	b0bclr	ptcompresf
;	b0bclr	ptfanhf
;	b0bclr	ptfanlf
;	b0bclr	ptmg1f
 	b0bset	ptled2
	b0bset	keepflag
	b0bset	flash456f		;led1闪
	b0bset	nooperationf
	jmp	main
main57:	
main60:

				;保存状态
	b0bts0	keepflag
	jmp	main30add1
	mov	a,keycode
	mov	keycodeold,a

	mov	a,preset_dis
	mov	preset_disold,a
	mov	a,flag3
	mov	flag3old,a
	mov	a,flag6
	mov	flag6old,a
	mov	a,flag7
	mov	flag7old,a
main30add1:
	b0bts1	offflag			;关机
	jmp	main30add2
	b0bclr	offflag

	b0bclr	t500msflag
	clr	timer500ms

	b0bset	buzzerflag
	mov	a,#1
	mov	buzcount,a
	b0bset	ptled2

	b0bts0	firturnoffflg
	jmp	main30adda
	b0bset	firturnoffflg
	clr	t1min		;压缩机保护
	clr	t3min
	b0bclr	t3minflag
main30adda:
	b0bclr	ptcompres
	b0bclr	ptfanl
	b0bclr	ptfanh
	b0bset	keyerrflag1
	b0bset	keepflag
	b0bclr	pt789
	b0bclr	pt789f
	jmp	start15
main30add2:

	b0bts1	topflag		;key top 
	jmp	main80
	b0bset	keepflag
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	mov	a,Flag
;	mov	Flagold,a
	b0bset	pttop123
	b0bset	pttopfirf2
	b0bts0	pttopfirf	
	jmp	main81
	b0bset	pttopfirf
	b0bclr	t500msflag
	clr	timer500ms
;	clr	timer10ms
;	b0bclr	t10msflag
	b0bset	buzzerflag
	mov	a,#19		;10声	2*n-1
	mov	buzcount,a	
main81:


	b0bts0	firturnoffflg
	jmp	main81add
	b0bset	firturnoffflg
	clr	t1min		;压缩机保护
	clr	t3min
	b0bclr	t3minflag
main81add:
	b0bclr	turnonflag

	b0bclr	ptcompres
	b0bclr	ptfanl
	b0bclr	ptfanh
;	b0bclr	ptcompresf
;	b0bclr	ptfanlf
;	b0bclr	ptfanhf
	b0bset	pttop123
;	b0bset	pttop123f
	b0bset	lcdt6flag
	jmp	main85
main80:	
	b0bclr	pttop123
	b0bclr	pttop123f

	b0bclr	pttopfirf
	b0bclr	lcdt6flag
	b0bts1	pttopfirf2
	jmp	main80add
	b0bclr	pttopfirf2
	jmp	mainadd80
main80add:	
main85:

	call	display
	jmp	main

⌨️ 快捷键说明

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