TC中的时钟中断程序

 

 

/* 这个程序每隔1秒钟输出一个整数,10秒钟后结束程序。
   按escape键提前退出程序 。*/

#include <stdio.h>
#include <dos.h>
#include <conio.h>

/* Escape key */
#define VK_ESC 0x11b 

#define TIMER 0x1c    /* 时钟中断的中断号 */

/* 中断处理函数在C和C++中的表示略有不同。
   如果定义了_cplusplus则表示在C++环境下,否则是在C环境下。 */
#ifdef __cplusplus
    #define __CPPARGS ...
#else
	#define __CPPARGS
#endif

int TimerCounter=0; /* 计时变量,每秒钟增加18。 */

/* 指向原来时钟中断处理过程入口的中断处理函数指针 */
void interrupt ( *oldhandler)(__CPPARGS);

/* 新的时钟中断处理函数 */
void interrupt newhandler(__CPPARGS)
{
/* increase the global counter */
   TimerCounter++;

/* call the old routine */
   oldhandler();
}

/* 设置新的时钟中断处理过程 */
void SetTimer(void interrupt (*IntProc)(__CPPARGS))
{
	oldhandler=getvect(TIMER);
	disable(); /* 设置新的时钟中断处理过程时,禁止所有中断 */
	setvect(TIMER,IntProc);
	enable();  /* 开启中断 */
}

/* 恢复原有的时钟中断处理过程 */
void KillTimer()
{
	disable();
	setvect(TIMER,oldhandler);
	enable();
}

void main( void )
{
	int key,time=0;

	SetTimer(newhandler); /* 修改时钟中断 */

	for (;;)
	{
		if (bioskey(1))
		{
			key=bioskey(0);
			if (key==VK_ESC) /* 按escape键提前退出程序 */
			{
				printf("User cancel!/n");
				break;
			}
		}
		if (TimerCounter>18) /* 1秒钟处理一次 */
		{
			/* 恢复计时变量 */
			TimerCounter=0;
			time++;
			printf("%d/n",time);
			if (time==10) /* 10秒钟后结束程序 */
			{
				printf("Program terminated normally!/n");
				break;
			}
		}
	}
	KillTimer(); /* 恢复时钟中断 */

}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值