avr单片机编程

来源:百度知道 编辑:UC知道 时间:2024/06/03 01:47:47
unsigned char I2cReadByte(void)
{
unsigned char i,rbyte;
EEDataDirIn;
DELAY;
rbyte = 0;
for(i=8;i--;)
{
EECLK_SET;
DELAY;
DELAY;
rbyte<<=1;
if(EE_SDA!=0)rbyte++;
DELAY;
EECLK_CLR;
DELAY;
}
return rbyte;
}
能不能解释一下运行的逻辑,还有是rbyte<<=1;rebty已经赋0了,移位是要做什么啊
我只是问rbyte<<=1;rebty已经赋0了,移位后他的状态。二楼劝人看书的,自己不会就别来放X,还是自己学好了再来装高手吧。不用你说我自己也会回去看看的。而且你个脑残学习的思维也有问题,我为什么要都学懂了再出来问,估计你是把The C Programming Language学会了再去编程的吧。
期待真正的高手不吝赐教

rbyte<<=1; 这在循环里,循环8次
if(EE_SDA!=0)rbyte++; 这句可以使rbyte自增,也就是rebty赋0只是在初始化后的第一次进入循环时起作用,之后有可能不是0了(EE_SDA!=0)时
经过移位,rbyte可以记录每次读取的EE_SDA寄存器的值,老数据在左,新数据在右

这具体的和你单片机的I2C总线有关
你可以看看该型号单片机的数据手册

同意三楼.
rbyte++; 使它可能不为0.
rbyte<<=1;作用:保留原数据。

我劝你还是回去看看,i2c总线协议吧,要不讲你也不明白的