📄 x36vznys.asm
字号:
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
;----------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------------------------
;欠压报警闪烁输出
QYBJ
BTFSS DC_BJ ;DC_BJ=1,开启
GOTO CLOSBJ
MOVF QYBJ_TM,W
BTFSS STATUS,Z
GOTO QYBJ0
MOVLW 0X10
MOVWF QYBJ_TM
BTFSS PQY
GOTO QYBJ1
DECFSZ BJ_CT,F
GOTO QYBJ1
MOVF BJ_T,W
MOVWF BJ_CT
BCF PQY
RETURN
QYBJ1
BSF PQY
RETURN
QYBJ0
DECF QYBJ_TM,F
RETURN
CLOSBJ
BSF PQY
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
MOVLW 0X01
MOVWF IN_PWM_TM
MOVLW 0X01
MOVWF DC_YTM
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
BCF DC_BJ
MOVLW YSTS
MOVWF TSS
BCF DS_OK
MOVLW 0X02
MOVWF BJ_CT
MOVWF BJ_T
BSF PQY ;欠压预警置1
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 + -