📄 洗衣机-汇编.txt
字号:
ORG 0000H
START: AJMP MAIN ; 初始化
ORG 0003H
AJMP INT0 ; 暂停中断中断向量
ORG 000BH
AJMP T0 ; 定时器0中断向量
ORG 0013H
AJMP INT1 ; 开盖,不平衡中断中断向量
ORG 0030H
MAIN: MOV P1, #0F0H ; 主程序开始
MOV P3,#7FH
MOV SP,#35H
MOV 56H,#0F0H ; #0F0H排水标志(指定56H为标志单元)
MOV 57H,#03 ; 洗衣机标准洗衣工作程序标志(指定57H)
MOV 54H,#40 ; 强洗正、反转驱动4秒赋值(指定54H存放)
MOV 55H,#10 ; 强洗间歇1秒赋值(指定55H存放)
MOV 58H,#06 ; 漂洗6分钟赋值(指定58H存放)
CLR ET0
SETB EA ; 开总中断
CLR IT0 ; 设置外部中断0、1为低电平触发
CLR IT1
SETB PX0 ; 设置中断优先级别
SETB PT0
SETB PX1
MOV TL0,#0B0H ; 设置100MS中断时间常数
MOV TH0,#3CH
MOV TMOD,#01H
KA: JNB P1.4,X1 ; 以下为按键扫描程序
AJMP KB
X1: ACALL K1
KB: JNB P1.5,X2
AJMP KC
X2: ACALL K2
KC: JB P3.4,KA ; 按键扫描程序结束
ACALL DEL10
JB P3.4,KA
ACALL FZH
JNB P3.4,$
SETB ET0 ; 开定时器0中断
SETB TR0 ; 启动定时器0
SETB P3.5
SETB EX0
CLR P3.4
MOV A ,57H
CJNE A,#00H,XY ; 是排水程序?
AJMP BSH1 ; 是则跳转排水程序
XY: MOV 70H,#00
MOV 51H,#00
SETB P1.0 ; 以下为进水*作,打开进水阀
MOV A,#240
L0: CJNE A,51H,L1 ; 进水系统有故障?
AJMP FW ; 有则跳转故障处理程序
L1: JB P3.5 ,L0 ; 进水达预定水位?
CLR P1.0 ; 进水结束,关闭进水阀
MOV 70H,#00
MOV 71H,#00
MOV 72H,#00
L: MOV 50H,#00 ; 以下为洗涤/漂洗工作程序
SETB P1.2 ; 正转洗涤/漂洗驱动
MOV A,50H
CJNE A,50H,$
CLR P1.2 ; 洗涤/漂洗间歇
MOV 50H,#00
MOV A,55H
CJNE A,50H,$
MOV 50H,#00
SETB P1.3 ; 反转洗涤/漂洗驱动
MOV A,54H
CJNE A,50H,$
CLR P1.3 ; 洗涤/漂洗间歇
MOV 50H,#00
MOV A,55H
CJNE A,50H,$
MOV A,58H
CJNE A,72H,L ; 洗涤/漂洗工作结束?
BSH: MOV A,56H
CJNE A,#0F0h,PBSH ; 洗涤/漂洗工作结束,排水否?
DEC 57H ; 洗衣工作循环次数减1
BSH1: SetB P1.1 ; 排水*作,打开排水阀
MOV 70H,#00
MOV 51H,#00
MOV A,#60
BSH2: CJNE A,51H,BSH3 ; 排水系统有故障?
AJMP FW ; 有则跳转故障处理程序
BSH3: JNB P3.5,BSH2 ; 水位下降至预定水位?
MOV A,51H
ADD A,#50
MOV 70H,#00
MOV 51H,#00
CJNE A,51H,$ ; 排水时间延长D+50秒
MOV 73H,#00 ; 以下为脱水程序
CLR P3.5 ; 开盖、不平衡中断请求触器允许
SETB EX1 ; 脱水期间,开盖、不平衡中断允许
BSH4: MOV 50H,#00
SETB P1.2 ; 脱水驱动5秒
MOV A,#50
CJNE A,50H,$
CLR P1.2 ; 脱水间歇2秒
MOV A,#20
MOV 50H,#00
CJNE A,50H,$
INC 73H
MOV A,73H
CJNE A,#17,BSH4 ; 脱水时间达2分钟?
CLR P1.1
SETB P3.5
CLR EX1 ; 脱水结束,禁止开盖、不平衡中断中断崐 MOV A,57H
CJNE A,#00,BSH5 ; 洗衣工作是否结束?
AJMP PBSH ; 结束跳转结束报警程序
BSH5: MOV A,58H
SUBB A,#2 ; 洗涤/漂洗时间减2分钟
MOV 58H,A
AJMP XY ; 洗衣工作未结束,继续下一循环
PBSH: MOV 74H,#00 ; 洗衣结束报警程序
JK: MOV 50H,#00
BJ1: SETB P3.7
MOV A,50H
CJNE A,#10,BJ1
MOV 50H,#00
BJ2: CLR P3.7
MOV A,50H
CJNE A,#10,BJ2
INC 74H
MOV A,74H
CJNE A,#3,JK
AJMP MAIN ; 洗衣工作结束,返回主程序
;
FW: CLR EX1 ; 以下为进排水系统故障处理程序
CLR P1.0
CLR P1.1
CLR P1.2
CLR P1.3
FW1: MOV 50H,#00
FW2: SETB P3.7
JNB P1.4,FW4
MOV A,50H
CJNE A,#10,FW2
MOV 50H,#00
FW3: CLR P3.7
JNB P1.4,FW4
MOV A,50H
CJNE A,#20,FW3
AJMP FW1
FW4: CLR P3.7
ACALL FZH
JNB P1.4 ,$
AJMP MAIN
;
INT0: PUSH A ; 以下为暂停中断服务程序
PUSH PSW
PUSH DPH
PUSH DPL
SETB P3.4 ; 撤消本次中断请求信号
ACALL FZH
MOV A,P1
MOV R1,A ; 保存P1端口状态
ANL A,#0F0H
MOV P1,A ; 洗衣机暂停各种*作
JB P3.4,$ ; 等待启动键按下
ACALL FZH
MOV A,R1
MOV P1,A ; 恢复P1口原始数据
POP DPL
POP DPH
POP PSW
POP A
CLR P3.4
RETI ; 中断返回
;
T0: PUSH A ; 定时器0定时中断服务程序
PUSH DPH
PUSH DPL
PUSH PSW
INC 50H
INC 70H ; 100MS单元累加1
MOV A,70H
CJNE A,#0AH,LL ; 时间达1秒?
MOV 70H,#00
INC 51H
INC 71H ; 时间达1秒,则秒单元累加1
MOV A,71H
CJNE A,#3CH,LL ; 时间达1分?
MOV 71H,#00H
INC 52H
INC 72H ; 时间达1分,则分单元累加1
LL: POP PSW
POP DPL
POP DPH
POP A
RETI ; 中断返回
;
INT1: PUSH A ; 以下为开盖、不平衡中断服务程序
PUSH PSW
PUSH DPH
PUSH DPL
SETB P3.5 ; 撤消本次中断请求信号
CLR P1.1 ; 停止排水*作
CLR P1.2 ; 停止脱水*作
CLR ET0 ; 关定时器0定时中断
JP0: JNB P1.6,$ ; 等待开盖或不平衡中断信号消失
SETB P1.1 ; 恢复排水*作
SETB P1.2 ; 恢复脱水*作
POP DPL
POP DPH
POP PSW
POP A
CLR P3.5
SETB ET0 ; 定时器0中断允许
RETI ; 中断返回
;
K1: ACALL DEL10 ; 以下为强弱选择键处理程序
JNB P1.4,X4
AJMP EXIT1
X4: ACALL FZH
MOV A,54H
CJNE A,#40,J1
CLR P1.7
MOV 54H,#30
MOV 55H,#20
AJMP EXIT1
J1: SETB P1.7
MOV 54H,#40
MOV 55H,#10
EXIT1: JNB P1.4,EXIT1
RET
;
K2: ACALL DEL10 ; 以下为洗衣工作程序选择键处理程崐序
JNB P1.5,X5
AJMP X9
X5: ACALL FZH
MOV A,57H
CJNE A,#00,X6
SETB P3.0 ; 标准洗衣工作程序赋值
SETB P3.1
MOV 57H,#03
MOV 56H,#0F0H
AJMP X9
X6: CJNE A,#03,X7
SETB P3.0 ; 经济洗衣工作程序赋值
CLR P3.1
MOV 57H,#02
MOV 56H,#0F0H
AJMP X9
X7: CJNE A,#02,X8
CLR P3.0 ; 单独洗衣工作程序赋值
SETB P3.1
MOV 57H,#01
MOV 56H,#00
AJMP X9
X8: CJNE A,#01,X9
CLR P3.0 ; 排水洗衣工作程序赋值
CLR P3.1
MOV 57H,#00
MOV 56H,#00
X9: JNB P1.5,X9 ; 等待该键释放
RET
;
FZH: SETB P3.7 ; 发声子程序
ACALL DEL10
CLR P3.7
RET
;
DEL10: MOV R6,#0AH ; 10MS延时子程序
D1MS: MOV R7,#64H
DLL: NOP
NOP
NOP
DJNZ R7,DLL
DJNZ R6,D1MS
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -