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

📄 xqb5030a.asm

📁 这是一个全自动洗衣机的控制器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
; ◆◆ 漂洗 ◆◆
TAB_RINSE
; "标准"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		505AH			; 连脱 1′30″
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1078H			; 搅拌 2′
	.DATA.W		201EH			; 平衡 30″
; "加强"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		505AH			; 连脱 1′30″
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1078H			; 搅拌 2′
	.DATA.W		201EH			; 平衡 30″
; "轻柔"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		0A014H			; 轻柔脱水 20″
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
	.DATA.W		0078H			; 进水 2′
	.DATA.W		1078H			; 搅拌 2′
	.DATA.W		2000H			; 平衡 0″
; "快速"程序
	.DATA.W		301EH			; 排水 30″
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		501EH			; 连脱 30″
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
	.DATA.W		0078H			; 进水 2′
	.DATA.W		105AH			; 搅拌 1′30″
	.DATA.W		201EH			; 平衡 30″
TAB_RINSE_PROG
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,36H,00H,00H,00H,24H,00H,12H,00H,00H
; 说明: 本表对应表 TAB_RINSE                        ↑              ↑      ↑  ↑
;       右面的4个数据位置由 LED_1ST 的值产生        ┃              ┃      ┃  ┗ "标准"程序的漂洗过程在上表中的起始地址
;                                                   ┃              ┃      ┗ "加强" ...
;                                                   ┃              ┗ "轻柔" ...
;                                                   ┗ "快速" ...

; ◆◆ 脱水 ◆◆
TAB_SPIN
; "标准"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		512CH			; 连脱 5′
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
; "加强"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		512CH			; 连脱 5′
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
; "轻柔"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		5096H			; 连脱 2.5′
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
; "快速"程序
	.DATA.W		3078H			; 排水 2′
	.DATA.W		903CH			; 续排 1′
	.DATA.W		401EH			; 间脱 30″
	.DATA.W		5028H			; 连脱 40″
	.DATA.W		601EH			; 惯脱 30″
	.DATA.W		7005H			; 刹车 5″
TAB_SPIN_PROG
	.DATA.B		00H,00H,00H,00H,00H,00H,00H,24H,00H,00H,00H,18H,00H,0CH,00H,00H
; 说明: 本表对应表 TAB_SPIN                         ↑              ↑      ↑  ↑
;       右面的4个数据位置由 LED_1ST 的值产生        ┃              ┃      ┃  ┗ "标准"程序的漂洗过程在上表中的起始地址
;                                                   ┃              ┃      ┗ "加强" ...
;                                                   ┃              ┗ "轻柔" ...
;                                                   ┗ "快速" ...

; 上表数据说明:	BIT 15 14 13 12 -- 	0000: 进水
;					0001: 搅拌
;					0010: 平衡控制
;					0011: 排水
;					0100: 间断脱水
;					0101: 连续脱水
;					0110: 惯性脱水
;					0111: 刹车
;					1000: 浸泡,停止搅拌 (浸洗过程中)
;					1001: 排水时续排1min
;					1010: 轻柔脱水
;		BIT 11 ... 0 -- 该过程的时间(妙数)

; ◆◆ 水位频率值 ◆◆
TAB_FREQ_1
	.DATA.W		0245H			; 空
	.DATA.W		0238H			; 水位 1
	.DATA.W		0234H			; 水位 2
	.DATA.W		022BH			; 水位 3
	.DATA.W		0224H			; 水位 3
	.DATA.W		0220H			; 水位 5
	.DATA.W		021BH			; 水位 6
	.DATA.W		0216H			; 水位 7
	.DATA.W		0212H			; 水位 8
	.DATA.W		020DH			; 水位 9
	.DATA.W		0207H			; 水位 10
	.DATA.W		0200H			; 溢水

; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	子程序: 脱水时门盖打开检测		■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
SPINING_OPENCOVER
	BBS	KEY_SAFE,OPEN_100
	RET
OPEN_100
	SETB	SPIN_OPENCOVER			; 脱水时门盖打开报警
	MOV	LED_4ST,#086H			; "E"
	MOV	LED_5ST,#0A4H			; "2"
OPEN_110
	SETB	FLAG_ALARM			; 有报警标志
	CLRB	TIME_SUB			; 减计时停止
	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		; 开始周期鸣响
	BBS	BESPEAK_OPENCOVER,OPEN_102
	MOV	A,CTRL_OUTPUT			; 关断控制输出
	AND	A,#01100000B
	MOV	CTRL_OUTPUT,A
	CALL	CONTROL_OUTPUT
	MOV	TIME_OUTKEY_4MS,#0		; 清计时单元
OPEN_101
	CMP	TIME_OUTKEY_4MS,#125		; 延时 0.5″
	BLO	OPEN_101
OPEN_102
	MOV	CTRL_OUTPUT,#0			; 关断控制输出
	CALL	CONTROL_OUTPUT
	RET

; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	子程序: 预约时门盖打开检测		■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
BESPEAKING_OPENCOVER
	BBS	KEY_SAFE,OPEN_200
	RET
OPEN_200
	SETB	BESPEAK_OPENCOVER		; 预约时门盖打开报警
	MOV	LED_4ST,#086H			; "E"
	MOV	LED_5ST,#0C0H			; "0"
	JMP	OPEN_110
	
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	子程序: 脱水不平衡检测			■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
SPINING_NOBALANCE
	BBS	KEY_BALANCE,OPEN_300
	RET
OPEN_300
	MOV	CTRL_OUTPUT,#01100000B		; 关断电机
	CALL	CONTROL_OUTPUT
	MOV	TIME_OUTKEY_4MS,#0		; 清计时单元
OPEN_301
	CMP	TIME_OUTKEY_4MS,#125		; 延时 0.5″
	BLO	OPEN_301
	MOV	CTRL_OUTPUT,#0			; 关断控制输出
	CALL	CONTROL_OUTPUT
	MOV	A,TIMES_ADJUST
	INCW	A				; 次数 + 1
	MOV	TIMES_ADJUST,A
	CMP	A,#3
	BHS	OPEN_400
	SETB	ADJUST				; 脱水不平衡调整


OPEN_400
	SETB	SPIN_NOBALANCE			; 检测到脱水不平衡
	MOV	LED_4ST,#086H			; "E"
	MOV	LED_5ST,#0B0H			; "3"
	JMP	OPEN_110

; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	子程序: 水位传感器异常检测		■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
TEST_WATERSENSOR
	MOVW	A,WATLVL_FREQ_RESERVE_H		; 实际水位频率
	MOVW	A,#180H
	CLRC
	CMPW	A
	BLO	WS_100
	RET
WS_100
	SETB	ERR_SENSOR			; 水位传感器异常
	MOV	LED_4ST,#086H			; "E"
	MOV	LED_5ST,#082H			; "6"
	JMP	OPEN_110

; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■						■■
; ■■	中断TC1: LED显示/计时 (周期:4MS)	■■
; ■■	使用:	A,R5,EP	(需保护)		■■
; ■■	调用:	DISPLAY				■■
; ■■						■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
INTTC1
	PUSHW 	A				; 保护
	PUSHW	IX
	XCHW 	A,T
	PUSHW 	A
	MOVW	A,EP
	PUSHW	A
	MOVW	A,PS
	PUSHW	A

	MOVW	A,PS
	SWAP
	MOV	A,#08H				; BANK 1
	SWAP
	MOVW	PS,A

	BBS	TIF0,TIMER_0
	BBS	TIF1,TIMER_1
	JMP	INTTC_END
; ◆◆ 水位频率计数 ◆◆
TIMER_0
	SETB	TFCR0				; Clears compare match detection flag
	MOVW	A,WATLVL_FREQ_H			; 每 20 个脉冲计数一次
	INCW	A
	MOVW	WATLVL_FREQ_H,A
	JMP	INTTC_END
; ◆◆ 计时 ◆◆
TIMER_1
	SETB	TFCR1				; Clears compare match detection flag
; 鸣响计时
	MOV	A,TIME_BUZZER_4MS
	INCW	A
	MOV	TIME_BUZZER_4MS,A
; 音乐铃声计时
	MOV	A,TIME_MUSIC_4MS
	INCW	A
	MOV	TIME_MUSIC_4MS,A
	CMP	A,#31
	BLO	TIME_88
	MOV	TIME_MUSIC_4MS,#0
	MOV	A,TIME_MUSIC_125MS
	INCW	A
	MOV	TIME_MUSIC_125MS,A
TIME_88
; LED闪烁计时
	MOV	A,TIME_TWINKLE_4MS
	INCW	A
	MOV	TIME_TWINKLE_4MS,A
; 按键去抖计时
	MOV	A,TIME_OUTKEY_4MS
	INCW	A
	MOV	TIME_OUTKEY_4MS,A
; 取水位频率计数
	MOV	A,TIME_WATLVL_4MS
	INCW	A
	MOV	TIME_WATLVL_4MS,A
	CMP	A,#125
	BLO	TIME_99
	MOV	TIME_WATLVL_4MS,#0		; 每 500ms 取频率计数一次
	MOVW	A,WATLVL_FREQ_H
	MOVW	WATLVL_FREQ_RESERVE_H,A		; 临时保存实时测得的值
	MOV	R0,#0
GET_FREQ_LOOP
	MOVW	A,#0
	MOV	A,R0
	MOVW	A,#TAB_FREQ			; 表首址
	CLRC
	ADDCW	A				; + 偏移量
	MOVW	EP,A
	MOVW	A,@EP				; 取数据
	INC	R0
	INC	R0
	MOVW	IX,A
	SWAP
	AND	A,#0FH
	SWAP
	MOVW	A,WATLVL_FREQ_H
	CMPW	A
	BLO	GET_FREQ_1
	MOVW	A,IX				; 设定值 >= 实测值
	SWAP
	RORC	A
	RORC	A
	RORC	A
	RORC	A
	AND	A,#00001111B
	MOV	FLAG_WATLVL,A			; 取测得的水位值 (00 ... 06)
	MOV	WATLVL_FREQ_H,#0
	MOV	WATLVL_FREQ_L,#0
	JMP	TIME_99
GET_FREQ_1
	CMP	R0,#14
	BLO	GET_FREQ_LOOP
	MOV	FLAG_WATLVL,#05			; 空
	MOV	WATLVL_FREQ_H,#0
	MOV	WATLVL_FREQ_L,#0
; 电机转动计时 / 延时开电机(脱水时暂停后又启动)
TIME_99
	MOV	A,TIME_TURN_4MS
	INCW	A
	MOV	TIME_TURN_4MS,A
	CMP	A,#25
	BLO	TIME_100
	MOV	TIME_TURN_4MS,#0
	MOV	A,TIME_TURN_100MS
	INCW	A
	MOV	TIME_TURN_100MS,A
; 无水检测
TIME_100
	MOV	A,TIME_RETURN_4MS
	INCW	A
	MOV	TIME_RETURN_4MS,A
	CMP	A,#25
	BLO	TIME_101
	MOV	TIME_RETURN_4MS,#0
	MOV	A,TIME_RETURN_100MS
	INCW	A
	MOV	TIME_RETURN_100MS,A
TIME_101
	BBC	KEY_STARTHOLD,TIME_400		; 是否[启动]洗涤开始?
; 进水,排水,...计时				; 只在[启动]时计时 ★★★
	MOV	A,TIME_MAIN_4MS
	INCW	A
	MOV	TIME_MAIN_4MS,A
	CMP	A,#250
	BLO	TIME_200
	MOV	TIME_MAIN_4MS,#0
	MOVW	A,TIME_MAIN_SECH
	INCW	A
	MOVW	TIME_MAIN_SECH,A
TIME_200
; 分步计时					; 只在[启动]时计时 ★★★
	MOV	A,TIME_STEP_4MS
	INCW	A
	MOV	TIME_STEP_4MS,A
	CMP	A,#250
	BLO	TIME_300
	MOV	TIME_STEP_4MS,#0
	MOVW	A,TIME_STEP_SECH
	INCW	A
	MOVW	TIME_STEP_SECH,A
TIME_300
; 洗衣减计时
	BBS	FLAG_ALARM,TIME_400		; 是否发生报警?
	BBC	TIME_SUB,TIME_400		; 是否洗涤时减计时?
	MOV	A,TIME_SUB_4MS
	INCW	A
	MOV	TIME_SUB_4MS,A
	CMP	A,#250
	BLO	TIME_400
	MOV	TIME_SUB_4MS,#0
	MOV	A,TIME_SUB_1SEC
	INCW	A
	MOV	TIME_SUB_1SEC,A			; ″
	CMP	A,#60
	BLO	TIME_400
	MOV	TIME_SUB_1SEC,#0
	MOV	A,WASHTIME_PROC
	CLRC
	SUBC	A,#1				;  - 1′
	DAS					; BCD 码调整
	MOV	WASHTIME_PROC,A
	CALL	GET_DISPDATA			; 取数码管显示值
TIME_400
; 预约时减计时
	BBS	FLAG_ALARM,JMP_900		; 是否发生报警?
	BBS	TIME_BESPEAK_SUB,BESPEAK_CON
JMP_900
	JMP	TIME_500
BESPEAK_CON
	MOV	A,BESPEAK_SUB_1MIN
	OR	A,BESPEAK_SUB_1H
	CMP	A,#0
	BEQ	TIME_401
	MOV	TWINKLE_PROG,#0FFH		; 【程序】指示灯闪烁
	JMP	TIME_402	
TIME_401
	MOV	TWINKLE_PROG,#0			; 【程序】指示灯停止闪烁
	MOV	WASHTIME_BESPEAK,#0		; 预约时间完成
	CLRB	TIME_BESPEAK_SUB		; 停止预约减计时
	MOV	A,WASHTIME_PROC			; 取洗衣时间
	CALL	GET_DISPDATA			; 取数码管显示值
	JMP	TIME_500
TIME_402
	MOV	A,TIME_BESPEAK_4MS
	INCW	A
	MOV	TIME_BESPEAK_4MS,A
	CMP	A,#250
	BLO	TIME_500
	MOV	TIME_BESPEAK_4MS,#0
	MOV	A,TIME_BESPEAK_1SEC
	INCW	A
	MOV	TIME_BESPEAK_1SEC,A		; ″
	CMP	A,#60
	BLO	TIME_500
	MOV	TIME_BESPEAK_1SEC,#0
	MOV	A,BESPEAK_SUB_1MIN
	CLRC
	SUBC	A,#1				; 预约开始时间 - 1′
	DAS					; BCD 码调整
	MOV	BESPEAK_SUB_1MIN,A
	MOV	A,TIME_BESPEAK_1MIN
	INCW	A
	MOV	TIME_BESPEAK_1MIN,A		; ′
	CMP	A,#60
	BLO	TIME_500
	MOV	TIME_BESPEAK_1MIN,#0
	MOV	A,BESPEAK_SUB_1H
	CLRC
	SUBC	A,#1				; 预约开始时间 - 1h
	DAS					; BCD 码调整
	MOV	BESPEAK_SUB_1H,A
	MOV	A,WASHTIME_BESPEAK
	CLRC
	SUBC	A,#1				; 预约显示时间 - 1h
	DAS					; BCD 码调整
	MOV	WASHTIME_BESPEAK,A
	CALL	GET_DISPDATA			; 取数码管显示值
TIME_500
; 16′循环报警
	BBC	FLAG_ALARM,TIME_600
	MOV	A,TIME_ALARM_4MS
	INCW	A
	MOV	TIME_ALARM_4MS,A
	CMP	A,#250
	BLO	TIME_600
	MOV	TIME_ALARM_4MS,#0
	MOV	A,TIME_ALARM_1SEC
	INCW	A
	MOV	TIME_ALARM_1SEC,A		; ″
	CMP	A,#60
	BLO	TIME_600
	MOV	TIME_ALARM_1SEC,#0
	MOV	A,TIME_ALARM_1MIN
	INCW	A
	MOV	TIME_ALARM_1MIN,A		; ′
	CMP	A,#16
	BLO	TIME_600
	SETB	BUZZER_ALARM_START		; 开始鸣响报警
	MOV	COUNT_WARNING,#0		; 清鸣响次数
	MOV	TIME_ALARM_4MS,#0
	MOV	TIME_ALARM_1SEC,#0
	MOV	TIME_ALARM_1MIN,#0
TIME_600
; 上电后, 10

⌨️ 快捷键说明

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