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

📄 scale_ad.asm

📁 VCP201_CODE is a FPGA source code.
💻 ASM
字号:
;=================================================
; File name : Scale_AD.asm
; PF2107 Dual Impact 2 (ASIC)
;
; Input Data : 
; Return :
;=================================================
scale_ad:
	movlw	0xff
	movwf	key_raw1        	

	bsf	bit_up
        bsf	bit_down
        bsf	bit_left
        bsf	bit_right
        bsf	bit_E1
        bsf	bit_E2


;right_data  -----------------------------------
	movf  	right_null,W
	movwf 	vr_null
	movf  	right_val,W
	movwf   vr_val

	call	adj_senser
        sublw	0xff
	movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_right

	bsf	STATUS,RP0
	movf	ana_sen_1,W
	movwf	ANA_40_tmp
	call	check_40_scale
	movwf  	right_val


;left_data  ----------------------------------------
	movf  	left_null,W
	movwf 	vr_null
	movf  	left_val,W
	movwf   vr_val

	call	adj_senser
        sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_left

	bsf	STATUS,RP0
	movf	ana_sen_2,W
	movwf	ANA_40_tmp
	call	check_40_scale
        movwf	left_val


;up_data -----------------------------------------
	movf  	up_null,W		
	movwf 	vr_null		;up_null -> vr_null
	movf  	up_val,W
	movwf 	vr_val		;up_val -> vr_value

	call	adj_senser
        sublw	0xff
	movwf	value_40        	

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_up

	bsf	STATUS,RP0
	movf	ana_sen_3,W
	movwf	ANA_40_tmp
	call	check_40_scale        	
        movwf	up_val


;down_data -----------------------------------------
	movf  	down_null,W		
	movwf 	vr_null		;down_null -> vr_null
	movf  	down_val,W
	movwf 	vr_val		;down_val -> vr_value

	call	adj_senser
	sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_down

	bsf	STATUS,RP0
	movf	ana_sen_4,W
	movwf	ANA_40_tmp
	call	check_40_scale
	movwf  	down_val

;TRI_data -------------------------------------------
	movf  	tri_null,W
	movwf 	vr_null
	movf	tri_val,W
        movwf	vr_val

	call	adj_senser
        sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_tri

	bsf	STATUS,RP0
        movf	ana_sen_5,W
        movwf	ANA_40_tmp
        call	check_40_scale
        movwf	tri_val

;O_data ----------------------------------------------
	movf  	O_null,W		
	movwf 	vr_null		;down_null -> vr_null
	movf  	O_val,W
	movwf 	vr_val		;down_val -> vr_value

	call	adj_senser
        sublw	0xff
	movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_O

	bsf	STATUS,RP0
	movf	ana_sen_6,W
	movwf	ANA_40_tmp
	call	check_40_scale
	movwf	O_val

;X_data  ------------------------------------------
	movf  	X_null,W
	movwf 	vr_null
	movf  	X_val,W
	movwf   vr_val

	call	adj_senser
        sublw 	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_X

	bsf	STATUS,RP0
        movf	ana_sen_7,W
        movwf	ANA_40_tmp
        call	check_40_scale
        movwf	X_val


;SQUARE_data ----------------------------------------
	movf  	square_null,W
	movwf 	vr_null
	movf  	square_val,W
	movwf   vr_val

	call	adj_senser
       	sublw	0xff    
	movwf	value_40

       	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_square

	bsf	STATUS,RP0
	movf	ana_sen_8,W
	movwf	ANA_40_tmp
	call	check_40_scale                     
        movwf	square_val


;L1_data ------------------------------------------
	movf  	L1_null,W
	movwf 	vr_null
	movf  	L1_val,W
	movwf   vr_val

	call	adj_senser
        sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_L1

	bsf	STATUS,RP0
        movf	ana_sen_9,W
        movwf	ANA_40_tmp
        call	check_40_scale
        movwf	L1_val


;R1_data -------------------------------------------
	movf  	R1_null,W
	movwf 	vr_null
	movf  	R1_val,W
	movwf   vr_val

	call	adj_senser
        sublw	0xff
   	movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_R1

	bsf	STATUS,RP0
        movf	ana_sen_10,W
        movwf	ANA_40_tmp
        call	check_40_scale
	movwf	R1_val


;L2_data --------------------------------------------
	movf  	L2_null,W
	movwf 	vr_null
	movf  	L2_val,W
	movwf   vr_val

	call	adj_senser
        sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_L2

	bsf	STATUS,RP0
     	movf	ana_sen_11,W
        movwf	ANA_40_tmp
        call	check_40_scale
        movwf	L2_val


;R2_data -------------------------------------------
	movf  	R2_null,W
	movwf 	vr_null
	movf  	R2_val,W
	movwf   vr_val

	call	adj_senser
	sublw	0xff
        movwf	value_40

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_R2

	bsf	STATUS,RP0
        movf	ana_sen_12,W
        movwf	ANA_40_tmp
        call	check_40_scale
        movwf	R2_val


;E1_data ----------------------------
	movf  	E1_null,W
	movwf 	vr_null
	movf  	E1_val,W
	movwf   vr_val

	call	adj_senser
	sublw	0xff
        movwf	E1_val

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_E1

;E2_data ----------------------------
	movf  	E2_null,W
	movwf 	vr_null
	movf  	E2_val,W
	movwf   vr_val

	call	adj_senser
	sublw	0xff
        movwf	E2_val

	xorlw	0x00
        btfss	STATUS,Z
        bcf	bit_E2

	return


;===============================================
; Adject Senser value
; (Value - min x FF)/(null-min)=new value
; 0-----min--------value--------null----FF
; range:28-----------------------null
;==============================================

adj_senser:			
	subwf	vr_null,W	;Value > Null ?
        btfsc	STATUS,C    	;-ve ?
        goto	adj_senser1   	;No
	movlw	0xff     	;Yes. Out FF
        return

adj_senser1:
	btfss	STATUS,Z	;Value=Null?
        goto	adj_senser2   	;No
	movlw	0xff         	;Yes. Out FF
       	return

adj_senser2:
	movlw	0x28           	;Value < min?
	subwf	vr_val,W

	btfsc	STATUS,C	;-ve?
	goto	adj_senser3	;No
	movlw	0x00		;Yes. return min 00	
	return

adj_senser3:
	btfss	STATUS,Z      	;Value=min 0?
        goto	adj_senser4
        movlw	0x00   		;Yes, Out 00  	
        return

adj_senser4:
	movlw	0x28
	subwf	vr_val,W
        bsf	STATUS,RP0
        movwf	hi_byte
	movlw	0xff
        movwf	lo_byte
        bcf	STATUS,RP0
        call	umul

	movlw	0x28
	subwf	vr_null,W

	bsf	STATUS,RP0
        movwf	divisor
        call	udiv
        bsf	STATUS,RP0
        movf	lo_byte,W
        bcf	STATUS,RP0

	return

;===========================================

check_40_scale:           	;X 1.50
        bcf	STATUS,RP0
	xorlw	0x00            ;40 data = 00?
	btfss	STATUS,Z	;		        	
	goto	check_01       	;NO,check 01?

	movf	value_40,W	;yes
        bsf	STATUS,RP0
	movwf	hi_byte
	movlw	0x96       	;Dec 150
      	movwf	lo_byte
	call	umul

	movlw	0x64		;Dec 100
        bsf	STATUS,RP0
	movwf	divisor
	call	udiv
	goto	check_end

check_01:			;X 1.25	
	bsf	STATUS,RP0
	movf	ANA_40_tmp,W
        bcf	STATUS,RP0
	xorlw	0x01            ;40 data = 01?
	btfss	STATUS,Z	;		        	
	goto	check_02       	;NO,check 01?

	movf	value_40,W	;yes
        bsf	STATUS,RP0
	movwf	hi_byte
	movlw	0x7d       	;Dec 125
      	movwf	lo_byte
	call	umul

	movlw	0x64		;Dec 100
	movwf	divisor
	call	udiv
	goto	check_end

check_02:                  	;X 1.13
	bsf	STATUS,RP0
	movf	ANA_40_tmp,W
        bcf	STATUS,RP0
	xorlw	0x02            ;40 data = 02?
	btfss	STATUS,Z	;		        	
	goto	check_03       	;NO,check 01?

	movf	value_40,W	;yes
        bsf	STATUS,RP0
	movwf	hi_byte
	movlw	0x71       	;Dec 113
      	movwf	lo_byte
	call	umul

	movlw	0x64		;Dec 100
        bsf	STATUS,RP0
	movwf	divisor
	call	udiv
;        bcf	STATUS,RP0
	goto	check_end

check_03:                	;X 1.0
	movf	value_40,W
        bcf	STATUS,RP0
        return

check_end:
	bsf	STATUS,RP0
	movf	hi_byte,W
       	xorlw	0x00		;00?
        movlw	0xff
        btfsc	STATUS,Z	
	movf	lo_byte,W
        bcf	STATUS,RP0
	return                 	;Yes


;------------E  N  D---------------------------------

⌨️ 快捷键说明

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