单片机联了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;
}
}
} |