PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
70---2.4G无线通讯模块NRF24L01实验
硬件需求:PC机,PCM模块2个,microUSB 线2条,2.4G无线通讯模块NRF24L01 共
2个,导线若干;
软件需求:PCM编译软件,串口调试助手;
供电方式:USB线接PC机供电;
连接电路:如图2-60-1
图2-60-1 2.4G无线通讯模块NRF24L01实验电路图
NRF24L01无线通讯模块可以实现点对点的通讯,2.4G通讯频率,通讯速度可达
2Mbps.多达125个通讯通道,可以有效避免多个模块在一起的时候出现干扰的情况。
本实验使用2个开发板模块,2个无线模块,连接电路如下图所示,通过USB接口连
接电脑,在电脑端同时开启2个串口调试助手,选择好各自的串口号,波特率。
2套装置我们分别编号为装置1,装置2.具体调试如下:
程序中我们采用串口助手发送一个字节的方式表示设置接收字节数,并且使用HEX
发送;发送多个字节表示要发送的数据,采用ASC码方式发送;
首先通过串口调试助手设置装置1的接收字节数,比如我们想接收6个字符,在串口
调试助手发送区输入06,选择HEX发送,点击发送,串口接收区会马上收到:set rx len
= 6 bytes,表示已经设置好接收字节数为6个字节;
然后我们在连接装置2个串口助手中的发送区输入:ABCDEF,共6个字母,选择取
消HEX发送的勾,然后点击发送,装置1的串口助手马上会收到:24l01 recieved string
is ABCDEF, 24l01 recieved 6 bytes ;表示通讯成功了。
如果要发送不同长度的字符,要重新设置接收数,发送端的字符数一定要等于接收
端的字符数,不然数据不会被接收。
装置1发送给装置2的方法也是一样,要先设置好装置2的接收数量,然后装置1再发
送相同数量的字符过去。
实验程序如下:
装置1程序:
1 intpro rxint //数据接收完成中断程序,注意:接收到指定的字节数,多一个少一个
//都不行
2 prints "PCM01 recieved string is %s\r\n" d10 0 //输出接收的字符串
3 prints "PCM01 recieve %d bytes\r\n" d38 //输出接收的字符数,实际就是设定
//的字符数
4 endint
5 intpro txint //数据发送成功中断程序,只有当对方成功接收到数据才会执行此中断
6 prints "PCM01 send finish\r\n" //输出发送完成信息
7 endint
8 intpro serialrecvint //串口接收中断程序
9 if d19 = 1 //判断接收到的字节数,如果为一个字节,表示要设置无线模块的接收
//字节数,注意:上位机最好用HEX格式发送数据
10 mov d20 d38 //串口接收到的数据保存到D38中
11 and hff d38 d38 //只有最低字节有效,所以把高3字节清零
12 2401rx d0 d4 d10 d38 s0 //重新启动数据接收
13 prints "set rx len = %d bytes\r\n" d38 //输出要接收的字节数
14 else //如果大于一个字节,表示是让无线模块发送数据出去,上位机用HEX或
//ASC格式都可以
15 prints "serial recieve %d bytes\r\n" d19 //输出上位机发送的字节数
16 prints "now send from PCM01 to PCM02\r\n" //打印准备发送的信息
17 prints "send string is \"%s\"\r\n" d20 0 //准备发送的字符串
//启动发送指令,D2为接收方的名称,D4为通道号50,D20为要发送的数据起始
//寄存器,D19为要发送的字节数,发送成功并且对方接收到数据,S1会置位
18 2401tx d2 d4 d20 d19 s1
19 endif
20 endint
21 main
22 intinit s2 serialrecvint //开启串口接收中断程序
//串口0,即板载USB转串口初始化,波特率115200,接收的数据存放在D20起始的
//寄存器中,接收数据长度存放D19中,接收到数据会置位S2
23 serial 0 115200 d20 d19 s2
24 strcopy "PCM01" D0 //设置本无线模块的名称,5个字符,所以会占用D0,D1
//共2个寄存器,所以这2个寄存器不要在其他地方再使用
25 strcopy "PCM02" D2 //设置对方无线模块的名称,5个字符,所以会占用D2,D3
//共2个寄存器,所以这2个寄存器不要在其他地方再使用
26 intinit s0 rxint // 开启无线模块接收到数据中断程序
27 intinit s1 txint // 开启无线模块发送完数据中断程序,只有当接收方成功接收到
//数据才会产生此中断
28 2401init x0 y0 y1 2 //初始化无线模块,开发板模块的X0接无线模块的IRQ,
//Y0接CE,Y1接CSN,最后参数为2表示SPI速度为8MHz
29 mov 50 d4 //d4=50,通道号50
30 mov 32 d38 //D38=32,最大接收32字节
//启动无线模块数据接收,D2为名称,D4为通道号,D10为接收数据的起始寄存器
//地址,D38为要接收数据字节数,接收完数据后会置位S0
31 2401rx d0 d4 d10 d38 s0
32 while 1 //无限循环
33 endwhile
34 endmain
程序中第1-4行,为24L01数据接收中断程序,中接收的字节数等于设置的字节数时
执行此中断程序;
第5-7行,为24L01数据发送成功中断程序,只有当对方成功的接收到发送的数据后
才会执行此中断程序;
第8-20行,为串口接收中断程序,程序中判断接收的字节数,如果只有一个字节,
表示要设置24L01接收数据的字节数。如果串口接收的字节数大于1,就让24L01将串口
接收的数据发送出去;
第21-34行,为主程序,程序先初始化串口,再初始化24L01,并开启发送接收数据
中断,输入端口X0作为24L01的中断脚,输出口Y0作为24L01的失能脚,输出口Y1作为
24L01的片选脚。最后启动24L01数据接收程序。
装置2程序:
1 intpro rxint //数据接收完成中断程序,注意:接收到指定的字节数,多一个少一个都
//不行
2 prints "24l01 recieved string is %s\r\n" d10 0 //输出接收的字符串
3 prints "24l01 recieve %d bytes\r\n" d38 //输出接收的字符数,实际就是设定的字
//符数
4 endint
5 intpro txint //数据发送成功中断程序,只有当对方成功接收到数据才会执行此中断
6 prints "PCM02 send finish\r\n" //输出发送完成信息
7 endint
8 intpro serialrecvint //串口接收中断程序
9 if d19 = 1 //判断接收到的字节数,如果为一个字节,表示要设置无线模块的接收
//字节数,注意:上位机最好用HEX格式发送数据
10 mov d20 d38 //串口接收到的数据保存到D38中
11 and hff d38 d38 //只有最低字节有效,所以把高3字节清零
12 2401rx d2 d4 d10 d38 s0 //重新启动数据接收
13 prints "set rx len = %d bytes\r\n" d38 //输出要接收的字节数
14 else //如果大于一个字节,表示是让无线模块发送数据出去,上位机用HEX或
//ASC格式都可以
15 prints "serial recieve %d bytes\r\n" d19 //输出上位机发送的字节数
16 prints "now send from PCM02 to PCM01\r\n" //打印准备发送的信息
17 prints "send string is \"%s\"\r\n" d20 0 //准备发送的字符串
//启动发送指令,D0为接收方的名称,D4为通道号50,D20为要发送的数据起始寄
//存器,D19为要发送的字节数,发送成功并且对方接收到数据,S1会置位
18 2401tx d0 d4 d20 d19 s1
19 endif
20 endint
21 main
22 intinit s2 serialrecvint //开启串口接收中断程序
//串口0,即板载USB转串口初始化,波特率115200,接收的数据存放在D20起始的
//寄存器中,接收数据长度存放D19中,接收到数据会置位S2
23 serial 0 115200 d20 d19 s2
24 strcopy "PCM01" D0 //设置对方无线模块的名称,5个字符,所以会占用D0,D1
//共2个寄存器, 所以这2个寄存器不要在其他地方再使用
25 strcopy "PCM02" D2 //设置本无线模块的名称,5个字符,所以会占用D2,D3
//共2个寄存器,所以这2个寄存器不要在其他地方再使用
26 intinit s0 rxint // 开启无线模块接收到数据中断程序
27 intinit s1 txint // 开启无线模块发送完数据中断程序,只有当接收方成功接收到
//数据才会产生此中断
28 2401init x0 y0 y1 2 //初始化无线模块,开发板模块的X0接无线模块的IRQ,Y0
//接CE,Y1接CSN,最后参数为2表示SPI速度为8MHz
29 mov 50 d4 //d4=50,通道号50
30 mov 32 d38 //D38=32,最大接收32字节
//启动无线模块数据接收,D2为名称,D4为通道号,D10为接收数据的起始寄存器
//地址,D38为要接收数据字节数,接收完数据后会置位S0
31 2401rx d2 d4 d10 d38 s0
32 while 1 //无限循环
33 endwhile
34 endmain
以上程序可以看出装置1与装置2的程序除了设置本机名称和要发送的名称不一样,
其他地方都是一样的。下图2-60-2为实验过程中的截图。
图2-60-2 2.4G无线通讯模块NRF24L01实验串口输出
PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验相关推荐
- PCM开发板模块实验指导--IIC主从实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 25---IIC主读写固定寄存器地址实验: ...
- PCM开发板模块实验指导--有刷直流马达速度位置控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 44---有刷直流马达速度位置控制实验: ...
- PCM开发板模块实验指导--有刷直流马达速度控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 43---有刷直流马达速度控制实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机位置实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 65---触摸屏控制步进电机位置实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机速度实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 64---触摸屏控制步进电机速度实验: ...
- PCM开发板模块实验指导--SPI读写PSRAM64实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 32---SPI读写PSRAM64实验实验: ...
- PCM开发板模块实验指导--有刷直流马达正反转实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 42---有刷直流马达正反转实验: ...
- 微型计算机原理与应用实验指导书,微机原理与应用实验指导书-20180316.doc
微机原理与应用实验指导书-20180316 PAGE PAGE 1微型计算机原理与应用实 验 指 导 书控制科学与工程学院实验中心山东大学二零一八年三月目 录汇编语言开发环境实验实验1-1 汇编语言程 ...
- c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...
C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...
- java实验指导书 王立新,模拟电路实验指导书.doc
模拟电路实验指导书.doc 模拟电路实验指导书 目录 一. 实验大纲 二. 实验一 常用电子仪器的使用 三. 实验二 单级交流放大电路 四. 实验三 射极输出器 五. 实验四 负反馈放大电路 六. 实 ...
最新文章
- TypeError: expected str, bytes or os.PathLike object, not module
- 京东《未来科技趋势白皮书》,101页pdf
- python 反转链表
- 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_idea 快捷键汇总(转)...
- Qt学习笔记-自绘时钟
- 智能运维 devops_Coffee Shop DevOps:如何使用反馈循环变得更智能
- 10款精美的web前端源码的特效
- 计算机二级题百度云,题库吧百度_计算机二级 office 题库 百度云 谢谢_淘题吧
- maya中英文对比_maya2017中英文对照表.doc
- 骨架屏Skeleton Screen
- 蓝牙电话之HFP-连接
- 我们是如何设计出,让玩家们有“上瘾症”的抽卡系统的
- CS229与《统计学习方法》的EM算法理解和比较,收敛性证明
- Java实现增删改查系统代码(全~纯干货)
- 驱动专题:第四章MTD及Flash驱动 3. nandflash 详细硬件特性
- 博雅互动 php 是否加班,【博雅互动工资|博雅互动待遇怎么样】-看准网
- 贷还是不贷:如何用Python和机器学习帮你决策?(zz)
- 高并发系统高可用设计方案(一)
- can总线短距离不用双绞线_CAN 总线(一) 物理层—屏蔽双绞线
- Java——serialize与deserialize