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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

nrf24l01程序.docx

1、nrf24l01程序/ SPI(nRF24L01) 命令定义#define READ_REG 0x00 / 定义读寄存器命令#define WRITE_REG 0x20 / 定义写寄存器命令#define RD_RX_PLOAD 0x61 / 定义接收有效载荷寄存器#define WR_TX_PLOAD 0xA0 / 定义发送有效载荷寄存器#define FLUSH_TX 0xE1 / 定义清除发送寄存器命令#define FLUSH_RX 0xE2 / 定义清除接收寄存器命令#define REUSE_TX_PL 0xE3 / 定义复用发送有效载荷寄存器命令#define NOP1 0xFF

2、 / 定义空操作,用于读取状态寄存器/ SPI(nRF24L01) registers(addresses) #define CONFIG 0x00 / “配置寄存器”地址#define EN_AA 0x01 / “使能自动应答寄存器”地址#define EN_RXADDR 0x02 / “使能接收地址寄存器”地址#define SETUP_AW 0x03 / “设置地址长度寄存器”地址#define SETUP_RETR 0x04 / “设置自动重发寄存器”地址#define RF_CH 0x05 / “RF(射频)频道寄存器”地址#define RF_SETUP 0x06 / “RF(射频

3、)设置寄存器”地址#define STATUS_24L01 0x07 / “状态寄存器”地址#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 R

4、X_ADDR_P5 0x0F / 通道5接收寄存器地址#define TX_ADDR 0x10 / ”发送寄存器“地址#define RX_PW_P0 0x11 / ”通道0有效载荷(数据)长度寄存器“地址#define RX_PW_P1 0x12 / ”通道1有效载荷长度寄存器“地址#define RX_PW_P2 0x13 / ”通道2有效载荷长度寄存器“地址#define RX_PW_P3 0x14 / ”通道3有效载荷长度寄存器“地址#define RX_PW_P4 0x15 / ”通道4有效载荷长度寄存器“地址#define RX_PW_P5 0x16 / ”通道5有效载荷长度寄存器

5、“地址#define FIFO_STATUS 0x17 / “FIFO状态寄存器的寄存器”地址/*-#define TX_ADR_WIDTH 5 /发送地址字节数#define RX_PLOAD_WIDTH 16 /接收数据字节数#define TX_PLOAD_WIDTH 16 /发送数据字节数#define MAX_CONTROL_NUMBER 2 /2 line concrol 2 relay remote control#define NOP _nop_();#define NOP5 NOP;NOP;NOP;NOP;NOP;#define NOP10 NOP5;NOP5;#define

6、 NOP20 NOP10;NOP10;#define delay_130us() NOP20;NOP20;NOP20;NOP20;NOP20;NOP20;NOP10;#define uchar unsigned char#define BYTE unsigned charsbit CE = P22;sbit CSN = P23;sbit SCK = P24 ; sbit MOSI = P25;sbit MISO = P26 ; /数据输入引脚sbit IRQ_24L01= P27 ;/spi通讯端口定义/*-*/ unsigned char TX_ADDRESS5= 0x1,0x02,0x03

7、,0x04,0x05 ; unsigned char RX_ADDRESS5= 0x01,0x02,0x03,0x04,0x05 ; /*_*/void nRF24L01_Config(void); / 配置函数uchar SPI_RW(uchar byte); / 写一个字节到24L01,同时读出一个字节/uchar SPI_READ_Reg(BYTE reg); / 读出寄存器的值uchar SPI_RW_Reg(BYTE reg, BYTE value); / 向寄存器reg写一个字节,同时返回状态字节uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BY

8、TE bytes); /nRF24L01读出字节uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes); /nRF24L01写入字节unsigned char nRF24L01_RxPacket(unsigned char* rx_buf); /nRF24L01数据接收void nRF24L01_TxPacket(unsigned char * tx_buf); /nRF24L01数据发送bit rec_validate_end(void); /接收数据完成后进行校正处理void set_24L01_rec_mode(void);/void

9、test_24l01_irq(void); /测试nRF24L01/*-*公司名称:xxxxxx函数名称:nRF24L01数据读/写函数功能:写一个字节到24L01,同时读出一个字节设计时间:设 计 者:-*/uchar SPI_RW(uchar byte) uchar bit_ctr; bit_ctr=0; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (byte & 0x80); / wait output byte, MSB to MOSI byte = (byte 1); / shift next bit into MSB

10、. SCK = 1; / Set SCK high./- MISO=1; NOP5;/- byte |= MISO; / read capture current MISO bit SCK = 0; / .then set SCK low again return(byte); / return read byte/*-*公司名称:xxxxxx函数名称:nRF24L01数据读取函数功能:向寄存器reg写一个字节,同时返回状态字节设计时间:设 计 者:-*/ uchar SPI_RW_Reg(BYTE reg, BYTE value) uchar status_24L01; status_24L

11、01 = 0; CSN = 0; / CSN low, init SPI transaction status_24L01 = SPI_RW(reg); / select register 选择通道 SPI_RW(value); / .and write value to it. CSN = 1; / CSN high again return(status_24L01); / return nRF24L01 status byte/读数据uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes) uchar status_24L01,byte_c

12、tr; status_24L01 = 0; byte_ctr = 0; CSN = 0; / Set CSN low, init SPI tranaction status_24L01 = SPI_RW(reg); / Select register to write to and read status byte for(byte_ctr=0;byte_ctrbytes;byte_ctr+) pBufbyte_ctr = SPI_RW(0); /选择信号通道? CSN = 1; return(status_24L01); / return nRF24L01 status byte/*-*公司

13、名称:xxxxxx函数名称:nRF24L01函数功能:写入bytes字节的数据设计时间:设 计 者:-*/uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes) uchar status_24L01,byte_ctr; status_24L01=0; byte_ctr=0; CSN = 0; status_24L01 = SPI_RW(reg); for(byte_ctr=0; byte_ctrbytes; byte_ctr+) / SPI_RW(*pBuf+); /;需要发送的数据在PBUF表格里; /;需要发送的字节数载bytes; /对

14、其操作的命令在reg里 CSN = 1; / Set CSN high again return(status_24L01); /*-*公司名称:xxxxxx函数名称:nRF24L01_set_24L01_rec_mode函数功能:写寄存器命令;并寄存器配置地址设计时间:设 计 者:-*/*-*公司名称:xxxxxx函数名称:nRF24L01 * nRF24L01_RxPacket函数功能:接收函数,返回1表示有数据收到,否则没有数据接受到设计时间:设 计 者: 测试通过-*/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) unsi

15、gned char sta,revale=0; sta =0; revale=0; / set in RX mode SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled. CE = 1; / Set CE pin high to enable RX device delay_130us(); sta=SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / read register STATUSs value /读取

16、nRF24L01所处于的状态 if(sta&0x40) / if receive data ready (RX_DR) interrupt 如果准备接收数据则中断1; CE = 0; / stand by mode SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); / read receive payload from RX_FIFO buffer /读取16个字节的数据最大32BIT revale =1; SPI_RW_Reg(WRITE_REG+STATUS_24L01,sta);/ clear RX_DR or TX_DS or MAX_R

17、T interrupt flag return revale;/*-*公司名称:xxxxxx函数名称:nRF24L01函数功能:发送函数设计时间:设 计 者:-*/void nRF24L01_TxPacket(unsigned char * tx_buf) CE=0; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 发送5个地址24l01 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / RX_Addr0 same as TX_Ad

18、r for Auto.Ack SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / Writes data to TX payload SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled. CE=1; NOP20; CE=0; /*-*公司名称:xxxxxx函数名称:nRF24L01 * nRF24L01_Config函数功能:配置函数设计时间:设 计 者:-*/ void

19、nRF24L01_Config(void) /initial io of 24L01 CE=0; / chip enable CSN=1; / Spi disable SCK=0; / Spi clock line init high CE=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); /Enable auto_ack Pipe0/ SPI_RW_Reg(WR

20、ITE_REG + EN_AA, 0x00); /DISable auto_ack Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / Enable Pipe0 SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03); / Setup address width=5 bytes SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); / 500us + 86us, 10 retrans. SPI_RW_Reg(WRITE_REG + RF_CH, 0x02); /channel 2 SPI_RW_R

21、eg(WRITE_REG + RF_SETUP, 0x07); / TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); CE=1; /*-*/bit rec_validate_end(void) if(IRQ_24L01

22、=1)return 0; / if(nRF24L01_RxPacket(remote_buf)&0x01)return (1); else return (0); void set_24L01_rec_mode(void) SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled. RX_ADDRESS0=0XF0; RX_ADDRESS1=0XF0; RX_ADDRESS2=0XF0; RX_ADDRESS3=0XF0; RX_ADDRESS4=0XC0; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, &RX_ADDRESS0, TX_ADR_WIDTH); CE = 1; / Set CE pin high to enable RX device1|

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

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