IIC协议代码实现

1. IIC协议概述

IIC总线(Inter-Integrated Circuit)即集成电路总线,是PHILIPS公司设计出来的一种简单、双向、二线制、同步串行总线。IIC总线是一个多向控制总线,多个器件(从机)可以同时挂载到一个主机控制的一条总线上。每个连接在总线上的设备都是通过唯一的地址和其他器件通信,主机和从机的角色可互换。IIC由一条时钟线SCL和一条数据线SDA组成。另外IIC协议是半双工。

2.IIC协议基础知识

IIC协议代码实现_第1张图片

                                                                                              (图片来自网络)

2.1起始条件:

当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件。

代码实现:

void Start()
{
    SCL = 1;                             //SDL拉高。
    SDA = 1;                             //SDA拉高。
    delay();
    SDA = 0;                             //SDA拉低,产生下降沿。
    delay();
    SCL = 0;                             //SCL拉低,数据才能变化。
}

2.2终止条件:

当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件。

代码实现:

void End()
{
    
    SCL = 0;
    SDA = 0;
    delay();
    SCL = 1;
    delay();
    SDA = 1;                      //SDA拉高,产生上升沿。
    delay();
}

2.3应答

void I2C_Ack(void)
{
   SCL = 0;
   SDA = 0;                   //拉低应答
   delay();
   SCL = 1;
   delay();
   SCL = 0;
}

2.4非应答

void I2C_NAck(void)
{
   SCL = 0;
   SDA = 1;                   //拉高非应答
   delay();
   SCL = 1;
   delay();
   SCL = 0;
}

2.5数据发送

void IIC_SendOneByte(uint_8 data)//主设备向从设备发送一字节数据
{
    uint_8 i;
    for (i = 0; i < 8; i++)
    {
        if (data & 0x80)
        {
            SDA = 1;
        }
        else
        {
            SDA = 0;
        }
    delay();
    SCL = 1;
    delay();
    SCL = 0;
    delay();
    data <<= 1;
    }
}

额,这一篇写到最后好像有点问题,代码不一定对。

你可能感兴趣的:(通信协议)