打印

关于时序图的小问题,希望大家能解答下

[复制链接]
1849|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 东北小辉辉 于 2012-10-17 15:44 编辑

最近很纠结这个问题额。。
时序图还是看不懂。。。
拿24c02的起始信号举个例子,大家帮忙看看,这两种写法有什么区别呢 为什么一个有用一个没用呢。。。
时序图如下
就是这么个简单的时序图,我却很纠结
要求sck在高电平期间给sda一个下降沿
/*sda=1;
delay1();
sck=1;
delay1();
sda=0;
delay1();*/
以上是正确的写法
下面是我自己写的。。
sck=1;
delay1();
sda=1;
delay1();
sda=0;
delay1();
这也没什么区别啊 为什么我自己写的就不对呢 大家帮忙看看 困扰我很长时间了
delay1();是一个4-5us的函数

相关帖子

沙发
ayb_ice| | 2012-10-17 16:23 | 只看该作者
本帖最后由 ayb_ice 于 2012-10-17 16:26 编辑

一个完整的操作后应该SCL,SDA都为高才好,因为这样处于复位状态
这样就可以开始信号了
//SCL = 1;
//SDA = 1;
delay();
SDA = 0;
delay();

后面就是发字节数据了
SCL = 0;
。。。。
发送完数据后
i2c_stop();



开机初始化
SCL = 1;
SDA = 1;
delay();
i2c_stop();

使用特权

评论回复
板凳
程序金左手| | 2012-10-17 16:31 | 只看该作者
那你就按他正确的来或!!!!

使用特权

评论回复
地板
airwill| | 2012-10-17 18:07 | 只看该作者
这也没什么区别啊 为什么我自己写的就不对呢 大家帮忙看看 ?

谁说没有区别呢?
后面的写法里, 包含了一个结束信号+一个起始信号.
由于时间太短, 很可能从设备忙于响应 "结束"过程中, 就丢掉了起始信号.
也有可能有的设备在一个 CLK 脉冲里只响应一个信号.

当然, 24C02 是不是有这个问题, 本人没有测试过.

使用特权

评论回复
5
joyme| | 2012-10-18 16:38 | 只看该作者
这个取决于sda、sck在调用这段代码的状态,如果SDA调用这段代码之前为0,你的代码就有问题了,即在SCK为高时,你的代码是先给了一个上升沿后给一个下降沿。

使用特权

评论回复
6
darlin520| | 2012-10-18 20:38 | 只看该作者
5楼说的没错,SCK为高电平期间SDA的上升沿为结束信号,下降沿为起始信号,这样你应该明白了吧。即只要你保证在这段代码之前SDA是1就行。

使用特权

评论回复
7
MU168| | 2014-5-6 21:28 | 只看该作者
sda必须先为低,要不然状态不明

使用特权

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

本版积分规则

13

主题

91

帖子

0

粉丝