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

📄 全自动洗衣机.txt

📁 一个使用AT89C2051单片机作为主控芯片的全自动洗衣机
💻 TXT
字号:
                ORG  0000H
	START:  AJMP MAIN		
		ORG  0003H
		AJMP  INT0		; 暂停中断中断向量
		ORG  000BH
		AJMP T0			; 定时器0中断向量
		ORG  0013H
		AJMP INT1		; 开盖,不平衡中断中断向量
		ORG  0030H
; START:开始
初始化:   MOV  P1, #0F0H		
		MOV  P3,#7FH
        	MOV  堆站,#35H
		MOV  56H,#0F0H		; #0F0H排水标志(指定56H为标志单元)
		MOV  57H,#03		; 洗衣机标准洗衣工作程序标志(指定57H)
		MOV  54H,#70		; 强洗正、反转驱动8秒赋值(指定54H存放)
		MOV  55H,#20		; 强洗间歇2秒赋值(指定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
按键扫描:	JNB  P1.4,X1		; 选强弱
		AJMP KB
	X1:	短调用 K1
	KB:	JNB  P1.5,X2		; 选程序
        	AJMP KC
	X2:	短调用 K2
	KC:	JB  P3.4,KA		; 按键扫描程序结束
		短调用  DEL10
		JB   P3.4,KA
		短调用  FZH
		JNB  P3.4,$		; RUN
		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		; 洗衣工作结束,返回START:
;
; 以下为进排水系统故障处理程序
	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
		短调用 FZH
		JNB  P1.4 ,$
		AJMP  MAIN
;
; 以下为暂停中断服务程序
	INT0:   PUSH A			
		PUSH PSW
		PUSH DPH
        	PUSH DPL
        	SETB  P3.4		; 撤消本次中断请求信号
		短调用  FZH
        	MOV  A,P1
		MOV R1,A		; 保存P1端口状态
		ANL  A,#0F0H
		MOV  P1,A		; 洗衣机暂停各种操作
		JB  P3.4,$		; 等待启动键按下
		短调用  FZH
        	MOV  A,R1
        	MOV  P1,A		; 恢复P1口原始数据
		POP DPL
		POP DPH
		POP PSW
		POP A
		CLR P3.4
		RETI			; 中断返回
;
; 定时器0定时中断服务程序
	T0:     PUSH A			
		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:     短调用  DEL10		; 10MS延时
		JNB  P1.4,X4
        	AJMP  EXIT1
	X4:     短调用  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:     短调用  DEL10		; 10MS延时	
		JNB  P1.5,X5
        	AJMP  X9
	X5:     短调用  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
		短调用  DEL10
	        CLR  P3.7
		RET
;
; 10MS延时子程序
	DEL10:  MOV R6,#0AH 		
	D1MS:   MOV R7,#64H
	DLL:    NOP
	        NOP
	        NOP
		DJNZ  R7,DLL
		DJNZ  R6,D1MS
		RET
		END

⌨️ 快捷键说明

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