您当前的位置:五五电子网电子知识电子知识资料总线技术在89C51单片机中如何使用I/O口模拟IIC总线时序 正文
在89C51单片机中如何使用I/O口模拟IIC总线时序

在89C51单片机中如何使用I/O口模拟IIC总线时序

点击数:7491 次   录入时间:03-04 11:42:13   整理:http://www.55dianzi.com   总线技术

  IIC(Inter Intergrated Circuit)总线是Philips公司推出的一种用于芯片间连接的二线制串行扩展总线。通过I2C总线构成的系统结构紧凑、连接简单、成本低廉、使用灵活,因此广泛应用于微控制器开发领域中。本例利用单片机的接口来模拟IIC总线时序,进行IIC总线接口的软件实现。
  
  IIC总线通过串行数据线SDA和串行时钟线SCL这两根信号线在连接到总线上的器件之间传送数据,它可以十分方便地用于构成由微控制器和一些外围器件组成的微控制器应用系统。采用IIC总线的器件有很多,如AT24CXX系列EEPROM,数字温度传感器LM75A和PCF8563日历时钟芯片等。
  
  在以单片机为主要器件的系统中,单片机往往是系统的核心。当选择的单片机带有IIC总线接口(如8XC552、C8051FXX系列等)时,此类单片机可直接与IIC接口器件相连,各器件之间的通信十分方便。然而,在实际应用中,当选择的单片机没有IIC接口时,主单片机需使用普通I/O口来模拟I2C总线时序,实现对外围器件的读写操作。这种模拟传送方式消除了串行扩展的局限性,扩大了各类串行总线的应用范围,在应用中具有重要的意义。
  
  下面介绍在89C51系列单片机中如何使用普通I/O口来模拟IIC总线时序。
  
  假设单片机的晶振频率是12MHz,则一个机器周期的执行时间是lμs。IIC总线的SDA和SCL与单片机的P1.0和Pl.l相连。则I2C总线上产生起始、结束和应答C51的主要有以下程序。
  
  ·voiddelay():实现一段时间的延时。
  
  ·voidi2c_start():IIC总线起始信号。
  
  ·voidi2c_stop():IIC总线结束信号。
  
  ·voidi2c_ack():IIC总线应答信号。
  
  ·voidi2c_send_byte():向IIC总线上发送一字节的数据。
  
  ·unslgnedchari2c_recv_byte():向IIC总线上接收一字节的数据。

  (1)函数voiddelay()。
  
  在C51中使用nop指令,实现一段时间的延时,程序代码如下:

  (2)函数voidi2c_start()。
  
  利用单片机的I/O口可模拟实现IIC总线的时序,在SCL信号线处于高电平状态时,SDA信号线由高电平向低电平的跳变表示数据传输起始条件。程序代码如下:

  (3)函数voidi2c_stop()。
  
  而在SCL信号线处于高电平状态时,SDA信号线由低电平向高电平的跳变表示数据传输停止条件。程序代码如下:

  (4)函数void i2c_ ack()。
  
  IIC总线应答信号,程序代码如下:

123456

  (5) voidi2c_send_byte()。
  
  向IIC总线上发送1字节数据的C51程序代码如下:

代码

  (6)函数unsignedchari2c_recv_byte()。
  
  从IIC总线上接收l字节数据的C51程序代码如下:

代码

  应用IIC接口的器件时,注意IIC总线上必须有上拉电阻,通常阻值为几kΩ。
  
  多个IIC接口的器件挂接在同一总线上时,为区分每个器件,每个器件通常都有一个惟一的地址,以便于主机寻访。
  
  在读取IIC器件的数据时,如果采用指定地址或序列读时,一定要注意有两次起始信号,第一次的起始信号称为伪启动,目的是获得下一步操作的地址,后面发生的才能真正读到数据。




本文关键字:如何  单片机  总线技术电子知识资料 - 总线技术

《在89C51单片机中如何使用I/O口模拟IIC总线时序》相关文章>>>