Nrf24L01无线收发子程序_第1页
Nrf24L01无线收发子程序_第2页
Nrf24L01无线收发子程序_第3页
Nrf24L01无线收发子程序_第4页
Nrf24L01无线收发子程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——Nrf24L01无线收发子程序

本程序整理于无线收发模块包括api.h和89lv51.c已通过开发板调试

Nrf24L01无线收发子程序

2023-01-2221:39

本程序整理于无线收发模块包括api.h和89lv51.c已通过开发板调试

api.h

//BYTEtypedefinition

#ifndef_BYTE_DEF_

#define_BYTE_DEF_

typedefunsignedcharBYTE;

#endif/*_BYTE_DEF_*/

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

//SPI(nRF24L01)commands

#defineREAD_REG0x00//Definereadcommandtoregister

#defineWRITE_REG0x20//Definewritecommandtoregister

#defineRD_RX_PLOAD0x61//DefineRXpayloadregisteraddress

#defineWR_TX_PLOAD0xA0//DefineTXpayloadregisteraddress

#defineFLUSH_TX0xE1//DefineflushTXregistercommand

#defineFLUSH_RX0xE2//DefineflushRXregistercommand

#defineREUSE_TX_PL0xE3//DefinereuseTXpayloadregistercommand

#defineNOP0xFF//DefineNoOperation,mightbeusedtoreadstatusregister//***************************************************//

//SPI(nRF24L01)registers(addresses)

#defineCONFIG0x00//'Config'registeraddress

#defineEN_AA0x01//'EnableAutoAcknowledgment'registeraddress

#defineEN_RXADDR0x02//'EnabledRXaddresses'registeraddress

#defineSETUP_AW0x03//'Setupaddresswidth'registeraddress

#defineSETUP_RETR0x04//'SetupAuto.Retrans'registeraddress

#defineRF_CH0x05//'RFchannel'registeraddress

#defineRF_SETUP0x06//'RFsetup'registeraddress

#defineSTATUS0x07//'Status'registeraddress

#defineOBSERVE_TX0x08//'ObserveTX'registeraddress

#defineCD0x09//'CarrierDetect'registeraddress

#defineRX_ADDR_P00x0A//'RXaddresspipe0'registeraddress

#defineRX_ADDR_P10x0B//'RXaddresspipe1'registeraddress

#defineRX_ADDR_P20x0C//'RXaddresspipe2'registeraddress

#defineRX_ADDR_P30x0D//'RXaddresspipe3'registeraddress

#defineRX_ADDR_P40x0E//'RXaddresspipe4'registeraddress

#defineRX_ADDR_P50x0F//'RXaddresspipe5'registeraddress

#defineTX_ADDR0x10//'TXaddress'registeraddress

#defineRX_PW_P00x11//'RXpayloadwidth,pipe0'registeraddress

#defineRX_PW_P10x12//'RXpayloadwidth,pipe1'registeraddress

#defineRX_PW_P20x13//'RXpayloadwidth,pipe2'registeraddress

#defineRX_PW_P30x14//'RXpayloadwidth,pipe3'registeraddress

#defineRX_PW_P40x15//'RXpayloadwidth,pipe4'registeraddress

#defineRX_PW_P50x16//'RXpayloadwidth,pipe5'registeraddress

本程序整理于无线收发模块包括api.h和89lv51.c已通过开发板调试

{

j=108;

;

while(j--);

}

}

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

Function:SPI_RW();

Description:

WritesonebytetonRF24L01,andreturnthebyteread

fromnRF24L01duringwrite,accordingtoSPIprotocol

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

ucharSPI_RW(ucharbyte)

{

ucharbit_ctr;

for(bit_ctr=0;bit_ctr8;bit_ctr++)//output8-bit

{

MOSI=(byte0x80);//output'byte',MSBtoMOSI

byte=(byte1);//shiftnextbitintoMSB..

SCK=1;//SetSCKhigh..

byte|=MISO;//capturecurrentMISObit

SCK=0;//..thensetSCKlowagain

}

return(byte);//returnreadbyte

}

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

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

Function:SPI_RW_Reg();

Description:

Writesvalue'value'toregister'reg'

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

ucharSPI_RW_Reg(BYTEreg,BYTEvalue)

{

ucharstatus;

CSN=0;//CSNlow,initSPItransaction

status=SPI_RW(reg);//selectregister

SPI_RW(value);//..andwritevaluetoit..

CSN=1;//CSNhighagain

return(status);//returnnRF24L01statusbyte

}

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

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

Function:SPI_Read();

Description:

本程序整理于无线收发模块包括api.h和89lv51.c已通过开发板调试

ReadonebytefromnRF24L01register,'reg'

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

BYTESPI_Read(BYTEreg)

{

BYTEreg_val;

CSN=0;//CSNlow,initializeSPIcommunication...

SPI_RW(reg);//Selectregistertoreadfrom..

reg_val=SPI_RW(0);//..thenreadregistervalue

CSN=1;//CSNhigh,terminateSPIcommunication

return(reg_val);//returnregistervalue

}

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

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

Function:SPI_Read_Buf();

Description:

Reads'bytes'#ofbytesfromregister'reg'

TypicallyusedtoreadRXpayload,Rx/Txaddress

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

ucharSPI_Read_Buf(BYTEreg,BYTE*pBuf,BYTEbytes)

{

ucharstatus,byte_ctr;

CSN=0;//SetCSNlow,initSPItranaction

status=SPI_RW(reg);//Selectregistertowritetoandreadstatusbyte

for(byte_ctr=0;byte_ctrbytes;byte_ctr++)

pBuf[byte_ctr]=SPI_RW(0);//PerformSPI_RWtoreadbytefromnRF24L01CSN=1;//SetCSNhighagain

return(status);//returnnRF24L01statusbyte

}

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

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

Function:SPI_Write_Buf();

Description:

Writescontentsofbuffer'*pBuf'tonRF24L01

TypicallyusedtowriteTXpayload,Rx/Txaddress

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

ucharSPI_Write_Buf(BYTEreg,BYTE*pBuf,BYTEbytes)

{

ucharstatus,byte_ctr;

CSN=0;//SetCSNlow,initSPItranaction

status=SPI_RW(reg);//Selectregistertowritetoandreadstatusbyte

for(byte_ctr=0;byte_ctrbytes;byte_ctr++)//thenwriteallbyteinbuffer(*pBuf)

SPI_RW(*pBuf++);

CSN=1;//SetCSNhighagain

return(status);//returnnRF24L01statusbyte

本程序整理于无线收发模块包括api.h和89lv51.c已通过开发板调试

}

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

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

Function:RX_Mode();

Description:

ThisfunctioninitializesonenRF24L01deviceto

RXMode,setRXaddress,writesRXpayloadwidth,

selectRFchannel,datarateLNAHCURR.

Afterinit,CEistoggledhigh,whichmeansthat

thisdeviceisnowreadytoreceiveadatapacket.

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

voidRX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//UsethesameaddressontheRXdeviceastheTXdevice

SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//EnableAuto.Ack:Pipe0

SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//EnablePipe0

SPI_RW_Reg(WRITE_REG+RF_CH,40);//SelectRFchannel40

SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//SelectsameRXpayloadwidthasTXPayloadwidth

SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//TX_PWR:0dBm,Datarate:2Mbps,LNA:HCURR

SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);//SetPWR_UPbit,enableCRC(2bytes)Prim:RX.RX_DRenabled..

CE=1;//SetCEpinhightoenableRXdevice

//Thisdeviceisnowreadytoreceiveonepacketof16bytespayloadfromaTXdevicesendingtoaddress

//'3443101001',withautoacknowledgment,retransmitcountof10,RFchannel40anddatarate=2Mbps.

}

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

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

Function:TX_Mode();

Description:

ThisfunctioninitializesonenRF24L01deviceto

TXmode,setTXaddress,setRXaddressforauto.ack,

fillTXpayload,selectRFchannel,datarateTXpwr.

PWR_UPisset,CRC(2bytes)isenabled,PRIM:TX.

ToDo:Onehighpulse(10us)onCEwillnowsendthis

packetandexpextanacknowledgmentfromtheRXdevice.

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论