shellray
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2005-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:814回复:2

这段程序什么意思

楼主#
更多 发布于:2004-09-03 10:22
#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 什么意思
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-09-03 11:03
定义可变参数
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-09-03 15:15
IRQ2用于级联了
找本微机接口原理什么的书看看
游客

返回顶部