无线收发程序.doc

上传人:sk****8 文档编号:3102250 上传时间:2019-05-21 格式:DOC 页数:13 大小:139.50KB
下载 相关 举报
无线收发程序.doc_第1页
第1页 / 共13页
无线收发程序.doc_第2页
第2页 / 共13页
无线收发程序.doc_第3页
第3页 / 共13页
无线收发程序.doc_第4页
第4页 / 共13页
无线收发程序.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、#include #include typedef unsigned char uchar;typedef unsigned char uint;/*NRF24L01 端口定义sbit MISO =P15;sbit MOSI =P11;sbit SCK =P16;sbit CE =P17;sbit CSN =P12;sbit IRQ =P10;/*按键sbit KEY1=P34;/*蜂明器sbit LED=P35;/*#define TX_ADR_WIDTH 5 / 5 uints TX address width#define RX_ADR_WIDTH 5 / 5 uints RX addr

2、ess width#define TX_PLOAD_WIDTH 32 / 20 uints TX payload#define RX_PLOAD_WIDTH 32 / 20 uints TX payloaduint const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /本地地址uint const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址/*NRF24L01 寄存器指令#define READ_REG 0x00 / 读寄存器指令#define WRITE_REG 0

3、x20 / 写寄存器指令#define RD_RX_PLOAD 0x61 / 读取接收数据指令#define WR_TX_PLOAD 0xA0 / 写待发数据指令#define FLUSH_TX 0xE1 / 冲洗发送 FIFO 指令#define FLUSH_RX 0xE2 / 冲洗接收 FIFO 指令#define REUSE_TX_PL 0xE3 / 定义重复装载数据指令#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址#define CONFIG 0x00 / 配置收发状态,CRC 校验模式以及收发状态响应方式#define EN_AA 0x01 / 自

4、动应答功能设置#define EN_RXADDR 0x02 / 可用信道设置#define SETUP_AW 0x03 / 收发地址宽度设置#define SETUP_RETR 0x04 / 自动重发功能设置#define RF_CH 0x05 / 工作频率设置#define RF_SETUP 0x06 / 发射速率、功耗功能设置#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD 0x09 / 地址检测 #define RX_ADDR_P0 0x0A / 频道 0 接收数据地址#define RX_ADDR

5、_P1 0x0B / 频道 1 接收数据地址#define RX_ADDR_P2 0x0C / 频道 2 接收数据地址#define RX_ADDR_P3 0x0D / 频道 3 接收数据地址#define RX_ADDR_P4 0x0E / 频道 4 接收数据地址#define RX_ADDR_P5 0x0F / 频道 5 接收数据地址#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道 0 接收数据长度#define RX_PW_P1 0x12 / 接收频道 0 接收数据长度#define RX_PW_P2 0x13 / 接收

6、频道 0 接收数据长度#define RX_PW_P3 0x14 / 接收频道 0 接收数据长度#define RX_PW_P4 0x15 / 接收频道 0 接收数据长度#define RX_PW_P5 0x16 / 接收频道 0 接收数据长度#define FIFO_STATUS 0x17 / FIFO 栈入栈出状态寄存器设置/*void Delay(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(uint uchar);uchar SPI_Read(uchar r

7、eg);void SetRX_Mode(void);uint SPI_RW_Reg(uchar reg, uchar value);uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*长延时void Delay(uns

8、igned int s)unsigned int i;for(i=0; i0;n-)_nop_();/*/*NRF24L01 初始化/*/void init_NRF24L01(void)inerDelay_us(100);CE=0; / chip enableCSN=1; / Spi disable SCK=0; / Spi clock line init highSPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRES

9、S, RX_ADR_WIDTH); / 写接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频道 0 自动 ACK 应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道 0,如果需要多频道可以参考 Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置信道工作为 2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为 32 字节SPI_RW_Reg(WRITE

10、_REG + RF_SETUP, 0x07); /设置发射速率为 1MHZ,发射功率为最大值 0dBSPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ 收发完成中断响应,16 位 CRC,主接收/*/*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01 的 SPI 写时序/*uint SPI_RW(uint uchar)uint bit_ctr;for(bit_ctr=0;bit_ctr#include typedef unsigned char uchar;typedef unsigned char uint;/*NRF24L0

11、1 端口定义sbit MISO =P15;sbit MOSI =P11;sbit SCK =P16;sbit CE =P17;sbit CSN =P12;sbit IRQ =P10;/*按键sbit KEY1=P34;/*蜂明器sbit LED=P35;/*发送缓冲区uchar TxBuf32=0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x3

12、1,0x32,; / /*NRF24L01*#define TX_ADR_WIDTH 5 / 5 uints TX address width#define RX_ADR_WIDTH 5 / 5 uints RX address width#define TX_PLOAD_WIDTH 32 / 20 uints TX payload#define RX_PLOAD_WIDTH 32 / 20 uints TX payloaduint const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /本地地址uint const RX_ADDRES

13、SRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址/*NRF24L01 寄存器指令#define READ_REG 0x00 / 读寄存器指令#define WRITE_REG 0x20 / 写寄存器指令#define RD_RX_PLOAD 0x61 / 读取接收数据指令#define WR_TX_PLOAD 0xA0 / 写待发数据指令#define FLUSH_TX 0xE1 / 冲洗发送 FIFO 指令#define FLUSH_RX 0xE2 / 冲洗接收 FIFO 指令#define REUSE_TX_PL 0xE3 / 定义重复装载数据指

14、令#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址#define CONFIG 0x00 / 配置收发状态,CRC 校验模式以及收发状态响应方式#define EN_AA 0x01 / 自动应答功能设置#define EN_RXADDR 0x02 / 可用信道设置#define SETUP_AW 0x03 / 收发地址宽度设置#define SETUP_RETR 0x04 / 自动重发功能设置#define RF_CH 0x05 / 工作频率设置#define RF_SETUP 0x06 / 发射速率、功耗功能设置#define STATUS 0x07 / 状

15、态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD 0x09 / 地址检测 #define RX_ADDR_P0 0x0A / 频道 0 接收数据地址#define RX_ADDR_P1 0x0B / 频道 1 接收数据地址#define RX_ADDR_P2 0x0C / 频道 2 接收数据地址#define RX_ADDR_P3 0x0D / 频道 3 接收数据地址#define RX_ADDR_P4 0x0E / 频道 4 接收数据地址#define RX_ADDR_P5 0x0F / 频道 5 接收数据地址#define TX_ADDR 0x1

16、0 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道 0 接收数据长度#define RX_PW_P1 0x12 / 接收频道 0 接收数据长度#define RX_PW_P2 0x13 / 接收频道 0 接收数据长度#define RX_PW_P3 0x14 / 接收频道 0 接收数据长度#define RX_PW_P4 0x15 / 接收频道 0 接收数据长度#define RX_PW_P5 0x16 / 接收频道 0 接收数据长度#define FIFO_STATUS 0x17 / FIFO 栈入栈出状态寄存器设置/*void Delay(unsigned in

17、t s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(uint uchar);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uint SPI_RW_Reg(uchar reg, uchar value);uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);unsigned c

18、har nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*长延时void Delay(unsigned int s)unsigned int i;for(i=0; i0;n-)_nop_();/*/*NRF24L01 初始化/*/void init_NRF24L01(void)inerDelay_us(100);CE=0; / chip enableCSN=1; / Spi disable SCK=0; / Spi clock line init highSPI_W

19、rite_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频道 0 自动 ACK 应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道 0,如果需要多频道可以参考 Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0);

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

21、char)uint bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bitMOSI = (uchar / output uchar, MSB to MOSIuchar = (uchar 1); / shift next bit into MSB.SCK = 1; / Set SCK high.uchar |= MISO; / capture current MISO bitSCK = 0; / .then set SCK low againreturn(uchar); / return read uchar/*/*函数:uchar SPI

22、_Read(uchar reg)/*功能:NRF24L01 的 SPI 时序/*/uchar SPI_Read(uchar reg)uchar reg_val;CSN = 0; / CSN low, initialize SPI communication.SPI_RW(reg); / Select register to read from.reg_val = SPI_RW(0); / .then read registervalueCSN = 1; / CSN high, terminate SPI communicationreturn(reg_val); / return register value/*/*功能:NRF24L01 读写寄存器函数/*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。