10 个解决方案
#1
mark
#2
应用级,很难实现
#3
参考下//WINCE 微秒级延时函数
void delay_us(int n)
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
if(QueryPerformanceFrequency(&litmp)==FALSE)
{
MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK);
return;
}
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq;
}while(dfTim <0.000001*n);
}
//WINCE毫秒级延时函数
void delay_ms(DWORD tmp_time)
{
DWORD start;
DWORD time_i=0;
start=GetTickCount();
while(time_i<=tmp_time)
{
time_i=GetTickCount()-start;
}
}
void delay_us(int n)
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
if(QueryPerformanceFrequency(&litmp)==FALSE)
{
MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK);
return;
}
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq;
}while(dfTim <0.000001*n);
}
//WINCE毫秒级延时函数
void delay_ms(DWORD tmp_time)
{
DWORD start;
DWORD time_i=0;
start=GetTickCount();
while(time_i<=tmp_time)
{
time_i=GetTickCount()-start;
}
}
#4
在MSDN上摘录了一段话:
Remarks
If the hardware does not support a high frequency counter, QueryPerformanceFrequency will return 1000 because the API defaults to a milliseconds GetTickCount implementation.
不幸的是我的系统返回了1000.
感谢你的回帖,再给其他高手一些机会,呵呵!
Remarks
If the hardware does not support a high frequency counter, QueryPerformanceFrequency will return 1000 because the API defaults to a milliseconds GetTickCount implementation.
不幸的是我的系统返回了1000.
感谢你的回帖,再给其他高手一些机会,呵呵!
#5
完全可以。用PWM定时器。
不过要在ISR中来做。
不过要在ISR中来做。
#6
个人觉得,微秒级的定时循环写成这样好点:
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;
}while(dfTim < n);
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;
}while(dfTim < n);
#7
请教5楼,能否详细点说
#8
建议用硬件定时中断来实现
#9
弱问循环来做时钟,Cpu还能做其他事情吗?
#10
我试啦,能用,时间也挺准的。
#1
mark
#2
应用级,很难实现
#3
参考下//WINCE 微秒级延时函数
void delay_us(int n)
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
if(QueryPerformanceFrequency(&litmp)==FALSE)
{
MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK);
return;
}
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq;
}while(dfTim <0.000001*n);
}
//WINCE毫秒级延时函数
void delay_ms(DWORD tmp_time)
{
DWORD start;
DWORD time_i=0;
start=GetTickCount();
while(time_i<=tmp_time)
{
time_i=GetTickCount()-start;
}
}
void delay_us(int n)
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
if(QueryPerformanceFrequency(&litmp)==FALSE)
{
MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK);
return;
}
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq;
}while(dfTim <0.000001*n);
}
//WINCE毫秒级延时函数
void delay_ms(DWORD tmp_time)
{
DWORD start;
DWORD time_i=0;
start=GetTickCount();
while(time_i<=tmp_time)
{
time_i=GetTickCount()-start;
}
}
#4
在MSDN上摘录了一段话:
Remarks
If the hardware does not support a high frequency counter, QueryPerformanceFrequency will return 1000 because the API defaults to a milliseconds GetTickCount implementation.
不幸的是我的系统返回了1000.
感谢你的回帖,再给其他高手一些机会,呵呵!
Remarks
If the hardware does not support a high frequency counter, QueryPerformanceFrequency will return 1000 because the API defaults to a milliseconds GetTickCount implementation.
不幸的是我的系统返回了1000.
感谢你的回帖,再给其他高手一些机会,呵呵!
#5
完全可以。用PWM定时器。
不过要在ISR中来做。
不过要在ISR中来做。
#6
个人觉得,微秒级的定时循环写成这样好点:
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;
}while(dfTim < n);
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;
}while(dfTim < n);
#7
请教5楼,能否详细点说
#8
建议用硬件定时中断来实现
#9
弱问循环来做时钟,Cpu还能做其他事情吗?
#10
我试啦,能用,时间也挺准的。