这个是接着上一篇《nrf24l01+发送代码》,有发送必须要有接收,这就把接收代码贴出来。代码形式还是跟发送一样,分两个函数。
#include <reg51.h> #include <api_r.h> #define uchar unsigned char /***************************************************/ #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度 #define LED P1 uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址 uchar RX_BUF[TX_PLOAD_WIDTH]; uchar TX_BUF[TX_PLOAD_WIDTH]; uchar flag; uchar DATA = 0x01; uchar bdata sta; sbit RX_DR = sta^6; sbit TX_DS = sta^5; sbit MAX_RT = sta^4; sbit wela=P2^6; sbit dula=P2^7; /**************************************************/ /************************************************** 函数: init_io() 描述: 初始化IO /**************************************************/ void init_io(void) { CE = 0; // 待机 CSN = 1; // SPI禁止 SCK = 0; // SPI时钟置低 IRQ = 1; // 中断复位 LED = 0xff; // 关闭指示灯 } /**************************************************/ /************************************************** 函数:delay_ms() 描述: 延迟x毫秒 /**************************************************/ void delay_ms(uchar x) { uchar i, j; i = 0; for(i=0; i<x; i++) { j = 250; while(--j); j = 250; while(--j); } } /**************************************************/ /************************************************** 函数:SPI_RW() 描述: 根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01 读出一字节 /**************************************************/ uchar SPI_RW(uchar byte) { uchar i; for(i=0; i<8; i++) // 循环8次 { MOSI = (byte & 0x80); // byte最高位输出到MOSI byte <<= 1; // 低一位移位到最高位 SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据 byte |= MISO; // 读MISO到byte最低位 SCK = 0; // SCK置低 } return(byte); // 返回读出的一字节 } /****