登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] IIC

[复制链接]
发表于 2023-2-9 21:48:04 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51
学习安排: 51
开始时间: 2023-02-09
结束时间: 2023-02-09
本帖最后由 李红义 于 2023-2-9 21:59 编辑

I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线
两根通信线:SCL(Serial Clock)、SDA(Serial Data)
I2C电路规范:
1、所有的I2C设备SCL连在一起、SDA 连在一起
2、设备的SCL SDA需要配置成开漏模式
I2C的时序结构
1、起始和终止

起始:SCL高电平期间,SDA从高电平切换到低电平   S  终止:SCL高电平期间,SDA从低电平切换到高电平 P
2、发送一个字节
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节    S Byte
void Send_byte(unsigned char Byte)//发送一个字节
{
  unsigned char i;
   for(i=0;i<8;i++)
   {
              I2C_SDA=Byte&(0x80>>i);//通过8次循环依次将各位取出
                    I2C_SCL=1;
              I2C_SCL=0;         
         }        
}


3、接收一个字节
SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)R Byte
unsigned char Receive_byte(void)//接收一个字节
{
      unsigned char i,Data=0x00;
    for(i=0;i<8;i++)
    {
                      I2C_SCL=1;
                     if(I2C_SDA){Data|=(0x80>>i);}
                      I2C_SCL=0;
                }        
  return Data;//将收的数据反汇编}

4、接收应答和发送应答
发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答  SA


接收应答
在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)RA


void Send_Ack(unsigned char ACKBit)//发送应答
{
      I2C_SDA=ACKBit;
            I2C_SCL=1;
            I2C_SCL=0;
}
unsigned char Receive_Ack(void)//接收应答
{

        unsigned char AckBit;
        I2C_SDA=1;
        I2C_SCL=1;
        AckBit=I2C_SDA;
        I2C_SCL=0;
        return AckBit;
}

I2C的数据结构
1、发送数据

ADDRESS  8位 A6 A5 A4 A3 A2 A1 A0 R/W
A6~4 为固定位即 1010   A3~0 可配置位   W:0 R:1
2、接收数据
IMG_20230209_215423.jpg


好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表