基于51的 NRF24L01 c程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); // 返回状态寄存器 } /**************************************************/