微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 SPI nRF24L01无线 可以放在2个单片机里实现通信

51单片机 SPI nRF24L01无线 可以放在2个单片机里实现通信

时间:11-19 来源:互联网 点击:
main.c

1 #include2 #include"2401.h"3 4 #define uint unsigned int5 #define uchar unsigned char6 7 sbit KEY8=P3^7;     //发送按键 8 sbit beep=P2^3;//喇叭 9 sbit LED6=P1^6;     ////接收到数据后的功能实现灯  10 11 void delay_ms(uint z)     //延时函数 12 {13     uint x,y;14     for(x=z;x>0;x--)15         for(y=110;y>0;y--);16 }17 void delayms(unsigned int x)18 {19     unsigned int i;20     while(x--)21         for(i=125;i>0;i--);22 }23 void main()24 {25      uchar Tx_Buf1[]={1};//发送的信息1 26      uchar Rx_Buf[32];  //接收到的数据暂存器,最多32字节数据  27      init_NRF24L01();28      LED6=1;//初始灯6熄灭   29 30 31     while(NRF24L01_Check())        //检查不到24l01则报警 32     {33         beep=0;34         delayms(200);35         beep=1;36         delayms(200);37     }38     while(1)39     {    40         RX_Mode();//接收模式  41         while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据 ,返回1则接收到数据 ,在等待接收数据期间,可以随时变成发送模式  42         {43             if(KEY8==0)     //按了按键8   则变成发送模式,发送对应数据,发送完后变成接收模式 44             {    45                 delay_ms(5);//消抖动 46                 if(KEY8==0)47                 {48                      while(!KEY8);49                     TX_Mode();     //发送模式 50                     nRF24L01_TxPacket(Tx_Buf1);    // 发送命令数据51                       LED6=0;52                     delay_ms(300);53                     LED6=1;54                     delay_ms(300);            //发送后LED6闪一下 55                     break;    //退出最近的循环,从而变回接收模式,这句关键56                  }57                 58              }59          }60          if(Rx_Buf[0]==1)       //若接收到对应的数据则实现对应功能 61          {62              Rx_Buf[0]=0;//清空数据 63                LED6=0;64              delay_ms(300);65              LED6=1;66              delay_ms(300);//接收到数据 后闪烁      67          }         68     }69 }



1 #ifndef __NRF24L01_H__2 #define __NRF24L01_H__3 #include4 #define uchar unsigned char5 #define uint unsigned int6 7 sbit    CE        =P1^0;8 sbit    CSN        =P1^1;9 sbit    SCK        =P1^2;10 sbit     MOSI    =P1^3;11 sbit     MISO    =P1^4;12 sbit    IRQ        =P1^5;13 14 //uchar TxBuf[20]={"1234567890abcdefghij"};15 #define TX_ADR_WIDTH    5       // 5 uints TX address width16 #define RX_ADR_WIDTH    5       // 5 uints RX address width17 #define TX_PLOAD_WIDTH  32      // 32 uints TX payload18 #define RX_PLOAD_WIDTH  32      // 32 uints TX payload19 uchar  TX_ADDRESS[TX_ADR_WIDTH]= {0xE7,0xE7,0xE7,0xE7,0xE7};    //本地地址20 uchar  RX_ADDRESS[RX_ADR_WIDTH]= {0xE7,0xE7,0xE7,0xE7,0xE7};    //接收地址21 ///***************************************NRF24L01寄存器指令*******************************************************22 #define READ_REG        0x00      // 读寄存器指令23 #define WRITE_REG       0x20     // 写寄存器指令24 #define RD_RX_PLOAD     0x61      // 读取接收数据指令25 #define WR_TX_PLOAD     0xA0      // 写待发数据指令26 #define FLUSH_TX        0xE1     // 冲洗发送 FIFO指令27 #define FLUSH_RX        0xE2      // 冲洗接收 FIFO指令28 #define REUSE_TX_PL     0xE3      // 定义重复装载数据指令29 #define NOP             0xFF      // 保留30 ///*************************************SPI(nRF24L01)寄存器地址****************************************************31 #define CONFIG          0x00  // 配置收发状态,CRC校验模式以及收发状态响应方式32 #define EN_AA           0x01  // 自动应答功能设置33 #define EN_RXADDR       0x02  // 可用信道设置34 #define SETUP_AW        0x03  //

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top