24C64 I2C读写程序与自定义延时函数

4星 · 超过85%的资源 需积分: 10 32 下载量 200 浏览量 更新于2024-07-28 收藏 103KB DOC 举报
这段代码提供了针对24C64存储器的I2C通信驱动程序以及相关的控制函数。24C64是一种串行EEPROM(Electrically Erasable Programmable Read-Only Memory),在嵌入式系统中常用于存储数据。以下是关键知识点的详细解释: 1. **I2C接口**: - `void I2C_Start()` 和 `void I2C_Stop()` 函数:这两个函数分别实现了I2C通信的起始和停止条件。I2C起始条件通过拉低SDA(Serial Data Line)线,然后拉高SCL(Serial Clock)线来实现;停止条件则是先拉高SDA线,再拉低SCL线。这两个函数中还包括了延时函数`Delay_10_uS()`,确保信号稳定传输。 2. **数据传输**: - `void I2C_Ack()` 和 `void I2C_Nack()`:这两个函数表示接收端对发送的数据包进行确认或否定确认。通常在数据传输过程中,如果接收到期望的数据,则返回ACK(Acknowledgment),否则返回NACK。 - `void I2C_Send_Byte(uchar)` 和 `uchar I2C_Receive_Byte(void)`:前者用于发送单个字节,后者用于接收一个字节。这些函数利用I2C协议进行数据交换。 3. **AT24C64读写操作**: - `void AT24C64_R(void* mcu_address, uint AT24C64_address, uint count)` 和 `void AT24C64_W(void* mcu_address, uint AT24C64_address, uint count)`:这两个函数是针对24C64的读写操作。它们接收MCU地址、存储器地址和要读写的字节数作为参数,用于从或向指定位置读取或写入数据到24C64。 4. **延时函数**: - `void Delay_10_uS()` 和 `void Delay_N_mS(uint n_milisecond)`:这两个函数提供了延迟处理,确保I2C通信过程中的适当时间间隔,防止信号冲突。 5. **数据传输控制**: - 代码中包含了多个检查语句,如 `if(I2C_SDA==0)` 和 `if(I2C_SCK==0)`,用于检测SDA和SCL的状态,确保正确识别和响应I2C通信的不同阶段。 6. **结束标志**: - 在数据传输和通信控制中,通过检测SDA和SCK的特定模式(例如在 `I2C_SDA=0;` 和 `I2C_SCK=0;` 之后),判断通信是否成功并返回相应的标志。 这段代码提供了一个基本的I2C接口和24C64存储器的驱动程序,用于嵌入式系统中进行高效、精确的非易失性数据存储和读取操作。它展示了如何使用I2C协议进行通信,并包含了必要的错误检查和同步控制机制。这对于理解和实现基于I2C的硬件交互具有重要的参考价值。