如题,而且在不同主频的PC下也能够达到同样的精度

解决方案 »

  1.   

    什么是不?
    我在写I2C for WIN XP的程序,发现这是最麻烦的地方。延时的时间如果太长,则通讯速度太慢
      

  2.   

    VC不能做到吧
    用VXD试试,应该可以
      

  3.   

    你看看这两个函数:
    BOOL QueryPerformanceCounter(
      LARGE_INTEGER *lpPerformanceCount   // pointer to counter value
    );BOOL QueryPerformanceFrequency(
      LARGE_INTEGER *lpFrequency   // address of current frequency
    );
      

  4.   

    用wuchuncai(1234567)提供的函数写的,大家帮我看一看:
    #define OVERHEAD 0xFFFFFFFF
    void CTestPerfTimerDlg::DelayMicorSecond(double us)
    {
    LARGE_INTEGER PerFreq;
    LONGLONG StartQuad,StopQuad;
    double dFreq,dTime,deltaQuad; if(QueryPerformanceFrequency(&PerFreq))
    dFreq = (double)PerFreq.QuadPart;
    else
    AfxMessageBox("Error");

    QueryPerformanceCounter(&PerFreq);
    StartQuad = PerFreq.LowPart;
    while(true)
    {
    // DunselFunction();//delay function
    QueryPerformanceCounter(&PerFreq);
    StopQuad = PerFreq.LowPart;
    deltaQuad =(double)( (StopQuad>=StartQuad)?(StopQuad-StartQuad):(StopQuad-StartQuad+OVERHEAD));
    dTime = (double)(deltaQuad/dFreq);
    if(dTime*1000000>=us)
    break;
    }
    }精确度在1.2us左右