📄 x36vznys.asm
字号:
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
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
RETURN
BSF OFF ;置复位标志位
BCF INTCON,GIE ;关全局中断使能
BCF ADCON0,GO ;关AD转换
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
CALL DEC10MS
BTFSS PSC
GOTO CLSC0
BSF OFF ;置复位标志位
RETURN
;----------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;----------------------------------------------------------------
;助力检测:TIMER1定时512US,计数成32MS,32MS再计数50次,形成1.6S定时.
; 512US对助力I/O信号进行检测一次,判断是否发生变化.变化记
; 录下脉宽(脉宽是以32MS为单位),由脉宽判断是正反助力.正助
; 力(反助力)一次寄存器加一.以1.6S为单位,读出该寄存器的值,
; 则为助力信号值.
;---------------------------------------------------------------
;助力处理程序
;将ZL_V的值转化位为IN_PWM值
CLZL
BCF ZL_OK
MOVF ZL_V,W
MOVWF ZLTP
MOVLW 0X02
SUBWF ZLTP,W ;ZLTP-2
BTFSC STATUS,C ;C=0,ZLTP<2
GOTO CLZL0
BCF ZL_ON ;关助力模式
CLRF ZLTP
GOTO CLZL_PWM
CLZL0
BSF ZL_ON ;ZL_V>2,开助力模式
MOVF ZL_PWS,W
BTFSS STATUS,Z
GOTO CLZL1
MOVLW 0X80
MOVWF ZL_PWS
CLZL1
MOVLW 0X0D
SUBWF ZLTP,W ;ZLTP<13,最大限制
BTFSC STATUS,C
GOTO CLZL_UP
RLF ZLTP,F ;*16
RLF ZLTP,F
RLF ZLTP,F
RLF ZLTP,F
MOVLW 0X30 ;+48
ADDWF ZLTP,F
CLZL_PWM
MOVF ZLTP,W
SUBWF ZL_PWS,W ;ZL_PWS-ZLTP
BTFSC STATUS,Z ;Z=0,ZL_PWS=ZLTP,相等,不调整
GOTO CLZL_UP_DW
BTFSS STATUS,C
GOTO CLZL_UP ;C=0,ZL_PWS<ZLTP
CLZL_DW
DECF ZL_PWS,F
GOTO CLZL_UP_DW
CLZL_UP
MOVLW 0XF2 ;241
SUBWF ZL_PWS,W
BTFSC STATUS,C
GOTO CLZL_UP_DW
INCF ZL_PWS,F
INCF ZL_PWS,F
INCF ZL_PWS,F
CLZL_UP_DW
MOVF ZL_PWS,W
MOVWF IN_PWM
RETURN
;----------------------------------------------------------------
;助力I/O状态检测(TIMER1 调用该程序)
ZLJC
BTFSS PZL
GOTO ZLJC_L ;助力位为低
BTFSS ZL_PZL
GOTO ZLJC_L0 ;低脉宽数 助力状态改变了
RETURN
ZLJC_L
BTFSC ZL_PZL
GOTO ZLJC_H0 ;高脉宽数 助力状态改变了
RETURN
ZLJC_L0
MOVF ZL_TIM,W
MOVWF ZL_TIM_L
CLRF ZL_TIM
BSF ZL_PZL ;助力当前电平状态--H
RETURN
ZLJC_H0
MOVF ZL_TIM,W
MOVWF ZL_TIM_H ;读出高脉宽值
CLRF ZL_TIM
BCF ZL_PZL ;助力当前电平状态--L
BTFSC ZL_ON
GOTO ZLJC_H1 ;助力有效后,正反助力都有效
MOVF ZL_TIM_H,W
SUBWF ZL_TIM_L,W ;ZL_TIM_H>ZL_TIM_L,C=0,正助力
BTFSC STATUS,C
RETURN
ZLJC_H1
INCF ZL_HL,F ;正助力,ZL_V+1
RETURN
;----------------------------------------------------------------
;助力检测控制(TIMER1 32MS调用该程序)
ZLJCOUT
BSF ZL_OK ;助力输出位
INCF ZL_TIM,F ;助力脉宽计数加1
DECFSZ ZL_1S,F
RETURN
MOVLW 0X28
MOVWF ZL_1S
MOVF ZL_HL,W
MOVWF ZL_V ;助力值输出值
CLRF ZL_HL
RETURN
;----------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;----------------------------------------------------------------
;定速,DS_ON=1,定速键有效(TIMER1 32MS调用该程序)
CLDS
BTFSS DS_OK ;转把有效后,开始检测定速键
GOTO CLDS3
BTFSC DS_ON ;定速是否打开?
RETURN
BTFSC PDS ;判断键
GOTO CLDS0
DECFSZ DS_TIM,F
RETURN
BSF DS_DW ;定速键按下
MOVLW 0X02
MOVWF DS_TIM
GOTO CLDS1
CLDS0
BTFSS DS_DW
RETURN
BCF DS_DW
BSF DS_ON ;定速键有效
CLDS1
MOVLW 0X02 ;延时间2*32MS
MOVWF DS_TIM
RETURN
CLDS3 BCF DS_ON
BCF DS_DW
RETURN
;----------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------------------------
;10us延时
DEC10US
MOVLW 0X09
MOVWF RS
DEC10US_0 DECFSZ RS,F
GOTO DEC10US_0
RETURN
;10MS延时
DEC10MS
MOVLW 0XA0
MOVWF RSS
DEC10MS_0 CALL DEC10US
CALL DEC10US
DECFSZ RSS,F
GOTO DEC10MS_0
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;初始化程序
;寄存器初始化
MST_REG
MOVLW 0X04
MOVWF ADTP0 ;AD转换通道控制,初始转一次,
MOVLW 0X04
MOVWF ADTP1
MOVLW 0X02
MOVWF DS_TIM
CLRF DL_V
CLRF DC_V
CLRF TS_V
CLRF IN_PWM
CLRF PWM
CLRF ZL_TIM
CLRF ZL_TIM_H
CLRF ZL_TIM_L
CLRF ZL_HL
CLRF ZL_V
CLRF ZL_PWS
MOVLW 0X28
MOVWF ZL_1S
BCF INCPWM
BCF DECPWM
BCF OFF
BCF TS_YX
BCF ZL_ON
BCF DS_ON
BCF DS_DW
BSF ZL_PZL ;助力位初始为--H
MOVLW YSTS
MOVWF TSS
BCF DS_OK
RETURN
;AD转换初始化
MST_AD
BSF _BANK ;AD 初始化 BANK1
movlw B'00000100' ;AD转换结果左对齐
movwf ADCON1 ;配置RA RA0,RA1,RA3为AD输入
movlw B'00001111' ;RA2
movwf TRISA
BCF _BANK ;BANK0
movlw B'01000001' ;默认转换 RA0
movwf ADCON0
RETURN
;TIMER1初始化
MST_TIMER1
MOVLW B'00000000' ;定时器1初始化
MOVWF T1CON
MOVLW 0XFE
MOVWF TMR1H
CLRF TMR1L ;定时512US中断一次
;WDT设置
BSF _BANK
BCF OPTION_REG,0
BCF OPTION_REG,1
BSF OPTION_REG,2
BSF OPTION_REG,3
BSF _BANK
RETURN
;PWM初始化
MST_PWM
BSF _BANK ;PWM初始化 ;BANK 1
movlw 0x3B ;
movwf PR2 ;周期为50US
BCF _BANK ;BANKK 0
movlw 0x0E ;选择PWM模式
movwf CCP1CON
CLRF CCPR1L ;占空比为0
CLRF T2CON ;预分频 1:1
bsf T2CON,TMR2ON ;开Timer2
RETURN
;中断初始化
MST_INT
BSF _BANK ;BANK1
BSF OPTION_REG,7 ;没有上拉电阻
BCF OPTION_REG,INTEDG ;RB0/INT 下降延中断
BCF _BANK
BSF INTCON,INTE ;RB0/INT 中断允许
BSF INTCON,PEIE ;外设中断允许
BSF INTCON,GIE ;全局中断使能
BCF PIR1,ADIF ;清AD标志中断
BCF PIR1,TMR1IF ;清TIMER1标志中断
CLRF CCPR1L ;占空比为0
BCF CCP1CON,4
BCF CCP1CON,5
BSF _BANK ;BANK1
BSF PIE1,ADIE ;AD中断允许
BSF PIE1,TMR1IE ;Timer1 中断允许
BCF PIE1,TMR2IE ;Timer2 中断禁止
BCF _BANK
BSF T1CON,TMR1ON ;开Timer1
RETURN
;------------------------------------------------------------
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -