📄 skz.asm
字号:
;#################
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 + -