首页 > 其他分享 >【I²C协议】STC89C51单片机IIC通信(代码+原理)

【I²C协议】STC89C51单片机IIC通信(代码+原理)

时间:2024-07-20 17:00:46浏览次数:15  
标签:IIC 数据线 高电平 STC89C51 单片机 SDA 信号 nop

STC89C51单片机IIC通信

什么是I²C协议

IIC,即I²C,全称 Inter-Integrated Circuit,字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫 集成电路总线 ,是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式。

特点

  • 简单性和有效性

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

  • 多主控(multimastering)

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

在这里插入图片描述

构成

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

通信协议

IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。

开始信号、结束信号、应答信号

要通信,总得先发个开始信号吧。就像你要和别人说话,总要先喊他一声一样。
如下图所示,
协议规定,当SCLK时钟信号一直处于高电平状态时,SDA线由高电平跳变到低电平这个动作,表示起始信号。注意此时就算SDA数据线的电平跳变完,SCLK线依然是高电平哦。
当连接在IIC总线上的外设模块检测到这个信号时,就知道数据要开始传输了。对于结束信号同理,协议规定,当SCLK时钟信号一直处于高电平状态时,SDA线由低电平跳变到高电平这个动作,表示结束信号。
在这里插入图片描述
应答信号:发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
在这里插入图片描述

数据传输

协议规定,在数据的传输过程中,SCLK为高电平时,外设模块开始采集SDA数据线上的数据,此时要求SDA数据线上的电平状态必须稳定(不然鬼知道这一位数据是0还是1),当SCLK为低电平时才允许SDA线上的数据跳变成另外一种状态。

引用别人,感觉讲的很好
现在,我想传输1bit数据,该位数据为1,从上文知道,我们在发完开始信号之后,此时SDA数据线的电平状态为低电平,SCLK信号依然是高电平。难道这个时候外设就要开始读取数据了吗?这显然不是的,从发完开始信号到真正的数据传输之间,会有一段缓冲时间,让我们去准备数据,在准备数据阶段,先将SCLK信号拉低一段时间,在这期间将SDA数据线拉高一段时间(即数据1),然后再将SCLK信号拉高,此时这个时钟信号的高电平被外设检测到的话,外设就知道要读取数据了,从而SDA上的数据就会被外设读到了。依次类推,传输下一位数据。
在这里插入图片描述
在主机传完一个字节的数据之后,就应该释放总线(协议规定,当SDA和SCLK同时为高时,表示空闲状态)然后把SDA数据线连接的IO口从输出模式转换成输入模式,这样才能拿到SDA数据线上的应答信号。这样,一个字节的数据就从主机到外设传输完毕了。

器件地址 在模块手册上会有注明

代码示例

使用STC89C51单片机

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
	sda = 1;
	scl = 1;
	_nop_();
	sda = 0;
	_nop_();
}

void IIC_Stop()
{
	sda = 0;
	scl = 1;
	_nop_();
	sda = 1;
	_nop_();
}

char IIC_ACK()
{
	char flag;
	sda = 1;//就在时钟脉冲9期间释放数据线
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	return flag;
}

void IIC_Send_Byte(char dataSend)
{
	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;//发送完毕拉低
		_nop_();//
		dataSend = dataSend << 1;
	}
}


void main()
{
		int a = 10;
	
		IIC_Start();

}

本人参考学习地址:http://t.csdnimg.cn/6o9tE

标签:IIC,数据线,高电平,STC89C51,单片机,SDA,信号,nop
From: https://blog.csdn.net/qq_40064717/article/details/140502012

相关文章

  • 基于单片机的远程烟雾报警系统的硬件电路设计
    摘要:目前,智能家居已成为信息化时代的产物遍布全国各地,其中适用于家用的烟雾报警系统已成为家庭设备中安全管理的基础。本文设计了一款基于单片机对家用燃气进行实时监测的系统,该系统可通过短信的形式通知家庭主人当前的烟雾浓度。本设计主要完成了硬件电路设计,其中包括基于A......
  • 基于单片机的温控光控智能窗帘设计探讨
    摘要:文章使用的核心原件是AT89C52单片机,以此为基础进行模块化的设计,在整个设计中通过加入光检测模块和温度检测模块,从而对室内的温度和光照强度进行检测,然后将检测得到的数据传输给单片机,单片机对电机的继电圈的通断进行控制,从而通过电机的正转和反转,从而实现对窗帘开合......
  • 【51单片机】1-2创建keil代码工程
    1.双击打开keil软件,点击Project->newuVisionproject2.在适当位置新建项目工程文件夹Template,双击进入该文件夹,并输入下方文件名保存。3.选择AT89C51或AT89C52均可后,点击是4.新建文本文件,保存为.c文件,主要保存.c文件的文件名与工程名相同5.右键添加文件或者双击......
  • msp430f5529lp移植OLED屏幕 iic 4针 ccs
    OLED.C  代码私发,开发环境ccs......
  • stm32 - IIC
    目录STM32-IIC1.基本概念2.引脚说明SDASCK/SCL3.传输方向4.通信过程1.空闲状态2.开始信号3.数据发送4.应答信号5.数据接收6.停止信号STM32-IIC1.基本概念半双工同步通信的串行通信接口2.引脚说明SDASCK/SCLIIC总线只需要两根引脚就可以实现通信,一根是数......
  • 第十五届蓝桥杯单片机模拟考试实战题目
    目录一、硬件框图二、功能描述2.1基本功能描述2.2显示功能1.测距界面2.参数界面3.记录界面4.显示要求2.3按键功能2.4旋钮模式2.5LED指示灯功能2.6初始状态三、代码实现1>主函数:2>测距驱动函数3>PCF8591驱动函数4>矩阵按键驱动函数5>CT107D头文件四、题目链......
  • 【单片机毕业设计选题24064】-基于阿里云的鱼塘水质检测系统
    系统功能:主控为STM32F103C8T6,通过PH值传感器、浑浊度传感器、温度传感器采集各项水质数据,系统可设定各参数的阈值,超过设定的阈值将通过蜂鸣器响来提醒用户做出措施,同时通过ESP-12FWIFI模块将设备连接阿里云物联网平台,实现在pc与手机端进行远程实时数据实时交互。系统需要......
  • 1.基于51单片机的数码录音放音系统设计(实物)
    1.基于51单片机的数码录音放音系统设计(实物) 1.基于51单片机的数码录音放音系统设计(实物)综合运用所学的模拟电子技术、数字逻辑电路、C语言、单片机原理及应用、传感器等专业知识,设计出一套数码录音放音系统。系统实现录音、放音、播放停止、快进快退、删除、显示相关信息等......
  • IIC初了解
    引脚说明IIC需要俩根引脚可以实现通信,一根是SDA(SerialData),另一根是SCL(SerialClock)所有通过IIC接口通信的外围器件都挂载到IIC总线上。IIC的总线必须有主器件提供。每个从器件由于没有片选引脚,所以每个从器件都需要有自己独立的器件地址。SDA引脚和SCL的输出模式一般都要输......
  • 串口、IIC、SPI的优缺点
    串口、IIC、SPI的优缺点串口(SerialPort)串口通信是一种基本的串行通信方式,它通过串行数据线(TX和RX)进行数据的发送和接收。串口通信通常用于微控制器与PC或其他设备之间的通信。特点:简单易用,硬件实现成本低。通信速率较低,适合长距离通信。可以实现全双工通信(同时发送和接收......