发新帖我要提问
12
返回列表
打印

关于AT93C56的读时序,救救我吧!!!崩溃了

[复制链接]
楼主: shafeishafei
手机看帖
扫描二维码
随时随地手机跟帖
21
shafeishafei|  楼主 | 2011-9-17 14:47 | 只看该作者 回帖奖励 |倒序浏览
20# joyme 谢谢你的回复
你说,while(!D0)就是死循环等待从设备拉低D0,
那程序停在这里循环,监测D0的时候,应该是while(1).也就是说,!D0=1,那么就是说D0=0的时候,程序一直在那里停在那里发SK=1,SK=0,那什么时候跳出这个循环呢?
盼您回答。。。

使用特权

评论回复
22
shafeishafei|  楼主 | 2011-9-17 14:53 | 只看该作者
17# joyme
我看了他的说明书介绍,他说SK串行时钟信号,SK上升沿进行芯片读写。你说的下降沿是什么意思丫???你有QQ吗?告诉我,我加你哦

使用特权

评论回复
23
joyme| | 2011-9-19 09:39 | 只看该作者
你说,while(!D0)就是死循环等待从设备拉低D0,
那程序停在这里循环,监测D0的时候,应该是while(1).也就是说,!D0=1,那么就是说D0=0的时候,程序一直在那里停在那里发SK=1,SK=0,那什么时候跳出这个循环呢?
盼您回答。。。

嗯,你说对了,不知道这个程序是你写的还是改别人的,这里是有个逻辑错误,不能用while(!D0),好点程序不会用死循环,你可以专门编写一个ACK的检测函数,例如:
i = 10;
SK = 0;
while(--i)
{
        if(!DO)
             break;
        delayus(2);                 //可以发时钟信号,也可以不发
}
if(i == 0)
       ACK_ERROR;
else
       ACK_OK;

另一个问题其实已经写清楚了,SK上升沿主设备或从设备读数据,那么相应的从设备或主设备什么时候发出数据才能保证对方读取的时候一定是稳定的、正确的值呢(IO赋值上升、下降都要一定时间的),所以设计总线的人就利用了CLK有两个边沿,在一个沿是发数据,那么到下一个沿再读取,这个数据就是正确而且是稳定的(当然也要保证CLK的频率不要高过IO口响应的频率)。这个下降沿的用法不会在Datasheet里明说,但你看时序图是可以体会到的

使用特权

评论回复
24
shafeishafei|  楼主 | 2011-9-19 10:13 | 只看该作者
23# joyme
所以设计总线的人就利用了CLK有两个边沿,在一个沿是发数据,那么到下一个沿再读取,这个数据就是正确而且是稳定的(当然也要保证CLK的频率不要高过IO口响应的频率)。这个下降沿的用法不会在Datasheet里明说,但你看时序图是可以体会到的
谢谢你告诉我,我就说嘛,怎么DATASHEET里面都没有提到,这个应该叫潜规则对吧,我觉得在设计的时候应该有蛮多这样的潜规则,虽然说明书上面没有,但是我们却要考虑的问题,我是一个菜鸟,新手,所以很多这样的潜规则还不是很清楚,所以希望您以及跟你们一样的大侠多多指点,感激不尽。。。。。。

使用特权

评论回复
25
sytqq280787575| | 2011-9-19 10:29 | 只看该作者
不晓得和AT93C46一样不,只搞过AT93C46
觉得没AT24C02好用

使用特权

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

本版积分规则