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

  • Post author:
  • Post category:其他



一、基本资料


介绍

  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作者代码(比较清晰)



版权声明:本文为qq_42280105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。