标题:请问TC里怎么进行微秒级的延时?
只看楼主
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
 问题点数:0 回复次数:11 
请问TC里怎么进行微秒级的延时?
我想自己用TC写一个并口与一个硬件的通信的程序(具体是模拟I2C).问题一大堆,最后终于拼成了.可是就是无法和硬件联系上,可以却认硬件电路没有问题.我已经用一个现成的IIC程序和硬件通信成功.我想可能是我在自己的程序上里的延时时间处理不对,IIC里需要微秒级延时和毫秒级延时,比如延时5微秒我用的是DELAY(5);机器是586.这个延时具体能延时多少我就不清楚是多少时间了..不知道对不对.
搜索更多相关主题的帖子: 微秒 延时 
2008-07-01 21:44
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
得分:0 
TC提供的延时是软延时,非常不准确,随CPU主频变化

可靠的解决方案是使用定时中断或使用8253/8254芯片定时

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-01 21:48
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
得分:0 
哦,涉及到系统中断和系统硬件,我也想.可是我现在新学,觉得难啊.有没有简单些的方法呢,或者是不是可以在我这台机子上可以测出5US应该是DELAY(?)呢?
2008-07-01 22:24
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
得分:0 
你还是放弃这个想法吧
中断都不愿意写你还搞什么hardware

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-01 22:26
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
得分:0 
谢谢你的好意,我不会放弃的.我只是在选择达到目的的最简方法.

林子大了,嘛鸟都有了
            
2008-07-01 22:32
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
很久写的一个帖子,关于中断延时模拟进度条的,不知道对你有用否.
https://bbs.bccn.net/thread-193732-1-21.html

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-02 08:13
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
得分:0 
有用,又多知道了基数为55MS的延时方法,不过这个程序里需要US级的延时..

林子大了,嘛鸟都有了
            
2008-07-02 12:51
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
US,不好意思.没看清楚题目.
有时间我找找看有没有办法.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-02 13:30
RockCarry
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
IIC 协议还是比较简单的,由于时钟信号(SCL)是由主机(master)控制,所以如果是 pc 作为 master 来实现数据的读写,SCL 即便是慢了点也是能保证读写的正确性。目前许多 IIC 器件所能达到的速率都是标准模式的速率,也就是 100kbps 左右。所以在 master 这边,只要保证其产生的 SCL 的速率不高于 slave 器件所能达到的最高速率,读写操作都是可以正确进行的。

因此你完全不用在意是否是需要精确的延时,你只要保证你的延时是足够长的就是可以了。当然减少延时的时间,可以提高读写的速度,如果你的程序对性能有较高的要求,那么你的确需要找到一个准确的 ms 的延时函数。

对于 ms 级的延时,DOS 平台下,你可以考虑修改 8253 定时器,并利用时钟中断。方法也是很简单,你可以参考我的相关代码。windows 平台你可以考虑采用 GetTickCount 这个函数。而 us 级的精确延时是很难做到的,只能根据处理器频率结合空循环来近似。一般说来延时都是无法太精确的,但是一定要做足够,也就是说可长不可短。

像 IIC 这种东西,基本上都是用于控制,本身就不可能具备高性能,因此不适合用于大量数据的传送。在我所做的项目中,基本上对速度都没有严格的要求。而且通过软件控制 IO 口来产生波形,本来就是效率低下的,如果要达到较高的性能,最好选用额外的控制器。

[[it] 本帖最后由 RockCarry 于 2008-7-2 13:33 编辑 [/it]]
2008-07-02 13:32
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
得分:0 






爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-07-02 13:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-222193-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098714 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved