一、基本资料
- i2c只需要写基本读写程序,初始化程序已给。
- 最好在读写程序里加延时。(具体为什么,目前不懂)
-
在”i2c.c”中I2CWaitAck()函数语句调换顺序,原顺序在高主频时会错误产生停止条件。
SCL_Output(0);delay1(500); SDA_Output_Mode();
(以上为顺序更改之后代码)
二、主要代码
i2c.c(增加代码)
void i2c_read(unsigned char*pucBuf,unsigned char ucAddr,unsigned char ucNum)
{
delay1(2);
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr); //地址可以从0x00-0xff
I2CWaitAck();
I2CSendByte(0x01);
I2CWaitAck();
while(ucNum--) //ucNum最大可以为
{
*pucBuf++ = I2CReceiveByte();
if(ucNum) I2CSendAck();
else I2CSendNotAck();
}
I2CStop();
}
void i2c_write(unsigned char*pucBuf,unsigned char ucAddr,unsigned char ucNum)
{
delay1(2);
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr);
I2CWaitAck();
while(ucNum--)
{
I2CSendByte(*pucBuf++);
I2CWaitAck();
}
I2CStop();
delay1(500);
}
i2c.h(增加代码)
void i2c_read(unsigned char*pucBuf,unsigned char ucAddr,unsigned char ucNum);
void i2c_write(unsigned char*pucBuf,unsigned char ucAddr,unsigned char ucNum);
三、文献参考
1.ReCclay作者代码(比较清晰)
版权声明:本文为qq_42280105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。