📄 x36vznys.asm
字号:
CALL CLIN_PWM ;PWM加减处理
BTFSC PWM_OUT
CALL PWMOUT
BTFSC DC_OK
CALL CLDC ;欠压检测
BTFSC OFF ;判断是否有复位标志位
GOTO RESET ;复位
BTFSS PSC ;刹车
CALL CLSC
BTFSC OFF ;判断是否有复位标志位
GOTO RESET ;复位
CLRWDT ;清看门狗
BSF DS_OK ;开启定速度检测
GOTO DDMOD ;继续循环
;定速模式
DSMOD
BTFSS DS_ON
GOTO DSMOD0
BCF DS_ON
GOTO DDMOD
DSMOD0
BTFSC DL_OK
CALL CLIN_PWM ;PWM加减处理
BTFSC PWM_OUT
CALL PWMOUT
BTFSC DC_OK
CALL CLDC
BTFSC OFF ;判断是否有复位标志位
GOTO RESET ;复位
BTFSS PSC ;刹车
CALL CLSC
BTFSC OFF ;判断是否有复位标志位
GOTO RESET ;复位
CLRWDT ;清看门狗
GOTO DSMOD ;继续循环
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;============================================================================
;----------------------------------------------------------------------------
;AD中断
;AD转换中断,由TIMER1中断启动(定时512US)
;AD转换对电流\转把\电池电压循环采样.
;电流采样8次转把采样一次,转把采样64次电池电压采样一次.
;----------------------------------------------------------------------------
INT_AD
BCF PIR1,ADIF ;清中断标志位
MOVF ADRES,W ;读出转换结果
BTFSC DL_AD
GOTO DL_ST
BTFSC TS_AD
GOTO TS_ST
BTFSS DC_AD
GOTO INT_AD0
DC_ST
MOVWF DC_V ;存入电压值
BSF DC_OK ;置转换完毕标志位
GOTO INT_AD0
DL_ST
MOVWF DL_V
BSF DL_OK ;置转换完毕标志位
GOTO INT_AD0
TS_ST
MOVWF TS_V
BSF TS_OK
MOVLW TSON ;转把启动电压
SUBWF TS_V,W
BTFSC STATUS,C ;C=1,TS_V>TSON,达到开启电压
GOTO TS_ST0
BCF TS_YX ;没有达到开启电压,清转把有效标志位
BCF TS_OK
MOVLW YSTS
MOVWF TSS
GOTO INT_AD0
TS_ST0
DECFSZ TSS,F ;延时TSS,确定转把准确的开启
GOTO INT_AD0
BSF TS_YX ;置转换开启标志位
INT_AD0
BCF TS_AD ;清转换标志位
BCF DL_AD
BCF DC_AD
DECFSZ ADTP0,F
GOTO DL_ZH
MOVLW 0X08 ;电流采样8次,转把采样一次
MOVWF ADTP0
DECFSZ ADTP1,F
GOTO TS_ZH
MOVLW 0X3A ;转把采样40次,电池电压采样一次
MOVWF ADTP1
DC_ZH
BSF DC_AD ;置转换标志
MOVLW B'10011001' ;相应的转换通道
GOTO INT_AD1
TS_ZH
BSF TS_AD
MOVLW B'10001001'
GOTO INT_AD1
DL_ZH
BSF DL_AD
MOVLW B'10000001'
INT_AD1
MOVWF ADCON0 ;写入转换通道
GOTO INT_RET
;----------------------------------------------------------------------------
;转把调速度运算
;转把有效电压1.6-4V采样82-204,差位122,
;PWM有效位0-240,则将转把采样值减82,再乘以2,即PWM=(TS_V-82)*2
;防断线电压4.6
;----------------------------------------------------------------------------
CLZB
BCF TS_OK
MOVF TS_V,W
MOVWF TS_PWS
MOVLW LOSTS ;防断线,4.6V
SUBWF TS_PWS,W ;TS_PWS<235,C=0
BTFSC STATUS,C
GOTO CLZB0 ;断线
MOVLW 0XCC
SUBWF TS_PWS,W ;TS_PWS<204,C=0
BTFSC STATUS,C
GOTO CLZB1
MOVLW TSON ;W<-TSON
SUBWF TS_PWS,W ;C=1,TS_PWS>TSON
BTFSS STATUS,C
GOTO CLZB0 ;小于TSON
BCF STATUS,C
MOVWF TS_PWS ;TS_PWS<-W
RLF TS_PWS,W ;*2
MOVWF IN_PWM
RETURN
CLZB0
CLRF IN_PWM
RETURN
CLZB1
MOVLW 0XF0
MOVWF IN_PWM
RETURN
;-------------------------------------------------------------------------
;根据输入电流和输入的调速度设备(IN_PWM)判断PWM增减
CLIN_PWM
BCF DL_OK ;清电流标志,;限电流
MOVF DL_V,W
MOVWF DL_PWS ;读出电流值
MOVLW DLXZ
SUBWF DL_PWS,W ;DL_PWS-DLXZ
BTFSC STATUS,C ;DL_PWS>DLXZ,C=1过流
GOTO CLIN_DW
BTFSC STATUS,Z ;Z=1,DL_PWS=DLXZ
GOTO CLIN_UP_DW ;达到最大电流值
MOVF IN_PWM,W
SUBWF PWM,W ;PWM-IN_PWM
BTFSC STATUS,Z
GOTO CLIN_UP_DW
BTFSC STATUS,C
GOTO CLIN_DW ;PWM>IN_PWM
CLIN_UP
BSF INCPWM ;增加
BCF DECPWM
RETURN
CLIN_DWL
;DECF PWM,F ;PWM-超出部分
CLIN_DW ;限制电流
BCF INCPWM ;减小
BSF DECPWM
RETURN
CLIN_UP_DW ;平衡
BCF INCPWM
BCF DECPWM
RETURN
;---------------------------------------------------------------
;PWM输出控制
;根据增\减位调节PWM脉宽
PWMOUT
BCF PWM_OUT
BTFSC DECPWM
GOTO DEC_PWM
BTFSS INCPWM
RETURN ;返回
INC_PWM ;增加PWM
DECFSZ IN_PWM_TM,F
RETURN
MOVLW 0X0B
MOVWF IN_PWM_TM
MOVLW 0XF0
SUBWF PWM,W ;PWM<F0,C=0
BTFSC STATUS,F
INCF PWM,F
GOTO PWM_OUT0
DEC_PWM ;减小
MOVF PWM,W
BTFSS STATUS,Z
DECF PWM,F
PWM_OUT0
MOVF PWM,W ;脉宽输出计算
MOVWF PWMH
CLRF PWML
BCF STATUS,C
RRF PWMH,F
RRF PWML,F
BCF STATUS,C
RRF PWMH,F
RRF PWML,F
BCF STATUS,C
RRF PWML,F
BCF STATUS,C
RRF PWML,F
MOVF CCP1CON,W
ANDLW B'11001111'
IORWF PWML,W
MOVWF CCP1CON
MOVF PWMH,W
MOVWF CCPR1L
RETURN
;---------------------------------------------------------------
;电池欠压检测处理
CLDC
BCF DC_OK ;清电压转换完成标志位
MOVF DC_CONT,F ;求和计数
BTFSS STATUS,Z ;DC_CONT=0?
GOTO CLDC0
MOVLW 0X04
MOVWF DC_CONT
CLRF DC_L
CLRF DC_H
CLDC0
MOVF DC_V,W ;4次求和
ADDWF DC_L,F
BTFSC STATUS,C
INCF DC_H,F
DECFSZ DC_CONT,F
RETURN
BCF STATUS,C ;除4
RRF DC_H,F
RRF DC_L,F
BCF STATUS,C
RRF DC_H,F
RRF DC_L,F
MOVLW QYDW
SUBWF DC_L,W
BTFSC STATUS,C ;C=0,DC_L<QYDW,欠压
GOTO CLDC1
BSF OFF ;欠压;置复位标志位
BCF INTCON,GIE ;关全局中断使能
BCF ADCON0,GO ;关AD转换
RETURN
CLDC1
MOVLW QYUP
SUBWF DC_L,W
BTFSC STATUS,C ;C=0,DC_L<QYUP,电压低与重开电压
GOTO CLDC2
MOVLW 0X01 ;电压低于欠压重开
MOVWF BJ_T
BSF DC_BJ
MOVLW 0X0A
MOVWF DC_YTM
RETURN
CLDC2
MOVLW QYXS
SUBWF DC_L,W
BTFSS STATUS,C
GOTO CLDC3
DECFSZ DC_YTM,F
RETURN
BCF DC_BJ ;关报警
MOVLW 0X0A
MOVWF DC_YTM
RETURN
CLDC3
MOVLW 0X05
MOVWF BJ_T
BSF DC_BJ ;电压低报警开
MOVLW 0X0A
MOVWF DC_YTM
RETURN
;---------------------------------------------------------------
;刹车处理程序
CLSC
CALL DEC10MS
BTFSC PSC ;刹车
RETURN
CLSC0
CLRWDT ;清看门狗
BCF INTCON,GIE ;关全局中断使能
BCF ADCON0,GO ;关AD转换
BCF CCP1CON,4 ;关脉宽输出
BCF CCP1CON,5
CLRF CCPR1L
BTFSS PSC ;判断是否还有刹车
GOTO CLSC0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -