如何写一个精确到微秒级的延时函数.....(100分)

  • 主题发起人 主题发起人 Hongzhouwolong
  • 开始时间 开始时间
H

Hongzhouwolong

Unregistered / Unconfirmed
GUEST, unregistred user!
因为涉及到串口直接操作单片机,需要有精确到微秒级的延时函数,如
Procedur delay(ms:integer);//ms为微秒,如5微秒.....
begin
//...
end;
 
毫秒级是可能的,微秒级不可能。
 
可以参考内核级的函数
在linux驱动中有这样的东西
但是windows的不太清楚
只不过对于OS来说微妙级的延迟还是需要的
 
微妙级
好像可以在系统上取得到,不过忘了在哪本书上看过
 
好像以前在2CCC上见过这样的控件,不过不好控制,以前我写狗的时候就不行,最后请人弄了个DLL解决。
 
最精确的是使用多媒体定时器函数,也不能到微妙,1毫秒级别!微秒,一个函数调用,就得花费n微秒啦
 
好像windows延时最少要15毫秒,原来听说是55毫秒,测了下是15左右。
 
Windows是多任务的系统
系统在调度线程的时候也需时间的
要想实微秒缓延时,需要用循环来做
 
因为涉及到串口直接读取单片机信息,所以,才会精确到微秒......
 
windows系统下是可以做到的,特别是现在的机器速度很快;
而且也很简单: 用QueryPerformanceCounter,QueryPerformanceFrequency两个函数就可以了;
 
串口直接操作单片机 -->> 1微秒 = 0.000001秒,电脑串口通讯速度的上限是128000位/秒,即16000字节/秒,平均传输一个字节的时间是0.0000625秒 = 62.5 微秒。

LZ:即使你的程序能够实现微秒级的控制,可是串口的通讯速度限制你是无法克服的,等你把数据传到单片机,早过了你的延迟时间了。
 
多人接受答案了。
 
后退
顶部