pksdb 发表于 2011-3-1 16:41:07

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

#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_HP4OUT |= BIT3            //P4.3
#define CSN_LP4OUT &= ~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_RETR0x04
#define RF_CH       0x05
#define RF_SETUP    0x06
#define STATUS      0x07
#define OBSERVE_TX0x08
#define RPD         0x09
#define RX_ADDR_P00x0a
#define RX_ADDR_P10x0b
#define RX_ADDR_P20x0c
#define RX_ADDR_P30x0d
#define RX_ADDR_P40x0e
#define RX_ADDR_P50x0f
#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 1pppppp from 000 to 101
#define W_TX_PAYLOAD_NOACK 0xb0
#define NOP                0xff


uchar TX_ADD = {100,101,102,103,104};
uchar Tx_Sent_Data = {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

pksdb 发表于 2011-3-1 16:45:23

if((byte & BIT7) == BIT7 ) //mois 为 P4.4刚打错了
页: [1]
查看完整版本: 新手请教NRF24L01 读寄存器问题(单片机为msp430)