📄 r4.asm
字号:
LIST P=PIC16F877
INCLUDE "P16F877.INC"
AAA EQU 33H
S_DATA EQU 21H
R_DATA EQU 22H
RSSI EQU 23H
BYTE_NUM EQU 24H
RSSI0 EQU 25H
RETX_NUM2 EQU 26H
CYCLE EQU 27H
CYCLE1 EQU 28H
CYCLE2 EQU 29H
RSSI1 EQU 2AH
BBB EQU 44H
ORG 00H
GOTO MAIN
ORG 05H
SEND
BCF STATUS,RP1
BCF STATUS,RP0
MOVF S_DATA,W
MOVWF SSPBUF
WAIT BTFSS PIR1,SSPIF
GOTO WAIT
BCF PIR1,SSPIF
RETLW 0
READ
BCF STATUS,RP1
BSF STATUS,RP0
LOOP0 BTFSS SSPSTAT,BF
GOTO LOOP0
BCF STATUS,RP0
MOVF SSPBUF,W
MOVWF R_DATA
RETLW 0
RD_RSSI
BCF PORTC,2 ;CSN变低
MOVLW H'F4' ;RSSI地址
MOVWF S_DATA
CALL SEND
MOVLW H'FF'
MOVWF S_DATA
CALL SEND
CALL READ
BSF PORTC,2
BTFSC R_DATA,7 ;判断是否大于128
GOTO DAYU
XIAOYU BCF STATUS,0
RRF R_DATA,0 ;除以2
SUBLW H'4B'
MOVWF RSSI
RETLW 0
DAYU RRF R_DATA,0
SUBLW H'CB'
MOVWF RSSI
RETLW 0
SRSSI1 BTFSC RSSI0,7 ;判断是否大于128
GOTO DAYU0
XIAOYU0 BCF STATUS,0
RRF RSSI0,0 ;除以2
SUBLW H'4B'
MOVWF RSSI1
RETLW 0
DAYU0 RRF RSSI0,0
SUBLW H'CB'
MOVWF RSSI1
RETLW 0
DLY30us
MOVLW H'31'
MOVWF CYCLE
LOOP1 DECFSZ CYCLE
GOTO LOOP1
RETLW 0
DLY10us
MOVLW H'0F'
MOVWF CYCLE
LOOP2 DECFSZ CYCLE
GOTO LOOP2
RETLW 0
DLY20us MOVLW H'20'
MOVWF CYCLE
LOOP20 DECFSZ CYCLE
GOTO LOOP20
RETLW 0
DLY40us MOVLW H'42'
MOVWF CYCLE
LOOP40 DECFSZ CYCLE
GOTO LOOP40
RETLW 0
DLY22us MOVLW H'24'
MOVWF CYCLE
LOOP21 DECFSZ CYCLE
GOTO LOOP21
RETLW 0
DLY809us
MOVLW H'59'
MOVWF CYCLE
LOOP3 MOVLW H'0E'
MOVWF CYCLE1
LOOP4 DECFSZ CYCLE1,1
GOTO LOOP4
DECFSZ CYCLE,1
GOTO LOOP3
RETLW 0
DLY2s
MOVLW H'70' ;
MOVWF CYCLE1 ;2+(2+(2+(1+2)*255+1+2)*116+1+2)*112+2
LOOP5 MOVLW H'74'
MOVWF CYCLE2
LOOP6 MOVLW H'FF'
MOVWF CYCLE
LOOP7 DECFSZ CYCLE,1
GOTO LOOP7
DECFSZ CYCLE2,1
GOTO LOOP6
DECFSZ CYCLE1,1
GOTO LOOP5
RETLW 0
CFG_W ;写配置寄存器
BCF PORTC,2 ;CSN变低
NOP
MOVLW H'02' ;IOCFG0
MOVWF S_DATA
CALL SEND
MOVLW H'06' ;
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'06' ;PKTLEN
MOVWF S_DATA
CALL SEND
MOVLW H'20' ;32字节
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'07' ;PKTCTRL1
MOVWF S_DATA
CALL SEND
MOVLW H'04'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'08' ;PKTCTRL0
MOVWF S_DATA
CALL SEND
MOVLW H'44' ;定长
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'0B' ;FSCTRL1
MOVWF S_DATA
CALL SEND
MOVLW H'08' ;
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'0D' ;FREQ2
MOVWF S_DATA
CALL SEND
MOVLW H'10'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'0E' ;FREQ1
MOVWF S_DATA
CALL SEND
MOVLW H'A7'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'0F' ;FREQ0
MOVWF S_DATA
CALL SEND
MOVLW H'62'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'10' ;MDMCFG4
MOVWF S_DATA
CALL SEND
MOVLW H'F5'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'11' ;MDMCFG3
MOVWF S_DATA
CALL SEND
MOVLW H'83'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'12' ;MDMCFG2
MOVWF S_DATA
CALL SEND
MOVLW H'03'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'13' ;MDMCFG1
MOVWF S_DATA
CALL SEND
MOVLW H'22'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'15' ;DEVIATN
MOVWF S_DATA
CALL SEND
MOVLW H'15'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'18' ;MCSM0
MOVWF S_DATA
CALL SEND
MOVLW H'18'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'19' ;FOCCFG
MOVWF S_DATA
CALL SEND
MOVLW H'16'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'1A' ;BSCFG
MOVWF S_DATA
CALL SEND
MOVLW H'6C'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'1B' ;AGCCTRL2
MOVWF S_DATA
CALL SEND
MOVLW H'03'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'1D' ;AGCCTRL0
MOVWF S_DATA
CALL SEND
MOVLW H'91'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'21' ;FREND1
MOVWF S_DATA
CALL SEND
MOVLW H'56'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'23' ;FSCAL3
MOVWF S_DATA
CALL SEND
MOVLW H'A9'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'24' ;FSCAL2
MOVWF S_DATA
CALL SEND
MOVLW H'2A'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'25' ;FSCAL1
MOVWF S_DATA
CALL SEND
MOVLW H'00'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'26' ;FSCAL0
MOVWF S_DATA
CALL SEND
MOVLW H'11'
MOVWF S_DATA
CALL SEND
BSF PORTC,2
RETLW 0
MAIN
CALL DLY2s
BCF STATUS,RP1
BSF STATUS,RP0
BTFSS PCON,1
BSF PCON,1 ;清除上电复位标志
MOVLW H'13'
MOVWF TRISC ;定义PORTC的方向
MOVLW H'00'
MOVWF TRISA ;定义PORTA的方向
MOVLW H'00'
MOVWF TRISB ;定义PORTB的方向
MOVLW H'00'
MOVWF TRISD ;定义PORTD的方向
MOVLW H'00'
MOVWF TRISE ;定义PORTE的方向
BCF STATUS,RP0
MOVLW H'04'
MOVWF PORTC ;端口输出0
MOVLW H'00'
MOVWF PORTA ;端口输出0
MOVLW H'00'
MOVWF PORTB ;端口输出0
MOVLW H'00'
MOVWF PORTD ;端口输出0
MOVLW H'00'
MOVWF PORTE ;端口输出0
;屏蔽中断
MOVLW H'00'
MOVWF INTCON
;初始化SPI
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW H'40'
MOVWF SSPSTAT
BCF STATUS,RP0
MOVLW H'20'
MOVWF SSPCON
RESET BSF PORTC,3 ;SCK为高,初始化1100
BCF PORTC,5 ;SI为低
BCF PORTC,2
CALL DLY10us
BSF PORTC,2
CALL DLY40us
BCF PORTC,2
LOOP111 BTFSC PORTC,4
GOTO LOOP111
MOVLW H'30' ;发SRES,初始
MOVWF S_DATA
CALL SEND
BSF PORTC,2
CALL DLY40us
LOOP112 BTFSC PORTC,4
GOTO LOOP112
CALL CFG_W
BCF STATUS,IRP
MOVLW H'30'
MOVWF FSR
MOVLW H'20' ;保存数据包长度
MOVWF BYTE_NUM
SFRX MOVLW H'3A' ;清空RX_FIFO
MOVWF S_DATA
BCF PORTC,2 ;CSN变低
CALL SEND
BSF PORTC,2
NOP
CALL DLY40us
NOP
RX BCF PORTC,2 ;使RX
NOP
MOVLW H'34' ;发SRX
MOVWF S_DATA
CALL SEND
BSF PORTC,2
CALL DLY809us
IRQ_J BTFSS PORTC,0 ;判断IRQ,是否收到同步字
CALL RD_RSSI
BTFSS PORTC,0
GOTO IRQ_J
SHOUW BTFSC PORTC,0 ;判断IRQ,是否接收结束,等接收完毕再读数
GOTO SHOUW
BCF PORTC,2
MOVLW H'FF'
MOVWF S_DATA
CALL SEND
PAY_LP MOVLW H'FF'
MOVWF S_DATA
CALL SEND
CALL READ
MOVF R_DATA,0
MOVWF INDF
INCF FSR,1
DECFSZ BYTE_NUM,1
GOTO PAY_LP
BSF PORTC,2
NOP
BCF PORTC,2
MOVLW H'BF'
MOVWF S_DATA
CALL SEND
MOVLW H'FF'
MOVWF S_DATA
CALL SEND
CALL READ
BSF PORTC,2
MOVF R_DATA,0
MOVWF RSSI0
CALL SRSSI1
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW H'55'
SUBWF AAA,1
BTFSS STATUS,2
GOTO SFRX
MOVLW H'55'
SUBWF BBB,1
BTFSS STATUS,2
GOTO SFRX
BSF PORTB,6
LOOP000 NOP
NOP
GOTO LOOP000
NOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -