打印
[MCU]

关于普通IO口模拟I2C的存储问题

[复制链接]
3521|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caigehao112|  楼主 | 2014-8-7 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
jjjyufan| | 2014-8-7 11:58 | 只看该作者
IO 模拟出时序
2个单片机通讯 干嘛非得iic啊,io可以模拟串口 或者干脆 自己定义

使用特权

评论回复
板凳
花戒| | 2014-8-7 15:12 | 只看该作者
定义一个变量,或者一堆变量,进行存储,每当时钟线变化时把IO电平存到相应变量(byte)的对应位(bit)。

比如时钟线(sck)下降沿为有效数据,并且sck下降沿过后的低电平周期内的数据线依然是当前数据,也就是说本次下降沿之后到下个下降沿时都是本次数据,则可以用如下方法:

if(sck)//检测时钟线为高电平,如果高电平后出现低电平说明下降沿到达
{
       recflag =1;//允许检测低电平
}
if((!sck) && recflag)//出现低电平并且之前没处理
{
     recflag =0;//已处理
     sbuff<<=1; //高位先发送,如先发低位需要反过来
     sbuff+=sda;//假设接收到新数据时sbuff已经清零
     if((i++)>=7)//接收完8个bit,也就是一个字节
     {
     i=0;
      return sbuff;//接收完成,把数据返回
    }
}


变量说明:
recflag   状态标志位,接收当前数据后清零,只有时钟线恢复高电平才允许检测下降沿,不然就只做一次数据接收

sbuff  数据存储,数据存储在这里,每次接收新数据前必须清零

i 接收了多少位,一个字节是八位(八位单片机)

注意事项:
发送方拉低时钟线后才能并且是必须立即把数据线改成当前数据,不然接收方将接受到错误数据

发送方发送一位数据后必须等待一段时间才能发送下个数据,避免接收方来不及反应,丢失数据

以上为手机手打,如有错误欢迎探讨。以上并不是标准iic的接收/发送程序,因为iic协议我很久没看了,忘的差不多了,仅供参考。

使用特权

评论回复
地板
caigehao112|  楼主 | 2014-8-7 20:58 | 只看该作者
花戒 发表于 2014-8-7 15:12
定义一个变量,或者一堆变量,进行存储,每当时钟线变化时把IO电平存到相应变量(byte)的对应位(bit)。

比 ...

辛苦了!你这是类似模拟IIC通讯把,标准的串口通讯或IIC通讯一般都是会有一个BUFFER缓存区,我想问的是如果仅仅用普通IO口模拟的话不用考虑数据缓存问题?直接用变量定义吗?

使用特权

评论回复
5
caigehao112|  楼主 | 2014-8-7 21:03 | 只看该作者
**NT018 发表于 2014-8-7 16:28
http://www.****ducst/datasheet/stc/STC-USER-CODE/IO%E5%8F%A3%E6%A8%A1%E6%8B%9FI2C(%E4%B8%BB+%E4%BB% ...

粘贴出错了?打不开啊

使用特权

评论回复
6
花戒| | 2014-8-8 13:04 | 只看该作者
caigehao112 发表于 2014-8-7 20:58
辛苦了!你这是类似模拟IIC通讯把,标准的串口通讯或IIC通讯一般都是会有一个BUFFER缓存区,我想问的是如 ...

缓存就是上面的sbuff,定义一个变量做缓存,跟用专用寄存器做缓存一样的原理。

使用特权

评论回复
7
很忙| | 2014-8-8 14:27 | 只看该作者
你2个MCU用I2C通讯,必须有个主和有个从吧。你不会是2边都可以用I2C来收和发吧。这也不合理啊。从你描述的情况来说,你的MCU负责的是从另一个MCU读和写数据。你的是主设备,另一个是从设备啊。如果反过来的,我觉得普通IO是不可靠的。别人发数据过来让你接受数据的时候你的程序在干点别的,普通IO就会错过这个发送的。

使用特权

评论回复
8
caigehao112|  楼主 | 2014-8-8 17:00 | 只看该作者
很忙 发表于 2014-8-8 14:27
你2个MCU用I2C通讯,必须有个主和有个从吧。你不会是2边都可以用I2C来收和发吧。这也不合理啊。从你描述的 ...

主设备和从设备都可以定时监听数据啊  

使用特权

评论回复
9
caigehao112|  楼主 | 2014-8-8 17:01 | 只看该作者
花戒 发表于 2014-8-8 13:04
缓存就是上面的sbuff,定义一个变量做缓存,跟用专用寄存器做缓存一样的原理。 ...

明白!

使用特权

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

本版积分规则

14

主题

49

帖子

0

粉丝