📄 xqb5030a.asm
字号:
; ◆◆ 漂洗 ◆◆
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 + -