




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、NRF24L01无线模块C语言程序欧阳引擎(2021.01.01)24MHz晶振#include#include#include#include#include #include#define U8 unsigned char#define U16 unsigned int#define TX_ADDR_WITDH 5/发送地址宽度设置为5个字节 #define RX_ADDR_WITDH 5/接收地址宽度设置为5个字节 #define TX_DATA_WITDH 1发送数据宽度 1 个字节#define RX_DATA_WITDH 1接收数据宽度1个字节 #define R_REGISTER
2、 0x00/ 读取配置寄存器 #define W_REGISTER 0x20/ 写配置寄存器 #define R_RX_PAYLOAD 0x61/ 读取 RX 有 效数据 #define W_TX_PAYLOAD OxaO/ 写 TX 有 效数据 #define FLUSH_TX Oxel/ 清除 TXFIFO 寄存器 #define FLUSH_RX 0xe2/ 清除 RXFIFO 寄存器 #define REUSE_TX_PL 0xe3/重新使用上一包有效数据 #define NOPOxff/空操作#define CONFIG 0x00/配置寄存器#define EN_AA 0x01/使能
3、自动应答 #define EN_RXADDR 0x02/接收通道使能0-5个通道欧阳引擎创编5#defineSETUP_RETR0x04/建立自动重发#defineRF_CH0x05/ 射频通道设置#defineRF_SETUP0x06/射频寄存器#defineSTATUS0x07/状态寄存器#defineOBSERVE_TX0x08/发送检测寄:存器#define SETUP_AW 0x03/设置数据通道地址宽度3#define CD0x09 载波 #defineRX_ADDR_P00x0a/数据通道0接收地址#define RX_ADDR_P1 OxOb/数据通道1接#defineRX_A
4、DDR_P3OxOd/数据通道3接收地址#defineRX_ADDR_P4OxOe/数据通道4接收地址#defineRX_ADDR_P5OxOf/数据通道5接收地址#defineTX_ADDR0x10/ 发 送 地 址#defineRX_PW_P0Oxll/PO通道数据宽度设置#defineRX_PW_P10X12/P1通道数据宽度设置#defineRX_PW_P20X13/P2通道数据宽度设置#defineRX_PW_P30X14/P3通道数据宽度设置#defineRX_PW_P40X15/P4通道数据宽度设置#defineRX_PW_P50X16/P5通道数据宽度设置#defineFIFO
5、_STATUS0X17/FIF 0状态寄存器2接收地址收地址#define RX_ADDR_P2OxOc/数据通道/NRF24L01U8NRFACK();U8 NRFSPI(U8 date);U8NRFReadReg(U8 RegAddr);U8 NRFWriteReg(U8 RegAddr,U8 date);U8 NRFReadRxDate(U8 RegAddr,U8 *RxDate,U8 DateLen);U8 NRFWriteTxDate(U8 RegAddr,U8 *TxDate,U8 DateLen);U8 NRFRevDate(U8 *RevDate);void NRFSetTxM
6、ode(U8 *TxDate);void NRF24L0 llnt();void NRFSetRXMode();U8 CheckACK();void Delay(U16 t);U8 bdata sta;/mainvoid Delay_10ms(U16 del);bit CE=P1A4; /RX/TX 模式选择端 sbit IRQ二PIT;/可屏蔽中断 端 sbit CSN=P1A6; /SPI 片选端就杲 SSsbit MOSI=P1A0;/SPI 主 机输出从机输入端lsbit MISO二Pl八2;/SPI主机输入从机输出端 sbit SCLK=P1A3;/SPI 时钟端U8 code Tx
7、Addr=0x34,0x43,Ox 10,0x 10,0x01);/发送地址U8 bdata sta; 状态标志 sbit RX_DR=staA6;sbitTX_DS=staA5;sbit MAX_RT=staA4;void Delay(U16 t) U16 x,y; for(x=t;x0;x) for(y=l 10;y0;y );U8 NRFSPI(U8 date)U8i;for(i=0;i8;i+)循 环 8次 if(date&0x80) MOSI=1; else MOSI=0; / byte 最高 位输出到MOSI date= 1;/低一位移位到最高位 SCLK=1; if(MISO)
8、拉高 SCK, nRF24L01 从 MOSI 读入1位数据,同时从MISO输出1位数据datel=0x01; / 读 MISO 到 byte 最低位 SCLK=0;/SCK 置低 return(date); 返回读出的一字节丹0:1 NRF24L01Int() Delay(2);/让系统什么都 不 干 CE=0; 待 机模式 1 CSN=1; SCLK=0; IRQ=1; U8 NRFReadReg(U8 RegAddr) U8 BackDate; CSN=0;/启动时 序NRFSPI(RegAdck);/ 写 寄 存 器 地址 BackDate=NRFSPI(OxOO);/写入读寄存器指
9、令 CSN=1; return(BackDate); 返回状态U8 NRFWriteReg(U8 RegAddr,U8 date) U8 BackDate; CSN=0;/ 启动时 序 BackDate=NRFSPI(RegAddr);/ 写入地址 NRFSPI(date);/ 写 入 值 CSN=1; return(BackDate);U8 NRFReadRxDate(U8 RegAddr,U8 *RxDate,U8 DdteLen) /寄存器地址读取数据存放 变量读取数据长度用于接收U8 BackDate,i; CSN=0;启动时 序BackDate=NRFSPI(RegAddr);/写入
10、要读取的寄存器地 址 for(i=0;i RxDatei=NRFSPI(O); CSN=1; return(Bac kDate);U8 NRFWriteTxDate(U8 RegAddr,U8 *TxDate,U8 DateLen) /寄存器地址写入数据存放变量读取数据长度用于 发送 U8 BackDatej; CSN=0; BackDate=NRFSPI(RegAddr);/ 写 入 要 写 入 寄 存 器 的 地 址 for(i=0;i NRFSPI(*TxDate+); CSN=1; return(Bac kDate);void NRFSetTxMode(U8 *TxDate)/ 发送模
11、 式 CE=0; NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);/写寄存器指令+接收地址使能指令+接收 地址+地址宽度 NRFWriteTxDate(W_REGISTER+RX_ADDR_PO,TxAddr,TX_ ADDR_WITDH);/为了应答接收设备,接收通道0地址和发送 地址相同 NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WIT DH);/写入数据 NRFWriteReg(W_REGISTER+EN_AA,0x01); / 使能接收 通道0自动应答 NRFWiiteReg(W
12、_REGISTER+EN_RXADDR,0x01); / 使能 接收通道0 NRFWriteReg(W_REGISTER+SETUP_RETR,OxOa); / 自动重 发延时等待 250us+86us , 自动重发 10 次 NRFWriteRcg(W_REGISTER+RF_CH,0x40); / 选择射频 通道 0x40 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); / 数据传输率1Mbps,发射功率OdBm,低噪声放大器增 益 NRFWriteRcg(W_REGISTER+CONFIG,OxOe); / CRC 使 能,16位CRC校验,上电CE=l;D
13、elay(5);/保持10us秒以 上 主 要 接 收 模 式 void NRFSetRXMode() CE=0; NRFWriteTxDate(W_REGISTER+RX _ADDR_PO,TxAddr,TX_ADDR_WITDH); / 接收设备接收通道 0 使用和发送设备相同的发送地址 NRFWritcReg(W_REGISTER+EN_AA,0x01);/ 使能接 收 通 道 0 自 动 应 答 NRFWriteReg(W_REGISTER+EN_RX ADDR,0x01);/使能接收通道0 NRFWriteReg(W_REGISTER+RF_CH,0x40);/ 选择射频通道0x40
14、 NRFWriteReg(W_REGISTER+RX_PW_PO,TX_DATA_WI TDH); /接收通道0选择和发送通道相同有效数据宽 度 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); / 数 据传输率1Mbps,发射功率OdBm,低噪声放大器增益 */ NRFWriteReg(W_REGISTER+CONFIG,OxOf); / CRC 使能,16位CRC校验,上电,接收模式CE= l;Delay(5);保 持 1 Ous秒以上 U8 CheckACK() /用于发 射 sta=NRFReadReg(R_REGISTER+STATUS);/ 返回状态寄存
15、器if(TX_DSIIMAX_RT) 发送完毕中 断 NRFWriteReg(W_REGISTER+STATUS,Oxff); / 清除 TX_DS或MAX.RT中 断 标志 CSN=O; NRFSPI(FLUSH_TX);/用于清空 FIFO ! !关 键!不然会出现意想不到的后果!大家记 住! CSN=1; return(O); else return(l);/用于接收模式 U8NRFRevDate(U8*RevDate)U8RevFlags=O; sta=NRFReadReg(R_REGISTER+STATUS);/发送数据后读取状态寄存器 if(RX_DR) 判断是否接收到数 据CE=
16、0;/SPI使能 NRFR*dRxDatc(R_RX_PAYLOAD,RevDdte,RX_DATA_WI TDH);/从RXFIFO读取数据RevFlags=l; 读取数据完成标 志 NRFWriteReg(W_REGISTER+STATUS,Oxff); 接收到数 据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中 断标 return(RevFlags);)void Delay_10ms(U16 del) U16 i,j; for(i=0; idel; i+) for(j=0; jvl827;j+) 这个是通过软件仿真得出的数;/做发射main() U8TxDatel=0; NRF24L01Int(); Delay(6000); whiled) if(KEY= =0) if(KEY=0) Delay_10ms(2); TxDate0=0x08;/ 发射 按键标识值 NRFSctTxMode(TxDnte); while(CheckACK();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年贵州省专业技术人员公需科目试题及答案
- 2025年病历书写基本规范培训考核试题及答案
- 2024-2025学年高二数学上学期第四周 直线、圆的位置关系说课稿
- 2025年安全生产月安全生产知识竞赛抢答题库及答案
- 活动二 家中安全小卫士教学设计小学综合实践活动蒙沪版三年级上册-蒙沪版
- 2025年信息系统监理师常见考点试题及答案
- 科技金融与我国经济高质量发展-基于线性传导与门槛效应双重视角
- 羽毛球制作工岗前安全实践考核试卷含答案
- 井筒冻结工创新应用能力考核试卷含答案
- 电力电容器及其装置制造工岗前沟通协调考核试卷含答案
- 2025四川绵阳市粮油集团有限公司招聘财务管理等岗位5人笔试题库历年考点版附带答案详解
- 2025年《长征》试题及答案
- 企业财务制度规范范本合集
- 2025员工试用期间合同范本下载
- 钢结构施工方案样本
- Unit4WonderfulseasonsGetreadyandstartup(课件)-外研版英语四年级上册
- 仓库人员安全培训模板课件
- 2024版2025秋贵州黔教版综合实践活动一年级上册全册教案教学设计
- 2025太原市热力集团有限责任公司社会招聘100人考试参考题库及答案解析
- 2025-2026学年(部编版)五年级上册语文教案(全册)
- 2025年气道相关管理试题及答案(EICU)
评论
0/150
提交评论