⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电机.asm

📁 CCP1模块使用的有关PIC应用程序Trabicom On Board Engine Controller
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                MOVLW   10                 ; STORE 1000 RPM
                MOVWF   RPM_OK

                MOVF    POWEREE, 0         ; POWER DATA FOR EE PAGE SELECT
                ADDLW   2                  ; POSITION IN THE TABLE

                BCF     PCLATH,4
                BCF     PCLATH,3
                CALL    DATREAD            ; READ THE EEPROM TABLE DATA
                MOVWF   ANGLE              ; STORE ANGLE

                GOTO    RPMREADY           ; END


F500
                MOVLW   0x0                ; READ FIRST HIGH BYTE
                BCF     PCLATH,4
                BSF     PCLATH,3           ;Select page 1 (800h-FFFh)
                CALL    RPMData
                BCF     PCLATH,3
                MOVWF   RPMH               ; STORE RPM HIGH BYTE
                MOVF    TMPH, 0
                SUBWF   RPMH, 0
                BTFSS   STATUS, C
                GOTO    F300
  
                MOVLW   1                  ; READ FIRST LOW BYTE
                BSF     PCLATH,3           ;Select page 1 (800h-FFFh)
                CALL    RPMData
                BCF     PCLATH,3
                MOVWF   RPML               ; STORE RPM LOW BYTE
                MOVF    TMPH, 0
                SUBWF   RPML, 0
                BTFSS   STATUS, C
                GOTO    F300
  
                MOVLW   5                  ; STORE 500 RPM
                MOVWF   RPM_OK

                MOVF    POWEREE, 0         ; POWER DATA FOR EE PAGE SELECT
                ADDLW   1                  ; POSITION IN THE TABLE

                BCF     PCLATH,4
                BCF     PCLATH,3
                CALL    DATREAD            ; READ THE EEPROM TABLE DATA
                MOVWF   ANGLE              ; STORE ANGLE

                GOTO    RPMREADY           ; END


F300
                MOVLW   3                  ; STORE 300 RPM
                MOVWF   RPM_OK

                MOVF    POWEREE, 0         ; POWER DATA FOR EE PAGE SELECT
                ADDLW   0                  ; POSITION IN THE TABLE

                BCF     PCLATH,4
                BCF     PCLATH,3
                CALL    DATREAD            ; READ THE EEPROM TABLE DATA
                MOVWF   ANGLE              ; STORE ANGLE

RPMREADY
                BCF PCLATH,4
                BCF PCLATH,3

;**********************************************************************
;*              Init Plug timer                                       *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                MOVF    RPM_OK, 0          ; RPM_OK TO W
                ANDLW   0x0FF              ; SET FLAGS
                BTFSC   STATUS, Z          ; ZERO ?
                RETURN                     ; RPM=0, NO PLUG NEEDED

                MOVF    ANGLE, 0           ; ANGLE TO W
                MOVWF   TMR0               ; FILL Timer0 register

                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

                MOVLW   B'00000111'        ; RBPU ACTIVE, T0 PRESCALER IS 256
                MOVWF   OPTION_REG         ;

                BCF     STATUS, RP0        ; Bank0
                BCF     INTCON, T0IF       ; RESET T0 INT FLAG

T0_OVFL_WAIT
                BTFSS   INTCON, T0IF       ; Timer has overflowed?
                GOTO    T0_OVFL_WAIT       ; WAIT FOR ANGLE TIMER EXPIRES

                BCF     INTCON, T0IF       ; RESET T0 INT FLAG

                BTFSS   PORTB, 4           ; 1 or 0?
                GOTO    CYLIND1
                BSF     PORTC, SPARK       ; 2 PLUG SPARK
                RETURN
CYLIND1
                BCF     PORTC, SPARK       ; 1 PLUG SPARK
                RETURN
                ;
                ; CLOSE ANGLE: 180  _2-1_2-1_
                ;


;**********************************************************************
;*                                                                    *
;*                                                                    *
;*              GENERAL ROUTINES                                      *
;*                                                                    *
;*              Purpose: A LOT OF PROCEDURE                           *
;*                                                                    *
;*                                                                    *
;**********************************************************************



;**********************************************************************
;*              STARTER MOTOR CONTROLLER (AFTER BLOW UP -> OFF)       *
;**********************************************************************
STARTERCTRL
                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1
                
                MOVF    RPM_OK, 0          ; RPM INTO W
                SUBWF   RPMIN, 0           ; SUBSTRACT RPM-4H
                BTFSC   STATUS, C          ; <0 ?
                RETURN                     ; YES, STILL ENABLE
                BCF     PORTC, RELAY       ; DISABLE STARTER
		
                RETURN


;**********************************************************************
;*              A/D conversions                                       *
;**********************************************************************
ADCONVERT
                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1
  
                BTFSC   ADCON0, GO         ; A/D IN PROGRESS?
                GOTO    PROGRESS           ; STILL WAIT
  
                BTFSS   ADSTATE, 0         ; TCYL1?
                GOTO    CYLINDER2
  
                MOVLW   B'00000010'        ; NEXT TCYL2
                MOVWF   ADSTATE
                MOVF    ADRESH, 0
                MOVWF   TCYL1H             ; STORE TCYL1H
                BSF     STATUS, RP0        ; Bank1
                MOVF    ADRESL, 0
                BCF     STATUS, RP0        ; Bank0
                MOVWF   TCYL1L             ; STORE TCYL1L

                CALL    WAITING            ; WAITING
                MOVLW   B'11001101'        ; SELECT TCYL2
                MOVWF   ADCON0             ; Start A/D Conversion
                GOTO    PROGRESS           ; WAIT FOR A/D COMPLETE
CYLINDER2
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
  
                BTFSS   ADSTATE, 1         ; TCYL2?
                GOTO    AIRMEASURE
  
                MOVLW   B'00000100'        ; NEXT TAIR
                MOVWF   ADSTATE
                MOVF    ADRESH, 0
                MOVWF   TCYL2H             ; STORE TCYL2H
                BSF     STATUS, RP0        ; Bank1
                MOVF    ADRESL, 0
                BCF     STATUS, RP0        ; Bank0
                MOVWF   TCYL2L             ; STORE TCYL2L

                CALL    WAITING            ; WAITING
                MOVLW   B'11010101'        ; SELECT TAIR
                MOVWF   ADCON0             ; Start A/D Conversion
                GOTO    PROGRESS           ; WAIT FOR A/D COMPLETE
AIRMEASURE
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
  
                BTFSS   ADSTATE, 2         ; TAIR?
                GOTO    POWERMEASURE
  
                MOVLW   B'00001000'        ; NEXT POWER
                MOVWF   ADSTATE
                MOVF    ADRESH, 0
                MOVWF   TAIRH              ; STORE TAIRH
                BSF     STATUS, RP0        ; Bank1
                MOVF    ADRESL, 0
                BCF     STATUS, RP0        ; Bank0
                MOVWF   TAIRL              ; STORE TAIRL

                CALL    WAITING            ; WAITING
                MOVLW   B'11011101'        ; SELECT POWER
                MOVWF   ADCON0             ; Start A/D Conversion
                GOTO    PROGRESS           ; WAIT FOR A/D COMPLETE
POWERMEASURE
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
  
                BTFSS   ADSTATE, 3         ; POWER?
                GOTO    PROGRESS
  
                MOVLW   B'00000001'        ; NEXT TCYL1
                MOVWF   ADSTATE
                MOVF    ADRESH, 0
                MOVWF   POWERH             ; STORE POWERH
                BSF     STATUS, RP0        ; Bank1
                MOVF    ADRESL, 0
                BCF     STATUS, RP0        ; Bank0
                MOVWF   POWERL             ; STORE POWERL

                CALL    WAITING            ; WAITING
                MOVLW   B'11000101'        ; SELECT TCYL1
                MOVWF   ADCON0             ; Start A/D Conversion
PROGRESS
                RETURN

;**********************************************************************
;*              WAITING FOR 154 us                                    *
;**********************************************************************
WAITING
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
                CLRF    COUNTER1           ; INIT COUNTER1
WAITCYCL
                DECFSZ  COUNTER1, 1        ; WAIT CYCLE
                GOTO    WAITCYCL
                RETURN

;**********************************************************************
;*              BEEP                                                  *
;**********************************************************************
BEEP
                BCF     STATUS, RP0        ; Bank0
                BSF     PORTC, SPEAKER     ; BEEP ON
                RETURN

;**********************************************************************
;*              NO BEEP                                               *
;**********************************************************************
NOBEEP
                BCF     STATUS, RP0        ; Bank0
                BCF     PORTC, SPEAKER     ; BEEP OFF
                RETURN

;**********************************************************************
;*              EEPROM data write                                     *
;**********************************************************************
EEDATWRITE
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank 0

                MOVF    DATA_ADDR, 0       ; DATA ADDRESS FOR EEPROM

                BSF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank 2

                MOVWF   EEADR              ; Data Memory Address to write

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank 0

                MOVF    DATA_DATA, 0       ;

                BSF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank 2

                MOVWF   EEDATA             ; Data Memory Value to write

                BSF     STATUS, RP0        ; Bank 3
                BCF     EECON1, EEPGD      ; Point to DATA memory
                BSF     EECON1, WREN       ; Enable writes

                MOVLW   55h                ;
                MOVWF   EECON2             ; Write 55h
                MOVLW   0AAh               ;
                MOVWF   EECON2             ; Write AAh
                BSF     EECON1, WR         ; Set WR bit to begin write
                CLRF    COUNTER1
WRITING
                DECFSZ  COUNTER1, 1        ; WAIT CYCLE
                GOTO    WRITING

                BCF     EECON1, WREN       ; Disable writes

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank 0

                RETURN

;******************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -