|
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
到底是哪里出了问题?
仔细调试了很久,望高人指点 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|