PWM3 MOV LW 0X0FF ;1.1 V对应的采样值补码送加数
MOV WF ACCbHI
MOV LW 0X1F
MOV WF ACCbLO
CALL D_add ;TS-1.1V
CLRF ACCaHI ;系数K=56=38H送乘数
MOV LW 0X3F
MOV WF ACCaLO
CALL D_mpy ;得到放大128倍的低电平时间K*(TS-1.1V)
MOV F ACCcHI,0 ;将结果取出
MOV WF ACCaHI
MOV F ACCcLO,0
MOV WF ACCaLO
MOV LW 0X64 ;PWM周期T减去低电平时间,得到高电平时间
MOV WF ACCbHI
CLRF ACCbLO
CALL D_sub
BTFSC ACCbHI,7 ;低电平时间是否大于周期?
GOTO PWM2 ;是,输出全压
RLF ACCbLO ;否则,输出与低电平时间对应的高电平时间
RLF ACCbHI
MOV F ACCbHI,0 ;D10~D2位送CCPR1L
MOV WF CCPR1L
BCF CCP1CON,5 ;D0位送CCP1CON5
BTFSC ACCbLO,7
BSF CCP1CON,5
BCF CCP1CON,4 ;D.1位送CCP1CON4
BTFSC ACCbLO,6
BSF CCP1CON,4
RETURN ;返回
;****************刹车中断服务程序***************
BRAKE CALL PUSH ;保存现场
BCF STATUS,RP0 ;回存储区0
BSF FLAG1,SHUTDOWN;置相应标志位
BCF INTCON,INTF ;清中断标志位
CALL POP ;恢复现场
RETFIE ;中断返回
;***************低电压保护处理子程序*****************
POWER BCF FLAG1,LOWPOWER;清相应的标志位
MOV F VOLTAGEH,0
MOV WF ACCaHI
MOV F VOLTAGEL,0
MOV WF ACCaLO
MOV LW VOLOFFH
MOV WF ACCbHI
MOV LW VOLOFFL
MOV WF ACCbLO
CALL D_sub
BTFSC ACCbLO,7 ;判断当前电池电压值是否低于保护电压(32V)
RETURN ;不是,返回
BCF INTCON,INTE
BCF T1CON,TMR1ON ;关闭电流采样
MOV LW FULLPWM
MOV WF CCPR1L
BSF STATUS,RP0
BCF PIE1,ADIE ;禁止AD采样中断
BCF STATUS,RP0
POWER3 BTFSC ADCON0,GO ;正在进行AD采样?
GOTO POWER3 ;是,等待AD采样完毕
BCF PIR1,ADIF ;清AD采样中断标志位
BCF ADCON0,CHS0
BSF ADCON0,CHS1 ;选择电压采样通道
MOV LW 0X06 ;延时等待通道转换完成
MOV WF COUNT
POWER4 DECFSZ COUNT
GOTO POWER4
POWER6 BSF ADCON0,GO ;采样电池电压值
POWER5 BTFSS PIR1,ADIF ;采样完毕?
GOTO POWER5
BCF PIR1,ADIF ;清AD中断标志位
BCF STATUS,C
MOV F ADRESH,0 ;当前电压值送被加数
MOV WF ACCbHI
BSF STATUS,RP0
上一页 [1] [2] [3] [4] [5] [6] 下一页
本文关键字:电动自行车 源程序 PIC单片机,单片机-工控设备 - PIC单片机