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

📄 086.asm

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