蓝桥杯开发板板载一个AT24C02的2KB的EEPROM芯片,主要考察对IIC通信的掌握。IIC通信因其需要的数据线少、通信方式可自己决定等优点在嵌入式开发板中运用很多。AT24C02需要2根数据线(一根为数据线,一根为时钟线)就可以与开发板进行通信。
IIC初始化
因为EEPROM的通信方式IIC通信,所以需要对IIC进行初始化。需要的文件有i2c.c和i2c.h文件。在比赛的时候会提供完整的i2c.c和i2c.h文件,所以只需将这两个文件包含在工程里即可。IIC初始化代码为
代码语言:javascript复制i2c_init();
AT24C02指定地址读取数据
代码语言:javascript复制/**
* @说明 从AT24C02指定地址读出一个字节数据
* @参数 address:AT24C02内部存储地址
* @返回值 val:读出数据
*/
uint8_t x24c02_read(uint8_t address)
{
unsigned char val;
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
val = I2CReceiveByte();
I2CWaitAck();
I2CStop();
return(val);
}
函数I2CStart是打开IIC;函数I2CSendByte是发送一个字节的数据,可以是地址,也可以是指令;函数I2CWaitAck是等待IIC器件的相应;函数I2CReceiveByte是接收器件发送的一个字节数据;函数I2CStop是关闭IIC通信。比赛的时候只提供IIC原始函数,AT24C02的读写代码需要自己组织代码,难点是逻辑顺序会记错,导致代码无法使用
AT24C02向指定地址写入指定数据
代码语言:javascript复制/**
* @说明 向AT24C02指定地址写入一个字节数据
* @参数 address:AT24C02内部存储地址
* @参数 info:写入数据
* @返回值 None
*/
void x24c02_write(unsigned char address,unsigned char info)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CSendByte(info);
I2CWaitAck();
I2CStop();
}
由以上两个AT24C02读写函数可知,当发送0xa0指令是读取相应地址的数据,发送0xa1指令是向指定地址写入指定的数据。两者的函数内容相似,需要认真记忆。
需要注意的是AT24C02的地址是从0x00~0xff,如果超出该地址值会出现错误。地址和写入或读取的数据的类型都是字符型,其他类型的数据有可能出现错误。