|
这个是解码函数
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Decode parameters
; 根据一些参数设置电机运行时参数
; No assumptions
;
; Decodes programming parameters
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
decode_parameters:
; Load programmed damping force
mov Temp1, #Pgm_Damping_Force; Load damping force
mov A, @Temp1
mov Temp8, A ; Store in Temp8
; Decode damping 下面是根据Pgm_Damping_Force中值跳转相当于swith ,给其中的两个变量赋值
mov Damping_Period, #9 ; Set default
mov Damping_On, #1
clr C
cjne Temp8, #2, decode_damping_3 ; Look for 2
mov Damping_Period, #5
mov Damping_On, #1
jmp decode_damping_done
decode_damping_3:
clr C
cjne Temp8, #3, decode_damping_4 ; Look for 3
mov Damping_Period, #5
mov Damping_On, #2
jmp decode_damping_done
decode_damping_4:
clr C
cjne Temp8, #4, decode_damping_5 ; Look for 4
mov Damping_Period, #5
mov Damping_On, #3
jmp decode_damping_done
decode_damping_5:
clr C
cjne Temp8, #5, decode_damping_6 ; Look for 5
mov Damping_Period, #9
mov Damping_On, #7
decode_damping_6:
clr C
cjne Temp8, #6, decode_damping_done; Look for 6
mov Damping_Period, #0
mov Damping_On, #0
decode_damping_done:
; Load programmed pwm frequency
mov Temp1, #Pgm_Pwm_Freq ; Load pwm freq
mov A, @Temp1
mov Temp8, A ; Store in Temp8 Pgm_Pwm_Freq中的值送给Temp8
//IF MODE == 0 ; Main
// clr Flags2.PGM_PWMOFF_DAMPED_LIGHT
// clr C
// cjne Temp8, #3, ($+5)
// setb Flags2.PGM_PWMOFF_DAMPED_LIGHT
// clr Flags2.PGM_PWMOFF_DAMPED_FULL
//ENDIF
; 下面是根据Pgm_Pwm_Freq中的值
IF MODE >= 1 ; Tail or multi
clr Flags2.PGM_PWMOFF_DAMPED_LIGHT
clr C
cjne Temp8, #3, ($+5)
setb Flags2.PGM_PWMOFF_DAMPED_LIGHT
clr Flags2.PGM_PWMOFF_DAMPED_FULL
clr C
cjne Temp8, #4, ($+5)
setb Flags2.PGM_PWMOFF_DAMPED_FULL
ENDIF
clr Flags2.PGM_PWMOFF_DAMPED ; Set damped flag if fully damped or damped light is set
mov A, #((1 SHL PGM_PWMOFF_DAMPED_FULL)+(1 SHL PGM_PWMOFF_DAMPED_LIGHT))
anl A, Flags2 ; Check if any damped mode is set
;根据PGM_PWMOFF_DAMPED_FULL和PGM_PWMOFF_DAMPED_LIGHT位是否为一选择跳转
jz ($+4) ; 若A=0则跳转
setb Flags2.PGM_PWMOFF_DAMPED
clr Flags2.CURR_PWMOFF_DAMPED ; Set non damped status as start
// 下面就是比较器使能选择变量
jz ($+4)
setb Flags2.CURR_PWMOFF_DAMPED ; Set non damped status as start if damped
setb Flags2.CURR_PWMOFF_COMP_ABLE ; Set comparator usable status
jz ($+4)
clr Flags2.CURR_PWMOFF_COMP_ABLE ; Set comparator not usable status if damped
;判断Pgm_Direction_Rev.1是否为1来设置Flags3.PGM_DIR_REV的值
clr Flags3.PGM_DIR_REV
mov Temp1, #Pgm_Direction_Rev
mov A, @Temp1
jnb ACC.1, ($+5)
setb Flags3.PGM_DIR_REV
;判断Pgm_Input_Pol.1是否为1来设置Flags3.PGM_RCP_PWM_POL的值
clr Flags3.PGM_RCP_PWM_POL
mov Temp1, #Pgm_Input_Pol
mov A, @Temp1
jnb ACC.1, ($+5)
setb Flags3.PGM_RCP_PWM_POL
; 根据Temp8的值是否为2来选择跳转 等于decode_pwm_freq_low
clr C
mov A, Temp8
subb A, #2
jz decode_pwm_freq_low
mov CKCON, #01h ; Timer0 set for clk/4 (22kHz pwm)
setb Flags2.PGM_PWM_HIGH_FREQ
jmp decode_pwm_freq_end
decode_pwm_freq_low:
mov CKCON, #00h ; Timer0 set for clk/12 (8kHz pwm)
clr Flags2.PGM_PWM_HIGH_FREQ
decode_pwm_freq_end:
ret
|
|