打印
[STM8]

两个MCU IIC通信

[复制链接]
3712|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱好学习者|  楼主 | 2015-9-14 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 爱好学习者 于 2015-9-15 17:28 编辑

  最近在调试MCU的双向通信,搞了几天,发现IIC的通信真的很头痛。经过几天的调试,终于将IIC的硬件通信与模拟通信搞定。将程序贴上来,以供有需要的人参考。ps:主机本别利用硬件和软件模拟,从机部分为硬件中断接收。亲测可信。

IIC_Hardware.rar

69.57 KB

IIC_Software.rar

83.27 KB

沙发
xia00| | 2015-9-14 17:54 | 只看该作者
不知道楼主用的什么片子

使用特权

评论回复
板凳
bbapple| | 2015-9-14 17:57 | 只看该作者
说好的程序呢?我用的是手机登的,怎么没看到啊

使用特权

评论回复
地板
mmuuss586| | 2015-9-14 21:21 | 只看该作者

没上传吧;

使用特权

评论回复
5
liuhaihong| | 2015-9-14 22:38 | 只看该作者
是没看到

使用特权

评论回复
6
xuander| | 2015-9-14 23:14 | 只看该作者
本帖最后由 xuander 于 2015-9-14 23:15 编辑

两CPU,估计没几个人会选IIC通信。
速度慢,协议复杂。不如SPI或者其他方式。



使用特权

评论回复
7
songchenping| | 2015-9-15 07:33 | 只看该作者
附件呢

使用特权

评论回复
8
chenyu988| | 2015-9-15 09:31 | 只看该作者
一般都串口吧,有些芯片还没有硬件不支持从机,很蛋疼的

使用特权

评论回复
9
爱好学习者|  楼主 | 2015-9-15 17:25 | 只看该作者
写这个主要是为了说明IIC的主机和从机通信,并不是为了让两个MCU进行IIC通信。

使用特权

评论回复
10
霜林尽染| | 2015-9-15 18:21 | 只看该作者
楼主方便留个QQ吗,正好在做双机通信,主写从读,现在只能第一次通信成功,再通信就会卡在地址发送

使用特权

评论回复
11
爱好学习者|  楼主 | 2015-9-16 11:30 | 只看该作者
霜林尽染 发表于 2015-9-15 18:21
楼主方便留个QQ吗,正好在做双机通信,主写从读,现在只能第一次通信成功,再通信就会卡在地址发送 ...

你说的问题我也是调试了两天才找到问题,你看我的附件吧,我发的附件中的程序这个问题已经解决

使用特权

评论回复
12
lwsn| | 2015-9-17 22:12 | 只看该作者
可以多从机通信吗

使用特权

评论回复
13
爱好学习者|  楼主 | 2015-9-18 10:18 | 只看该作者
lwsn 发表于 2015-9-17 22:12
可以多从机通信吗

具体没有测试过,应该是可以的。如果想要主机发送的数据,从机都可以接收到,只要设置成广播就可以。如果想要某一个可以,直接发送想要从机的地址,从机采用中断接收数据,如果收到的地址不正确,是不会继续接收数据的。

使用特权

评论回复
14
qgmfly| | 2015-9-18 15:43 | 只看该作者
正好需要这个,所以谢谢分享

使用特权

评论回复
15
qgmfly| | 2015-11-7 14:42 | 只看该作者
楼主硬件通信的主机 main中开了两次IIC发送,一次发送,一次接收?在从机里没看到相应的发送呀》?能详细说一下没
main()
{
        unsigned char te;
        Init_Led();
        Init_IIC();
        delayms(1000);
        while (1)
        {
               
                IIC_Start();
                IIC_SendAddress(addr);
                IIC_SendByte(data);
                IIC_End();
               
                IIC_Start();
                IIC_SendAddress(addr|0x01);
                te = IIC_RecvByte();
                IIC_End();
               
                if(te == data)
               
                {
                        PD_ODR = 0X20;
                }
        }
}

使用特权

评论回复
16
霜林尽染| | 2015-11-25 23:17 | 只看该作者
楼主  IIC_SendAddress(addr|0x01);  地址发送为什么要或一个0x01

使用特权

评论回复
17
foxglove| | 2015-11-26 08:34 | 只看该作者
IIC通信

使用特权

评论回复
18
nmjkh123| | 2017-8-16 14:48 | 只看该作者
楼主,代码能发我下吗?我最近在搞这个。小白。

使用特权

评论回复
19
usstwk| | 2017-9-2 10:49 | 只看该作者

使用特权

评论回复
20
hanlie2345678| | 2017-9-2 11:30 | 只看该作者
不知道楼主用的什么片子呀  我这边有好多哦!  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

73

帖子

0

粉丝