通过SPI协议使STC51与nrf24l01通信。

2019-07-15 14:50发布

#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灯
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。