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

📄 x36vznys.asm

📁 三轮电动车有刷控制器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;****************************************************************
;程序名称: 48V有刷智能控制器
;单片机  : PIC16F716     4M晶振
;功能    :  转把调速度,助力,定速,刹车        
;           欠压保护,过流保护,限流保护 
;编写日期:2006年9月21日
;修改日期:2007年1月14日  修改成48V电动三轮车控制器
;****************************************************************
;list p = 16f716     ;4M晶振
 #include"p16f716.inc"
;----------------------------------------------------------------
 __CONFIG(0X1F76)                 ;配置位  WDT开   代码保护开
;-------------参数------------------------------------------------
;#define   QYDW   0x8F            ;欠压值      ;0X8F
;#define   QYUP   0x98            ;欠压重开值  ;0X98
#define   QYDW   0x9C             ;欠压值      ;0X95
#define   QYUP   0xA5             ;欠压重开值  ;0X9A
#define   QYXS   0xA9             ;欠压报警输出
#define   DLXZ   0x4a             ;限制电流值
#define   TSON   0x52             ;转把开启电压1.6V
#define   YSTS   0x0C             ;转把有效确定延时计数次数
#define   LOSTS  0xE5             ;转把掉线保护电压   4.4V 
#define   _BANK  STATUS,5         ;BANK1,换页
;----------I/0--------------------------------------------------
#define   PGL    PORTB,0          ;过流检测    RB0
#define   PDS    PORTB,1          ;巡航 定速   RB1
#define   PSC    PORTB,2          ;刹车(低电平)RB2
#define   PZL    PORTA,2          ;助力(脉宽)  RA2
#define   PQY    PORTB,6          ;欠压报警闪烁输出(初始1)
;----------寄存器------------------------------------------------
;PWM
IN_PWM    EQU     0X20            ;外设输入PWM(转把\助力)
PWM       EQU     0X21            ;PWM脉宽输出
PWML      EQU     0X22            ;PWM脉宽输出低2位
PWMH      EQU     0X23            ;PWM脉宽输出高8位 
IN_PWM_TM EQU     0X3F            ;PWM加延时
;转把
TSS       EQU     0X24            ;转把有效确定延时
TS_V      EQU     0X25            ;转把采样电压
TS_PWS    EQU     0X26
;电池电压
DC_V      EQU     0X27            ;电池采样电压
DC_L      EQU     0X28            ;电压高位
DC_H      EQU     0X29            ;电压低位  
DC_CONT   EQU     0X2A            ;电压采样次数
DC_YTM    EQU     0X42            ;二次欠压延长计数()
QYBJ_TM   EQU     0X43            ;欠压报警延时间
BJ_T      EQU     0X44            ;亮灭交替次数
BJ_CT     EQU     0X45            ;亮灭交替计数
;电流
DL_V      EQU     0X2B            ;电流采样电压
DL_PWS    EQU     0X2C         
;助力                          
ZL_1S     EQU     0X2D            ;助力1.6S延时
ZL_TIM    EQU     0X2E            ;助力脉宽计数
ZL_TIM_H  EQU     0X2F            ;助力高脉宽计数
ZL_TIM_L  EQU     0X30            ;助力低脉宽计数
ZL_HL     EQU     0X31            ;助力中断值
ZL_V      EQU     0X32            ;助力中断输出值
ZLTP      EQU     0X33            ;助力处理缓冲
ZL_PWS    EQU     0X34            ;助力PWM调整值
;定速
DS_TIM    EQU     0X35            ;定速键延时
;AD中断
ADTP0     EQU     0X36            ;AD转换通道控制 
ADTP1     EQU     0X37
;定时器1中断
TIMTP0    EQU     0X38            ;定时器1定时控制
TIMTP1    EQU     0X39    
RS        EQU     0X3A            ;软件延时间
RSS       EQU     0X3B            ;软件延时间
;位定义 
ADWEI     EQU     0X3C            ;AD位
PWMWEI    EQU     0X3D            ;PWM控制位
WEI       EQU     0X3E

#define  OFF      PWMWEI,0        ;复位标志位
#define  PWM_OUT  PWMWEI,1        ;PWM输出标志位
#define  INCPWM   PWMWEI,2        ;加PWM
#define  DECPWM   PWMWEI,3        ;减PWM
#define  DS_ON    PWMWEI,4        ;定速度键有效标志
#define  DS_DW    PWMWEI,5        ;定速度键按下效标志
#define  ZL_ON    PWMWEI,6        ;助力模式启动
#define  ZL_PZL   PWMWEI,7        ;助力原来状态

#define  TS_AD    ADWEI,0         ;转把电压在转换 
#define  DC_AD    ADWEI,1
#define  DL_AD    ADWEI,2
#define  TS_OK    ADWEI,3         ;转把电压在转换完毕 
#define  DC_OK    ADWEI,4
#define  DL_OK    ADWEI,5
#define  TS_YX    ADWEI,6         ;转把开启
#define  ZL_OK    ADWEI,7         ;助力输出标志位

#define  DS_OK    WEI,0           ;定速度开启标志位
;#define  ZL_SA      WEI,1        ;助力开启速度
#define  DC_BJ    WEI,1           ;欠电压报警位  

W_TEMP      EQU   0X40            ;备份  W
STATUS_TEMP EQU   0X41            ;备份 STATUS
;****************************************************************
;----------------------------------------------------------------
;              开始程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ORG 0X00
              CLRWDT                   ;清看门狗
              GOTO MAIN
              ORG 0X04
;--------------中断---------------------------------------------
              BANKSEL W_TEMP           ;中断 
              MOVWF W_TEMP             ;备份  W
              SWAPF STATUS,W
              CLRF STATUS          
              MOVWF STATUS_TEMP        ;备份 STATUS 
                                       ;中断向量
              BTFSC PIR1,TMR1IF        
              GOTO INT_TMR1            ;Timer1中断

              BTFSC PIR1,ADIF           ;AD中断
              GOTO INT_AD
             
              BTFSC INTCON,INTF        ;RB0/INT中断
              GOTO INT_RB0             ;过电流中断
             
INT_RET       CLRF STATUS              ;恢复
              SWAPF STATUS_TEMP,W      ;还原 STATUS
              MOVWF STATUS
              SWAPF W_TEMP,F           ;还原 W   
              SWAPF W_TEMP,W
              RETFIE                   ;中断返回              
;----------------------------------------------------------------
;Timer1中断
INT_TMR1      
              BCF PIR1,TMR1IF          ;中断标志位清0
              BCF T1CON,0              ;关Timer1
              MOVLW 0XFE
              MOVWF TMR1H             
              CLRF TMR1L               ;512US

              BSF ADCON0,GO            ;开AD转换 
              BSF PWM_OUT              ;PWM输出调整使能     
              ;CALL ZLJC                ;助力脉宽检测        
   
              DECFSZ TIMTP0,F
              GOTO INT_RTM
              MOVLW 0X3C               ;60次*512US=30MS
              MOVWF TIMTP0  
              CALL QYBJ                ;欠压报警程序  
              CALL ZLJCOUT             ;助力输出控制
              CALL CLDS                ;定速键检测
INT_RTM
              BSF T1CON,0              ;开Timer1
              GOTO INT_RET             
;----------------------------------------------------------------  
;过流中断
INT_RB0       
              BCF INTCON,INTF          ;清中断标志位  
              BTFSC PGL
              GOTO INT_RBR
              CALL DEC10US             ;延时20US
              CALL DEC10US
              BTFSC PGL                ;确定有过流 
              GOTO INT_RBR     
INT_RB
              BCF CCP1CON,4            ;关脉宽输出
              BCF CCP1CON,5
              CLRF CCPR1L  
              CLRWDT                   ;清看门狗
              BCF INTCON,GIE           ;关全局中断使能
              BCF ADCON0,GO            ;关AD转换
              BCF TS_OK
              BCF DL_OK
              BCF DC_OK
              BSF OFF                  ;置复位标志
              BTFSS PGL
              GOTO INT_RB              ;还有过流
              CALL DEC10MS             ;确定是否还有过流
              BTFSS PGL                ;没有过流,退出
              GOTO INT_RB                                            
INT_RBR                                
              GOTO  INT_RET              
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;================================================================
;             主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
             MOVLW 0XFF               ;I/0初始化
             MOVWF PORTB
             movlw B'00000111'        ;RB0-RB2为输入,RB3-RB7为输出
             BSF _BANK
             movwf TRISB
             BCF _BANK
             CLRF PORTA
             movlw B'00001111'        ;RA
             BSF _BANK
             movwf TRISA
             BCF _BANK             
RESET        
             BSF PORTB,3
             CLRWDT                   ;清看门狗
             CALL MST_REG
             CALL MST_AD           
             CALL MST_TIMER1
             CALL MST_PWM
             CALL DEC10MS            ;上电延时10M
DCJC         
             CLRWDT                  ;清看门狗                       
             CLRF DC_H               ;电池电压开启检测
             CLRF DC_L
             MOVLW 0X10
             MOVWF DC_CONT
DCJC_0
             MOVLW B'10011001'
             MOVWF ADCON0            ;写入电压转换通道
             CALL DEC10US            ;延时10US
             BSF ADCON0,GO           ;开AD转换 
DCJC_1       
             BTFSC ADCON0,GO
             GOTO DCJC_1             ;等待转换完成
             MOVF ADRES,W
             ADDWF DC_L,F
             BTFSC STATUS,C
             INCF DC_H,F
             DECFSZ DC_CONT,F
             GOTO DCJC_0
             MOVLW 0X04
             MOVWF DC_CONT
DCJC_2       
             BCF STATUS,C
             RRF DC_H,F
             RRF DC_L,F
             DECFSZ DC_CONT,F
             GOTO DCJC_2
             MOVLW QYUP             ;电池开启电压
             SUBWF DC_L,W
             BTFSS STATUS,C  
             GOTO DCJC     
             CALL MST_INT           ;中断配置
             CALL DEC10MS           ;延时20MS
             CALL DEC10MS 
             CALL DEC10MS        
             BCF DS_ON
             BCF DC_OK
             BCF TS_OK
             BCF DL_OK
             BCF TS_YX
             BCF PWM_OUT
             CLRWDT                  ;清看门狗
;--------------------------------------------------------------------------------
;模式转换与控制
;助力模式: 助力有效ZL_ON置1(ZL_ON=1),此时转把无效
;          ZL_OK位1.6S置1一次,主程序循环运行,在助力没有输出为0,PWM输出调整到0.         
;电动模式: 在转把达到开启电压TSON,转把有效为TS_ON置1(TS_ON=1),转把采样完成,TS_OK=1.
;          在TS_ON=1,主程序进入电动模式运行.
;定速模式: 在电动模式下(TS_ON=1),定速键有效DS_ON=1,进入定速模式.在有刹车\欠压
;          或再次按下定速键退出定速模式.
;----------------------------------------------------------------------------------
;助力模式
ZLMOD         
              BTFSC ZL_ON           ;助力开启?
              GOTO ZLMOD0           ;是
              BTFSC TS_YX           ;转把是否有效? 
              GOTO DDMOD            ;是,跳到电动模式
ZLMOD0
              BTFSC PWM_OUT
              CALL PWMOUT           ;PWM输出

              BTFSC ZL_OK
              CALL CLZL             ;助力信号处理

              BTFSC DL_OK
              CALL CLIN_PWM         ;PWM加减调整(限流)
              
              BTFSC DC_OK
              CALL CLDC             ;欠压检测
              BTFSC OFF             ;判断是否有复位标志位
              GOTO RESET            ;复位

              BTFSS PSC             ;刹车
              CALL CLSC             ;刹车处理程序
              BTFSC OFF             ;判断是否有复位标志位
              GOTO RESET            ;复位
              CLRWDT                ;清看门狗
              BCF DS_OK             ;关定速检测
              GOTO ZLMOD            ;继续循环
;电动模式  
DDMOD         
              BTFSS TS_YX           ;转把开启?
              GOTO ZLMOD            ;转把没有开启,跳到助力模式
              BTFSS DS_ON
              GOTO DDMOD0
              BCF DS_ON
              GOTO DSMOD
DDMOD0
              BTFSC TS_OK
              CALL CLZB

              BTFSC DL_OK

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -