nrf24l01无线模块一个程序不懂

/**************************************************
Function: SPI_RW();

Description:
Writes one byte to nRF24L01, and return the byte read
from nRF24L01 during write, according to SPI protocol
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0;i<8;i++) // output 8-bit
{
MOSI = (byte & 0x80); // output 'byte', MSB to MOSI
byte = (byte << 1); // shift next bit into MSB..
SCK = 1; // Set SCK high..
byte |= MISO; // capture current MISO bit
SCK = 0; // ..then set SCK low again
}
return(byte); // return read byte
}
问题1.:前面有定义sbit MOSI=P1^0;sbit MISO=P1^1;那么这一句MOSI = (byte & 0x80); 解释说将结果的高位赋给MOSI(MOSI是位操作),51单片机不是按从低位取数码?,这一句是用到数据类型转换吗(字节型转位)?
问题2:为何这个函数边写边读?读出的是上面东东呢?
望高手指点!

1.如果这个程序没有错误的话,那这句就是默认进行了字节到位的数据类型转换,当然你也可以不用这句来实现,实现的方法很多!
2.24L01在时钟上升沿写入,下降沿输出,读出的是状态寄存器的数值。建议看看英文的PDF.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-26
一、不能那样想,位只有两种值,是0,还是1。也就是真还是假。
二、byte移了之后,输出的又补上。当然是就了。
如果还不明白,有时间的话,可以跟我聊聊。当然也可以留言。
第2个回答  2012-06-26
这个双通的程序?不是单通的,这个程序发出去时候,那个接的模块也会给发的模块信息。

在调试nrf24l01无线模块的时候遇到难题
nRF24L01模块工作电压是1.9~5V的,接5V电源应该是烧坏了。再买几块吧,记得电源别超过3.6V。

关于无线模块NRF24L01调试问题
你调试下发送端,看其状态寄存器值是多少,首先要保证发送端能正常发送才行。其次,关闭接收端自动应答,看看能不能接收到数据。接收状态寄存器值应该为0X40才对。全速运行,看看程序是不是停到哪了。

求51单片机nRF24L01+无线模块的程序和设计电路图,收和发的
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。nRF24L01供应商:拍明芯城元器件商城 简介 输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到...

关于NRF24L01通信的问题
#define NRF24_REUSE_TX_PL 0xE3 \/\/重新使用上一包数据,CE为高,数据包被不断发送.#define NRF24_NOP 0xFF \/\/空操作,可以用来读状态寄存器\/\/SPI(NRF24L01)寄存器地址#define NRF24_CONFIG 0x00 \/\/配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能; \/\/bit4:中断MAX_R...

用nRF24L01做了一个无线通信系统,程序用C写的,但是传输时偶尔有丢包现...
最好你应该做一个简单的协议,有发送,有回复。如果接收端错误,返回错误,让发送端重发,还需要设置一个超时重发机制,设置最大重发次数。nrf2401本身也可以设置超时重发,我当时设置的重发10次,当时距离离得远一点,就会出现丢包。后来我做了上述的简单的可靠传输协议,才行。最好设置led灯显示,便于...

单片机,无线收发模块NRF24L01+为什么接收机前几次能成功接收,后来就什 ...
这个寄存器,配置还是很复杂的,你尝试把每次发射之间的时间加长一点,可能是寄存器过压,你再看看程序,是不是有问题,或者程序跑飞了

无线模块nrf24l01 丢包
当发送数据没有被成功接收既是丢包。nRF24L01有AA(自动重发)功能,但只能在一定程度上减少丢包的现象。当设备故障、超出最大有效通讯距离、接收端未及时响应、缓冲区溢出等情况时,就算开启了自动重发功能也会丢包。nRF24L01通常每次最大可以传输32Byte字节的数据....

有谁用过NRF24L01无线模块
在固定长度数据包模式下,接收端在未接收到指定长度的数据包之前是不会进行CRC校验和改变IRQ引脚状态的。在Enhanced ShockBurst™协议中,前导码、同步字、地址位和CRC校验位全部由nRF24L01完成。使用者仅需在TX_FIFO中写入需要传输的数据即可,在发送时nRF24L01会自动将其它字段附加在发送的信号序列中...

nRF24L01无线模块工作原理
nRF24L01无线模块在工作时,依据其模式配置完成数据的发送与接收。在发射数据时,首先需要将模块配置为发射模式。接着,接收节点的地址(TX_ADDR)和有效数据(TX_PLD)通过SPI口按照特定时序写入nRF24L01的缓存区。其中,TX_PLD需要在CSN为低电平时连续写入,而TX_ADDR则在发射时写入一次即可。随后,CE信号...

nRF24l01无线模块 程序里有个头文件:#include<api.h> 谁知道,麻烦给下...
包含intrins.h这个文件,在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.如果你要用到这个库文件里的函数的话,你就得包含它。比如你要用_irol_这个函数,你就得包含它,要不让编译器会找不到这个函数,就会报错。举例:include <intrins.h> main(){ unsigned ...

相似回答
大家正在搜