NRF24L01接收程序可用_第1页
NRF24L01接收程序可用_第2页
NRF24L01接收程序可用_第3页
NRF24L01接收程序可用_第4页
NRF24L01接收程序可用_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、*接收程序*#include #include typedef unsigned char uchar;/*NRF24L01端口定sbitMISO=P1A5;sbitMOSI=P1A1;sbitSCK=P6;sbitCE=p“7;sbitCSN=P1A2;sbitIRQ=P1A0;*#define TX_ADR_WIDTH5 / 5 uints TX address width#define RX_ADR_WIDTH5/ 5 uints RX address width#define TX_PLOAD_WIDTH 32/ 20 uints TX payload#define RX_PLOAD_

2、WIDTH 32/ 20 uints TX payloaduchar const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /本/ 地地址uchar const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; 接/ 收地址/*NRF24L01寄存器指*#define READ_REG0x00/读寄存器指令#define WRITE_REG0x20/写寄存器指令#define RD_RX_PLOAD0x61/读取接收数据指令#define WR_TX_PLOAD0xA0/写待发数据指令#

3、define FLUSH_TX0xE1 /冲洗发送FIFO指令#define FLUSH_RX0xE2/冲洗接收FIF O指令#define REUSE_TX_PL0xE3/定义重复装载数据指令#define NOP0xFF/保留*/*SPI(nRF24L01)*#define CONFIG0x00/配置收发状态,CRC校验模式以及收发状态响应万式#define EN_AA0x01/自动应答功能设置#define EN_RXADDR0x02/可用信道设置#define SETUP_AW0x03/收发地址宽度设置#define SETUP_RETR0x04/自动重发功能设置#define RF_

4、CH0x05/工作频率设置#define RF_SETUP0x06/发射速率、功耗功能设置#define STATUS0x07/状态寄存器#define OBSERVE_TX0x08/发送监测功能#define CD0x09/地址检测#define RX_ADDR_P00x0A/频道 0 接收数据地址#define RX_ADDR_P10x0B/频道 1 接收数据地址#define RX_ADDR_P20x0C/频道 2 接收数据地址#define RX_ADDR_P30x0D/频道 3 接收数据地址#define RX_ADDR_P40x0E/频道 4 接收数据地址#define RX_AD

5、DR_P50x0F/频道 5 接收数据地址#define TX_ADDR0x10/发送地址寄存器#define RX_PW_P00x11/接收频道0 接收数据长度#define RX_PW_P10x12/接收频道0 接收数据长度#define RX_PW_P20x13/接收频道0 接收数据长度#define RX_PW_P30x14/接收频道0 接收数据长度#define RX_PW_P40x15/接收频道0 接收数据长度#define RX_PW_P50x16/接收频道0 接收数据长度#d efine FIFO_STATUS0x17/ FIFO 栈入栈出状态寄存器设置/*void Delay

6、(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uchar SPI_RW(uchar num);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uchar SPI_RW_Reg(uchar reg, uchar value);uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uch

7、ars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*长延时* void Delay(unsigned int s)unsigned int i;for(i=0; is; i+);for(i=0; i0;n-)_nop_();/*/*NRF24L01 初始化/*/void init_NRF24L01(void)inerDelay_us(100);CE=0; / chip enableCSN=1; / Spi disableSCK=0

8、; / Spi clock line init highSPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_PO, RX_ADDRESS, RX_ADR_WIDTH)写接收端地 址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);/ 频道 0 自动 ACK应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01)/;/ 允许接收地址只有频道0,如果需要多频道可以参考 Page21SPI_RW_

9、Reg(WRITE_REG + RF_CH, 0);/设置信道工作为 2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH设置接收数据长度,本次设 置为 32 字节SPI_RW_Reg(WRITE_REG + RF_SET UX07);/ 设置发射速率为 1MHZ,发射功率为最大值 0dBSPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); ,主接收/ IRQ 收发完成中断响应, 16 位 CRC/*/* 函数: uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI写时序*uc

10、har SPI_RW(uchar num)uchar bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bitMOSI = (num & 0x80); num = (num 1);SCK = 1;num |= MISO;SCK = 0;return(num);/ output uchar, MSB to MOSI/ shift next bit into MSB./ Set SCK high./ capture current M ISO bit/ .then set SCK low again/ return read uchar*/*功

11、能:NRF24L01读写寄存器函数/*/uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;CSN = 0;/ CSN low, init SPI transactionstatus = SPI_RW(reg);/ select registerSPI_RW(value);CSN = 1;return(status);/ .and write value to it./ CSN high again/ return nRF24L01 status uchar*/* 函数: uint SPI_Read_Buf(uchar reg, uchar

12、 *pBuf, uchar uchars)/*功能:用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的 个数* uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)uchar status,uchar_ctr;CSN = 0;/ Set CSN low, init SPI tranactionstatus = SPI_RW(reg);/ Select register to write to and read status ucharfor(uchar_ctr=0;uchar_ctruchars;u

13、char_ctr+)pBufuchar_ctr = SPI_RW(0); /CSN = 1;return(status); / return nRF24L01 status uchar/*/* 函数: uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能:用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars :写入数据的个数/*/uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)uchar status,uchar_ctr;/SPI 使能CSN =

14、0;status = SPI_RW(reg);*for(uchar_ctr=0; uchar_ctruchars; uchar_ctr+) /SPI_RW(*pBuf+);CSN = 1;/ 关闭 SPIreturn(status); /*/* 函数: void SetRX_Mode(void)/* 功能:数据接收配置/*/ void SetRX_Mode(void)CE=0;/ SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ 收发完成中断响应, 16 位 CRC ,主接收CE = 1;inerDelay_us(130);/*/* 函数: unsigne

15、d char nRF24L01_RxPacket(unsigned char* rx_buf)/* 功能:数据读取后放如 rx_buf 接收缓冲区中/*unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)unsigned char revale=0;while(IRQ!=0);CE = 0;/SPI 使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/r/ead receive payload from RX_FIFO bufferrevale =1; / 读取数据完成标志SPI_RW_Reg(WRITE_REG+STATUS,0XFF);return revale;/*串口初始化*void StartUART( void )/ 波特率 4800SCON = 0x50;TMOD= 0x20;TH1 =0xFA;TL1 =0xFA;PCON= 0x00;TR1 = 1;* void R_S_Byte(uchar R_

温馨提示

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

评论

0/150

提交评论