51单片机协议入门(一)I2C(以24c02为例)

本文介绍了I2C总线的基础知识,包括其开始和停止条件,以及24C02器件的地址设置。详细讲解了数据的读写流程,并提供了代码实现示例,特别强调了应答位、重复开始信号的处理及注意事项。
摘要由CSDN通过智能技术生成

I2C简介

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

器件地址

24C02的地址由固定位和可编程位决定,固定位为1010(0x0A),可编程位由E2,E1,E0引脚外接的高低电平决定
在这里插入图片描述

开始和停止条件

  1. 时序图
    在这里插入图片描述

  2. 开始条件:时钟线高电平,数据线下降沿

  3. 停止条件:时钟线高电平,数据线上升沿

  4. 重复开始条件:

  5. 时钟信号为高电平的时候,数据线的电平变化被认为是指令,所以为了避免干扰,最好在一个操作之后把时钟线拉低

  6. 注意高低电平的建立时间,典型值为4.7us,程序里面取10us就已经足够了

数据传送

  1. 时序图
    在这里插入图片描述
  2. 写数据的时候注意时钟线拉低数据线才能变化,时钟线一旦拉高,一个位就会被写入,循环八次就可以写入一个字节
  3. 读数据同理,只有在时钟线高电平的时候才能读

应答位

主机给从机发送数据之后,需要直到从机有没有接收到数据,这时候就需要一个应答,应答的原理是主机把是时钟线和数据线都拉低,如果从机收到了数据就会把时钟线拉低,如果时钟线一直是高电平,则是NACK(无应答),此时主机就会选择重新发送或者结束。

读写流程

    • 开始信号
    • 传送从机地址,接收应答
    • 传送寄存器地址,接收应答
    • 传送数据,接收应答
    • 停止信号
    • 开始信号
    • 传送从机地址,接收应答
    • 传送寄存器地址,接收应答
    • 重复起始信号
    • 传送从机地址,接收应答
    • 从机传送数据,(如果完成从机会传送非应答)
    • 停止信号
      在这里插入图片描述
      在这里插入图片描述

代码实现

#include"i2c.h"

void Delay10us()
{
   
	unsigned char a,b;
	for(b=1;b>0;b--)
		for(a=2;a>0;a--);

}

void I2cStart()//时钟高电平,数据线下降沿
{
   	
	SDA=1;
	Delay10us();
	SCL=1;
	Delay10us();
	SDA=0;
	Delay10us();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值