#include <REGX52.H>
#include<Nrf_T.h>
#define WRITE_REG 0x20//写操作+寄存器地址
#define READ_REG 0x00 // Define read command to register
#define STATUS 0x07 // 'Status' register address
/***定义相应I/O口***/
sbit CE = P3^0;
sbit CSN= P3^1;
sbit SCK= P3^2;
sbit MOSI= P3^3;
sbit MISO= P3^4;
sbit IRQ = P3^5;
typedef unsigned char uchar;
typedef unsigned int uint;
/*延时函数*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
/*根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01读出一字节 */
uchar SPI_RW (uchar dat)
{ //CSN=0;SCK=0;
uchar i;
for (i=0; i<8; i++);
{
delay(1);
MOSI=(dat&0x80); //从最高位开始
dat<<=1;//左移一位
SCK=1;
dat|=MISO;//读状态
SCK=0;
}
return dat;
}
/*读取一个字节*/
uchar SPI_Read (uchar reg)
{
uchar value;
CSN=0;
SPI_RW(reg);//写一条寄存器指令
value=SPI_RW(0);
CSN=1;
return value;
}
void main()
{
//初始化24l01
delay(1);
CSN=1;
SCK=0;
IRQ=1;
CE=0;
P1=SPI_Read(Read_REG+STSTUS);//读取STATUS寄存器的状态,P1口接LED灯
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>