12 .IIC协议(51单片机和C语言模拟I2C协议)
文章目录
- 一:什么是i2c
- 1.1 协议概述
- 1.2 特点
- 简单性和有效性。
- 多主控(multimastering)
- 1.3 构成
- 二 如何实现I2C
- 2.1 起始信号
- 2.2 终止信号
- 2.3 应答信号 (ack)
- 2.4 发送字节
- 三 总结
一:什么是i2c
1.1 协议概述
IIC全称Inter-Integrated Circuit (集成电路总线)
是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式.
1.2 特点
简单性和有效性。
由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大 传输速率支持40个组件
多主控(multimastering)
其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
1.3 构成
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。
二 如何实现I2C
I2C包括起始信号,终止信号,和应答信号 。其中起始信号是不可缺的。
2.1 起始信号
通过起始信号时序图,我们可以看出。在虚线框之内,SCL始终为高电平。
而SDA是高到低一个电平的跳转。SDA高电平时间持续大于4.7us,低电平持续时间大于4us。
void IIC_start ()
{scl = 1;//首先将scl拉高sda = 1;//拉高sdaDelay5us();//SDA高电平时间持续大于4.7ussda = 0;//低电平持续时间大于4us。Delay5us();
}
2.2 终止信号
通过终止信号时序图,我们可以看出。在虚线框之内,SCL始终为高电平。
而SDA是低到高一个电平的跳转。SDA高电平时间持续大于4.7us,低电平持续时间大于4us。
void IIC_stop ()
{scl = 1;//首先将scl拉高sda = 0;//拉低sdaDelay5us();//SDA高电平时间持续大于4.7ussda = 1;//低电平持续时间大于4us。Delay5us();
}
2.3 应答信号 (ack)
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字
节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
char IIC_ack()
{char flag;//建立一个标志位,来获取sdasda = 1;释放数据线Delay5us();scl = 1;Delay5us();flag = sda;Delay5us();scl = 0;Delay5us();
}
2.4 发送字节
根据时序图可以看出,当scl为高电平时发送数据。sda发送的数据可以为0或1.但sda数据线高低电平变化不能发生在SCL高电平期间,否则设备将会认为终止信号或起始信号。
void IIC_send_byte (char sendata)
{int i;//没执行发送一位,发送八次为一个字节for(i=0;i<8;i++){scl = 0;_nop_();//调用一个空函数 时间为5微秒sda = sendata & 0x80;//获取最高位 1000 0000_nop_();scl = 1;_nop_();scl = 0;_nop_();sendata = sendata << 1;左移一位}
}
三 总结
经过三个函数的封装,就可以使用I2C协议。配合设备时序图,就可以完成IIC通信。下一节将IIC和oled配合使用.
oled部分:oled详细教程
12 .IIC协议(51单片机和C语言模拟I2C协议)相关推荐
- 《例说51单片机(C语言版)(第3版)》——1-2 8051基础知识
本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1-2节,作者 张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公 ...
- 《例说51单片机(C语言版)(第3版)》一1.7 实时练习
本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.7节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...
- 《例说51单片机(C语言版)(第3版)》一1.2 8051基础知识
本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.2节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...
- c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序
51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用定时器学习 倒计时 红绿灯原理 主 ...
- 用c语言设计红绿灯程序,[转载]51单片机用C语言实现交通灯(红绿灯)源程
51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: #include bit red,green,yellow ...
- 单片机交通灯灯c语言程序,51单片机用C语言实现交通灯(红绿灯)源程序
51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用 ...
- 单片机c语言交通灯源程序,51单片机用C语言实现交通灯_红绿灯_源程序
单片机 AT STC C语言 C 89c51 89c52 设计 交通灯 仿真 毕业论文 程序设计 毕业设计 课题设计 51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交 ...
- 51单片机c语言除法符号,51单片机之C语言-4.4运算符及表达式
原标题:51单片机之C语言-4.4运算符及表达式 4.4 及 前面三节实际是讲如何定义一个数据类型,所谓数据类型其实就是不同存储空间的形状,也就是不同单元格的组合方式.既然定义了数据类型,我们的目的当 ...
- 51单片机实现c语言字母滚动,使用51单片机实现点阵汉字平滑滚动显示
使用51单片机实现点阵汉字平滑滚动显示 #说明:采用的芯片是89C51,LED点阵屏的规格是16*16,同时使用了两个74HC595芯片,字模生成软件在文末有网盘链接. 1 连接原理图 整体的电路连接 ...
最新文章
- 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
- 本站将进行有关《大道至简》的讨论~
- 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)
- java实用教程——组件及事件处理——概述
- [机器学习-sklearn]鸢尾花Iris数据集
- JavaScript学习 第四课(四)
- c语言实现shellcode转换工具
- JAVA 7 正式版发布 新特性一览表
- 基金教父约翰博格的创业史
- Java 线程池实际运用案例
- 【暂时完结】Prescan学习笔记
- Android系统 ——高通平台刷机流程(qfil)
- Struts2通配符问题
- vijos 1443 月亮之眼
- XJTU 新闻英语阅读重点词汇汇总
- 莎士比亚统计最高的词频数 java,spark,rdd
- 如何将chrome浏览器的默认语言改成中文呢?
- CATIA许可证安装,破解文件运行不了直接跳到finish问题
- JS中解决单击双击事件的冲突的问题
- 邮件服务器怎么使用,Winmail Mail Server邮件服务器软件怎么使用