📄 spi.asm
字号:
;////////////////////////////////////////////////
;COMMUNICATION
;////////////////////////////////////////////////
COMMUNICATE CLRWDT
; MOVLW RX1
; MOVWF FSR
;CLR_RX_BUF
; INCF FSR,F
; CLRF INDF
; MOVLW RX31
; SUBWF FSR,W
; BTFSS STATUS,C
; GOTO CLR_RX_BUF
CLRF DSR_FB
BSF STATUS,RP0 ;TO BANK1
MOVLW SPI_PORT_O
ANDWF TRISC,F ;SET SCK,SDO,/DTR IS OUTPUT PIN
; BSF TRISC,2
BCF STATUS,RP0 ;TO BANK0
; CALL E_SPI_PORT
BCF DTR ;/DTR ACTIVE LOW
CLRF CCPR1H
MOVLW TAC ;ACCESS TIME=16us
CALL E_CCP1
MOVLW CAPTURE_MODE
MOVWF CCP1CON ;CAPTURE MODE
COM_1 BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVLW PROTOCOL_ID ;SEND 0x01
MOVWF SSPBUF ;MOVE W REGISTER TO SPI BUFFER
BCF PIR1,SSPIF
BCF PIR1,CCP1IF
COM_11 CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_2
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF COMMAND1,W ;SEND COMMAND1
MOVWF SSPBUF
BCF PIR1,SSPIF
BCF PIR1,CCP1IF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
;CHECK DSR OVER TIME?
CALL CHK_DSR
MOVF SSPBUF,W
MOVWF TERMINAL_ID
COM_21 BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_3
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF COMMAND2,W ;SEND COMMAND2
MOVWF SSPBUF
BCF PIR1,SSPIF
BCF PIR1,CCP1IF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
;CHECK DSR OVER TIME?
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
MOVF SSPBUF,W
MOVWF ACK
COM_31 BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_4
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX0,W
MOVWF SSPBUF
CALL DATA_TYPE
MOVF ACK,W
XORLW C_ACK
BTFSC STATUS,Z ;CHECK ACKNOWLEDGE = 5A
GOTO COM_41
BSF UNINITIAL_FB
COM_41
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
MOVF SSPBUF,W ;MOVE SPI BUFFER TO W REGISTER
MOVWF RX0 ;MOVE RECEIVE DATA TO RX0 BUFFER
BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_5
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX1,W
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
MOVF SSPBUF,W ;MOVE SPI BUFFER TO W REGISTER
MOVWF RX1
;--------------------------------------------------------------------
DECFSZ DATA_SIZE,F
GOTO COM_51
GOTO EXIT_SPI
;--------------------------------------------------------------------
COM_51 CALL CHK_DSR
BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_6
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX2,W
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
MOVF SSPBUF,W
MOVWF RX2 ;MOVE RX VALUE TO RX2 BUFFER
COM_61 BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_7
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX3,W
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
MOVF SSPBUF,W
MOVWF RX3 ;MOVE RY VALUE TO RX3 BUFFER
;--------------------------------------------------------------------
DECFSZ DATA_SIZE,F
GOTO COM_71
GOTO EXIT_SPI
;--------------------------------------------------------------------
COM_71 CALL CHK_DSR
BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_8
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX4,W
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
MOVF SSPBUF,W
MOVWF RX4 ;MOVE LX VALUE TO RX4 BUFFER
COM_81 BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_9
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVF TX5,W
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
MOVF SSPBUF,W
MOVWF RX5 ;MOVE LY VALUE TO RX5 BUFFER
;--------------------------------------------------------------------
DECFSZ DATA_SIZE,F
GOTO COM_A
GOTO EXIT_SPI
;--------------------------------------------------------------------
COM_A CALL CHK_DSR
BTFSC DSR_TIMOUT_FB ;CHECK DSR TIME OUT ?
GOTO EXIT_SPI
MOVLW RX5
MOVWF FSR
COM_A1 INCF FSR,F
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVLW 0x00
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
CALL CHK_DSR
MOVF SSPBUF,W
MOVWF INDF
COM_A2 BTFSC DSR_TIMOUT_FB
GOTO EXIT_SPI
COM_B INCF FSR,F
BSF SSPCON,SSPEN ;ENABLE SPI MODE
MOVLW 0x00
MOVWF SSPBUF
BCF PIR1,CCP1IF
BCF PIR1,SSPIF
CALL CHK_R_CPLE
BCF SSPCON,SSPEN ;DISABLE SPI MODE
MOVF SSPBUF,W
MOVWF INDF
DECFSZ DATA_SIZE,F
GOTO COM_B1
GOTO EXIT_SPI
COM_B1 CALL CHK_DSR
BTFSS DSR_TIMOUT_FB
GOTO COM_A1
;--------------------------------------------------------------------
EXIT_SPI BCF SSPCON,SSPEN ;DISABLE SPI MODE
CLRF CCP1CON ;CAPTURE/COMPARE/PWM OFF
MOVLW TAC
CALL E_CCP1
BSF DTR ;COMMUNICATE COMPLETE
BSF STATUS,RP0 ;TO BANK1
MOVLW SPI_PORT_I
IORWF TRISC,F ;SET SCK,SDO,/DTR IS INPUT PIN
BCF STATUS,RP0 ;TO BANK0
; CALL D_SPI_PORT
BTFSC DSR_TIMOUT_FB ;CHECK DSR TIME OUT?
; CALL DTR_INT_TIME ;YES
EXIT_SPI1 RETURN
;--------------------------------------------------------------------
CHK_R_CPLE BTFSS PIR1,SSPIF ;TRANSMIT & RECEIVE TO COMPLETE?
GOTO CHK_R_CPLE ;NOT COMPLETE
RETURN
;--------------------------------------------------------------------
;ENABLE SPI PORT
;E_SPI_PORT BSF STATUS,RP0 ;TO BANK1
; MOVLW SPI_PORT_O
; ANDWF TRISC,F ;SET SCK,SDO,/DTR IS OUTPUT PIN
; BSF TRISC,2
; BCF STATUS,RP0 ;TO BANK0
; RETURN
;--------------------------------------------------------------------
;DISABLE SPI PORT
;D_SPI_PORT BSF STATUS,RP0 ;TO BANK1
; MOVLW SPI_PORT_I
; IORWF TRISC,F ;SET SCK,SDO,/DTR IS INPUT PIN
; BCF STATUS,RP0 ;TO BANK0
; RETURN
;--------------------------------------------------------------------
CHK_DSR MOVLW TWDS
MOVWF TEMP_BUFFER
CHK_DSR1 BTFSC PIR1,CCP1IF ;/DSR ACTIVE LOW ?
GOTO EXIT_CHK_DSR ;YES
DECFSZ TEMP_BUFFER,F ;/DSR TIME OUT ?
GOTO CHK_DSR1 ;NO
BSF DSR_TIMOUT_FB ;YES
EXIT_CHK_DSR
RETURN
;--------------------------------------------------------------------
DTR_INT_TIME MOVLW TDTR_H ;/DTR INTERVAL TIME
MOVWF CCPR1H
MOVLW TDTR_L
CALL E_CCP1
RETURN
;--------------------------------------------------------------------
DATA_TYPE MOVF TERMINAL_ID,W
ANDLW 0xF0
CALL CONVERT
MOVWF DATA_SIZE ;***FISHING CONTROLLER***
MOVWF DATA_SIZE1
EXIT_DATA_TYPE RETURN
;--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -