打印
[51单片机]

nrf24l01调试第一步就出错了,求给看看程序那里不对

[复制链接]
606|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laser207|  楼主 | 2017-11-30 22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机联了24l01模块后,试着读取模块地址为0x07的寄存器,按说明书上他的值应该是e,可我的程序串口返回是e1求给看看那里出错了
#include <stc15f.h>
#include <intrins.h>
typedef unsigned char  uchar;
typedef unsigned int   uint;
uchar status;
sbit CE = P5^4;
sbit CSN =P5^5;
sbit MISO = P1^4;
sbit MOSI = P1^3;
sbit SCK = P1^5;
sbit IRQ = P3^2;
void UartInit(void)                //115200bps@22.1184MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0xD0;                //设定定时初值
        TH1 = 0xFF;                //设定定时初值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
}

void SPI_Init(void)
                {
                        SPSTAT |= 0XC;
                        SPCTL=0xd0;
                }
/**********************************/
/*********spi读写******************/
uchar SPI_RW(uchar tr_data)
                {
                        uchar i=0;
                        SPSTAT|=0XC0;
                        SPDAT=tr_data;
                while ((SPSTAT&0x80!=0x80)&&(i<20))
                        {
                                i++;
                              
                        }
                        
                  return SPDAT;
                        
                }

/*************************************************/
/* 函数功能:读24L01的寄存器值 (一个字节)      */
/* 入口参数:reg  要读的寄存器地址               */
/* 出口参数:value 读出寄存器的值                */
/*************************************************/
uchar NRF24L01_Read_Reg(uchar reg)
                {
                        uchar value;
                        CSN=0;            
                          SPI_RW(reg);//发送寄存器值(位置),并读取状态值
                        value = SPI_RW(0xff);
                        CSN=1;            
                        return value;
                }        
        void main()
                {        CE=0;
                        CSN=1;
                        SCK=0;
                        IRQ=1;
                        status=0;
                        SPI_Init();
                        UartInit();
                        while(1)
                                {
                                        if(RI)
                                                {
                                                        RI=0;
                                                        status= NRF24L01_Read_Reg(0x7);
                                                        SBUF=status;        
                                                }
                                }
                    
                }               

相关帖子

沙发
xyz549040622| | 2017-12-1 09:14 | 只看该作者
读其他寄存器是否正常呢?多读几个试试。

使用特权

评论回复
板凳
jimsboy| | 2017-12-1 09:42 | 只看该作者
没 空看你的代码。担是我觉得你应该用个逻辑分 析 仪抓个波形看看。直接就可以确定是你的软件问题还是硬件问题了。
这个芯片很常用的。如果用模块,我感觉基本没有问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝