📄 车载模块.asm
字号:
TX_EN BIT P1.2
TRX_CE BIT P1.3
PWR_UP BIT P1.1
DR BIT P1.0 ;PTR8000 DR=P3.2,W8000 DR=P1.0
ESPI BIT IE.5
SCLK BIT P1.7
MISO BIT P1.6
MOSI BIT P1.5
CSN BIT P1.4
MCU_WORK_LED BIT P3.4
AUXR EQU 8EH
SPCTL EQU 85H
SPSTAT EQU 84H
SPDAT EQU 86H
P1M0 EQU 91H
P1M1 EQU 92H
;-------------------------------------
NRF905_BUFFER EQU 20H
RE_SEND EQU 30H ;70H,75H,7AH,80H,85H,8AH,90H
;-------------------------------------
ORG 0000H
START: MOV SP,#7FH
SETB PWR_UP
CLR TRX_CE
CLR TX_EN
LCALL DELAY
ACALL INITIAL_SPI
MOV RE_SEND,P2
ACALL INITIAL_NRF905
MAIN: MOV A,#8CH ;433.4MHZ RECEIVE
CLR CSN
ACALL SPI_SEND_BYTE
MOV A,#6eH
ACALL SPI_SEND_BYTE
SETB CSN
CLR TX_EN
SETB TRX_CE
JNB DR,$
CPL MCU_WORK_LED
CLR TRX_CE
NOP
NOP
NOP
NOP
ACALL READ_NRF905
MOV A,#8CH ;434.7MHZ SEND
CLR CSN
ACALL SPI_SEND_BYTE
MOV A,#7bH
ACALL SPI_SEND_BYTE
SETB CSN
MOV A,#22H
CLR CSN
ACALL SPI_SEND_BYTE
MOV R7,#04H
SEND_TX_ADD:
MOV A,#0FBH
ACALL SPI_SEND_BYTE
DJNZ R7,SEND_TX_ADD
SETB CSN
CPL MCU_WORK_LED
MOV A,#20H
CLR CSN
ACALL SPI_SEND_BYTE
MOV R7,#5
SEND_DATA:
MOV A,RE_SEND
ACALL SPI_SEND_BYTE
DJNZ R7,SEND_DATA
SETB CSN
SETB TX_EN
SETB TRX_CE
JNB DR,$
CLR TX_EN
CLR TRX_CE
CPL MCU_WORK_LED
SJMP MAIN
INITIAL_SPI:
MOV P1M0,#01000000B ;40h
MOV P1M1,#10100000B ;0a0h
MOV SPSTAT,#11000000B ;SPIF WCOM -- -- -- -- -- --
ANL AUXR,#11110111B ;T0X12 T1X12 UART_M0X6 EADCI ESPI EBODI -- --
MOV SPSTAT,#11000000B ;SPIF WCOM -- -- -- -- -- --
MOV SPCTL,#11010000B ;SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0
MOV SPSTAT,#11000000B ;SPIF WCOM -- -- -- -- -- --
RET
INITIAL_NRF905:
CLR CSN
MOV A,#00000000B ;写配置寄存器命令,从第0字节开始 WC
ACALL SPI_SEND_BYTE
MOV A,#6eh ;434.7MHZ
ACALL SPI_SEND_BYTE
MOV A,#0CH
ACALL SPI_SEND_BYTE
MOV A,#44H ;RX地址4字节,TX地址4字节
ACALL SPI_SEND_BYTE
MOV A,#05H ;接收有效数据宽度5字节
ACALL SPI_SEND_BYTE
MOV A,#05H ;发射有效数据宽度5字节
ACALL SPI_SEND_BYTE
MOV A,RE_SEND
ACALL SPI_SEND_BYTE
MOV A,RE_SEND
ACALL SPI_SEND_BYTE
MOV A,RE_SEND
ACALL SPI_SEND_BYTE
MOV A,RE_SEND
ACALL SPI_SEND_BYTE
MOV A,#11011011B ;CRC校验设置
ACALL SPI_SEND_BYTE
SETB CSN
RET
SPI_SEND_BYTE:
MOV SPDAT,A
WAIT_SPI_SEND:
MOV A,SPSTAT
ANL A,#80H
JZ WAIT_SPI_SEND
MOV SPSTAT,#11000000B ;0c0h
RET
READ_NRF905:
MOV R7,#5
MOV R0,#NRF905_BUFFER
CLR CSN
MOV A,#00100100B ;RRP
ACALL SPI_SEND_BYTE
LOOP: ACALL SPI_SEND_BYTE
MOV A,SPDAT
MOV @R0,A
INC R0
DJNZ R7,LOOP
SETB CSN
RET
DELAY: MOV R7,#100
DEL: MOV R6,#50
DJNZ R6,$
DJNZ R7,DEL
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -