//調用DOS下的中斷。
//DOS的時鐘中斷 int 21H AH=0x1C 每秒產生18.2次中斷
//該程序時間間隔為550毫秒 可以由count的值算出。
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C //0x1c為時鐘中斷
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt ( *oldhandler)(__CPPARGS);
int count=0;
int a=0,b=0;
strUCt time t;
void interrupt handler(__CPPARGS) // 執行DOS中斷時調用的程序
{
count++;
if(count==10)
{ gettime(&t);
b=t.ti_hund;
printf("(2) %d
",b);
if(b<a)printf("Delay %d ms",((100-a)+b)*10);
else printf("Delay %d ms",(b-a)*10);}
}
int main(void)
{
oldhandler = getvect(INTR); //取得原來的中斷向量
setvect(INTR, handler); //設置現在的中斷向量
gettime(&t);a=t.ti_hund;
printf("(1) %d
",a);
while (count < 11); //循環等待。執行DOS的時鐘中斷
setvect(INTR, oldhandler); //執行完畢,恢復原來的中斷向量
return 0;
}