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

📄 086.asm

📁 AVR液晶程序模块
💻 ASM
📖 第 1 页 / 共 5 页
字号:
				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 + -