在郭天祥的那本书中关于I2C总线 EEPROM的试验中,先往AT24C02芯片中写了一个数据write_byte(0xFE)(为了精简我只把主函数拿上来);
void main()
{
init();
start();
write_byte(0xa0);
respons();
write_byte(2);
respons();
write_byte(0xFE);
respons();
stop(); //这里的停止和下一个启动之间要有一个时间间隔
delay_0(10);
start();
write_byte(0xa0);
respons();
write_byte(2);
respons();
start();
write_byte(0xa1);
respons();
a=read_byte();
no_respons();
stop();
P1=a;
delay_0(1);
}
那么问题1:先给从器件AT24C02写一个地址write_byte(2)(如上所示);之后再写数据write_byte(0xFE);那么在用keil调试的时候 如何通过从器件AT24C02的RAM来查看这个数据0xFE是否被准确写入地址为2的存储单元中?
还有问题2:在读取地址为2的存储单元中的数据0XFE时,这8位数据是如何被一位一位地读走的?
以下是读数据函数:
uchar readbyte()
{
uchar i,k;
scl=0;
delay();
sda=1;
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
delay();
return k;
}
特别不能理解k=(k<<1)|sda这一行,sda在这里不过是一根数据线,也不是存储单元,那么在这8次的循环中,又如何能够确定每次scl时钟脉冲产生的时候sda的值呢?如何能确定sda在8次所传出的值是0xFE呢?
以上两个问题 特别是第二个问题已经困扰我很久了,特别希望有大神能帮忙指点迷津! 小弟在此先谢过了
|