51单片机双机IIC通信

双机IIC通信

一、功能介绍

通过IIC协议进行两个51单片机之间的信息传输,主机按下按键发送不同的指令,控制从机对应LED灯进行点亮。

二、IIC介绍

1、发送部分

(1)开始信号

起始条件:SCL高电平期间,SDA从高电平切换到低电平

在这里插入图片描述

(2)结束信号

终止条件:SCL高电平期间,SDA从低电平切换到高电平

在这里插入图片描述

(3)发送一个字节

条件:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,依次循环上述过程8次,即可发送一个字节。
在这里插入图片描述

2、接收部分

(1)开始信号检测

循环等待SDA、SCL由高电平转换成低电平。

(2)结束信号检测

循环等待SDA由低电平转换成高电平

(3)数据接收
开始信号之后,循环等待SCL由高电平转化为低电平,之后将SDA上的数据读出,循环上述过程8次。完成后执行结束信号表示传输结束。

三、硬件连接

1、将两个单片机的SDA、SCL连在一起。

2、SCL和SDA各添加一个上拉电阻。

在这里插入图片描述

四、软件代码

主机

 //起始信号 释放SDA SCL再拉低SDA,SCL
void I2C_Start(void)
{
	SDA=1;
	SCL=1;
	IIC_delay();
	SDA=0;
	IIC_delay();
	SCL=0;
	
}

//结束信号
void I2C_Stop(void)
{
	SDA=0;
	SCL=1;
	IIC_delay();
	SDA=1;
}

//发送一个字节
void Send_Byte(u8 dat)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		SCL=0;
		if(dat&(0x80>>i))//将数据放在SDA(按位与)
		{
			SDA=1;
        }
		else
		{
			SDA=0;
        }
		IIC_delay();
		SCL=1;
		IIC_delay();
		SCL=0;
		IIC_delay();
  }
}

从机

//开始信号
void I2C_Start(void)
{
	while(SDA&&SCL);
	while(!SDA&&!SCL);	 
}

//结束信号
void I2C_Stop(void)
{
	while(!SDA&&SCL);
	while(SDA);
}

//接收一个字节
unsigned int IIC_Addr_RW(void)
{
	unsigned int Addr_Check=0x00,i=0;
	I2C_Start();
	for(i=0;i<8;i++)
	{
		while(SCL);
		while(!SCL);
		Addr_Check <<=1;
		if(SDA == 1){
			Addr_Check |= 0x01;
		}else{
			Addr_Check |= 0x00;
		}		
		
	}
	I2C_Stop();
   
	return Addr_Check;    
}

五、效果展示

在这里插入图片描述

51单片机双机IIC通信

六、代码链接

关注公众号“小小创客者”回复“51双机IIC通信”获得代码。如有错误欢迎指正!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值