收藏 分销(赏)

无线通信模块使用手册样本.doc

上传人:二*** 文档编号:4477790 上传时间:2024-09-24 格式:DOC 页数:25 大小:2.94MB 下载积分:5 金币
下载 相关 举报
无线通信模块使用手册样本.doc_第1页
第1页 / 共25页
本文档共25页,全文阅读请下载到手机保存,查看更方便
资源描述
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。 二、模块电气特性 参数 数值 单位 供电电压 5 V 最大发射功率 0 dBm 最大数据传播率 2 Mbps 电流消耗(发射模式,0dBm) 11.3 mA 电流消耗(接受模式,2Mbps) 12.3 mA 电流消耗(掉电模式) 900 nA 温度范畴 -40~+85 ℃ 三、模块引脚阐明 管脚 符号 功能 方向 1 GND 电源地 2 IRQ 中断输出 O 3 MISO SPI输出 O 4 MOSI SPI输入 I 5 SCK SPI时钟 I 6 NC 空 7 NC 空 8 CSN 芯片片选信号 I 9 CE 工作模式选取 I 10 +5V 电源 四、模块与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电阻。 五、工作模式控制 工作模式由CE和PWR_UP、PRIM_RX两寄存器共同控制: 模式 PWR_UP PRIM_RX CE FIFO寄存器状态 接受模式 1 1 1 - 发射模式 1 0 11 数据存储在FIFO寄存器中,发射所有数据 发射模式 1 0 0→12 数据存储在FIFO寄存器中,发射一种数据 待机模式II 1 0 1 TX FIFO为空 待机模式I 1 - 0 无正在传播数据 掉电模式 0 - - - 注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命令字节表 指令名称 指令格式(二进制) 字节数 操作阐明 R_REGISTER 000A AAAA 1~5 读寄存器。AAAAA表达寄存器地址。 W_REGISTER 001A AAAA 1~5 写寄存器。AAAAA表达寄存器地址,只能在掉电或待机模式下操作。 R_RX_PAYLOAD 0110 0001 1~32 在接受模式下读1~32字节RX有效断气。从字节0开始,数据读完后,FIFO寄存器清空。 W_TX_PAYLOAD 1010 0000 1~32 在发射模式下写1~31字节TX有效数据。从字节0开始。 FLUSH_TX 1110 0001 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 CONFIG 配备寄存器 Reserved 7 0 R/W 默以为0 MASK_RX_DR 6 0 R/W 可屏蔽中断RX_RD 1:中断产生时对IRQ没影响 0:RX_RD中断产生时,IRQ引脚为低 MASK_TX_DS 5 0 R/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 R/W CRC使能。如果EN_AA中任意一位为高,则EN_CRC为高。 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™ 使能“自动应答”功能 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 R/W 数据通道0自动应答使能位 02 EN_RXADDR 接受地址容许 Reserved 7:6 00 R/W 默以为00 ERX _P5 5 0 R/W 数据通道5接受数据使能位 ERX _P4 4 0 R/W 数据通道4接受数据使能位 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 R/W 接受/发射地址宽度: 00:无效 01:3字节 10:4字节 11:5字节 04 SETUP_RETR 自动重发 ARD 7:4 0000 R/W 自动重发延时时间: 0000:250us 0001:500us …… 1111:4000us ARC 3:0 0011 R/W 自动重发计数: 0000:禁止自动重发 0001:自动重发1次 …… 1111:自动重发15次 05 RF_CH 射频通道 Reserved 7 0 R/W 默以为0 RF_CH 6:0 0000010 R/W 设立工作通道频率 06 RF_SETUP 射频寄存器 Reserved 7:5 000 R/W 默以为000 PLL_LOCK 4 0 R/W 锁相环使能,测试下使用 RF_DR 3 1 R/W 数据传播率: 0:1Mbps 1:2Mbps RF_PWR 2:1 11 R/W 发射功率: 00:-18dBm 01:-12dBm 10:-6dBm 11:0dBm LNA_HCURR 0 1 R/W 低噪声放大器增益 07 STATUS 状态寄存器 Reserved 7 0 R/W 默认值为0 RX_DR 6 0 R/W 接受数据中断位。当收到有效数据包后置1。 写‘1’清除中断 TX_DS 5 0 R/W 发送数据中断。如果工作在自动应答模式下,只有当接受到应答信号后置1。 写‘1’ 清除中断 MAX_RT 4 0 R/W 重发次数溢出中断。 写‘1’清除中断。 如果MAX_RT中断产生,则必要清除后才干继续通讯 RX_P_NO 3:1 111 R 接受数据通道号: 000-101:数据通道号 110:未使用 111:RX FIFO寄存器为空 TX_FULL 0 0 R TX FIFO寄存器满标志位 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 E7E7E7E7E7 R/W 数据通道0接受地址。最大长度为5个字节。 0B RX_ADDR_P1 39:0 C2C2C2C2C2 R/W 数据通道1接受地址。最大长度为5个字节。 0C RX_ADDR_P2 7:0 C3 R/W 数据通道2接受地址。最低字节可设立,高字节必要与RX_ADDR_P1[39:8]相等 0D RX_ADDR_P3 7:0 C4 R/W 数据通道3接受地址。最低字节可设立,高字节必要与RX_ADDR_P1[39:8]相等 0E RX_ADDR_P4 7:0 C5 R/W 数据通道4接受地址。最低字节可设立,高字节必要与RX_ADDR_P1[39:8]相等 0F RX_ADDR_P5 7:0 C6 R/W 数据通道5接受地址。最低字节可设立,高字节必要与RX_ADDR_P1[39:8]相等 10 TX_ADDR 39:0 E7E7E7E7E7 R/W 发送地址。在ShockBurstTM模式,设立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 00 R/W 默以为00 RX_PW_P1 5:0 0 R/W 数据通道1接受数据有效宽度: 0:无效 1:1个字节 …… 32:32个字节 13 RX_PW_P2 Reserved 7:6 00 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 00 R/W 默以为00 RX_PW_P5 5:0 0 R/W 数据通道5接受数据有效宽度: 0:无效 1:1个字节 …… 32:32个字节 17 FIFO_STATUS FIFO状态寄存器 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_FIFO寄存器满标志 1:寄存器满 0:寄存器未满,有可用空间 TX_EMPTY 4 1 R TX_FIFO寄存器空标志 1:寄存器空 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.ShockBurstTM发射模式 ①设立PRIM_RX为低。 ②通过SPI接口,将接受节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块,写TX_PLD时,CSN必要始终置低。 ③置CE为高,启动发射。CE高电平持续时间至少为10us。 ④ShockBurstTM发射模式: 系统上电 启动内部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接口将数据读出 ⑧模块准备好进入发射模式或接受模式或待机模式。 九、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 0x00 //读第0个寄存器 #define WRITE_REG 0x20 //写第0个寄存器 #define RD_RX_PLOAD 0x61 //在接受模式下使用,读有效数据 #define WR_TX_PLOAD 0xA0 //在发送模式下使用,写有效数据 #define FLUSH_TX 0xE1 //在发送模式下使用,清TX FIFO寄存器 #define FLUSH_RX 0xE2 //在接受模式下使用,清RX FIFO寄存器 #define REUSE_TX_PL 0xE3 //发送方使用,重复发送最后数据 #define NOP 0xFF //空操作,用于读状态寄存器STATUS值 // nRF24L01寄存器地址 #define CONFIG 0x00 //配备寄存器,8bit #define EN_AA 0x01 //自动应答设立寄存器,8bit #define EN_RXADDR 0x02 //接受地址设立寄存器,8bit #define SETUP_AW 0x03 //地址宽度设立寄存器,8bit #define SETUP_RETR 0x04 //自动重复发送设立寄存器,8bit #define RF_CH 0x05 //RF通道寄存器,8bit #define RF_SETUP 0x06 //RF设立寄存器,8bit #define STATUS 0x07 //状态寄存器,8bit #define OBSERVE_TX 0x08 //发送观测寄存器,8bit #define CD 0x09 //载波检测寄存器,8bit, #define RX_ADDR_P0 0x0A //接受地址数据通道0,40bit #define RX_ADDR_P1 0x0B #define RX_ADDR_P2 0x0C #define RX_ADDR_P3 0x0D #define RX_ADDR_P4 0x0E #define RX_ADDR_P5 0x0F #define TX_ADDR 0x10 //发送地址.发送方使用,40bit #define RX_PW_P0 0x11 //通道0接受有效数据字节长度(1-32字节),8bit #define RX_PW_P1 0x12 #define RX_PW_P2 0x13 #define RX_PW_P3 0x14 #define RX_PW_P4 0x15 #define RX_PW_P5 0x16 #define FIFO_STATUS 0x17 //FIFO状态寄存器,8bit 2.SPI操作头文献(与单片机接口设立在此头文献中) #define uchar unsigned char #define TX_ADR_WIDTH 5 //地址长度为5个字节 #define TX_PLOAD_WIDTH 20 //数据长度为20个字节 uchar const TX_ADDRESS[TX_ADR_WIDTH] = {0xE7,0xE7,0xE7,0xE7,0xE7}; char rx_buf[TX_PLOAD_WIDTH]; //接受缓冲区 uchar flag; //标志位 int test[12]; #define CE P0_0 //芯片使能:Chip Enable #define CSN P0_1 //片选信号:Chip Select Not #define SCK P1_2 //串行时钟信号:Serial Clock #define MOSI P0_3 //主发从收:Master In Slave Out #define MISO P0_4 //主收从发:Master Out Slave In #define IRQ P3_2 //中断查询:Interrupt Request uchar bdata sta; sbit RX_DR = sta^6; sbit TX_DS = sta^5; sbit MAX_RT = sta^4; uchar SPI_RW(uchar byte)//写一种字节到nRF24L01,并返回此时nRF24L01状态及数据 { uchar bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) //先写字节高位,再写低位 { MOSI = (byte & 0x80); //MOSI取byte最高位 byte = (byte << 1); //byte左移一位 SCK = 1; //SCK从高到低时开始写入 byte |= MISO; //获取MISO位.从MOSI写命令同步,MISO返回nRF24L01状态及数据 SCK = 0; } 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到该寄存器 CSN = 1; //终结SPI读写 return(status); } BYTE SPI_Read(BYTE reg)//读寄存器reg状态字 { BYTE reg_val; CSN = 0; //CSN为0时,才干进行SPI读写 SPI_RW(reg); //选取寄存器reg reg_val = SPI_RW(0); //写0,什么操作也不进行,仅仅为了读寄存器状态 CSN = 1; //终结SPI读写 return(reg_val); } uchar SPI_Read_Buf(BYTE reg,BYTE *pBuf,BYTE bytes) //从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址 { uchar status,byte_ctr; CSN = 0; //CSN为0时,才干进行SPI读写 status = SPI_RW(reg); //选取寄存器reg并返回其状态字 for(byte_ctr=0;byte_ctr<bytes;byte_ctr++) pBuf[byte_ctr] = SPI_RW(0); //从寄存器读数据 CSN = 1; //终结SPI读写 return(status); //返回状态值 } uchar SPI_Write_Buf(BYTE reg,BYTE *pBuf,BYTE bytes)//将数据写入寄存器,如TX数据,RX/TX地址等. { uchar status,byte_ctr; CSN = 0; //CSN为0时,才干进行SPI读写 status = SPI_RW(reg); //选取寄存器reg并返回其状态字 for(byte_ctr=0;byte_ctr<bytes;byte_ctr++) SPI_RW(*pBuf++); //写数据到寄存器 CSN = 1; //终结SPI读写 return(status); //返回状态值 } //接受模式初始化:设立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次 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH); //将地址TX_ADDRESS写入寄存器0数据通道0 SPI_RW_Reg(WRITE_REG + EN_AA,0x01); //ENAA_P0=1,数据通道0自动应答 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); //数据通道0RX数据长度为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) { 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); } void show_status(void) //显示状态寄存器值 { test[0] = SPI_Read(EN_AA); //0x01 test[1] = SPI_Read(EN_RXADDR); //0x01 test[2] = SPI_Read(SETUP_AW); //0x03,5个字节 test[3] = SPI_Read(SETUP_RETR); //0x1a test[4] = SPI_Read(RF_CH); //0x28 test[5] = SPI_Read(RF_SETUP); //0x0f 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); //0x14 test[11] = SPI_Read(STATUS); } void init_io(void) { CE = 0; //待机 CSN = 1; //SPI禁止读写 SCK = 0; } void Inituart(void)//设立串口工作模式 { TMOD |= 0x20; //定期器1工作在方式2,8位自动重装模式 TL1 = 0xfd; //波特率为9600 TH1 = 0xfd; SCON = 0x50; //模式1,8位数据 TR1 = 1; //启动定期器1 TI=1; } void init_int0(void)//外部中断设立 { EA=1; //容许全局中断 ES=1; //开串行口中断 EX0=1; //容许外部中断0 } void delay_ms(unsigned int x) //毫秒级延时 { unsigned int i,j; i=0; for(i=0;i<x;i++) { j=108; while(j--); } } 3.发送模块主函数(向接受模块发射数据“abcdefg”,中断方式) void main(void) { int i; init_io(); //IO端口设立 Inituart(); //串口设立 init_int0(); //外部中断0设立 for(i=0;i<7;i++) //待发数据tx_buf,发送数据为”abcdefg”七个字母 tx_buf[i] = 'a'+i; while(1) { CE = 0; //Standby-1模式 TX_Mode(); //发送设立 CE = 1; //启动发送模式 delay_ms(20); CE = 0; //Standby-1模式 delay_ms(1000); } } //中断函数 //如果RX_DR=1,则读取数据,之后清除标志位; //如果TX_DS或MAX_RT为1,则仅清除中断标志位 void ISR_int0(void) interrupt 0 { sta=SPI_Read(STATUS); //读状态寄存器STATUS if(RX_DR) //如接受到数据,则中断 { SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取接受数据 flag=1; //标志位置高 } if(MAX_RT) //重发中断达到最大数 SPI_RW_Reg(FLUSH_TX,0); //清除TX FIFO寄存器 SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除RX_DR,TX_DS和MAX_RT中断标志位 } 4.接受模块主函数(接受并在串口输出,同步输出状态寄存器值,使用查询方式) void main(void) { i
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服