#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
/*nrf24l01 配置地址宏命令*/
#define CONFIG 0x00
//配合上面寄存器命令使用 如 R_REGISTER + nrf24l01 配置地址宏命令
#define R_REGISTER 0x00
#define W_REGISTER 0x20
//IO口初始化
void Io_Dir()
{
P4DIR = BIT0 + BIT1 + BIT3 +BIT4 + BIT7;
}
//模拟IO口 最基本函数 高字节输入 低字节输出
uchar Spi_Write(uchar byte)
{
uchar Count = 0;
for(Count = 0;Count < 8; Count++)
{
if((byte & BIT7) == BIT7 ) //mois 为 P4.4
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 |