📄 zdcs-080816.asm
字号:
;定义:
;P1.0:抽水机马达驱动控制端, "1"为停止,"0"为驱动.
;P1.2(LED2/红):P1.2=>水位异常指示, 水位异常时灯号0.3S周期交替闪亮/ 等待检测状态时---->恒亮
;P1.3(LED3/绿):P1.3=>抽水时灯恒亮/水满时--->0.3S周期闪亮
;LED5: 电源指示灯
;P3.0:P3.0=> 水位检测,水位已到为高电平输入。
;P3.1:水满检测,水满时,P3.1输入为高电位。
;P3.2:程序模式切换路线输入,"0""1"分别切换不同控制程序。
;P3.3:出水口是否有水检测,有水为"1",无水为"0"
;P3.4:预留功能输入检测口。
ORG 0000H
AJMP START
ORG 0030H
START:
MOV P1,#0FFH
MOV P3,#0FFH ;初始化设置,P1,P3口全置高.
MAIN:
NOP
NOP
NOP
NOP
JNB P3.0, A0 ;是否缺水(P3.0为低), 若缺水转A0处.
NOP
NOP
NOP
JB P3.1, A1 ;是否水满,若水满,则转A1处
NOP
NOP
JNB P3.3 , A8; 若检测到出水口没水(P3.3=0),转出水口异常处理程序A3(A8)
AJMP MAIN
NOP ;PC出错处理
NOP
NOP
LJMP START
A8: AJMP A3
;---------------------------------------
;缺水处理程序
A0:
ACALL DELAY100MS
JB P3.0, A5
MOV P1,#11110110B ;打开抽水马达电源及抽水指示灯.
ACALL DELAY1M ; 延时1分钟.
JB P3.0, A5
ACALL DELAY1M ; 延时1分钟.
JB P3.0, A5
ACALL DELAY1M ; 延时1分钟.
JB P3.0, A5
ACALL DELAY1M ; 延时1分钟.
JB P3.0, A5 ;如果检测到水位(P3.0=1),转MAIN.
JB P3.3, A5 ;如果水位未到(P3.0=0),但检测到出水口有水,也转到MAIN.
ACALL DELAY300MS ;延时0.3S
JB P3.3, A5 ;检测出水口有水(P3.3=1),转到Main
ACALL DELAY100MS
JB P3.0, A5 ;检测检测水位有水(P3.0=1),转到Main
JB P3.3, A5 ;检测出水口有水(P3.3=1),转到Main
MOV P1,#11111011B ;关闭抽水机,水位异常LED2恒亮报敬.
JNB P3.2, A6 ;如果跳线JP1插Pin2_3(P3.2=0),跳转到A6.
ACALL DELAY1H; 如果跳线JP1插Pin1_2(P3.2=1),延时一个小时.
ACALL DELAY1H; 再延时一个小时
ACALL DELAY1H; 再延时一个小时
MOV P1,#11110110B ;再次打开抽水马达电源及抽水指示灯.
ACALL DELAY1M; 延时1Min
ACALL DELAY1M; 再延时1Min
JB P3.3, A5 ; 如出水口有水,转到MAIN.
ACALL DELAY300ms; 延时0.3S
JB P3.3, A5 ; 如出水口有水,转到MAIN.
A6:
MOV P1,#0FFH ;关闭P1口(即关闭马达与指示灯)
CG2:
CLR P1.2 ; 水位异常指示灯闪亮,进入死循环
ACALL DELAY300ms
SETB P1.2
ACALL DELAY300ms
AJMP CG2
A5:
AJMP MAIN
;---------------------------------------
;水满处理程序
A1:
ACALL DELAY100MS
JNB P3.1, A9 ;如果水还没满,,转MAIN
ACALL DELAY10s ; 检测到水满后,再抽水10秒,以保持稳定状态
MOV P1,#0FFH ;
CG3:
CLR P1.3 ; 水满指示灯(LED3)闪亮。
ACALL DELAY300MS
CPL P1.3
ACALL DELAY300MS
JNB P3.1, nofill ; 如果用了水(水不满了),跳出循环转MAIN
AJMP CG3
nofill:
CLR P1.3 ; 水满指示灯(LED3)闪亮。
ACALL DELAY300MS
CPL P1.3
ACALL DELAY300MS
ACALL DELAY300MS
ACALL DELAY300MS
ACALL DELAY300MS
JNB P3.0, A9
AJMP nofill
A9: AJMP MAIN
;---------------------------------------------
;出水口没水异常处理程序
A3:
ACALL DELAY100MS
NOP
JB P3.3 , A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY100MS
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY300ms
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY10s ; 延时10S
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY300ms
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY10s ; 延时10S
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY300ms
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
ACALL DELAY300ms
NOP
JB P3.3, A4 ;如检测到出水口有水,再转到MAIN.
NOP
MOV P1, #0FFH ;关闭抽水机及抽水指示灯,并打开水位异常报警LED.
CG4:
CPL P1.2
CLR P1.3
ACALL DELAY300MS
CLR P1.2
CPL P1.3
ACALL DELAY300MS
JNB P3.0, A4 ; 如缺水,转到MAIN
AJMP CG4
NOP
A4:
AJMP MAIN ; 跳转MAIN.
;----------------------------------------------
DELAY100ms: ; 100ms延时程序
MOV R1,#249
D1: MOV R2,#200
D2: DJNZ R2,D2
DJNZ R1,D1
RET
DELAY300ms: ;300ms延时子程序
MOV R3,#3
D3: ACALL DELAY100ms
DJNZ R3, D3
RET
DELAY10s: ;10S延时子程序
MOV R4,#99
D4: ACALL DELAY100ms
DJNZ R4, D4
RET
DELAY1M: ;1min延时子程序
MOV R5,#6
D5: ACALL DELAY10S
DJNZ R5, D5
RET
DELAY1H: ;1H延时子程序
MOV R6,#59
D6: ACALL DELAY1M
DJNZ R6, D6
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -