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

📄 skz.asm

📁 一个软化水设备的控制系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;#################

DISPBUFFER           DATA 30H

RUNNO                DATA 18H
RUNHOUR              DATA 19H
RUNMINATE            DATA 1AH

SETTIMENO            DATA 1BH
SETTIMEHOUR          DATA 1CH
SETTIMEMINATE        DATA 1DH


MADAOFFTIME          DATA 37H

TIMELENGTH           DATA 3CH
TEMPKEY              DATA 3DH

FLASHPOS             DATA 3EH
TEMP                 DATA 3FH
DISPBITS             DATA 40H


MADARUNTIME          DATA 41H
FAOFFTIME            DATA 42H
MADAOFFNUM           DATA 43H
FLASHCOUNT           DATA 44H

DISPNO               DATA 45H


KEYOLD               DATA 47H
KEYLENGTH            DATA 48H


LOOPNO               DATA 4BH
TEMPKEY1             DATA 4CH
REALRUNNO            DATA 4DH
oldp1                data 4eh
;##################
RUNSTATUSFLAG        BIT 20H.0
FAOFFFLAG            BIT 20H.1
MADARUNFLAG          BIT 20H.2
MINLIMFLAG           BIT 21H.7
MAXLIMFLAG           BIT 21H.6


DISPFLAG             BIT 26H.0
UPDATEDISPFLAG       BIT 26H.2
INNORMALDISPFLAG     BIT 26H.3
KEYRUNFLAG           BIT 26H.4
KEYCONCLICKFLAG      BIT 26H.5
FLASHFLAG            BIT 26H.6
timeonflag           bit 26h.7

K1FLAG               BIT 27H.0
K2FLAG               BIT 27H.1
K3FLAG               BIT 27H.2

HIGHFLAG             BIT 27H.3
BLACKFLAG            BIT 27H.4
ISRUNPOSFLAG         BIT 27H.5



;################

ORG 0000H

AJMP INIT

ORG 000BH

AJMP INT2MS

ORG 001BH

AJMP INT10MS


;###################

ORG 0050H

INIT:
      
MOV TMOD,#11H
MOV TL1,#0F0H
MOV TH1,#0FFH
MOV TL0,#0F0H
MOV TH0,#0FFH


MOV IE,#0AH
MOV IP,#02H

MOV SP,#5FH

MOV R7,#48H
MOV R0,#18H

INITRAM:

MOV @R0,#00H
INC R0
DJNZ R7,INITRAM


MOV R0,#0AH
MOVX A,@R0
MOV R1,A
ANL A,#70H
XRL A,#20H
JZ S1          ;判断时钟芯片是否启动
SJMP S2

S1:

AJMP START1

S2:

MOV A,R1
CLR ACC.4
SETB ACC.5
CLR ACC.6
MOVX @R0,A
MOV R0,#0BH
MOV A,#02H
MOVX @R0,A           ;启动时钟芯片

MOV R0,#01H
MOV A,#00H
MOVX @R0,A
MOV R0,#03H
MOV A,#0FFH
MOVX @R0,A           ;每分钟报警
MOV R0,#05H
MOVX @R0,A           ;每小时报警      

MOV R0,#40H
MOV A,#00H    
MOVX @R0,A          ;HOUR
INC R0              ;MOV R0,#41H
MOV A,#01H   
MOVX @R0,A          ;MINATE
INC R0              ;MOV R0,#42H
MOV A,#01H          ;No.
MOVX @R0,A
INC R0              ;MOV R0,#43H
MOV A,#03H          ;初始标志值:系统运行--1,电机停--0,阀门关闭--1 
MOVX @R0,A

MOV R0,#21H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#22H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#23H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#24H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#25H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#26H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#27H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#28H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#29H
MOV A,#00H   
MOVX @R0,A
INC R0               ;MOV R0,#2AH
MOV A,#01H  
MOVX @R0,A

INC R0                ;MOV R0,#2BH
MOV A,#00H   
MOVX @R0,A
INC R0                ;MOV R0,#2CH
MOV A,#01H  
MOVX @R0,A


MOV R0,#31H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#32H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#33H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#34H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#35H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#36H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#37H
MOV A,#00H   
MOVX @R0,A
INC R0              ;MOV R0,#38H
MOV A,#01H  
MOVX @R0,A

INC R0              ;MOV R0,#39H
MOV A,#00H   
MOVX @R0,A
INC R0               ;MOV R0,#3AH
MOV A,#01H  
MOVX @R0,A

INC R0                ;MOV R0,#3BH
MOV A,#00H   
MOVX @R0,A
INC R0                ;MOV R0,#3CH
MOV A,#01H  
MOVX @R0,A

START1:

;mov p2,#00h
;mov p3,#00h


;MOV R0,#42H
;INC R0        ;MOV R0,#42H
;MOVX A,@R0    ;No.
;MOV  RUNNO,A      

;INC R0                    ;MOV R0,#43H
;MOVX A,@R0   
;MOV  20H,A                 ;FLAGS

orl p1,#0ffh
mov a,p1
MOV 21H,A    ;STATUS OF PORT

anl A,#3fh
XRL A,#3FH
JNZ MADAOFF  ;电机正转到RUN_POINT停机

;电机正转到中间停机

CLR 23H.0         ;关闭阀门
setb 23H.1         ;接通电机
SETB 23H.2         ;中间转换灯亮
clr 23h.3
lcall output         ;输出控制

READPORT:

orl P1,#0ffh       ;不停地检测端口直到电机停止
MOV A,P1
MOV 21H,A    ;STATUS OF PORT
anl a,#3fh
XRL A,#3FH
; 增加超时判断并作响应处理语句
JZ READPORT       


;电机停止
MADAOFF:

;setb isrunposflag
lcall jsrealrunno    ;计算工位号
mov a,realrunno
;CJNE A,RUNNO,RUNNONE ;如果工位号与运行号不等,则转走
mov r0,#42h
MOVX A,@R0
;mov a,runno
MOV RUNHOUR,a
mov r0,#40h

inc r0
MOVX A,@R0
MOV RUNMINATE,A

INC R0
MOVX A,@R0
;mov a,realrunno
MOV RUNno,A

;inc runno
AJMP A1

RUNNONE:

MOV RUNNO,A

RL A
DEC A
ORL A,#20H
MOV R0,A
MOVX A,@R0
MOV RUNHOUR,a
INC R0
MOVX A,@R0
MOV RUNMINATE,A

MOV R0,#40H
MOV a,RUNHOUR
MOVX @R0,A
INC R0
MOV A,RUNMINATE
MOVX @R0,A
inc r0
MOV a,RUNNO
MOVX @R0,A

A1:

CLR FAOFFFLAG
CLR MADARUNFLAG
MOV A,20H
MOV R0,#43H
MOVX @R0,A                       ;记录电机停止标志,

;jnb runstatusflag,A2
setb 23h.0                       ;接通阀门
clr 23h.1                        ;关闭电机
clr 23h.2                        ;关闭中间转换灯
clr 23h.3                        ;关闭停机灯
lcall output

;sjmp a3

;A2:

;clr 23h.0                        ;关闭阀门
;clr 23h.1                        ;关闭电机
;clr 23h.2                        ;关闭中间转换灯
;setb 23h.3                       ;接通停机灯
;lcall output


A3:

setb runstatusflag
clr faoffflag
setb updatedispflag
mov dispno,#01h
SETB EA
SETB TR1

WAITINT:

SJMP WAITINT



;####################


INT10MS:

MOV TL1,#0EFH
MOV TH1,#0D8H

MOV TL0,#0F0H
MOV TH0,#0FFH

SETB TR0

SETB DISPFLAG

orl P1,#0ffH
MOV A,P1
;cjne a,oldp1,a4
MOV 21H,A

LCALL JSREALRUNNO

a4:
;mov oldp1,a
MOV A,REALRUNNO
JnZ a5                  ;normalrun

JnB MADARUNFLAG,a5       ;电机不是"转状态",则转走
clr 23h.1                ;转到中间位置,关闭电机主电源
lcall output             
CLR ISRUNPOSFLAG

a5:

jnb faoffflag,detect
ajmp normalrun
;########################################################################

DETECT:

JNB RUNSTATUSFLAG,STOPSTATUS      ;运行态是"停止"(0),则转走
JB MAXLIMFLAG,NORMALRUN           ;运行态是"运行"(1),则判断是否"水位上限",不是(1)则转走

                      ;是"水位上限"的处理
CLR 23H.0                         ;关阀门
setb 23h.3
lcall output                        ;输出控制

CLR RUNSTATUSFLAG                 ;清运行标志
MOV A,20H
MOV R0,#43H
MOVX @R0,A                        ;记录标志

;JB INNORMALDISPFLAG,NORMALRUN
;SETB UPDATEDISPFLAG               ;设置更新显缓标志
;MOV DISPNO, #00H                   ;显示号--熄灭

temp0:

LJMP READKEY                  ;转读键


STOPSTATUS:                   ;"停止态"的处理

JB MINLIMFLAG,temp0      ;是否"水位下限",不是(1)转走
setb runstatusflag
clr faoffflag
MOV A,20H
MOV R0,#43H
MOVX @R0,A                        ;记录标志

setb 23H.0                         ;接通阀门
clr 23h.3
lcall output                        ;输出控制



;###############################################
;-----------------

NORMALRUN:                    

JB MADARUNFLAG,MADARUN        ;电机是"转状态(1)",则转走
JNB FAOFFFLAG,FAON            ;阀门是"接通(0)",则转走

LCALL READCLOCKFLAG           ;读时钟更新标志
JNB 24H.4,TEMP2               ;IF SECOND not UPDATE,jump
INC FAOFFTIME                 ;阀门关闭时间增1


MOV A,FAOFFTIME               ;阀门是"关闭(1)",则取阀门关闭时间
clr c
subb A,#05H
Jc TEMP2                     ;不够5秒转去读键值
 
MOV MADARUNTIME,#00H          ;电机转时间清0

setb faoffflag 
SETB MADARUNFLAG              ;设置电机"转"标志
MOV A,20H
MOV R0,#43H
MOVX @R0,A                    ;记录标志

clr 23h.0         
SETB 23H.1                    ;够5秒,则接通电机
SETB 23H.2                    ;点亮中间转换灯
clr 23h.3

SETB ISRUNPOSFLAG
lcall output                 ;输出控制



TEMP2:

LJMP READKEY                  ;转读键

FAON:                         ;当前阀门正接通

SETB 23H.0
CLR 23H.1
CLR 23H.2
clr 23h.3
lcall output

LCALL READCLOCKFLAG           ;读时钟更新标志
JNB 24H.4,TEMP2 
inc 46h
mov a,46h
clr c
subb a,#3ch
jc temp2
mov 46h,#00h
;JNB 24H.5,TEMP2               ;无分更新则转走
LCALL DECruntime                 ;有分更新,则"运行分"减1
JB INNORMALDISPFLAG,C1
SETB UPDATEDISPFLAG
MOV DISPNO,#01H

C1:
jnb timeonflag,temp3

;setb ISRUNPOSFLAG
SETB FAOFFFLAG                ;分.时都为0,则设置并记录"阀门关闭"
MOV FAOFFTIME,#00H            ;清阀门关闭时间--准备记时
CLR 23H.0                     ;阀门断电,则阀门应自动关闭--常闭
clr 23h.1
clr 23h.2
clr 23h.3
lcall output     ;关闭阀门


TEMP3:


MOV R0,#40H
MOV a,RUNHOUR
MOVX @R0,A
INC R0
MOV A,RUNMINATE
MOVX @R0,A
inc r0
MOV a,RUNNO
MOVX @R0,A

TEMP4:

LJMP READKEY

MADARUN:

JB ISRUNPOSFLAG,TEMP4        
MOV A,REALRUNNO
JZ TEMP4


SETB 23H.0      ;开启阀门
clr 23h.1
CLR 23H.2       ;关闭中间转换灯

lcall output


CLR MADARUNFLAG
CLR FAOFFFLAG
MOV R0,#43H
MOV A,20H
MOVX @R0,A

SETB ISRUNPOSFLAG

INC RUNNO
MOV A,RUNNO
clr c
subb A,#07H
Jc RUNNOINC
MOV RUNNO,#01H

RUNNOINC:

MOV A,RUNNO
RL A
DEC A
ORL A,#20H

MOV R0,A
MOVX A,@R0

MOV RUNHOUR,A
INC R0
MOVX A,@R0
MOV RUNMINATE,A

MOV A,RUNHOUR
MOV R0,#40H
MOVX @R0,A
MOV A,RUNMINATE
INC R0                ;MOV R0,#41H
MOVX @R0,A
MOV a,RUNNO
inc r0                 ;MOV R0,#42H
MOVX @R0,A

JB INNORMALDISPFLAG,TEMP5
SETB UPDATEDISPFLAG
MOV DISPNO,#01H

TEMP5:

LJMP READKEY

;TIMEOUT:

;INC MADAOFFNUM
;MOV A,MADAOFFNUM
;XRL A,#64H
;JNZ RC
;CLR 23H.1
;MOV P2,#0FBH
;MOV R0,#0FFH
;MOV A,23H
;MOVX @R0,A

;RC:

;LCALL READCLOCKFLAG
;JNB 24H.4,READKEY
;INC MADAOFFTIME
;MOV A,MADAOFFTIME
;XRL A,#05H
;JNZ READKEY
;CLR P3.5
;SJMP READKEY

READKEY:                      


LCALL KEYSCAN

WAITINT1MS:

JB DISPFLAG,WAITINT1MS
LCALL UPDATEDISPBUFFER

RETI
;######################



;########################
READCLOCKFLAG:

PUSH ACC

MOV R0,#0cH
MOVX A,@R0
MOV 24H,A

POP ACC

RET
;###################
output:

push acc

mov a,23h
mov p2,a              
setb p3.5
nop
clr p3.5

pop acc

ret

;#######################
DECRUNtime:

PUSH ACC

MOV A,RUNMINATE
jnz sw0
mov a,runhour
jz ret3

ANL A,#0FH
JZ SW1
DEC RUNHOUR

SJMP RET2

SW1:

MOV A,RUNHOUR
SUBB A,#10H
ADD A,#09H
MOV RUNHOUR,A

RET2:

MOV RUNMINATE,#60h

sw0:

mov a,runminate
ANL A,#0FH
JZ SW
DEC RUNMINATE
SJMP RET1

SW:

MOV A,RUNMINATE
SUBB A,#10H
ADD A,#09H
MOV RUNMINATE,A

RET1:
MOV A,RUNMINATE
jnz sw2
mov a,runhour
jz ret3

sw2:
clr timeonflag
sjmp ret4

ret3:

setb timeonflag

ret4:

POP ACC

RET
;######################

JSREALRUNNO:

;PUSH ACC

⌨️ 快捷键说明

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