Nrf24L01無線收發(fā)子程序_第1頁
Nrf24L01無線收發(fā)子程序_第2頁
Nrf24L01無線收發(fā)子程序_第3頁
Nrf24L01無線收發(fā)子程序_第4頁
Nrf24L01無線收發(fā)子程序_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——Nrf24L01無線收發(fā)子程序

本程序整理于無線收發(fā)模塊包括api.h和89lv51.c已通過開發(fā)板調(diào)試

Nrf24L01無線收發(fā)子程序

2023-01-2221:39

本程序整理于無線收發(fā)模塊包括api.h和89lv51.c已通過開發(fā)板調(diào)試

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

本程序整理于無線收發(fā)模塊包括api.h和89lv51.c已通過開發(fā)板調(diào)試

{

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:

本程序整理于無線收發(fā)模塊包括api.h和89lv51.c已通過開發(fā)板調(diào)試

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

本程序整理于無線收發(fā)模塊包括api.h和89lv51.c已通過開發(fā)板調(diào)試

}

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

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

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論