⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeint.cpp

📁 运行环境:DOS, 通过串口升级的下位程序, 需配合上位升级程序FileUpgrade运行, 可用于嵌入式DOS系统中.
💻 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 + -