前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥杯嵌入式之EEPROM讲解

蓝桥杯嵌入式之EEPROM讲解

作者头像
用户5935416
发布2019-08-01 10:08:17
1.1K0
发布2019-08-01 10:08:17
举报
文章被收录于专栏:IT界的小白帽IT界的小白帽

蓝桥杯开发板板载一个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,如果超出该地址值会出现错误。地址和写入或读取的数据的类型都是字符型,其他类型的数据有可能出现错误。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT界的小白帽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档