NRF24L01多通道通信

上传人:lx****y 文档编号:133884546 上传时间:2022-08-11 格式:DOC 页数:39 大小:1.04MB
收藏 版权申诉 举报 下载
NRF24L01多通道通信_第1页
第1页 / 共39页
NRF24L01多通道通信_第2页
第2页 / 共39页
NRF24L01多通道通信_第3页
第3页 / 共39页
资源描述:

《NRF24L01多通道通信》由会员分享,可在线阅读,更多相关《NRF24L01多通道通信(39页珍藏版)》请在装配图网上搜索。

1、无线抢答系统本系统用到4个RF24L01模块,最多可以加到个NRF24L01(其中一个用作主机另外的六个用作从机)。显示用的是诺基亚的5110,MCU用的是52单片机.经亲测发送和接收都很好。在此给上原理图加程序。附上成品图主机代码可下载到开发板上也可以自己做一个可以串口通信的最小系统或者去掉主机代码中的串口通信部分下载到上图做的板中(记得修改引脚)include rg。clud intrin。htypedef unsignedch uhar;tyeef unsined charuint;/*NRF24L01端口定义*/si MO =P04;sbi MO=03;sbSK =P02;sbit =

2、P00;sbit CSN=P01;si IR P0;/*D5110I/O定义*bt D_T =1;bit LCE =P13;i LD_DC P12;sitCD_LK P10;sbt LCD_in =11;*按键*/si KEY=P36;sbit KE=;/*发光二极管*bie1=1;sbt led217;/*NRF24L0地址宏定义*/#define X_AITH 5 unt TXddrsswidth#define RXD_WDT 5 / it X ddess widt#ine X_POWI 20 /2 uis TX payloadee PLAD_WID 20 / 20uintsTX payl

3、oadint constTX_ADRESSTXADR_WIDT=x34,0x43,0x,0x,0x01; /本地地址uintconsX_ADDRESSR_WIDH= 0x34,043,0x10,0x10,0x1;/接收地址0int ons RXSSRX_ADR_TH0xf1,x,0xb4,0xb,0x6; /接收地址n cons RX_ADESSRX_ADR_WDTH=xcd,0xb,0xb4,xb5,0x6; /接收地址uncost RX_ADRESS3RX_IDT03,03,0xb4,0xb5,0xb6; /接收地址uintconst X_DRESSRXDR_IDTx0f,0xb3,0xb

4、4,0x5,0xb6; /接收地址uit cnt RXASSRX_ADRWIDT=005,0b3,0x4,0xb5,0xb6; 接收地址/*R2L01寄存器指令*dfine READ_REG x00 / 读寄存器指令dein WIER 0x20 /写寄存器指令#defn RD_RX_PL 0x61 / 读取接收数据指令dfie WR_T_POD 0xA0 / 写待发数据指令efin USTX x1 /冲洗发送 FIFO指令eine USH_R 0E2 /冲洗接收FIF指令efie ESE_X_PL xE /定义重复装载数据指令#efin NOP xF /保留*SPI(RF2L1)寄存器地址*/

5、defie ONIG 0x/ 配置收发状态,CRC校验模式以及收发状态响应方式efne EN_AA 0x01 / 自动应答功能设置define EN_RXDDR x / 可用信道设置efine SEU_AW 03 / 收发地址宽度设置#defne STUPRETR 004 / 自动重发功能设置defineRF_H 0x05 / 工作频率设置#deieRF_SETP 0x06 / 发射速率、功耗功能设置defneSTATUS 0x07 / 状态寄存器defi OBSERVE_TX 0x08/ 发送监测功能#dfne C 0x09 /地址检测 efie RXADR_P0 0x0A / 频道接收数据

6、地址#eie XDDR_1 0x0B / 频道1接收数据地址define RXADDR_2 x0 / 频道2接收数据地址defne RX_ADDR_P3 x0D /频道接收数据地址fineRX_ADDR_P4 00 / 频道4接收数据地址defineRX_ADRP 0x0F 频道5接收数据地址dfneTXADD x10 / 发送地址寄存器#define RX_P_P 0x11 / 接收频道0接收数据长度dine RXP_P1 x2 / 接收频道0接收数据长度definRX_PW_ 013 / 接收频道0接收数据长度#defin RX_3 0x14 /接收频道0接收数据长度#dfRX_PW_P4

7、 0x5/ 接收频道接收数据长度#deinRX_WP5 x16 / 接收频道0接收数据长度#deneIF_STTUS 0x7 /IO栈入栈出状态寄存器设置/*AI数组区*/co unignd char fnt6826 = /数字和字母0x00, 0x00,0x00,0x00, 0x00, 000,x00, x00,000, f, 0x00, 0x0 , 000,0x0, x07,0x00, 0x07, 0x0 , 0x, 0x4, 07,0x14, 0x7f, 14 , 0x0, 0x4, x2a, 07f, 0a, 012, 000, 0x62, x6, 08, x13, 0x23 , 0x

8、00, 036, 0x9,05, 0x2, 50 , 00, 0x,0x05,0x3, 0x00, 0x00, 0, x00, 01, 0x22,041, 0x0 , 0x0, 0x0, 0x4,x22, 0x1c, 0x00 , x00, x14,0x8,0x3E, 0x0, 1, 000,x0,0x8, 0x3E,0x08, x0, 0x0, x00,0x0, xA0, 06, 0x0 , x0, 0x8,0x08,0x08, 0x08, 008 , 0x00, 000, 06, 0x6, 0x0,0x0, 0x00,0x20, 0x0, 0x0, 0x04, 0x02 , 0x00, 0

9、x3E, 051, x4, 0x45, 03E , x00, 0x0,02, 0x7F, 0x0, 0x0 , 0x0, 42, x61, 0x51, 0x4, 0x46 , x00, 0x1, 0x41, 0x45,04B, 01, 0x00, x18, 0x14, 0x12, 0x7F,0x0 , 0x00, 07, 0x45, 04, 0x45,0x39 , 0x00,0x3C,xA, 09, 0x9, 0x0 , 0x00, 0x01, 0x1, 09, 005, 03, 00,0x36, 0x, 49, 0x49, 36 , 0x0, 0x0, 049,0x49, 0x2,0xE ,

10、 0x0, 0x0,036, 0x3, 0x, 000 , 0x00, 0x00, 06, 036, 0, 00 ,00, 8, x14, 02, x41, 0x0 , 00, 014, x14,0x14, 14, 014 , 0x00, 0x00, x41, 0x2, 014, 0x8 , 0x0, x0, x01, 0x51, 0x0, 0x , 0x0, 0x3, 0x4, 0x5, 051, x3E , 0x0, x7C, 0x12,0x1,0x,xC , 000, 0x7F, 0x4, x49, 0x49, 0x6 , x00, 0x3E, 0x41, 0x4, 04,0x2 , 0

11、0, 0x7, x41, 41, 0x22, 01C, 000, x7F, 0x49, x49,0x49, 0x41, 0x, x7F,0x0,0x9, x09,00 , 0x0, 03E, 41, 049, 049, 0x7, x0,x, x08, 0x08,0x8,0x7F , 0x,00, 0x1, xF, 0x41, x00 , 0x00, 0x20, 040, 0x41,03F, 0x01 , 0x00, x7F, x8, 0x22, 41,0x00,0xF,0x40, 0x0, 0x40, 0x40 , 00, 0x7F, 0x2, 0x0C, 0x0, x7 , 0x00, x7

12、F, 0x04, 0x08, 0x10, 0xF , x0,0x3E, 04,041, 0x41, 03E, 00,x7F,0x09, 0x09, 0x9, 0x06 , 0, 0x3E, 041, 0, 0x1, 0x , 0x00, x7, 09, 0x19,0x2,0x46 , x0,0x6, x49, 0x49, 049, 0x31 , 0x, 0x01,0x1, x7, 01,0x01 , 0x00, 3F, 00, 0x40, 00, 0x3F, x00, 0xF, 0x0,040,020,0xF , 000,0x3,0x0, x38, 040, x3 , 00,0x63,014,

13、0x0, 0x14, 63 , x00, x, 0x8, 0x70, 008, 0 , 0x0, 0x61,0x1,0x9, 0x45, 03 , 0x00,x00, 0x7F, 0x4, x41, 0x00 , 0x0, 0x5, 0x2A, 0x55, 0xA, 0x5 , 0x0, 0x00, 04,0x1, 0x7,0x0, 0x0,0x,x2, x01,002,0x04 , x00, 040, 0x40, x0, 0x40, 0x0 , x00, 0x,0x01, 0x02,x04,000 , 0x00, 0x0, 04, x5, 054, 0x, 0x, x7, x48, 0x44

14、, 0x44,0x , x00, 0x8,04, 04,0, x20 , 00, 0x38, x44,0x4, 048, x7F , 00,38, 0x54, 0x4, 0x54, 18 , 0x, 0x08, 07E, 0x09, 00,x , 0x,0x18,0x4,0A, 0xA4, x7C , 0x00,0xF, 08, x0, 0x, 0x78 , 0x0, 0x0, 044, 0x7D, 0x, 0x0 , 0x0,0x40,x8,0x84, 0x7D, 000 , 0, 0x7, 0x0, 08, 0x44, x0 , x00, 0x00,041, 0x7F, 00, 0 , 0

15、0, 0x7C, 0x, 0x1, 0x04,0x78 , x00,0x, 0x8, 004, 004, 0x78 , 0,x38, 0x44, 0x44, 0x4, 8 , 0x00, 0xFC, 0x, x24, 0x24, x18 , x00, 0x8,0x4, 0x2, 0x8, 0FC , x00, x7,0x08,4, 004, 0x08 , 0x00, 4, 0x54,5, 0x54, 0x20, 0x0, 0x04, 03F,04,x40, 0x20 , 0, 0x3C,x40, x4, 0x20, 0x7 , x00, C,00, 040, 0x20, 01C , 00, 0

16、x3C, x40, 0, 0x0, 0x3C , 0x00, 44,08, 0x10,x8, x4 , 000, 01C, 0xA, 0xA0, 0, 0xC ,0x0, 0x44, 0, 0x54,x4C, 0x44 , 014, 14, 0x14,x4,0x1, 0x14 ; /*标志位*/*/*函数声明区*/void CD_rite_byte(ined char dat,usigne char commnd);/SP写入数据函数voi LC_init(void); /LC511初始化函数voidLCD_s_X(usgne chr X,nsignd chr Y);/设置显示指针函数vid

17、LC_writ_cha(unignedcha c);/写一个字符到LCD110oid C_clea(voi);/CD初始化函数d inerDela_u(nsigne char n);/延时函数vdLD_rite_englsh_string(nsinedcar X,unsid cha,ar); /写字符串到LC函数odCD_wrt_english_har(sign char X,inedca ,nsignedr h); /写一个字符到LCD函数void Dely(unsged nt ); /场延时函数voi NF2L0_ni(void); /NRF2L1初始化t NF4L01I_RW(uin u

18、char); /PI写入和读出charNF2L01_SPI_Read(ucar e);/读寄存器regoid F24L1_S_ode(vod);/设置接收模式uint 2L0SPI_RWRg(uhar re, char vaue);/向寄存器g中存入数据untNRF24L01SI_Red_uf(uhr g, ucha*Buf, uhar char);/读取寄存器reg的数据,存到pBf中uint NF2LSPI_Wite_Bu(uharreg, ucha*pf, ucharucas); /向寄存器reg中写入数据pBfunsigned cr NF401_RxPacet(nignedcar x_

19、buf);/由M读取RF01接收到的数据void NRF24L1Tackt(unigned hr * txuf,nsgnedcharxiaoi); 由NRF24L01 发送数据tx_bufvoid USAR_iit(d); /串口的初始化vid UAR_xPacketchr(harf_data);/通过串口发送一个字节数据函数vod USARTckt_buf(ucr *fdata);/通过串口发送一个字符串的数据函数/*/*长延时*/vd Dela(unge its)unsgned i,j;for(i0; i1000;i+);fo(j=;js; +);/*/*NRF401*/uint bdat

20、st; /状态标志sbit RX_DR =sta;/接收终端标示sbi _D st5;/发送中断标志sit MAX_R =sa4;/重发次数中断标志,当重发次数超过了最发充许的重发次数该中断产生*/*/延时函数*/id ineDel_us(unigne har n)fo(;n;)nop_();*/* 函数名称:LCD_wrt_te函数功能:模拟SPI接口时序写数据/命令LCD入口参数:ta :写入的数据;omad :写数据/命令选择;出口参数:无 备 注:*/voi LCD_itebt(unsined cha dt, uignd char commad)unsgd char ;LCD_C =

21、0; /5110片选有效,允许输入数据if(commn=0)/写命令CD_DC 0;leLC_DC=1; for(i0;8;+) /传送bi数据 if(da&080)LCD_in ;elseLCD_Din = 0;LC_CK 0;dat = dat1;LD_SCLK ; L_CE =; /禁止5110/*函数名称:C_init函数功能:511初始化入口参数:无出口参数:无 备 注: */void LCDinit(oid)LCD_RT= 0; 产生一个让LC复位的低电平脉冲nrelay_us(1);LCD_ST= ;CD_E = 0; / 关闭LDDely_us(1);L_CE= ; / 使能L

22、DrDelau(1);LCDwrite_bye(0x21, 0); 使用扩展命令设置D模式C_wrte_bt(0xc,0);/ 设置液晶偏置电压LCDwrit_byte(0x06,);/温度校正LCD_writ_by(0x13,0);/ 1:48LCDwrite_yte(020, 0);/ 使用基本命令,V=,水平寻址LCD_clar(); /清屏LC_rite_ye(0xc, );/ 设定显示模式,正常显示LCCE=0; /关闭LD/* 函数名称:LCD_et_XY函数功能:设置LD坐标函数入口参数:X :0-83Y :5出口参数:无备 注: */void LCD_et_XY(unigned

23、 car X, usgne char Y)CDwrite_byt(0x40 | Y, 0); / columnLCrit_bye(0x80 | X, 0); / ow*函数名称:D_wrte_char函数功能:显示英文字符入口参数:c:显示的字符出口参数:无 备注: */vod LCD_wrecha(nsgned cr c)unsiged car line;c-= 32; /数组的行号for (line=0; lie6; line+)LCD_r_bt(onx8clin,1);/*- LCDcler: D清屏函数 编写日期:0088 -*/ vi CD_cla(vd)usigne inti;LC

24、D_writbyte(0x0c,0);LCD_writete(0x80, 0);fr (i0; i504;i+)LD_writebye(0, 1);/*- 函数名称:void LD_wrteenglishsring(nsgnechr X,nsige cha Y,har *)函数功能:写字符串函数入口参数:X、Y :位图绘制的起始、Y坐标;*s :字符串;出口参数:无备 注:-*d L_wite_engish_string(ind carX,unsige chr Y,char *s)LCD_etX(X,Y);whi()L_writehr();s+;/- 函数名称:voi LCwit_nlshst

25、ring(nigned chr X,nsine cY,chr s)函数功能:写字符串函数入口参数:X、Y :位图绘制的起始X、Y坐标;*s :字符串;出口参数:无 备 注:-/voiLC_write_nglish_car(usigne cr X,unnd crY,nied car )D_se_XY(X,Y);L_rit_chr(ch);*/*/RF2L01初始化/*/void NRF2L01_int(oid)nerly_u(100);CE=0; /芯片使能 N=1; / (Sp dsable)PI 失能,即禁止401芯片的SPI功能 SK=0; /初始化SP时钟NRF24L01SPWrie_B

26、uf(WRIE_EG + TX_ADR, TX_ADDSS,TX_ADR_WIDTH); / 设置本地地址 NRF24L01_PI_rte_Buf(TE_R + _DDR_P0, R_ADDRSS, X_DR_IDTH); / 设置接收端地址0RF4L01_SI_Write_uf(WR + RX_ADR_P1,R_ADRSS1, RX_AWTH); /设置接收端地址1NF24L0_SPI_RW_R(WRIT_EG RX_ADDP2,XDDES20); /设置接收端地址2NRF2L01_SPRW_Reg(WRTEREG RX_ADDRP3,R_ADRESS30); / 设置接收端地址3NF24L

27、1_PIRW_eg(WRITE_REG + AD_P4,_ADRESS0);/ 设置接收端地址NF4L01_SPR_eg(WRI_EG + X_ADDRP5,RX_DESS5); / 设置接收端地址5RFL01SP_RW_Reg(WRIE_REE_,0x3f); / 频道0,1,2,3,4,5自动 ACK应答允许 NRF4L01_IRW_R(ITEEG+ EN_RXADDR,x); / 允许接收地址有频道0,,2,3,4,5,如果需要多频道可以参考Pge21 NRF24L01_SP_Rg(WRITE_E+SEPRETR,0x1a); /设置自动重发的延时和次数,延时大小为400+8us,次数5

28、次NR24L01_SI_RW_R(E_G + RFCH,0); 设置信道工作为2。4GH,收发必须一致NR4L01PI_RW_Reg(RITE_RE + RX_P_0,RX_P_WIDTH);/设置接收数据长度,本次设置为32字节NRF01_PI_R_Reg(ITE_G+ _PW_P1, RX_PLOTH); /设置接收数据长度,本次设置为32字节NR4L01SPIR_eg(RE_REG + X_P2,RXPLOAD_WIDH); /设置接收数据长度,本次设置为2字节NF24L01_SPIR_eg(WRITRE X_PW_, RX_PLOAD_WITH);/设置接收数据长度,本次设置为32字节

29、NRF2L01_SI_R_Reg(WRITER + _P4, RX_LODWDH);/设置接收数据长度,本次设置为32字节NF24L01_SPI_W_Rg(WRIT_REG + RX_PW_5, RXLOWIDTH); /设置接收数据长度,本次设置为3字节RF4L1SPIRW_g(WRIE_REG + R_SETUP,007); /设置发射速率为2HZ,发射功率为最大值0BRF4L1_SPW_e(WRTERE+CNFG,0x0f); /IRQ收发完成中断响应,1为RC,主接收/*/函数:uit SP_RW(uintucha)/*功能:RF2L1的SP写时序*/itNRF24L1_SPI_W(u

30、in hr) 发送uchar数据,并返回接收到的数据it it_ctr; /位计数器,用于确定接收或者发送的位数,这里是一个字节即8位fo(it_cr=0;bi_ct8;bitc+) OI= (ucha & 0x80); / (ututchar,B to MSI)输出数据,MSB to MO,即先送高位后送低位uhar (uchar 1); / (hift ext bi ito MSB.。)右移一位,准备传送下一个数据S 1; /(S CK hih.)设置SCK为高u |= ; / (cpure crrentMI bi)接收2401传出的数据,他是先先送高位后送低位SC 0; / (。en s

31、t SCKlow gain)拉低SC时钟产生下降沿,从MSOI送出数据,在下一次SCK为高时读入MIOreturn(cr); / etur e uch/*/函数:uchar SIRea(char reg)/功能:NRF24L1的SPI时序*ucarRF240Iad(cha e)uharg_val;CN =; /(SN low, intilizSPI comniction.)CN拉低,启动SP通信NR24L1_SPI(reg); / (ec gistrtoread from。)设置读取的寄存器eg_va= NRF2L01_SPI_RW(0); / (.en rad registervale)读出

32、寄存器中的数据CSN=; / (CSig, erminateSPI communcation)SN拉高,终止SPI通信retr(reg_val); / (reurn rgister value)返回接收到的数据*/功能:NRF2L1读写寄存器函数/*/inNR2L01_SPIRW_g(uchar re, uhr valu)uit satus;CS = 0; / (CN lw, int SPI trnsatio)SN拉低,启动SPI通信as = NF24L01PI_RW(re); /(selectregster)选择要操作的寄存器NR2LSP_RW(vlue); / (.。andwrtevalu

33、 to t.)向选择的寄存器中写入数据SN= 1; / (CSN hi again)CS拉高,终止SPI通信eurn(tatus); / (ern RF4L1 staus uchr)返回2401 e寄存器的状态/*/*函数:unt SPI_ad_uf(chr eg,uchrpBu, car uars)*功能: 用于读数据,re:为寄存器地址,Bf:为待读出数据地址,uchars:读出数据的个数/*/in RF4L1_SP_ad_uf(uchag, uchar pBu, ucaruchrs)intstas,uc_tr;CSN =; / Set CSN lw, init SI tranactist

34、atus NRF2401_I_RW(reg); / Slec registro write toand reastats charor(car_ct=0;uhrctruar;ucar_ctr+)pufchar_ctr NRF24L0PIRW(0); / CN =1; return(stats); / return RF201 sttus uchar/*函数:unt SPI_Wte_Buf(char eg, uhr puf, ucarus)/*功能: 用于写数据,re:为寄存器地址,uf:为待写入数据地址,uchs:写入数据的个数/*/uint NF24L0SPI_Write_u(uharreg, ucharpuf, uchar ucars)t satus,uar_ctr;CSN = 0; /I使能 status= NR24L0_SPI_R(r); for(har_t=; cha_crucrs; uchar_cr+) /NRF24L0_SPI_W(pBuf+);/指向下

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!