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

📄 subroutine.asm

📁 本装置是一个以HT46R71D 为主芯片
💻 ASM
📖 第 1 页 / 共 2 页
字号:
L_DEAL_LOOP2:							;;binary to decimal
	CALL	DA999						
	XMOV	R_LCD3,		TO0				
	XMOV	R_LCD2,		TO1
	XMOV	R_LCD1,		TO2				;;(R_LCD3,R_LCD2,R_LCD1)=@@@
	RET

SBR_CALT_LOOP:	
	SZ		F_PSI						;;if Psi
	JMP		L_CALT_PSI
	SZ		F_BAR						;;if Bar
	JMP		L_CALT_BAR
	SZ		F_KPA						;;if Kpa
	JMP		L_CALT_KPA
	SZ		F_KGFCM2					;;if Kgf/cm2
	JMP		L_CALT_KGFCM2
	RET	
L_CALT_PSI:
	XMOV	DATA4,	LOW PSI_FULL
	XMOV	DATA5,	HIGH PSI_FULL
	CLR		DATA6						;;set the multiplier
	RET
L_CALT_BAR:
	XMOV	DATA4,	LOW BAR_FULL
	XMOV	DATA5,	HIGH BAR_FULL
	CLR		DATA6						;;set the multiplier
	RET
L_CALT_KPA:
	XMOV	DATA4,	LOW KPA_FULL_L16
	XMOV	DATA5,	HIGH KPA_FULL_L16
	XMOV	DATA6,	KPA_FULL_H16		;;set the multiplier
	RET			
L_CALT_KGFCM2:
	XMOV	DATA4,	LOW KGFCM2_FULL
	XMOV	DATA5,	HIGH KGFCM2_FULL
	CLR		DATA6						;;set the multiplier
	RET
;;---------------------------------------------------------
SBR_KEY_SCAN:							;;detect key
;;---------------------------------------------------------	
	XMOV	DEBOUNCE_COUNTER,	R_20MS	;;detect key for 20mS
	CLR		F_KEY_TMP				
SBR_KEY_SCAN_LOOP:
	CLR		TMR0C.4
	XMOV	TMR0,		208				;;4mS
	XMOV	TMR0C,		0B0H
	CLR		WDT
	SNZ		INTC0.5
	JMP		$-2
	CLR		INTC0.5
	CLR		TMR0C.4

	SNZ 	KEY_IO						;;check if key press or not
	JMP		$+3
	CLR		F_KEY						;;key no
	JMP		KEY_CHECK
	SET		F_KEY						;;key yes

KEY_CHECK:			
	CLR		WDT							;;check if key change or not
	SZ		F_KEY
	JMP		$+4
	SZ		F_KEY_TMP	
	JMP		KEY_CHANGE
	JMP		$+2
	SZ		F_KEY_TMP
	JMP		$+2
	JMP 	KEY_CHANGE	

	DEC		DEBOUNCE_COUNTER	
	SZ		DEBOUNCE_COUNTER
	JMP		SBR_KEY_SCAN_LOOP			
	XMOV	DEBOUNCE_COUNTER,	R_20MS
	JMP		KEY_VERIFY1

KEY_CHANGE:
	SZ		F_KEY_TMP					;;save F_KEY to F_KEY_TMP
	JMP		$+3
	SET		F_KEY_TMP
	JMP		$+2	
	CLR		F_KEY_TMP
	XMOV	DEBOUNCE_COUNTER,	R_20MS
	JMP 	SBR_KEY_SCAN_LOOP				

KEY_VERIFY1:							;;save F_KEY to F_KEY_PREV
	SZ		F_KEY						
	JMP		KEY_VERIFY2
	SZ		F_KEY_PREV
	JMP		$+3
	SET		F_REPEAT
	JMP		L_RET_LOOP
	CLR		F_REPEAT
	CLR		F_KEY_PREV
	JMP		L_RET_LOOP					;;ret
KEY_VERIFY2:
	SZ		F_KEY_PREV
	JMP		$+4
	CLR		F_REPEAT
	SET		F_KEY_PREV
	JMP		L_RET_LOOP
	SET		F_REPEAT
	JMP		L_RET_LOOP					;;ret
;;---------------------------------------------------------
SBR_KEY_JUMP:		;;deal with key
;;---------------------------------------------------------
	CLR		WDT
	SZ		F_KEY						;;if key yes or no
	JMP		L_KEY_CYCLE					
L_KEY_NO:								;;key no							
	INC		R_60S_L							
	SNZ		Z
	JMP		$+2
	INC		R_60S_H	
	EJMP	R_60S_L,	0B8H
	RET
	EJMP	R_60S_H,	0BH				;;if timing for 60s or not
	RET									;;if no,return	
	SET		F_HALT						;;if yes, then set the flag of halt 
	RET
L_KEY_CYCLE:							;;key yes and changing the unit circularly
	CLR		R_60S_L
	CLR		R_60S_H	
	SZ		F_REPEAT					;;if repeat key ,then return
	RET
	MOV		A,			R_UNIT			;;change the unit circularly
	AND		A,			00001111B
	MOV		R_TO0,		A
	XOR		A,		00001000B
	SNZ		Z
	JMP		$+4
	CLR		ACC
	SET		ACC.0
	JMP		$+3
	MOV		A,			R_TO0
	RL		ACC

	SZ		R_UNIT.4
	SET		ACC.4
	SZ		R_UNIT.5
	SET		ACC.5
	SZ		R_UNIT.6
	SET		ACC.6
	MOV		R_UNIT,		A
	RET
;;---------------------------------------------------------
SBR_DIS:							;;display the presure value(decimal )
;;--------------------------------------------------------- 
	CLR		WDT					
	XMOV	TBLP,		R_LCD1		
	XMOV	BP,			01H
	XMOV	MP1,		40H
	CALL	SBR_DIS_LOOP			;;display R_LCD1

	CLR		R1.0 
	SNZ		F_BAR					
	JMP		$+2
	SET		R1.0					;;display 'BAR'

	CLR		R1.2
	SNZ		F_LCD_DOT1
	JMP		$+2
	SET		R1.2					;;display 'dot1'
	
	XMOV	TBLP,		R_LCD2							
	INC		MP1
	CALL	SBR_DIS_LOOP			;;display R_LCD2

	CLR		R1.0
	SNZ		F_KPA
	JMP		$+2
	SET		R1.0					;;display 'KPA'

	CLR		R1.2
	SNZ		F_LCD_DOT2
	JMP		$+2
	SET		R1.2					;;display 'dot2'

	XMOV	TBLP,		R_LCD3
	INC		MP1
	CALL	SBR_DIS_LOOP			;;display R_LCD3

	CLR		R1.0
	SNZ		F_KGFCM2
	JMP		$+2
	SET		R1.0					;;display 'KGFCM2'

	CLR		R1.2
	SNZ		F_PSI
	JMP		$+2
	SET		R1.2					;;display 'PSI'
	CLR		BP
	RET	
;;-------------------------------------------------------
SBR_DIS_LOOP:						
	CLR		WDT
	TABRDL	R_DIS					;;read the table value
	XAND	R_DIS,		07H
	MOV		R1,			A			;;display 'D,E,F' segment
	
	INC		MP1
	SWAPA	R_DIS
	AND		A,			00000111B
	MOV		R1,			A			;;display 'C,G,A' segment

	INC		MP1
	SNZ		R_DIS.3
	JMP		$+3
	SET		R1.1					;;display 'B' segment
	RET
	CLR		R1.1
	RET
;;--------------------------------------------------------
DA999:                     			;;(DATA1,DATA0)H->(TO2,TO1,TO0)D
;;--------------------------------------------------------
	CLR		WDT
	CLR		TO0
	CLR		TO1
	CLR		TO2
DA_L2:
    MOV     A,      DATA0
    SUB     A,      100
    SZ      C
    JMP     DA_L0
    SZ      DATA1
    JMP     DA_L1
DA_L4:
	CLR		WDT
    MOV     A,      DATA0
    SUB     A,      10
    SZ      C
    JMP     DA_L3
    MOV     A,      DATA0
    MOV     TO0,    A
    RET
DA_L3:
	CLR		WDT
    MOV     DATA0,  A
    INC     TO1
    JMP     DA_L4
DA_L1:
    DEC     DATA1
DA_L0:
	CLR		WDT
    MOV     DATA0,  A
    INC     TO2
    JMP     DA_L2
;=========================================================
;24 BIT DATA CALCULATION
;=========================================================
UNBIN_ADD_24 PROC					
	INIT
    	MOV	A, DATA0         ;DATA0DATA1DATA2+DATA4DATA5DATA6---->TO0TO1TO2TO3 
        ADD	A, DATA4
        MOV	TO0, A
        MOV	A, DATA1
        ADC	A, DATA5
        MOV	TO1, A
        MOV	A, DATA2
        ADC	A, DATA6
        MOV	TO2, A
        MOV	A, 00H
        ADCM	A, TO3
        RET
UNBIN_ADD_24 ENDP

;24 BIT UNSIGNED SUB
UNBIN_SUB_24 PROC      		;DATA0DATA1DATA2-DATA4DATA5DATA6---->TO0TO1TO2TO3
	INIT
	MOV	A, DATA0
	SUB	A, DATA4
        MOV	TO0, A
        MOV	A, DATA1
	SBC	A, DATA5
        MOV	TO1, A
        MOV	A, DATA2
	SBC	A, DATA6
        MOV	TO2, A
	MOV	A, 00H
	SBCM	A, TO3
	RET
UNBIN_SUB_24 ENDP

;24 BIT UNSIGNED MUL 
UNBIN_MUL_24 PROC			;DATA0DATA1DATA2*DATA4DATA5DATA6---->TO0TO1TO2TO3TO4TO5
	INIT
	MOV	A, 18H
	MOV	COUNT0, A    
    	CLR	[0AH].0  
RRADD24:
	CLR	WDT
	RRC	TO5
        RRC	TO4
        RRC	TO3
        RRC	DATA6
        RRC	DATA5         
        RRC	DATA4
        SNZ	[0AH].0      
        JMP	RR124
        MOV	A, DATA0
        ADDM	A, TO3
        MOV	A, DATA1
        ADCM	A, TO4
        MOV	A, DATA2
        ADCM	A, TO5
RR124: 
		CLR		WDT
 	SDZ	COUNT0
        JMP	RRADD24
        RRC	TO5     
        RRC	TO4
        RRC	TO3
        RRC	DATA6
        RRC	DATA5
        RRC	DATA4
        MOV	A, DATA4
        MOV	TO0, A
        MOV	A, DATA5
        MOV	TO1, A
        MOV	A, DATA6
        MOV	TO2, A
	RET
UNBIN_MUL_24 ENDP

;24  BIT UNSIGNED DIV
UNBIN_DIV_24 PROC               ;DATA0DATA1DATA2/DATA4DATA5DATA6---->DATA0DATA1DATA2(TO0TO1TO2)---TO4TO5TO6  
        INIT
        MOV     A,18H   
        MOV     COUNT0, A 
        SZ      DATA6   
        JMP     START24
        SZ      DATA5
        JMP     START24
        SZ      DATA4           
        JMP     START24
        JMP     OVER24
START24:
		CLR		WDT
        SZ      DATA2   
        JMP     DIV24
        SZ      DATA1
        JMP     DIV24
        SZ      DATA0
        JMP     DIV24
        JMP     DISPA24
DIV24:  
		CLR		WDT
        CLR     [0AH].0 
        RLC     DATA0
        RLC     DATA1
        RLC     DATA2
        RLC     TO4
        RLC     TO5  
        RLC     TO6     
        MOV     A, TO4  
        SUB     A, DATA4
        MOV     COM3, A
        MOV     A, TO5
        SBC     A, DATA5
        MOV     COM4, A
        MOV     A, TO6
        SBC     A, DATA6
        SNZ     [0AH].0        
        JMP     NEXT24  
        MOV     TO6, A
        MOV     A, COM3
        MOV     TO4, A
        MOV     A, COM4
        MOV     TO5, A  
        MOV     A, 01H
        ADDM    A, DATA0
        MOV     A, 00H
        ADCM    A, DATA1
        ADCM    A, DATA2
NEXT24:  
		CLR		WDT
        SDZ     COUNT0
        JMP     DIV24
DISPA24:
		CLR		WDT
        MOV     A, DATA0
        MOV     TO0, A 
        MOV     A, DATA1
        MOV     TO1, A   
        MOV     A, DATA2
        MOV     TO2, A              
        MOV     A, 00H
        MOV     TO3, A
        RET
OVER24:
        RET
UNBIN_DIV_24 ENDP
;;---------------------------------------------------------
TABLE_CODE.SECTION AT 0700H 'CODE'					;;xcga bdef

	DC	05FH,	048H,	03EH,	07CH,	069H		;;0~4;;0700H
	DC	075H,	077H,	058H,	07FH,	07DH		;;5~9;;0709H	
	DC	020H,	000H,	000H,	000H,	000H		;;'-';;070EH
	DC	000H										;;	 ;;070FH
;;********************* V-T table************************
	DC	6526,	6155,	5838,	5520,	5203		;0,5,10,15,20;;0~4mv
	DC	4885,	4568,	4250,	3933,	3615		;25,30,35,40,45;;5~9mv
	DC	3298,	2980,	2662						;50,55,60;;10~14mv		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -