关于移位的问题

2019-07-20 23:34发布

void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{
        u16 i;                                                                                       
        W25QXX_CS=0;                            //使能器件   
    SPI1_ReadWriteByte(W25X_ReadData);         //发送读取命令   
    SPI1_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址   
    SPI1_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPI1_ReadWriteByte((u8)ReadAddr);   
    for(i=0;i<NumByteToRead;i++)
        {
        pBuffer[i]=SPI1_ReadWriteByte(0XFF);   //循环读数  
    }
        W25QXX_CS=1;                                                   
}
以上代码中的
SPI1_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址   
    SPI1_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPI1_ReadWriteByte((u8)ReadAddr);  是把ReadAddr移到哪里去了啊,按道理是一出去后就没有了啊,怎么又开始移了,望大神指教啊

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
likunxue
1楼-- · 2019-07-21 00:00
本帖最后由 likunxue 于 2016-2-27 13:37 编辑

按位来理解吧!SPI1_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址   
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));   
SPI1_ReadWriteByte((u8)ReadAddr);  是把ReadAddr移到哪里去了啊,按道理是一出去后就没有了啊,怎么又开始移了,望大神指教啊
                                                                                                     0x00        0xaa        0x55         0xff
首先 假若  ReadAddr 是一个32位的变量  值为 0x00AA55FF;   二进制表示:  00000000  10101010  01010101  11111111    共32个位
                                                                                                     32            24           16            8
SPI1_ReadWriteByte((u8)((ReadAddr)>>16));       这里的 (u8)((ReadAddr)>>16)  意意是把 ReadAddr的值前移16个位 变化为  二进制 00000000  00000000  00000000  10101010   然后 (u8) 将其强制转化为8位数据结构  变为 0XAA 发送出去,  
但记住  这时ReadAddr的值并没有改变,依然是 原值  0X00AA55AA;  看C语言基础的书去理解 左值操作  (只取了一个 0XAA的值发送出去)SPI1_ReadWriteByte((u8)((ReadAddr)>>8));    按上面的意思 取到的值是 0X55;
因为 ReadAddr>>8 后 结果是 00000000 00000000  10101010  01010101     强制转换为8位后, 高位不要, 只取低8位 到到0X55;
SPI1_ReadWriteByte((u8)ReadAddr);  取到的值是   0XFF; 高位都不要,只取低8位
分三次将 ReadAddr 中的24位值按8位的方式发送出去.

能理解不?




未来,我来
2楼-- · 2019-07-21 00:28
 精彩回答 2  元偷偷看……

一周热门 更多>