STC89C52的IIC总线写EEPROM

串行通信中的IIC总线工作原理

51本身不带IIC总线 ,使用程序模拟IIC通信协议

常用的串行总线协议

UART、1-wire、I2C和SPI总线
UART:是以异步方式进行通信(一条数据输入线,一条数据输出线)。
1-wire:即单线总线,又叫单总线(只有一条线)
I2C:同步串行2线方式进行通信(一条时钟线,一条数据线)
SPI:同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)

本节相关原理图分析

I2C总线是飞利浦公司推出的一种串行总线,它只要两根双向信号线。一根是数据线SDA(serial data I/O),另一根是时钟线SCL(serial clock)
如下图所示,IIC总线上可以挂多个器件,而每个器件都有唯一的地址,这样可以标识通信目标。数据的通信方式采用主从方式,主机负责主动联系从机,而从机则被动回应数据。
在这里插入图片描述
在多主机系统中,可能有几个主机企图启动总线传输数据,为了避免混乱,IIC总线要通过总线仲裁,以决定哪一台主机控制总线,通常80c51为主机,其他期间为从机
IIC总线通过上拉电阻接正电源。当总线空闲下来时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
在这里插入图片描述

IIC总线传输协议

数据位有效性规定
SCL为高电平期间,数据线上的数据必须保持稳定,只有SCL信号为低电平期间,SDA状态才允许变化。//除了起始信号

在这里插入图片描述

IIC的起始和终止信号

SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
在这里插入图片描述
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。
连接到IIC总线上的器件,若具有IIC总线的硬件接口,则很容易检测到起始和终止信号。

接收器件收到一个完整的数据字节后,有可能需要完成一些其他的工作,如处理内部中断服务函数等,可能无法立刻接收下一个字节,这时接收器可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收容器准备接收下一个字节时,再释放SCL线使之成为高电平,从而使数据传送可以继续进行。

IIC字节的传送与应答

每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)
在这里插入图片描述

应答位的作用

在这里插入图片描述

数据帧格式

在这里插入图片描述
1.主机向从机发送数据,数据传送方向在整个传送过程中不变
在这里插入图片描述
2.主机第一个字节后,立刻从从机读数据
3.在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好相反相。
在这里插入图片描述

总线的寻址

在这里插入图片描述
主机发送地址和从机发送地址
在这里插入图片描述
http://www.alldatasheetcn.com
80c51单片机IIC单片机串行总线器件的接口
总线数据传送的模拟
主机可以采用不带IIC的总线接口的单片机,如80c51、STC89C52等单片机,利用软件实现IIC总线的数据传送,即软件和硬件结合的信号模拟。

按键模拟IIC通信时序
为了保证数据的可靠性,IIC的总线数据传送有严格的时序要求,IIC的总线的起始信号、终止信号、发送“0”和发送"1"的模拟时序。
在这里插入图片描述
起始信号:SCL=1;SDA=1;delay(5us);SDA=0;delay(5us);SDA=1;
终止信号:

IIC起始信号程序

void IICStart()
{
  SCL=1;
  SDA=1;
  delay_us(5);
  SDA=0;
  delay_us(5);
}

IIC终止信号程序

void IICStop()
{
  SCL=0;
  SDA=0;
  SCL=1;
  delay_us(5);
  SDA=1;
  dalay_us(5);
}

IIC主机读从机应答

bit ReadACK()
{
  SCL=1;
  delay_us(5);
  if(SDA)
  {
    SCL=0;
    return 1;
  }
  else
  {
   SCL=0;
   return 0;
  }
}

IIC主机发送应答

void SendAck()
{
  SCL=0;
  if(i)
    SDA=1;
  else
    SDA=0;
  SCL=1;
  delay_us(5);
  SCL=0;    //拉低时钟总线
  SDA=1;   //释放数据总线
}

//SDA在SCL为低时变化,起始信号除外
串行EEPROM的扩展
1)串行EEPROM的典型产品
ATMEL公司的AT24C系列:
AT24C01:128字节(128x8位) 1K
AT24C02:256字节(256x8位) 2K A0~A2三个地址线可识别挂载8个器件
。。。。
2)写入过程
AT24C系列的EEPROM芯片地址的固定部分为1010,A2,A1,A0引脚接高、低电平后得到确定的3位编码。形成的7位编码即为该器件的地址码。

单片机进行写操作时 ,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的储存器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应,单片机收到应答后就可以传送数据了。
写操作
在这里插入图片描述
读操作
在这里插入图片描述

实践编程

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值