本帖最后由 msly 于 2017-3-20 09:16 编辑
以下是我从别人抄来的代码:
返回 ack
u8 I2C_RACK(void)
{
u8 ERRTIME=0;
SCL_H;
Delay_us(2);
SDA_H;
printf("SCL_RACK_H:%X SDA_RACK_H:%X \n",SCL_Read,SDA_Read);
Delay_us(2);
while(SDA_Read)
{
ERRTIME++;
if(ERRTIME>250)
{
I2C_STOP();
return 0;
}
}
SCL_L;
Delay_us(2);
printf("SCL_RACK_L:%X SDA_RACK_L:%X \n",SCL_Read,SDA_Read);
return 1;
}
写一个字节
void i2C_Wbyte(u8 Wstring)
{
u8 i;
SCL_L;
for(i=0;i<8;i++)
{
if((Wstring&0x80)>>7)
SDA_H;
else
SDA_L;
Wstring<<=1;
Delay_us(2);
SCL_H;
Delay_us(2);
SCL_L;
Delay_us(2);
}
}
写一个字
u8 I2C_SendByte(u8 Saddr,u8 addr,u8 sdata)
{
if(!I2C_Start()) return 1;
i2C_Wbyte(Saddr);
if(!I2C_RACK()) return 2;
i2C_Wbyte(addr);
I2C_RACK();
i2C_Wbyte(sdata);
I2C_RACK();
I2C_STOP();
return 3;
}
以下是串口返回I2c 状态
SCL_Start_H:40 SDA_Start_H:80
SCL_Start_H:40 SDA_Start_L:0
SCL_Start_L:0 SDA_Start_L:0
ASendByte:A0
BSendByte:0
SendString:A0
SCL_RACK:40 SDA_RACK:80
SCL_STOP_L:0 SDA_STOP_L:0
SCL_STOP_H:40 SDA_STOP_H:80
RACK
NULL
|