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

📄 电机.asm

📁 CCP1模块使用的有关PIC应用程序Trabicom On Board Engine Controller
💻 ASM
📖 第 1 页 / 共 5 页
字号:

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVLW   AGAIN              ; ERROR, COME AGAIN 2ND
                MOVWF   PORTD              ; SENDING
                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

READWAIT2
                BTFSC   TRISE, OBF         ; READ ALREADY?
                GOTO    READWAIT2          ; LOOP

                GOTO    NODATA             ; WAIT FOR REPEAT DATA

;**********************************************************************
;*              COMMAND PROCESSOR                                     *
;**********************************************************************
DATOK
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVLW   COM_WEE            ; WRITE EEPROM?
                XORWF   DATA_COMMAND, 0    ; COMPARE
                BTFSC   STATUS, Z
                CALL    EEDATWRITE         ; WRITE EEPROM

                MOVLW   COM_WSH            ; WRITE SHADOW?
                XORWF   DATA_COMMAND, 0    ; COMPARE
                BTFSC   STATUS, Z
                CALL    SHDATWRITE         ; WRITE SHADOW

                MOVLW   COM_REE            ; READ EEPROM?
                XORWF   DATA_COMMAND, 0    ; COMPARE
                BTFSC   STATUS, Z
                CALL    EEFORGB            ; READ EEPROM

                MOVLW   COM_MEA            ; READ MEASURES?
                XORWF   DATA_COMMAND, 0    ; COMPARE
                BTFSC   STATUS, Z
                CALL    MEASURESGB         ; READ MEASURES

NODATA




                GOTO    SWCYCLE            ; Endless loop

;*********************************************************************************
;*********************************************************************************
;*                                                                               *
;*                                                                               *
;*              END of Main Program                                              *
;*                                                                               *
;*                                                                               *
;*********************************************************************************
;*********************************************************************************









;**********************************************************************
;*                                                                    *
;*                                                                    *
;*              Interrupt service routine                             *
;*                                                                    *
;*              Purpose: Real time Plug control                       *
;*                                                                    *
;*                                                                    *
;**********************************************************************

;                ORG     0x100             ; program start address
introutine
                BTFSS   INTCON, RBIF       ; PORTB CHANGE INTERRUPT?
                RETURN                     ; FALSE INTERRUPT, EXIT

;**********************************************************************
;*              Read RPM timer                                        *
;**********************************************************************

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
                MOVF    TMR1H, W           ; Read high byte
                MOVWF   TMPH               ;
                MOVF    TMR1L, W           ; Read low byte
                MOVWF   TMPL               ;
                MOVF    TMR1H, W           ; Read high byte
                SUBWF   TMPH, W            ; Sub 1st read with 2nd read
                BTFSC   STATUS,Z           ; Is result = 0
                GOTO    CONTINUE           ; Good 16-bit read
                ;
                ; TMR1L may have rolled over between the read of the high and low bytes.
                ; Reading the high and low bytes now will read a good value.
                ;
                MOVF    TMR1H, W           ; Read high byte
                MOVWF   TMPH               ; Store high byte
                MOVF    TMR1L, W           ; Read low byte
                MOVWF   TMPL               ; Store low byte
CONTINUE  

;**********************************************************************
;*              Init RPM timer                                        *
;**********************************************************************

                CLRF    T1CON              ; Stop Timer1, Internal Clock Source,
                                           ; T1 oscillator disabled, prescaler = 1:1
                CLRF    TMR1H              ; Clear Timer1 High byte register
                CLRF    TMR1L              ; Clear Timer1 Low byte register

                MOVLW   0x30               ; Internal Clock source with 1:8 prescaler
                MOVWF   T1CON              ; Timer1 is stopped and T1 osc is disabled
                BSF     T1CON, TMR1ON      ; Timer1 starts to increment

;**********************************************************************
;*              INTERRUPT INIT                                        *
;**********************************************************************

                BCF     INTCON, RBIF       ; CLEAR PORTB CHANGE INT FLAG


;**********************************************************************
;*              CALCULATE RPM                                         *
;**********************************************************************

                BTFSS   PIR1, TMR1IF       ; WAS TIMER1 OVERFLOW ?
                GOTO    RPMSTART           ; ALL RIGHT
                BCF     PIR1, TMR1IF       ; CLEAR FLAG
                CLRF    RPM_OK             ; RPM=0
                GOTO    RPMREADY           ; SKIP CALCULATOR
RPMSTART
                MOVF    TMPH, 0            ; READ HIGH BYTE
                SUBLW   0X08               ; GREATER THAN 8000?
                BTFSS   STATUS, C          ; <0 ?
                GOTO    F7000              ; NO, GO TO 7000
                CLRF    RPM_OK             ; RPM=0
                GOTO    RPMREADY           ; END
F7000
                MOVLW   0x1A               ; 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    F6500
  
                MOVLW   0x1B               ; 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    F6500
  
                MOVLW   70                 ; STORE 7000 RPM
                MOVWF   RPM_OK

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

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

                GOTO    RPMREADY           ; END

F6500
                MOVLW   0x18               ; 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    F6000
  
                MOVLW   0x19               ; 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    F6000
  
                MOVLW   65                 ; STORE 6500 RPM
                MOVWF   RPM_OK

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

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

                GOTO    RPMREADY           ; END

F6000
                MOVLW   0x16               ; 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    F5500
  
                MOVLW   0x17               ; 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    F5500
  
                MOVLW   60                 ; STORE 6000 RPM
                MOVWF   RPM_OK

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

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

                GOTO    RPMREADY           ; END


F5500
                MOVLW   0x14               ; 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    F5000
  
                MOVLW   0x15               ; 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    F5000
  
                MOVLW   55                 ; STORE 5500 RPM
                MOVWF   RPM_OK

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

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

                GOTO    RPMREADY           ; END


F5000
                MOVLW   0x12               ; 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    F4500
  

⌨️ 快捷键说明

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