NRF24L01写入寄存器后 无法正常读出

2020-01-20 19:10发布

           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
到底是哪里出了问题?
仔细调试了很久,望高人指点  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
netting
1楼-- · 2020-01-20 20:28
高手都是写汇编的
mydreamhouse
2楼-- · 2020-01-20 21:25
为什么每次ACALL 之前要SETB SCK,  NRF24L01是时钟的上升沿写入的
wszyjsw2
3楼-- · 2020-01-21 00:19
mydreamhouse 发表于 2015-2-26 23:15
为什么每次ACALL 之前要SETB SCK,  NRF24L01是时钟的上升沿写入的

有些资料上说 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

一周热门 更多>