利用Philips公司的I2C总线技术,推出了很多带有I2C总线接口的单片机,如增强型LPC700系列、LPC900系列和80C51系列单片机。Motorola和三菱公司生产的单片机有的也带有I2C总线。Philips公司的LPC764、LPC936和80C552单片机都具有SCL、SDA的第二功能,可用作I2C总线。对于80C51系列中没有I2C总线功能的单片机,可用I/O端口线通过软件的模式模拟I2C总线的功能。下面以89C51单片机与AT24C64接口为例,介绍I2C总线的编程应用。电路接口及连接图如图12-18所示。
图12-18单片机与I2C总线器件连接图
图12-18中用I2C总线扩展两片存储量为8KB的AT24C64(最多可扩展8片),芯片的编址范围均为0000~1FFFH。IC2的三位地址线A2、A1、A0接地,器件读/写地址为A0H、A1H;IC1的三位地址线A2、A1接地,A0接VCC,器件读/写地址为A2H、A3H。
虽然STC15W4K32S4单片机没有专门的I2C总线接口,但可采用普通I/O口线(P1.6、P1.7)模拟I2C总线的数据传输。按照I2C总线的时序要求,除了规定了SCL、SDA信号的上升、下降的最大时间外,其他参数只规定了最小时间要求。因此,可以在I2C总线的数据传输过程中,利用时钟同步机制延长低电平周期,降低数据传输速率,使普通I/O口也能模拟I2C总线进行数据传输,但在数据传输时,所有信号的定时时间都应满足表12-3的要求。在模拟I2C总线时序时,最主要的就是要保证启动、停止、数据传输、保存及应答位等典型信号满足时序要求。
【例12-5】 要求从IC1中的120H地址开始连续读出8B数据,读出的数据存储在单片机片内30H开始的单元中(用R0作指针)。假定AT24C64(IC1)器件内读出地址(120H)存储在R7~R6中,长度存储在R5中,即初值定义如下:
对E2PROM存储器中的数据读出操作过程为:①先向器件发送读/写时序;②发送写器件地址的命令;③发送读出的数据起始地址;④发送读器件地址的命令;⑤连续读出多字节的数据。多字节读出子程序如下:(www.xing528.com)
【例12-6】 要求将单片机片内地址30H开始的8B数据写入到IC1中3C0H地址开始的单元中。
对E2PROM存储器进行数据写操作时,同样应先向器件发送写入的目标起始地址,然后从这个地址开始连续写入多字节的数据。对E2PROM存储器中的数据写入操作过程为:①先向器件发送读/写时序;②发送写器件地址的命令;③发送数据写入的起始地址;④连续写入多字节的数据。假定使用的资源与例12-5相同并已经初始化,多字节写入子程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。