首页 nrf24l01无线模块NRF24L01模块收发c程序

nrf24l01无线模块NRF24L01模块收发c程序

举报
开通vip

nrf24l01无线模块NRF24L01模块收发c程序//许多人都在找nrf24l01无线模块的c程序;我以前刚接触无线//时用的就是nrf24l01模块;搜索了许多程序有很多都没法直接用;甚至还怀疑模块是不是被我搞坏了;拿去让别人检测模块又是好的;为避免大家走弯路;我将我的程序发出来供大家参考; 这是nrf24l01无线模块pcb图; 下面有 Nrf24l01无线模块的收发c程序; 以下程序经本人亲自测试;绝对能用!!  请注意以下几点: 1、24L01模块的电源电压是否为3V-3.6V之间; 2、如果您用的单片机是5V的话,请在IO口与模块接口之间串一个1K电阻...

nrf24l01无线模块NRF24L01模块收发c程序
//许多人都在找nrf24l01无线模块的c程序;我以前刚接触无线//时用的就是nrf24l01模块;搜索了许多程序有很多都没法直接用;甚至还怀疑模块是不是被我搞坏了;拿去让别人检测模块又是好的;为避免大家走弯路;我将我的程序发出来供大家参考; 这是nrf24l01无线模块pcb图; 下面有 Nrf24l01无线模块的收发c程序; 以下程序经本人亲自测试;绝对能用!!  请注意以下几点: 1、24L01模块的电源电压是否为3V-3.6V之间; 2、如果您用的单片机是5V的话,请在IO口与模块接口之间串一个1K电阻; 3、检查模块的GND是否与单片机的GND相连接 4、先用程序进行调试,如果IO口不同,请更改IO口或相关时序; 5、如果是51系列单片机,晶振请选用11.0592M Hz; 模块供电最好用asm1117    5v转3.3v    稳压 测试单片机是 stc89c52 ;at89c52 通用; 收发一体; 一大截不废话了;上程序;此程序是按键控制led;当按下s的时候对应接受的led会闪闪发光;很简单的~如果要实现其他更先进的功能;自己发掘吧~~ 务必将硬件连接正确;否则;它不会工作的~~当然做什么都要严谨~~错一点就差大了~~ 《《收发一体程序》》 #include #include typedef unsigned char uchar; typedef unsigned char uint; //****************************************NRF24L01端口定义*************************************** sbit     MISO    =P1^3; sbit     MOSI    =P1^4; sbit    SCK        =P1^2; sbit    CE        =P1^1; sbit    CSN        =P3^2; sbit    IRQ        =P3^3; //************************************按键*************************************************** sbit    KEY=P2^0; //***************************************************************************** sbit    led=P2^1; //*********************************************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      // 20 uints TX payload #define RX_PLOAD_WIDTH  20      // 20 uints TX payload uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};    //本地地址 uint const RX_ADDRESS[RX_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      // 定义重复装载数据指令 #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  // 状态寄存器 #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        0x10  // 发送地址寄存器 #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 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(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(unsigned int s) {     unsigned int i;     for(i=0; i 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 /******************************************************************************************/ void inerDelay_us(unsigned char n) {     for(;n>0;n--)         _nop_(); } //**************************************************************************************** /*NRF24L01初始化 //***************************************************************************************/ void init_NRF24L01(void) {     inerDelay_us(100);     CE=0;    // chip enable     CSN=1;  // Spi  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(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_SETUP, 0x07);          //设置发射速率为1MHZ,发射功率为最大值0dB } /**************************************************************************************************** /*函数:uint SPI_RW(uint uchar) /*功能:NRF24L01的SPI写时序 /****************************************************************************************************/ uint SPI_RW(uint uchar) {     uint bit_ctr;       for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit       {         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;                      // ..then set SCK low again       }     return(uchar);                    // return read uchar } /**************************************************************************************************** /*函数:uchar SPI_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 registervalue     CSN = 1;                // CSN high, terminate SPI communication         return(reg_val);        // return register value } /****************************************************************************************************/ /*功能:NRF24L01读写寄存器函数 /****************************************************************************************************/ uint SPI_RW_Reg(uchar reg, uchar value) {     uint status;         CSN = 0;                  // CSN low, init SPI transaction     status = SPI_RW(reg);      // select register     SPI_RW(value);            // ..and write value to it..     CSN = 1;                  // CSN high again         return(status);            // return nRF24L01 status uchar } /****************************************************************************************************/ /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数 /****************************************************************************************************/ uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) {     uint status,uchar_ctr;         CSN = 0;                            // Set CSN low, init SPI tranaction     status = SPI_RW(reg);              // Select register to write to and read status uchar         for(uchar_ctr=0;uchar_ctr
本文档为【nrf24l01无线模块NRF24L01模块收发c程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:287KB
软件:Word
页数:12
分类:生活休闲
上传时间:2017-09-20
浏览量:62