[求助] 430 NRF24L01无线通信

芯风作浪   2014-8-20 11:34 楼主
/////////////////////////读写操作/////////////////////////////////////
uchar SPI_RW(uchar byte)
{
        uchar bit_ctr;
        PORT &=~(BIT(CLK));

           for(bit_ctr=0;bit_ctr<8;bit_ctr++)               // output 8-bit
           {      



                if(byte & 0x80)
                   PORT |= BIT(MOSI);                  
                else
                {
                PORT &= ~(BIT(MOSI));                   // output 'byte', MSB to MOSI
                }

                   byte = (byte << 1);                     // shift next bit into MSB..
                   PORT |=BIT(CLK);                        // Set clk high..
                if(PIN&(BIT(MISO)))
                   byte |= BIT0;                               // capture current MISO bit
                else
                {  
                byte &=~BIT0;
                }
                   PORT &=~BIT(CLK);                        // set  clk low
           }
        PORT &=~(BIT(MOSI));                              //PULL DOWN THE MOSI
    return(byte);                                            // return read byte
}
为什么还要把MISO读取出来啊???

回复评论 (3)

这个和SPI的通信原理有关。SPI使用的是串行推送机制,在发送数据的同时,会接收数据。也就是说,SPI如果需要接收数据,需要先写,也即假写。你发的程序,就是根据这个原理,把读和写结合在一块了。
点赞  2014-8-20 11:50

板凳 jyb2014 该用户已被删除

提示: 作者被禁止或删除 内容自动屏蔽
点赞  2014-8-20 13:57
引用: armcu 发表于 2014-8-20 11:50
这个和SPI的通信原理有关。SPI使用的是串行推送机制,在发送数据的同时,会接收数据。也就是说,SPI如果需 ...

谢谢
点赞  2014-8-20 14:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复