AT24C04系列C语言I2C通信读写程序设计

需积分: 47 9 下载量 134 浏览量 更新于2024-09-11 收藏 195KB DOCX 举报
"AT24C04系列C语言读写程序,实测可用" 本文将详细介绍AT24C04系列芯片的C语言读写程序,通过C语言仿I2C通信,实现对AT24C04系列片外E2PROM的读写操作。 I2C通信协议是由Philips公司开发的一种串行总线协议,用于在微控制器和外围设备之间进行数据交换。AT24C04系列芯片是一种常用的E2PROM芯片,通过I2C总线可以对其进行读写操作。 1. C语言读写程序的实现 首先,需要包含头文件`<AT89X52.H>`、`<stdio.h>`和`<absacc.h>`,其中`AT89X52.H`是单片机的头文件,`stdio.h`是标准输入输出头文件,`absacc.h`是绝对地址编程头文件。 然后,定义了一个字符数组`codetable`,用于存储数字的二进制编码。定义了一个 unsigned char 类型的变量 `sec`,用于计数,每过1秒,`sec` 加1。定义了一个 unsigned int 类型的变量 `tcnt`,用于记录定时中断次数。定义了一个 bit 类型的变量 `write`,用于标志是否写入24C08。定义了两个sbit类型的变量 `gewei` 和 `shiwei`,分别用于个位和十位的选通。 2. 24C08读写驱动程序 定义了两个sbit类型的变量 `scl` 和 `sda`,分别用于24C08的SCL和SDA引脚。定义了一个延迟函数`delay1`,用于延迟一定的时间。定义了一个 flash 函数,用于 flash LED。 然后,定义了一个`x24c08_init`函数,用于初始化24C08芯片。定义了一个`start`函数,用于启动I2C总线。定义了一个`stop`函数,用于停止I2C总线。定义了一个`writex`函数,用于写入一个字节。定义了一个`readx`函数,用于读取一个字节。 3. 读写操作的实现 在`writex`函数中,首先将要写入的数据左移8位,然后将每一位写入到24C08芯片中。在`readx`函数中,首先将24C08芯片的数据读取出来,然后将每一位组合成一个字节。 通过这种方式,可以实现对AT24C04系列芯片的读写操作。 4. 程序的应用 本程序可以应用于各种基于AT24C04系列芯片的项目中,如数据存储、配置存储等。同时,本程序也可以作为I2C通信协议的示例代码,帮助读者更好地理解I2C协议。 5. 结论 本文详细介绍了AT24C04系列芯片的C语言读写程序,通过C语言仿I2C通信,实现对AT24C04系列片外E2PROM的读写操作。本程序可以应用于各种基于AT24C04系列芯片的项目中,具有广泛的应用前景。
2010-05-24 上传
首先简单的说明以下I2C总线,I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在 I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB),数据传送按图1所示格式进行。首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向位设置为对应工作方式。标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第九位答时钟脉冲时向SDA线送出低电平作为应答。除了第一字节是通用呼叫地址或十位从机地址之外第二字节开始即数据字节。数据传送完毕,由主机发出停止信号“P”(SDA在SCL高电平期间由低电平跳变为高电平)。   AT24C系列串行E2PROM具有I2C总线接口功能,功耗小,宽电源电压(根据不同型号2.5V~6.0V),工作电流约为3mA,静态电流随电源电压不同为30μA~110μA,AT24C系列串行E2PROM参数如下 型 号 容 量 器件寻址字节(8位) 一次装载字节数 AT24C01 128×8 1010A2A1A0 R/W 4 AT24C02 256×8 1010A2A1A0 R/W 8 AT24C04 512×8 1010A2A1P0 R/W 16 AT24C08 1024×8 1010A2P1P0 R/W 16 AT24C16 2048×8 1010P2P1P0 R/W 16   由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位数据(即一个I2C总线系统中理论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位(读/写)。器件寻址字节中的最高4位(D7~D4)为器件型号地址,不同的I2C总线接口器件的型号地址是厂家给定的,如AT24C系列E2PROM的型号地址皆为1010,器件地址中的低3位为引脚地址A2 A1 A0,对应器件寻址字节中的D3、D2、D1位,在硬件设计时由连接的引脚电平给定。   对AT24C系列 E2PROM的读写操作完全遵守I2C总线的主收从发和主发从收的规则。