I2C总线中写操作写入数据过程中时钟信号SCL为高电平吗

2025-02-05 16:37:04
推荐回答(2个)
回答1:

I2C进行写操作时,时钟线SCL要拉低,数据线SDA才允许变化,读取的时候时候SCL要拉高保持数据稳定。

我也是新手,I2C的时序很简单,你用什么芯片,你上网查那个芯片,看芯片的说明文档就明白了,里面有写入和读取的详细时序图,你写程序按他的时序来写就行了。

回答2:

首先 你必须看你所用的芯片的数据手册 也就是DATASHEET,然后确定你是要写主机模式还是

从机模式,里面分别有写入和读取的详细时序图,

我这里有PIC16F877A主机模式的一些代码 你参考一下

/***********************
函数功能: 读取数据
出口参数: read_data
************************/
unsigned char shin()
{
unsigned char i,read_data;
for(i = 0; i < 8; i++)
{
nop();nop();nop();
SCL = 1;
nop();nop();
read_data<=1;
if(SDA == 1)
read_data=read_data+1;
nop();
SCL=0;
}
return(read_data);
}

/*****************************
函数功能: 向EEPROM 写数据
入口参数: write_data
出口参数: ack_bit
******************************/
bit shout(unsigned char write_data)
{
unsigned char i;
unsigned char ack_bit;
for(i = 0; i < 8; i++)
{
if(write_data&0x80)
SDA=1;
else
SDA=0;
nop();
SCL = 1;
nop();nop();nop();nop();nop();
SCL = 0;
nop();
write_data <=1;
}

nop();nop();
SDA = 1;
nop();nop();
SCL = 1;
nop();nop();nop();
ack_bit = SDA; // 读取应答
SCL = 0;
nop();nop();
return ack_bit; // 返回AT24Cxx 应答位
}