nRFL无线通信模块使用手册_第1页
nRFL无线通信模块使用手册_第2页
nRFL无线通信模块使用手册_第3页
nRFL无线通信模块使用手册_第4页
nRFL无线通信模块使用手册_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、nRF24L01无线通信模块使用手册 一、模块简介 该射频模块集成了 NORDIC公司生产的无线射频芯片I1RF24L01: 1. 支持2.4GHz的全球开放ISM频段,最大发射功率为OdBm 2. 2Mbps,传输速率高 3. 功耗低,等待模式时电流消耗仅22uA 4. 多频点(125个),满足多点通信及跳频通信需求 5. 在空旷场地,有效通信距离:25m (外置天线)、10m (PCB天线) 6. 工作原理简介: 发射数据时,首先将nRF24L01配巻为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI 口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写

2、入,而 TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10 us,延迟130 u s后 发射数据:若自动应答开启,那么I1RF24L01在发射数据后立即进入接收模式,接收应答信 号。如果收到应答,则认为此次通信成功,TX_DS置髙,同时TX_PLD从发送堆栈中淸除: 若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARCJ2NT)达到 上限,MAX_RT置髙,TX.PLD不会被淸除;MAX_RT或TX_DS巻髙时,使IRQ变低, 以便通知MCU.最后发射成功时,若CE为低,则I1RF24L01进入待机模式1:若发送堆栈 中有数据且CE为髙,则进入下一次发射:

3、若发送堆栈中无数据且CE为高,则进入待机模 式2。 接收数据时,首先将nRF24L01配置为接收模式,接着延迟130 us进入接收状态等待 数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时 中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。若此时自动应答开启,接 收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入 空闲模式1 二、模块电气特性 参数 数值 单位 供电电压 5 V 最大发射功率 0 dBm 最大数据传输率 2 Mbps 电流消耗(发射模式,OdBm) 11.3 mA 电流消耗(接收模式,2Mbps)

4、12.3 mA 电流消耗(掉电模式) 900 nA 温度范围 -40-+85 C 三、模块引脚说明 管脚 符号 功能 方向 1 GND 电源地 2 IRQ 中断输出 O 3 MISO SPI输出 O 4 MOSI SPI输入 I 5 SCK SPI时钟 I 6 xc 空 注:上图为示总连接,可根据自己实际需求进行更改:使用AT89S52MCU模块时,请将NH24L01通 讯模块每个端口(MOSL SCK、CSN和CE)接4.7K的排阻上拉到VCC増强其驱动能力(如下图:)。若 使用其它单片机与NH24L01通讯模块相连时请串联2K电阻。 五.工作模式控制 工作模式由CE和PWR UP、PRIM

5、 RX两寄存器共同控制: 模式 PWR.UP PRIM RX CE FIFO寄存器状态 接收模式 1 1 1 - 发射模式 1 0 I1 数据存储在FIFO寄存器中, 发射所有数据 发射模式 1 0 0-12 数据存储在FIFO寄存器中, 发射一个数据 待机模式II 1 0 1 TX FIFO为空 待机模式I 1 - 0 无正在传输的数据 掉电模式 () - - - 注1:进入此模式后,只要CSN置码在FIFO中的数据就会立即发射出去.直到所有数据数据发射 完毕.之后进入待机模式II。 注2:正常的发射模式,CE端的高电平应至少保持10us。24L01将发射一个数据包.之后进入待机模 式I。

6、六、数据和控制接口 通过以下六个引脚,可实现模块的所有功能: IRQ (低电平有效,中断输出) CE (高电平有效,发射或接收模式控制) CSN (SPI信号) SCK (SPI 信号) MOSI (SPI 信号) MISO (SPI信号) 通过SPI接口,可激活在数据寄存器FIFO中的数据;或者通过SPI命令(1个字节长 度)访问寄存器。 在待机或掉电模式下,单片机通过SPI接口配苣模块:任发射或接收模式下,单片机通 过SPI接口接收或发射数据。 1. SPI指令 所有的SPI指令均在当CSN由低到髙开始跳变时执行;从MOSI写命令的同时,MISO 实时返回24L01的状态值:SPI指令由命

7、令字节和数据字节两部分组成。 SPI命令字节表 指令名称 指令格式 (二进制) 字节数 操作说明 R_REGISTER 000A AAAA 1-5 读寄存器。AAAAA表示寄存器地址。 W_REGISTER 001AAAAA 1-5 写寄存器。AAAAA表示寄存器地址,只 能在掉电或待机模式下操作。 R_RX_PAYLOAD 0110 0001 1-32 在接收模式下读132字节RX有效断气。 从字卩0开始,数据读完后,FIFO寄存器 淸空。 W_TX_PAYLOA D 1010 0000 1-32 在发射模式下写131字节TX有效数据。 从字节0开始。 FLUSH.TX 1110 0001

8、0 在发射模式下,淸空TX FIFO寄存器。 FLUSH_RX 1110 0010 0 在接收模式下,淸空RX HFO寄存器。在 传输应答信号时不应执行此操作,否则不 能传输完整的应答信号。 REUSE_TX_PL 1110 0011 0 应用于发射端。重新使用上一次发射的有 效数据,当CE=1时,数据将不断重新发 射。在发射数据包过程中,应禁止数据包 重用功能。 NOP mi mi 0 空操作。可用于读状态寄存器。 2. SP时序 SPI读写时序见下而两图。在写寄存器之前,一左要进入待机模式或掉电模式。其中, Cn一SPI指令位;Sn一一状态寄存器位:Dn一一数据位(低字节在前,高字节在后:

9、每 个字节中高位在前) CSN 厂 SPI读时序 0? C4 03 04 D3 8 A OZ 018 。応 DO 01: DM 12 Z9 CSN stce W D4 03 M 01 CO 015 co 014 D13 C!2 Dlt Dltt M ci MISO SPI写时序 七.寄存器内容及说明 地址 (十六进制) 寄存器 位 复位值 类型 说明 00 CONFIG 配宜寄存器 Reserved 7 0 R/W 默认为0 MASK_RX_DR 6 0 RAV 可屏蔽中断RX_RD 1:中断产生时对IRQ没影响 0: RX_RD中断产生时,IRQ 引脚为低 MASK_TX_DS 5 0 R/

10、W 可屏蔽中断TX_RD 1:中断产生时对IRQ没影响 0: TX_RD中断产生时,IRQ 引脚为低 MASK.MAX. RT 4 0 R/W 可屏蔽中断MAX.RT 1:中断产生时对IRQ没影响 0: MAX.RT中断产生时,IRQ 引脚为低 EN_CRC 3 1 RAV CRC使能。如果EN_AA中任 意一位为髙,则EN_CRC为 高O CRCO 2 0 R/W CRC校验值: 0: 1字节 1: 2字节 PWR UP 1 0 R/W 0:掉电1:上电 PRIM RX 0 0 R/W 0:发射模式1:接收模式 01 EN_AA Enhanced ShockBurst 使能“自动应答”功能

11、Reserved 7:6 00 R/W 默认为00 ENAA P5 5 1 R/W 数据通道5自动应答使能位 ENAA_P4 4 1 R/W 数据通道4自动应答使能位 ENAA.P3 3 1 R/W 数据通逍3自动应答使能位 ENAA.P2 2 1 R/W 数据通逍2自动应答使能位 ENAA_P1 1 1 R/W 数据通道1自动应答使能位 ENAA P0 0 1 RAV 数据通道0自动应答使能位 02 EN.RXADDR 接收地址允许 Reserved 7:6 0() RAV 默认为00 ERX P5 5 0 RAV 数据通道5接收数据使能位 ERX P4 4 0 R/W 数据通道4接收数据使

12、能位 ERX _P3 3 0 R/W 数据通道3接收数据使能位 ERX P2 2 0 R/W 数据通道2接收数拯使能位 ERX_P1 1 1 R/W 数据通道1接收数拯使能位 ERX _P0 0 1 R/W 数据通道0接收数据使能位 03 SETUP_AW 设宜地址宽度(所有数据通 道) Reserved 7:2 000000 R/W 默认为00000 AW 1:0 11 RAV 接收/发射地址宽度: 00:无效 01: 3字节 10: 4字节 11: 5字节 04 SETUP.RETR 自动重发 ARD 7:4 0000 R/W 自动重发延时时间: 0000: 250US 0001: 500

13、us 1111: 4000US ARC 3:0 0011 RAV 自动重发计数: 0000:禁止自动重发 0001:自动重发1次 1111:自动重发15次 05 RF CH 射频通道 Reserved 7 0 R/W 默认为0 RF CH 6:0 0000010 RAV 设置工作通道频率 06 RF SETUP 射频寄存器 Reserved 7:5 000 R/W 默认为000 PLL.LOCK 4 0 R/W 锁相环使能,测试下使用 RF_DR 3 1 RAV 数据传输率: 0: 1Mbps 1: 2Mbps RF_PWR 2:1 11 R/W 发射功率: 00: -18dBm 01: -1

14、2dBm 10: -6dBm 11: OdBm LNA_HCURR 0 1 R/W 低噪声放大器增益 07 STATUS 状态寄存器 Reserved 7 0 R/W 默认值为0 RX_DR 6 0 R/W 接收数据中断位。当收到有效 数据包后鱼 写T淸除中断 TX.DS 5 0 R/W 发送数据中断。如果工作在自 动应答模式下,只有当接收到 应答信号后置1 写T淸除中断 MAX.RT 4 0 R/W 重发次数溢出中断。 写1淸除中断。 如果MAX_RT中断产生,则 必须淸除后才能继续通讯 RX_P.NO 3:1 111 R 接收数据通道号: 000-101:数据通道号 110:未使用 111

15、: RX HFO寄存器为空 TX FULL 0 0 R TX HFO寄存器满标志位 08 OBSERVE.TX 发送检测寄存器 PLOS.CNT 7:4 0 R 数据包丢失计数器。当写 RF_CH寄存器时,此寄存器 复位。当丢失15个数据包后, 此寄存器重启。 ARC_CNT 3:0 0 R 重发讣数器。当发送新数据包 时,此寄存器复位。 09 CD 载波检测 Reserved 7:1 000000 R CD 0 0 R 0A RX_ADDR_P0 39: 0 E7E7E7E 7E7 R/W 数据通道0接收地址。最大长 度为5个字节。 OB RX_ADDR_P1 39: 0 C2C2C2 C2

16、C2 R/W 数据通道1接收地址。最大长 度为5个字节。 OC RX_ADDR_P2 7:0 C3 R/W 数据通道2接收地址。最低字 节可设置,高字节必须与 RX ADDR P139:8相等 OD RX_ADDR_P3 7:0 C4 R/W 数据通道3接收地址。最低字 节可设置,高字节必须与 RX ADDR P139:8相等 OE RX_ADDR_P4 7:0 C5 R/W 数据通道4接收地址。最低字 节可设置,高字节必须与 RX ADDR P139:8相等 OF RX_ADDR_P5 7:0 C6 R/W 数据通道5接收地址。最低字 节可设置,高字节必须与 RX ADDR P139:8相等

17、 10 TX_ADDR 39: 0 E7E7E7E 7E7 R/W 发送地址。在ShockBurst1M 模式,设it RX_ADDR_P0 与 此地址相等来接收应答信号 11 RX PW P0 Reserved 7:6 00 R/W 默认为00 RX_PW_P0 5:0 0 R/W 数拯通道0接收数拯有效宽 度: 0:无效 1: 1个字节 32: 32个字节 12 RX PW P1 Reserved 7:6 0() R/W 默认为00 RX_PW_P1 5:0 0 R/W 数据通道1接收数据有效宽 度: 0:无效 1: 1个字节 32: 32个字节 13 RX PW P2 Reserved

18、7:6 ()() R/W 默认为00 RX_PW_P2 5:0 0 R/W 数拯通道2接收数拯有效宽 度: 0:无效 1: 1个字节 32: 32个字节 14 RX PW P3 Reserved 7:6 00 R/W 默认为00 RX_PW_P3 5:0 0 R/W 数据通道3接收数据有效宽 度: 0:无效 1: 1个字节 32: 32个字节 15 RX_PW_P4 Reserved 7:6 00 R/W 默认为00 RX_PW_P4 5:0 0 R/W 数据通道4接收数据有效宽 度: 0:无效 1: 1个字节 32: 32个字节 16 RX PW P5 Reserved 7:6 0() R/

19、W 默认为00 RX_PW_P5 5:0 0 R/W 数拯通道5接收数拯有效宽 度: 0:无效 1: 1个字节 32: 32个字节 17 FIFO.STATUS HFO状态寄存器 Reserved 7 0 R/W 默认为0 TX.REUSE 6 0 R 若 TX_REUSE=1,则当 CE 置 高时,不断发送上一数据包。 TX.REUSE通 过SPI指令 REUSE_TX_PL设宜;通过 W_TX_PALOAD或 FLUSH TX 复位 TX.FULL 5 0 R TX.HFO寄存器满标志 1:寄存器满 0:寄存器未满,有可用空间 TX_EMPTY 4 1 R TX.HFO寄存器空标志 1:寄

20、存器空 0:寄存器非空 Reserved 3:2 00 R/W 默认为00 RX.FULL 1 0 R RX FIFO寄存器满标志 1:寄存器满 0:寄存器未满,有可用空间 RX_EMPTY 0 1 R RX FIFO寄存器空标志 1:寄存器空 0:寄存器非空 N/A TX.PLD 255 :0 X W N/A RX.PLD 255 :0 X R 八.模块编程控制 1. ShockBurst 发射模式 设置PRIM.RX为低。 通过SPI接口,将接收节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块, 写TX_PLD时,CSN必须一直置低。 置CE为高,启动发射。CE髙电平持续时间至

21、少为lOuSo ShockBurst 发射模式: 系统上电 启动内部16MHz时钟 数据打包 数据发射 若启动了自动应答模式(ENAA_PO=1),则模块立即进入接收模式(NO.ACK已设 如果接收到应答信号,则表示发射成功,TX_DS宜髙且TX FIFO中的有效数据被移 出:如果没有接收到应答信号,则自动重发(自动重发已设宜);如果自动重发次数超过最 大值(ARC), MAX_RT置髙,在TX FIFO中的数据不被移出。当MAX_RT和TX_DS宜 高时,IRQ激活。只有重新写状态寄存器(STATUS)才能关闭IRQ.如果重发次数达到最 大后,仍没有接收到应答信号,在MAX.RT中断淸除之前

22、,不会再发射数据。PLOS.CNT 计数器会增加,每当有一个MAX_RT中断产生。 如果CE置低,则系统进行待机模式I,否则发送TX FIFO寄存器中的下一个数据包。 当TX FIFO中的数据发射完,CE仍为髙时,系统进入待机模式II。 在待机模式II下,CE置低,则进入待机模式I。 2. ShockBurst 接收模式 设置PRIM.RX为髙,配巻接收数据通道(EN_RXADDR)、自动应答寄存器(EN_AA) 和有效数搦宽度寄存器(RX_PW_PX) 置CE为高,启动接收模式。 130us后,模块检测空中信号, 接收到有效的数据包后(地址匹配、CRC检验正确),数据储存在RX HFO中,R

23、X_DR 置高。 如果启动了自动应答功能,则发送应答信号。 MCU置CE为低,进入先机模式I。 MCU可通过SPI接口将数据读出 模块准备好进入发射模式或接收模式或待机模式。 九.RF通道频率 RF通道频率指的是nRF24L01所使用的中心频率,该频率范羽从2.400GHz到 2.525GHz,以1MHz区分一个频点,故有125个频点可使用。 由参数 RF_CH 确左,公式为:F)= 2400 + RF_CH (MHz) 十、示例程序 接收模块与发射模块大部分程序代码相同,如下: 1. SPI命令和寄存器配置头文件API.h (根据第六、七两点编写) #ifndef_BYTE_DEF_ #de

24、fine_BYTE.DEF_ lypedef unsigned char BYTE: #endif /SPI命令 #define READ.REG 0 x00 读第0个寄存器 #define WRITE.REG 0 x20 写第0个寄存器 #define RD_RX_PLOAD 0 x61 在接收模式下使用,读有效数据 #define WR_TX_PLOAD OxAO 在发送模式下使用,写有效数据 #define FLUSH.TX OxEl 在发送模式下使用清TX FIFO寄存器 #define FLUSH_RX 0 xE2 在接收模式下使用清RX FIFO寄存器 #define REUSE_

25、TX_PL 0 xE3 发送方使用,重复发送最后的数据 #define NOP OxFF 空操作,用于读状态寄存器STATUS的值 / nRF24L01寄存器地址 #define CONFIG 0 x00 配置寄存器8bil #define EN_AA 0 x01 自动应答设宜寄存器8bil #define EN.RXADDR 0 x02 接收地址设宜寄存器8bil #define SETUP_AW 0 x03 地址宽度设迢寄存器8bil #define SETUP.RETR 0 x04 自动重复发送设宜寄存器8bil #define RF.CH 0 x05 /RF通道寄存器$bil #def

26、ine RF_SETUP 0 x06 /RF设貝寄存器,8bii #define STATUS 0 x07 状态寄存器8bii #define OBSERVE.TX 0 x08 发送观测寄存器8bil #define CD 0 x09 载波检测寄存器8bil #define RX_ADDR_P0 OxOA 接收地址数据通道0.40bit #define RX_ADDR_P1 OxOB #define RX_ADDR_P2 OxOC #define RX_ADDR_P3 OxOD #define RX.ADDR.P4 OxOE #define RX_ADDR_P5 OxOF #define TX

27、.ADDR 0 x10 发送地址发送方使用40bil #define RX_PW_P0 0 x11 通道0接收的有效数据字节长度(132字节).8bii #define RX_PW_P1 0 x12 #define RX PW P2 0 x13 #define RX_PW_P3 0 x14 #define RX_PW_P4 0 x15 #define RX_PW_P5 0 x16 #define FIFO_STATUS 0 x17 /FIFO状态寄存器,8bil 2. SPI操作头文件(与单片机的接口设置在此头文件中) #define uchar unsigned char #define T

28、X_ADR_WIDTH 5 地址长度为5个字节 #define TX_PLOAD_WIDTH 20 数据长度为 20 个字节 uchar const TX_ADDRESS|TX_ADR_WIDTH| = 0 xE7.0 xE7.0 xE7.0 xE7.0 xE7: char rx_bufITX_PLOAD_WIDTH; 接收缓冲区 uchar flag: 标志位 int test12; #define CE P0_0 芯片使能:Chip Enable #define CSN P0_i 片选信号:Chip Select Not #define SCK Pl.2 串行时钟信号:Serial Clo

29、ck #define MOSI P0_3 主发从收:Master In Slave Out #define MISO P0_4 主收从发:Master Out Slave In #define IRQ P3_2 中断査询interrupt Request uchar bdata sla: sbit RX.DR =staA6; sbit TX_DS =staA5; sbit MAX.RT =staA4; uchar SPLRW(uchar byte)/写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据 uchar bitctr; for(bit-ctr=0:bit_clr8:b

30、it_ctr+) I 先写字节的高位,再写低位 MOSI = (byte SCK=1; byte 1= MISO: /MOSI取byte最高位 /byte左移一位 SCK从高到低时开始写入 获取MISO位从MOSI写命令的同时A1ISO返回nRF24L01的状态及数据 SCK = 0; retum(byte); uchar SPI_RW_Reg(BYTE reg. BYTE value)/将字节 value 写入寄存器 reg uchar status; CSN = 0; status = SPI_RW(reg); SPI_RW(value); /CSN为0时,才能进行SPI读写 选择寄存器r

31、eg 写字节value到该寄存器 CSN= 1; 终止SPI读写 relurn(stalus): BYTE SPLRead(BYTE代g)读寄存器reg状态字 t BYTE regval: CSN = O; /CSN为0时,才能进行SPI读写 SPI.RW(reg): 选择寄存器reg reg_val = SPI_RW(O); 写0什么操作也不进行,仅仅为了读寄存器状态 CSN= 1; 终止SPI读写 relurn(reg_val); uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes) I 从寄存器reg读出数据典型应用是读RX数据或RXT

32、TXF地址 uchar sla(us.byte_clr; CSN = O; /CSN为0时才能进行SPI读写 status = SPI_RW(reg): 选择寄存器reg并返回其状态字 for(byte_ctr=0:brte_ctrb)les;byte_ctr+) pBufbyte_clr| = SPI_RW(O); 从寄存器读数据 CSN= l; 终止SPI读写 return(stalus): 返回状态值 uchar SPI_Write_Buf(BYTE reg. BYTE *pBuf. BYTE bytes)/将数据写入寄存器如 TX 数据.RX/TX 地址等. f uchar slatu

33、s.bjlectr: CSN = O; /CSN为0时,才能进行SPI读写 status = SPI_RW(reg): 选择寄存器reg并返回其状态字 for(byte_ctr=0; byte_clrbytes: byte_clr+) SPLRW(*pBuf+); 写数据到寄存器 CSN= 1; 终止SPI读写 return(stalus): 返回状态值 接收模式初始化:设宜RX地址,RX数据宽度.RF通道,速率低噪声放大器增益 设宜完之后,将CE宜高,准备好接收数据 void RX_Mode(void) r I SPI_RW_Reg( WRITE_REG + RX_PW_P0. TX_PLO

34、AD_WIDTH): SPI_Wrile_Buf(WRITE_REG + TX.ADDR. TX-ADDRESS. TX_ADR_WIDTH): 写 TX.Address 至ij nRF24L01 SPI_RW_Reg(WRITE_REG + SETUP.RETR. Ox la);/ 自动重发延时:500us + 86us:重发次数:10 次 SPI_Wrile_Buf(WRITE_REG + RX_ADDR_PO. TX_ADDRESS. TX_ADR_WIDTH): 将地址TX.ADDRESS写入寄存器0的数据通道0 SPI_RW_Reg(WRITE_REG + EN_AA. 0 x01)

35、;ENAA_P0=l,数据通道 0 自动应答 SPI_RW_Reg(WRITE_REG + EN.RXADDR. 0 x01); /ERX_P0=l,使能 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. 0 xOF); 速率为2Mbps,发送功率为OdBm.低噪声放大器増益为1 SPI_RW_Reg( WRITE_REG

36、 + CONFIG OxOf); PRIM_RX=1接收方:PWR_UP=1:CRC检验字为2字节: 发送模式初始化:设匱发送地址设迓发送的数据设迓接收方地址RF通道,速率等占接收类似 void TX.Mode(void) SPI_RW_Reg(WRITE_REG + RX_PW_P0. TX_PLOAD_ WIDTH): SPI_RW_Reg( WRITE_REG + CONFIG OxOe); SPI_Wrile_Buf( WRITE_REG + TX.ADDR, TX_ADDRESS. TX_ADR_WIDTH); SPI_Wrile_Buf(WRITE_REG + RX_ADDR_P0

37、 TX_ADDRESS. TX_ADR_WIDTH): SPI_Wrile_Buf(WR_TX_PLOAD. lx_buf. TX_PLOAD_WIDTH): SPI_RW_Reg( WRITE_REG + EN_AA. 0 x01); SPI_RW_Reg(VRITE_REG + EN.RXADDR. 0 x01); SPI_RW_Reg(WRITE_REG + SETUP_RETR Ox la); SPI_RW_Reg( WRITE_REG + RF_CH. 40); SPI_RW_Reg(WRITE_REG + RF_SETUP. OxOf); void show_stalus(void

38、) 显示状态寄存器的值 lesl|O| = SPI_Read(EN_AA); tesl| 1 = SPI_Read(EN_RXADDR); test|2 = SPI_Read(SETUP_AW): /0 x01 /0 x01 OxO3,5个字节 test3 = SPI_Read(SETUP_RETR); 忙叫4 = SPI_Read(RF_CH); test|5 = SPI_Read(RF_SETUP); /Oxla /0 x28 /OxOf lesl =SPLRead(RX_ADDR_P2); test(7 = SPI_Read(RX_ADDR_P3); test|8| = SPI_Read

39、(RX_ADDR_P4); lesU9 = SPI_Read(RX_ADDR_P5); tesl|10 = SPI_Read(RX_PW_PO); /0 xl4 tesl|ll| = SPI_Read(STATUS); 待机 SPI禁止读写 void initjo(void) CE = 0; CSN= 1; SCK = 0; void Inituart(void)/设置串口工作模式 TMOD 1= 0 x20: TL1 =Oxfd; TH1 =Oxfd: SCON = 0 x50; TRI = 1; TI=1; 定时湍1 1:作在方式2.8位自动重装模式 波持率为9600 模式1. 8位数据

40、启动定时器1 void initJntO(void)/外部中断设宜 EA=1; ES=1; EX0=l: 允许全局中断 开串行口中断 允许外部中断0 void delay_ms(unsigned int x) 亳秒级延时 unsigned int i.j: i=0: j=108; while(j-); ) 3.发送模块主函数(向接收模块发射数据abcdefg冲断方式) void main(void) int i; InituartO: initJntOO; for(i=0:i7:i+) tx.butlij = H+i: /IO端口设宜 串口设宜 外部中断0设宜 待发的数据tx_buf.发送的数

41、抿为Sbcdefg七个字鯨 whiled) CE = O:/Standby-1模式 TX.ModeO;发送设貝 CE=1;启动发送模式 delay_nis(2O); CE = 0:/Standby-1模式 delay_nis( 1000); 中断函数 如果RX_DR=1,则读取数据,之后清除标志位; 如果TX_DS或MAX_RT为1,则仅淸除中断标志位 void ISRJntO(void) interrupt 0 sta=SPLRead(STATUS);读状态寄存器 STATUS if(RX_DR)如接收到数据,则中断 SPI_Read_Buf(RD_RX_PLOAD.rx_bufTX_PLO

42、AD_ WIDTH/ 读取接收的数据 flag=l;标志位宜高 if(MAX_RT)重发中断达到最大数 SPI_RW_Reg(FLUSH_TXO);清除 TX FIFO 寄存器 SPI_RW_Reg(WRITE_REG+STATUS.sta): 清除 RX_DR.TX_DS 和 MAXRT 中断标,忐位 4.接收模块主函数(接收并在串口输出,同时输岀状态寄存器的值,使用査询方式) void main(void) f i int i; /IO端口设宜 IniluartO; 串口设宜 initJntOO; 外部中断0设宜 CE=0; /Standby-1 模式 RX_Mode(); 设宜接收模式

43、CE=1; 准备接收数据 while( 1) sta=SPI_Read(STATUS): if(RX_DR) 接收到数据 i SPI_Read_Buf(RD_RX_PLOADrx_buf.TX_PLOAD_WIDTH); 读収接收的数据 for(i=0:i7:i+) printf(H%c rx_bufli):通过串口发送接收到的数据 printf(uif): show.statusO;输出状态寄存器的值,可不用此操作 for(i=0:ivl2:i+) printf(M%x H,testi); printfW); delay_ms( 10): 重发中断达到最大数 清除TX FIFO寄存器 清除R

44、X_DR.TX_DS和MAX.RT中断标,忐位 if(MAX_RT) SPI_RW_Reg(FLUSH_TX.O); SPI_RW_Reg(WRITE_REG+STATUS uchar data(4=zhouB; uchar rx_buf4; 引脚定义2274 #define CSN_HIGH P3OUT|=BIT1/P3.1 控制 SPI 使能 #define CSN_LOW P3OUT SPI初始化程序2274 void SPINIT() UCAOCTLO |=UCMSB + UCMST + UCSYNCy/ 3-pin, 8-bit SPI master UCA0CTL1 |= UCSS

45、ELJ; / ACLK UCAOBRO |= 0 x03波特率 9600 UCA0BR1 = 0; UCAOMCTL = 0X91; UCA0CTL1 P3SELI-BIT0+BIT4+BIT5; 正宗SPI写一字节数据到24L01,同时返回一个自己的数据2274 uchar SPI_RW(uchar byte) while (!(IFG2 UCAOTXBUF=byte; delay_us(200); return UCAORXBUF; */ 模拟SPI方式 uchar SPI_RW(uchar byte) uchar bitctr; uchar a,b; for(bit_ctr=0;bit_

46、ctr8;bit_ctr+) a=(byte if(a!=O) MOSLHIGH; else MOSI_LOW; byte=(byte1); SCK_HIGH; b=”P3IN” if(b!=O) byte+=1; else; SCK_LOW; return byte; 向寄存器写一字节的数据同时返回状态字 uchar SPI_RW_Reg(uchar reg,uchar value) uchar status; CSN_LOW; status=SPr_RW(reg); SPLRW(value); CSN_HIGH; return(status); 向寄存器读出一字节的数据 uchar SPI

47、_Read(uchar reg) uchar byte; CSN_LOW; SPI_RW(reg); byte=-SPIRW(OxOO)y/ 写入一个 0 x00,读出数据 CSN_HIGH; return byte; 读出bytes字节的数据 uchar SPI_Read_Buf(uchar reg,uchar *pBuf,uchar bytes) uchar statusfbyte_ctr; CSN_LOW; status=SPr_RW(reg);/选择寄存器并返回状态 (or(byte_ctr=0;byte_ctrbytes;byte_ctr+) pBufbyte_ctr=SPI_RW(O); CSN_HIGH; return(status); 写入bytes字节的数据 uchar SPI_RW_Buf(uchar reg,uchar *pBuftuchar bytes) uchar status,byte_ctr; CSN_LOW; status=SPr_RW(reg); for(byte_ctr=0;byte_ctrbytes;byte_ctr+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论