解释51单片机程序关于AT24C02

来源:百度知道 编辑:UC知道 时间:2024/09/28 12:10:38
uchar read_byte()
{
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
return k;
}
这是个从AT24C02芯片上读一个字节的程序,为什么前面还有 scl=0;
delay();
sda=1;
delay();
这个sda=1是什么意思?
但是向芯片里写一个字节的程序里没有前面这四句,这是为什么?

无论读与写,都是在时钟线为低的时候把数据送到数据总线上,在时钟线为高的时候采样数据把数据锁存到内部,所以在读之前先把时钟线拉低做好送数据的准备,数据线为高表示释放数据线,为接下来读数据做好准备。
这四句只是规范化的,你写上的话一般就会避免出错,但是如果在你写这四句之前,SCL和SDA已经是这种状态的话,那你不写也是不会出错的!

smally 南阳师范学院

你参考飞利浦公司的I2C总线协议的内容,这些就好理解了。

读前SDA要置为1即SDA=1,否则若为0即低电平,外部数据读入时,即使为高,也会被拉低成0.

scl=0应该是把时间钟拉低,让它有一个上升沿来锁存数据的吧, sda=1就是在读数据前先要写1的

就是一个低电平向高电平的跳变。