蓝桥杯嵌入式——AT24C02(EEPROM)

一、基本资料
介绍

  1. i2c只需要写基本读写程序,初始化程序已给。
  2. 最好在读写程序里加延时。(具体为什么,目前不懂)
  3. 在"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作者代码(比较清晰)

原创文章 26 获赞 4 访问量 812

猜你喜欢

转载自blog.csdn.net/qq_42280105/article/details/105460018