首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

利用中断实现每500毫秒接收一次数据


//调用DOS下的中断。
//DOS的时钟中断 int 21H  AH=0x1C  每秒产生18.2次中断
//该程序时间间隔为550毫秒  可以由count的值算出。

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

#define INTR 0X1C    //0x1c为时钟中断

#ifdef __cplusplus
  #define __CPPARGS ...
#else
  #define __CPPARGS
#endif

void interrupt ( *oldhandler)(__CPPARGS);  

int count=0;
int a=0,b=0;
struct time t;

void interrupt handler(__CPPARGS)  //  执行DOS中断时调用的程序
{
    count++;

    if(count==10) 
    {    gettime(&t);
         b=t.ti_hund; 
         printf("(2)   %d\n",b);
         if(b<a)printf("Delay %d  ms",((100-a)+b)*10);
         else printf("Delay %d  ms",(b-a)*10);}
}

int main(void)
{

    oldhandler = getvect(INTR); //取得原来的中断向量

    setvect(INTR, handler);     //设置现在的中断向量
    gettime(&t);a=t.ti_hund;
    printf("(1)   %d\n",a);

    while (count < 11);         //循环等待。执行DOS的时钟中断

    setvect(INTR, oldhandler);  //执行完毕,恢复原来的中断向量

    return 0;
}

[wangjy17908]
添加时间:2007-10-07
版权所有(C)2005-2015