AI8H库函数SOFT_I2C的部分异常
本帖最后由 DebugLab 于 2024-9-29 10:02 编辑最近使用AI8H_1K28做了一些程序,发现STC8G_H_Soft_I2C.c在24M的时候使用SI2C_ReadNbyte可以正常读取到公司的24C02内存储的数据,当频率降低到6M的时候就会读出异常,经过验证发现程序I2C_ReadAbyte需要进行修改,具体修改方法如下:
源代码:
u8 I2C_ReadAbyte(void) //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;
do
{
SCL = 1;
I2C_Delay();
dat <<= 1;
if (SDA) dat++;
SCL= 0;
I2C_Delay();
} while (--i);
return (dat);
}
修改后代码:
u8 I2C_ReadAbyte(void) //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;
do
{
dat <<= 1;
SCL = 1;
I2C_Delay();
if (SDA) dat++;
SCL= 0;
I2C_Delay();
} while (--i);
return (dat);
}或者
u8 I2C_ReadAbyte(void) //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;
do
{
SCL = 1;
I2C_Delay();
dat <<= 1;
if (SDA) dat++;
SCL= 0;
I2C_Delay();
} while (i--);
return (dat);
}
用硬件I2C 我将库函数例程包里面读写AT24C02的例子改成软件模拟I2C方式
主时钟改为6MHz、5.5296MHz测试都是正常的
你用附件例子试试看
页:
[1]