基于nRF24L01的无线温湿度程序

来源:本站
导读:目前正在解读《基于nRF24L01的无线温湿度程序》的相关信息,《基于nRF24L01的无线温湿度程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于nRF24L01的无线温湿度程序》的详细说明。
简介:本文是关于基于nRF24L01的无线温湿度程序设计。

nRF24L01程序:

#ifndef__NRF24L01_H__

#define__NRF24L01_H__

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

//NRF24L01寄存器操作命令

#defineREAD_REG0x00//读配置寄存器,低5位为寄存器地址

#defineWRITE_REG0x20//写配置寄存器,低5位为寄存器地址

#defineRD_RX_PLOAD0x61//读RX有效数据,1~32字节

#defineWR_TX_PLOAD0xA0//写TX有效数据,1~32字节

#defineFLUSH_TX0xE1//清除TXFIFO寄存器.发射模式下用

#defineFLUSH_RX0xE2//清除RXFIFO寄存器.接收模式下用

#defineREUSE_TX_PL0xE3//重新使用上一包数据,CE为高,数据包被不断发送.

#defineNOP0xFF//空操作,可以用来读状态寄存器

//SPI(NRF24L01)寄存器地址

#defineCONFIG0x00//配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能;

//bit4:中断MAX_RT(达到最大重发次数中断)使能;bit5:中断TX_DS使能;bit6:中断RX_DR使能

#defineEN_AA0x01//使能自动应答功能bit0~5,对应通道0~5

#defineEN_RXADDR0x02//接收地址允许,bit0~5,对应通道0~5

#defineSETUP_AW0x03//设置地址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字节;

#defineSETUP_RETR0x04//建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时250*x+86us

#defineRF_CH0x05//RF通道,bit6:0,工作通道频率;

#defineRF_SETUP0x06//RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,发射功率;bit0:低噪声放大器增益

#defineSTATUS0x07//状态寄存器;bit0:TXFIFO满标志;bit3:1,接收数据通道号(最大:6);bit4,达到最多次重发

//bit5:数据发送完成中断;bit6:接收数据中断;

#defineMAX_TX0x10//达到最大发送次数中断

#defineTX_OK0x20//TX发送完成中断

#defineRX_OK0x40//接收到数据中断

#defineOBSERVE_TX0x08//发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,重发计数器

#defineCD0x09//载波检测寄存器,bit0,载波检测;

#defineRX_ADDR_P00x0A//数据通道0接收地址,最大长度5个字节,低字节在前

#defineRX_ADDR_P10x0B//数据通道1接收地址,最大长度5个字节,低字节在前

#defineRX_ADDR_P20x0C//数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P30x0D//数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P40x0E//数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P50x0F//数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineTX_ADDR0x10//发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等

#defineRX_PW_P00x11//接收数据通道0有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P10x12//接收数据通道1有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P20x13//接收数据通道2有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P30x14//接收数据通道3有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P40x15//接收数据通道4有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P50x16//接收数据通道5有效数据宽度(1~32字节),设置为0则非法

#defineFIFO_STATUS0x17//FIFO状态寄存器;bit0,RXFIFO寄存器空标志;bit1,RXFIFO满标志;bit2,3,保留

//bit4,TXFIFO空标志;bit5,TXFIFO满标志;bit6,1,循环发送上一数据包.0,不循环;

//24L01发送接收数据宽度定义

#defineTX_ADR_WIDTH5//5字节的地址宽度

#defineRX_ADR_WIDTH5//5字节的地址宽度

#defineTX_PLOAD_WIDTH32//20字节的用户数据宽度

#defineRX_PLOAD_WIDTH32//20字节的用户数据宽度

//硬件端口定义(模拟SPI)

sbitCE=P1^5;//SPI片选

sbitSCK=P1^4;//同步时钟

sbitMISO=P1^3;//主进从出

sbitIRQ=P1^2;//中断

sbitMOSI=P1^1;//主出从进

sbitCSN=P1^0;//芯片使能

//本地子函数声明

voidinit_io(void);//io口初始化

voidRX_Mode(void);//接收模式

voidTX_Mode(void);//发送模式

ucharNRF24L01_TxPacket(uchar*txbuf);//发送一次数据

ucharNRF24L01_RxPacket(uchar*rxbuf);//接送一次数据

#endif

#include"nrf24l01.h"

ucharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//定义一个静态发送地址

ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//

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

函数:init_io()

描述:初始化IO

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

voidinit_io(void)

{

CE=0;//待机

CSN=1;//SPI禁止

SCK=0;//SPI时钟置低

IRQ=1;//中断复位

}

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

函数:SPI_RW()

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

读出一字节

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

ucharSPI_RW(ucharbyte)

{

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_Write_Reg()

描述:写数据value到reg寄存器

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

ucharSPI_Write_Reg(ucharreg,ucharvalue)

{

ucharstatus;

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

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

SPI_RW(value);//然后写数据到该寄存器

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

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

}

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

函数:SPI_Read_Reg()

描述:从reg寄存器读一字节

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

ucharSPI_Read_Reg(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,ucharbytes)

{

ucharstatus,i;

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

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

for(i=0;i<bytes;i++)

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

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

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

}

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

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

函数:SPI_Write_Buf()

描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发

射通道数据或接收/发送地址

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

ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)

{

ucharstatus,i;

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

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

for(i=0;i<bytes;i++)

SPI_RW(pBuf[i]);//逐个字节写入nRF24L01

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

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

}

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

函数:RX_Mode()

描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包

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

voidRX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//接收设备接收通道0使用和发送设备相同的发送地址

SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答

SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0

SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40

SPI_Write_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//接收通道0选择和发送通道相同有效数据宽度

SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益

SPI_Write_Reg(WRITE_REG+CONFIG,0x0f);//CRC使能,16位CRC校验,上电,接收模式

CE=1;//拉高CE启动接收设备

}

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

函数:TX_Mode()

描述:这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),

130us后启动发射,数据发送结束后,发送模块自动转入接收

模式等待应答信号。

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

voidTX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写入发送地址

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//为了应答接收设备,接收通道0地址和发送地址相同

SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答

SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0

SPI_Write_Reg(WRITE_REG+SETUP_RETR,0x0a);//自动重发延时等待250us+86us,自动重发10次

SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40

SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益

SPI_Write_Reg(WRITE_REG+CONFIG,0x0e);//CRC使能,16位CRC校验,上电

CE=1;

}

//启动NRF24L01发送一次数据

//txbuf:待发送数据首地址

//返回值:发送完成状况

ucharNRF24L01_TxPacket(uchar*txbuf)

{

ucharsta;

CE=0;

SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TXBUF32个字节

CE=1;//启动发送

while(IRQ!=0);//等待发送完成

sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值

SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志

if(sta&MAX_TX)//达到最大重发次数

{

SPI_Write_Reg(FLUSH_TX,0xff);//清除TXFIFO寄存器

returnMAX_TX;

}

if(sta&TX_OK)//发送完成

{

returnTX_OK;

}

return0xff;//其他原因发送失败

}

//NRF24L01JIE接收送一次数据

//txbuf:接收数据首地址

//返回值:0,接收完成;其他,错误代码

ucharNRF24L01_RxPacket(uchar*rxbuf)

{

ucharsta;

sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值

SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志

if(sta&RX_OK)//接收到数据

{

SPI_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据

SPI_Write_Reg(FLUSH_RX,0xff);//清除RXFIFO寄存器

return0;

}

return1;//没收到任何数据

}

nRF24L01程序:

#ifndef__NRF24L01_H__

#define__NRF24L01_H__

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

//NRF24L01寄存器操作命令

#defineREAD_REG0x00//读配置寄存器,低5位为寄存器地址

#defineWRITE_REG0x20//写配置寄存器,低5位为寄存器地址

#defineRD_RX_PLOAD0x61//读RX有效数据,1~32字节

#defineWR_TX_PLOAD0xA0//写TX有效数据,1~32字节

#defineFLUSH_TX0xE1//清除TXFIFO寄存器.发射模式下用

#defineFLUSH_RX0xE2//清除RXFIFO寄存器.接收模式下用

#defineREUSE_TX_PL0xE3//重新使用上一包数据,CE为高,数据包被不断发送.

#defineNOP0xFF//空操作,可以用来读状态寄存器

//SPI(NRF24L01)寄存器地址

#defineCONFIG0x00//配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能;

//bit4:中断MAX_RT(达到最大重发次数中断)使能;bit5:中断TX_DS使能;bit6:中断RX_DR使能

#defineEN_AA0x01//使能自动应答功能bit0~5,对应通道0~5

#defineEN_RXADDR0x02//接收地址允许,bit0~5,对应通道0~5

#defineSETUP_AW0x03//设置地址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字节;

#defineSETUP_RETR0x04//建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时250*x+86us

#defineRF_CH0x05//RF通道,bit6:0,工作通道频率;

#defineRF_SETUP0x06//RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,发射功率;bit0:低噪声放大器增益

#defineSTATUS0x07//状态寄存器;bit0:TXFIFO满标志;bit3:1,接收数据通道号(最大:6);bit4,达到最多次重发

//bit5:数据发送完成中断;bit6:接收数据中断;

#defineMAX_TX0x10//达到最大发送次数中断

#defineTX_OK0x20//TX发送完成中断

#defineRX_OK0x40//接收到数据中断

#defineOBSERVE_TX0x08//发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,重发计数器

#defineCD0x09//载波检测寄存器,bit0,载波检测;

#defineRX_ADDR_P00x0A//数据通道0接收地址,最大长度5个字节,低字节在前

#defineRX_ADDR_P10x0B//数据通道1接收地址,最大长度5个字节,低字节在前

#defineRX_ADDR_P20x0C//数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P30x0D//数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P40x0E//数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P50x0F//数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;

#defineTX_ADDR0x10//发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等

#defineRX_PW_P00x11//接收数据通道0有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P10x12//接收数据通道1有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P20x13//接收数据通道2有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P30x14//接收数据通道3有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P40x15//接收数据通道4有效数据宽度(1~32字节),设置为0则非法

#defineRX_PW_P50x16//接收数据通道5有效数据宽度(1~32字节),设置为0则非法

#defineFIFO_STATUS0x17//FIFO状态寄存器;bit0,RXFIFO寄存器空标志;bit1,RXFIFO满标志;bit2,3,保留

//bit4,TXFIFO空标志;bit5,TXFIFO满标志;bit6,1,循环发送上一数据包.0,不循环;

//24L01发送接收数据宽度定义

#defineTX_ADR_WIDTH5//5字节的地址宽度

#defineRX_ADR_WIDTH5//5字节的地址宽度

#defineTX_PLOAD_WIDTH32//20字节的用户数据宽度

#defineRX_PLOAD_WIDTH32//20字节的用户数据宽度

//硬件端口定义(模拟SPI)

sbitCE=P1^5;//SPI片选

sbitSCK=P1^4;//同步时钟

sbitMISO=P1^3;//主进从出

sbitIRQ=P1^2;//中断

sbitMOSI=P1^1;//主出从进

sbitCSN=P1^0;//芯片使能

//本地子函数声明

voidinit_io(void);//io口初始化

voidRX_Mode(void);//接收模式

voidTX_Mode(void);//发送模式

ucharNRF24L01_TxPacket(uchar*txbuf);//发送一次数据

ucharNRF24L01_RxPacket(uchar*rxbuf);//接送一次数据

#endif

#include"nrf24l01.h"

ucharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//定义一个静态发送地址

ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//

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

函数:init_io()

描述:初始化IO

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

voidinit_io(void)

{

CE=0;//待机

CSN=1;//SPI禁止

SCK=0;//SPI时钟置低

IRQ=1;//中断复位

}

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

函数:SPI_RW()

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

读出一字节

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

ucharSPI_RW(ucharbyte)

{

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_Write_Reg()

描述:写数据value到reg寄存器

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

ucharSPI_Write_Reg(ucharreg,ucharvalue)

{

ucharstatus;

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

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

SPI_RW(value);//然后写数据到该寄存器

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

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

}

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

函数:SPI_Read_Reg()

描述:从reg寄存器读一字节

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

ucharSPI_Read_Reg(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,ucharbytes)

{

ucharstatus,i;

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

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

for(i=0;i<bytes;i++)

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

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

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

}

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

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

函数:SPI_Write_Buf()

描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发

射通道数据或接收/发送地址

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

ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)

{

ucharstatus,i;

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

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

for(i=0;i<bytes;i++)

SPI_RW(pBuf[i]);//逐个字节写入nRF24L01

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

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

}

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

函数:RX_Mode()

描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包

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

voidRX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//接收设备接收通道0使用和发送设备相同的发送地址

SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答

SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0

SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40

SPI_Write_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//接收通道0选择和发送通道相同有效数据宽度

SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益

SPI_Write_Reg(WRITE_REG+CONFIG,0x0f);//CRC使能,16位CRC校验,上电,接收模式

CE=1;//拉高CE启动接收设备

}

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

函数:TX_Mode()

描述:这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),

130us后启动发射,数据发送结束后,发送模块自动转入接收

模式等待应答信号。

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

voidTX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写入发送地址

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//为了应答接收设备,接收通道0地址和发送地址相同

SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答

SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0

SPI_Write_Reg(WRITE_REG+SETUP_RETR,0x0a);//自动重发延时等待250us+86us,自动重发10次

SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40

SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益

SPI_Write_Reg(WRITE_REG+CONFIG,0x0e);//CRC使能,16位CRC校验,上电

CE=1;

}

//启动NRF24L01发送一次数据

//txbuf:待发送数据首地址

//返回值:发送完成状况

ucharNRF24L01_TxPacket(uchar*txbuf)

{

ucharsta;

CE=0;

SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TXBUF32个字节

CE=1;//启动发送

while(IRQ!=0);//等待发送完成

sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值

SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志

if(sta&MAX_TX)//达到最大重发次数

{

SPI_Write_Reg(FLUSH_TX,0xff);//清除TXFIFO寄存器

returnMAX_TX;

}

if(sta&TX_OK)//发送完成

{

returnTX_OK;

}

return0xff;//其他原因发送失败

}

//NRF24L01JIE接收送一次数据

//txbuf:接收数据首地址

//返回值:0,接收完成;其他,错误代码

ucharNRF24L01_RxPacket(uchar*rxbuf)

{

ucharsta;

sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值

SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志

if(sta&RX_OK)//接收到数据

{

SPI_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据

SPI_Write_Reg(FLUSH_RX,0xff);//清除RXFIFO寄存器

return0;

}

return1;//没收到任何数据

}

提醒:《基于nRF24L01的无线温湿度程序》最后刷新时间 2024-03-14 01:00:55,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于nRF24L01的无线温湿度程序》该内容的真实性请自行鉴别。