📄 086.asm
字号:
MOV GJBZ1,A
LJMP K07CLend
;------------------------------------------------------------------------------------
;快注键处理
;------------------------------------------------------------------------------------
K06CL:
;置位快注标志
MOV R0,#KUAIZHU ;
MOV A,@R0
JZ NOTKUAIZHU
LJMP K06CLRET ;已经在快注状态
NOTKUAIZHU:
;非快注状态
MOV A,FATALERR
JZ NOTKUAIZHU_0
;有致命错误
LJMP K06CLRET
NOTKUAIZHU_0:
MOV A,GJBZ1 ;告警标志定义:b7=1 漏液,b6=暂停超时,b5=输完,b4=门,b3=机障,b2=阻塞,b1=气泡,b0=欠压
JZ K06CL_0
;有故障的情况下
MOV A,GJBZ1
xrl A,#00000010B
JZ K06CL_0 ;ZHIYOUQIPAOBAOJING
LJMP K06CLRET
K06CL_0:
;进入快注前需要判断是否能够输液(设定量是否大于输液累计量)ff可以输液
lcall JUDGSTARTCONDITION
JNZ K06CL_00
;不能输液
LJMP K06CLRET
K06CL_00:
;快注前状态保存
MOV A,DJBEG
JNZ K06CL_01
mov FRONTALSTATUSOFKZ,#00H
JMP K06CL_02
K06CL_01:
mov FRONTALSTATUSOFKZ,#01H
K06CL_02:
MOV R0,#KUAIZHU ;
MOV @R0,#0FFH
;当前窗口马上切换为10号总累计窗口,且显示
MOV WINDOWS,#10
MOV A,#0FFH ;
MOV @R0,A ;
fastTransfuse:
MOV TIMBZ3,#00H
;流速/或滴速显示也需要刷新为快注显示
;将当前输液运行滴速控制寄存器读出备份到KDDSL
MOV R1,#SAVENDSJCQL ;
MOV A,@R1 ;
MOV R0,#KDDSL;
MOV @R0,A;
INC R1;
MOV A,@R1;
MOV R0,#KDDSH ;
MOV @R0,A ;
MOV A,P6
ORL A,#00011111B
MOV P6,A
MOV A,P6
JB ACC.4, FASTRATE500
;快速流速2:1000ml/小时(只能逼近) 暂定333滴每分 0x0898
MOV R1,#SAVENDSJCQL
MOV A,#05H
MOV @R1,A
INC R1
MOV A,#0DH
MOV @R1,A
;根据快注滴速 转换算出电机控制参数
;快注需分级增加速度( 先给一个中等的速度值)
MOV R0,#SAVENDSJCQL;计算分段用控制字
mov A,@R0
PUSH ACC
INC R0
MOV A,@R0
PUSH ACC
MOV R0,#SAVENDSJCQL;计算分段用控制字
MOV A,#0c4H
MOV @R0,A
INC R0
MOV A,#09H
MOV @R0,A
JMP fastTransfuse_0
FASTRATE500:
;快注流速1 :调试500ml/小时:以20滴/毫升管型调试,166.7滴/分 (0683H) 按190(76c)
MOV R1,#SAVENDSJCQL
MOV A,#06cH
MOV @R1,A
INC R1
MOV A,#07H
MOV @R1,A
;根据快注滴速 转换算出电机控制参数
;快注需分级增加速度( 先给一个中等的速度值)
MOV R0,#SAVENDSJCQL;计算分段用控制字
mov A,@R0
PUSH ACC
INC R0
MOV A,@R0
PUSH ACC
MOV R0,#SAVENDSJCQL;计算分段用控制字
MOV A,#0DCH
MOV @R0,A
INC R0
MOV A,#05H
MOV @R0,A
fastTransfuse_0:
;换算出管型对应的控制滴速
LCALL STARTSPEED
;=======================使能电机运行===================================
;复位电机控制芯片
MOV A,P5K
ORL A,#00100000B
MOV P5K,A
LCALL SETP5VALUE
;YANSHI
MOV R0,#20
RESETMOTO1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R0,RESETMOTO1
MOV A,P5K
anl A,#11011111B
MOV P5K,A
LCALL SETP5VALUE
;设置电机控制为16细分
MOV A,P5K
; ORL A,#00000100B ;M2=1
ANL A,#11110111B ;M1=0
MOV P5K,A
LCALL SETP5VALUE
MOV A,P5K
ORL A,#10000000B;;
LCALL SETP5VALUE
;启动电机运行
SETB TR1
;=======================================================================
MOV DJBEG,#0FAH ;置位电机运转标志
;为刷新快注速度马上设置监测速度时间到
mov JAZN,#31
; LCALL DELAY5S
;低速启动后慢慢调整到高速运行
POP ACC
MOV R0,#SAVENDSJCQH;计算分段用控制字
MOV @R0,A
DEC R0
POP ACC
MOV @R0,A
; LCALL STARTSPEED
K06CLRET:
RET
;--------------------------------------------------------------
;快注结束 将KDDSL的参数取出恢复到快注前的滴速 并计算出相应马达控制参数
;--------------------------------------------------------------
K06CL1:
;ANL GJBZ,#10111111B;
MOV R0,#KUAIZHU
MOV A,#00H
MOV @R0,A
MOV R0,#KDDSL;
MOV R1,#SAVENDSJCQL;
MOV A,@R0;
MOV @R1,A;
MOV DDSL,A
INC R1;
INC R0;
;MOV DDSL,A;
MOV R0,#KDDSH;
MOV A,@R0
MOV @R1,A
MOV DDSH,A
;MOV DDSH,A;
MOV DJBEG,#00H;
CLR TR1
MOV A,P5K
ANL A,#01111111B;;
LCALL SETP5VALUE
;根据前面的流速控制类型,重新显示原来的设置流速值
MOV A,FLOWRATETYPE
JZ K06CL1_0
LJMP K06CL1_1
K06CL1_0:
;原来显示的是滴速
MOV JCQ1,#DISM1;
MOV R0,#SAVENDSJCQL
MOV A,@R0
MOV XSTMPL,A
INC R0
MOV A,@R0
MOV XSTMPH,A
lcall BCDZF
ljmp K06CL1_2
K06CL1_1:
;原来显示的是毫升/小时
MOV JCQ1,#DISM1;
MOV R0,#SAVENHASENL
MOV A,@R0
MOV XSTMPL,A
INC R0
MOV A,@R0
MOV XSTMPH,A
lcall BCDZF
K06CL1_2:
lcall LED1
lcall LED2
lcall LED3
lcall LED4
;根据快注前状态进行处理
mov A,FRONTALSTATUSOFKZ
JNZ FastPreTrans
;快注前不在输液状态,转为暂停状态
MOV R0,#STATUS ;机器运行状态字:b7=1 输完,b6=1 暂停,b5=1故障暂停(无计时限),b4=1锁键盘,b3=,b2=,b1=1(定量),b0=1(按滴/分控制,b0=0(按ml/小时控制)
MOV A,@R0 ;b7=1: B6=1 暂停
ORL A,#01000000B
anl A,#11101111B
MOV @R0,A
;初始化暂停计时器
MOV R0,#PAUSETIME
MOV @R0,#00H
;初始化暂停超时报警标志为0
MOV A,GJBZ1;第6位为暂停超时标志
ANL A,#10111111B
MOV GJBZ1,A
;置位电机转动标志
MOV DJBEG,#00H
LJMP K06CL1RET
FastPreTrans:
;恢复到继续输液状态
LCALL DRP2
MOV DJBEG,#0FAH;
MOV A,P1
ORL A,#10000000B
MOV P1,A
;启动电机运行
SETB TR1
MOV A,P5K
ORL A,#10000000B;;
LCALL SETP5VALUE
K06CL1RET:
RET
;------------------------------------------------------------------------------------
;确认键处理
;
;------------------------------------------------------------------------------------
K05CL:;确认
MOV R0,#ADJUSTPUMPFLAG
MOV @R0,#00H
mov A,GJBZ1
JNZ K05CL_CLRWARN ;有报警信息
MOV A,FATALERR
JNZ K05CL_CLRWARN
;无故障信息
JMP K05CL_enter
K05CL_CLRWARN:
LCALL WDISMRealPara
LCALL BCDZF;将暂存转换为BCD码送对应窗口显存
;对故障进行确认也清除故障信息
LCALL CLEARWARNFLAG;mov GJBZ1,#00H
MOV TIMBZ3,#00H
MOV R0,#PAUSETIME
MOV A,#00H
MOV @R0,A
;灭警告灯及光带显示还原
MOV A,P5K
ANL A,#11101111B
LCALL SETP5VALUE
MOV R7,DISM13 ;只发后四位;关"阻塞,气泡,欠压"
MOV R2,#02H;
MOV R6,#22;
LCALL WRCOM1;
;有报警信息,清除报警信息后返回
LJMP K05CLRET
K05CL_enter:
MOV A,DJBEG
JZ K05CL_enter_0
;电机运行状态下不处理
LJMP K05CLRET
K05CL_enter_0:
;滴速或流速窗口,针头窗口需要输入值判断
MOV A,WINDOWS
CJNE A,#04H,K05CL_0
JMP K05CL_1
K05CL_0:
CJNE A,#06H,K05CL_01 ;不等于04,也不等于06,察看是否等于02
JMP K05CL_1
K05CL_01:
CJNE A,#02H,K05CL_011 ;不等于04,06也不等于02,延续原来的处理
JMP K05CL_1
K05CL_011:
CJNE A,#08H,K05CL_2 ;不等于04,06也不等于02,延续原来的处理
K05CL_1:
lcall BCD4ADD ;将输入窗口的值转换成HEX并存入XSTMPH/L
;---------------------------------------------------------------------------------------------------------
;函数名称: COMPERR
;函数输入: XSTMPH XSTMPL 各项参数当前的设定值(根据窗口号判断最大,最小值限定)
;函数输出: PSW.5 ( 1:不正确 0:正确 )
;函数功能描述: 判定各项设定值输入是否正确
;其他说明:
;---------------------------------------------------------------------------------------------------------
LCALL COMPERR
JNB 0D5H,K05CL_2;PSW.5的位址; 输入正确
;输入错误报警
LCALL BEEPDELAY
LCALL TONE_ERR
;------------------值输入错误的处理-------------------
;显示原来的值,并将窗口输入显示位归0
LCALL WDISMRealPara;将00ZD付给XSTEMPH/L 并将DISM5地址赋值给JSQ1
LCALL BCDZF;将XSTEMPH/L转换成BCD码并存入DISM5
MOV WBZ,#00H
ljmp K05CLRET
;--------------------------------------------------
K05CL_2:
;按键输入正确
lcall BEEPDELAY
LCALL TONE_ENTER
CLR C
MOV A,#13
CPL A
ADD A,WINDOWS
JC K05CL_2ERR
ljmp K05CL_2OK
K05CL_2ERR:
;窗口号越界,不处理
LJMP K05CLRET
K05CL_2OK:
MOV A,WINDOWS
CLR C
RRC A;
MOV R1,A;
RL A;
ADD A,R1; (A)*3
MOV DPTR,#TAB20;
JMP @A+DPTR;
TAB20:
LJMP CXZ ;存校正值
LJMP CZD ;存针头大小
LJMP DRP ;存滴速
LJMP HSQRN ;存流速(毫升/小时)参数
LJMP CTOTAL ;存输液设定量;
LJMP CSUM ;输液总累计窗口确认
LJMP SAVESTEPSIGN ;校正符号保存
K05CLRET:
LJMP XF;
;---------------------------------------------------------------------
;函数功能:将KCODE值保存到 @JCQ1+WBZ 的RAM中
;按WBZ位标志索引指定位置存放键值(输入数值移动处理)
;----------------------------------------------------------------------
BCDMOV:
MOV A,WBZ
JZ BCDMOVRET ;等于0直接刷新最后一位数字
;不等于0
LCALL GETW;得当前逻辑窗口的物理窗口A
XRL A,#02
JNZ BMOV1 ;非管型,校正窗口
;管型,校正窗口 ===>寄存器数等于2
MOV R7,#02H;
JMP BMOV2;
BMOV1:
;非管型,校正窗口 ===>寄存器数等于4
MOV R7,#04H;
BMOV2:
;计算出最高位存储地址
MOV R0,JCQ1;
MOV A,R7
CLR C
ADD A,R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -