微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > nrf24l01简单问题

nrf24l01简单问题

时间:10-02 整理:3721RD 点击:
第一次接触模块化,就遇到如此问题:

uchar SPI_RW(uchar byte)//写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据

{

         ucharbit_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);

}


请问byte |= MISO;是如何把MISO返回的,如果返回不是直接把MISO赋值给一个变量?为什么非要将miso与byte或在赋给byte,这样一来不就影响了把byte写进nrf24l01(在byte移位之后改变了byte的值)?

能帮帮不

uchar SPI_RW(uchar byte)
{
   uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
   MOSI=(byte&0x80);
   
   byte=(byte<<1);
   SCK=1;
   byte|=MISO;
   //led=MISO;Delay(150);
     SCK=0;
}

我也是这个问题?给位大神有知道的吗?

这个不会影响!你可以自已定义一个char变量,返回的值是一样的!因为MOSI=(byte&0x80);所次是把byte的最高位写入MOSI;之后byte左移一位,那byte最低位就为0;后面的byte|=MISO,又把MISO写入byte的最低位,经过8次循环后,刚好把byte传入MOSI,MISO传入byte11

这个是有向左移位的,不影响最后的取值。

6L 正解!自己要多琢磨呀

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top