nrf24l01接收如何使用

 我来答
那时虾米
推荐于2016-12-02 · TA获得超过4.4万个赞
知道大有可为答主
回答量:5054
采纳率:0%
帮助的人:3394万
展开全部
NRF24L01寄存器如何设置
主模式控制下的寄存器的操作设置

器件利用两个引脚进行数据传送:
? 串行时钟(SCL)——RC3/SCK/SCL
? 串行数据(SDA)——RC4/SDI/SDA
用户可以通过设置TRISC<4:3>位将这两个引脚设为输
入或输出。
MSSP模块有六个寄存器用于I2C 操作,它们是:
? MSSP控制寄存器 (SSPCON)
? MSSP控制寄存器 2(SSPCON2)
? MSSP状态寄存器 (SSPSTAT)
? 串行接收/发送缓冲器 (SSPBUF)
? MSSP 移位寄存器 (SSPSR)—不可直接访问
? MSSP 地址寄存器 (SSPADD)
SSPCON、SSPCON2 和SSPSTAT是 I2C 操作的控制
和状态寄存器。 SSPCON和SSPCON2寄存器可读写。
SSPSTAT 的低6 位为只读,高2 位可读写。
SSPSR 是用于将数据移入或移出的移位寄存器。
SSPBUF 是缓冲寄存器, 数据字节写入或从该寄存器中
读取。
当 SSP 被设置为 I2C 从模式时,SSPADD 寄存器用于
保存从机地址。当 SSP 被设置为主模式时, SSPADD
的低7 位作为波特率发生器的重装值。
接收时,SSPSR和 SSPBUF共同构成一个双缓冲接收
器。当 SSPSR 接收到一个完整字节时,该字节就被移
入SSPBUF,同时 SSPIF中断被置 1。
发送时,SSPBUF无双缓冲。写 SSPBUF 等同于同时
写SSPBUF和SSPSR。

寄存器 10-3: SSPSTAT:MSSP 状态(I
2C 模式)寄存器(地址为 94h)
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
SMP CKE D/A PSR/W UA BF
bit 7 bit 0
bit 7 SMP: 转换率控制位
主、从模式下:
1 = 关闭转换率控制,标准速度方式(100 kHz 和 1 MHz)
0 = 使能转换率控制,高速方式 (400 kHz)
bit 6 CKE: SMBus 选择位
主、从模式下:
1 = 使能 SMBus专用输入
0 = 禁止 SMBus专用输入
bit 5 D/A: 数据/地址位
主模式下:
保留。
从模式下:
1 = 表示最后接收或发送的字节是数据
0 = 表示最后接收或发送的字节是地址
bit 4 P: 停止位
1 = 表示最后检测到停止位
0 = 表示最后未检测到停止位
注: 复位及SSPEN 被清零时该位被清零。
bit 3 S: 起始位
1 = 表示最后检测到起始位
0 = 表示最后未检测到起始位
注: 复位及SSPEN 被清零时该位被清零。
bit 2 R/W: 读/ 写位信息 (仅限I2C模式)
从模式下:
1 = 读
0 = 写
注: 在前一次地址匹配时该位保存读 / 写位信息。该位仅在地址匹配至下一个开始位、
停止位或非 ACK时有效。
主模式下:
1 = 正在进行发送;
0 = 不在进行发送。
注: 该位与SEN、RSEN、PEN、RCEN 或ACKEN 位进行逻辑或操作时将表明MSSP
是否处于空闲状态。
bit 1 UA: 地址更新位(仅限10 位从模式)
1 = 表示用户需要更新 SSPADD 寄存器中的地址
0 = 表示不需要更新地址
bit 0 BF: 缓冲器满状态位
接收时:
1 = 表示接收完成, SSPBUF 已满
0 = 表示接收未完成, SSPBUF 空
发送时:
1 = 数据发送正在进行(不包括 ACK 位和停止位) , SSPBUF 满
0 = 数据发送已完成 (不包括 ACK 位和停止位),SSPBUF 空
图注:
R = 可读位 W = 可写位 U = 未使用,读作 0
- n = 上电复位值 “1” = 该位被置 1 “0” = 该位被清零 x = 未知状态

寄存器 10-4: SSPCON:MSSP控制 (I
2C 模式)寄存器 1 (地址为 14h)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
bit 7 bit 0
bit 7 WCOL: 写冲突检测位
主发送模式下:
1 = 不具备开始发送的I
2C 条件时试图向 SSPBUF 寄存器写入数据 (必须用软件清零) 。
0 = 未发生冲突
从发送模式下:
1 = 正在发送前一个数据时又有数据写入 SSPBUF 寄存器(必须用软件清零)。
0 = 未发生冲突
接收时 (主、从模式) :
该位是 “无关”位。
bit 6 SSPOV: 接收溢出指示位
接收时:
1 = SSPBUF 寄存器中仍然保持前一个数据时又收到新的字节 (必须用软件清零) 。
0 = 未发生溢出
发送时:
该位是 “无关”位。
bit 5 SSPEN: 同步串行口使能位
1 = 使能串行口操作,并设定 SDA 和 SCL 为串行口引脚
0 = 关闭串行口操作,并设定这些引脚为 I/O 引脚
注: 使能时,SDA和SCL引脚必须正确设定为输入或输出。
bit 4 CKP: SCK 释放控制位
从模式下:
1 = 释放时钟
0 = 保持时钟为低电平(时钟扩展)。 (用于确保数据建立时间)。
主模式下:
该模式下未使用。
bit 3-0 SSPM3:SSPM0: 同步串行口模式选择位
1111 = I
2C 从模式, 10 位地址且启动位和停止位中断使能
1110 = I
2C 从模式, 7 位地址且启动位和停止位中断使能
1011 = I
2C 固件控制为主模式 (从模式空闲)
1000 = I
2C 主模式,时钟 = FOSC/(4 * (SSPADD + 1))
0111 = I
2C 从模式, 10 位地址
0110 = I
2C 从模式, 7 位地址
注: 其他的位组合方式保留未用或仅用于SPI 方式。
图注:
R = 可读位 W = 可写位 U = 未使用,读作 0
- n = 上电复位值 “1” = 该位被置 1 “0” = 该位被清零 x = 不确定

寄存器 10-5: SSPCON2:MSSP 控制(I
2C 模式)寄存器 2 (地址为 91h)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN
bit 7 bit 0
bit 7 GCEN: 广播呼叫使能位 (仅限从模式)
1 = 收到来自 SSPSR的广播呼叫地址时(0000h)使能中断
0 = 禁止广播呼叫地址
bit 6 ACKSTAT: 应答状态位 (仅限主模式)
1 = 未收到从机的应答
0 = 收到从机的应答
bit 5 ACKDT: 应答数据位 (仅限主模式)
1 = 未应答
0 = 已应答
注: 当用户在接收之后启动应答时序时将要发送的值。
bit 4 ACKEN: 应答顺序使能位 (仅限主模式)
1 = 在SDA 和 SCL 引脚上启动应答顺序,并发送 ACKDT 数据位。
由硬件自动清零。
0 = 应答顺序空闲
bit 3 RCEN: 接收使能位 (仅限主模式)
1 = 使能 I
2C 接收模式
0 = 接收空闲
bit 2 PEN: 停止条件使能位 (仅限主模式)
1 = 在 SDA 和 SCL 引脚上启动停止条件,由硬件自动清零
0 = 停止条件空闲
bit 1 RSEN: 重复起始条件使能位 (仅限主模式)
1 = 在SDA 和 SCL 引脚上启动重复起始条件,由硬件自动清零
0 = 重复起始条件空闲
bit 0 SEN: 起始条件使能/ 扩展使能位
主模式下:
1 =在 SDA 和 SCL 引脚上启动起始条件,由硬件自动清零
0 = 起始条件空闲
从模式下:
1 = 在从动发送和从动接收时均使能时钟扩展(扩展使能)
0 = 只在从动发送时使能时钟扩展(与 PIC16F87X 兼容)
注: 对于 ACKEN、 RCEN、PEN、 RSEN 和 SEN 等位,如果 I
2C 模块不处于空闲状
态,该位可能不置 1 (无假脱机技术),且 SSPBUF 寄存器可能不写入(或写入
SSPBUF 被禁止)。
图注:
R = 可读位 W = 可写位 U = 未使用,读作0
- n = 上电复位值 “1”= 该位被置 1 “0” = 该位被清零 x = 不确定

10.4.6 主模式
通过对SSPCON寄存器中的各相应SSPM位置1和清
零并对 SSPEN置 1可以使能主模式。主模式下,SCL
和 SDA信号线由 MSSP硬件控制。
主操作模式是通过检测起始(START)和停止(STOP)
条件产生中断来工作的。起始标志位(P)和停止标志
位(S)在复位或关闭MSSP模块时被清零。当P位被
置1后可得到I
2C总线的控制权;否则当P位和S位都
清零时,总线空闲。
在固件控制下的主模式中,用户程序基于启动位和停止
位的状态完成 I
2C 总线的操作。
主模式使能后,用户有以下 6 种选择:
1. 在 SDA和 SCL 上发送起始条件;
2. 在 SDA和 SCL 上发送重复起始条件;
3. 写 SSPBUF寄存器,启动数据/地址的传送;
4. 设置 I
2C 端口以接收数据;
5. 数据字节接收完毕后,发出应答信号;
6. 在 SDA和 SCL 上发送停止条件。

以下几种情况会引起SSP中断标志位SSPIF置1, (如
果中断允许则产生SSP 中断) :
? 起始条件
? 停止条件
? 发送/接收的传输字节
? 发送应答信号
? 重复启动状态
注: 当 MSSP 模块设置为 I
2C 主模式时,不允
许事件列队。例如:不允许用户启动起始条
件,并在起始条件完成之前立即向
SSPBUF 寄存器写数据以启动数据的发
送。在这种情况下,不能向 SSPBUF 寄存
器写数据,且写冲突检测标志位 WCOL 被
置1,表明未发生数据写入 SSPBUF。
10.4.6.1 I
2C 主模式的操作
主机产生所有的串行时钟脉冲和启动 / 停止信号。当停
止信号或重复启动信号到来时中止传送。由于重复启动
信号也是下一个串行传送的开始,因此 I
2C 总线不会被
释放。
在主发送器模式下, 串行数据通过SDA线输出, 而SCL
输出串行时钟。 发送的首字节包括接收器件的从机地址
(7 位)和读 / 写位 (R/W)。此时 R/W 位将为逻辑
“0” 。串行数据每次发送 8 位。在发送完每个字节后,
接收到一个应答位。输出起始和停止条件分别表示串行
传输的开始和结束。
在主接收模式下,发送的首字节包括发送器件的从机地
址(7 位)和读 / 写位。这时 R/W 将为逻辑“1”。这
样,发送的首字节是一个 7 位的从地址,并紧跟一个
“1”以表明是一个接收位。串行数据通过 SDA 接收,
而 SCL 输出串行时钟。串行数据每次接收 8 位。每个
字节接收之后都发送一个应答位。起始和停止条件分别
表明传输的开始和结束。
原来用于 SPI模式下的波特率发生器,在I
2C模式下用
来设置SCL时钟频率, 可分别设置为100 kHz、 400 kHz
或 1MHz。详见第10.4.7 节 “波特率发生器 ” 。

典型发送顺序如下:
1. 用户通过将起始使能位 SEN(SSPCON2<0>)
置1 进入启动状态;
2. SSPIF置1,在进行其他操作前,SSP 模块将等
待所需的启动时间;
3. 将从机地址装入SSPBUF 进行传送;
4. 地址从SDA 脚移出,直到所有的 8 位被发送;
5. MSSP 模块将从机的 ACK 逐位移入,并将它的
值送入SSPCON2(SSPCON2<6>)
6. MSSP模块在第9个时钟周期的末尾将 SSPIF 置
1,产生一个中断;
7. 用户将8 位数据装入SSPBUF;
8. 数据从SDA 引脚移出, 直到所有8位发送完毕;
9. MSSP 模块将从机的 ACK 位移入,并将它的值
写入SSPCON2寄存器 (SSPCON2<6>);
10. MSSP 模块在第9个时钟周期的末尾将 SSPIF 置
1,产生一个中断;
11. 用户通过将停止使能位 PEN(SSPCON2<2>)
置1 来产生停止条件;
12. 一旦停止条件完成,即产生一个中断。
10.4.7 波特率发生器
在 I
2C 主模式下,波特率发生器 BRG 的重装值被置于
SSPADD 寄存器的低7 位(图 10-17)。当对 SSPBUF
进行写操作时,波特率发生器自动开始计数。 BRG 递
减计数至 0,然后停止,等待再次装入。BRG计数值在
每个指令周期(TCY)共递减两次,分别发生在第二个
时钟周期 Q2和第四个时钟周期 Q4。在I
2C 主模式下,
BRG自动重装。
一旦给定的操作完成(例如,发送完最后一个数据位后
收到 ACK),内部时钟将自动停止计数,SCL 引脚保
持前一个状态不变。
表 10-3显示不同指令周期的时钟速率以及装入SSPADD
的BRG值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式