<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 16F876控制的電動自行車驅動系統(tǒng)源程序(2)

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

          作者: 時間:2012-09-11 來源:網絡 收藏

          ;****************剎車中斷服務程序***************

          本文引用地址:http://www.ex-cimer.com/article/148412.htm

          BRAKE

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

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

          BSF FLAG1,SHUTDOWN;置相應標志位

          BCF INTCON,INTF ;清中斷標志位

          CALL POP ;恢復現(xiàn)場

          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 ;當前電壓值送被加數(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 ;當前電壓值減35,與重開電壓進行比較

          MOVLW FULLPWM

          MOVWF CCPR1L

          CLRWDT

          BTFSC ACCbHI,7 ;當前電壓值大于35?

          GOTO POWER6 ;否,重新采樣

          BSF FLAG1,OFF ;是,置相應的標志位

          RETURN

          ;返回

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

          SAMPLE

          MOVLW AND ;讀RB口

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

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

          MOVLW 0X08

          MOVWF DELAYDEL1

          DECFSZ DELAY ;延時6 μs

          GOTO DEL1

          MOVLW AND ;讀RB口

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

          MOVWF STATE2

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

          BTFSC STATUS,Z

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

          MOVLW 0X06 ;否則延時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ā)信號輸出子程序**************

          OUTPUT

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

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

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

          CALL OUT_TABLE ;查表獲得輸出值

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

          RETURN

          ;*************** RB口電平變化中斷服務程序**************

          SAMPRB

          CALL PUSH ;現(xiàn)場保護

          BCF STATUS,RP0

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

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

          CALL POP ;恢復現(xiàn)場

          BCF INTCON,RBIF ;清RB口電平變化中斷標志

          RETFIE

          ;中斷返回

          ;************ AD采樣中斷服務程序***************

          AD

          CALL PUSH ;保護現(xiàn)場

          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 ;恢復現(xiàn)場,中斷返回

          RETFIE

          SET_VOL

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

          BCF ADCON0,CHS0

          BCF PIR1,ADIF ;清中斷標志位

          BCF FLAG1,VOLTAGE ;清相應標志位

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

          MOVWF VOLTAGEH

          BSF STATUS,RP0

          MOVF ADRESL,0

          BCF STATUS,RP0

          MOVWF VOLTAGEL

          BSF FLAG1,LOWPOWER;是,置相應標志位

          CALL POP

          ;中斷返回

          RETFIE

          ;**************中斷保護現(xiàn)場子程序******************

          PUSH

          MOVWF W_STACK ;暫存W寄存器

          MOVF STATUS,0 ;暫存STATUS寄存器

          MOVWF ST_STACK

          RETURN ;子程序返回

          ;**************中斷恢復現(xiàn)場子程序**************

          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

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束

          ;程序結束



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();