历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2019年12月18日 | 基于51单片机的nrf24l01无线的接受和发射程序

2019-12-18 来源:51hei

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

如果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

                                break;                                                        //退出最近的循环,从而变回接收模式,这句关键

                        }

                 }

                 if(Rx_Buf[0]==1)                                                           //若接收到对应的数据则实现对应功能 

                 {

推荐阅读

史海拾趣

Floeth Electronic Ltd公司的发展小趣事

Floeth Electronic Ltd公司的发展故事

故事一:技术创新与产品线拓展

Floeth Electronic Ltd自1987年在德国迪特FLOETH成立以来,始终致力于电力自动化领域的技术创新。公司最初专注于DC-DC转换器的研发与生产,针对工业、汽车及机载设备设计了能在极端温度(-40℃至+105℃)下稳定工作的产品。随着市场需求的变化,Floeth Electronic逐步扩展了其产品线,推出了包括转换器、驱动器、控制器、放大器、过滤器、逆变器和脉冲变压器在内的多种电力自动化产品。这些产品不仅满足了工业客户对高性能和可靠性的需求,还因其高绝缘性和符合EN/UL/CSA等安全法规认证而备受信赖。

故事二:台湾生产单元的建立

为了进一步提升产能和效率,Floeth Electronic于1994年在台湾桃园设立了生产单元。这一战略举措使得公司能够更灵活地应对亚洲市场的需求,并利用台湾成熟的电子制造业供应链优势。台湾生产单元专注于高精度、高效率的电力自动化产品生产,不仅提高了产品质量,还降低了生产成本。这一举措不仅增强了Floeth Electronic在全球市场的竞争力,也为其后续的发展奠定了坚实基础。

故事三:IGBT驱动器及控制器的高电压应用

在电力电子领域,IGBT(绝缘栅双极型晶体管)的应用日益广泛。Floeth Electronic凭借其深厚的技术积累,成功研发了高电压应用的IGBT驱动器及控制器,最高可达8kVAC MS。这些产品广泛应用于高压电力传输、工业电机控制等领域,以其卓越的性能和稳定性赢得了市场的广泛认可。这一技术的突破不仅提升了Floeth Electronic在电力自动化领域的地位,也为其在新能源、智能电网等新兴领域的发展提供了有力支持。

故事四:脉冲变压器的广泛应用

Floeth Electronic的脉冲变压器在雷达、变换技术等领域有着广泛的应用。这些变压器通过匹配负载电阻与馈线特性阻抗、升高或降低脉冲电压、改变脉冲极性等方式,实现了对复杂电路的高效控制。此外,脉冲变压器还广泛应用于变压器次级电路和初级电路的隔离应用,以及作为功率合成及变换元件等。这些产品的广泛应用不仅展示了Floeth Electronic在电力电子技术领域的深厚实力,也为其在更多领域的发展提供了可能。

故事五:国际合作与市场拓展

随着全球电子市场的不断融合与发展,Floeth Electronic积极寻求国际合作机会,以拓展其市场版图。公司与中国、美国等多个国家的知名企业建立了紧密的合作关系,共同研发和推广电力自动化产品。这些合作不仅为Floeth Electronic带来了先进的技术和管理经验,还帮助其更好地了解不同市场的需求和趋势。通过国际合作,Floeth Electronic不断提升其品牌影响力和市场竞争力,为全球客户提供更加优质的产品和服务。

CETC公司的发展小趣事

作为一家大型国有企业,CETC始终将社会责任放在首位。公司积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。同时,CETC还注重环保和可持续发展,在生产过程中采用环保材料和工艺,降低对环境的影响。这些举措不仅提升了公司的社会形象,也赢得了社会各界的广泛赞誉。

以上五个故事分别从科研突破、产业合作、海外市场布局、人才培养与团队建设以及社会责任等方面描述了CETC公司的发展过程。这些故事都是基于CETC在电子行业中的实际表现和公开资料进行的创作,旨在客观展现公司的发展历程和成就。当然,CETC的发展故事远不止这些,更多精彩的故事还需要我们进一步去发掘和了解。

DS-IMP公司的发展小趣事

DS-IMP公司在发展过程中,非常重视市场拓展和品牌建设。公司制定了详细的市场战略和营销计划,通过参加国内外展会、举办技术研讨会、开展产品推广活动等方式,不断提升品牌知名度和影响力。同时,公司还积极开拓国际市场,与多家国际知名企业建立了长期合作关系。这些努力使得公司的市场份额不断扩大,品牌影响力逐渐增强。

Akustica(Bosch)公司的发展小趣事

DS-IMP公司在发展过程中,非常重视市场拓展和品牌建设。公司制定了详细的市场战略和营销计划,通过参加国内外展会、举办技术研讨会、开展产品推广活动等方式,不断提升品牌知名度和影响力。同时,公司还积极开拓国际市场,与多家国际知名企业建立了长期合作关系。这些努力使得公司的市场份额不断扩大,品牌影响力逐渐增强。

Graseby Infrared公司的发展小趣事
在进行任何维修或检查前,必须先切断电源,确保电路处于安全状态。
Hitachi Chemical Co America Ltd公司的发展小趣事
检查控制线路的保险丝是否熔断,热继电器是否动作,停止按钮是否闭合良好,以及各控制按钮和接触器的触头是否接触良好。

问答坊 | AI 解惑

2006年湖北省电子设计大赛题目:智能搬运车

本帖最后由 paulhyde 于 2014-9-15 03:55 编辑 题目见附件  …

查看全部问答>

单片机与单片机之间的串口通信

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 单片机与单片机之间的串口通信  …

查看全部问答>

赛灵思编译测试应用软件关键文件

赛灵思编译测试应用软件关键文件: 1、xparameter.h文件   这个文件很重要,因为指明各硬件模块的属性和地址,比如最常用的XPAR_RS232_BASEADDR等,这个文件是只读的,最好不要修改,否则错误是不可预知的,呵呵 2、ld文件   也就是L ...…

查看全部问答>

两个单片机用串口通讯

可不可以将两个单片机的串口直接连接在一起进行通信? 我用的是MSP430,该单片机上有串口模块,我直接将两个单片机的串口连接在一起,从一个单片机发信息给另外一个单片机。 但是好像数据没有成功发送出去,因为另外一个单片机上没有接收到数据。 ...…

查看全部问答>

请问CE下有没有类似于win32下的dbgView这样的工具?

我现在要在一个板子上开发驱动,但是这个板子不能和电脑进行串口或网络连接,只能通过SD卡把程序拷贝上去运行来看结果如何? 请问CE下有没有类似于win32下的dbgView这样的工具,能够显示调试信息。…

查看全部问答>

在线等待!单片机上电后,IO口与地相连!

如题。我的单片机一上电,就出现地和IO口相连的情况,没加点时则没有相连...这是为什么呢?哪位能帮我分析一下吗?…

查看全部问答>

ST7的I2C

ST7中与I2C相关的寄存器可以直接访问吗?@tiny volatile    unsigned char I2CCR     @0x18;      @tiny volatile     ...…

查看全部问答>

汽车电子防盗跟踪系统工作原理及应用

目前,汽车被盗的情况时有发生,给车辆导航的也是借助于GPS 的定位显示器,它只需接收24颗地球同步卫星中的两颗以上(越多越精确)就可以显示出当前车辆的位置,但它只能接受信息而没有发射功能,故对于防盗没有作用。本设备使用简便,闭合W1,车主 ...…

查看全部问答>

贴片元件的手工焊接技巧

现在越来越多的电路板采用表面贴装元件,同传统的封装相比,它可以减少电路板的面积,易于大批量加工,布线密度高。贴片电阻和电容的引线电感大大减少,在高频电路中具有很大的优越性。表面贴装元件的不方便之处是不便于手工焊接。为此,本文以常见 ...…

查看全部问答>