当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]16F876控制的电动自行车驱动系统源程序(2)

;****************刹车中断服务程序***************

BRAKE

CALL PUSH ;保存现场

BCF STATUS,RP0 ;回存储区0

BSF FLAG1,SHUTDOWN;置相应标志位

BCF INTCON,INTF ;清中断标志位

CALL POP ;恢复现场

RETFIE

;中断返回

;***************低电压保护处理子程序*****************

POWER

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

MOVF VOLTAGEH,0

MOVWF ACCaHI

MOVF VOLTAGEL,0

MOVWF ACCaLO

MOVLW VOLOFFH

MOVWF ACCbHI

MOVLW VOLOFFL

MOVWF ACCbLO

CALL D_sub

BTFSC ACCbLO,7 ;判断当前电池电压值是否低于保护电压(32V)

RETURN ;不是,返回

BCF INTCON,INTE

BCF T1CON,TMR1ON ;关闭电流采样

MOVLW FULLPWM

MOVWF CCPR1L

BSF STATUS,RP0

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

BCF STATUS,RP0POWER3

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

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

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

BCF ADCON0,CHS0

BSF ADCON0,CHS1 ;选择电压采样通道

MOVLW 0X06 ;延时等待通道转换完成

MOVWF COUNTPOWER4

DECFSZ COUNT

GOTO POWER4POWER6

BSF ADCON0,GO ;采样电池电压值

POWER5

BTFSS PIR1,ADIF ;采样完毕?

GOTO POWER5

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

BCF STATUS,C

MOVF ADRESH,0 ;当前电压值送被加数

MOVWF ACCbHI

BSF STATUS,RP0

MOVF ADRESL,0

BCF STATUS,RP0

MOVWF ACCbLO

MOVLW VOLONH ;35V电压值送被加数

MOVWF ACCaHI

MOVLW VOLONL

MOVWF ACCaLO

CALL D_sub ;当前电压值减35,与重开电压进行比较

MOVLW FULLPWM

MOVWF CCPR1L

CLRWDT

BTFSC ACCbHI,7 ;当前电压值大于35?

GOTO POWER6 ;否,重新采样

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

RETURN

;返回

;***电机转子位置采样子程序,状态采样子程序,出口地址:STATE1***

SAMPLE

MOVLW AND ;读RB口

ANDWF PORTB,0 ;分离出有效信息

MOVWF STATE1 ;暂存状态值

MOVLW 0X08

MOVWF DELAYDEL1

DECFSZ DELAY ;延时6 μs

GOTO DEL1

MOVLW AND ;读RB口

ANDWF PORTB,0 ;分离出有效信息,并暂存

MOVWF STATE2

XORWF STATE1,0 ;与上一次状态值相异或

BTFSC STATUS,Z

RETURN ;两个状态值相等则返回

MOVLW 0X06 ;否则延时4 μs

MOVWF DELAYDEL2

DECFSZ DELAY

GOTO DEL2

MOVLW AND ;读RB口

ANDWF PORTB,0 ;提取有效信息并暂存

MOVWF STATE3

XORWF STATE1,0 ;与第一次状态相同吗?

BTFSC STATUS,Z

RETURN ;相同则返回

MOVF STATE2,0 ;否则再与第二次状态相比较

XORWF STATE3,0

BTFSS STATUS,Z

GOTO SAMPLE ;三次状态均不相同则重新采样

MOVF STATE2,0 ;第三次状态与第二次相同,则将正确状态赋予STATE1并

MOVWF STATE1 ;返回

RETURN

;************** MOSFET触发信号输出子程序**************

OUTPUT

SWAPF STATE1,1 ;STATE1寄存器高低半字节互换

BCF STATUS,C ;清C位,并将STATE1寄存器左移一位

RRF STATE1,0 ;将采样所得结果放至W低三位

CALL OUT_TABLE ;查表获得输出值

MOVWF 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 ;电压采样周期到?

GOTO AD4

BCF ADCON0,CHS0 ;是,选择2采样通道

BSF ADCON0,CHS1

BSF FLAG1,VOLTAGE ;置相应的标志位

AD4

BCF PIR1,ADIF ;清AD中断标志

MOVF ADRESH,0 ;采样值送寄存器暂存

MOVWF TSH

BSF STATUS,RP0

MOVF ADRESL,0

BCF STATUS,RP0

MOVWF TSL

BSF FLAG1,PWM

BTFSS FLAG1,VOLTAGE ;是否需要进行电压采样?

GOTO AD6 MOVLW 0X05 ;是,延时后采样电压

MOVWF TEMP1AD5

DECFSZ TEMP1

GOTO AD5

BSF ADCON0,GOAD6

CALL POP ;恢复现场,中断返回

RETFIE

SET_VOL

BCF ADCON0,CHS1 ;如果采样值为电压值,则选择0通道

BCF ADCON0,CHS0

BCF PIR1,ADIF ;清中断标志位

BCF FLAG1,VOLTAGE ;清相应标志位

MOVF ADRESH,0 ;将采样结果放入被减数寄存器

MOVWF VOLTAGEH

BSF STATUS,RP0

MOVF ADRESL,0

BCF STATUS,RP0

MOVWF VOLTAGEL

BSF FLAG1,LOWPOWER;是,置相应标志位

CALL POP

;中断返回

RETFIE

;**************中断保护现场子程序******************

PUSH

MOVWF W_STACK ;暂存W寄存器

MOVF STATUS,0 ;暂存STATUS寄存器

MOVWF ST_STACK

RETURN ;子程序返回

;**************中断恢复现场子程序**************

POP

MOVF ST_STACK,0 ;恢复STATUS寄存器值

MOVWF STATUS

MOVF W_STACK,0 ;恢复W寄存器值

RETURN ;子程序返回

;**************初始化子程序****************

SETUP

MOVLW .15 ;初始化TEMP

MOVWF TEMP

MOVF ACCbHI,0 ;ACCb送ACCd

MOVWF ACCdHI

MOVF ACCbLO,0

MOVWF ACCdLO

CLRF ACCbHI ;清ACCb

CLRF ACCbLO

RETLW 0

;**********乘除法运算确定结果符号子程序**********

S_SIGN

MOVF ACCaHI,0 ;ACCaHI异或ACCbHI,结果送SIGN单元

XORWF ACCbHI,0

MOVWF SIGN

BTFSS ACCbHI,7 ;ACCb为负?

GOTO CHEK_A ;否,检查ACCa

CALL NEG_BCHEK_A

BTFSS ACCaHI,7 ;ACCa为负?

RETLW 0 ;ACCa和ACCb均为负,返回

GOTO NEG_A ;ACCa为负,取补

GOTO MAIN

END

;程序结束

;程序结束

;程序结束

;程序结束

;程序结束

;程序结束

;程序结束

;程序结束

;程序结束

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭