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

📄 zdcs-080816.asm

📁 基于89C2051单片机的水塔自动抽水控制器汇编源码
💻 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 + -