//调用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\n",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\n",a);
while (count < 11); //循环等待。执行DOS的时钟中断
setvect(INTR, oldhandler); //执行完毕,恢复原来的中断向量
return 0; }
|