?? scale_vr.asm
字號:
;==========================================================================
; File Name : scale_vr.asm
;
; Rev: Date: Author: Reason:
; 1.00 dd-mm-yy nnnnnnnnnnn rrrrrrrrrrrrrrrrrr
;==========================================================================
;------------------------------------------------------------
; Name : adj_axis
; Parm : W, vr_null, vr_scale
; Retn : W: adjusted and scaled axis value
; Desc :
;------------------------------------------------------------
adj_axis:
subwf vr_null,W ; null - value
btfsc STATUS,C
goto adj_axis2
movf vr_null,W ; null < value
subwf vr_value,W
movwf hi_byte
movlw 0x7f
movwf lo_byte
call umul
movlw 0xff
movwf vr_value
movf vr_null,W
subwf vr_value,W
movwf divisor
call udiv
movlw 0x80
addwf lo_byte,W
return
adj_axis2:
clrw ; null = 0
subwf vr_null,W
btfss STATUS,Z
goto adj_axis3
movlw 0x80
return
adj_axis3:
movlw 0x80 ; null > value
movwf lo_byte
movf vr_value,W
movwf hi_byte
call umul
movf vr_null,W
movwf divisor
call udiv
movf lo_byte,W
return
;------------------------------------------------------------
; Name : adj_lr_axis
; Parm : W, vr_null, vr_scale
; Retn : W: adjusted and scaled axis value
; Desc :
;------------------------------------------------------------
adj_lr_axis:
subwf vr_null,W ; null - value
btfsc STATUS,C
goto value_is_less
movlw d'243' ; null < value
subwf vr_value,W
btfsc STATUS,C
goto value_exceed_max
movf vr_null,W ; 243 > value
subwf vr_value,W
movwf hi_byte
movlw 0xff
movwf lo_byte
call umul
movlw d'243' ; 0xff
movwf vr_value
movf vr_null,W
subwf vr_value,W
movwf divisor
call udiv
movf lo_byte,W
goto adj_lr_exit
value_is_less: ; null > value
clrw
goto adj_lr_exit
value_exceed_max:
movlw 0xff
adj_lr_exit:
return
;------------------------------------------------------------
; Name :
; Parm :
; Retn :
; Desc : adjustment & table lookup
;------------------------------------------------------------
adjust_vr:
movf xaxis_null,W
movwf vr_null
movf xaxis_val,W
movwf vr_value
call adj_axis
movwf offset
call table_look
movwf xaxis_val
movf yaxis_null,W
movwf vr_null
movf yaxis_val,W
movwf vr_value
call adj_axis
movwf offset
call table_look
movwf yaxis_val
movf zaxis_null,W
movwf vr_null
movf zaxis_val,W
movwf vr_value
call adj_lr_axis
movwf zaxis_val
movf raxis_null,W
movwf vr_null
movf raxis_val,W
movwf vr_value
call adj_lr_axis
movwf raxis_val
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; table lookup procedure
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
table_look:
movf PCLATH,W
movwf pclath_save2 ; save PCLATH
movlw 0x0e6 ;230
subwf offset,W
btfss STATUS,C ; offset<W ?
goto table_l2 ; No
movlw 0x0e6
movwf offset
table_l2:
movlw HIGH Table
movwf PCLATH
movf offset,W
nop
call Table
nop
movwf offset
; movlw HIGH $
; movwf PCLATH
movf pclath_save2,W
movwf PCLATH
movf offset,W
return
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -