搜索
bottom↓
回复: 2

新手请教NRF24L01 读寄存器问题(单片机为msp430)

[复制链接]

出0入0汤圆

发表于 2011-3-1 16:41:07 | 显示全部楼层 |阅读模式
#include <msp430x14x.h>

#define uchar unsigned char
#define uint unsigned int
uchar flag = 0;

/*IO 口设置*/

#define CE_H P4OUT |= BIT0              //P4.0
#define CE_L P4OUT &= ~BIT0

#define SCK_H P4OUT |= BIT1             //P4.1
#define SCK_L P4OUT &= ~BIT1

//#define MISO_H P4OUT |= BIT2            //P4.2
//#define MISO_L P4OUT &= ~BIT2

#define CSN_H  P4OUT |= BIT3            //P4.3
#define CSN_L  P4OUT &= ~BIT3

#define MOSI_H P4OUT |= BIT4                   //P4.4
#define MOSI_L P4OUT &= ~BIT4

//#define IRQ_H =                         //P4.5
//#define IRQ_L =

/*nrf24l01 配置地址宏命令*/
#define CONFIG      0x00
#define EN_AA       0x01
#define EN_RXADDR   0x02
#define SETUP_AW    0x03
#define SETUP_RETR  0x04
#define RF_CH       0x05
#define RF_SETUP    0x06
#define STATUS      0x07
#define OBSERVE_TX  0x08
#define RPD         0x09
#define RX_ADDR_P0  0x0a
#define RX_ADDR_P1  0x0b
#define RX_ADDR_P2  0x0c
#define RX_ADDR_P3  0x0d
#define RX_ADDR_P4  0x0e
#define RX_ADDR_P5  0x0f
#define TX_ADDR     0x10
#define RX_PW_P0    0x11
#define RX_PW_P1    0x12
#define RX_PW_P2    0x13
#define RX_PW_P3    0x14
#define RX_PW_P4    0x15
#define RX_PW_P5    0x16
#define FIFO_STATUS 0x17
#define DYNPD       0x18
#define FEATURE     0x19


//配合上面寄存器命令使用 如 R_REGISTER + nrf24l01 配置地址宏命令
#define R_REGISTER         0x00
#define W_REGISTER         0x20
#define R_RX_PAYLOAD       0x61
#define W_TX_PAYLOAD       0xa0
#define FLUSH_TX           0xe1
#define FLUSH_RX           0xe2
#define REUSE_TX_PL        0xe3
#define R_RX_PL_WID        0x60
#define W_ACK_PAYLOAD      0xa8        //  W_ACK_PAYLOAD  = 1010 1ppp  ppp from 000 to 101
#define W_TX_PAYLOAD_NOACK 0xb0
#define NOP                0xff


uchar TX_ADD[5] = {100,101,102,103,104};
uchar Tx_Sent_Data[2] = {0xa5, 0xff};

//IO口初始化
void Io_Dir()
{
  P4DIR = BIT0 + BIT1 + BIT3 +BIT4 + BIT7;
}
//延时函数
void delay()
{
  uchar i = 0, x = 0;
  for(i = 0; i < 0xff; i++)
    for( x = 0; x < 0xff; x++);
}

//模拟IO口 最基本函数 高字节输入 低字节输出
uchar Spi_Write(uchar byte)
{
  uchar Count = 0;
  for(Count = 0;Count < 8; Count++)
  {
    if((byte & BIT7) == BIT7 ) //mois 为 P4.7
    MOSI_H;
    else
    MOSI_L;
    byte = byte << 1;
    SCK_H;
    SCK_L;
  }
    return byte;
}

//spi 写相应寄存器器并赋值
uchar Spi_Reg_Write(uchar Reg, uchar val)

{
  CSN_L;
  Spi_Write(Reg);
  Spi_Write(val);
  CSN_H;
}
//读取寄存器 内容

/*读取寄存器值*/
uchar Spi_Read_Reg()
{
  uchar Count = 0;
  uchar temp = 0;
  SCK_L;

    for (Count=0;Count<8;Count++)     {
    SCK_H;      
   temp = temp << 1;   
   if((P4IN&BIT2)==BIT2) //miso 用的是P4.2口
    temp |= 1;
    SCK_L;  
    }
    return temp;
}
void main()
{
  WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
  Io_Dir(); //除了miso 都设置为输出

  Spi_Reg_Write(W_REGISTER + CONFIG , 0x07)

  CSN_L;
  Spi_Write(R_REGISTER + CONFIG);
  flag = Spi_Read_Reg();
  CSN_H;
while(1);
  
}

这个程序能读取CONFIG寄存器的值吗  我CONFIG 设置的值为0x07

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-3-1 16:45:23 | 显示全部楼层
if((byte & BIT7) == BIT7 ) //mois 为 P4.4  刚打错了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 05:44

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

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