//没什么注释,见笑了..呵呵
/*
=============DOS TIMER Head File
=============CopyRight (C) LGc
=============QQ:66855618
*/
#ifndef _TIMER
#define _TIMER
/*===========head file include============*/
#if !defined(__DOS_DEF_)
#include <dos.h>
#endif
#include <math.h>
/*===========macro defined================*/
#define TIMER (0x1c) //dos timer interrupt
/*===========globe variable===============*/
int timer_counter=0;
//be used for save old interrupt function pointer for restore interrupt
void interrupt (*old_interrupt)()=NULL;
/*===========data structure===============*/
/*===========function declare=============*/
void interrupt new_interrupt(); //set this function beto new 0x1c interrupt
what call next function
void set_timer(void interrupt (*interrupt_fun)());
//set 0x1c interrupt (look last function)
void kill_timer(); //restore old 0x1c interrupt
void delay_ms(int ms);
/*===========function implement===========*/
void interrupt new_interrupt(){
timer_counter++;
return ;
}
void set_timer(void interrupt (*interrupt_fun)()){
timer_counter=0;
old_interrupt=getvect(TIMER); //get one interrupt vector
if(interrupt_fun==NULL) return ;
disable();
setvect(TIMER,interrupt_fun); //set one interrupt vector
enable();
}
void kill_timer(){
if(old_interrupt==NULL) return ;
disable();
setvect(TIMER,old_interrupt);
enable();
}
void delay_ms(int ms){
int t_timer=timer_counter;
set_timer(new_interrupt);
while(1)
if(ms==(abs(timer_counter-t_timer)*100)){
kill_timer();
return ;
}
}
/*===========END==========================*/
#endif