专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
两个单片机之间进行模拟I2C通讯
2020-01-23 14:40
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7656
25
25
有大侠做过两个单片机之间进行I2C通信的吗?一般单片机端当主机用两条数据线去模拟i2c当主机读取外围的从设备比较简单,但单片机端模拟从机与另外一个单片机模拟I2C当主机进行通信就没搞过了,有人这么做过吗,能否贴出单片机端模拟从机的I2C协议代码,研究一下
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
25条回答
huhang
2020-01-24 13:08
void SlaveI2C_Test(void)
{
start_scan(); //¼ì²âÆðʼÐźÅ
if(START_flag==1)
{
START_flag = 0; //¿ªÊ¼ÐźÅÇåÁã
I2C_rxadd(); //ÊÕÈ¡µØÖ·¼°ÃüÁî
//------------·´À¡½ÓÊÕÓ¦´ð------------
while(scl == 0);//µÈ´ý¸øÖ÷»ú×¼±¸½ÓÊÕÓ¦´ð
SDA_OUT();
SDA_Reset;
while(scl == 1){;}//µÈ´ýÖ÷»ú½ÓÊÕÓ¦´ðÍê³É
SDA_IN();
//------------------------------------
//------------------------------------
if(DEV_address == 0xa0 || DEV_address == 0xa1) //ÅжÏÊÇ·ñΪ±¾»úµØÖ·
{
m = 0; //³õʼ»¯m
if(R_W == 0) //Ö÷»úÏò±¾»úдÊý¾Ý
{
while(1)
{
I2C_Rec[m] = I2C_rxbyte();
//------------·´À¡½ÓÊÕÓ¦´ð------------
while(scl == 0);//µÈ´ý¸øÖ÷»ú×¼±¸½ÓÊÕÓ¦´ð
SDA_OUT();
SDA_Reset;
while(scl == 1){;}//µÈ´ýÖ÷»ú½ÓÊÕÓ¦´ðÍê³É
SDA_IN();
//------------------------------------
//------------STOP Ðźżì²â-----------
m++;
/* while(scl == 0){;}//¼ì²âSTOP
if(scl==1)
{
while(sda==0){;}
while(sda==1)
{
GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));
return;
}
}*/
//-------------------------------------
if(m == I2C_Rec[1])//³¤¶È×Ö·û
{
//STOP_flag = 1;
GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));
return;
}
}
}
else if(R_W == 1) //Ö÷»úÏò±¾»ú¶ÁÊý¾Ý
{
while(1)
{
I2C_txbyte(I2C_Send[m]);
m++;
//----------------½ÓÊÕÖ÷»úÓ¦´ð£¬´Ë¹¦ÄÜÖ÷»úÐèÒª¿ªÆôÏò´Ó»ú¶ÁÊý¾Ý³É¹¦ºó·¢Ë͵ÄÓ¦´ðÐźÅ----------------------------------
while(scl == 0){;}
while(scl == 1)
{
if(sda == 1)//½ÓÊÕµ½Ö÷»úÇëÇó¶ÁÊý¾ÝµÄ×îºóÒ»¸ö×Ö½ÚNACKʱ£¬Í£Ö¹·¢ËÍ
{
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));
return;
}
}
//--------------------------------------------------------------------------------
//----------------½ÓÊչ̶¨³¤¶È×Ö½ÚÊý¾ÝºóÇ¿ÐÐÍ˳ö·¢ËÍ
/*if(m == 20)
{
//STROBE = 1;
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));
return;
}*/
//--------------------------------------------------------------------------------------
}
}
}
}
}
加载中...
查看其它25个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
{
start_scan(); //¼ì²âÆðʼÐźÅ
if(START_flag==1)
{
START_flag = 0; //¿ªÊ¼ÐźÅÇåÁã
I2C_rxadd(); //ÊÕÈ¡µØÖ·¼°ÃüÁî
//------------·´À¡½ÓÊÕÓ¦´ð------------
while(scl == 0);//µÈ´ý¸øÖ÷»ú×¼±¸½ÓÊÕÓ¦´ð
SDA_OUT();
SDA_Reset;
while(scl == 1){;}//µÈ´ýÖ÷»ú½ÓÊÕÓ¦´ðÍê³É
SDA_IN();
//------------------------------------
//------------------------------------
if(DEV_address == 0xa0 || DEV_address == 0xa1) //ÅжÏÊÇ·ñΪ±¾»úµØÖ·
{
m = 0; //³õʼ»¯m
if(R_W == 0) //Ö÷»úÏò±¾»úдÊý¾Ý
{
while(1)
{
I2C_Rec[m] = I2C_rxbyte();
//------------·´À¡½ÓÊÕÓ¦´ð------------
while(scl == 0);//µÈ´ý¸øÖ÷»ú×¼±¸½ÓÊÕÓ¦´ð
SDA_OUT();
SDA_Reset;
while(scl == 1){;}//µÈ´ýÖ÷»ú½ÓÊÕÓ¦´ðÍê³É
SDA_IN();
//------------------------------------
//------------STOP Ðźżì²â-----------
m++;
/* while(scl == 0){;}//¼ì²âSTOP
if(scl==1)
{
while(sda==0){;}
while(sda==1)
{
GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));
return;
}
}*/
//-------------------------------------
if(m == I2C_Rec[1])//³¤¶È×Ö·û
{
//STOP_flag = 1;
GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));
return;
}
}
}
else if(R_W == 1) //Ö÷»úÏò±¾»ú¶ÁÊý¾Ý
{
while(1)
{
I2C_txbyte(I2C_Send[m]);
m++;
//----------------½ÓÊÕÖ÷»úÓ¦´ð£¬´Ë¹¦ÄÜÖ÷»úÐèÒª¿ªÆôÏò´Ó»ú¶ÁÊý¾Ý³É¹¦ºó·¢Ë͵ÄÓ¦´ðÐźÅ----------------------------------
while(scl == 0){;}
while(scl == 1)
{
if(sda == 1)//½ÓÊÕµ½Ö÷»úÇëÇó¶ÁÊý¾ÝµÄ×îºóÒ»¸ö×Ö½ÚNACKʱ£¬Í£Ö¹·¢ËÍ
{
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));
return;
}
}
//--------------------------------------------------------------------------------
//----------------½ÓÊչ̶¨³¤¶È×Ö½ÚÊý¾ÝºóÇ¿ÐÐÍ˳ö·¢ËÍ
/*if(m == 20)
{
//STROBE = 1;
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));
return;
}*/
//--------------------------------------------------------------------------------------
}
}
}
}
}
一周热门 更多>