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