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]]