请选择 进入手机版 | 继续访问电脑版

i2c通信,基于51与E2PROM(个人学习笔记)

[复制链接]
谢世民 发表于 2021-1-2 12:12:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
i2c总线

I2C 属于同步通信, SCL 时钟线负责收发双方的时钟节奏, SDA 数据线负责传输数据。 I2C 的发送方和吸收方都以 SCL 这个时钟节奏为基准举行数据的发送和吸收。
SCL处于高电平常,SDA稳定,数据无效;SCL处于低电平常,SDA可变,数据有效

使用 i2c 的步调

1.设置通信接口,并对接口举行初始化

2.起始信号、停止信号

2.(1)起始信号

2.(2)停止信号

3.应答信号

3.(1)写应答

3.(2)读应答

4.总线上写数据或收数据

4.(1)向总线写一字节的数据

4.(2)从总线读一字节的数据

4.(3)收到完成信号,竣事通信,释放总线

4.(4)从总线读数据

(所有代码都基于51情况)

设备部署


时序图



1.初始化

将SCL、SDA置高,总线处于空闲状态
  1. void init(){        sda = 1;        scl = 1;}
复制代码
2.起始信号、停止信号

2.(1)起始信号

I2C 通信的起始信号的界说是 SCL 为高电平期间, SDA 由高电平向低电平变革产生一个下降沿,表现起始信号。
所以,在SCL处于高电平、SDA高电平的状态下,拉低SDA, 产生高电平->低电平的下降沿,表现起始信号
  1. void start(){        scl=1;        sda=1;        delay(2); //延时        sda=0;        delay(2);        scl=0;  //释放总线}
复制代码
2.(2)停止信号

I2C 通信停止信号的界说是 SCL 为高电平期间, SDA 由低电平向高电平变革产生一个上升沿,表现竣事信号。
所有,在SCL处于高电平、SDA低电平的状态下,拉高SDA,产生低电平->高电平的下降沿,表现起始信号
  1. void stop(){        sda=0;        scl=1;        delay(2);        sda=1;        delay(2);}
复制代码
3.应答信号

应答信号用于表明I2C总线数据传输的竣事。
3.(1)发送应答信号

SCL处于低电平下,拉高SDA,主机产生应答
  1. void SendACK(){  scl=0;  delay(2);  sda = 1;  scl = 1;   delay(2);  scl = 0; //释放总线  delay(2);}
复制代码
3.(2)等候应答信号

SCL高电平下,等候SDA拉高
[code]void respons(){        unsigned char i;        scl=1;        while((sda==1)&&(i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )