文章目录

  • 一:什么是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协议)相关推荐

  1. 《例说51单片机(C语言版)(第3版)》——1-2 8051基础知识

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1-2节,作者 张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公 ...

  2. 《例说51单片机(C语言版)(第3版)》一1.7 实时练习

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.7节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...

  3. 《例说51单片机(C语言版)(第3版)》一1.2 8051基础知识

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.2节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...

  4. c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序

    51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用定时器学习 倒计时 红绿灯原理 主 ...

  5. 用c语言设计红绿灯程序,[转载]51单片机用C语言实现交通灯(红绿灯)源程

    51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: #include bit red,green,yellow ...

  6. 单片机交通灯灯c语言程序,51单片机用C语言实现交通灯(红绿灯)源程序

    51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用 ...

  7. 单片机c语言交通灯源程序,51单片机用C语言实现交通灯_红绿灯_源程序

    单片机 AT STC C语言 C 89c51 89c52 设计 交通灯 仿真 毕业论文 程序设计 毕业设计 课题设计 51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交 ...

  8. 51单片机c语言除法符号,51单片机之C语言-4.4运算符及表达式

    原标题:51单片机之C语言-4.4运算符及表达式 4.4 及 前面三节实际是讲如何定义一个数据类型,所谓数据类型其实就是不同存储空间的形状,也就是不同单元格的组合方式.既然定义了数据类型,我们的目的当 ...

  9. 51单片机实现c语言字母滚动,使用51单片机实现点阵汉字平滑滚动显示

    使用51单片机实现点阵汉字平滑滚动显示 #说明:采用的芯片是89C51,LED点阵屏的规格是16*16,同时使用了两个74HC595芯片,字模生成软件在文末有网盘链接. 1 连接原理图 整体的电路连接 ...

最新文章

  1. 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
  2. 本站将进行有关《大道至简》的讨论~
  3. 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)
  4. java实用教程——组件及事件处理——概述
  5. [机器学习-sklearn]鸢尾花Iris数据集
  6. JavaScript学习 第四课(四)
  7. c语言实现shellcode转换工具
  8. JAVA 7 正式版发布 新特性一览表
  9. 基金教父约翰博格的创业史
  10. Java 线程池实际运用案例
  11. 【暂时完结】Prescan学习笔记
  12. Android系统 ——高通平台刷机流程(qfil)
  13. Struts2通配符问题
  14. vijos 1443 月亮之眼
  15. XJTU 新闻英语阅读重点词汇汇总
  16. 莎士比亚统计最高的词频数 java,spark,rdd
  17. 如何将chrome浏览器的默认语言改成中文呢?
  18. CATIA许可证安装,破解文件运行不了直接跳到finish问题
  19. JS中解决单击双击事件的冲突的问题
  20. 邮件服务器怎么使用,Winmail Mail Server邮件服务器软件怎么使用

热门文章

  1. 实习市场竞争激烈,大一就去实习小伙伴们惊呆了
  2. button设置为disabled
  3. Python基于PC版微信实现机器人
  4. 微信小程序--域名配置
  5. 西工大机考《大学英语2》大作业网考
  6. SEO优化中常用的SEO工具
  7. 面对金融风暴,升斗小民的处事哲学
  8. NLTK词性pos_tag的含义
  9. PMP杂谈--快速记忆ITTO
  10. XSS闯关——第五关:level5