📄 scale_ad.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 + -