搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2015-2-16 22:37:28 | 显示全部楼层 |阅读模式
           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, 杜汶泽)

出0入0汤圆

发表于 2015-2-17 11:15:09 | 显示全部楼层
高手都是写汇编的

出0入0汤圆

发表于 2015-2-26 23:15:38 | 显示全部楼层
为什么每次ACALL 之前要SETB SCK,  NRF24L01是时钟的上升沿写入的

出0入0汤圆

 楼主| 发表于 2015-2-27 09:04:35 | 显示全部楼层
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
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表