欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    nrf24l01程序.docx

    • 资源ID:23316970       资源大小:16.96KB        全文页数:12页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    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|


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开