📄 fangqu_v3.asm
字号:
MOVWF SEND_CHECKSUM ;CHECKSUM
SEND_FRAMEHEAD2:
BSF FLAG,FRAME_HEAD
MOVLW 0xAA
MOVWF SENDBUF
CALL SEND
BCF FLAG,FRAME_HEAD
MOVLW 0x05
MOVWF TEMP_LENGTH
MOVLW 0x51
MOVWF FSR
SEND_LOOP2:
NOP
NOP
NOP
MOVF INDF,0
MOVWF SENDBUF
CALL SEND
INCF FSR,1
BCF FLAG,FRAME_HEAD
;NOP
;CALL DELAY2
DECFSZ TEMP_LENGTH,1
GOTO SEND_LOOP2
MOVLW 0x28
MOVWF TEMP_LENGTH
MOVLW 0xA6
MOVWF FSR
SEND_LOOP3:
MOVF INDF,0
MOVWF SENDBUF
CALL SEND
INCF FSR,1
NOP
BCF FLAG,FRAME_HEAD
NOP
NOP
;CALL DELAY2
DECFSZ TEMP_LENGTH,1
GOTO SEND_LOOP3
NOP
MOVF SEND_CHECKSUM,0
MOVWF SENDBUF
CALL SEND
NOP
NOP
NOP
BCF FLAG,FRAME_HEAD
;CALL DELAY2
NOP
NOP
NOP
NOP
MOVF SEND_ENDCHAR,0
MOVWF SENDBUF
CALL SEND
NOP
NOP
MSG_ENC2:
BTFSS FLAG,MSG_LONG
GOTO MSG_ENC_NEXT1
MOVLW 0x2C
SUBWF RECE_LENGTH,0
MOVWF SEND_LENGTH
MOVWF TEMP_LENGTH
MOVWF CHECKSUM
MOVLW 0x03
MOVWF PACKET_NUM
MOVLW 0x10
XORWF CHECKSUM,1
MOVLW 0xCE
MOVWF TEMPADDR2
GOTO MSG_ENC_NEXT2
MSG_ENC_NEXT1:
MOVLW 0x04
SUBWF RECE_LENGTH,0
MOVWF SEND_LENGTH
MOVWF TEMP_LENGTH
MOVWF CHECKSUM
MOVLW 0x02
MOVWF PACKET_NUM
MOVLW 0x10
MOVWF SEND_COMD
XORWF CHECKSUM,1
MOVLW 0xA6
MOVWF TEMPADDR2
;BANK1->BANK0(Address:0x56-0x7D),and checksum
MSG_ENC_NEXT2:
MOVLW 0x56
MOVWF TEMPADDR1
MSG_SHIFT1:
MOVF TEMPADDR2,0
MOVWF FSR
MOVF INDF,0
MOVWF TEMP
MOVF TEMPADDR1,0
MOVWF FSR
MOVF TEMP,0
MOVWF INDF ;BANK1->BANK0
XORWF CHECKSUM,1
INCF TEMPADDR2,1
INCF TEMPADDR1,1
DECFSZ TEMP_LENGTH,1
GOTO MSG_SHIFT1
MOVF CHECKSUM,0
MOVWF SEND_CHECKSUM ;CHECKSUM
SEND_FRAMEHEAD3:
BSF FLAG,FRAME_HEAD
MOVLW 0xAA
MOVWF SENDBUF
CALL SEND
NOP
NOP
BCF FLAG,FRAME_HEAD
NOP
SEND_MSG2:
MOVLW 0x2F
MOVWF TEMP_LENGTH
MOVLW 0x51
MOVWF FSR
SEND_LOOP4:
MOVF INDF,0
MOVWF SENDBUF
CALL SEND
INCF FSR,1
BCF FLAG,FRAME_HEAD
;NOP
;CALL DELAY2
DECFSZ TEMP_LENGTH,1
GOTO SEND_LOOP4
SENDSYN_END:
NOP
NOP
CLRF FLAG
CLRF RECE_LENGTH
NOP
NOP
BSF STATUS,RP0 ;Bank1
BSF PIE1,RCIE ;Enable receive interrupts
BCF STATUS,RP0 ;Bank0
BSF RCSTA,CREN ;Enable UART receive
NOP
NOP
RETURN
SEND:
;BSF PORTB,4 ;RFS0 = 1
BSF PORTB,5 ;RFCLK0 = 1
BTFSC FLAG,FRAME_HEAD
BSF PORTB,4 ;RFS0 = 1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF PORTB,5 ;RFCLK0 = 0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVLW 0x08
MOVWF SENDBIT
BCF STATUS,C
NOP
BCF PORTB,4 ;RFS0 = 0
SEND11:
BSF PORTB,5 ;RFCLK0 = 1
RLF SENDBUF,1
BTFSC STATUS,C
BSF PORTB,2
BTFSS STATUS,C
BCF PORTB,2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF PORTB,5 ;RFCLK0 = 0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ SENDBIT,1
GOTO SEND11
NOP
BSF PORTB,5 ;RFCLK0 = 1
BCF PORTB,2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF PORTB,5 ;RFCLK0 = 0
RETURN
;**************************************
ADC:
BSF STATUS,RP0 ;BANK1
MOVLW 0
MOVWF ADCON1
MOVLW 0FF
MOVWF TRISA
BCF STATUS,RP0 ;BANK0
MOVLW 0A1
MOVWF ADCON0
CALL DELAY
BSF ADCON0,GO
CALL DELAY
RETURN
;**************Delay Function****************
DELAY:
MOVLW 0X88
MOVWF WAIT2
LOOP0:
DECFSZ WAIT1,1
GOTO LOOP0
MOVLW 0X88
MOVWF WAIT1
DECFSZ WAIT2,1
GOTO LOOP0
RETURN
DELAY1:
MOVLW 0x05
MOVWF WAIT4
MOVLW 0x64
MOVWF WAIT3
LOOP1:
DECFSZ WAIT3,1
GOTO LOOP1
MOVLW 0x64
MOVWF WAIT3
DECFSZ WAIT4,1
GOTO LOOP1
RETURN
DELAY2:
MOVLW 0xC8
MOVWF WAIT6
MOVLW 0xC8
MOVWF WAIT5
LOOP2:
DECFSZ WAIT5,1
GOTO LOOP2
MOVLW 0xC8
MOVWF WAIT5
DECFSZ WAIT6,1
GOTO LOOP2
RETURN
;----- Interrupt Server Function-------------------------------------
INT_SER:
PUSH_MACRO
BCF STATUS,RP0 ;Bank0
BTFSC PIR1,RCIF ;Receive interrupt
GOTO RX_INT
NOP
NOP
GOTO END_ISR
;-----Receive Interrupt Process-------------------
RX_INT:
MOVF RCREG,0
MOVF RCREG,0
BCF RCSTA,CREN
BSF RCSTA,CREN
MOVWF TEMP
BTFSC FLAG,RXD_START
GOTO RECE_START_PROC
JUDGE_HEAD:
NOP
NOP
BCF STATUS,Z
SUBLW 0xAA
BTFSS STATUS,Z
GOTO JUDGE_HEAD1 ;Not equal to 0xAA
;----- Equal to 0xAA
MOVLW 0x01
MOVWF RECE_BYTE
GOTO END_ISR
JUDGE_HEAD1:
MOVLW 0x01
BCF STATUS,Z
SUBWF RECE_BYTE
BTFSS STATUS,Z
GOTO JUDGE_HEAD2 ;RECE_BYTE is not equal to 1
;RECE_BYTE is equal to 1
MOVF TEMP,0
BCF STATUS,Z
SUBLW 0x55
BTFSS STATUS,Z
GOTO JUDGE_HEAD2 ; Received data is not equal to 0x55
; Received data is equal to 0x55
BSF FLAG,RXD_START ;Set RXD_START flag
BCF FLAG,LEN_OK
MOVLW 0x02
MOVWF RECE_BYTE ;RECE_BYTE = 0x02
MOVLW 0xA2 ;RECE_LENGTH address
MOVWF FSR
CLRF CHECKSUM
GOTO END_ISR
JUDGE_HEAD2:
CLRF RECE_BYTE
GOTO END_ISR
RECE_START_PROC:
MOVWF INDF
JUDGE_LENGTH:
BTFSC FLAG,LEN_OK
GOTO LENGTH_OK
;Judge length
SUBLW 0x40 ;Max value of RECE_LENGTH is 0x40(64)
BTFSS STATUS,C
GOTO LENGTH_ERR
BSF FLAG,LEN_OK
MOVF TEMP,0
MOVWF RECE_LENGTH
MOVLW 0x02
ADDWF RECE_LENGTH,0
MOVWF RECE_LENGTH1
MOVLW 0x03
ADDWF RECE_LENGTH,0
MOVWF RECE_LENGTH2
LENGTH_OK:
INCF FSR
INCF RECE_BYTE,1
SSOS1:
MOVF RECE_LENGTH1,0
SUBWF RECE_BYTE,0
BTFSS STATUS,C
GOTO SSOS2 ;(RECE_BYTE)<(RECE_LENGTH1), c = 0 ,z = 0, checksum
BTFSS STATUS,Z ;(RECE_BYTE)=(RECE_LENGTH1), c = 1, z = 1,checksum
GOTO SSOS3 ;(RECE_BYTE)>(RECE_LENGTH1), c = 1, z = 0,not checksum
SSOS2:
MOVF TEMP,0
XORWF CHECKSUM,1 ;Checksum
GOTO END_ISR
SSOS3:
MOVF RECE_LENGTH2,0
SUBWF RECE_BYTE,0
BTFSS STATUS,Z
GOTO END_STA_PROC
MOVF TEMP,0
MOVWF REC_CRC
GOTO END_ISR
END_STA_PROC:
BCF FLAG,RXD_START
BCF FLAG,LEN_OK
CLRF RECE_BYTE
RECE_OVER_PROC:
;Judge checksum
MOVF CHECKSUM,0
SUBWF REC_CRC,0
BTFSS STATUS,Z
GOTO RECE_ERROR
MOVLW 0x10
SUBWF RECE_COMD,0
BTFSS STATUS,Z
GOTO RECE_ERROR
MOVLW 0x06
MOVWF ACK_DISPLAY
BSF FLAG,MSG_SEND ;MSG_SEND = 1,to send messages to dsp
GOTO SEND_ACK
RECE_ERROR:
MOVLW 0x16
MOVWF ACK_DISPLAY
BCF FLAG,MSG_SEND ;MSG_SEND = 0,not to send messages to dsp
;-----Send ACK
SEND_ACK:
BSF PORTC,5 ;Enable send
CALL DELAY1
NOP
NOP
MOVLW 0xAA
MOVWF TXREG
NOP
NOP
BSF STATUS,RP0 ;Bank1
NEXT1:
BTFSS TXSTA,TRMT
GOTO NEXT1
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0x55
MOVWF TXREG
NOP
NOP
BSF STATUS,RP0 ;Bank1
NEXT2:
BTFSS TXSTA,TRMT
GOTO NEXT2
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0x06
MOVWF TXREG
MOVWF CHECKSUM
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT3:
BTFSS TXSTA,TRMT
GOTO NEXT3
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0xA1
MOVWF FSR
MOVF INDF,0
MOVWF TXREG
XORWF CHECKSUM,1 ;Checksum
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT4:
BTFSS TXSTA,TRMT
GOTO NEXT4
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0xA2
MOVWF FSR
MOVF INDF,0
MOVWF TXREG
XORWF CHECKSUM,1 ;Checksum
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT5:
BTFSS TXSTA,TRMT
GOTO NEXT5
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0x20
MOVWF TXREG
XORWF CHECKSUM,1 ;Checksum
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT6:
BTFSS TXSTA,TRMT
GOTO NEXT6
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0x10
MOVWF TXREG
XORWF CHECKSUM,1 ;Checksum
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT7:
BTFSS TXSTA,TRMT
GOTO NEXT7
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVF ACK_DISPLAY,0
MOVWF TXREG
XORWF CHECKSUM,1 ;Checksum
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT8:
BTFSS TXSTA,TRMT
GOTO NEXT8
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVF CHECKSUM,0
MOVWF TXREG
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT9:
BTFSS TXSTA,TRMT
GOTO NEXT9
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
MOVLW 0xED
MOVWF TXREG
NOP
NOP
BSF STATUS,RP0 ;Bank 1
NEXT10:
BTFSS TXSTA,TRMT
GOTO NEXT10
NOP
NOP
BCF STATUS,RP0 ;Bank 0
CALL DELAY1
BCF PORTC,5 ;Disable send
GOTO END_ISR
LENGTH_ERR:
BCF FLAG,MSG_SEND
BCF FLAG,RXD_START
BCF FLAG,LEN_OK
CLRF RECE_BYTE
END_ISR:
POP_MACRO
RETFIE
;***************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -