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