• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 16F876控制的電動(dòng)自行車驅(qū)動(dòng)系統(tǒng)源程序(2)

    16F876控制的電動(dòng)自行車驅(qū)動(dòng)系統(tǒng)源程序(2)

    作者: 時(shí)間:2012-09-11 來(lái)源:網(wǎng)絡(luò) 收藏

    ;****************剎車中斷服務(wù)程序***************

    本文引用地址:http://www.czjhyjcfj.com/article/148412.htm

    BRAKE

    CALL PUSH ;保存現(xiàn)場(chǎng)

    BCF STATUS,RP0 ;回存儲(chǔ)區(qū)0

    BSF FLAG1,SHUTDOWN;置相應(yīng)標(biāo)志位

    BCF INTCON,INTF ;清中斷標(biāo)志位

    CALL POP ;恢復(fù)現(xiàn)場(chǎng)

    RETFIE

    ;中斷返回

    ;***************低電壓保護(hù)處理子程序*****************

    POWER

    BCF FLAG1,LOWPOWER;清相應(yīng)的標(biāo)志位

    MOVF VOLTAGEH,0

    MOVWF ACCaHI

    MOVF VOLTAGEL,0

    MOVWF ACCaLO

    MOVLW VOLOFFH

    MOVWF ACCbHI

    MOVLW VOLOFFL

    MOVWF ACCbLO

    CALL D_sub

    BTFSC ACCbLO,7 ;判斷當(dāng)前電池電壓值是否低于保護(hù)電壓(32V)

    RETURN ;不是,返回

    BCF INTCON,INTE

    BCF T1CON,TMR1ON ;關(guān)閉電流采樣

    MOVLW FULLPWM

    MOVWF CCPR1L

    BSF STATUS,RP0

    BCF PIE1,ADIE ;禁止AD采樣中斷

    BCF STATUS,RP0POWER3

    BTFSC ADCON0,GO ;正在進(jìn)行AD采樣?

    GOTO POWER3 ;是,等待AD采樣完畢

    BCF PIR1,ADIF ;清AD采樣中斷標(biāo)志位

    BCF ADCON0,CHS0

    BSF ADCON0,CHS1 ;選擇電壓采樣通道

    MOVLW 0X06 ;延時(shí)等待通道轉(zhuǎn)換完成

    MOVWF COUNTPOWER4

    DECFSZ COUNT

    GOTO POWER4POWER6

    BSF ADCON0,GO ;采樣電池電壓值

    POWER5

    BTFSS PIR1,ADIF ;采樣完畢?

    GOTO POWER5

    BCF PIR1,ADIF ;清AD中斷標(biāo)志位

    BCF STATUS,C

    MOVF ADRESH,0 ;當(dāng)前電壓值送被加數(shù)

    MOVWF ACCbHI

    BSF STATUS,RP0

    MOVF ADRESL,0

    BCF STATUS,RP0

    MOVWF ACCbLO

    MOVLW VOLONH ;35V電壓值送被加數(shù)

    MOVWF ACCaHI

    MOVLW VOLONL

    MOVWF ACCaLO

    CALL D_sub ;當(dāng)前電壓值減35,與重開電壓進(jìn)行比較

    MOVLW FULLPWM

    MOVWF CCPR1L

    CLRWDT

    BTFSC ACCbHI,7 ;當(dāng)前電壓值大于35?

    GOTO POWER6 ;否,重新采樣

    BSF FLAG1,OFF ;是,置相應(yīng)的標(biāo)志位

    RETURN

    ;返回

    ;***電機(jī)轉(zhuǎn)子位置采樣子程序,狀態(tài)采樣子程序,出口地址:STATE1***

    SAMPLE

    MOVLW AND ;讀RB口

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

    MOVWF STATE1 ;暫存狀態(tài)值

    MOVLW 0X08

    MOVWF DELAYDEL1

    DECFSZ DELAY ;延時(shí)6 μs

    GOTO DEL1

    MOVLW AND ;讀RB口

    ANDWF PORTB,0 ;分離出有效信息,并暫存

    MOVWF STATE2

    XORWF STATE1,0 ;與上一次狀態(tài)值相異或

    BTFSC STATUS,Z

    RETURN ;兩個(gè)狀態(tài)值相等則返回

    MOVLW 0X06 ;否則延時(shí)4 μs

    MOVWF DELAYDEL2

    DECFSZ DELAY

    GOTO DEL2

    MOVLW AND ;讀RB口

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

    MOVWF STATE3

    XORWF STATE1,0 ;與第一次狀態(tài)相同嗎?

    BTFSC STATUS,Z

    RETURN ;相同則返回

    MOVF STATE2,0 ;否則再與第二次狀態(tài)相比較

    XORWF STATE3,0

    BTFSS STATUS,Z

    GOTO SAMPLE ;三次狀態(tài)均不相同則重新采樣

    MOVF STATE2,0 ;第三次狀態(tài)與第二次相同,則將正確狀態(tài)賦予STATE1并

    MOVWF STATE1 ;返回

    RETURN

    ;************** MOSFET觸發(fā)信號(hào)輸出子程序**************

    OUTPUT

    SWAPF STATE1,1 ;STATE1寄存器高低半字節(jié)互換

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

    RRF STATE1,0 ;將采樣所得結(jié)果放至W低三位

    CALL OUT_TABLE ;查表獲得輸出值

    MOVWF PORTC ;將輸出值輸出至RC口

    RETURN

    ;*************** RB口電平變化中斷服務(wù)程序**************

    SAMPRB

    CALL PUSH ;現(xiàn)場(chǎng)保護(hù)

    BCF STATUS,RP0

    CALL SAMPLE ;采樣RB口狀態(tài)

    CALL OUTPUT ;根據(jù)RB口狀態(tài)觸發(fā)相應(yīng)的MOSFET

    CALL POP ;恢復(fù)現(xiàn)場(chǎng)

    BCF INTCON,RBIF ;清RB口電平變化中斷標(biāo)志

    RETFIE

    ;中斷返回

    ;************ AD采樣中斷服務(wù)程序***************

    AD

    CALL PUSH ;保護(hù)現(xiàn)場(chǎng)

    BTFSC FLAG1,VOLTAGE ;是電壓采樣?

    GOTO SET_VOL ;是,作相應(yīng)的處理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 ;置相應(yīng)的標(biāo)志位

    AD4

    BCF PIR1,ADIF ;清AD中斷標(biāo)志

    MOVF ADRESH,0 ;采樣值送寄存器暫存

    MOVWF TSH

    BSF STATUS,RP0

    MOVF ADRESL,0

    BCF STATUS,RP0

    MOVWF TSL

    BSF FLAG1,PWM

    BTFSS FLAG1,VOLTAGE ;是否需要進(jìn)行電壓采樣?

    GOTO AD6 MOVLW 0X05 ;是,延時(shí)后采樣電壓

    MOVWF TEMP1AD5

    DECFSZ TEMP1

    GOTO AD5

    BSF ADCON0,GOAD6

    CALL POP ;恢復(fù)現(xiàn)場(chǎng),中斷返回

    RETFIE

    SET_VOL

    BCF ADCON0,CHS1 ;如果采樣值為電壓值,則選擇0通道

    BCF ADCON0,CHS0

    BCF PIR1,ADIF ;清中斷標(biāo)志位

    BCF FLAG1,VOLTAGE ;清相應(yīng)標(biāo)志位

    MOVF ADRESH,0 ;將采樣結(jié)果放入被減數(shù)寄存器

    MOVWF VOLTAGEH

    BSF STATUS,RP0

    MOVF ADRESL,0

    BCF STATUS,RP0

    MOVWF VOLTAGEL

    BSF FLAG1,LOWPOWER;是,置相應(yīng)標(biāo)志位

    CALL POP

    ;中斷返回

    RETFIE

    ;**************中斷保護(hù)現(xiàn)場(chǎng)子程序******************

    PUSH

    MOVWF W_STACK ;暫存W寄存器

    MOVF STATUS,0 ;暫存STATUS寄存器

    MOVWF ST_STACK

    RETURN ;子程序返回

    ;**************中斷恢復(fù)現(xiàn)場(chǎng)子程序**************

    POP

    MOVF ST_STACK,0 ;恢復(fù)STATUS寄存器值

    MOVWF STATUS

    MOVF W_STACK,0 ;恢復(fù)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

    ;**********乘除法運(yùn)算確定結(jié)果符號(hào)子程序**********

    S_SIGN

    MOVF ACCaHI,0 ;ACCaHI異或ACCbHI,結(jié)果送SIGN單元

    XORWF ACCbHI,0

    MOVWF SIGN

    BTFSS ACCbHI,7 ;ACCb為負(fù)?

    GOTO CHEK_A ;否,檢查ACCa

    CALL NEG_BCHEK_A

    BTFSS ACCaHI,7 ;ACCa為負(fù)?

    RETLW 0 ;ACCa和ACCb均為負(fù),返回

    GOTO NEG_A ;ACCa為負(fù),取補(bǔ)

    GOTO MAIN

    END

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束

    ;程序結(jié)束



    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 广德县| 措勤县| 巴林左旗| 梧州市| 虹口区| 田阳县| 共和县| 南澳县| 桦川县| 屯昌县| 夏津县| 松原市| 广河县| 绵竹市| 乌兰县| 福安市| 宾阳县| 南昌县| 翁源县| 临洮县| 策勒县| 宿迁市| 宁乡县| 稻城县| 西盟| 蓝田县| 晋州市| 元阳县| 普陀区| 平罗县| 婺源县| 图木舒克市| 涟源市| 额敏县| 乳山市| 当雄县| 曲阳县| 南汇区| 津市市| 堆龙德庆县| 烟台市|