使用时钟中断的问题
So1o 2003-06-25 03:46:22 使用IRQ0的时钟中断
#include <stdio.h>
#include <dos.h>
#define INT_CLK 0x08 /*时钟中断号*/
#define IRQ_CLK 0xFE /*时钟中断地址*/
#define IMR_ADDR 0x21 /* 中断屏蔽寄存器 Interrupt Mask Register port */
#define ICR_ADDR 0x20 /* 中断控制寄存器 Interrupt Control Port */
#define EOI 0x20 /* 中断结束 End Of Interrupt */
void interrupt(*oldTimer)(); /*保存函数指针*/
void interrupt OnTimer(); /*定时器中断处理函数*/
main()
{
unsigned char bb;
/*设置时钟中断*/
oldTimer = getvect(INT_CLK);
setvect(INT_CLK, OnTimer);
bb = inportb(IMR_ADDR) & IRQ_CLK;
outportb(IMR_ADDR, bb);
for (;;)
{
.....
}
setvect(INT_CLK, oldTimer);
bb = inportb(IMR_ADDR) & ~(IRQ_CLK);
outportb(IMR_ADDR, bb);
}
void interrupt OnTimer()
{
/*这里的代码怎么不起作用,Trace到这里就死翘翘了*/
printf("clk..\n");
outportb(ICR_ADDR, EOI);
}
还有在时间中断OnTimer里的时候,如果执行时间过长,会不会导致在中断里中断?
听说使用这个中断会影响系统的时钟? 谁给我讲讲