P89C66X单片机硬件I2C主方式通信C函数包

需积分: 10 2 下载量 19 浏览量 更新于2024-07-28 收藏 159KB PDF 举报
"该文档提供了一个针对P89C66X单片机的字节方式I2C通信C函数包,适用于主方式传输。这个软件包包含了对硬件I2C的支持,允许用户实现I2C总线的单主或多主系统。它包括设置总线、发送和接收字节数据等功能,提供了几个归一化的C语言子程序,便于用户调用。这些子程序包括IRDBYTE、IRDNBYTE、IWRBYTE和IWRNBYTE,用于读取和写入数据。此外,文档中还包含了一些示例代码来检查I2C总线的正常性。软件包设计为查询方式,建议在系统启动时检查总线状态。" 在P89C66X单片机中,硬件I2C接口是一种高效的方式进行设备间的通信。I2C(Inter-Integrated Circuit)总线是一个多主控、串行通信协议,通常用于微控制器与外部设备如传感器、显示驱动器等之间的通信。主方式是指在I2C通信中起控制作用的一方,它可以启动和停止数据传输,并且决定传输的方向。 1. **IRDBYTE**:这个函数用于立即地址读取单个字节数据。输入参数包括SLA(Slave Address,从设备地址),返回值A中保存了读取到的数据,ACK表示操作是否成功。该函数执行读操作,首先发送从设备地址和读命令位,然后读取数据。 2. **IRDNBYTE**:此函数用于随机地址读取多个字节数据。除了SLA,还需要提供SUBA(器件子地址)和NUMBYTE(要读取的字节数)。读取的数据会存储在MRD(Receive Buffer)中,同样返回ACK表示操作状态。 3. **IWRBYTE**:用于无子地址写入单个字节数据。输入参数包括SLA和要写入的数据,返回的ACK表明写操作是否成功。这个函数会发送从设备地址和写命令位,然后写入数据。 4. **IWRNBYTE**:这个函数执行随机地址写入多个字节数据,需要SLA、SUBA、NUMBYTE和MTD(Transmit Buffer,包含要写入的数据)。同样返回ACK确认操作状态。 在实际使用这个软件包时,用户需要先定义一些变量,如SLA、SUBA、NUMBYTE和ACK,以及数据缓冲区MTD。同时,由于软件包采用查询方式,系统启动时应通过检查SCL和SDA引脚状态确保I2C总线正常。如果检测到异常(如短路或SCL被锁为低),则需要通过用户定义的错误处理程序I2CERR来处理。 这个C函数包简化了P89C66X单片机在I2C主方式下的通信过程,提供了便捷的接口供用户进行字节级别的数据传输,从而提高了开发效率。注意,为了保证稳定性,系统工作主频不应超过12MHz。