找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4253|回复: 16
收起左侧

51单片机学习中,学到IIC总线,不知道它具体有什么作用,我们用它去做什么

  [复制链接]
ID:654651 发表于 2019-12-3 20:52 | 显示全部楼层 |阅读模式
如题
回复

使用道具 举报

ID:67199 发表于 2019-12-3 21:06 | 显示全部楼层
可以与IIC相关的硬件通信  ,没别的用。
回复

使用道具 举报

ID:155507 发表于 2019-12-3 21:16 | 显示全部楼层
I2C总线是各种总线中使用信号线最少,并具有自动寻址、多主机时钟同步和仲裁等功能的总线。因此,使用I2C总线设计计算机系统十分方便灵活,体积也小,因而在各类实际应用中得到广泛应用。

I2C的运用比如有很多传感器或者存储芯片都有I2C接口用于数据传输,比如AM2311温湿度传感器,AT24C01A型EEPROM就是I2C总线接口的。

每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。
回复

使用道具 举报

ID:25310 发表于 2019-12-3 21:25 | 显示全部楼层
没买学习用的配套资料吗?一般会有个24C02讲解这一课的吧,
回复

使用道具 举报

ID:655496 发表于 2019-12-3 21:59 | 显示全部楼层
IIC是一种串行通信方式,就像TTL、USB等通信道理一样的,有些芯片的通信方式就是IIC,一些单片机或arm等主控也具有IIC通信方式,就可以使二者进行通信,比如常见的存储器24C02/08/16...都是采用IIC方式。
回复

使用道具 举报

ID:235200 发表于 2019-12-3 22:03 | 显示全部楼层
传递数据的方式,可以用这总线方式在CPU与外设之间传递数据
回复

使用道具 举报

ID:647528 发表于 2019-12-3 22:05 | 显示全部楼层
IIC总线由一根数据线SDA和一根时钟线SCL构成,每个器件有一个唯一的地址识别。目前有很多半导体集成电路上都集成了IIC接口。利用51单片机可模拟IIC总线协议。
回复

使用道具 举报

ID:647528 发表于 2019-12-3 22:07 | 显示全部楼层
主要的优点是其简单性,与外围器件连接占用接口少,但不失有效性
回复

使用道具 举报

ID:437615 发表于 2019-12-3 22:22 来自手机 | 显示全部楼层
llc为短距离数据传输,有很多的传感器用的就是ii c总线,比如说24c02,oLED,mpu6050等,总的说来还是非常重要的
回复

使用道具 举报

ID:376767 发表于 2019-12-3 22:30 | 显示全部楼层
IIC总线可以挂接多个外部设备,仅通过两根信号线即可与其他设备进行双向通信,实现系统功能,节省IO资源。
回复

使用道具 举报

ID:635687 发表于 2019-12-3 22:41 | 显示全部楼层
跟外部芯片通信的接口,比如感温芯片18B20就是用IIC总线跟单片机通信的.
回复

使用道具 举报

ID:635687 发表于 2019-12-3 23:03 | 显示全部楼层
与单片机通信的接口,比如感温芯片18B20就是通过IIC接口和单片机的.
回复

使用道具 举报

ID:584814 发表于 2019-12-4 07:46 | 显示全部楼层
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。7位IIC总线可以挂接127个不同地址的IIC设备,0号"设备"作为群呼地址;10位IIC总线可以挂接更多的10位IIC设备......
如果各器件是汽车,它就是高速公路的样子罢。
回复

使用道具 举报

ID:475993 发表于 2019-12-4 12:12 | 显示全部楼层
你拿个陀螺仪用一下就知道了,然后学会怎么用之后。
回复

使用道具 举报

ID:882237 发表于 2021-2-2 10:21 | 显示全部楼层
899976025 发表于 2019-12-3 22:05
IIC总线由一根数据线SDA和一根时钟线SCL构成,每个器件有一个唯一的地址识别。目前有很多半导体集成电路上 ...

请问下IIC通信协议对于对于51单片机来说有什么用吗?
回复

使用道具 举报

ID:844772 发表于 2021-2-2 16:28 | 显示全部楼层
北辰凌朔 发表于 2021-2-2 10:21
请问下IIC通信协议对于对于51单片机来说有什么用吗?

正好我小孩给51写了一个DS3231的头文件,你看看READ和WRITE 两个函数,就明白IIC通讯过程了,不过写的风格不好,看样子是半抄半写的。
#ifndef _DS3231_H_
#define _DS3231_H_
sbit DS3231_SDA=P0^5;
sbit DS3231_SCL=P0^6;
sbit DS3231_SQW=P0^7;
bit ack;
#define DS3231_Write 0xD0
#define DS3231_Read 0xD1
#define DS3231_SECOND 0x00
#define DS3231_MINUTE 0x01
#define DS3231_HOUR 0x02
#define DS3231_WEEK 0x03
#define DS3231_DAY 0x04
#define DS3231_MONTH 0x05
#define DS3231_YEAR 0x06
#define DS3231_CONTROL 0x0E          //控制寄存器
#define DS3231_STATUS 0x0F          //状态寄存器
#define DS3231_TEMPERATUREH 0x11 //温度高字节
#define DS3231_TEMPERATUREL 0x12 //温度低字节

void delay(uint us)
{
  while (us--);
}

void Start_I2C()
{
  DS3231_SDA=1;
  delay(1);
  DS3231_SCL=1;
  delay(5);
  DS3231_SDA=0;
  delay(5);
  DS3231_SCL=0;
  delay(2);
}

void Stop_I2C()
{
  DS3231_SDA=0;
  delay(1);
  DS3231_SCL=1;
  delay(5);
  DS3231_SDA=1;
  delay(4);
}

void SendByte(uchar c)
{
  uchar i;
  for(i=0;i<8;i++)  
  {
   if((c<<i)&0x80)
   DS3231_SDA=1; //判断发送位
   else
   DS3231_SDA=0;
   delay(1);
   DS3231_SCL=1; //置高,通知接收数据位
   delay(5);
   DS3231_SCL=0;
   }
  delay(2);
  DS3231_SDA=1; //释放总线,接收应答信号
  delay(2);
  DS3231_SCL=1;
  delay(3);
  //我写的
  if (DS3231_SDA==1)
    ack=0;
        else
          ack=1; //是否接到应答信号
  DS3231_SCL=0;
  delay(2);
  
}

uchar RcvByte()
{
  uchar n=0;
  uchar i,retc=0;
  DS3231_SDA=1; //设为输入方式
  for(i=0;i<8;i++)
  {
    delay(1);
    DS3231_SCL=0; //置低,准备接收数据
    delay(5);
    DS3231_SCL=1; //使数据有效
    delay(3);
    retc<<=1;
    if(DS3231_SDA==1)
        retc+=1;
    delay(2);
  }
   DS3231_SCL=0;
   delay(2);
   return(retc);
}
//我写的
void Ack_I2C(bit a)
{
if (a==0)
  DS3231_SDA=0;         //应答或非应答信号
  else
   DS3231_SDA=1;
delay(3);
DS3231_SCL=1;
delay(5);
DS3231_SCL=0;
delay(2);
}
uchar write1(uchar addr,uchar write_data)
{
  Start_I2C();
  SendByte(DS3231_Write);
  if (!ack)
   {
     return 0;
        }
  delay(1);
  SendByte(addr);
  if  (!ack)
   {
     return 0;
        }
  delay(1);
  SendByte(write_data);
  if  (!ack)
   {
     return 0;
        }
  Stop_I2C();
  delay(10);
  return 1;
}

uchar read1()
{
uchar read_data;
Start_I2C();
SendByte(DS3231_Read);
if (!ack)
   {
     return 0;
        }
delay(1);
read_data = RcvByte();
if (!ack)
   {
     return 0;
        }
Ack_I2C(1);
Stop_I2C();
return read_data;
}

uchar read2(uchar add)
{
  Start_I2C();
  SendByte(DS3231_Write);
  if (!ack)
   {
     return 0;
        }
  delay(1);
  SendByte(add);
  if (!ack)
   {
     return 0;
        }
  return(read1());
}
#endif
回复

使用道具 举报

ID:146782 发表于 2021-2-2 19:13 | 显示全部楼层
与IIC相关的硬件通信,如24c02、pcf8591、oLED、mpu6050、DS3231等,是电子硬件里很重要的一部分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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