基于51的 NRF24L01 c程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

//#define uchar unsigned char

/***************************************************/

#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址

#define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度

#define LED P2

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;

ucharbdatasta;

sbit RX_DR = sta^6;

sbit TX_DS = sta^5;

sbit MAX_RT = sta^4;

sbit beep=P1^1; //蜂鸣器接口,用于测试程序是否成功

/**************************************************/

/**************************************************

函数: init_io()

描述:

初始化IO

/**************************************************/

voidinit_io(void)

{

CE = 0; // 待机

CSN = 1; // SPI禁止

SCK = 0; // SPI时钟置低

IRQ = 1; // 中断复位

LED = 0xff; // 关闭指示灯

}

/**************************************************/

/**************************************************

函数:delay_ms()

描述:

延迟x毫秒

/**************************************************/

voiddelay_ms(uchar x)

{

uchari,j;

i = 0;

for(i=0; i

{

j = 250;

while(--j);

j = 250;

while(--j);

}

}

/**************************************************/

/**************************************************

函数:SPI_RW()

描述:

根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01

读出一字节

/**************************************************/

uchar SPI_RW(uchar byte)

{

uchari;

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); // 返回读出的一字节

}

/**************************************************/

/**************************************************

函数:SPI_RW_Reg()

描述:

写数据value到reg寄存器

/**************************************************/

ucharSPI_RW_Reg(ucharreg, uchar value)

{

uchar status;

CSN = 0; // CSN置低,开始传输数据

status = SPI_RW(reg); // 选择寄存器,同时返回状态字SPI_RW(value); // 然后写数据到该寄存器

CSN = 1; // CSN拉高,结束数据传输

return(status); // 返回状态寄存器

}

/**************************************************/

/**************************************************

函数:SPI_Read()

描述:

从reg寄存器读一字节

/**************************************************/ ucharSPI_Read(ucharreg)

{

ucharreg_val;

CSN = 0; // CSN置低,开始传输数据

SPI_RW(reg); // 选择寄存器

reg_val = SPI_RW(0); // 然后从该寄存器读数据

CSN = 1; // CSN拉高,结束数据传输

return(reg_val); // 返回寄存器数据

}

/**************************************************/

/**************************************************

函数:SPI_Read_Buf()

描述:

从reg寄存器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址

/**************************************************/ ucharSPI_Read_Buf(ucharreg, uchar * pBuf, uchar bytes)

{

ucharstatus,i;

CSN = 0; // CSN置低,开始传输数据

status = SPI_RW(reg); // 选择寄存器,同时返回状态字for(i=0; i

pBuf[i] = SPI_RW(0); // 逐个字节从nRF24L01读出

CSN = 1; // CSN拉高,结束数据传输

return(status); // 返回状态寄存器

}

/**************************************************/

相关文档
最新文档