📄 xqb5030a.asm
字号:
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_ENHANCE_LOW ; 低水位: 水流 D
JMP TURN_WASHING
W_GENTLE ; "轻柔" 程序
MOV PROG_STEPS,#4 ; 4 步一个周期
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_GENTLE
JMP TURN_WASHING
W_SPEEDY ; "快速" 程序
MOV PROG_STEPS,#4 ; 4 步一个周期
MOV A,DW_WATLVL ; 判断水位
CMP A,#20H
BEQ W_SPEEDY_HIGH
CMP A,#10H
BEQ W_SPEEDY_MIDDLE
CMP A,#0
BEQ W_SPEEDY_LOW
RET
W_SPEEDY_HIGH
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_SPEEDY_HIGH ; 高水位: 水流 B
JMP TURN_WASHING
W_SPEEDY_MIDDLE
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_SPEEDY_MIDDLE ; 中水位: 水流 C
JMP TURN_WASHING
W_SPEEDY_LOW
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_SPEEDY_LOW ; 低水位: 水流 D
TURN_WASHING
CLRC
ADDCW A ; 偏移
MOVW EP,A
MOV A,@EP ; 取数据表中的数据
MOV TIMES_TURN,A
AND A,#00111111B ; 动作时间
BBS TIMES_TURN:7,TURN_STOP ; 0 = 转动 , 1 = 停转
BBS TIMES_TURN:6,TURN_F ; 0 = 正转 , 1 = 反转
; 正转
TURN_Z
CMP A,TIME_TURN_100MS
BLO WASHING_CONT
SETB F_ELECMOTOR_Z ; 电机正转
CLRB F_ELECMOTOR_F ; 电机反转
RET
; 反转
TURN_F
CMP A,TIME_TURN_100MS
BLO WASHING_CONT
CLRB F_ELECMOTOR_Z ; 电机正转
SETB F_ELECMOTOR_F ; 电机反转
RET
; 停转
TURN_STOP
CMP A,TIME_TURN_100MS
BLO WASHING_CONT
CLRB F_ELECMOTOR_Z ; 电机正转
CLRB F_ELECMOTOR_F ; 电机反转
RET
WASHING_CONT
MOV TIME_TURN_4MS,#0 ; 电机转动计时单元清零
MOV TIME_TURN_100MS,#0
MOV A,ELECTRO_STEPS ; 下一步
INCW A
MOV ELECTRO_STEPS,A
CMP A,PROG_STEPS ; 判是否完成一个周期
BHS CLEAR_C
RET
CLEAR_C
MOV ELECTRO_STEPS,#0 ; 下一个周期
RET
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 平衡控制 ■■
; ■■ 使用: A,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
CTRL_BALANCE
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_BALANCE ; 表首址
MOV PROG_STEPS,#4 ; 4 步一个周期
JMP TURN_WASHING
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 间断脱水30″ ■■
; ■■ 使用: A,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
CTRL_SPIN30S
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_SPIN30S ; 表首址
MOV PROG_STEPS,#9 ; 9 步一个周期
JMP TURN_WASHING
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 轻柔脱水 ■■
; ■■ 使用: A,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
CTRL_SPINGENTLE
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_SPINGENTLE ; 表首址
MOV PROG_STEPS,#3 ; 3 步一个周期
JMP TURN_WASHING
; ▲▲▲ 以下为水流时间表(100ms为计时单位) ▲▲▲
; [标准]水流
TIMETAB_REGULAR_HIGH .DATA.B 010H,088H,050H,088H
; 1.6 0.8 1.6 0.8
TIMETAB_REGULAR_MIDDLE .DATA.B 008H,08CH,048H,08CH
; 0.8 1.2 0.8 1.2
TIMETAB_REGULAR_LOW .DATA.B 005H,08DH,045H,08DH
; 0.5 1.3 0.5 1.3
; [加强]水流
TIMETAB_ENHANCE_HIGH .DATA.B 010H,088H,050H,088H
; 1.6 0.8 1.6 0.8
TIMETAB_ENHANCE_MIDDLE .DATA.B 008H,08CH,048H,08CH
; 0.8 1.2 0.8 1.2
TIMETAB_ENHANCE_LOW .DATA.B 005H,08DH,045H,08DH
; 0.5 1.3 0.5 1.3
; [快速]水流
TIMETAB_SPEEDY_HIGH .DATA.B 010H,088H,050H,088H
; 1.6 0.8 1.6 0.8
TIMETAB_SPEEDY_MIDDLE .DATA.B 008H,08CH,048H,08CH
; 0.8 1.2 0.8 1.2
TIMETAB_SPEEDY_LOW .DATA.B 005H,08DH,045H,08DH
; 0.5 1.3 0.5 1.3
; [轻柔]水流
TIMETAB_GENTLE .DATA.B 004H,092H,044H,092H
; 0.4 1.8 0.4 1.8
; 平衡水流
TIMETAB_BALANCE .DATA.B 005H,083H,045H,083H
; 0.5 0.3 0.5 0.3
; 轻柔脱水
TIMETAB_SPINGENTLE .DATA.B 032H,032H,0B2H
; 5 5 5
; 间断脱水30″
TIMETAB_SPIN30S .DATA.B 028H,09EH,028H,09EH,028H,09EH,028H,09EH,094H
; 4.0 3.0 2.0
; 数据说明: BIT 7 : 1 -- 电机停止 , 0 -- 电机转动
; BIT 6 : 1 -- 电机反转 , 0 -- 电机正转
; BIT 5 - 0 : 电机转动时间(十六进值)
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 洗衣过程 ■■
; ■■ 使用: A,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
WASH_MAIN
BBS PROC_SOAK,JMP_300 ; 判是否"浸洗"
BBS PROC_WASH,JMP_301 ; 判是否"洗涤"
BBS PROC_RINSE,JMP_302 ; 判是否"漂洗"
BBS PROC_SPIN,JMP_303 ; 判是否"脱水"
JMP WASH_END_QUIT
JMP_300
SETB PROC_SOAKING ; 正在"浸泡"
SETB EN_NOINWATER
JMP WASH_SOAKING
JMP_301
CLRB PROC_SOAKING
SETB PROC_WASHING ; 正在"洗涤"
JMP WASH_WASHING
JMP_302
CLRB PROC_SOAKING
CLRB PROC_WASHING
SETB PROC_RINSEING ; 正在"漂洗"
JMP WASH_RINSEING
JMP_303
CLRB PROC_SOAKING
CLRB PROC_WASHING
CLRB PROC_RINSEING
SETB PROC_SPINING ; 正在"脱水"
JMP WASH_SPINING
;★★★ 洗衣过程结束 ★★★
WASH_END_QUIT
SETB END_BUZZERING ; 结束蜂鸣时,按键不响应
CMP TIME_SUB_1SEC,#0 ; 减计时为0
BNE WASH_END_QUIT
CLRB TIME_SUB ; 减计时停止
MOV CTRL_OUTPUT,#00H ; 关闭输出控制
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
MOV COUNT_WARNING,#0 ; 蜂鸣次数单元清零
WT100
MOV WDTC,#05H ; 喂狗
SETB RCEN ; BUZZER ON
CMP TIME_BUZZER_4MS,#125 ; 0.5''
BLO WT100
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
WT200
MOV WDTC,#05H ; 喂狗
CLRB RCEN ; BUZZER OFF
CMP TIME_BUZZER_4MS,#125 ; 0.5''
BLO WT200
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
MOV A,COUNT_WARNING
INCW A ; 次数 + 1
CMP A,#16 ; 是否鸣响 16 次?
BLO WT100 ; 继续鸣响
; 鸣响完毕
MOV LED_1ST,#0FFH ; 指示灯暗
MOV LED_2ST,#0FFH
MOV LED_3ST,#0FFH
MOV LED_4ST,#0FFH
MOV LED_5ST,#0FFH
CLRB CTRLPOWER ; 关断电源开关
MOV WASH_OK,#05AH ; 洗涤完成标志
RET
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
; ◆◆ "浸洗"过程 ◆◆
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
WASH_SOAKING
MOVW A,#0
MOV A,WASH_STEPS
MOVW A,#TAB_SOAK ; "浸洗"过程表首址
CLRC
ADDCW A ; + 步骤 (偏移量)
MOVW EP,A
MOVW A,@EP ; 取数据
MOVW TIME_SECH,A ; 临时保存分步运行时间
MOV A,TIME_SECH
AND A,#11110000B ; 判正在进行哪个过程?
CMP A,#00H
BEQ JMP_100
CMP A,#10H
BEQ JMP_101
CMP A,#80H
BEQ JMP_102
RET
JMP_100
JMP STEP_INWATER ; 进水
JMP_101
JMP STEP_WASH ; 搅拌
JMP_102
JMP STEP_WASH_STOP ; 停止搅拌,浸泡
; ▲▲▲ 进水 ▲▲▲
STEP_INWATER
BBC EN_NOWATER,_INWATER_START
CLRB EN_NOWATER ; 由"浸泡"洗转入"洗涤"时,进水过程忽略
JMP _INWATER_5
_INWATER_START
MOVW A,#900 ; 15′
MOVW A,TIME_MAIN_SECH
CMPW A ; 进水是否超过 15′?
BHS _INWATER_1
SETB ERR_INWATER ; 进水超时报警标志
SETB FLAG_ALARM ; 有报警标志
MOV LED_4ST,#086H ; "E"
MOV LED_5ST,#099H ; "4"
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
_INWATER_1
BBC EN_ADDWATER,_INWATER_8
NOP ; 补进水
CLRB TIME_SUB ; 减计时停止
MOV A,FLAG_WATLVL ; 判是否达到设定水位?
CMP A,FLAG_WATLVL_BESET
BEQ _INWATER_9
CLRB F_OUTWATER ; 关闭排水牵引器
SETB F_INWATER ; 打开进水阀
RET
_INWATER_8
MOVW A,#120 ; 2′
MOVW A,TIME_MAIN_SECH
CMPW A ; 进水是否超过 2′?
BHS _INWATER_3
CLRB TIME_SUB ; 减计时停止
JMP _INWATER_4
_INWATER_3
SETB TIME_SUB ; 减计时开始
_INWATER_4
MOV A,FLAG_WATLVL ; 判是否达到设定水位?
CMP A,FLAG_WATLVL_BESET
BEQ _INWATER_2
CLRB F_OUTWATER ; 关闭排水牵引器
SETB F_INWATER ; 打开进水阀
RET
_INWATER_2 ; 达到设定水位 ▲▲▲▲
MOVW A,#120 ; 2′
MOVW A,TIME_MAIN_SECH
CMPW A ; 进水是否超过 2′?
BLO _INWATER_5
NOP ; 进水时间不足 2′
MOVW A,#60 ; 1′
MOVW A,TIME_MAIN_SECH
CMPW A ; 进水是否超过 1′?
BLO _INWATER_6
MOV R7,#2 ; 进水时间 <1′,倒计时时间要再减 2′
JMP _INWATER_7
_INWATER_6
MOV R7,#1 ; 进水时间 >1′,倒计时时间要再减 1′
_INWATER_7
MOV A,WASHTIME_PROC
CLRC
SUBC A,R7
DAS ; BCD 码调整
MOV WASHTIME_PROC,A
CALL GET_DISPDATA ; 取数码管显示值
MOV TIME_SUB_4MS,#0
MOV TIME_SUB_1SEC,#0
_INWATER_5
MOV TIME_MAIN_4MS,#0 ; 清主计时单元
MOV TIME_MAIN_SECH,#0
MOV TIME_MAIN_SECL,#0
MOV TIME_STEP_4MS,#0 ; 清分步计时单元
MOV TIME_STEP_SECH,#0
MOV TIME_STEP_SECL,#0
_INWATER_9
MOV A,WASH_STEPS
CLRC
ADDC A,#2 ; 步骤 + 2
MOV WASH_STEPS,A
CLRB F_INWATER ; 关闭进水阀
MOV ELECTRO_STEPS,#0 ; 洗涤周期
MOV TIME_TURN_4MS,#0 ; 电机转动计时单元清零
MOV TIME_TURN_100MS,#0
RET
; ▲▲▲ 搅拌 ▲▲▲
STEP_WASH
BBC EN_ADDWATER,STEP_WASH_START
NOP ; 检测到水位下降
CLRB TIME_SUB
MOV WASH_STEPS,#0 ; 重新进水
CLRB F_ELECMOTOR_Z ; 停止搅拌
CLRB F_ELECMOTOR_F
RET
STEP_WASH_START
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
BHS STEP_WASH_WASH
STEP_WASH_END ; 搅拌完成
MOV A,WASH_STEPS
CLRC
ADDC A,#2 ; 步骤 + 2
MOV WASH_STEPS,A
MOV ELECTRO_STEPS,#0 ; 洗涤周期
MOV TIME_STEP_4MS,#0 ; 清分步计时单元
MOV TIME_STEP_SECH,#0
MOV TIME_STEP_SECL,#0
CLRB F_ELECMOTOR_Z ; 停止搅拌
CLRB F_ELECMOTOR_F
RET
STEP_WASH_WASH
CALL CTRL_WASHING ; 搅拌洗衣
RET
; ▲▲▲ 停止搅拌,浸泡 ▲▲▲
STEP_WASH_STOP
SETB TIME_SUB ; 减计时开始
MOV A,LED_1ST
OR A,DW_WATLVL
MOV R7,A
MOVW A,#0
MOV A,R7
MOVW A,#TAB_SOAK_PROG
CLRC
ADDCW A ; + 步骤 (偏移量)
MOVW EP,A
MOV A,@EP
MOV TIMES_SOAK_SET,A ; 取搅拌浸泡次数
MOV A,TIME_SECH ; 判是否浸泡完成
AND A,#00001111B
MOV TIME_SECH,A
MOVW A,TIME_SECH
MOVW A,TIME_STEP_SECH
CMPW A
BLO STEP_WASH_END
CLRB F_ELECMOTOR_Z ; 停止搅拌,浸泡
CLRB F_ELECMOTOR_F
RET
STEP_WASH_STOP_END
MOV A,TIMES_SOAK_ADD
INCW A ; 搅拌浸泡次数 + 1
MOV TIMES_SOAK_ADD,A
CMP A,TIMES_SOAK_SET
BHS WASH_SOAKING_END
JMP STEP_WASH_END
; ▲▲▲ 浸洗过程完成 ▲▲▲
WASH_SOAKING_END
CLRB PROC_SOAK ; 清"浸泡"标志
SETB LED_SOAK ; "浸泡"指示灯暗
WASH_SET
MOV TIME_MAIN_4MS,#0 ; 清主计时单元
MOV TIME_MAIN_SECH,#0
MOV TIME_MAIN_SECL,#0
MOV TIME_STEP_4MS,#0 ; 清分步计时单元
MOV TIME_STEP_SECH,#0
MOV TIME_STEP_SECL,#0
MOV WASH_STEPS,#0 ; 过程周期步骤
MOV ELECTRO_STEPS,#0 ; 洗涤周期
RET
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
; ◆◆ "洗涤"过程 ◆◆
; ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
WASH_WASHING
MOV A,DW_WATLVL
CLRC
RORC A
MOV R6,A ; 水位偏移
MOVW A,#0
MOV A,LED_1ST
MOVW A,#TAB_WASH_PROG
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP
MOV R7,A ; 程序偏移
MOVW A,#0
MOV A,WASH_STEPS ; 洗涤步骤偏移
MOVW A,#TAB_WASH ; "洗涤"过程表首址
CLRC
ADDCW A
ADDC A,R6
ADDC A,R7
MOVW EP,A
MOVW A,@EP ; 取数据
MOVW TIME_SECH,A ; 临时保存分步运行时间
MOV A,TIME_SECH
AND A,#11110000B ; 判正在进行哪个过程?
CMP A,#00H
BEQ JMP_200 ; 进水
CMP A,#10H
BEQ JMP_201 ; 搅拌
CMP A,#20H
BEQ JMP_202 ; 平衡控制
RET
JMP_200
JMP STEP_INWATER
JMP_201
JMP STEP_WASH
JMP_202
JMP WASH_BALANCE
; ▲▲▲ 平衡控制 ▲▲▲
WASH_BALANCE:
MOV A,TIME_SECH ; 判是否平衡控制完成
AND A,#00001111B
MOV TIME_SECH,A
MOVW A,TIME_SECH
MOVW A,TIME_STEP_SECH
CMPW A
BLO WASH_WASHING_END
CALL CTRL_BALANCE ; 平衡控制
RET
; ▲▲▲ 洗涤过程完成 ▲▲▲
WASH_WASHING_END
CLRB PROC_WASH ; 清"洗涤"标志
SETB LED_WASH ; "洗涤"指示灯暗
JMP WASH_SET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -