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

📄 电机.asm

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





                BCF     INTCON, GIE        ; DISABLE ALL INTERRUPTS

;**********************************************************************
;*              Init port A                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1
                CLRF    PORTA              ; Initialize PORTA by clearing output
                                           ; data latches
                CLRF    PIR1               ; A/D INTERRUPTS ARE DISABLE
                CLRF    ADRESH             ; CLEAR A/D RESULT
                MOVLW   B'11000001'
                MOVWF   ADCON0             ; Configure A/D DEVICE (RC)

                BSF     STATUS, RP0        ; Select Bank1
                MOVLW   0xFF               ; Value used to initialize data direction
                MOVWF   TRISA              ; All port input
                                           ; TRISA<7:6> always read as '0'
                CLRF    PIE1               ; A/D INTERRUPTS ARE DISABLED
                CLRF    PIE2               ; EE INTERRUPT DISABLED
                CLRF    ADRESL             ; CLEAR A/D RESULT
                MOVLW   B'00000010'        ; LEFT JUSTIFIED FORMAT
                MOVWF   ADCON1

                MOVLW   B'00001000'
                BCF     STATUS, RP0        ; Bank0
                MOVWF   ADSTATE            ; TCYL1 WILL BE THE FIRST

;**********************************************************************
;*              Init port B                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1

                CLRF    PORTB              ; Initialize PORTB by clearing output
                CLRF    POWEREE            ; data latches
                BSF     STATUS, RP0        ; Select Bank1
                MOVLW   0xFF               ; Value used to initialize data direction
                MOVWF   TRISB              ; All port input
                BCF     OPTION_REG,NOT_RBPU ; SET PULL UP'S
  
;**********************************************************************
;*              Init port C                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1

                CLRF    PORTC              ; Initialize PORTC by clearing output
                                           ; data latches
                BSF     STATUS, RP0        ; Select Bank1

                BSF     PCON, NOT_BOR      ; BROWN OUT CLEAR
                BSF     PCON, NOT_POR      ; POWER UP INIT

                MOVLW   b'10000000'        ; Value used to initialize data direction
                MOVWF   TRISC              ; PORTC<6:0> = outputs, PORTC<7> = inputs

;**********************************************************************
;*              Init port D                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1

                CLRF    WATINJ             ; 0 VALUE FOR WATINJ

                CLRF    PORTD              ; Initialize PORTD by clearing output
                                           ; data latches
                BSF     STATUS, RP0        ; Select Bank1
  
;**********************************************************************
;*              Init port E                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1

                CLRF    PORTE              ; Initialize PORTE by clearing output
                                           ; data latches
                BCF     PIR1, TMR1IF       ; DELETE TIMER1 INT FLAG

                BSF     STATUS, RP0        ; Select Bank1
                MOVLW   b'00010111'        ; Parallel Slave Port active
                MOVWF   TRISE              ; PORTE<2:0> = inputs, flags=0
                BCF     PIE1, TMR1IE       ; DISABLE TIMER1 INT
                BCF     PIE1, PSPIF        ; DISABLE PSP INTERRUPT
                BCF     INTCON, T0IE       ; DISABLE T0 INTERRUPT

;**********************************************************************
;*              A/D conversions FOR MEASURES                          *
;**********************************************************************

                CALL    BEEP               ; SOUND ON
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0
                CLRF    COUNTER            ; RESET COUNTER
                MOVLW   0X0A
                MOVWF   COUNTER2           ; INIT VALUE TO CNTR2
ANINIT
                CALL    ADCONVERT          ; COLLECTS ALL ANALOG VALUE
                DECFSZ  COUNTER, 1
                GOTO    ANINIT
                DECFSZ  COUNTER2, 1        ; WAIT FOR COLLECT ALL ANALOG DATA
                GOTO    ANINIT

;**********************************************************************
;*              EEPROM SHADOW INTO FILE  BANK1 A0                     *
;**********************************************************************

                MOVLW   SHADOWSTART        ; START FILE ADDRESS
                MOVWF   FSR                ; ACTIVATE POINTER

                CLRF    COUNTER            ; RESET COUNTER
                BCF     STATUS, IRP        ;
SHADOW
                MOVF    COUNTER, 0         ; LOAD EE ADDRESS
                CALL    EEDATREAD          ; READ EEPROM
                BSF     STATUS, RP0        ; Bank1
                MOVWF   INDF               ; SAVE INTO FILE
                INCF    FSR, 1             ; NEXT FILE
                BCF     STATUS, RP0        ; Bank0
                INCF    COUNTER, 1         ; COUNTER +1

                MOVLW   0X5A               ; MAX FIELD
                SUBWF   COUNTER, 0         ; END?
                BTFSS   STATUS, Z
                GOTO    SHADOW             ; NO, NEXT

;**********************************************************************
;*              EEPROM SHADOW OF RPM MIN AFTER START                  *
;**********************************************************************
                
                MOVF    COUNTER, 0         ; EE ADDRESS OF RPMIN
                CALL    EEDATREAD          ; READ EEPROM
                BCF     STATUS, RP0        ; BANK 0
                MOVWF   RPMIN              ; COLLECT RPMIN SHADOW VALUE

;**********************************************************************
;*              INMOBILISER                                           *
;**********************************************************************

                BCF     STATUS, RP0        ; Bank0
                BCF     STATUS, RP1
		CLRF    RPM_OK             ; RPM=0

SAFETEST
                MOVF    PORTB, 0           ; READ PORTB
                ANDLW   B'00001111'        ; MASK FOR SAFETY CODE ONLY

                XORLW   SAFETY             ; COMPARE CODE
                BTFSS   STATUS, Z          ; CODE OK?
                GOTO    SAFETEST           ; NOT START THE PROGRAM
                                           ; YES, GO
                ;
                ; IF INMOBILISER IS ACTIVE, BEEP IS APPLYED !!!
                ;

;**********************************************************************
;*              INTERRUPT ENABLE                                      *
;**********************************************************************

                BCF     INTCON, RBIF       ; CLEAR PORTB CHANGE
                BSF     INTCON, RBIE       ; ENABLE PORTB INT
                BCF     INTCON, T0IE       ; DISABLE T0 INTERRUPT
                BCF     INTCON, PEIE       ; DISABLE PERIPHERAL INTS
                BCF     INTCON, INTE       ; DISABLE INTERRUPT
                BSF     INTCON, GIE        ; ENABLE ALL INTERRUPTS

                CALL    NOBEEP             ; SOUND OFF
                BSF     PORTC, RELAY       ; STARTER ENABLE




;**********************************************************************
;*                                                                    *
;*                                                                    *
;*              MAIN SOFTWARE CYCLE                                   *
;*                                                                    *
;*              Purpose: ENDLESS LOOP FOR GUI PROCESSING              *
;*                                                                    *
;*                                                                    *
;**********************************************************************





SWCYCLE
;**********************************************************************
;*              STARTER MOTOR CURRENT CONTROL                         *
;**********************************************************************

                CALL    STARTERCTRL        ; STARTER CONTROL

;**********************************************************************
;*              A/D conversions FOR MEASURES                          *
;**********************************************************************

                CALL    ADCONVERT          ; COLLECTS NEXT ANALOG VALUE

;**********************************************************************
;*              A/D conversions FOR MEASURES                          *
;**********************************************************************

                CALL    WATINJECT          ; DRIVE THE WATER INJECTOR

;**********************************************************************
;*              PARALLEL PORT POLL                                    *
;**********************************************************************

                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

                BTFSS   TRISE, IBF         ; DATA ARRIVED?
                GOTO    NODATA             ; ALL IDLE
                BTFSC   TRISE, IBOV        ; DATA CONGESTION?
                GOTO    RECERR             ; SEND AGAIN

;**********************************************************************
;*              DATA RECEIVER                                         *
;**********************************************************************

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVLW   1                  ; INIT CHECKSUM
                ADDWF   DATA_CHKSM, 1      ; AVOID ALL 0 ERROR

                MOVF    PORTD, 0           ; READ GAMEBOY INTERFACE PORTD
                MOVWF   DATA_COMMAND       ; STORE DATA DATA
                ADDWF   DATA_CHKSM, 1      ; CHEKSUM GENERATION
                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

NEXTDAT
                BTFSS   TRISE, IBF         ; NEXT DATA?
                GOTO    NEXTDAT            ; LOOP

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVF    PORTD, 0           ; READ GAMEBOY INTERFACE PORTD
                MOVWF   DATA_ADDR          ; STORE DATA ADDRESS
                ADDWF   DATA_CHKSM, 1      ; CHEKSUM GENERATION
                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

NEXTDAT1
                BTFSS   TRISE, IBF         ; NEXT DATA?
                GOTO    NEXTDAT1           ; LOOP

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVF    PORTD, 0           ; READ GAMEBOY INTERFACE PORTD
                MOVWF   DATA_DATA          ; STORE DATA DATA
                ADDWF   DATA_CHKSM, 1      ; CHEKSUM GENERATION
                BCF     STATUS, RP1        ;
                BSF     STATUS, RP0        ; Bank1

NEXTDAT2
                BTFSS   TRISE, IBF         ; NEXT DATA?
                GOTO    NEXTDAT2           ; LOOP

                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

                MOVF    PORTD, 0           ; READ GAMEBOY INTERFACE PORTD
                XORWF   DATA_CHKSM, 0      ; CHEKSUM OK?

                BTFSC   STATUS, Z          ; IF Z THEN OK
                GOTO    DATOK              ; RIGHT DATA RECEIVED

;**********************************************************************
;*              DATA RECEIVED WITH ERROR                              *
;**********************************************************************
RECERR
                BCF     STATUS, RP1        ;
                BCF     STATUS, RP0        ; Bank0

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

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

⌨️ 快捷键说明

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