📄 086.asm
字号:
CLR C
SUBB A,#01H
MOV R0,A
DEC R7
BCDMOVLOOP:
MOV A,R0
DEC A
MOV R1,A
MOV A,@R1
MOV @R0,A
DEC R0
DJNZ R7,BCDMOVLOOP
BCDMOVRET:
;键值放入最后一个寄存器
MOV R0,JCQ1;
MOV A,WINDOWS
RR A
XRL A,#02H
JNZ BCDMOVRET_0
INC R0 ;滴/分窗口的输入移位
BCDMOVRET_0:
MOV @R0,KCODE;
RET
;----------------------------------------------------------------
;校准值保存
;----------------------------------------------------------------
CXZ:
;修改: 保存真正的校正值
MOV R0,#SAVENSTEP
MOV A,step
MOV @R0,A
;如果校正值等于0,不显示正负号
JNZ CXZ0_0
MOV R0,#RAM16;
MOV A,@R0;
ANL A,#11111100B;
;ANL A,#11110111B;
MOV @R0,A ;置校准灯为关;
MOV A,@R0;
MOV R7,A;只发后四位,开S1,关S2,S3;
MOV R2,#01H;
MOV R6,#16;
LCALL WRCOM1;关校准灯
CXZ0_0:
mov A,WINDOWS
XRL A,#00H
JZ CXZ0 ;0窗口调转到1
JMP CXZ1 ;1窗口调转到2
CXZ0:
INC WINDOWS
LCALL WriteInfoToFlash
;显示被校正过的累积信息值
MOV A,WINDOWS
PUSH ACC
lcall ProofreadSUM ;正常输液累计校正
LCALL FASTProofreadSUM ;快速输液累计校正
MOV WINDOWS,#0AH
LCALL WDISMRealPara
LCALL BCDZF
POP ACC
MOV WINDOWS,A
LCALL LED7
LCALL LED8
LCALL LED9
LCALL LED10
JMP CXZ3
CXZ1:
;显示校正值
MOV WINDOWS,#01H
LCALL WDISMRealPara ;将00ZD付给XSTEMPH/L 并将DISM5地址赋值给JSQ1
LCALL BCDZF ;将暂存转换为BCD码送对应窗口显存
MOV WINDOWS,#04H
MOV WBZ,#00H
CXZ3:
LCALL WDISMRealPara ;将00ZD付给XSTEMPH/L 并将DISM5地址赋值给JSQ1
LCALL BCDZF ;将暂存转换为BCD码送对应窗口显存
MOV WBZ,#00H
LJMP K05CLRET;
;----------------------------------------------------------------
;针头类型保存 ;合法的输入只有15 ,20,60 3种类型
;函数入口参数:XSTEMPL 二进制合法的针头内容
;----------------------------------------------------------------
CZD:
MOV A,WINDOWS
xrl A,#02H
JZ CZD_0000
;03号窗口处理
LJMP CZD_1
CZD_0000:
MOV R0,#ZDJCQ;
MOV A,XSTMPL
MOV @R0,A
MOV ZD,A;#20;ZD;#15
;对应滴速及流速也转换
LCALL DSTOHASEN
MOV A,WINDOWS
PUSH ACC
;滴速或流速显示刷新
MOV A,FLOWRATETYPE
XRL A,#01H
JZ REDISAPALYVPH
JMP REDISAPALYDRPPM
REDISAPALYVPH:
;毫升/小时显示
MOV WINDOWS,#07H
LCALL WDISMRealPara
LCALL BCDZF
JMP HSJER5
REDISAPALYDRPPM:
;滴每分显示
MOV WINDOWS,#05H
LCALL WDISMRealPara
LCALL BCDZF
HSJER5:; 针头型号;
POP ACC
MOV WINDOWS,A
;MOV WINDOWS,#02H
;LCALL LED1
;LCALL LED2
;LCALL LED3
;LCALL LED4
;-------------------------------------------------------------------------------
;FLASH写操作所有应该保存的数据一起刷新 |
;-------------------------------------------------------------------------------
;MOV DPTR , #0001H
;MOV R0,ZD
LCALL WriteInfoToFlash
;按确认,显示当前窗口的真实值,并切换到下一个窗口
MOV A,WINDOWS
XRL A,#02H
JZ CZD_0
JMP CZD_1
CZD_0:
MOV WINDOWS,#03H
LCALL WDISMRealPara;将00ZD付给XSTEMPH/L 并将DISM5地址赋值给JSQ1
LCALL BCDZF;将XSTEMPH/L转换成BCD码并存入DISM5
MOV WBZ,#00H
JMP CZD_RET
CZD_1:
;调转到正负号窗口显示
MOV WINDOWS,#12
MOV WBZ,#00H
LCALL WDISMRealPara ;将SAVENDSJCQ的值付给XSTEMPH/L 并将DISM9地址赋值给JSQ1
LCALL BCDZF ;将暂存转换为BCD码送对应窗口显存
CZD_RET:
LJMP K05CLRET;
;----------------------------------------------------------------
;输液预置总量保存
;----------------------------------------------------------------
CTOTAL:
;MOV FLOWRATETYPE,#00H ;当前控制方式为滴速
MOV A,WINDOWS
xrl A,#08H
JZ CTOTAL0
LJMP CTOTAL1 ;09号窗口的处理
CTOTAL0:
;预先设置量输入窗口的确认
;窗口调转
MOV A,TOTAL;
MOV R0,#SAVENTOTALL
MOV @R0,A
INC R0
MOV A,TOTAH
MOV @R0,A
;保存应输液量
LCALL WriteInfoToFlash
MOV WINDOWS,#09H
LJMP CTOTAL3
CTOTAL1:
;调转到总累计设置窗口
MOV WINDOWS,#0aH
MOV WBZ,#00H
CTOTAL3:
LCALL WDISMRealPara ;将SAVENTOTALL的值付给XSTEMPH/L 并将DISM9地址赋值给JSQ1
LCALL BCDZF ;将暂存转换为BCD码送对应窗口显存
MOV WBZ,#00H
LJMP K05CLRET
;----------------------------------------------------------------------------------
;总累计不用保存,确认键直接调转到符号设置窗口
;----------------------------------------------------------------------------------
CSUM:
;先显示总累计窗口的信息值
LCALL WDISMRealPara ;将SUMH的值付给XSTEMPH/L 并将DISM9地址赋值给JSQ1
LCALL BCDZF;将暂存转换为BCD码送对应窗口显存
;MOV WINDOWS, #12 ;增加窗口号到12
MOV WINDOWS,#02H
LCALL WDISMRealPara
LCALL BCDZF ;将暂存转换为BCD码送对应窗口显存
MOV WBZ,#00H
LJMP K05CLRET;
;--------------------------------------------------------------------------
;保存校正符号操作
;--------------------------------------------------------------------------
SAVESTEPSIGN:
;保存校正值符号
MOV R0,#SAVENSTEPSIGN
MOV R1,#STEPSIGN
MOV A,@R1
MOV @R0,A
LCALL WriteInfoToFlash
;R4R5 = 计算结果
LCALL ADDCURRENTSUMWITHSUM
;刷新总累计值
MOV XSTMPH,R4
MOV XSTMPL,R5
MOV JCQ1,#DISM9
LCALL BCDZF
LCALL LED7
LCALL LED8
LCALL LED9
LCALL LED10
;窗口切换
MOV WINDOWS,#00H
MOV WBZ,#00H
LCALL WDISMRealPara
LCALL BCDZF
LJMP K05CLRET;
;--------------------------------------------------------------------------
;设定滴速确认操作
;--------------------------------------------------------------------------
DRP:
MOV FLOWRATETYPE,#00H
MOV A,FLOWRATETYPE
;修改 保存真正的输液过程控制设定滴速寄存器
MOV R0,#SAVENDSJCQL
MOV R1,#DSJCQL ;该参数只用于显示与输入
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
LCALL DSTOHASEN
;保存设定流速到FLASH中,以备下次重新上电时直接恢复
;-------------------------------------------------------------------------------
;FLASH写操作 DPTR 写入地址; R0 :写入内容 |
;-------------------------------------------------------------------------------
;MOV DPTR,#ADDR_SAVENDSJCQ
;DEC R1
;MOV A,@R1
;MOV R0,A
;快注模式下,不保存滴速参数
MOV R0,#KUAIZHU
MOV A,@R0
JNZ DRP0
;保存滴速设置值到FLASH中
LCALL WriteInfoToFlash
;lcall ReadInfoFromFlash
;INC DPTR
;INC R1
;MOV A,@R1
;MOV R0,A
;LCALL WriteInfoToFlash
;lcall ReadInfoFromFlash
DRP0:
LJMP DRP1 ;
DRP1:
;原程序: MOV R0,#DSJCQL;
;修改: 按保存的滴速寄存器计算
MOV R0,#SAVENDSJCQL;计算分段用控制字
MOV A,@R0;
MOV DDSL,A;
;MOV A,DDSL;
;MOV @R0,A;
INC R0;
;MOV A,DDSH;
;MOV @R0,A;
MOV A,@R0;
MOV DDSH,A;
;根据管型换算出20滴/毫升管对应的DDSH/L控制参数
;入口参数: DDSH/L,出口参数: DDSH/L
lcall DRPFS1
DRP62:
;---------------------------------------------
;20滴/毫升(管型) 驱动参数查取函数DRP2()
;---------------------------------------------
LCALL DRP2;
;按确认,显示当前窗口的真实值,并切换到下一个窗口
LCALL WDISMRealPara ;将滴速/或流速寄存器的值赋给XSTEMPH/L,并将DISM1地址付给JCQ1
LCALL BCDZF;将暂存转换为BCD码送对应窗口显存
;切换窗口到总累计量窗口
MOV WINDOWS,#0AH
MOV WBZ,#00H
LCALL WDISMRealPara ;将设置量寄存器的值赋给XSTEMPH/L,并将DISM9地址付给JCQ1
LCALL BCDZF;将暂存转换为BCD码送对应窗口显存
MOV WBZ,#00H
LJMP K05CLRET;
;--------------------------------------------------------------------------------------------------
;函数名称 :drp2
;函数输入 :
;函数输出 :
;函数功能 :
;步骤: (0) 根据针头型号变换驱动点滴数(原来是按20滴做的)
; (1) DDS(点滴分段) = DDSH DDSL/100
; (2) OCCL1H OCCL1L = DDSH DDSL
; (3) 根据当前控制方式(点滴或毫升)提取参数表信息(但实际执行都按滴数控制表查取)
; (4) 计算R5R4R3R2( 00 @TABDRP+3*DDS ~ @TABDRP+3*DDS+2)/ OCCL1H OCCL1L(DDSH DDSL)
;--------------------------------------------------------------------------------------------------
drp2:
MOV A,DDSL
PUSH ACC
MOV A,DDSH
PUSH ACC
drp2_0:
;1.8电机除2处理
MOV A,DDSH
CLR C
RRC A
MOV DDSH,A
MOV A,DDSL
RRC A
MOV DDSL,A
MOV R2,DDSL;
MOV R3,DDSH;
MOV R4,#00H;
MOV R5,#00H;
MOV R6,#32H;
MOV R7,#00H;
;R5R4R3R2 32位被除数;R7R6除数;R3R2商;R5R4余数;参见172页注解
LCALL NSDIV;
MOV DDS,R2;DDS为点滴分段寄存器,取整为段号,约200段;
MOV R2,DDSH;
MOV R3,DDSL;
MOV R6,#00H;
MOV R7,#00;40;
LCALL NSUB1;R2R3-R6R7=R4R5;
MOV R0,#OCCL1L;
MOV A,R5;
MOV @R0,A;
INC R0;
MOV A,R4;
MOV @R0,A;
MOV A,DDS;
MOV R1,A;
RL A;
ADD A,R1;(A)*3
MOV R0,A;结果暂存
;其实都是按照滴速表控制
MOV R1,#STATUS ;读取当前输液控制状态
MOV A,@R1;
JB ACC.0,DDKZ1;
MOV A,R0;
MOV DPTR,#TABDRP;
LJMP HSKZ1;按:ml/小时控
DDKZ1:
MOV A,R0;
MOV DPTR,#TABDRP;
HSKZ1:
MOVC A,@A+DPTR;
MOV R4,A;
INC R0;
MOV A,R0;
MOVC A,@A+DPTR;
MOV R3,A;
INC R0;
MOV A,R0;
MOVC A,@A+DPTR;
MOV R2,A;
MOV R5,#00H;
MOV R0,#OCCL1L;
MOV A,@R0;
MOV R6,A;
INC R0;
MOV A,@R0;
MOV R7,A;
;计算R5R4R3R2( 00 @TABDRP+3*DDS ~ @TABDRP+3*DDS+2)/ OCCL1H OCCL1L(DDSH DDSL)
;R5R4R3R2 32位被除数;R7R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -