MOV F ADRESL,0
BCF STATUS,RP0
MOV WF ACCbLO
MOV LW VOLONH ;35V电压值送被加数
MOV WF ACCaHI
MOV LW VOLONL
MOV WF ACCaLO
CALL D_sub ;当前电压值减35,与重开电压进行比较
MOV LW FULLPWM
MOV WF CCPR1L
CLRWDT
BTFSC ACCbHI,7 ;当前电压值大于35?
GOTO POWER6 ;否,重新采样
BSF FLAG1,OFF ;是,置相应的标志位
RETURN ;返回
;***电机转子位置采样子程序,状态采样子程序,出口地址:STATE1***
SAMPLE MOV LW AND ;读RB口
ANDWF PORTB,0 ;分离出有效信息
MOV WF STATE1 ;暂存状态值
MOV LW 0X08
MOV WF DELAY
DEL1 DECFSZ DELAY ;延时6 μs
GOTO DEL1
MOV LW AND ;读RB口
ANDWF PORTB,0 ;分离出有效信息,并暂存
MOV WF STATE2
XORWF STATE1,0 ;与上一次状态值相异或
BTFSC STATUS,Z
RETURN ;两个状态值相等则返回
MOV LW 0X06 ;否则延时4 μs
MOV WF DELAY
DEL2 DECFSZ DELAY
GOTO DEL2
MOV LW AND ;读RB口
ANDWF PORTB,0 ;提取有效信息并暂存
MOV WF STATE3
XORWF STATE1,0 ;与第一次状态相同吗?
BTFSC STATUS,Z
RETURN ;相同则返回
MOV F STATE2,0 ;否则再与第二次状态相比较
XORWF STATE3,0
BTFSS STATUS,Z
GOTO SAMPLE ;三次状态均不相同则重新采样
MOV F STATE2,0 ;第三次状态与第二次相同,则将正确状态赋予STATE1并
MOV WF STATE1 ;返回
RETURN
;************** MOSFET触发信号输出子程序**************
OUTPUT SWAPF STATE1,1 ;STATE1寄存器高低半字节互换
BCF STATUS,C ;清C位,并将STATE1寄存器左移一位
RRF STATE1,0 ;将采样所得结果放至W低三位
CALL OUT_TABLE ;查表获得输出值
MOV WF PORTC ;将输出值输出至RC口
RETURN
;*************** RB口电平变化中断服务程序**************
SAMPRB CALL PUSH ;现场保护
BCF STATUS,RP0
CALL SAMPLE ;采样RB口状态
CALL OUTPUT ;根据RB口状态触发相应的MOSFET
CALL POP ;恢复现场
BCF INTCON,RBIF ;清RB口电平变化中断标志
RETFIE ;中断返回
;************ AD采样中断服务程序***************
AD CALL PUSH ;保护现场
BTFSC FLAG1,VOLTAGE ;是电压采样?
GOTO SET_VOL ;是,作相应的处理
SET_TS BCF ADCON0,CHS0 ;AD采样值是TS,则选择1采样通道
INCF COUNT_VOL ;电压采样周期寄存器值加1
BTFSS STATUS,Z ;电压采样周期到?
上一页 [1] [2] [3] [4] [5] [6] 下一页
本文关键字:电动自行车 源程序 PIC单片机,单片机-工控设备 - PIC单片机