微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 16F876控制的电动自行车驱动系统源程序(1)

16F876控制的电动自行车驱动系统源程序(1)

时间:09-11 来源:互联网 点击:

中断和RB口电平变化中断允

MOVWF INTCON ;许BCF

PIE2,CCP2IE ;CCP2中断禁止

BSF PIE1,ADIE ;打开AD采样中断

CLRF FLAG1 ;清标志位寄存器

CLRF COUNT_VOL ;清电池电压采样计数器

BSF T1CON,TMR1ON ;开CCP2,对手柄进行等间隔采样

BSF T2CON,TMR2ON ;开CCP1RETEST

BTFSS FLAG1,PWM ;TS采样完毕?

GOTO NEXT1 ;没有,转NEXT1

CALL OUT_PWM ;TS采样完毕,送出相应的PWM信号

BCF FLAG1,PWM ;清PWM允许标志NEXT1

BTFSS FLAG1,LOWPOWER;电压采样完毕?

GOTO NEXT2 ;没有转NEXT2

CALL POWER ;是,调用电压保护子程序处理数据

BTFSC FLAG1,OFF ;是否需要复位?

GOTO MAIN ;是,单片机复位NEXT2

BTFSS FLAG1,SHUTDOWN;刹车中断到来?

GOTO RETEST ;否,回转RETEST

CALL BRAKEON ;是,调用刹车处理子程序

CLRWDT BTFSC FLAG1,OFF ;OFF=0?

GOTO MAIN ;否,单片机复位

GOTO RETEST ;是,回转RETEST

;***************刹车处理子程序******************

BRAKEON

BCF FLAG1,OFF ;清复位标志

BCF FLAG1,SHUTDOWN;是,清相应标志位

BTFSS PORTB,0 ;INT引脚仍为1?

RETURN ;否,中断是由干扰引起的,返回

BSF STATUS,RP0 BCF PIE1,ADIE ;禁止AD采样中断

BCF STATUS,RP0 BCF INTCON,INTE ;关RB0中断

MOVLW FULLPWM ;PWM输出全高

MOVWF CCPR1L

BCF T1CON,TMR1ON ;关闭手柄采样BREAK2

BTFSC ADCON0,GO ;正在进行AD采样?

GOTO BREAK2 ;是,等待AD采样完毕

BCF ADCON0,CHS0

BCF ADCON0,CHS1 ;选择0采样通道,准备采样手柄电压

BCF PIR1,ADIF ;清AD采样中断标志位

MOVLW 0X06 ;延时

MOVWF COUNTBREAK3

DECFSZ COUNT

GOTO BREAK3BREAK5

BSF ADCON0,GO ;采样TS值BREAK4

BTFSS PIR1,ADIF ;采样完毕?

GOTO BREAK4

BCF PIR1,ADIF

BCF STATUS,C

MOVF ADRESH,0 ;当前TS值送被减数

MOVWF ACCbHI

BSF STATUS,RP0

MOVF ADRESL,0

BCF STATUS,RP0

MOVWF ACCbLO

MOVLW TSONH ;1.5 V所对应的采样值送减数

MOVWF ACCaHI

MOVLW TSONL

MOVWF ACCaLO

CALL D_sub ;当前TS值减1.5V

MOVLW FULLPWM

MOVWF CCPR1L

CLRWDT

BTFSS ACCbHI,7 ;当前电压值大于1.5V?

GOTO BREAK5 ;是,重新采样

BTFSC PORTB,0

GOTO BREAK5

BSF FLAG1,OFF ;否,置相应的标志位

RETURN

;返回

;***************开环PWM输出子程序****************

OUT_PWM

BCF FLAG1,PWM ;清相应的标志位

MOVF TSH,0 ;将调速手柄采样值送至被加数

MOVWF ACCaHI

MOVF TSL,0

MOVWF ACCaLO

MOVLW 0XFF ;FF1F补码为0XE1,即1.1 V

MOVWF ACCbHI

MOVLW 0X1F

MOVWF ACCbLO

CALL D_add

BTFSS ACCbHI,7 ;TS>1.1V?

GOTO PWM1 ;是,转PWM1

MOVLW FULLPWM ;否则输出全高

MOVWF CCPR1L

RETURN

PWM1

MOVLW 0XFD ;0X27B=3.1V

MOVWF ACCbHI

MOVLW 0X85

MOVWF ACCbLO

CALL D_add

BTFSC ACCbHI,7 ;TS>3.1V?

GOTO PWM3PWM2

CLRF CCPR1L

BCF CCP1CON,4

BCF CCP1CON,5

RETURN

PWM3

MOVLW 0X0FF ;1.1 V对应的采样值补码送加数

MOVWF ACCbHI

MOVLW 0X1F

MOVWF ACCbLO

CALL D_add ;TS-1.1V

CLRF ACCaHI ;系数K=56=38H送乘数

MOVLW 0X3F

MOVWF ACCaLO

CALL D_mpy ;得到放大128倍的低电平时间K*(TS-1.1V)

MOVF ACCcHI,0 ;将结果取出

MOVWF ACCaHI

MOVF ACCcLO,0

MOVWF ACCaLO

MOVLW 0X64 ;PWM周期T减去低电平时间,得到高电平时间

MOVWF ACCbHI

CLRF ACCbLO

CALL D_sub

BTFSC ACCbHI,7 ;低电平时间是否大于周期?

GOTO PWM2 ;是,输出全压

RLF ACCbLO ;否则,输出与低电平时间对应的高电平时间

RLF ACCbHI

MOVF ACCbHI,0 ;D10~D2位送CCPR1L

MOVWF 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

;返回

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top