nRF24L01无线通信模块使用简介(STC51)发送端
研一课设做过一个基于nRF24L01的无线温湿度传感器,在这里把C51单片机搭配nRF24L01的无线通信模块部分单独拿出来简单写一下,包含代码。
nRF24L01
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。(百度百科)
nRF2401的芯片封装图如下,共24pin。
这个芯片的最大特点是无需复杂的通信协议,程序简单,搭配C51就能跑,是小型无线传感器的首选,相比zigbee要简单不少。下面是市面上常见的基于该芯片的通信模块原理图。
针脚说明:
名称 | 功能 | |
---|---|---|
1 pin | GND | 地 |
2 pin | VCC | 电源 |
3 pin | CE | 使能端 |
4 pin | CSN | 片选端 |
5 pin | SCK | 时钟输入 |
6 pin | MOSI | 数据输入 |
7 pin | MISO | 数据输出 |
8 pin | IRQ | 中断输入 |
与C51连线(3pin~8pin引脚与C51的连接可自行更改,但是同时需要注意引脚初始化也应更改):
引脚初始化:
sbit CE = P1^0;
sbit CSN= P1^1;
sbit SCK= P1^2;
sbit MOSI= P1^3;
sbit MISO= P1^4;
sbit IRQ = P1^5;
下面废话少说直接给出代码:
这里给出发送端的代码,接收端代码见下一篇博客:)
#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址
#define TX_PLOAD_WIDTH 15 // 数据通道有效数据宽度
//sbit LED = P2^1;
sbit LED = P3^3;
sbit KEY1 = P3^1;
sbit KEY2 = P3^2;
uchar code TX_ADDRESS[5] = {
0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar flag;
uchar DATA = 0x01;
uchar bdata sta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
sbit CE = P1^5;
sbit CSN= P1^4;
sbit SCK= P1^3;
sbit MOSI= P1^2;
sbit MISO= P1^1;
sbit IRQ = P1^0;
uchar rec_dat[5]; //发送数据的数组
rec_dat[5] = {
0x01, 0x02, 0x03, 0x04, 0x05};
// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address