模块推荐: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实验相关推荐

  1. PCM开发板模块实验指导--IIC主从实验

     模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762        25---IIC主读写固定寄存器地址实验:​​​​​​​ ...

  2. PCM开发板模块实验指导--有刷直流马达速度位置控制实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         44---有刷直流马达速度位置控制实验:          ...

  3. PCM开发板模块实验指导--有刷直流马达速度控制实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         43---有刷直流马达速度控制实验:            ...

  4. PCM开发板模块实验指导--触摸屏控制步进电机位置实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         65---触摸屏控制步进电机位置实验:           ...

  5. PCM开发板模块实验指导--触摸屏控制步进电机速度实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         64---触摸屏控制步进电机速度实验:           ...

  6. PCM开发板模块实验指导--SPI读写PSRAM64实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         32---SPI读写PSRAM64实验实验:        ...

  7. PCM开发板模块实验指导--有刷直流马达正反转实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         42---有刷直流马达正反转实验:             ...

  8. 微型计算机原理与应用实验指导书,微机原理与应用实验指导书-20180316.doc

    微机原理与应用实验指导书-20180316 PAGE PAGE 1微型计算机原理与应用实 验 指 导 书控制科学与工程学院实验中心山东大学二零一八年三月目 录汇编语言开发环境实验实验1-1 汇编语言程 ...

  9. c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...

    C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...

  10. java实验指导书 王立新,模拟电路实验指导书.doc

    模拟电路实验指导书.doc 模拟电路实验指导书 目录 一. 实验大纲 二. 实验一 常用电子仪器的使用 三. 实验二 单级交流放大电路 四. 实验三 射极输出器 五. 实验四 负反馈放大电路 六. 实 ...

最新文章

  1. TypeError: expected str, bytes or os.PathLike object, not module
  2. 京东《未来科技趋势白皮书》,101页pdf
  3. python 反转链表
  4. 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_idea 快捷键汇总(转)...
  5. Qt学习笔记-自绘时钟
  6. 智能运维 devops_Coffee Shop DevOps:如何使用反馈循环变得更智能
  7. 10款精美的web前端源码的特效
  8. 计算机二级题百度云,题库吧百度_计算机二级 office 题库 百度云 谢谢_淘题吧
  9. maya中英文对比_maya2017中英文对照表.doc
  10. 骨架屏Skeleton Screen
  11. 蓝牙电话之HFP-连接
  12. 我们是如何设计出,让玩家们有“上瘾症”的抽卡系统的
  13. CS229与《统计学习方法》的EM算法理解和比较,收敛性证明
  14. Java实现增删改查系统代码(全~纯干货)
  15. 驱动专题:第四章MTD及Flash驱动 3. nandflash 详细硬件特性
  16. 博雅互动 php 是否加班,【博雅互动工资|博雅互动待遇怎么样】-看准网
  17. 贷还是不贷:如何用Python和机器学习帮你决策?(zz)
  18. 高并发系统高可用设计方案(一)
  19. can总线短距离不用双绞线_CAN 总线(一) 物理层—屏蔽双绞线
  20. Java——serialize与deserialize

热门文章

  1. 常见文章、图文素材采集软件优缺点比较分析
  2. 居家第二十六天烤鸡翅
  3. BGP双线IDC机房的接入方式
  4. (附源码)Python学生兼职平台系统 毕业设计 160938
  5. Cortex-M3概述
  6. 离线安装vscode
  7. python豆瓣历史评分_python快速查豆瓣评分
  8. android获取本地连接ip地址,参照第二步将本地连接改成自动获取IP地址即可
  9. C++基于ATM的个人银行账户管理系统
  10. java走迷宫课程设计_java课程设计走迷宫.doc