基于51单片机的nrf24l01无线的接收和发射程序

2019-12-02来源: 51hei关键字:51单片机  nrf24l01  无线  接收  发射程序

通过灯的闪烁来判断数据的接受和发射
有接收端和发射段的程序

    如果24L01用reg51那么两个设备都要用reg51,如果用reg52就都得用reg52!
    PC通过串口发送给单片机命令[相当于协调器],单片机把命令通过24L01无线发送给另一个单片机,另一个单片机控制灯LED1,LED2,LED3,LED4闪烁。

无线发射程序:

#include"2401.h"


#define uint unsigned int

#define uchar unsigned char


//1//sbit KEY1=P0^0;                         //发送按键 

//1//sbit KEY2=P0^1;

//1//sbit KEY3=P0^2;

//1//sbit KEY4=P0^3;

sbit beep=P2^3;                                        //喇叭 

sbit LED6=P1^6;                                         //发送数据时显示灯+接收到数据后的功能实现灯


uchar Tx_Buf1[]={1};                        //发送的信息1 

uchar Rx_Buf[32];                                  //接收到的数据暂存器,最多32字节数据  

uchar uart_flag,a;                        //串口接收标志【收到数据就置1】,a为接收到的数据

/*------------------------------------------------

延时函数

------------------------------------------------*/

void delay_ms(uint z)                        //延时函数 

{

        uint y;

        while(z--)

                for(y=110;y>0;y--);

}

/*------------------------------------------------

定义UART_Init函数

------------------------------------------------*/

void UART_Init(void)

{

        SCON = 0x50;                 // 设定串行口工作方式,8位数据位,允许接收

    T2CON = 0x34;                 //设置定时器2,作为波特率发生器

        RCAP2L = 0XDC;          //9600波特率的低8位

        RCAP2H = 0XFF;                //9600波特率的高8位        

        ES = 1;                                 //允许串口中断

        EA = 1;                                 //允许总中断

}

/*------------------------------------------------

定义UART_Send_Byte函数

------------------------------------------------*/

void UART_Send_Byte(uchar byte)

{

        SBUF=byte;                          //缓冲区装载要发送的字节数据

        while(TI==0);                //等待发送完毕,TI标志位会置1

        TI=0;                                //清零发送完成标志位

}

/*------------------------------------------------

串口接收中断服务程序

------------------------------------------------*/

void UART(void) interrupt 4

{

        if(RI)                                   //检测接收完成标志位置1

        {

                RI=0;                        //清零接收完成标志位

                a=SBUF;                        //读取接收到的数据

                uart_flag = 1;        //中断标志位置1

        }

}

/*------------------------------------------------

main函数

------------------------------------------------*/

void main()

{

         LED6=1;                                //初始灯6熄灭   

         uart_flag=0;                        //串口标志初始为0

         init_NRF24L01();                //初始化24L01

         UART_Init();                    //初始化串口


         while(NRF24L01_Check())                                        //检查不到24l01则报警 

         {

                beep=0;

                delay_ms(200);

                beep=1;

                delay_ms(200);

         }

         while(1)

         {        

                RX_Mode();                                                        //接收模式  

                while(!nRF24L01_RxPacket(Rx_Buf))         //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  

            {

                        if(uart_flag==1)                                //当串口接受标志为1表示有数据过来

                        {

                                ES=0;                                                           //关串口中断

                        

                                TX_Mode();                                                 //发送模式 

                                Tx_Buf1[0]=a-'0';                                        //将串口数据给发送缓冲区

                            nRF24L01_TxPacket(Tx_Buf1);                //发送命令数据24L01

                                UART_Send_Byte('O');                        //向串口发送已经传送

                                UART_Send_Byte('K');

                                UART_Send_Byte(':');

                                UART_Send_Byte(a);

                                UART_Send_Byte('n');

                                LED6=0;

                            delay_ms(300);

                                LED6=1;

                            delay_ms(300);                                        //发送后LED1闪一下 


                                ES=1;                                                        //允许串口中断

uart_flag=0; //中断标志位置0

[1] [2] [3]
关键字:51单片机  nrf24l01  无线  接收  发射程序 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481663.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机应用之无线通讯模块NRF24L01+
下一篇:STC单片机+nRF24L01萝莉控遥控器发射机加接收机

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机功能特性介绍
诸多方面取得了优化平衡,是高性价比的单片机。AVR单片机内嵌高质量的Flash程序存储器,擦写方便,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的EEProm可长期保存关键数据,避免断电丢失。片内大容量的RAM不仅能满足一般场合的使用,同时也更有效的支持使用高级语言开发系统程序,并可像MCS-51单片机那样扩展外部RAM。AVR单片机的I/O线全部带可设置的上拉电阻、可单独设定为输入/输出、可设定(初始)高阻输入、驱动能力强(可省去功率驱动器件)等特性,使的得I/O口资源灵活、功能强大、可充分利用。AVR单片机片内具备多种独立的时钟分频器,分别供URAT、I2C、SPI使用。其中与8/16位定时器配合的具有
发表于 2019-12-14
avr单片机功能特性介绍
AVR系列单片机的主要特性及选型
AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点:在相同的系统时钟下AVR运行速度最快;芯片内部的Flsah、EEPROM、SRAM容量较大;所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有
发表于 2019-12-14
AVR系列单片机的主要特性及选型
PIC16F87x单片机存储器特点及数据存储器使用规划
,可以像MCS-51等其他系列的单片机一样使用变量了。当然还有一部分特殊寄存器是定义在BANK2~BANK3之间的。对于访问这些非页0内的特殊寄存器,必须进行页选择。访问完这些特殊寄存器,把页选择重新设置为BANK0,同时要注意在访问特殊寄存器过程中必须关闭中断(这与中断现场保护代码实现有关,参见下面中断处理部分)。在PIC单片机中,一般只是把与设置相关或者与外围相关的寄存器放在BANK1~BANK3。根据经验,除了在系统初始化部分代码中,在其他地方访问这些特殊寄存器是很少见的。至于访问这些特殊寄存器时要关中断,除了考虑下面保护现场的因素外,还有一个原因:这些特殊寄存器多是与外围相关和中断相关的,访问修改它们,从安全可靠角度也是应该要先关闭中断
发表于 2019-12-14
PIC16F87x单片机存储器特点及数据存储器使用规划
51单片机汇编学习例程(1)——KEY篇
1.ASM1_KEY:按键控制LED亮灭,3种情况/*********************************************************************************         @file            asm.asm*         @author          Alex——小白*         @vers
发表于 2019-12-14
51单片机汇编学习例程(1)——KEY篇
天山OLED白光烙铁单片机源码与使用手册V3.1.1
电容,运放VCC加104电容。⑤电容C5设计有误,实际不需要。1.1.2 智萌版硬件介绍①正面三个电容不需要焊接,否则无法下载程序;②建议MOS更换为AO4413.1.1.3 海绵宝宝版硬件介绍①单片机应改为STC15W2K60S2;1.2 烧录固件1.2.1 烧录步骤固件在Prj文件夹下Objects子文件夹内,文件名为HAKKO.hex。①将CH340模块连接焊台,先只接TX、RX、GND三根线,VCC不接;②按图1-1步骤勾选相关选项; 图1-1 STC-ISP软件操作步骤③将下载器VCC与焊台连接。1.2.2 烧录失败排查①编码器位置不合适,旋转编码器再试(请确保编码器转到位,不要卡在中间);②TX、RX接反
发表于 2019-12-14
天山OLED白光烙铁单片机源码与使用手册V3.1.1
三杯式风速传感器液晶显示单片机程序与实验报告
一、实验目的1.掌握三杯式风速传感器的工作原理;2.将三杯式风速传感器测得的风速(风由风扇提供)实时显示在液晶和上位机上;3.进一步掌握1602液晶的使用以及串口通讯;4.规范C的书写格式。二、实验原理三杯式风速传感器有一个测速码盘,当码盘转动并不断地通过三杯式风速传感器内部的光电传感器后,就会产生脉冲信号,脉冲信号触发单片机产生外部中断0,外部中断0对脉冲次数进行计数,定时器0中断设定1s的时间,并获取1s内的脉冲次数,然后通过公式:(脉冲次数*7)/80.0+0.1(注意:此处的80.0不能写成80,否则将会丢失风速的小数位,因为除以80得到的是整数)就可以计算出风速,然后就可以通过单片机将风速显示在液晶和上
发表于 2019-12-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved