51单片机i2c总线读写操作问题

2024-04-03 05:53:35
推荐回答(3个)
回答1:

因为开始读取完或者写完一组数据需要一个开始信号和一个终止信号,而这个信号就是数据线的上升下降沿。而后面数据线拉高的原因是为了能正确读取到数据,因为单片机如果是低电平外部器件很有可能不能拉高而一直读到低。手机纯打,往采纳。

回答2:

unsigned char i2c_ByteWr(unsigned char WrData)//I2c写操作
{
register unsigned char i=0;
register unsigned char ack= TRUE;
register unsigned char tmp;
ClrDog(); //喂狗
tmp = WrData;
SCL = 0;
for (i=0;i<8;i++)
{
if(tmp & 0x80 )SDA = 1;
else SDA = 0;
SCL = 1;
I2cDelay();
tmp<<=1;
SCL = 0;
}
SCL = 1;
if(SDA) return ack; //ack = FALSE;
SCL = 0;
return ack;
}
unsigned char i2c_ByteRd(void) //I2c读操作
{
register unsigned char i=0;
register unsigned char RdData=0;
SCL = 0;
for (i=0;i<8;i++)
{
RdData <<= 1;
SCL = 1;
if(SDA==1)
{
RdData |= 0x01;
}
SCL = 0;
}

return(RdData);
}

回答3:

你搜下IIC总线的时序图,看下图,你的这些问题就都解决了。 IIC总线中除了开始和结束信号以外,规定在读写数据过程中scl为1的时候sda必须稳定,在scl为0的时候sda可以变化。