⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x36vznys.asm

📁 三轮电动车有刷控制器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
              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 + -