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

📄 x36vznys.asm

📁 电动车程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
             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 + -