CE BIT P1.0
CSN BIT P3.7
SCK BIT P2.5
MOSI BIT P2.2
MISO BIT P2.0
IRQ BIT P3.3
;延时1/4s子程序
YANSHI1S: MOV R7,#250
YANSHI1S1: MOV R6,#250
YANSHI1S2: NOP
NOP
DJNZ R6,YANSHI1S2
DJNZ R7,YANSHI1S1
MOV 20H,#20H//20H用来装命令字
MOV 21H,#0FH//21H用来装发送的数据
SETB SCK
MOV R1,#08H
ACALL WRITE_SPI
;延时1.5MS,进入待机模式
DELAY1MS500US: ;误差 0us
MOV R6,#03H
DL00:
MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL00//延时1.5MS
;开始读配置寄存器
MOV 20H,#00H//准备读配置寄存器
SETB SCK
MOV R1,#08H
CALL READ_SPI
MOV P2,A
SJMP $
WRITE_SPI:CLR CSN
LOOP1:MOV A,20H
RLC A
MOV MOSI,C
SETB SCK
MOV 20H,A
CLR SCK
DJNZ R1,WRITE_SPI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV R1,#08H
LOOP2:MOV A,21H
RLC A
MOV MOSI,C
SETB SCK
MOV 21H,A
CLR SCK
DJNZ R1,LOOP2
SETB CSN
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB MOSI
SETB MISO//CSN置高最少8US
RET
READ_SPI: CLR CSN
D1:MOV A,20H
RLC A
SETB SCK
MOV MOSI,C
MOV 20H,A
CLR SCK
DJNZ R1,D1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV R1,#08H
SETB MISO//准备开始读MOSI
D2:SETB SCK
CLR SCK
MOV C,MISO
RLC A
SETB SCK
DJNZ R1,D2
SETB CSN
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB MOSI
SETB MISO//CSN置高最少8US
RET
我现在不要发送,也不要接受模式,只是对NRF24L01的寄存器进行简单读写,向00H寄存器写入0FH 同时也要从00H寄存器当中读出0FH来
程序改换上升沿有效,或则下降沿有效都没有用,读出来的全是11111111
到底是哪里出了问题?
仔细调试了很久,望高人指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
有些资料上说 SPI时钟下降沿 写入 上升沿写入 我也尝试了一下,无果
我现在是这样写的:
MOV 20H,#20H//20H用来装命令字
MOV 21H,#0FH//21H用来装有效数据
CLR CSN
MOV R1,#08H
ACALL WRITE_COMMAND
MOV R1,#08H
ACALL WRITE_DATA
SETB CSN
NOP
NOP
NOP
NOP
NOP
NOP
SETB MOSI
SETB MISO
WRITE_COMMAND:MOV A,20H
RLC A
MOV MOSI,C
SETB SCK
MOV 20H,A
CLR SCK
DJNZ R1,WRITE_COMMAND
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
WRITE_DATA: MOV A,21H
RLC A
MOV MOSI,C
SETB SCK
MOV 21H,A
CLR SCK
DJNZ R1,WRITE_DATA
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
一周热门 更多>