ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:216.72KB ,
资源ID:19918874      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19918874.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新NRF24L01参考程序包含多个实例Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新NRF24L01参考程序包含多个实例Word格式文档下载.docx

1、#define k 0xfevoid main()P1=k;则会出现此类结果:MOSI = (uchar & 0x80); / output uchar, MSB to MOSI uchar = (uchar 1); / shift next bit into MSB. SCK = 1; / Set SCK high. uchar |= MISO; / capture current MISO bit SCK = 0; 此处为spi的核心,是spi协议的编程,其中uchar |= MISO; 表示uchar |= MISO | uchar; MOSI = (uchar &其中0x80是1000

2、 0000,与上uchar,这种&,是按位与,故可以从uchar提取出一个电平给mosi。这两句组合起来用,就实现了把uchar编程8位2进制数后的每一位都可以发送给mosi;Uchar的只待对象,就是上面的诸如#define FLUSH_TX 0xE1 这样的数,或者是相关的发送数据。*pBuf这个并不是一个主要的问题,实际这个是涉及指针问题的,带*的跟地址有关系,但是我们其实不需要很关心编译的时候数据被具体存入哪个地址,即使是很重要的数据。void init_NRF24L01(void) inerDelay_us(100); CE=0; / chip enable CSN=1; / Spi

3、 disable SCK=0; / SPI_Write_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(W

4、RITE_REG + RF_CH, 0); / 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1MHZ,发射功率为最大值0dB在整个初始化中我们看到:CE=0;这是设置整个的状态。如过状态设置成待机,则引脚可能变为高阻。(以上并非全部引脚)SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);类似以

5、上两句,这是应用spi的子程序,将寄存器指令放入nrf24l01。如果需深究,请参考说明书,手册等。或者可以通过#define READ_REG 0x00 / 读寄存器指令 等了解大概流程。在整个无线通信过程中,初始化只需设置一次。TxBuf存放的是发送的数据。并且此数据被发送时,是将这个数组的数全部发送的。对方也全部接收。RxBuf接收数组,用于存放对方发来的数据。SetRX_Mode();nRF24L01_RxPacket(RxBuf);当主程序中包含这两个子函数时,且这时某个数据被发送过来,则会被接收到。且被存放到了RxBuf;反之包含nRF24L01_TxPacket(TxBuf);且

6、TxBuf已经存入你想要的数据的时候,这个数据将被发送。程序部分:下面给出程序,由于收发双方程序是完全一样的,所以只粘贴一份。程序虽然不是自己写的,但是经过实际测试的,没有任何诡异的问题。#include intrins.htypedef unsigned char uchar;typedef unsigned char uint;/*NRF24L01端口定义*sbit MISO =P13;sbit MOSI =P14;sbit SCK =P12;sbit CE =P11;sbit CSN =P32;sbit IRQ =P33;/*按键*sbit KEY1=P36;sbit KEY2=P37;

7、/*数码管位选*sbit led3=P20;sbit led2=P21;sbit led1=P22;sbit led0=P23;/*蜂明器*sbit BELL=P34;/*数码管0-9编码*uchar seg10=0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /09段码/*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 20 /

8、20 uints TX payload#define RX_PLOAD_WIDTH 20 / 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寄存器指令*/*SPI(nRF24L01)寄存器地址*#define CONFIG 0x00 / 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01

9、/ 自动应答功能设置#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_ADD

10、R_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 / 接收频道0接收数据长度#def

11、ine 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 reg);void SetRX_Mode(vo

12、id);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(unsigned int s) unsigned

13、 int i; for(i=0; i0;n-) _nop_();/*/*NRF24L01初始化/*/*/*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI写时序/*/ uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (uchar & / .then set SCK low again return(uchar); / return read ucharuchar SPI_Read(uchar reg)NRF24L01的SPI时序 uchar reg_val; CSN

14、= 0; / CSN low, initialize SPI communication. SPI_RW(reg); / Select register to read from. reg_val = SPI_RW(0); / .then read registervalue CSN = 1; / CSN high, terminate SPI communication return(reg_val); / return register valueNRF24L01读写寄存器函数uint SPI_RW_Reg(uchar reg, uchar value) uint status; / CS

15、N low, init SPI transaction status = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. / CSN high again return(status); / return nRF24L01 status ucharuint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数 uint status,uchar_ctr; / Set CSN low, init SPI tranaction / Select register to write to and read status uchar for(uchar_ctr=0;uchar_ctruchars;uchar_ctr+) pBufuchar_ctr = SPI_RW(0);/*uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) 用于写数据:为待写入数据地址,uchars:写入数据的个数/*/uint SPI_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1