📄 电机.asm
字号:
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 + -