Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594500
  • 博文数量: 99
  • 博客积分: 5128
  • 博客等级: 大校
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-27 19:40
文章分类

全部博文(99)

文章存档

2012年(3)

2011年(5)

2010年(4)

2009年(31)

2008年(56)

分类: C/C++

2008-07-18 16:39:25

编译平台 WIN-TC (Turbo C2.0 为内核)
功能:
使用 DOS 的 1CH 中断。这个中断系统没有使用,是开放的,大约18ms中断一次。
可以提供给程序实用。调用的过程很简单,看下面的例子:

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

/* 定义一个中断变量用来保存就的中断入口函数 */
/* 因为是入口函数,所以这里定义了函数指针。 */
void interrupt (*oldtimer)(void);

/* 习惯了,中断使用的变量全部用volatile限定防止优化 */
int volatile TimerCnt;
int volatile flag;

/* 新的中断函数,用这个来代替旧的那个 */
void interrupt newtimer(void)
{
    (*oldtimer)(); /* 执行之前的功能,不能随便破坏人家的程序 */
    TimerCnt++; /* 计数器加1 */
    flag = 1; /* 设置标志,我中断了!! */
}

/* 主函数 */
void main(int argc,char *argv[])
{
    TimerCnt = 1; /* 初始化 */
    oldtimer = getvect(0x1c); /* getvect函数是用来得到中断变量的,这里是 */
                              /* 我们需要 1ch 的中断(也就是时钟中断) */
    setvect(0x1c,newtimer); /* 将我们的处理函数写到中断变量上面 */
                              /* 那么中断的时候系统就执行我们的函数 */

    flag = 0;
    while(1)
    {
        if (flag) /* 如果中断了,那么 */
        {
            printf("int:%d\n",TimerCnt); /* 打印计数器的值 */
            flag = 0; /* 清除标志 */

        }

        if (TimerCnt>200) /* 算够200就退出 */
            break;
    }
    
    setvect(0x1c,oldtimer); /* 恢复旧的中断变量 */

    printf("Exit normally\n");
    getch();
}

阅读(2146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~