RETLW 0X077 ;如霍尔信号为1、1、1则使RC3、RC7为低电平
;***************主程序*****************
ORG 0X0100 ;主程序从0X0100单元开始存储
MAIN
MOV LW 0X0FF ;由于C口上电复位值不确定,必须先关闭所有MOS管
MOV WF PORTC
BSF STATUS,RP0 ;选择存储体1
MOV LW 0X02 ;设置RC1为输入口,其它为输出口,其中RC2为PWM
MOV WF TRISC ;输出口,其它位为触发信号输出
BCF STATUS,RP0 ;选择存储体0
CLRF PIR1 ;清所有中断标志位
CLRF INTCON ;禁止所有中断
MOV LW 0X01 ;设置TMR2预分频值为4
MOV WF T2CON
MOV LW FULLPWM ;初始化PWM工作循环寄存器,使PWM占空比为1
MOV WF CCPR1L ;输出电压为零
MOV LW 0XFF ;设置CCP1工作于PWM方式
MOV WF CCP1CON
MOV LW 0X0B ;CCP2工作于特殊事件触发方式,用作AD采样周期寄存 MOVWF CCP2CON ;器
MOV LW 0X081 ;选择AD转换时钟为32分频,选择AN0通道,并使AD
MOV WF ADCON0 ;转换允许
CLRF TMR2 ;TMR2计数器清零
CLRF TMR1H ;TMR1计数器清零
CLRF TMR1L
CLRF T1CON ;TMR1预分频为1,关闭振荡器,工作于定时工作方式
MOV LW 0X08 ;初始化AD采样周期寄存器,T=512 μs
MOV WF CCPR2H
MOV LW 0X00
MOV WF CCPR2L
BSF STATUS,RP0 ;选择存储体1
MOV LW 0XEF ;RB口高3位用于采样霍尔信号,RB0为刹车中断,设置为
MOV WF TRISB ;输入,其它未用
MOV LW 0XC7 ;初始化PWM频率为5 kHz
MOV WF PR2
MOV LW 0X082 ;AD采样结果右移,RA口引脚均为模拟输入
MOV WF ADCON1
BSF OPTION_REG,INTEDG ;选择INT在下降沿产生中断
BCF STATUS,RP0
CALL SAMPLE ;确定当前转子位置
CALL OUTPUT ;根据采得的状态值触发相应的MOSFET
MOV LW 0X0D8 ;开总中断、外围中断、INT中断和RB口电平变化中断允
MOV WF INTCON ;许
BCF PIE2,CCP2IE ;CCP2中断禁止
BSF PIE1,ADIE ;打开AD采样中断
CLRF FLAG1 ;清标志位寄存器
CLRF COUNT_VOL ;清电池电压采样计数器
BSF T1CON,TMR1ON ;开CCP2,对手柄进行等间隔采样
BSF T2CON,TMR2ON ;开CCP1
RETEST 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
上一页 [1] [2] [3] [4] [5] [6] 下一页
本文关键字:电动自行车 源程序 PIC单片机,单片机-工控设备 - PIC单片机