阅读:814回复:2
这段程序什么意思
#include <conio.h>
#include <dos.h> #include <bios.h> #include <stdio.h> #define INTR 0x73 // IRQ11 问题1:在这IRQi 和INTR的对应关系如何?我用IRQ2是否应该对应0x10? #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif void interrupt ( *OldIrq)(__CPPARGS); void interrupt NewIrq(__CPPARGS); unsigned long int Counter=0; char flag=0; void main() { int temp; clrscr(); //清屏 OldIrq = getvect(INTR); //保存环境变量 setvect(INTR,NewIrq); //设定中断 temp = inportb(0x21) & 0xFB; //打开主片IRQ2 outportb(0x21, temp); temp = inportb(0xA1) & 0xF7; //打开从片IRQ11 outportb(0xA1, temp); /*问题2:在这里分别打开了主从片,那么是否是主片IRQ2对应0xFB从片IRQ11对应0xF7。如果我使用IRQ10,则0xF7应该对应什么?IRQ2呢?*/ printf("Begin(%i): \n",INTR); while(bioskey(1)==0){ //若有键按下则推出 if(flag==1&&(Counter%1000==0)){ //若接收到新的中断则打印提示 printf(" %lu",Counter); //打印提示 flag=0; //中断标志置0 } } printf("LUCKEY!"); setvect(0x73, OldIrq); //恢复原中断向量 temp = inportb(0x21) | ~(0xFB); //关主片IRQ2 outportb(0x21, temp); temp = inportb(0xA1) | ~(0xF7); //关从片IRQ11 outportb(0xA1, temp); } void interrupt NewIrq(__CPPARGS) { disable(); //关中断 Counter++; //计数器加一 outportb(0xA0,0x20); //向从片ICR送EOI命令 outportb(0x20,0x20); //向主片ICR送EOI命令 enable(); //开中断 flag=1; //中断标志置1 } 上面程序中的 #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif 什么意思 |
|
沙发#
发布于:2004-09-03 11:03
定义可变参数
|
|
|
板凳#
发布于:2004-09-03 15:15
IRQ2用于级联了
找本微机接口原理什么的书看看 |
|