C51--IIC协议

IIC协议初识:

1、概述

IIC全称Inter-Integrated Circuit (集成电路总线)
是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。

IIC属于半双工同步通信方式

SCL——时钟信号
SDA——数据信号

2、特点:

简单性和有效性

由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
(串口最高速率:20kb/s)

多主控(multimastering)

其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控

3、构成

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

IIC协议起始和终止信号:

IIC协议

IIC总线在传输数据的过程中一共有三种类型信号,
分别为:开始信号结束信号应答信号
(串口:起始位、停止位、数据位、速度)

在这里插入图片描述

起始信号关注点:(>4.7us)SDA由高电平变为低电平(>4us)
终止信号关注点:(>4us)SDA由低电平变为高电平(>4.7us)

在这里插入图片描述

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放(拉高)数据线,由接收器反馈一个应答信号。

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

IIC协议起始 / 终止 / ACK封装函数:

void ICC_Start()
{
   
	SDA = 1;
	SCL = 1;
	_nop_();	//一个nop用时5us
	SDA = 0;
	_nop_();
}

void ICC_Stop()
{
   
	SDA = 0;
	SCL = 1;
	_nop_();
	SDA = 1;
	_nop_();
}

void ICC_ACK()
{
   
	char flag;
	
	SDA = 1;		//在时钟脉冲9期间释放
	_nop_();
	SCL = 1;
	_nop_();
	flag = sda;
	_nop_();
	SCL = 0;
	_nop_();
	
	return flag;
}

IIC协议发送一个字节的函数:

在这里插入图片描述
SCL——时钟信号
SDA——数据信号
SCL处于高电平时——传输数据
SCL处于低电平时——翻转数据

void IIC_Send_Byte()
{
   
	int i;
	
	for(i = 0;i < 8;i++){
   
		SCL = 0;						//SCL低电平,让SDA做好数据准备
		SDA = dataSend & 0x80;			//与上1000 0000 获得dataSend的最高位,给SDA
		_nop_();						//发送数据建立的时间
		SCL = 1//SCL高电平,开始发送数据
		_nop_();						//发送数据需要时间
		SCL= 0//发送完毕,SCL拉回低电平
		_nop_();
		dataSend = dataSend << 1;
	}
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 02:06:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 02:06:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 02:06:05       82 阅读
  4. Python语言-面向对象

    2023-12-08 02:06:05       91 阅读

热门阅读

  1. golang 解决ZWNBSP 空字符问题

    2023-12-08 02:06:05       53 阅读
  2. 【安全】【Linux】通过/proc/pid/获取进程信息

    2023-12-08 02:06:05       60 阅读
  3. 常用到的设计模式(1)

    2023-12-08 02:06:05       61 阅读
  4. scala可变参数列表使用

    2023-12-08 02:06:05       64 阅读
  5. AI聊天 AI绘画 AI视频 AI制作PPT

    2023-12-08 02:06:05       63 阅读
  6. vue watch

    2023-12-08 02:06:05       66 阅读
  7. Docker安装Elasticsearch和控制台

    2023-12-08 02:06:05       70 阅读
  8. Git篇常用命令

    2023-12-08 02:06:05       63 阅读
  9. 26.Python 网络爬虫

    2023-12-08 02:06:05       59 阅读