📄 t4.asm
字号:
LIST P=PIC16F877
INCLUDE "P16F877.INC"
TXBYTES EQU 20H
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
ORG 00H
GOTO MAIN
ORG 05H
DLY30us
MOVLW H'30'
MOVWF CYCLE
LOOP1 DECFSZ CYCLE
GOTO LOOP1
RETLW 0
DLY40us MOVLW H'42'
MOVWF CYCLE
LOOP40 DECFSZ CYCLE
GOTO LOOP40
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
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
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
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的方向(控制10)
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
NOP
CALL DLY40us
NOP
RETX MOVLW H'20' ;保存数据包长度
MOVWF BYTE_NUM
BCF PORTC,2
MOVLW H'3B' ;清空TX_FIFO
MOVWF S_DATA
CALL SEND
BSF PORTC,2
NOP
CALL DLY40us
NOP
TX BCF PORTC,2 ;使TX
MOVLW H'35' ;发STX
MOVWF S_DATA
CALL SEND
BSF PORTC,2
CALL DLY809us
BCF PORTC,2
MOVLW H'7F'
MOVWF S_DATA
CALL SEND
PAY_TX MOVLW H'55'
MOVWF S_DATA
CALL SEND
DECFSZ BYTE_NUM,1
GOTO PAY_TX
BSF PORTC,2
NOP
CALL DLY2s
NOP
GOTO RETX
NOP
NOP
LOOP000 NOP
NOP
GOTO LOOP000
NOP
END