初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2016-5-19
- 在线时间
- 5 小时
|
3金钱
在看I2C的例程在看的时候,其它都能明白,但下面这两段程序总感觉没有完全弄明白! AT24CXX_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1),分别调用了一个字节的读和写程序;但(DataToWrite>>(8*t))&0xff 和(ReadAddr+Len-t-1)但这两个就是没明白,能帮忙解释下吗? 谢谢
//在AT24CXX里面的指定地址开始写入长度为Len的数据
//该函数用于写入16bit或者32bit的数据.
//WriteAddr :开始写入的地址
//DataToWrite:数据数组首地址
//Len :要写入数据的长度2,4
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
{
u8 t;
for(t=0;t<Len;t++)
{
AT24CXX_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff);
}
}
//在AT24CXX里面的指定地址开始读出长度为Len的数据
//该函数用于读出16bit或者32bit的数据.
//ReadAddr :开始读出的地址
//返回值 :数据
//Len :要读出数据的长度2,4
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)
{
u8 t;
u32 temp=0;
for(t=0;t<Len;t++)
{
temp<<=8;
temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1);
}
return temp;
|
最佳答案
查看完整内容[请看2#楼]
u32是4个字节的 0xAABBCCDD AA是8位 BB是8位 CC DD 也是8位
那么 >>8位 就是吧DD切掉 一开始是>>0 所以是0xAABBCCDD &0xFF
只是取8位 也就是DD 然后>>8位 就变成0x00AABBCC &0xFF 得到的就是CC
下面一样的原理 有点锯木头的感觉
|