nRF24L01无线通信模块使用手册 - 图文
更新时间:2024-04-24 09:20:01 阅读量: 综合文库 文档下载
- nbiot无线通信模块推荐度:
- 相关推荐
深圳市德普施科技有限公司
nRF24L01无线通信模块使用手册
一、模块简介 该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:
1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm
2.2Mbps,传输速率高
3.功耗低,等待模式时电流消耗仅22uA
4.多频点(125个),满足多点通信及跳频通信需求 5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线) 6.工作原理简介:
发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
二、模块电气特性
参数 供电电压 最大发射功率 最大数据传输率 电流消耗(发射模式,0dBm) 电流消耗(接收模式,2Mbps) 电流消耗(掉电模式) 温度范围
三、模块引脚说明
管脚 1 2 3 4 5 6
数值 5 0 2 11.3 12.3 900 -40~+85 单位 V dBm Mbps mA mA nA ℃ 符号 GND IRQ MISO MOSI SCK NC 1
功能 电源地 中断输出 SPI输出 SPI输入 SPI时钟 空 方向 O O I I 深圳市德普施科技有限公司
7 8 9 10 NC CSN CE +5V 空 芯片片选信号 工作模式选择 电源 I I
四、模块与AT89S52单片机接口电路
VCC P1.0 P1.1 CN CN P1.2 P1.3 P1.4 P3.2 GND AT89S52MCU模块
+5V CE CSN CN CN SCK MOSI MISO IRQ GND Nrf24L01通讯模块
注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU模块时,请将Nrf24L01通
讯模块每个端口(MOSI、SCK、CSN和CE)接4.7K的排阻上拉到VCC增强其驱动能力(如下图:)。若使用其它单片机与Nrf24L01通讯模块相连时请串联2K电阻。
2
深圳市德普施科技有限公司
五、工作模式控制 工作模式由CE和PWR_UP、PRIM_RX两寄存器共同控制: 模式 PWR_UP PRIM_RX CE FIFO寄存器状态 接收模式 发射模式 发射模式 待机模式II 待机模式I 掉电模式 1 1 1 1 1 0 1 0 0 0 - - 1 11 0→12 1 0 - - 数据存储在FIFO寄存器中,发射所有数据 数据存储在FIFO寄存器中,发射一个数据 TX FIFO为空 无正在传输的数据 - 注1:进入此模式后,只要CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据数据发射完毕,之后进入待机模式II。
注2:正常的发射模式,CE端的高电平应至少保持10us。24L01将发射一个数据包,之后进入待机模式I。
六、数据和控制接口
通过以下六个引脚,可实现模块的所有功能: ①IRQ(低电平有效,中断输出)
②CE(高电平有效,发射或接收模式控制) ③CSN(SPI信号) ④SCK(SPI信号) ⑤MOSI(SPI信号)
⑥MISO(SPI信号) 通过SPI接口,可激活在数据寄存器FIFO中的数据;或者通过SPI命令(1个字节长度)访问寄存器。
在待机或掉电模式下,单片机通过SPI接口配置模块;在发射或接收模式下,单片机通过SPI接口接收或发射数据。
1.SPI指令 所有的SPI指令均在当CSN由低到高开始跳变时执行;从MOSI写命令的同时,MISO实时返回24L01的状态值;SPI指令由命令字节和数据字节两部分组成。
SPI命令字节表
指令名称 指令格式(二进制) 000A AAAA 001A AAAA 0110 0001 字节数 操作说明 R_REGISTER W_REGISTER R_RX_PAYLOAD 1~5 1~5 1~32 读寄存器。AAAAA表示寄存器地址。 写寄存器。AAAAA表示寄存器地址,只能在掉电或待机模式下操作。 在接收模式下读1~32字节RX有效断气。从字节0开始,数据读完后,FIFO寄存器清空。 W_TX_PAYLOAD FLUSH_TX
1010 0000 1110 0001 1~32 0 3
在发射模式下写1~31字节TX有效数据。从字节0开始。 在发射模式下,清空TX FIFO寄存器。 深圳市德普施科技有限公司
FLUSH_RX 1110 0010 0 在接收模式下,清空RX FIFO寄存器。在传输应答信号时不应执行此操作,否则不能传输完整的应答信号。 REUSE_TX_PL 1110 0011 0 应用于发射端。重新使用上一次发射的有效数据,当CE=1时,数据将不断重新发射。在发射数据包过程中,应禁止数据包重用功能。 NOP
1111 1111 0 空操作。可用于读状态寄存器。 2.SPI时序
SPI读写时序见下面两图。在写寄存器之前,一定要进入待机模式或掉电模式。其中,
Cn——SPI指令位;Sn——状态寄存器位;Dn——数据位(低字节在前,高字节在后;每个字节中高位在前)
SPI读时序
SPI写时序
七、寄存器内容及说明 地址 (十六进制) 00 MASK_RX_DR 6 0 R/W 寄存器 CONFIG Reserved 位 7 复位值 0 类型 R/W 配置寄存器 默认为0 可屏蔽中断RX_RD 1:中断产生时对IRQ没影响 0:RX_RD中断产生时,IRQ引脚为低 可屏蔽中断TX_RD MASK_TX_DS 5 0 R/W 1:中断产生时对IRQ没影响 0:TX_RD中断产生时,IRQ引脚为低 MASK_MAX_RT 可屏蔽中断MAX_RT 4 0 R/W 1:中断产生时对IRQ没影响 0:MAX_RT中断产生时,IRQ引脚为低 说明 4
深圳市德普施科技有限公司
EN_CRC 3 1 R/W CRC使能。如果EN_AA中任意一位为高,则EN_CRC为高。 CRC校验值: 0:1字节 1:2字节 0:掉电 1:上电 0:发射模式 1:接收模式 使能“自动应答”功能 7:6 5 4 3 2 1 0 7:6 5 4 3 2 1 0 7:2 00 1 1 1 1 1 1 00 0 0 0 0 1 1 000000 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W 默认为00 数据通道5自动应答使能位 数据通道4自动应答使能位 数据通道3自动应答使能位 数据通道2自动应答使能位 数据通道1自动应答使能位 数据通道0自动应答使能位 接收地址允许 默认为00 数据通道5接收数据使能位 数据通道4接收数据使能位 数据通道3接收数据使能位 数据通道2接收数据使能位 数据通道1接收数据使能位 数据通道0接收数据使能位 设置地址宽度(所有数据通道) 默认为00000 接收/发射地址宽度: 00:无效 01:3字节 10:4字节 11:5字节 自动重发 自动重发延时时间: 0000:250us 0001:500us ?? 1111:4000us CRCO 01 02 03 AW 1:0 11 R/W PWR_UP PRIM_RX EN_AA Enhanced ShockBurst? Reserved ENAA_P5 ENAA_P4 ENAA_P3 ENAA_P2 ENAA_P1 ENAA_P0 EN_RXADDR Reserved ERX _P5 ERX _P4 ERX _P3 ERX _P2 ERX _P1 ERX _P0 SETUP_AW Reserved 2 1 0 0 0 0 R/W R/W R/W 04 SETUP_RETR ARD 7:4 0000 R/W ARC 3:0 0011 R/W 自动重发计数: 0000:禁止自动重发 0001:自动重发1次 5
深圳市德普施科技有限公司
?? 1111:自动重发15次 05 06 RF_DR RF_PWR 2:1 11 R/W 3 1 R/W RF_CH Reserved RF_CH RF_SETUP Reserved PLL_LOCK 7 6:0 7:5 4 0 0000010 000 0 R/W R/W R/W R/W 射频通道 默认为0 设置工作通道频率 射频寄存器 默认为000 锁相环使能,测试下使用 数据传输率: 0:1Mbps 1:2Mbps 发射功率: 00:-18dBm 01:-12dBm 10:-6dBm 11:0dBm 07 RX_DR TX_DS 5 0 R/W 6 0 R/W LNA_HCURR STATUS Reserved 0 7 1 0 R/W R/W 低噪声放大器增益 状态寄存器 默认值为0 接收数据中断位。当收到有效数据包后置1。 写‘1’清除中断 发送数据中断。如果工作在自动应答模式下,只有当接收到应答信号后置1。 写‘1’ 清除中断 重发次数溢出中断。 写‘1’清除中断。 如果MAX_RT中断产生,则必须清除后才能继续通讯 接收数据通道号: 000-101:数据通道号 110:未使用 111:RX FIFO寄存器为空 08 TX_FULL OBSERVE_TX 0 0 R TX FIFO寄存器满标志位 发送检测寄存器 数据包丢失计数器。当写RF_CH寄存器时,此寄存器复位。当丢失15个数据包后,此寄存器重启。 09
MAX_RT 4 0 R/W RX_P_NO 3:1 111 R PLOS_CNT 7:4 0 R ARC_CNT CD Reserved 3:0 7:1 0 000000 6
R R 重发计数器。当发送新数据包时,此寄存器复位。 载波检测 深圳市德普施科技有限公司
0A 0B CD RX_ADDR_P0 RX_ADDR_P1 0 39:0 39:0 7:0 0 E7E7E7E7E7 C2C2C2C2C2 C3 R R/W R/W 数据通道0接收地址。最大长度为5个字节。 数据通道1接收地址。最大长度为5个字节。 数据通道2接收地址。最低字节可设置,高字节必须与RX_ADDR_P1[39:8]相等 数据通道3接收地址。最低字节可设置,高字节必须与RX_ADDR_P1[39:8]相等 数据通道4接收地址。最低字节可设置,高字节必须与RX_ADDR_P1[39:8]相等 数据通道5接收地址。最低字节可设置,高字节必须与RX_ADDR_P1[39:8]相等 发送地址。在ShockBurst模式,设置RX_ADDR_P0与此地址相等来接收应答信号 默认为00 数据通道0接收数据有效宽度: 0:无效 1:1个字节 ?? 32:32个字节 TM0C RX_ADDR_P2 R/W 0D RX_ADDR_P3 7:0 C4 R/W 0E RX_ADDR_P4 7:0 C5 R/W 0F RX_ADDR_P5 7:0 39:C6 E7E7E7E7E7 00 R/W 10 11 TX_ADDR RX_PW_P0 Reserved 0 7:6 R/W R/W RX_PW_P0 5:0 0 R/W 12 RX_PW_P1 Reserved 7:6 00 R/W 默认为00 数据通道1接收数据有效宽度: RX_PW_P1 5:0 0 R/W 0:无效 1:1个字节 ?? 32:32个字节 默认为00 数据通道2接收数据有效宽度: 0:无效 1:1个字节 ?? 32:32个字节 13 RX_PW_P2 Reserved 7:6 00 R/W RX_PW_P2 5:0 0 R/W 7
深圳市德普施科技有限公司
14 RX_PW_P3 Reserved 7:6 00 R/W 默认为00 数据通道3接收数据有效宽度: 0:无效 1:1个字节 ?? 32:32个字节 默认为00 数据通道4接收数据有效宽度: 0:无效 1:1个字节 ?? 32:32个字节 RX_PW_P3 5:0 0 R/W 15 RX_PW_P4 Reserved 7:6 00 R/W RX_PW_P4 5:0 0 R/W 16 RX_PW_P5 Reserved 7:6 00 R/W 默认为00 数据通道5接收数据有效宽度: 0:无效 1:1个字节 ?? 32:32个字节 FIFO状态寄存器 默认为0 若TX_REUSE=1,则当CE置高时,不断发送上一数据包。TX_REUSE通过SPI指令REUSE_TX_PL设置;通过W_TX_PALOAD FLUSH_TX复位 或 RX_PW_P5 5:0 0 R/W 17 FIFO_STATUS Reserved 7 0 R/W TX_REUSE 6 0 R TX_FULL TX_EMPTY RX_FULL 1 0 R Reserved 4 3:2 1 00 R R/W 5 0 R TX_FIFO寄存器满标志 1:寄存器满 0:寄存器未满,有可用空间 TX_FIFO寄存器空标志 1:寄存器空 0:寄存器非空 默认为00 RX FIFO寄存器满标志 1:寄存器满 0:寄存器未满,有可用空间 8
RX_EMPTY 0 N/A TX_PLD 255:0 N/A RX_PLD 255:0
八、模块编程控制
1.ShockBurstTM发射模式
深圳市德普施科技有限公司
RX FIFO寄存器空标志 1 R 1:寄存器空 0:寄存器非空 X W X R 9
深圳市德普施科技有限公司
①设置PRIM_RX为低。
②通过SPI接口,将接收节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块,
写TX_PLD时,CSN必须一直置低。 ③置CE为高,启动发射。CE高电平持续时间至少为10us。 ④ShockBurstTM发射模式:
10
深圳市德普施科技有限公司
系统上电
启动内部16MHz时钟 数据打包 数据发射
⑤若启动了自动应答模式(ENAA_P0=1),则模块立即进入接收模式(NO_ACK已设
置)。如果接收到应答信号,则表示发射成功,TX_DS置高且TX FIFO中的有效数据被移出;如果没有接收到应答信号,则自动重发(自动重发已设置);如果自动重发次数超过最大值(ARC),MAX_RT置高,在TX FIFO中的数据不被移出。当MAX_RT和TX_DS置高时,IRQ激活。只有重新写状态寄存器(STATUS)才能关闭IRQ。如果重发次数达到最大后,仍没有接收到应答信号,在MAX_RT中断清除之前,不会再发射数据。PLOS_CNT计数器会增加,每当有一个MAX_RT中断产生。
⑥如果CE置低,则系统进行待机模式I,否则发送TX FIFO寄存器中的下一个数据包。当TX FIFO中的数据发射完,CE仍为高时,系统进入待机模式II。 ⑦在待机模式II下,CE置低,则进入待机模式I。
2.ShockBurstTM接收模式 ①设置PRIM_RX为高,配置接收数据通道(EN_RXADDR)、自动应答寄存器(EN_AA)
和有效数据宽度寄存器(RX_PW_PX)。 ②置CE为高,启动接收模式。 ③130us后,模块检测空中信号,
④接收到有效的数据包后(地址匹配、CRC检验正确),数据储存在RX FIFO中,RX_DR置高。
⑤如果启动了自动应答功能,则发送应答信号。 ⑥MCU置CE为低,进入先机模式I。 ⑦MCU可通过SPI接口将数据读出
⑧模块准备好进入发射模式或接收模式或待机模式。
11
深圳市德普施科技有限公司
12
深圳市德普施科技有限公司
九、RF通道频率 RF通道频率指的是nRF24L01所使用的中心频率,该频率范围从2.400GHz到2.525GHz,以1MHz区分一个频点,故有125个频点可使用。 由参数RF_CH确定,公式为:F0 = 2400 + RF_CH(MHz)
十、示例程序
接收模块与发射模块大部分程序代码相同,如下:
1.SPI命令和寄存器配置头文件API.h(根据第六、七两点编写)
#ifndef _BYTE_DEF_ #define _BYTE_DEF_ typedef unsigned char BYTE; #endif
// SPI命令
#define READ_REG #define WRITE_REG #define RD_RX_PLOAD #define FLUSH_TX
0x00 //读第0个寄存器 0x20 //写第0个寄存器
0x61 //在接收模式下使用,读有效数据 0xA0 //在发送模式下使用,写有效数据 0xE1 //在发送模式下使用,清TX FIFO寄存器 0xE2 //在接收模式下使用,清RX FIFO寄存器 0xE3 //发送方使用,重复发送最后的数据 0xFF //空操作,用于读状态寄存器STATUS的值
#define WR_TX_PLOAD #define FLUSH_RX #define REUSE_TX_PL #define NOP
// nRF24L01寄存器地址 #define CONFIG #define EN_AA #define SETUP_AW #define SETUP_RETR #define RF_CH #define RF_SETUP #define STATUS #define OBSERVE_TX #define CD #define RX_ADDR_P0 #define RX_ADDR_P1 #define RX_ADDR_P2 #define RX_ADDR_P3 #define RX_ADDR_P4 #define RX_ADDR_P5 #define TX_ADDR #define RX_PW_P0 #define RX_PW_P1 #define RX_PW_P2
0x00 //配置寄存器,8bit
0x01 //自动应答设置寄存器,8bit 0x03 //地址宽度设置寄存器,8bit 0x04 //自动重复发送设置寄存器,8bit 0x05 //RF通道寄存器,8bit 0x06 //RF设置寄存器,8bit 0x07 //状态寄存器,8bit 0x08 //发送观测寄存器,8bit 0x09 //载波检测寄存器,8bit, 0x0A //接收地址数据通道0,40bit 0x0B 0x0C 0x0D 0x0E 0x0F
0x10 //发送地址.发送方使用,40bit
0x11 //通道0接收的有效数据字节长度(1-32字节),8bit 0x12 0x13
#define EN_RXADDR 0x02 //接收地址设置寄存器,8bit
13
深圳市德普施科技有限公司
#define RX_PW_P3 #define RX_PW_P4 #define RX_PW_P5 #define FIFO_STATUS
0x14 0x15 0x16
0x17 //FIFO状态寄存器,8bit
2.SPI操作头文件(与单片机的接口设置在此头文件中)
uchar unsigned char TX_ADR_WIDTH TX_PLOAD_WIDTH
5 //地址长度为5个字节 20 //数据长度为20个字节
//接收缓冲区 //标志位
#define #define #define char uchar #define
uchar const TX_ADDRESS[TX_ADR_WIDTH] = {0xE7,0xE7,0xE7,0xE7,0xE7};
rx_buf[TX_PLOAD_WIDTH]; flag; CE
int test[12];
P0_0 P0_1 P1_2 P0_3 P0_4 P3_2 = sta^6; = sta^5;
//芯片使能:Chip Enable //片选信号:Chip Select Not //串行时钟信号:Serial Clock //主发从收:Master In Slave Out //主收从发:Master Out Slave In //中断查询:Interrupt Request
#define CSN #define SCK #define #define uchar sbit sbit sbit
uchar SPI_RW(uchar byte)//写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据 {
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++) //先写字节的高位,再写低位 { }
return(byte); }
uchar SPI_RW_Reg(BYTE reg, BYTE value)//将字节value写入寄存器reg {
uchar status;
CSN = 0; //CSN为0时,才能进行SPI读写 status = SPI_RW(reg);
//选择寄存器reg
SPI_RW(value); //写字节value到该寄存器
MOSI = (byte & 0x80); //MOSI取byte最高位 byte = (byte << 1); //byte左移一位
SCK = 1; //SCK从高到低时开始写入 byte |= MISO; SCK = 0;
//获取MISO位.从MOSI写命令的同时,MISO返回nRF24L01的状态及数据
MOSI IRQ bdata sta; RX_DR TX_DS
#define MISO
MAX_RT = sta^4;
14
深圳市德普施科技有限公司
}
CSN = 1; return(status);
//终止SPI读写
BYTE SPI_Read(BYTE reg)//读寄存器reg状态字 { }
uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
//从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址
{ }
uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)//将数据写入寄存器,如TX数据,RX/TX地址等. { }
//接收模式初始化:设置RX地址,RX数据宽度,RF通道,速率,低噪声放大器增益 //设置完之后,将CE置高,准备好接收数据 void RX_Mode(void) {
SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 写 TX_Address 到 nRF24L01
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 自动重发延时:500us + 86us;重发次数:10次 uchar status,byte_ctr;
CSN = 0; //CSN为0时,才能进行SPI读写 status = SPI_RW(reg);
//选择寄存器reg并返回其状态字 //写数据到寄存器 //终止SPI读写 //返回状态值
for(byte_ctr=0; byte_ctr //CSN为0时,才能进行SPI读写 //选择寄存器reg并返回其状态字 status = SPI_RW(reg); BYTE reg_val; CSN = 0; SPI_RW(reg); reg_val = SPI_RW(0); CSN = 1; return(reg_val); //CSN为0时,才能进行SPI读写 //选择寄存器reg //写0,什么操作也不进行,仅仅为了读寄存器状态 //终止SPI读写 for(byte_ctr=0;byte_ctr pBuf[byte_ctr] = SPI_RW(0); //从寄存器读数据 SPI_RW(*pBuf++); 15 深圳市德普施科技有限公司 } SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); //将地址TX_ADDRESS写入寄存器0的数据通道0 //ENAA_P0=1,数据通道0自动应答 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //ERX_P0=1,使能 SPI_RW_Reg(WRITE_REG + RF_CH, 40); //40个通信频段 SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); //数据通道0的RX数据长度为TX_PLOAD_WIDTH,要与发送的一致 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F); //速率为2Mbps,发送功率为0dBm,低噪声放大器增益为1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); //PRIM_RX=1,接收方;PWR_UP=1;CRC检验字为2字节; //发送模式初始化:设置发送地址,设置发送的数据,设置接收方地址,RF通道,速率等,与接收类似 void TX_Mode(void) { } void show_status(void) { test[0] = SPI_Read(EN_AA); //0x01 //0x01 //0x03,5个字节 //0x1a //0x28 //0x0f test[1] = SPI_Read(EN_RXADDR); test[2] = SPI_Read(SETUP_AW); test[3] = SPI_Read(SETUP_RETR); test[4] = SPI_Read(RF_CH); test[5] = SPI_Read(RF_SETUP); test[6] = SPI_Read(RX_ADDR_P2); test[7] = SPI_Read(RX_ADDR_P3); test[8] = SPI_Read(RX_ADDR_P4); test[9] = SPI_Read(RX_ADDR_P5); test[10] = SPI_Read(RX_PW_P0); test[11] = SPI_Read(STATUS); } //0x14 //显示状态寄存器的值 SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); SPI_RW_Reg(WRITE_REG + RF_CH, 40); SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); 16 深圳市德普施科技有限公司 void init_io(void) { } void Inituart(void)//设置串口工作模式 { } void init_int0(void)//外部中断设置 { } void delay_ms(unsigned int x) { unsigned int i,j; i=0; for(i=0;i //毫秒级延时 EA=1; ES=1; EX0=1; //允许全局中断 //开串行口中断 //允许外部中断0 TMOD |= 0x20; TL1 = 0xfd; TH1 = 0xfd; SCON = 0x50; TR1 = 1; TI=1; //模式1,8位数据 //启动定时器1 //定时器1工作在方式2,8位自动重装模式 //波特率为9600 CE = 0; SCK = 0; //待机 //SPI禁止读写 CSN = 1; { 3.发送模块主函数(向接收模块发射数据“abcdefg”,中断方式) void main(void) int i; init_io(); Inituart(); init_int0(); //IO端口设置 //串口设置 //外部中断0设置 //待发的数据tx_buf,发送的数据为”abcdefg”七个字母 for(i=0;i<7;i++) tx_buf[i] = 'a'+i; 17 深圳市德普施科技有限公司 } while(1) { } CE = 0; CE = 1; CE = 0; //Standby-1模式 //发送设置 //启动发送模式 //Standby-1模式 TX_Mode(); delay_ms(20); delay_ms(1000); //中断函数 //如果RX_DR=1,则读取数据,之后清除标志位; //如果TX_DS或MAX_RT为1,则仅清除中断标志位 void ISR_int0(void) interrupt 0 { } sta=SPI_Read(STATUS); if(RX_DR) { } if(MAX_RT) //重发中断达到最大数 //清除TX FIFO寄存器 SPI_RW_Reg(FLUSH_TX,0); SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据 flag=1; //标志位置高 //读状态寄存器STATUS //如接收到数据,则中断 SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除RX_DR,TX_DS和MAX_RT中断标志位 { 4.接收模块主函数(接收并在串口输出,同时输出状态寄存器的值,使用查询方式) void main(void) int i; init_io(); Inituart(); init_int0(); CE=0; //IO端口设置 //串口设置 //外部中断0设置 //Standby-1模式 //设置接收模式 //准备接收数据 RX_Mode(); CE = 1; while(1) { sta=SPI_Read(STATUS); if(RX_DR) { SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接收的数据 //接收到数据 18 深圳市德普施科技有限公司 } } } for(i=0;i<7;i++) printf(\ //通过串口发送接收到的数据 printf(\show_status(); for(i=0;i<12;i++) printf(\ \printf(\delay_ms(10); //重发中断达到最大数 //清除TX FIFO寄存器 //清除RX_DR,TX_DS和MAX_RT中断标志位 //输出状态寄存器的值,可不用此操作 if(MAX_RT) SPI_RW_Reg(FLUSH_TX,0); SPI_RW_Reg(WRITE_REG+STATUS,sta); 19
正在阅读:
路桥施工中防水层质量控制分析10-15
高考作文议论文结构之“引议联结”06-20
飞机起落架落震试验技术国内外研究现状06-13
技术分析之一学就会05-23
侵华日军序列改革(四)10-05
《古诗两首》前中后老师10-02
砼外观缺陷处理专项施工方案11-10
关于近期环境卫生综合整治的报告03-16
描写关于梦想的诗歌03-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 无线通信
- 模块
- nRF24L01
- 手册
- 图文
- 使用