这段程序好象有错请哪位大侠纠正一下!!k/***
*dos.h - definitions for MS-DOS interface routines
*
*       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
*       Defines the structs and unions used for the direct DOS interface
*       routines; includes macros to access the segment and offset
*       values of far pointers, so that they may be used by the routines; and
*       provides function prototypes for direct DOS interface functions.
*
*       [Public]
*
****/#if     _MSC_VER > 1000
#pragma once
#endif#ifndef _INC_DOS
#define _INC_DOS#if     !defined(_WIN32) && !defined(_MAC)
#error ERROR: Only Mac or Win32 targets supported!
#endif
#ifdef  _MSC_VER
/*
 * Currently, all MS C compilers for Win32 platforms default to 8 byte
 * alignment.
 */
#pragma pack(push,8)
#endif  /* _MSC_VER */#ifdef  __cplusplus
extern "C"{
#endif/* Define _CRTIMP */#ifndef _CRTIMP
#ifdef  _DLL
#define _CRTIMP __declspec(dllimport)
#else   /* ndef _DLL */
#define _CRTIMP
#endif  /* _DLL */
#endif  /* _CRTIMP */
/* Define __cdecl for non-Microsoft compilers */#if     ( !defined(_MSC_VER) && !defined(__cdecl) )
#define __cdecl
#endif/* Define _CRTAPI1 (for compatibility with the NT SDK) */#ifndef _CRTAPI1
#if _MSC_VER >= 800 && _M_IX86 >= 300
#define _CRTAPI1 __cdecl
#else
#define _CRTAPI1
#endif
#endif#ifndef _MAC
#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif
#endif /* ndef _MAC */#ifndef _MAC
#ifndef _DISKFREE_T_DEFINED
/* _getdiskfree structure (duplicated in DIRECT.H) */
struct _diskfree_t {
        unsigned total_clusters;
        unsigned avail_clusters;
        unsigned sectors_per_cluster;
        unsigned bytes_per_sector;
        };#define _DISKFREE_T_DEFINED
#endif
#endif /* ndef _MAC *//* File attribute constants */#define _A_NORMAL       0x00    /* Normal file - No read/write restrictions */
#define _A_RDONLY       0x01    /* Read only file */
#define _A_HIDDEN       0x02    /* Hidden file */
#define _A_SYSTEM       0x04    /* System file */
#define _A_SUBDIR       0x10    /* Subdirectory */
#define _A_ARCH         0x20    /* Archive file */#ifndef _MAC
/* Function prototypes */
_CRTIMP unsigned __cdecl _getdiskfree(unsigned, struct _diskfree_t *);
#endif  /* ndef _MAC */#ifdef  _M_IX86
void __cdecl _disable(void);
void __cdecl _enable(void);
#endif  /* _M_IX86 */#ifndef _MAC
#if     !__STDC__
/* Non-ANSI name for compatibility */
#define diskfree_t  _diskfree_t
#endif  /* __STDC__ */
#endif  /* ndef _MAC */#ifdef  __cplusplus
}
#endif#ifdef  _MSC_VER
#pragma pack(pop)
#endif  /* _MSC_VER */#endif  /* _INC_DOS */

解决方案 »

  1.   

    我用这段程序调用dos.h头文件
    #include <iostream.h>
    #include <dos.h>void main()
    {
      unsigned int t_a,t_b,in,inl=0,n,i=0;  //定义变量,令inl, i初值为零
      float T,F;                      //定义变量为单精度实数
      outportb(0x43,0x34);            //写8253方式字
      outportb(0x40,0);               //低位置零
      outportb(0x40,0);               //高位置零
      t_a=peek(0,0x46c)+peek(0,0x46e)*65536;     //读BIOS时间计数器  while(i<=2000)                 //循环2000次,跳出
      {
         in=inportb(0x3fe) & 0x20;     //读D5位
         if(in!=inl)                  //in=inl则跳过i+1
           i++;                     // in≠inl,则i+1
         inl=in;                     //令inl=in
       }
     
       outportb(0x43,4);              //锁存8253计数器0
       t_b=inportb(0x40);             //读8253计数器0
       t_b=t_b+inportb(0x40)*256;     
       t_b=65536-t_b;               //求8253计数器
       t_a=peek(0,0x46c)+peek(0,0x46e)*65536-t_a;           //读时间计数器,求改变量
       T=((t_a+1)*65536-t_b)*1/1.193186;                   
       F=1000/T;                    //计算时间和频率   cout<<"F="<<F<<"HZ"<<endl;      // 打印F值
    }