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 //
51单片机SPInRF24L01无通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)