PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验

        70---2.4G无线通讯模块NRF24L01实验

                硬件需求:PC机,PCM模块2个,microUSB 线2条,2.4G无线通讯模块NRF24L01 共

                2个,导线若干;

                软件需求:PCM编译软件,串口调试助手;

                供电方式:USB线接PC机供电;

                连接电路:如图2-60-1

PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验_第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为实验过程中的截图。

PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验_第2张图片 

        图2-60-2         2.4G无线通讯模块NRF24L01实验串口输出

你可能感兴趣的:(ESP32,单片机,嵌入式硬件)