📄 transmit_a.asm
字号:
BCF STATUS,C
RLF RF_SEND,1
BTFSC STATUS,C
GOTO SEND_HIGH
CALL TRAN_0BIT
GOTO NEXT_BIT
SEND_HIGH:
INCF PARIT_CODE,1
CALL TRAN_1BIT
NEXT_BIT:
DECFSZ RF_TRAN_COUNT,1
GOTO COUNTINUE_SEND
END_TRAN_1BYTE:
RETURN
;*-------------RF SEND ALL OF DATA TO AIR SUBROUTINE---------*
RF_DATA_SEND:
BCF STATUS,RP0 ;bank0
BCF INTCON,GIE ;all interruption disable
BCF INTCON,PEIE ;all external interruption disable
CALL START_CODE ;send start code to air
MOVF PREAM_CODE_H,W ;send pream high code to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF PREAM_CODE_L,W ;send pream low code to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF PRESS_COMPEN,W ;send pressure data to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF TEMP_COMPEN,W ;send temperature to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF ID_CODE_H,W ;send ID code high to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF ID_CODE_MID,W ;send ID code middle to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF ID_CODE_L,W ;send ID code low to air
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF PARIT_CODE,W ;send parity code to air
MOVWF RF_SEND
CALL PARITY_SEND
RETURN
RF_LEARN_SEND:
BCF STATUS,RP0 ;bank0
BCF INTCON,GIE ;all interruption disable
BCF INTCON,PEIE ;all external interruption disable
MOVLW 0X00
MOVWF PARITY_CODE ;Clear parity_code register
CALL START_CODE ;send start code
MOVLW 0X00
MOVWF RF_SEND
CALL TRAN_1BYTE ;send learning pream code
MOVLW 0X01
MOVWF RF_SEND
CALL TRAN_1BYTE ;send learning pream code
MOVF PRESS_COMPEN,W
MOVWF RF_SEND
CALL TRAN_1BYTE ;send pressure data code
MOVF TEMP_COMPEN,W
MOVWF RF_SEND
CALL TRAN_1BYTE ;send temperature data
MOVF ID_CODE_H,W
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF ID_CODE_MID,W
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF ID_CODE_L,W
MOVWF RF_SEND
CALL TRAN_1BYTE
MOVF SQUENCE_CODE,W
MOVWF RF_SEND
CALL TRAN_1BYTE ;send squence code
MOVF PARIT_CODE,W
MOVWF RF_SEND
CALL PARITY_SEND
RETURN
;*------------SEND PARITY CODE SUBROUTINE--------------------*
PARITY_SEND:
BCF STATUS,RP0 ;bank0
BCF INTCON,GIE ;all interruption disable
BCF INTCON,PEIE ;all external interruption disable
MOVLW 0X08
MOVWF RF_TRAN_COUNT
COUNTINUE_SEND1:
BCF STATUS,C
RLF RF_SEND,1
BTFSC STATUS,C
GOTO SEND_HIGH
CALL TRAN_0BIT
GOTO NEXT_BIT
SEND_HIGH1:
CALL TRAN_1BIT
NEXT_BIT1:
DECFSZ RF_TRAN_COUNT,1
; GOTO END_TRAN_1BYTE1
GOTO COUNTINUE_SEND1
END_TRAN_1BYTE1:
BCF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,PEIE
RETURN
;*-----------DELAY 256US SUBROUTINE-------------*
DELAY_256US:
CLRWDT
MOVLW 0X32 ;1 CYCLE
MOVWF DEL_COUNT ;1 CYCLE
DELAY256:
NOP ;1 CYCLE
DECFSZ DEL_COUNT,1 ;2 CYCLES
GOTO DELAY256 ;2 CYCLES
RETURN ;2 CYCLES
;*----------DELAY 768US SUBROUTINE--------------*
DELAY_768US:
CLRWDT
MOVLW 0X7D ;1 CYCLE
MOVWF DEL_COUNT ;1 CYCLE
DELAY768:
NOP ;1 CYCLE
DECFSZ DEL_COUNT,1 ;2 CYCLES
GOTO DELAY768 ;2 CYCLES
RETURN ;2 CYCLES
;*----------START CODE SUBROUTINE--------------*
START_CODE:
BSF PORTA,1
CALL DELAY_768US
BCF PORTA,1
CALL DELAY_256US
RETURN
;*-----------RESET SP12 SUBROUTINE--------------*
RESET_SP12:
BSF PORTA,SP12_VDD
ASLEEP:
SLEEP ;wait for sp12 reset pluse
NOP
NOP
BTFSS FLAG,FLG_INTF
GOTO ASLEEP
BCF FLAG,FLG_INTF ;clear external interrupt flag
RETURN
;*-----------SPI INTERFACE SUBROUTINE-----------*
SP12_1COMMAND:
MOVLW 0X08
MOVWF SP12_COMM_COUN
BCF PORTC,SP12_CLK ;SPI PORT initial
BSF PORTC,SP12_NCS ;SPI port initial
BCF PORTC,SP12_SDO ;SPI port initial
BCF PORTC,SP12_SDI ;SPI port initial
BCF PORTC,SP12_NCS ;SP12 ENABLE
SEND_COMM1:
BSF PORTC,SP12_CLK ;clock signal pluse
BCF STATUS,C
RRF SP12_COMM,1
BTFSS STATUS,C
GOTO COMMAND_LOW1
BSF PORTC,SP12_SDI
GOTO NEXT_BIT_COMM1
COMMAND_LOW1:
BCF PORTC,SP12_SDI
NOP
NEXT_BIT_COMM1:
BCF PORTC,SP12_CLK
DECFSZ SP12_COMM_COUN,1
GOTO SEND_COMM1
BSF PORTC,SP12_NCS
RETURN
;*-----------SEND COMMAND TO SP12 TWICE--------------------*
SP12_2COMMAND:
MOVLW 0X08
MOVWF SP12_COMM_COUN
BCF PORTC,SP12_CLK ;SPI PORT initial
BSF PORTC,SP12_NCS ;SPI port initial
BCF PORTC,SP12_SDO ;SPI port initial
BCF PORTC,SP12_SDI ;SPI port initial
BCF PORTC,SP12_NCS ;SP12 ENABLE
SEND_COMM2:
BSF PORTC,SP12_CLK ;clock signal pluse
BTFSC PORTC,SP12_SDO
GOTO SP12_COMMEND ;FSI error if return high level FSI correct if return low level
NOP
BTFSS PORTC,SP12_SDO
GOTO OUT_IS_0
INCF SP12_DATA_OUT1,1 ;read data is high level
RLF SP12_DATA_OUT1,1 ;left shift 1bit
GOTO NEXT
OUT_IS_0:
RLF SP12_DATA_OUT1,1
NEXT:
BCF STATUS,C
RRF SP12_COMM,1
BTFSS STATUS,C
GOTO COMMAND_LOW2
BSF PORTC,SP12_SDI
GOTO NEXT_BIT_COMM1
COMMAND_LOW2:
BCF PORTC,SP12_SDI
NOP
NEXT_BIT_COMM2:
BCF PORTC,SP12_CLK
DECFSZ SP12_COMM_COUN,1
GOTO SEND_COMM2
BSF PORTC,SP12_NCS
SP12_COMMEND:
RETURN
;*------------SP12 NEED DELAY--------------------*
SP12_DELAY: ;for temperature and pressure accelerate measure delay
SLEEP
BTFSC FLAG,FLG_TIM1
GOTO SP12_DELAY
BCF FLAG,FLG_TIM1
RETURN
;*-----------get remain data and crc data subroutine------*
REMAIN_DATA:
BCF STATUS,C
BSF STATUS,RP0
MOVWF EE_DATA ;GET VALUE
MOVLW 0X00
MOVWF EE_CRC_DATA ;CRC CODE REGISTER CLEARED
MOVWF EE_REMAIN_DATA ;REMAIN CODE REGISTER CLEARED
RRF EE_DATA,1
BTFSC STATUS,C
GOTO REMAIN_ADD1
RLF EE_CRC_DATA,1
CONTINUE_REMAIN:
RRF EE_DATA,1
BTFSC STATUS,C
GOTO REMAIN_2ADD1
MOVF EE_DATA,0
MOVWF EE_REMAIN_DATA
RETURN
REMAIN_ADD1:
BCF STATUS,C
INCF EE_CRC_DATA,1
RLF EE_CRC_DATA,1
GOTO CONTINUE_REMAIN
REMAIN_2ADD1:
INCF EE_CRC_DATA,1
MOVF EE_DATA,0
MOVWF EE_REMAIN_DATA
RETURN
;*--------------EEPROM WRITE SUBROUTINE----------*
EE_WRITEBYTE:
BSF STATUS,RP0 ;BANK0
MOVLW 0X03
MOVWF EE_COUNT
MOVF WR_DATA,0 ;GET DATA WRITE TO EEPROM
EE_WRITE:
;bsf STATUS,RP0 ;Bank 1
MOVWF EEDAT ;EEDATA not changed
bsf EECON1,WREN ;Enable write
bcf INTCON,GIE ;Disable INTs
movlw 55h ;Unlock write
movwf EECON2 ;
movlw 0AAh ;
movwf EECON2 ;
bsf EECON1,WR ;Start the write
bsf INTCON,GIE ;Enable INTS
WAIT_EEWRITE:
BTFSC EECON1,WR
GOTO WAIT_EEWRITE
bsf EECON1,RD ;YES, Read the
BCF EECON1,WREN ;WRITE DISABLE
MOVF EEDATA,0
;BCF STATUS,RP0 ;BANK0
xorwf WR_DATA,W
btfss STATUS,Z ;Is data the same
GOTO COUNTINUE_WRITE
EEWRITE_END:
BCF STATUS,RP0
RETURN
COUNTINUE_WRITE:
DECFSZ EE_COUNT,1
GOTO EEWRITE_END
GOTO EE_WRITE
WIRTE_IDHIGH:
BCF STATUS,RP0 ;BANK0
MOVF ID_CODE_H,0
BSF STATUS,RP0
MOVWF WR_DATA
CALL REMAIN_DATA ;GET REMAIN DATA AND CRC DATA
BSF STATUS,RP0
MOVLW 0X11
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X41
MOVWF EEADR
CALL EE_WRITEBYTE
MOVF EE_REMAIN_DATA,0
BSF STATUS,RP0
MOVLW 0X12
MOVWF EEADR
MOVF EE_REMAIN_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X42
MOVWF EEADR
CALL EE_WRITEBYTE
MOVF EE_CRC_DATA,0
BSF STATUS,RP0
MOVLW 0X13
MOVWF EEADR
MOVF EE_CRC_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X43
MOVWF EEADR
CALL EE_WRITEBYTE
BCF STATUS,RP0
RETURN
WIRTE_IDMIDDLE:
BCF STATUS,RP0 ;BANK0
MOVF ID_CODE_MID,0
BSF STATUS,RP0
MOVWF WR_DATA
CALL REMAIN_DATA ;GET REMAIN DATA AND CRC DATA
BSF STATUS,RP0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -