📄 timeint.cpp
字号:
/////////////////////////////////////////////////////////////////////////////
// 功能:
// (1)时钟中断的中断处理函数;
// (2)时钟中断设置;
// 编写人:云南师大数学系 张洪波。
////////////////////////////////////////////////////////////////////////////////
#include "TimeInt.h"
#include <dos.h>
#include <conio.h>
unsigned char gCharTimeout; //每55ms减少1,直到0为止
unsigned short int gIntervalTimeout; //每55ms减少1,直到0为止.
unsigned short int gSecondTimeout; //每990毫秒减一,直到0为止
unsigned char gArriveAnswerTime; //每990毫秒减一,直到0为止
//-----------------------------------------------------------------
#define DOG_INT 0x60
extern char CheckDogExist();
static char RuningOkMark=1;
const char DogExistMark=CheckDogExist();
char CheckDogExist()//测试是否已经安装看门狗中断。
{
if(getvect(DOG_INT))
{
_CX=0x233F;
geninterrupt(DOG_INT);
if(_CX==0x4F4B) return 1;
}
return 0;
}
short int GetDogType()
{
if(getvect(DOG_INT))
{
_CX=0x233F;
geninterrupt(DOG_INT);
if(_CX==0x4F4B) return _AX;
}
return 0;
}
//----------------------------------------------------------
void RuningOK()
{
RuningOkMark=5;
}
void ReadBIOSHourMinuteSecond(unsigned char T[])
{
#define BCD(s) (((s)>>4)*10+((s)&0xF))
unsigned char hour,min,sec;
asm{
MOV AH,0x2
INT 0x1A
MOV hour,CH
MOV min,CL
MOV sec,DH
}
T[0]=BCD(hour);//时
T[1]=BCD(min);//分
T[2]=BCD(sec);//秒
}
/////////////////////////////////////////////////////////////
//类CTimerInt的实现部分。
/////////////////////////////////////////////////////////////
void interrupt TimeControlIntHandle(...)
{
static short int mFiveSecondCount=5;
static char staticmSecondCount=19;
outportb(0x20,0x20);
if(gCharTimeout) gCharTimeout--;
if(gIntervalTimeout) gIntervalTimeout--;
staticmSecondCount--;
if(staticmSecondCount==0)//每秒执行一次,相当秒定时器
{
staticmSecondCount=18;
if(gSecondTimeout) gSecondTimeout--;
if(gArriveAnswerTime) gArriveAnswerTime--;
//约每5秒喂一次狗。
if(DogExistMark)
{
mFiveSecondCount--;
if(mFiveSecondCount==0)
{
mFiveSecondCount=5;
if(RuningOkMark)
{
geninterrupt(DOG_INT);//喂狗
RuningOkMark--;
}
}
}
}
}
CTimerIntControl::CTimerIntControl()
{
//OpenTimeIntControl();
}
CTimerIntControl::~CTimerIntControl()
{
if(TimerOldIntHandle) setvect(TimeIntNo,TimerOldIntHandle);
}
void CTimerIntControl::OpenTimeIntControl()
{
if(!TimerOldIntHandle)
{
TimerOldIntHandle=getvect(TimeIntNo);
setvect(TimeIntNo,TimeControlIntHandle);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -