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

📄 xqb5030a.asm

📁 这是一个全自动洗衣机的控制器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:

; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
; ◆◆		"漂洗"过程		◆◆
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
WASH_RINSEING
	MOVW	A,#0
	MOV	A,LED_1ST
	MOVW	A,#TAB_RINSE_PROG
	CLRC
	ADDCW	A
	MOVW	EP,A
	MOV	A,@EP
	MOV	R7,A				; 程序偏移
	MOVW	A,#0
	MOV	A,WASH_STEPS
	MOVW	A,#TAB_RINSE			; "漂洗"过程表首址
	CLRC
	ADDCW	A				; + 步骤偏移
	ADDC	A,R7
	MOVW	EP,A
	MOVW	A,@EP				; 取数据
	MOVW	TIME_SECH,A			; 临时保存分步运行时间
	MOV	A,TIME_SECH
	AND	A,#11110000B			; 判正在进行哪个过程?
	CMP	A,#30H
	BEQ	JMP_300
	CMP	A,#90H
	BEQ	JMP_301
	CMP	A,#40H
	BEQ	JMP_302
	CMP	A,#50H
	BEQ	JMP_303
	CMP	A,#60H
	BEQ	JMP_304
	CMP	A,#70H
	BEQ	JMP_305
	CMP	A,#00H
	BEQ	JMP_306
	CMP	A,#10H
	BEQ	JMP_307
	CMP	A,#20H
	BEQ	JMP_308
	CMP	A,#0A0H
	BEQ	JMP_309
	RET
JMP_300
	JMP	STEP_OUTWATER			; 排水
JMP_301
	JMP	STEP_OUTWATER_1MIN		; 续排 1′
JMP_302
	JMP	STEP_SPIN_ONOFF			; 间断脱水
JMP_303
	JMP	STEP_SPIN_CONT			; 连续脱水
JMP_304
	JMP	STEP_SPIN_INERTIA		; 惯性脱水
JMP_305
	JMP	STEP_SPIN_BRAKE			; 刹车
JMP_306
	JMP	STEP_INWATER			; 进水
JMP_307
	JMP	STEP_RINSE_WASH			; 漂洗
JMP_308
	JMP	STEP_RINSE_BALANCE		; 平衡控制
JMP_309
	JMP	STEP_SPIN_CON_GENTLE		; 轻柔脱水

; ▲▲▲ 排水 ▲▲▲
STEP_OUTWATER
	BBC	TEST_OUTWATER,_OUTWATER_START
	CLRB	TEST_OUTWATER
	MOV	A,#0				; 判是否空桶
	CMP	A,FLAG_WATLVL
	BNE	_OUTWATER_START
	CLRB	TIME_SUB			; 减计时停止
	SETB	SPINING_DELAY9S			; 延时 9.5″开电机
	MOV	A,WASH_STEPS
	CLRC
	ADDC	A,#2				; 步骤 + 2
	MOV	WASH_STEPS,A
	MOV	A,WASHTIME_PROC			; 计时时间 - 2′
	CLRC
	SUBC	A,#2
	DAS					; BCD 码调整
	MOV	WASHTIME_PROC,A
	CALL	GET_DISPDATA			; 取数码管显示值
	MOV	TIME_SUB_4MS,#0
	MOV	TIME_SUB_1SEC,#0
	JMP	_OUTWATER_END
_OUTWATER_START
	MOVW	A,#120				; 2′
	MOVW	A,TIME_MAIN_SECH
	CMPW	A				; 排水是否超过 2′?
	BHS	_OUTWATER_3
	CLRB	TIME_SUB			; 减计时停止
	JMP	_OUTWATER_4
_OUTWATER_3
	SETB	TIME_SUB			; 减计时开始
_OUTWATER_4
	MOVW	A,#240				; 4′
	MOVW	A,TIME_MAIN_SECH
	CMPW	A				; 排水是否超过 4′?
	BHS	_OUTWATER_1
	SETB	OUTWATER_OVERTIME		; 排水超时报警标志
	SETB	FLAG_ALARM			; 有报警标志
	MOV	LED_4ST,#086H			; "E"
	MOV	LED_5ST,#0F9H			; "1"
	MOV	ELECTRO_STEPS,#0		; 报警鸣响周期
	MOV	TIME_MAIN_4MS,#0		; 清主计时单元
	MOV	TIME_MAIN_SECH,#0
	MOV	TIME_MAIN_SECL,#0
	MOV	TIME_BUZZER_4MS,#0		; 清鸣响计时单元
	MOV	COUNT_WARNING,#0		; 蜂鸣次数单元清零
	CLRB	BUZZER_ONOFF			; 置 ON 标志
	SETB	BUZZER_ALARM_START		; 开始周期鸣响
	RET
_OUTWATER_1
	MOV	A,#0				; 判是否达到设定水位?
	CMP	A,FLAG_WATLVL
	BEQ	_OUTWATER_END
	SETB	F_OUTWATER			; 打开排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	RET
_OUTWATER_END					; 达到设定水位
	MOV	A,WASH_STEPS
	CLRC
	ADDC	A,#2				; 步骤 + 2
	MOV	WASH_STEPS,A
	SETB	F_OUTWATER			; 打开排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	MOV	TIME_STEP_4MS,#0		; 清分步计时单元
	MOV	TIME_STEP_SECH,#0
	MOV	TIME_STEP_SECL,#0
	RET
; ▲▲▲ 续排 1′ ▲▲▲
STEP_OUTWATER_1MIN
	MOVW	A,#120				; 2′
	MOVW	A,TIME_MAIN_SECH
	CMPW	A				; 排水是否超过 2′?
	BHS	_OUTWATER_1MIN_1
	CLRB	TIME_SUB			; 减计时停止
_OUTWATER_1MIN_1
	MOV	A,TIME_SECH			; 判是否续排完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	_OUTWATER_1MIN_END
	SETB	F_OUTWATER			; 打开排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	RET
_OUTWATER_1MIN_END
	MOVW	A,#120				; 2′
	MOVW	A,TIME_MAIN_SECH
	CMPW	A				; 排水是否超过 2′?
	BLO	_OUTWATER_END
	MOV	A,WASHTIME_PROC
	CLRC
	SUBC	A,#1
	DAS					; BCD 码调整
	MOV	WASHTIME_PROC,A
	CALL	GET_DISPDATA			; 取数码管显示值
	MOV	TIME_SUB_4MS,#0
	MOV	TIME_SUB_1SEC,#0
	JMP	_OUTWATER_END
; ▲▲▲ 间断脱水 ▲▲▲
STEP_SPIN_ONOFF
	SETB	TIME_SUB			; 减计时开始
	SETB	_HOLD_SPINING			; 正在脱水状态
;	CALL	WARN_OPENCOVER			; 脱水时开盖检测
	BBS	FLAG_ALARM,_SPIN_QUIT		; 是否有报警?
	BBS	ADJUST,_SPIN_QUIT		; 是否"调整脱水不平衡"?
	MOV	A,TIME_SECH			; 判是否间断脱水完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	JMP_280				; 间脱完成
	SETB	F_OUTWATER			; 打开排水牵引器
	CALL	CTRL_SPIN30S			; 间断脱水
_SPIN_QUIT
	RET
; ▲▲▲ 连续脱水 ▲▲▲
STEP_SPIN_CONT
	SETB	TIME_SUB			; 减计时开始
	SETB	_HOLD_SPINING			; 正在脱水状态
;	CALL	WARN_OPENCOVER			; 脱水时开盖检测
	BBS	FLAG_ALARM,_SPIN_QUIT		; 是否有报警?
	BBS	ADJUST,_SPIN_QUIT		; 是否"调整脱水不平衡"?
	MOV	A,TIME_SECH			; 判是否连续脱水完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	_SPIN_CONT_END			; 连续脱水完成
	SETB	F_OUTWATER			; 打开排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	BBS	LED_GENTLE,GENTLE_NORMAL
	CALL	CTRL_SPINGENTLE			; 轻柔脱水
	RET
GENTLE_NORMAL
	SETB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
	RET
_SPIN_CONT_END
	CLRB	_HOLD_SPINING			; 不是脱水状态
	CLRB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
JMP_280
	JMP	_OUTWATER_END
; ▲▲▲ 惯性脱水 ▲▲▲
STEP_SPIN_INERTIA
	SETB	TIME_SUB			; 减计时开始
	BBS	KEY_DOOR,JMP_280		; 门盖是否打开?
	MOV	A,TIME_SECH			; 判是否惯性脱水完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	JMP_280				; 惯性脱水完成
	CLRB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
	SETB	F_OUTWATER			; 打开排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	RET
; ▲▲▲ 刹车 ▲▲▲
STEP_SPIN_BRAKE
	SETB	TIME_SUB			; 减计时开始
	MOV	A,TIME_SECH			; 判是否刹车完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	_SPIN_BRAKE_END			; 刹车完成
	CLRB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
	CLRB	F_OUTWATER			; 关闭排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	RET
_SPIN_BRAKE_END
	MOV	CTRL_OUTPUT,#0
	BBS	PROC_RINSE,_SPIN_BRAKE_99	; 判是"漂洗"过程或"脱水"过程?
	NOP					; "脱水"过程
	CLRB	PROC_SPIN			; 清"脱水"标志
	SETB	LED_SPIN			; "脱水"指示灯暗
	JMP	WASH_SET
_SPIN_BRAKE_99					; "漂洗"过程
	CLRB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
	CLRB	F_OUTWATER			; 关闭排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	MOV	A,WASH_STEPS
	CLRC
	ADDC	A,#2				; 步骤 + 2
	MOV	WASH_STEPS,A
	MOV	TIME_STEP_4MS,#0		; 清分步计时单元
	MOV	TIME_STEP_SECH,#0
	MOV	TIME_STEP_SECL,#0
	MOV	ELECTRO_STEPS,#0		; 洗涤周期
	RET
; ▲▲▲ 漂洗 ▲▲▲
STEP_RINSE_WASH
	SETB	TIME_SUB			; 减计时开始
	MOV	A,TIME_SECH			; 判是否漂洗完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	_SPIN_BRAKE_99
	MOVW	A,#60				; 后1′搅拌时同时进水
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BHS	_RINSE_WASH_1
	MOV	A,FLAG_WATLVL			; 判是否达到溢水水位
	CMP	A,#6
	BEQ	_RINSE_WASH_2
	SETB	F_INWATER			; 打开进水阀
	JMP	_RINSE_WASH_1
_RINSE_WASH_2
	CLRB	F_INWATER			; 关闭进水阀
_RINSE_WASH_1
	CLRB	F_OUTWATER			; 关闭排水牵引器
	CALL	CTRL_WASHING			; 搅拌洗衣
	RET
; ▲▲▲ 平衡控制 ▲▲▲
STEP_RINSE_BALANCE
	SETB	TIME_SUB			; 减计时开始
	MOV	A,TIME_SECH			; 判是否平衡控制完成
	AND	A,#00001111B
	MOV	TIME_SECH,A
	MOVW	A,TIME_SECH
	MOVW	A,TIME_STEP_SECH
	CMPW	A
	BLO	RINSE_BALANCE_END
	CALL	CTRL_BALANCE			; 平衡控制
	RET
RINSE_BALANCE_END				; 平衡控制完成
	CLRB	F_ELECMOTOR_Z			; 电机正转
	CLRB	F_ELECMOTOR_F			; 电机反转
	CLRB	F_OUTWATER			; 关闭排水牵引器
	CLRB	F_INWATER			; 关闭进水阀
	BBC	ADJUST,_BALANCE_4		; 是否"调整脱水不平衡"?
	BBS	ADJUST_FORM,WASH_RINSEING_END	; "脱水"过程中调整脱水不平衡,转
	NOP					; "漂洗"过程中调整脱水不平衡
	JMP	_BALANCE_5
_BALANCE_4
	BBC	LED_SPEEDY,WASH_RINSEING_END	; 是否"快速"程序?
	BBS	_RINSE_1_2,WASH_RINSEING_END	; 判第几次漂洗?是第二次漂洗,则结束漂洗过程
	SETB	_RINSE_1_2			; 置"第二次漂洗"
_BALANCE_5
	MOV	WASH_STEPS,#0			; 重新第一步开始
	MOV	TIME_STEP_4MS,#0		; 清分步计时单元
	MOV	TIME_STEP_SECH,#0
	MOV	TIME_STEP_SECL,#0
	MOV	ELECTRO_STEPS,#0		; 洗涤周期
	RET
; ▲▲▲ 漂洗过程完成 ▲▲▲
WASH_RINSEING_END
	CLRB	PROC_RINSE			; 清"漂洗"标志
	SETB	LED_RINSE			; "漂洗"指示灯暗
	JMP	WASH_SET
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
; ◆◆		"脱水"过程		◆◆
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
WASH_SPINING
	SETB	LED_RINSE			; "漂洗"指示灯暗

	MOVW	A,#0
	MOV	A,LED_1ST
	MOVW	A,#TAB_SPIN_PROG
	CLRC
	ADDCW	A
	MOVW	EP,A
	MOV	A,@EP
	MOV	R7,A				; 程序偏移
	MOVW	A,#0
	MOV	A,WASH_STEPS
	MOVW	A,#TAB_SPIN			; "脱水"过程表首址
	CLRC
	ADDCW	A				; + 步骤偏移
	ADDC	A,R7
	MOVW	EP,A
	MOVW	A,@EP				; 取数据
	MOVW	TIME_SECH,A			; 临时保存分步运行时间
	MOV	A,TIME_SECH
	AND	A,#11110000B			; 判正在进行哪个过程?
	CMP	A,#30H
	BEQ	JMP_400
	CMP	A,#90H
	BEQ	JMP_401
	CMP	A,#40H
	BEQ	JMP_402
	CMP	A,#50H
	BEQ	JMP_403
	CMP	A,#60H
	BEQ	JMP_404
	CMP	A,#70H
	BEQ	JMP_405
	RET
JMP_400
	JMP	STEP_OUTWATER			; 排水
JMP_401
	JMP	STEP_OUTWATER_1MIN		; 续排 1′
JMP_402
	JMP	STEP_SPIN_ONOFF			; 间断脱水
JMP_403
	JMP	STEP_SPIN_CONT			; 连续脱水
JMP_404
	JMP	STEP_SPIN_INERTIA		; 惯性脱水
JMP_405
	JMP	STEP_SPIN_BRAKE			; 刹车

; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	以下为洗衣机程序流程表		 	■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■

; ◆◆ 浸洗 ◆◆
TAB_SOAK
	.DATA.W		0078H			; 进水 2′
	.DATA.W		10B4H			; 搅拌 3′
	.DATA.W		8078H			; 浸泡 2′
	.DATA.W		103CH			; 搅拌 1′
	.DATA.W		821CH			; 浸泡 9′	15'
	.DATA.W		103CH			; 搅拌 1′
	.DATA.W		821CH			; 浸泡 9′	25'
	.DATA.W		103CH			; 搅拌 1′
	.DATA.W		821CH			; 浸泡 9′	35'
	.DATA.W		103CH			; 搅拌 1′
	.DATA.W		821CH			; 浸泡 9′	45'
TAB_SOAK_PROG
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,03H,02H,00H		; 低水位
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,04H,03H,00H		; 中水位
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,05H,04H,00H		; 高水位
; 说明: 本表对应表 TAB_SOAK                                                  ↑  ↑
;       右面的2个数据位置由 LED_1ST 的值产生                                 ┃  ┗ "标准"程序的浸泡过程中的浸泡次数
;                                                                            ┗ "加强" ...

; ◆◆ 洗涤 ◆◆
TAB_WASH
; 标准 -- 低水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1258H			; 搅拌 10′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 标准 -- 中水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		12D0H			; 搅拌 12′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 标准 -- 高水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1384H			; 搅拌 15′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 加强 -- 低水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1258H			; 搅拌 10′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 加强 -- 中水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		12D0H			; 搅拌 12′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 加强 -- 高水位
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1384H			; 搅拌 15′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
; 轻柔
	.DATA.W		0078H			; 进水 2′
	.DATA.W		10B4H			; 搅拌 3′
	.DATA.W		2000H			; 平衡 0″
	.DATA.W		0
	.DATA.W		0078H			; 进水 2′
	.DATA.W		10B4H			; 搅拌 3′
	.DATA.W		2000H			; 平衡 0″
	.DATA.W		0
	.DATA.W		0078H			; 进水 2′
	.DATA.W		10B4H			; 搅拌 3′
	.DATA.W		2000H			; 平衡 0″
	.DATA.W		0
; 快速
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1168H			; 搅拌 6′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1168H			; 搅拌 6′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1168H			; 搅拌 6′
	.DATA.W		201EH			; 平衡 30″
	.DATA.W		0
TAB_WASH_PROG
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,48H,00H,00H,00H,30H,00H,18H,00H,00H
; 说明: 本表对应表 TAB_WASH                         ↑              ↑      ↑  ↑
;       右面的4个数据位置由 LED_1ST 的值产生        ┃              ┃      ┃  ┗ "标准"程序的洗涤过程在上表中的起始地址
;                                                   ┃              ┃      ┗ "加强" ...
;                                                   ┃              ┗ "轻柔" ...
;                                                   ┗ "快速" ...

⌨️ 快捷键说明

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