求教如何在C语言中使用定时器?
各位请帮帮忙啊,在C语言中使用定时器应该怎样做啊?
[解决办法]
使用回调函数,代码如下:
void SetTimer(void interrupt (*handle)())
{
oldhandle=getvect(TIMER);
disable();
setvect(TIMER,handle);
enable();
}
void CloseTimer()
{
disable();
setvect(TIMER,oldhandle);
enable();
}
上面代码的编译环境:TC2.0
[解决办法]
//利用中断实现每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;
}