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

[复制链接]
2611|6
 楼主| 东北小辉辉 发表于 2012-10-17 15:41 | 显示全部楼层 |阅读模式
本帖最后由 东北小辉辉 于 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 是不是有这个问题, 本人没有测试过.
joyme 发表于 2012-10-18 16:38 | 显示全部楼层
这个取决于sda、sck在调用这段代码的状态,如果SDA调用这段代码之前为0,你的代码就有问题了,即在SCK为高时,你的代码是先给了一个上升沿后给一个下降沿。
darlin520 发表于 2012-10-18 20:38 | 显示全部楼层
5楼说的没错,SCK为高电平期间SDA的上升沿为结束信号,下降沿为起始信号,这样你应该明白了吧。即只要你保证在这段代码之前SDA是1就行。
MU168 发表于 2014-5-6 21:28 | 显示全部楼层
sda必须先为低,要不然状态不明
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

91

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部