单片机:IIC总线通信

发布者:快乐旅人最新更新时间:2018-07-14 来源: eefocus关键字:单片机  IIC总线通信 手机看文章 扫描二维码
随时随地手机看文章

一、IIC总线通信

1、简介:

 IIC 即Inter-Integrated Circuit(集成电路总线),I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。

 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。

2、常用的串行扩展总线有:

(1)、I2C (Inter IC BUS)总线
(2)、单总线(1-WIRE BUS)
(3)、SPI(Serial Peripheral Interface)总线等。

3、IIC总线电路接法

 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。

        

4、IIC总线通信协议

(1)起始和终止信号

 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;

 SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。


(2)应答和非应答

 IIC 总线协议规定,每传送一个字节数据后,都要有一个应答信号以确定数据传送是否被对方收到。应答信号由接受设备产生,在SCL为高电平期间,接受设备将SDA拉低为低电平,表示数据传输正确,产生应答。



(3)数据传送

数据位的有效性规定

 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。


5、IIC通信基本函数

(1)起止信号


i2c_Start()

 

 {

 

    SDA = 1;   //SCL为高电平时,SDA 出现一个下跳沿表示I2C总线启动

    SCL = 1;

    i2c_Delay();

    SDA = 0;

    i2c_Delay();

 

    SCL = 0;  // 启动后将SCL点平拉低

    i2c_Delay();

 }


(2)终止信号


void i2c_Stop()

{

    SDA = 0;  //当SC高电平时,SDA出现一个上升沿表示I2C总线停止

    SCL = 1;

    i2c_Delay();

    SDA = 1;

    i2c_Delay(); 

}

(3)发送数据


void i2c_SendByte(unsigned char Byte)

{

    unsigned char i = 0;   

    for (i = 0; i < 8; i++)  

    {

        if(Byte & 0x80)    //IIC规定下发送高位数据

        {

             SDA = 1;  

        }

        else   

             SDA = 0;  

        SCL = 1;          //在SCL为高电平期间写入数据

        i2c_Delay();   

        SCL = 0;  

        Byte <<= 1;

        if (i == 7)

            SDA = 1;      //在发送完数据后将SDA拉高

        i2c_Delay();

    }

}

(4)接收数据


unsigned char i2c_ReadByte()

{

    unsigned char i = 0;

    unsigned char value = 0;

    for (i = 0; i < 8; i++)

    {

         value <<= 1;      //先读取高位

         SCL = 1;          //SCL 为高电平时读取数据

         i2c_Delay(); 

         if(SDA)

         {

             value++;

         }

         SCL = 0;

         i2c_Delay();

    }

    return value;

}

(5)发送应答信号


void char i2c_Ack()

{

    SDA = 0;      //SCL为高电平时间SDA拉低表示应答

    i2c_Delay();

    SCL = 1;

    i2c_Delay();

    SCL = 0;

    i2c_Delay();

    SDA = 1;

    i2c_Delay();

}

(6)发送非应答信号


void i2c_NAck()

{

    SDA = 1;    //SCL高电平期间SDA拉高表示非应答

    i2c_Delay();

    SCL  = 1;

    i2c_Delay();

    SCL = 0;

    i2c_Delay();

}


(7)等待应答


unsigned  char i2c_WaitAck()

{

    unsigned char ret;

    SDA = 1;      

    i2c_Delay();

    SCL = 1;       //把SCL拉高读取SDA的点平高低,低电平表示应答

    i2c_Delay();

    if(SDA == 1)

    {

        ret = 1;

    }

    else

        ret = 0;

    SCL = 0;

    i2c_Delay();

    return ret;

}

(8)检查IIC设备总线


unsigned char i2c_CheckDevice(unsigned char _Address)

{

    unsigned char UcAck;

    if (SDA == 1 &&  SCL == 1)

    {

        i2c_Start();

        i2c_SendByte(_Address|I2C_WR); //发送地址

        ucAck = i2c_WaitAck();         //等待接收应答    

        i2c_Stop();                    //停止信号

        return ucAck;                  

    }

    return 1;

}





关键字:单片机  IIC总线通信 引用地址:单片机:IIC总线通信

上一篇:单片机:矩阵键盘和LCD1602
下一篇:单片机 IIC 总线协议 和 详细例程

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

PIC单片机1X4独立键盘C语言程序
/******************************************** *** 功能:1X4按键 *** 实验内容:按下S1 S2 S3 S4 数码管分别显示出0 1 2 3 *** 开发板连接方法:把J3的的跳线帽跳到1-2(左边) *********************************************/ #include pic.h //包含单片机内部资源预定义 __CONFIG(0xFF32); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 const unsigned char TABLE = {0x3f,0x6,0x5b,0x4
[单片机]
32*32点阵LED显示汉字-STC单片机
说明:我 图上摆放的是上面一排引脚是行,下面一排引脚是列。行是LED阳极。 行列各由四个74HC573控制,每个控制8个脚。同时注意单片机P0口上拉保持供电充足。 还有注意每行的扫描时间要合理设置。否则会有显示残缺。根据实际设置吧!!! 横向显示4个字:少 占 鱼 制 作 其实可以把这个程序和我另外的一个单片机串口与电脑通信的程序结合起来,加上我用VC做的上位机界面。可以自由输入显示内容,还可以反向控制电脑的一些操作。不过我还是热衷不用电脑输入显示内容,而用一只感应笔扫描一个32*32LED模板,实现自己点哪就让哪个LED亮的效果。简单有省事。等我做出实物来再发吧!!!其实就是加个光敏三极管,LED模板上
[单片机]
32*32点阵LED显示汉字-STC<font color='red'>单片机</font>
AT90S8515单片机1602显示程序
AT90S8515 单片机 1602显示程序 ;**************************** ; CONTANCE NUMBER DEFINATION ;**************************** .EQU FCLK =4000 ; SYSTEM C LOC K FREQ.=4M Hz iframe id="iframeu2163852_0" src="http://pos.baidu.com/dccm?rdid=2163852&dc=3&di=u2163852&dri=0&dis=0&dai=2&ps=856x824&enu=encoding&dcb=___adblockplu
[单片机]
基于STC12C4052AD单片机的教室灯光控制系统设计
O 引言 当前,随着经济的飞速发展,能源短缺问题日益突出,成为一个国家经济发展的“瓶颈”。作为工业生产和人民生活不可或缺的电力能源更是如此。尤其现今越来越提倡低碳生活,节约能源已经成为一种全球共识,而作为培养社会精英的高校更应该起到榜样的作用。但是目前在校园内,教室灯火通明,却空无一人的现象屡见不鲜,这不仅造成了严重的资源浪费,也对高校的形象造成了很坏的影响。本文所研究的教室灯光控制系统就可以很好地实现节约能源的作用。 1 系统硬件组成 整个系统由中央控制电路、2×4按键电路、光敏传感电路、继电器驱动电路、时钟电路、液晶显示电路六个模块组成。其中,光敏传感电路模块主要完成对教室当前光线明暗程度的判定,时钟电路主要实现时基
[单片机]
基于STC12C4052AD<font color='red'>单片机</font>的教室灯光控制系统设计
51单片机硬盘控制电路以及源程序
#include at89x51.h /************************************************** *                  HardDisk Control Demo *     Power BY DDDLZHU *    编译环境 : KEIL C51 V7.07    支持器件 : AT89C51       *                    COPYRIGHT (C) 2004                          ***************************************************/ #defi
[单片机]
51<font color='red'>单片机</font>硬盘控制电路以及源程序
单片机C语言频率计源码
此程序是在51hei单片机开发板上面做的,如需要移植到自己的电路上,修改相应的端口即可 //********************************频率计********************************* //*******************************计数最大值1MHZ*************************** //*****************************手把手教你单片机开发板********************** //*********************************2012/9/8***********************
[单片机]
单片机红外电视遥控器C51程序代码
//************************************************************** //名称:单片机红外电视遥控器C51程序代码() /*-------------------------------------------------------------- 描述: 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行 脉冲幅度调制而产生的.当发射器按键按下后,即有遥控码发出,所按的键 不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的 组合表示二进制的 0 ;以脉宽为0.565m
[单片机]
Atmel基于ARM的闪存微控制器获USB-IF认证
Atmel日前宣布其ARM基础32位闪存微控制器AT91SAM7S64已获USB实施者论坛(USB Implementers Forum, USB-IF)认证,确认嵌入在AT91SAM7S64的USB 2.0全速设备接口完全符合相关USB标准。 AT91SAM7S是一系列基于ARM的32位闪存微控制器系统级芯片(system-on-chip)产品,包括一个可提高实时性能的先进中断控制器(interrupt controller),一个能加快外设和内存之间数据传输速度的外围直接内存存取 (DMA) 控制器,能简化外设编程的寄存器位操作,一个可以在任何工作模式下优化功率利用率的功率管理控制器,以及一个用于上电、断电和节电控制的系统控
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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