




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、以卜程序参考多个网络程序后,经调试并且己经调通,可以稍加修改即可使用经测试可实现双向通信发送方本程序实现功能:从52单片机串丨I读入数据后通过24L01发送/24L01发送#include#includetvpedefunsignedchaiuchar;tvpedefunsignedchaiuint;*2rf24loiri5(,*sbitMISOsbitMOSIsbitsbitsbitsbitSCKCECSNIRQ=P1A4;=P1A3;=P1A2;=P1AO;=P1T;=P1A5;*按键*/sbitKEY1=P3A6;/sbitKEY2=P3A7;*数码管位选*/sbit/sbit/sbit
2、/sbitled3=P2A0;led2=P2Al;ledl=P2A2;ledO=P2A3;*峰明器*/sbitBELL=P3A4;*数码管09编码*/ucharseg10=0 xC0,0 xCE0 xA4,0 xB0.0 x99.0 x92.0 x82.0 xF8,0 x80,0 x90;码yy*p24L01*#defineTX_ADR_WIDTH5#defineRX_ADR_WIDTH5/5umtsTXaddresswidth/5umtsRXaddresswidth#defineTX_PLOAD_WIDTH10/20umtsTXpayloaddefineRX_PLOAD_WIDTH10/20
3、umtsTXpayloadumtconstTX_ADDRESSTX_ADR_WIDTH=0 x34,0 x43?0 x10.Ox10.0 x01;本地地址umtconstRX_ADDRESSRX_ADR_WIDTH=0 x34.0 x43,0 x10,0 x10,0 x01;接收地址yy*yjp24L01寄存器指令*#defineREAD_REG0 x00/读寄存器指令defineEN_RXADDRdefineSETUP_AWdefineSETUP_RETRdefineRF_CHdefineRF_SETUPdefineSTATUSdefineOBSERVE.TXdefineCDdefineRX
4、_ADDR_P0defineRX_ADDR_P1defineRX_ADDR_P2defineRX_ADDR_P3defineRX_ADDR_P4defineRX_ADDR_P5defineTX_ADDR#defineRX_PW_P0#defineRX_PW.P1#defineRX_PW_P2#defineRX_PW_P3#defineRX_PW_P4#defineRX_PW_P5defineFIFO.STATUSdefineWRITE_REG0 x20/写寄存器指令defineRD_RX_PLOAD0 x61/读取接收数据指令#defineWR_TX_PLOADOxAO/写待发数据指令#def
5、ineFLUSH_TXOxEl/冲洗发送FIFO指令#defineFLUSH_RX0 xE2/冲洗接收FIFO指令#defineREUSE_TX_PL0 xE3/定义重复装载数据指令#defineNOPOxFF/保留*defineCONFIGdefineEN_AA0 x00配置收发状态,CRC校验模式以及收发状态响应方式0 x01/自动应答功能设置0 x02可用信道设置0 x03/收发地址宽度设置0 x04/自动重发功能设置0 x05/工作频率设置0 x06/发射速率、功耗功能设置0 x07/状态寄存器0 x08/发送监测功能0 x09/地址检测OxOA/频道0接收数据地址OxOB/频道1接收
6、数据地址0 x0C/频道2接收数据地址0 x0D/频道3接收数据地址OxOE/频道4接收数据地址OxOF/频道5接收数据地址0 x10/发送地址寄存器0 x11接收频道0接收数据长度0 x12/接收频道0接收数据长度0 x13接收频道0接收数据长度0 x14/接收频道0接收数据长度0 x15接收频道0接收数据长度0 x16接收频道0接收数据长度0 x17/FIFO栈入栈岀状态寄存器设置*voidDelay(unsignedmts);voidinerDelay_us(unsignedchain);voiduiit_NRF24L01(void);umtSPI_RW(umtuchai);uchaiS
7、PI_Read(uchai-reg);voidSetRX_Mode(void);uiiitSPI_RW_Reg(uchaieg.uchaivalue);umtSPI_Read_Buf(ucharreg,uchar*pBuf.uchaiuchais);uiiitSPI_Wnte_Buf(ucharreg,uchar*pEiif,ucliaiuchais);unsignedchar11RF24L0l_RxPacket(unsignedchar*rx_buf);void11RF24L0l_TxPacket(unsignedchar*tx_buf);*长延时*voidDelay(unsignedmts
8、)unsignedmti;fbr(i=O;is;i+);fbr(i=O;iO;n)_nop_();*NRF24L01初女台化*/voidinit_NRF24L01(void)clupenable/Spidisable/merDelay_us(l00);CE=0;CSN=1;SCK=0;SPI_Wnte_Ei】f(WRITE_REG+TX_ADDR,TX_ADDRESS.TX_ADR_WIDTH);写本地地址SPI_Wnte_Ei】f(WRITE_REG+RX_ADDR_P0.RX.ADDRESS,RX_ADR_WIDTH);写接收端地址SPI_RW_Reg(WRITE_REG+EN_AA,0
9、x01);频道0自动ACK应答允许SPI_RW_Reg(WRITE_REG+EN.RXADDR,0 x01);允许接收地址只有频道0,如果需要多频道可以参考Page21SPI_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.0 x07);设置发射速率为1MHZ,发射功率为最人值OdE严*/*函数:umtSPI_RW(umtuchar)严功能:NRF24L01的SPI
10、写时序严*/umtSPI_RW(umtuchai)uiiitbit_ctr;fbr(bit_ctr=0;bit_ctr8;bit_cti+)/output8-bit/outputCellar*.MSBtoMOSI/shiftnextbitintoMSE/SetSCKlugh./capturecurrentMISObit/.tliensetSCKlowagainMOSI=(uchar&0 x80);uchar=(uchar1);SCK=1;uchar|=MISO:SCK=0;/leturnreaducharretuin(uchai);严*/*函数:uchaiSPI_Read(uchaneg)严功
11、能:NRF24L01的SPI时序严*/uchaiSPI_Read(uchai-leg)ucharreg_val;CSN=0;SPI_RW(reg);ieg_val=SPI_RW(0);CSN=1;/CSNlow,initializeSPIcommunicationSelectregistertoreadfrom./.thenreadiegisterTalueIICSNhighterniuiateSPIconununication/leturnregistervaluerenun(reg_val);严*/*功能:NRF24L01读写寄存器函数严*/umtSPI_RW_Reg(uchaiuchai
12、value)umtstatus;CSN=0;status=SPI.RW(ieg);SPI_RW(value);/CSNlow,uiitSPItransaction/selectregister/.andwritevaluetoit.CSN=1;/CSNhighagainCSN=1;/CSNhighagainCSN=1;/CSNhighagainCSN=1;/CSNhighagainretum(status);/return11RF24L01statusuchar严*/*函数:umtSPI_Read_Buf(uchaneg,uchai*pBuuchaiuchais)/*功能:用于读数据,reg:
13、为寄存器地址,pBuf:为待读出数据地址,uchais:读出数据的个数严*/umtSPI_Read_Buf(ucharreg,uchar*pBufuchaiuchars)umtstatus,uchai_ctr;CSN=0;status=SPI_RW(reg);/SetCSNlow,initSPItranaction/Selectregistertowritetoandreadstatusucharfdr(uchai_cti-O;uchar_ctiuchais;uchai_cti+)pBuflucliai.ctr=SPI_RW(0);/CSN=1;retum(status);/return11R
14、F24L01statusuchar严*/*函数:umtSPI_Write_Buf(uchaneg,uclw*pBuf,uchaiuchais)严功能:用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchais:写入数据的个数严*/umtSPI_Wnte_Buf(ucharreg,uchar*pEiif,ucliaiuchais)umtstatus,uchai_ctr;CSN=0;/SPI使能status=SPI_RW(ieg);fbr(uchai_cti-O;uchai_ctiuchars;uchar_ctr+)/SPI_RW(*pBufW);CSN=1;关闭SPIreturn(sta
15、tus);/严*/*函数:voidSetRX_Mode(void)/*功能:数据接收配置严*/voidSetRX_Mode(void)CE=0;/IRQ收发完成中断响应,16SPI_RW_Reg(WRITE_REG+CONFIG.OxOf);位CRC,主接收CE=1;inerDelay_us(l30);严*,/*函数:unsignedchar11RF24L0l_RxPacket(unsignedchar*rx_buf)严功能:数据读取后放入rx_buf接收缓冲区中严*,unsignedchar11RF24L0l_RxPacket(unsignedchar*rx_buf)unsignedchar
16、revale=0;sta=SPI_Read(STATUS);/读取状态寄存其来判断数据接收状况if(RX_DR)/判断是否接收到数据CE=0;SPI使能SPI_Read_Euf(RD_RX_PLOADjx_biifTX_PLOAD_WIDTH);/readreceivepayloadfromRX_FIFObufferrevale=1;读取数据完成标志SPI_RW_Reg(WRITE_REG+STATUS、sta);/接收到数据后RX_DR,TX_DS.MAX_PT都置高为1,通过写1来清楚中断标志returnrevale;严*/*函数:void11RF24L0l_TxPacket(unsign
17、edchar*tx_buf)严功能:发送tx_buf中数据严*/void11RF24L0l_TxPacket(unsignedchar*tx_buf)CE=0;/StandByI模式SPI_Wnte_Eiif(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);/装载接收端地址/装载数SPI_Wnte_Euf(WR_TX_PLOAIZtx.buf,TX_PLOAD_WIDTH);据IRQ收发完成中断响应,16SPI_RW_Reg(VRITE_REG+CONFIGOxOe);位CRC,主发送CE=1;置高CE,激发数据发送inerDelay_us(10);
18、*unsignedchartf=0;unsignedcharTxBuf10=0;/unsignedcharRxBuf10=0;*voidmain(void)/%单片机串11初始化SCON=Ox50;/SCON:模式1,8-bitUART,使能接收:REN=1TMOD=0 x20;THl=0 xfd;波特率9600初值TLl=Oxfd;TR1=1;EA=1打开总中断es=m/打开串11中断%/uiiCNRF24L01();上面保留三句移到了全局变量wlule(l)11RF24L01_TxPacket(TxBuf);/TransmitTxbufferdataDelav(lOOO);/SPI_RW_
19、Reg(WRITE_REG+STArUS、Oxfi);/清零状态寄存器?*SetRX_Mode();nRF24L01_RxPacket(RxBuf);SBUF=RxBuflO;/存放到本单片机串II输出?Delay(600);/?defineTXADRWIDTH5/5umtsTXaddresswidthdefineTXADRWIDTH5/5umtsTXaddresswidthvoidUART_SER()mteniipt4/uclwTemp;/定义临时变量if(RI)RI=0;标志位清零读入缓冲区的值TxBuflO=SBUF;/把输入的save到TxBuf里/Delay(1000);/?】f(T
20、I)如呆是发送标志位,清零TI=0;defineTXADRWIDTH5/5umtsTXaddresswidthdefineTXADRWIDTH5/5umtsTXaddresswidth以卜程序参考多个网络程序后,经调试并且己经调通,口J以稍加修改即可使用本程序实现功能:24L01接收到数据后通过52单片机串II输出到电脑端查看,同时又把数据回传(发送)实现双向通信#include#includetvpedefunsignedchaiuchar;*tvpedefunsignedchaiuint;祁*NRF24L01端I定义sbitMISO=P1A4;sbitMOSI=P1A3;sbitSCK=P
21、1A2;sbitCE=P1AO;sbitCSN=P1T;sbitIRQ=P1A5;#defineRX_ADR_WIDTH5/5umtsRXaddresswidth#defineRX_ADR_WIDTH5/5umtsRXaddresswidth/20umtsTXpayload/20umtsTXpayloaddefineEN_RXADDRdefineSETUP_AWdefineSETUP_RETRdefineRF_CHdefineRF_SETUPdefineSTATUSdefineOBSERVE.TXdefineCDdefineRX_ADDR_P0defineRX_ADDR_P1defineRX_
22、ADDR_P2defineRX_ADDR_P3defineRX_ADDR_P斗defineRX_ADDR_P5defineTX_ADDR#defineRX_PW_P0#defineRX_PW.P1#defineRX_PW_P2#defineRX_PW_P3#defineRX_PW_P4#defineRX_PW_P5defineFIFO.STATUS#defineTX_PLOAD_WIDTH10#defineRX_PLOAD_WIDTH10umtconstTX_ADDRESSTX_ADR_WIDTH=0 x34,0 x43,0 x10.Ox10.0 x01;本地地址umtconstRX_ADDR
23、ESSRX_ADR_WIDTH=0 x34.0 x43.0 x10,0 x10,0 x01;接收地址/*NRF24L01寄存器指令*defineREAD_REG0 x00/读寄存器指令#defineWRITE_REG0 x20/写寄存器指令defineRD_RX_PLOAD0 x61/读取接收数据指令#defineWR_TX_PLOADOxAO/写待发数据指令#defineFLUSH_TXOxEl/冲洗发送FIFO指令#defineFLUSH_RX0 xE2/冲洗接收FIFO指令#defineREUSE_TX_PL0 xE3/定义重复装载数据指令#defineNOPOxFF/保留*define
24、CONHGdefineEN_AA0 x00配置收发状态,CRC校验模式以及收发状态响应方式0 x01/自动应答功能设置0 x02可用信道设置0 x03/收发地址宽度设置0 x04/自动重发功能设置0 x05/工作频率设置0 x06/发射速率、功耗功能设置0 x07/状态寄存器0 x08/发送监测功能0 x09/地址检测0 x0A/频道0接收数据地址0 x0B/频道1接收数据地址0 x0C/频道2接收数据地址0 x0D/频道3接收数据地址0 x0E/频道4接收数据地址OxOF/频道5接收数据地址0 x10/发送地址寄存器0 x11接收频道0接收数据长度0 x12/接收频道0接收数据长度0 x13
25、/接收频道0接收数据长度0 x14/接收频道0接收数据长度0 x15接收频道0接收数据长度0 x16接收频道0接收数据长度0 x17/FIFO栈入栈出状态寄存器设置*voidDelay(unsignedmts);voidinerDelay_us(unsignedchain);voidinit_NRF24L01(void);umtSPI_RW(umtuchai);ucharSPI_R亡ad(ucharreg);voidSetRX_Mode(void);uiiitSPI_RW_Reg(uchaiuchaivalue);umtSPI_Read_Buf(ucharreg,uchar*pBuf.ucha
26、iuchais);umtSPI_Wnte_Buf(ucharreg,uchar*pBuf,ucliaruchais);unsignedchar11RF24L0l_RxPacket(unsignedchar*rx_buf);void11RF24L0l_TxPacket(unsignedchar*tx_buf);*长延时*voidDelay(unsignedmts)unsignedmti;for(i=0;is;i+);for(i=0;i0;n)_nop_();*NRF24L01初始化*/voidinit_NRF24L01(void)uierDelay_us(l00);CE=0;/cliipenab
27、leCSN=1;/SpidisableSCK=0;/SPI_WMe_Ei】f(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);/写本地地址SPI_WMe_Ei】f(WRITE_REG+RX_ADDR_P0.RX_ADDRESS,RX_ADR_WIDTH);/写接收端地址SPI_RW_Reg(WRITE_REG+EN_AA,0 x01);/频道0自动ACK应答允许SPI_RW_Reg(WRITE_REG+EN_RXADDR,0 x01);/允许接收地址只有频道0,如果需要多频道可以参考Page21SPI_RW_Reg(WRITE_REG+RF_CH,0);/
28、设置信道工作为2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);/设置接收数据长度,本次设置为32字节SPI_RW_Reg(VRITE_REG+RF_SETUP.0 x07);设置发射速率为1MHZ,发射功率为最人值OdE严*/*函数:uiiitSPI_RW(umtuchar)严功能:NRF24L01的SPI写时序严*/umtSPI_RW(umtuchai)uiiitbit_ctr;fbr(bit_ctr=0;bit_ctr8;bit_cti+)/output8-bitMOSI=(uchar&0 x80);uchar=(uch
29、ai1);SCK=1;uchar|=MISO:SCK=0;retuin(uchaij;/outputlichai;MSBtoMOSI/shiftnextbitintoMSE/SetSCKlugh./capturecurrentMISObit/.tliensetSCKlowagain/leturnreaduchar严*/*函数:uchaiSPI_Read(uchaneg)严功能:NRF24L01的SPI时序严*/ucharSPI_R亡ad(ucharreg)ucharreg_val;CSN=0;SPI_RW(reg);ieg_val=SPI_RW(0);CSN=1;/CSNlow,initial
30、izeSPIconununication.Selectregistertoreadfrom./.thenreadregistenTalueCSNhigh,terminateSPIcoininunication/leturnregistervalueretuin(reg_val);严*/*功能:NRF24L01读写寄存器函数严*/uiiitSPI_RW_Reg(uchaiuchaivalue)umtstatus;CSN=0;status=SPI.RW(reg);SPI_RW(value);CSN=1;/CSNlow、uiitSPItransaction/selectregister/.andwr
31、itevaluetoit./CSNhighagainreturn(status);/return11RF24L01statusuchar严*/*函数:uiiitSPI_Read_Buf(uchaiTeg,uchar*pBuucharuchais)/*功能:用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchais:读出数据的个数严*/umtSPI_Read_Buf(ucharreg,uchar*pBufuchaiuchais)umtstatus,uchar_ctr;CSN=0;status=SPI.RW(reg);/SetCSNlow,initSPItianaction/Sel
32、ectregistertowritetoandreadstatusucharfdr(uchai_cti-O;uchai_ctiuchais;uchai_cti+)pBuflucliaictr=SPI_RW(0);/CSN=1;return(status);/return11RF24L01statusuchar严*/*函数:umtSPI_Write_Buf(uchaneg,uchar*pBuf,uchaiuchais)严功能:用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchais:写入数据的个数严*/umtSPI_Wnte_Buf(ucharreg,uchar*pBuf,ucliar
33、uchais)umtstatus,uchar_ctr;CSN=0;/SPI使能status=SPI_RW(reg);fbr(uchai_cti-O;uchai_ctiuchars;uchar_ctr+)/SPI_RW(*pBufW);CSN=1;关闭SPIretuin(status);/严*/*函数:voidSetRX_Mode(void)严功能:数据接收配置严*/voidSetRX_Mode(void)CE=0;/IRQ收发完成中断响应,16SPI_RW_Reg(WRITE_REG+CONFIG.OxOf);位CRC,主接收CE=1;inerDelay_us(l30);严*,/*函数:unsignedchar11RF24L0l_RxPacket(unsignedchar*rx_buf)严功能:数据读取后放入rx_buf接收缓冲区中严*,unsignedchar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 弱电工程包合同范本
- 七年级地理上册 第一章 第二节 地球运动地球的自转运动教学设计 (新版)新人教版
- 安全技术评价评价单元的划分和评价方法的选择
- 任务膨胀岩土的工程地质分类课件
- 2025物业服务合同范本
- 2025物业代理合作合同
- 2025聘请合同长期企业法律顾问合同
- 2025办公室租赁合同精简版
- 《能量:3 电和磁》教学设计-2024-2025学年教科版科学六年级上册
- 2025河南省市政工程施工合同
- 外国教育史知到智慧树章节测试课后答案2024年秋山东师范大学
- 社区创建消防安全示范社区方案样本(4篇)
- 人教版-音乐-九年级下册-《隐形的翅膀》教学课件
- 甲醇合成工段设计
- 动态心电监测设备行业发展趋势预测及战略布局建议报告
- GB/T 19413-2024数据中心和通信机房用空气调节机组
- 工业自动化设备维护保养操作手册
- 与信仰对话 课件-2024年入团积极分子培训
- 2024年保安员业务知识考试复习题库及答案(共1000题)
- 公路水泥混凝土路面施工技术规范(JTGF30-2024)
- 2024《整治形式主义为基层减负若干规定》全文课件
评论
0/150
提交评论