用Proteus学习51单片机之I2C(IIC)总线

发布者:SparklingStar22最新更新时间:2016-06-08 来源: eefocus关键字:Proteus  51单片机  I2C 手机看文章 扫描二维码
随时随地手机看文章
在学习单片机的过程中,我常有这样的烦恼:随随便便一个芯片,少则占用三五个IO口,一般的就占用8个,稍微想用多一点芯片吧,老觉得IO口不够用。学串口的时候觉得串口是个好东西,连两条线就够了,现在学到I2C,觉得这也是一个非常好的东西,也是两条线,还能给每个总线上的设备设立地址,简直就是一个小网络了。

I2C总线使用两条线,一条是时钟线,称为SCL,一条是数据线,称为SDA,各个设备就并在总线上,每一个总线上的设备都有一个自己的地址,主机在操作设备的时候,都会先发送一个地址码,告诉被操作机,接下来的命令由它接收。

接下来说一下I2C总线的数据有效性。I2C总线进行数据传送时,要求SCL为高电平时,SDA上的数据必需保持稳定,换言之,当SCL为高电平时,SDA的电平不能变换,只有当SCL为低电平时,SDA的电平才能变。

I2C总线通信时,需要遵照一定的协议,以下为一次通信过程:

  1. 由主机发送起始信号,启动I2C总线。时序为,在SCL为高电平期间,SDA出现一个下降沿。
  2. 主机发送寻址信号,即告诉特定的设备,接下来的命令是发给它的。地址分为7位和10位,以7位为例,高7位为设备地址,最低位表示读或写,1表示读,0表示写。
  3. 应答信号,I2C协议规定,每传送一个字节数据(包括地址及命令)后,都要有一个接收设备返回的应答信号,以确定信号是否被接收设备正确接收到了。其时序为,在SCL信号为高电平期间,接收设备把SDA电平拉低。
  4. 数据传输,当主机发送发址并收到应答后,就可以发送数据了,但是发送数据只能每次发送一位,并且每发送一位后都需要收到接收机的应答。或主机为接收设备时,主机对最后一个字节不应答,表示向发送设备说,数据传送结束。
  5. 发送停止信号,在全部数据传送完毕后,主机发送停止信号,时序为,在SCL为高电平期间,SDA上产生一个上升沿。

    前面讲到,I2C协议要求数据的发送,要求SCL为低电平时,SDA才能变换,看一下上面的时序,可以看到,命令都是SCL为高电平时对SDA的操作,而发送数据则是SCL为低电平时对SDA操作。

    这次拿来做实验的是AT24C02存储芯片,在Proteus里面,它叫24C02C(或者24C02B),是一个2K bit的I2C总线的EEPROM存储器,换成电脑上常用的KB也就是256KB,EEPROM表示它保存了以后不用加电池,也能保持数据完好。实验的做法是,先把数据保存到芯片中,然后再读出来,显示到1602液晶上。

    上面介绍了I2C总线的协议格式,即发送一个命令的格式,但是对于每一个设备来说,要操作它,是需要很多命令的,AT24C02的操作则主要是读和写,它分为页读写(即一次读写一大片)和字读写(一次读写一个字节)两种方式,初学么,只使用字读写方式,下面记录一下读写的时序。

    首先是写数据,时序如下:

    1.发送启动信号

    2.发送一个控制字(即芯片的地址)——等待应答

    3.发送要写的芯片内存储单元地址——等待应答

    4.发送要写入的数据——等待应答

    5.停止信号

     

    接下来是读数据的时序:

    1.发送启动信号

    2.发送一个控制字(即芯片的地址,最低位为0即写操作)——等待应答

    3.发送要读取的芯片内存储单元地址——等待应答

    4.再发送一个地址信号(同第2步,但是最低位为1,即读操作)——等待应答

    5.按每次一位,读取数据

    6.停止信号

     

     

    I2C协议看起来相对复杂,但是在单片机里面实现,其实就是用两个IO口,来模拟SCL和SDA的电平变化。以启动I2C为例(在SCL为高电平时,SDA发送一个下降沿),代码如下:

     

    SDA = 1;//把SDA先置高电平,待会好出现下降沿

    delay();

    SCL = 1;//SCL要晚于SDA设置,否则容易和其他命令混淆

    delay();

    SDA=0;//电平从1到0,出现一个下降沿

    delay();

     

    ---------------------------------------------------------------------

    Proteus电路图如下,记得要在总线的两条线上,接上拉电阻(10K即可)

    用Proteus学习51单片机之I2C(IIC)总线

    结果如下:

    用Proteus学习51单片机之I2C(IIC)总线

     

    这里还得说一下I2C DEBUGGER这个虚拟仪器,真的是挺好用的,把它接在总线上后,它会把每一个命令都显示出来,并把操作属于哪一种操作都标识出来,以我往芯片存一个字符“H”为例:

    用Proteus学习51单片机之I2C(IIC)总线

     

     

    它把每一步都标的清清楚楚,特别说明一下的是,几个字符是有特殊意义的,如:

    S表是I2C总线-“开始” 
    A---应答 
    p---停止 
    Sr--重启动

    所以第一行S A0 A 01 A 48 A p表示的意思是:启动I2C总线,发送数据A0(其实是芯片的地址),芯片应答,发送数据01(就是写入的地址),芯片应答,发送数据48(就是保存的数据),芯片应答,结束。看看,是否和前面说的流程一致?

    程序这里不贴了,下载里都有,里面有详细的注释。

     

    PS:在调试时遇到的一个问题,可能大家也会碰到,记录一下。

    我本来是循环着往芯片里面写数据,然后读出来,显示到液晶上,这时读写都正常,形式如下:

    for(i=0;i<字符串长度;i++)

    {

         save(‘a’)

         read(‘a’)

    }

    后来我为了试验多显示几个字符,换了种方式,换成一次把所有数据都保存进去,再读出来,变成下面的形式(伪代码):

    save(‘a’)

    save(‘b’)

    save(‘c’)

    read(1)

    read(2)

    read(3)

    这时出现了一个问题,第一个能正常保存,第2个就不能保存,第3个又能保存,让我很是头疼。

    后来分析了一下,前后两种代码的区别,就在于,第一种形式,保存后,又进行读取,相当于保存后进行了一定的延时,而第二种形式一直在保存,保存后没有延时,后来在第二种形式的save后,加上了延时,就一切正常了。

     

    源代码下载:点击下载

     

     

     

    IIC总线技术

      IIC总线是微电子通信控制领域中被广泛采用的一种总线标准,具有接口线少,控制方式简单、器件封装外形小、通信速率高等特点。它仅通过两根线SDA和SCL即可实现完善的全双工同步数据传送,能够十分方便地构成多主机系统和外同器件扩展系统。

      IIC总线数据传输只有任总线处于空闲状态时(SCL和SDA必须保证为高电平)才启动。IIC总线协议定义数据传输时序如图2所示,起始条件为当SCL为高电平时,SDA由高电平向低电平跳变,数据开始传输;结束条件为当SCL为低电平时,SDA由低电平向高电平跳变,数据传输结束。传输过程中,当SCL高时,SDA必须始终保持稳定状态,此时出现任何跳变都被认为是起始或停止条件,只有当SCL为低电平的时候才允许SDA上的数据改变。

     用Proteus学习51单片机之I2C(IIC)总线

      IIC总线上的数据格式如图3所示,由起始位(S)、从机地址码、读写控制位(R/W)、应答位(A)、数据和停止位(P)等组成。通信启动时,主器件先发送启动信号和从机地址,总线上每个器件都有自己的唯一地址,与地址与某一从器件相匹配时,该从器件发一应答位,主器件则认为寻址成功,然后根据R/W位确定的数据传送方向进行数据传输。若主器件长时间收不到应答位,则认为超时,放弃本次数据传输。通信停止时,主机发送一个停止信号。

     用Proteus学习51单片机之I2C(IIC)总线

    关键字:Proteus  51单片机  I2C 引用地址:用Proteus学习51单片机之I2C(IIC)总线

    上一篇:51单片机软件I2C驱动中的CY
    下一篇:51单片机+74hc595锁存器驱动一个静态数码管

    推荐阅读最新更新时间:2024-03-16 14:56

    基于80C51单片机——中断小结
    最近看了一下80C51单片机的中断部分的实验,做一些笔记,方便以后学习查找。 首先说一下什么是中断吧,中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设(外部设备)请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去执行相应的服务处理程序;当服务处理程序运行完毕之后,CPU再返回到暂停处继续执行原来的程序。 那什么是中断嵌套呢?简单点说就是低优先级的中断可以被高优先级的中断源所中断,等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序。 举个简单的栗子吧(之前写过但不知道怎么删了,,又让我重新编辑):比如我们就是一个CPU,我们当前在洗衣服(当前程序),突然电话铃声响了(中断来了)
    [单片机]
    51单片机简易电子称程序
    这是我的单片机设计,主要是使用压力传感器、HX711模块和51单片机做的,附件里包含了电子称的原理图和源代码 这个简易电子称共有三个模式: 模式1:进行普通的物体测量; 模式2:计价模式; 模式3:累计测量模式; 此外,除了可以用按键进行模式的切换,还可通过上位机发送指令进行模式的切换。 此次课程设计主要是针对51单片机的基础知识的运用,其中主要运用了以下知识点:对矩阵按键、LED灯、蜂鸣器、AD转换、LCD12864、 定时器0、定时器1、外部中断0、外部中断1、串口(使用到定时器2,所以在烧录时芯片请用STC89C52)等。 简易介绍 基于51单片机设计的简易电子称,性能比较简单,共分为3个模式,模式一是用于重物的测量,
    [单片机]
    <font color='red'>51单片机</font>简易电子称程序
    51单片机把4位16进制数转成10进制数的方法
    2位16进制转10进制,用除以10求商跟余数的方法,即可。 4位16进制数呢?DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。 例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。 ;------------------------------------------------------------------ 下面把这段转换程序,写成子程序的结构,便于网友移植。 ; 程序经过仿真调试通过,如下所示: ;------------------------------------------------------------------ ; MOV R0,
    [单片机]
    关于51单片机存储空间的说明
    在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了。现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识。 MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。 好,说回MCS-51。 对于程序存储器,有片内和片外两部分。而且无论
    [单片机]
    51单片机在微机自动交换系统中稳定运行的设计
      MCS—51 单片机 在电力线载波通信中处理任务时的实时性尤为突出。由于该系统整机配置的主要服务对象是电力调度,且它的使用环境将来多为无人值守站,所以系统工作是否稳定直接影响到电力线载波机的整机性能。针对电力通信特点,在考虑稳定运行方面我们采取了以下几项措施。   1 设置上电延时复位电路   1.1 为什么要进行上电复位46   计算机在启动运行时都要进行复位。作为在控制领域中应用最广泛的单片机,复位处理更是设计中的关键。单片机内部的各个功能部件均受特殊功能寄存器控制,程序运行直接受程序计数器指挥,寄存器的复位状态决定了单片机内有关功能部件工作用的初始状态,而程序的正常运行就是从这个状态开始的。如果上电时没有做到正
    [单片机]
    <font color='red'>51单片机</font>在微机自动交换系统中稳定运行的设计
    MCS251单片机和PC机间的串口通信
      随着计算机技术的快速发展和广泛应用,上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将PC机作为上位机,单片机作为下位机,二者通过RS2232或者RS2485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示。   本文介绍PC机和单片机通信在一种基于C8051F单片机的波形发生器中的应用,在上位机上显示正弦波的幅值和频率,由上位机发送指令可以改变波形幅度及频率。   1 硬件电路的设计   MCS251 单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进
    [单片机]
    MCS2<font color='red'>51单片机</font>和PC机间的串口通信
    #51单片机#Modbus通信协议的特点及其RTU协议帧数据介绍
    Modbus通信协议的特点 Modbus协议是应用于电子控制器上的一种通用语言。 通过此协议,控制器之间,控制器经由网络和其他设备之间可进行通信。不同厂商生产的控制设备可以连成工业网络,进行集中控制,这已成为了一种工业标准。 该协议定义了控制器能够认识和使用的数据结构,描述了控制器请求访问其他设备的过程,回应其他设备的请求的方式,侦测错误记录的方法,同时制定了通信数据的格局和内容的公共格式。 多机通信时,Modbus协议规定每个控制器必须知道自己的设备地址,识别按照地址发来的数据并对其做出反应,包括:决定是否产生动作,产生何种动作,若需回应,反馈消息应按Modbus协议发出。 Modbus协议的整体框架和格式较为复杂庞
    [单片机]
    #<font color='red'>51单片机</font>#Modbus通信协议的特点及其RTU协议帧数据介绍
    怎样研发一个以80C51单片机为核心的压力测量控制系统?
    1 引言 目前我国发展煤炭生产机械化发展迅速。综采设备的应用,是提高效率、改善安全状况的措施。 影响开机率的一个主要因素是支架对工作面的顶板控制的好坏,因此,对综采工作面进行矿压监测与控制是很有必要的。要做到这一点,首先需要对井下工作面的液压支架的实际工作状况进行监测,通过对检测数据处理、分析,评定其效果,并采取相应措施,以提高开机率、提高产量。本文以监测综采液压支架的压力为研究内容,开发了一套基于单片机的压力测量控制系统。 2 压力测量控制系统功能设计 压力测量控制系统用于监测支架压力, 每台测量控制系统配有四只传感器, 可分别通过高压油管连接支架的立柱、平衡千斤顶, 前探梁千斤顶的油压腔。压力测量控制系统接收到通讯测量控制
    [单片机]
    怎样研发一个以80C<font color='red'>51单片机</font>为核心的压力测量控制系统?
    小广播
    添点儿料...
    无论热点新闻、行业分析、技术干货……
    设计资源 培训 开发板 精华推荐

    最新单片机文章
    何立民专栏 单片机及嵌入式宝典

    北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

    换一换 更多 相关热搜器件
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved