📄 rf_cc1000.asm
字号:
;**********************************************
; CONSTANT DEFINE
CC1000_MAIN EQU 0X00
CC1000_FREQ_2A EQU 0X01
CC1000_FREQ_1A EQU 0X02
CC1000_FREQ_0A EQU 0X03
CC1000_FREQ_2B EQU 0X04
CC1000_FREQ_1B EQU 0X05
CC1000_FREQ_0B EQU 0X06
CC1000_FSEP1 EQU 0X07
CC1000_FSEP0 EQU 0X08
CC1000_CURRENT EQU 0X09
CC1000_FRONT_END EQU 0X0A
CC1000_PA_POW EQU 0X0B
CC1000_PLL EQU 0X0C
CC1000_LOCK EQU 0X0D
CC1000_CAL EQU 0X0E
CC1000_MODEM2 EQU 0X0F
CC1000_MODEM1 EQU 0X10
CC1000_MODEM0 EQU 0X11
CC1000_MATCH EQU 0X12
CC1000_FSCTRL EQU 0X13
CC1000_FSHAPE7 EQU 0X14
CC1000_FSHAPE6 EQU 0X15
CC1000_FSHAPE5 EQU 0X16
CC1000_FSHAPE4 EQU 0X17
CC1000_FSHAPE3 EQU 0X18
CC1000_FSHAPE2 EQU 0X19
CC1000_FSHAPE1 EQU 0X1A
CC1000_FSDELAY EQU 0X1B
CC1000_PRESCALER EQU 0X1C
CC1000_TEST6 EQU 0X40
CC1000_TEST5 EQU 0X41
CC1000_TEST4 EQU 0X42
CC1000_TEST3 EQU 0X43
CC1000_TEST2 EQU 0X44
CC1000_TEST1 EQU 0X45
CC1000_TEST0 EQU 0X46
LOCK_NOK EQU 0X00
LOCK_OK EQU 0X01
LOCK_RECAL_OK EQU 0X02
RXCURRENT EQU 0X44
TXCURRENT EQU 0X81
RXPLL EQU 0X60
TXPLL EQU 0X48
PA_VALUE EQU 0Xff
;--------------------------------
;============================================================
;===================================================
ENCODE
BANK_3
MOVF COUNT_L,W ;HI MANUFACTURE KEY
MOVWF CSR2
MOVF COUNT_H,W ;HI MANUFACTURE KEY
MOVWF CSR3
MOVF CSR6,W
MOVWF CSR4
MOVF CSR9,W
MOVWF CSR5
MOVLW 012H ;HI MANUFACTURE KEY
MOVWF KEYREG1 ;
MOVLW 034H ;
MOVWF KEYREG0 ;
MOVLW 056H ;
MOVWF KEYREG7 ;
MOVLW 078H ;
MOVWF KEYREG6 ;
MOVLW 090H ;
MOVWF KEYREG5 ;
MOVLW 012H ;
MOVWF KEYREG4 ;
MOVLW 034H ;
MOVWF KEYREG3 ;
MOVLW 056H ;
MOVWF KEYREG2
;
MOVLW D'11' ;
MOVWF ENCODE_CNT0 ;
;
DECRYPT_OUTER ;
MOVLW D'48' ;
MOVWF ENCODE_CNT1
DECRYPT_OUTER1
RRCF KEYREG7,1
RRCF KEYREG6,1
RRCF KEYREG5,1
RRCF KEYREG4,1
RRCF KEYREG3,1
RRCF KEYREG2,1
RRCF KEYREG1,1
RRCF KEYREG0,1
BSF KEYREG7,7
BTFSS STATUS,C
BCF KEYREG7,7
RRCF CSR5,1
RRCF CSR4,1
RRCF CSR3,1
RRCF CSR2,1
BSF CSR5,7 ;;;
BTFSS STATUS,C
BCF CSR5,7 ;;;
BCF STATUS,C
MOVLW 1 ;
BTFSC CSR4,3 ;
MOVLW 10000B
MOVWF MASK
BTFSS CSR3,0
BRA PASS
RLCF MASK,1
RLCF MASK,1
PASS
BTFSC CSR2,0
RLCF MASK,1
; MOVLW 0
; BTFSC CSR5,1
; IORLW 2
; BTFSC CSR5,6
; IORLW 4
; ADDWF PC,1
;TABLE
BTFSC CSR5,6
BRA TABLE_1X
BRA TABLE_0X
TABLE_0X:
BTFSS CSR5,1
BRA TABLE_00
BRA TABLE_01
TABLE_1X:
BTFSS CSR5,1
BRA TABLE_10
BRA TABLE_11
TABLE_00:
MOVLW 02EH
BRA TABLE_END
TABLE_01:
MOVLW 074H
BRA TABLE_END
TABLE_10:
MOVLW 05CH
BRA TABLE_END
TABLE_11:
MOVLW 03AH
TABLE_END
CLRWDT
ANDWF MASK,1
MOVLW 0
BTFSS STATUS,Z;SKPZ
MOVLW 10000000B
XORWF CSR3,W
XORWF CSR5,W
XORWF KEYREG1,W
MOVWF MASK
BSF CSR5,7 ;;;
BTFSS MASK,7 ;;;
BCF CSR5,7 ;;;
DECFSZ ENCODE_CNT1,1
BRA DECRYPT_OUTER1
CALL WORK_1
BANK_3
DECFSZ ENCODE_CNT0,1
BRA DECRYPT_OUTER
RETLW 0
;===================================================
;========================================================================
RF_SET:
RETURN
;---------------------------------------接收校准操作。
;----------------------------------------
;--------------------------------------
;----------------------------------------
; ************************************************
; PWM -> 64BIT
; TE=400US
; "PREAMBLE" HLHLHLHLHLHLHLHLHLHLHLH=23TE
; "SYNC" L=10TE
; ************************************************
DET_DCLK_0: ;BCF SPEAK_ON ;MAX 880US
CLRWDT
CALL WORK_1
BANK_3
CLRF KEYREG0;A
DET_DCLK_0B: ;FOR 8M CLOCK 3.5US
BTFSC RF_DCLK
RETURN
BTFSC RF_DCLK
RETURN
;CLRWDT
DECFSZ KEYREG0
BRA DET_DCLK_0B
RETURN
;--------------------------------------
TXSIGNAL: BTFSS STATUS,C
BCF RF_DIO
BTFSC STATUS,C;FC
BSF RF_DIO
RCALL DET_DCLK_0
;------------------------------------
DET_DCLK_1:
CALL WORK_1
BANK_3
CLRF KEYREG0;A
DET_DCLK_1B: ;FOR 8M CLOCK 3.5US
BTFSS RF_DCLK
RETURN
BTFSS RF_DCLK
RETURN
DECFSZ KEYREG0
BRA DET_DCLK_1B
RETURN
;--------------------------------------
ROTARYDATA: RRCF CSR9
RRCF CSR8
RRCF CSR7
RRCF CSR6
RRCF CSR5
RRCF CSR4
RRCF CSR3
RRCF CSR2
BSF CSR9,7
BTFSS STATUS,C
BCF CSR9,7
RETURN
CHECKHIGHBIT: BCF RF_DIO
RCALL DET_DCLK_0
RCALL DET_DCLK_1
TX_BIT_HIGH
BSF RF_DIO
RCALL DET_DCLK_0
BRA DET_DCLK_1
;****************************
;****************************
;****************************
TRANSMIT:
RCALL SET_CC1000_TX
MOVLW 100 ;130MM
MOVWF TX_TIMES
TX_FRAME:
TXPREAMBLE:;
CALL CHECKHIGHBIT
CALL CHECKHIGHBIT
;发101用于修正数据
MOVLW 10
MOVWF KEYREG1;A
TXPREAMBLE_:
BCF STATUS,C
RCALL TXSIGNAL
DECFSZ KEYREG1
BRA TXPREAMBLE_
MOVLW 64
MOVWF KEYREG1
TXCODE:
RCALL WORK_1
BANK_3
MOVF KEYREG1,W
ANDLW 00000111B
BTFSC STATUS,Z
RCALL CHECKHIGHBIT
RCALL ROTARYDATA
RCALL TXSIGNAL
DECFSZ KEYREG1
BRA TXCODE
RCALL CHECKHIGHBIT
;RCALL ROTARYDATA
;
BSF STATUS,C
BTFSS LBAT_F
BCF STATUS,C
RCALL TXSIGNAL
;
BCF STATUS,C ;??????????0??
RCALL TXSIGNAL
;
MOVF TX_TIMES,W
ADDLW 254-100+3
BC TX_CODE4
;return
BTFSS KEY_PRESS_FG
BRA TX_EXIT
TX_CODE4:
DECFSZ TX_TIMES
BRA TXPREAMBLE
TX_EXIT:
BCF RF_DIO
BRA SETUPCC1000PD
;***************************************************
;**************************************************
;***************************************************
GET_RF_DCLK_HIGH:
CALL WORK_1
BANK_3
CLRF CSR4
INCF CSR4
GET_RF_DCLK_HIGH2 ;4US
BTFSS RF_DCLK
RETURN
BTFSS RF_DCLK
RETURN
CLRWDT
INCF CSR4
BNZ GET_RF_DCLK_HIGH2
RETURN
GET_RF_DCLK_LOW:
CALL WORK_1
BANK_3
CLRF CSR4
INCF CSR4
GET_RF_DCLK_LOW2 ;4US
BTFSC RF_DCLK
RETURN
BTFSC RF_DCLK
RETURN
CLRWDT
INCF CSR4
BNZ GET_RF_DCLK_LOW2
RETURN
;***************************************************
;为了可靠接收,主程序,每次至少连续调用RECEIVE 120MS
;**************************************************
REC_120MS:
MOVLW 30; 8-12MS
MOVWF RX_TIME
BCF RX_OVER_FG
BCF RX_OK_FG
REC_120MS2:
RCALL RECEIVE
BTFSC RX_OK_FG
RETURN
BTFSS RX_OVER_FG
BRA REC_120MS2
RETURN
;*****************************
RF_BIT_MIN EQU 256-50
RF_BIT_SHORT EQU 256-125
RECEIVE:
CALL WORK_1
BANK_3
CHECK_START_BIT:
BTFSS RF_DCLK
RECEIVE_END:
RETURN
;***BIT1 END HALF BIT=1
RCALL GET_RF_DCLK_HIGH
BZ RECEIVE_END ;>1024US ERROR
;------------------------
CLRF CSR3
CHECK_PREAMBER:
RCALL GET_RF_DCLK_LOW
BZ RECEIVE_END ;>1024US ERROR
MOVLW RF_BIT_MIN ;MUST >100 US
ADDWF CSR4,W
BNC RECEIVE_END
MOVLW RF_BIT_SHORT ;MUST <500 US
ADDWF CSR4,W
BC RECEIVE_END
INCF CSR3
BTFSC CSR3,4
BRA RECEIVE_END
RCALL GET_RF_DCLK_HIGH
BZ RECEIVE_END ;>1024US ERROR
MOVLW RF_BIT_MIN ;MUST >200 US
ADDWF CSR4,W
BNC RECEIVE_END
MOVLW RF_BIT_SHORT ;MUST <500 US
ADDWF CSR4,W
BNC CHECK_PREAMBER
MOVLW 256-9
ADDWF CSR3,W
BNC RECEIVE_END
;________________________
;________________________
;*******************************
MOVLW 1
MOVWF CSR2
MOVWF CSR3
;******************
REC_RF_DCLK_LOW:
CALL WORK_1
BANK_3
RCALL GET_RF_DCLK_LOW
BZ END_REC_RF ;>1024US ERROR
MOVLW RF_BIT_MIN ;MUST >100 US
ADDWF CSR4,W
BNC END_REC_RF
MOVLW RF_BIT_SHORT ;>500 LONG
ADDWF CSR4,W
BTFSS STATUS,C
BRA REC_RF_DCLK_LOW2
RCALL REC_RF_HALF_LOW
ANDLW 0XFF
BZ END_REC_RF
MOVF CSR3,W
XORLW 46*2
BZ REC_END
REC_RF_DCLK_LOW2:
RCALL REC_RF_HALF_LOW
ANDLW 0XFF
BZ END_REC_RF
MOVF CSR3,W
XORLW 46*2
BZ REC_END
RCALL GET_RF_DCLK_HIGH
BZ END_REC_RF ;>1024US ERROR
MOVLW RF_BIT_MIN ;MUST >200 US
ADDWF CSR4,W
BNC END_REC_RF
MOVLW RF_BIT_SHORT ;>500 LONG
ADDWF CSR4,W
BTFSS STATUS,C
BRA REC_RF_DCLK_HIGH2
RCALL REC_RF_HALF_HIGH
ANDLW 0XFF
BZ END_REC_RF
MOVF CSR3,W
XORLW 46*2
BZ REC_END
REC_RF_DCLK_HIGH2:
RCALL REC_RF_HALF_HIGH
ANDLW 0XFF
BZ END_REC_RF
MOVF CSR3,W
XORLW 46*2
BNZ REC_RF_DCLK_LOW
REC_END:
MOVF CSR9,W
ADDLW 55H
ADDWF CSR8,W
ADDWF CSR7,W
ADDWF CSR6,W
XORWF CSR5,W
BNZ END_REC_RF
CALL READ_SN0
XORWF CSR6,W
BNZ END_REC_RF
CALL READ_SN1
XORWF CSR7,W
BNZ END_REC_RF
CALL READ_SN2
XORWF CSR8,W
BNZ END_REC_RF
BSF RX_OK_FG
BRA SHUT_DOWN_CC1000
FORMAT_ERROR:
END_REC_RF:
RETURN
;****************************
REC_RF_HALF_HIGH:
BSF STATUS,C
BRA REC_RF_HALF_LOW2
REC_RF_HALF_LOW:
BCF STATUS,C
REC_RF_HALF_LOW2:
RLCF CSR2
MOVF CSR3,W
XORLW 46*2
BZ REC_RF_HALF_LOW_OK;46BIT返回
;******************************
INCF CSR3
BTFSC CSR3,0
RETLW 1;BRA REC_RF_HALF_LOW_OK ; 半位返回
;******************************CHECK BIT
movlw 3
andwf CSR2
BZ REC_RF_HALF_LOW_ERROR ;00 ERROR
MOVF CSR2,W
XORLW 3
BZ REC_RF_HALF_LOW_ERROR ;11 ERROR
;BTFSC CSR3,4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -