IC写入报错(IIC_Write_ERROR)
[mw_shl_code=c,true]/*******************************************************************************
函数名:StartI2c
功能: 产生I2C开始信号(SDA在SCL高电平时产生一个下降沿信号)
参数: 无
返回值:无
*******************************************************************************/
void R8025_I2C_Start(void) //产生起始信号
{
R8025_I2C_SDA_OUT();
SDA_H;
SCL_H;
delay_us(5);
SDA_L;
delay_us(5);
SCL_L;
}
/*******************************************************************************
函数名:StopI2c
功能: 产生I2C停止信号(SDA在SCL高电平时产生一个上升沿信号)
参数: 无
返回值:无
*******************************************************************************/
void R8025_I2C_Stop(void)//产生停止信号
{
SCL_L;
R8025_I2C_SDA_OUT();
SDA_L;
delay_us(5);
SCL_H;
delay_us(5);
SDA_H;
}
/////////////////////////////////
u8 IIC_Write_Byte(u8 Data)
{
u8 i;
R8025_I2C_SDA_OUT();
for(i=0;i<8;i++)
{
SCL_L;
delay_us(5);
if((Data&0x80)>0) //0x80 1000 0000
SDA_H;
else
SDA_L;
delay_us(5);
SCL_H;
Data<<=1;
delay_us(5);
}
SCL_L;
R8025_I2C_SDA_IN();
delay_us(5);
SCL_H;
//delay_us(5);
i=0;
while(GPIO_ReadInputDataBit(R8025_GPIO_I2C,R8025_I2C_SDA))
{
if(++i>12)
{
SCL_L;
return 0;
}
}
SCL_H;
return 1;
}
/////////////////////////////////
u8 IIC_Read_Byte(void)
{
u8 i;
u8 IC_data=0;
SCL_L;
R8025_I2C_SDA_OUT();
SDA_H;
R8025_I2C_SDA_IN();
for(i=0;i<8;i++)
{
SCL_H;
delay_us(5);
IC_data<<=1;
IC_data=IC_data|GPIO_ReadInputDataBit(R8025_GPIO_I2C,R8025_I2C_SDA);
delay_us(2);
SCL_H;
delay_us(2);//读取数据
SCL_L;
delay_us(2);
}
delay_us(5);
SCL_L;
R8025_I2C_SDA_OUT();
SDA_L;
return IC_data;
}
u8 write_data(u8 addr,u8 *buf,u8 len)
{
u8 i;
R8025_I2C_Start();
if(IIC_Write_Byte(RX8025_ADDR_WRITE)==0)
{
printf("IIC_Write_ERROR
");
R8025_I2C_Stop();
return 0;
}
if(IIC_Write_Byte(addr)==0)
{
R8025_I2C_Stop();
printf("IIC_ADDR_ERROR
");
return 0;
}
for(i=0;i<len;i++)
{
if(IIC_Write_Byte(buf)==0)
{
R8025_I2C_Stop();
return 0;
}
}
R8025_I2C_Stop();
delay_us(5);
SDA_L;
SCL_L;
return 1;
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>