学习STC51单片机30(芯片为STC89C52RCRC) IIC协议

每日一言

      当你感到疲惫时,正是成长的关键时刻,再坚持一下。

                                              IIC协议

IIC协议

IIC协议概述

IIC全称Inter-Integrated Circuit (集成电路总线)

是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双

工同步通信方式    两线式就是SDA 和SCL 数据线和时钟线

特点

简单性和有效性。

由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降

低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件 ,我们之前的uart协议20kbps

多主控(multimastering)

其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当

然,在任何时间点上只能有一个主控。

构成

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控

器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线

的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

是的,IIC协议就是与我们之前的串口通信协议是同一个意义,就是为了满足模块的通信,其实之前的串口通信协议叫做UART协议,我们千万不要弄混了,串口协议有很多种,现在我们学习IIC协议

IIC总线在传输数据的过程中一共有三种类型信号,分别为:起始信号、终止信号和应答信号。

关于起始信号、终止信号的时序图

蓝色部分以下就是解释:

开始信号之前以及终止信号之后通常是空闲状态,此时 SDA 和 SCL 会由上拉电阻拉

在SCL在高电平信号 SDA由低到高的跳变就是终止信号

在SCL在高电平信号 SDA由高到低的跳变就是起始信号

很好理解 :SCl是一个规律的时钟脉冲,当SCl为高电平的时候才是SCL的工作模式,这个时候SCL才会去检测SDA的状态,可以是传数据(0或1),也可以是应答信号、可以是起始信号,终止信号

解释 应答信号:

主机每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由从机反馈一个应答信号。

Tips:时钟脉冲9 就是前面的是时钟脉冲8 每每一个时钟脉冲进行一个位的传输,那么时钟脉冲8之后就是传输好8bit也就是1字节了 。我们需要检测1字节是否传输成功,那么就需要在时钟脉冲9这边来进行检测,此时为时钟脉冲9期间我们需要先给SDA=1(意思就是释放数据总线,有一种说法是主机把控制权给从机,还有一种是主机不控制了,所以默认的被上拉电阻拉高,此时从机会去控制SDA) 此时 SCL=1 那么检测SDA  此时这个SDA是从机控制的,要是从机认可接收,那么就会拉低SDA,要是没有接受就拉高SDA(由上拉电阻保证)

时序图

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字

节; 应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

怎么个原理呢,就是SDA和SCL两条线都会接上拉电阻,如果任何一条线不被控制工作的时候,就是SDA和SCL会被拉高,因为此时被上拉电阻接管,所以我们空闲的时候也是上拉电阻保证了SDA和SCL都是高电平

IIC协议发送字节

最先开始的时候在给SCL低电平 ,在SCL低电平的时候SDA就应该准备好是传0还是1,SCL为1的时候是工作期间,SDA不能变动,这个时候在发数据,发数据也需要一定的时间 ,再将SCL拉低,这就完成了数据传输了1个位,那我们循环8次就可以组成一个字节了  ,我们还要记住IIC发送的时候是以最高位开始发送的,所以我们data传进来要先将最高位发出去 要做这个操作  data &= 0x80  那么就可以保留最高位了 (直接赋值给硬件引脚时,任何非零值都会被硬件视为高电平) 赋值给SDA 然后将该位发出去,随后发送完毕后  要将data向左边移一位让下一位成为最高位,这样循环才能将所有的位发出去

IIC协议规定:我们发的时候是最高位发的,组装的时候也是最高位开始组装的,所以不用怕,这个不用我们管

所以以上都是介绍的数据传输的配件啦,目的都是为了组装这个

这个就是IIC的通信的时序图

举例发送10101111这个数据

接下来我们来写代码,给他拼出来

因为我们开发板上面没有IIC协议的相关的硬件,也就是寄存器,所以我们要根据时序来写出代码,所以啊我们的串口uart这个协议也是很复杂的,因为我的开发板上有相对应的硬件,所以我们只需要配置寄存器就好了,但是这个我们没有,所以自己写

我相信,只要上面看下来,这些代码都太简单了。

其余知识点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的想上岸啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值