📄 pw48akmbrf5.asm
字号:
bsf FLAG1,BK
bcf FLAG1,FUN
bcf FLAG0,WL
bcf FLAG2,RC ;YIN1.11清滑行反充电标志
bcf PORTA,5 ;YIN1.13从滑行进入刹车关灯
clrf PWMC
clrf PWM_TEMP
clrf PWMSP
movlw 0XFF
movwf CCPR1L ;PWM duty cycle register
movlw 0X54
movwf PORTB
goto BK_END
CBK
movf COU_TEMP,0 ;ELECTRICIZE
btfss STATUS,Z ;ELECTRICIZE
goto OFFCBK ;ELECTRICIZE
movlw 0X1F ;ELECTRICIZE
subwf COU_TEMP1,0 ;ELECTRICIZE
btfss STATUS,C ;ELECTRICIZE
goto ELECTRICIZE ;ELECTRICIZE
OFFCBK incf COUNCBK
btfss STATUS,Z
goto CBK_BAOCHI08
movlw 0XFF ;ELECTRICIZE 如果速度很低取消充电
movwf CCPR1L ;ELECTRICIZE
bcf PORTA,5 ;ELECTRICIZE
goto BK_END ;ELECTRICIZE
ELECTRICIZE bsf PORTA,5 ;ELECTRICIZE show electricize
incf COUNTERBK0
btfss STATUS,Z
goto BK_END
; movlw 0X20
; subwf COUNTERBK1,0
; btfsc STATUS,Z
; goto BREAK1
; incf COUNTERBK1
; goto BK_END
BREAK1 movf COUNCBK,0 ;zhj W=COUNCBK
sublw 0X08 ;zhj
btfsc STATUS,C ;zhj
goto CBK_BAOCHI08 ;zhj
movlw 0X04 ;zhj
subwf COUNCBK,1 ;zhj
CBK_BAOCHI08 movf COUNCBK,0 ;zhj
movwf CCPR1L ;bsf PORTA,5 ;show CBK
clrf PORTB
goto BK_END
BNEXT2 incf COUNTER1
BK_END
;********************YIN1.16滑行反充电************************
btfsc FLAG1,FUN ;YIN1.10
goto RC_END
btfsc FLAG1,BK
goto RC_END
btfsc FLAG1,AE
goto RC_END
movlw 0X4D ;把手电压大于0X4D,取消滑行反充电
; subwf PWMSP,0
subwf SPBUF,0 ;YIN1.14
btfsc STATUS,C
goto CF_RC
movf COU_TEMP,0 ;速度小于一定值,取消滑行反充电
btfss STATUS,Z
goto CF_RC
movlw 0X10
subwf COU_TEMP1,0
btfss STATUS,C
goto ELECR_RC ;把手电压小于0X4D,且滑行速度大于一定值 去滑行反充电
CF_RC btfss FLAG2,RC ;清滑行反充电标志位
goto RC_END
; incfsz COUNCBK
movlw 0X04 ;YIN1.14
addwf COUNCBK ,1
btfss STATUS,C
goto RC_BAOCHI20
movlw 0XFF
movwf CCPR1L
clrf COUNTERBK0
clrf COUNTERBK1
clrf PWMC ;ELECTRICIZE
clrf PWM_TEMP
clrf PWMSP ;ELECTRICIZE
movlw 0XE0 ;zhj
movwf COUNCBK ;zhj
bcf PORTA,5
bcf FLAG2,RC ;ELECTRICIZE
goto RC_END ;ELECTRICIZE
ELECR_RC btfsc FLAG2,RC ;滑行反充电标志位
goto ELE_RC
bsf FLAG2,RC
bcf FLAG0,WL
clrf PWMC
clrf PWM_TEMP
clrf PWMSP ;YIN1.14
movlw 0XFF
movwf CCPR1L ;PWM duty cycle register
movlw 0X54
movwf PORTB
movlw 0XE0 ;滑行反充电最大值
movwf COUNCBK
goto RC_END
ELE_RC
bsf PORTA,5 ;滑行反充电指示,高电平
incf COUNTERBK0 ;延时
btfss STATUS,Z
goto RC_END
; movlw 0X20
; subwf COUNTERBK1,0
; btfsc STATUS,Z
; goto ERC1
; incf COUNTERBK1
; goto RC_END
ERC1 movf COUNCBK,0 ;W=COUNCBK
sublw 0X70 ;送CCPR1L滑行反充电时最小为0X70
btfsc STATUS,C ;
goto RC_BAOCHI20 ;
movlw 0X04 ;
subwf COUNCBK,1 ;
RC_BAOCHI20 movf COUNCBK,0 ;滑行反充电时保持在定值
movwf CCPR1L ;
clrf PORTB
RC_END
;*****************************************************************
READSP_AND_CONVERT
btfss FLAG0,SPV
goto TI
bcf FLAG0,SPV
movf ADBUFSPV,0
movwf SPBUF1 ;read speed value to SPBUF1
movlw 0X3B ;speed single low limit
subwf SPBUF1,0
btfsc STATUS,C
goto HIGHLIM
clrw
HIGHLIM movwf SPBUF1 ;speed single high limit
movlw 0XA6 ;0806zhj if high 4.4V invalidation
subwf SPBUF1,0 ;0806zhj
btfss STATUS,C ;0806zhj
goto NEXTSPV ;0806zhj
clrw ;0806zhj
movwf SPBUF1 ;speed single high limit
NEXTSPV movlw 0X94
subwf SPBUF1,0
btfss STATUS,C
goto CONV
movlw 0X94
movwf SPBUF1
CONV bcf STATUS,C
rrf SPBUF1,0 ;SPBUF1 divide two
call CONVERT ;convert speed single to PWM duty cycle
movwf SPBUF
READEND
;******************************************************************
incf COUNTER5
btfss STATUS,Z
goto S_E_A
incf COUNTER6
movlw 0X20
subwf COUNTER6,0
btfss STATUS,C
goto S_E_A
clrf COUNTERB0
clrf COUNTERB1
clrf COUNTER6
;******************************************************************
;speed adjust
S_E_A movf ASPD0,0
subwf ASPD,0
btfsc STATUS,Z
goto COMP
btfsc STATUS,C
goto INASPD
goto DEASPD
INASPD movf ASPD,0
movwf ASPD0
goto COMP
DEASPD movf ASPD0,0
btfss STATUS,Z
decf ASPD0
;------------------------------------------------------------------
COMP movf ASPD0,0
movwf ASPD
subwf SPBUF,0
btfsc STATUS,C ;Get the lager one and move to PWMSP
goto S_I_N0
movf ASPD,0
movwf PWMSP
bsf FLAG1,AE ;Assist state AE=1
goto S_I_N1
S_I_N0 movf SPBUF,0
movwf PWMSP
bcf FLAG1,AE ;Electric state AE=0
S_I_N1 movlw 0X4D
subwf PWMSP,0
btfsc STATUS,C
goto ZZ
btfsc FLAG2,RC ;YIN1.11
goto ZZ ;YIN1.11
btfsc FLAG1,BK ;YIN1.13
goto ZZ ;YIN1.13
bcf FLAG0,ZD
bcf FLAG2,ADZ
bcf FLAG2,DZIN
bcf FLAG2,ASPV
goto SPEED
;******************************************************************
ZZ bcf FLAG1,FZ
bsf FLAG2,DZIN
;------------------------------------------------------------------
SPEED; btfss FLAG0,ZD
; goto QBPWM0
movf COU_TEMP,0
btfss STATUS,Z
goto QBPWM0
movlw 0X49
subwf COU_TEMP1,0
btfsc STATUS,C
goto QBPWM
movlw 0X12 ;120R/M
subwf COU_TEMP1,0
btfsc STATUS,C
goto HLP
movlw 0X60
movwf ILIMIT
goto LOAD
HLP bcf STATUS,C
rrf COU_TEMP1,0
movwf PWMHL
movlw 0X09
subwf PWMHL,0
call ISUB
movwf ILIMIT
goto LOAD
QBPWM0 movlw 0X60 ;4D
movwf ILIMIT
movlw 0XC0 ;50%-0XA5
subwf PWMSP,0
btfss STATUS,C
goto LOAD
movlw 0XC0
movwf PWM_TEMP
goto OPEN
QBPWM movlw 0X50 ;4D
movwf ILIMIT
movlw 0XA5 ;50%-0XA5
subwf PWMSP,0
btfss STATUS,C
goto LOAD
movlw 0XA5
movwf PWM_TEMP
goto OPEN
; btfss FLAG0,ZD
; goto QBPWM0
; movf COU_TEMP,0
; btfss STATUS,Z
; goto QBPWM
; movlw 0X49
; subwf COU_TEMP1,0
; btfsc STATUS,C
; goto QBPWM
; movlw 0X11
; subwf COU_TEMP1,0
; btfsc STATUS,C
; goto HLP
; movlw 0X60
; movwf ILIMIT
; goto LOAD
;HLP bcf STATUS,C
; rrf COU_TEMP1,0
; movwf PWMHL
; movlw 0X08
; subwf PWMHL,0
; call ISUB
; movwf ILIMIT
; movlw 0XED
; subwf PWMSP,0
; btfss STATUS,C
; goto LOAD
; movlw 0XED
; movwf PWM_TEMP
; goto OPEN
;QBPWM0 movlw 0X60 ;4D
; movwf ILIMIT
; movlw 0XC0 ;50%-0XA5
; subwf PWMSP,0
; btfss STATUS,C
; goto LOAD
; movlw 0XC0
; movwf PWM_TEMP
; goto OPEN
;QBPWM movlw 0X50 ;4D
; movwf ILIMIT
; movlw 0XA5 ;50%-0XA5
; subwf PWMSP,0
; btfss STATUS,C
; goto LOAD
; movlw 0XA5
; movwf PWM_TEMP
; goto OPEN
;------------------------------------------------------------------
LOAD movf PWMSP,0
movwf PWM_TEMP
OPEN btfsc FLAG1,FUN
goto C_TEMP
movf PWM_TEMP,0
movwf PWM_TEMP0
goto TEMP_V
C_TEMP movf PWM_TEMP0,0
subwf PWM_TEMP,0
btfsc STATUS,C
goto TEMP_V
movf PWM_TEMP0,0
movwf PWM_TEMP
TEMP_V movf PWM_V,0 ;PWM_TEMP=PWM_TEMP-PWM_V
subwf PWM_TEMP,0
btfss STATUS,C
clrw
movwf PWM_TEMP
sublw 0X4B ;PWM_TEMP>0X4B
btfss STATUS,C
goto S_CURRISE
movlw 0X4B
movwf PWM_TEMP
S_CURRISE
btfss FLAG2,ASPV
goto SC2
goto SC1
;SC btfss FLAG1,BK
; goto SC2
; goto SC1
SC2 btfss FLAG2,ADZ
goto S_END
SC1 clrf PWM_TEMP
clrf PWMC
movlw 0XFF
movwf CCPR1L
S_END
;******************************************************************
; btfsc FLAG1,BK
; goto TI
; btfss FLAG2,REA
; goto LOWSPEED
;------------------------------------------------------------------
;HIGHSPEED movf COU_TEMP,0 ;6N.M convert
; btfss STATUS,Z
; goto RELEASE
; movlw 0X0E ;390r/m
; subwf COU_TEMP1,0
; btfss STATUS,C
; goto TI
;RELEASE movf COUNTERREA,0
; btfsc STATUS,Z
; goto RELEASE1
; decf COUNTERREA
; goto TI
;RELEASE1 movlw 0XFF
; movwf CCPR1L
; movlw 0X54
; movwf PORTB
; bcf PORTA,5
; bcf FLAG2,REA
; call DELA
; goto TI
;------------------------------------------------------------------
;LOWSPEED movf COU_TEMP,0 ;8N.M convert
; btfss STATUS,Z
; goto TI
; movlw 0X0C ;280r/m
; subwf COU_TEMP1,0
; btfsc STATUS,C
; goto TI
;ICON1 movlw 0X40 ;6A/12A
; subwf IBUF,0
; btfsc STATUS,C
; goto TI
;SUCTION movlw 0X10
; subwf COUNTERREA,0
; btfsc STATUS,Z
; goto SUCTION1
; incf COUNTERREA
; goto TI
;SUCTION1 movlw 0XFF
; movwf CCPR1L
; movlw 0X54
; movwf PORTB
; bsf PORTA,5
; bsf FLAG2,REA
; call DELA
;******************************************************************
TI btfss FLAG0,I
goto NOTLOAD
bcf FLAG0,I
bcf STATUS,C
rrf DATAI1
bcf STATUS,C
rrf ADBUFI,0
addwf DATAI1
movf DATAI1,0
movwf IBUF
;------------------------------------------------------------------
btfsc FLAG1,HX1
goto PULLPHASE
TWL btfss FLAG0,WL
goto NOT_WL
;WL
;------------------------------------------------------------------
call PI
btfss FLAG0,FY
goto ADDY
goto DECY
ADDY movf Y,0 ;FLAG0.FY=0,then PWMC=PWMC+Y
addwf PWMC,0
btfsc STATUS,C
movlw 0XFF ;PWMC<0XFF
movwf PWMC
goto CALEND
DECY movf Y,0 ;FLAG0.FY=1,then PWMC=PWMC-Y
subwf PWMC,0
btfss STATUS,C
clrw
movwf PWMC
sublw 0X4B ;PWMC>0X4B
btfss STATUS,C
goto CALEND
movlw 0X4B
movwf PWMC
CALEND
;------------------------------------------------------------------
S_I_N2 movf PWM_TEMP,0 ;Compare PWM_TEMP with PWMC
subwf PWMC,0
btfss STATUS,C
goto S_I_N3 ;PWM_TEMP>PWMC
movf COUNTER2,0 ;PWM_TEMP<PWMC
sublw 0X02 ;COUNTER2<0X40!
btfss STATUS,Z
goto S_I_N4
goto S_I_N5
S_I_N4 incf COUNTER2 ;PWM_TEMP<PWMC&COUNTER2<0X40
goto S_I_END
S_I_N5 bcf FLAG0,WL ;PWM_TEMP<PWMC&COUNTER2>0X40
clrf COUNTER2
goto S_I_END
S_I_N3 clrf COUNTER2 ;PWM_TEMP>PWMC
goto S_I_END
;-------------------------------------------------------------------
NOT_WL movf IBUF,0
subwf ILIMIT,0 ;Compare now current with current limit
btfss STATUS,C
goto OVERCURRENT
movf COUNTER3,0
btfss STATUS,Z
decf COUNTER3
goto IOVER
OVERCURRENT ;FLAG1.WL=0&overcurrent
incf COUNTER3
movlw 0X01 ;0X03
subwf COUNTER3,0
btfss STATUS,C
goto IOVER
bsf FLAG0,WL
clrf COUNTER3
goto NOTLOAD
IOVER
;------------------------------------------------------------------
movf PWM_TEMP,0 ;Compare PWM_TEMP with PWMC
subwf PWMC,0
btfsc STATUS,Z
goto LEND
btfsc STATUS,C
goto DPWM
movlw 0X03
addwf PWMC,0
btfsc STATUS,C
movlw 0XFF
movwf PWMC
goto LEND
DPWM movlw 0X03
subwf PWMC,0
btfss STATUS,C
clrw
movwf PWMC
LEND
;---------------------------------------------------------------------------------
S_I_END movlw 0X4B
addwf PWMSPL,0
btfsc STATUS,C
movlw 0XFF
movwf PWMXZ
;---------------------------------------------------------------------------------
movf PWMC,0
subwf PWMXZ,0
btfsc STATUS,C
goto PCOM
movf PWMXZ,0
movwf PWMC
;---------------------------------------------------------------------------------
PCOM btfsc FLAG1,BK
goto NOTLOAD
btfsc FLAG2,RC ;YIN1.11
goto NOTLOAD ;YIN1.11
movf PWMC,0
sublw 0XFF
movwf CCPR1L
NOTLOAD
;*********************************************************************************
FUNCOV_DETECT
btfss PORTA,4 ;PORTA<2> is the mode input I/O
goto NEXT1 ;If PORTA<2> is low level,then increase one
bcf FLAG1,FUNCON ;Permit convert
clrf C_FUN1 ;If PORTA<2> is high level,clear C_FUN1
btfss FLAG1,FC ;If have convert flag,then set FLAG0.FUN
goto FUNCTIONEND
bcf FLAG1,FC
btfsc FLAG1,FUN ;PORTA<2>=1&FLAG0.FC=1,then convert function
goto INV
bsf FLAG1,FUN
goto FUNCTIONEND
INV bcf FLAG1,FUN
goto FUNCTIONEND ;If PORTA<2> is high ,do not convert function
NEXT1
btfsc FLAG1,FUNCON
goto FUNCTIONEND
incf C_FUN1
movlw 0X10
subwf C_FUN1,0
btfss STATUS,C ;If C_FUN1>0XF0,then set function convert flag
goto FUNCTIONEND
bsf FLAG1,FUNCON ;Set in convert proess
clrf C_FUN1
bsf FLAG1,FC
FUNCTIONEND
;********************************************************************
FUNCTION_DISPPLAY
btfsc FLAG1,FUN
goto SS
btfsc FLAG1,AE
goto AS
goto ES
AS bsf DISPR,DEL ;assist state
bcf DISPR,DAS
bsf DISPR,DSC
goto FUNEND
ES bcf DISPR,DEL ;electric state
bsf DISPR,DAS
bsf DISPR,DSC
goto FUNEND
SS bsf DISPR,DEL ;Scurise state
bsf DISPR,DAS
bcf DISPR,DSC
FUNEND
;********************************************************************
movlw 0X03 ;DZ protect
subwf COUNTERDZ,0
btfss STATUS,C
goto DZOVER
bsf FLAG2,ADZ
bcf FLAG0,WL
clrf PWMC
movlw 0XFF
movwf CCPR1L
DZOVER
;*******************************************************************
PULLPHASE
clrwdt
clrf SAMCOUNT
DIGIN movf PORTC,0 ;read PORTC to W
andlw 0X38
xorwf PC_TEMP
btfss STATUS,Z
goto NSAME
movwf PC_TEMP
incf SAMCOUNT
movlw 0X03
subwf SAMCOUNT,0
btfsc STATUS,Z
goto FIND
goto DIGIN
NSAME movwf PC_TEMP
clrf SAMCOUNT
goto DIGIN
FIND
;--------------------------------------------------------------------
movf PC_TEMP,0
xorwf PC_TEMP2,0
btfsc STATUS,Z
goto SAME
movlw 0X10
subwf PC_TEMP2,0
btfss STATUS,Z
goto S2
S1 movlw 0X30
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
goto HXCL
S2 movlw 0X30
subwf PC_TEMP2,0
btfss STATUS,Z
goto S3
movlw 0X20
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
goto HXCL
S3 movlw 0X20
subwf PC_TEMP2,0
btfss STATUS,Z
goto S4
movlw 0X28
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
goto HXCL
S4 movlw 0X28
subwf PC_TEMP2,0
btfss STATUS,Z
goto S5
movlw 0X08
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
goto HXCL
S5 movlw 0X08
subwf PC_TEMP2,0
btfss STATUS,Z
goto S6
movlw 0X18
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
goto HXCL
S6 movlw 0X18
subwf PC_TEMP2,0
btfss STATUS,Z
goto HXCL1
movlw 0X10
subwf PC_TEMP,0
btfss STATUS,Z
goto HXCL1
HXCL bcf FLAG1,FZ
decfsz COUPASE
goto SETHX
movlw 0X0C
movwf COUPASE
movf COUNTERDZ,0
movwf COU_TEMP
movf COUNTERDZ1,0
movwf COU_TEMP1
clrf COUNTERDZ1
clrf COUNTERDZ
goto SETHX
HXCL1 movlw 0X01
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -