📄 车库接收_查询.asm
字号:
TX_EN BIT P1.2
TRX_CE BIT P1.3
PWR_UP BIT P1.1
DR BIT 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
IRDA_1 BIT P2.4
IRDA_2 BIT P2.5
AUXR EQU 8EH
SPCTL EQU 85H
SPSTAT EQU 84H
SPDAT EQU 86H
P1M0 EQU 91H
P1M1 EQU 92H
NRF905_BUFFER EQU 30H
IN_OUT_BYTE EQU 34H
ORG 0000H
START: MOV SP,#7FH
SETB PWR_UP
CLR TRX_CE
CLR TX_EN
LCALL DELAY
ACALL INITIAL_UART
ACALL INITIAL_SPI
ACALL INITIAL_NRF905
CLR MCU_WORK_LED
MOV IN_OUT_BYTE,#00H
CLR TX_EN
MAIN: JNB P3.2,$
RE_RECEIVE:
SETB TRX_CE
JNB DR,$
CPL MCU_WORK_LED
CLR TRX_CE
ACALL READ_NRF905
; MOV IN_OUT_BYTE,P2
MOV A,P2
CJNE A,#0FFH,OUT_LIB ;30H为有车
MOV IN_OUT_BYTE,#0FFH ;上位机接收到:FFH
SJMP UART
OUT_LIB:
CJNE A,#0EFH,IN_LIB ;10H为出车库
MOV IN_OUT_BYTE,#0FH ;上位机出车库:0FH
SJMP UART
IN_LIB: CJNE A,#0DFH,UART ;20H为入车库
MOV IN_OUT_BYTE,#0F0H ;上位机入车库:F0H
UART: MOV R0,#NRF905_BUFFER
MOV R7,#4
UART_SEND:
MOV A,@R0
INC R0
ACALL UART_SEND_BYTE
DJNZ R7,UART_SEND
MOV A,IN_OUT_BYTE
ACALL UART_SEND_BYTE
EXIT: MOV C,IRDA_1
ORL C,IRDA_2
JC RE_RECEIVE
CLR TRX_CE
MOV IN_OUT_BYTE,#00H
SJMP MAIN
INITIAL_UART:
MOV SCON,#50H
MOV TMOD,#21H ;T0 方式 1,T1 方式 2
MOV TH1,#0FDH ;9600bps at 11.0592MHZ
MOV TL1,#0FDH
ANL PCON,#7FH
ORL AUXR,#01000000B ; 9600*12bps=115200bps at 11.0592MHZ
SETB TR1
RET
INITIAL_SPI:
MOV P1M0,#01000000B ;40h
MOV P1M1,#10100000B ;0a0h
MOV SPSTAT,#11000000B ;SPIF WCOM X X X X X X
ANL AUXR,#11110111B ;T0X12 T1X12 UART_M0X6 EADCI ESPI EBODI X X
MOV SPSTAT,#11000000B ;SPIF WCOM X X X X X X
MOV SPCTL,#11010000B ;SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0
MOV SPSTAT,#11000000B ;SPIF WCOM X X X X X X
RET
INITIAL_NRF905:
CLR CSN
MOV A,#00000000B ;写配置寄存器命令,从第2字节开始 WC
ACALL SPI_SEND_BYTE
MOV A,#7bH ;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,#0FBH
ACALL SPI_SEND_BYTE
MOV A,#0FBH
ACALL SPI_SEND_BYTE
MOV A,#0FBH
ACALL SPI_SEND_BYTE
MOV A,#0FBH
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
UART_SEND_BYTE:
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
RET
DELAY: MOV R7,#0FFH
DEL: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DEL
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -