本帖最后由 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);
- }
复制代码
|