1. 项目概述
今天我想分享一个使用51单片机通过I2C总线读写24C02 EEPROM的汇编语言实现。这个项目主要解决了如何用51单片机对EEPROM进行连续地址写入的问题,这在很多嵌入式系统中都是非常实用的功能。
24C02是一款常见的I2C接口EEPROM,容量为2Kbit(256字节)。在实际项目中,我们经常需要存储一些配置参数或运行数据,这时候EEPROM就派上用场了。相比Flash存储器,EEPROM更适合频繁修改的小数据量存储场景。
这个程序的核心功能是:
- 通过I2C总线向24C02 EEPROM连续写入8个字节数据
- 从指定地址读取1个字节数据
- 通过P0口连接的LED显示读取结果
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. I2C总线协议解析
2.1 I2C基础概念
I2C(Inter-Integrated Circuit)是一种串行通信总线,由Philips公司开发。它只需要两根线:
- SCL(Serial Clock):时钟线,由主机控制
- SDA(Serial Data):数据线,双向传输
在我们的项目中:
assembly复制SCL BIT P2.1
SDA BIT P2.0
将P2.1和P2.0分别定义为SCL和SDA引脚。
2.2 I2C通信时序
I2C通信有几个关键时序需要特别注意:
- 起始条件(START):
- SCL高电平时,SDA从高变低
- 表示通信开始
assembly复制START:
SETB SDA ; SDA置高
SETB SCL ; SCL置高
NOP
CLR SDA ; SDA置低
NOP
RET
- 停止条件(STOP):
- SCL高电平时,SDA从低变高
- 表示通信结束
assembly复制STOP:
CLR SDA ; SDA置低
SETB SCL ; SCL置高
NOP
SETB SDA ; SDA置高
NOP
RET
- 数据有效性:
- 数据在SCL高电平时必须保持稳定
- 数据变化只能在SCL低电平时发生
