|
#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周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|