双机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通信文章来源:https://www.toymoban.com/news/detail-539568.html
六、代码链接
关注公众号“小小创客者”回复“51双机IIC通信”获得代码。如有错误欢迎指正!文章来源地址https://www.toymoban.com/news/detail-539568.html
到了这里,关于51单片机双机IIC通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!