通过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灯
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
eforfun
1楼-- · 2019-07-15 20:01
我先检查发射端有没有问题,我读取21L01 某些寄存器的状态,然后反应到led灯上,结果灯无论怎样都是亮的,说明通信没有建立?
eforfun
2楼-- · 2019-07-15 23:57
检查了电路连接,也反复看了程序,可是还是没有找到问题,能帮帮忙嘛?

一周热门 更多>