C语言写中断,有经验的进来看看

xiaowan79 2004-08-20 03:19:01
#include "dos.h"
#include "stdio.h"
#include "conio.h"

void far interrupt ( *old_dpram)();
void far interrupt dpram();

void enable_int()
{
unsigned char temp;
old_dpram =getvect(0x0a); //get old interrupt vector

disable();
temp =inport(0x21) &0xf7; //open IRQ2 interrupt
outport(0x21,temp);
setvect(0x0a,dpram); //point vector to new interrupt program: dpram()
enable();
}

void disalbe_int()
{
unsigned char temp;
disable();
temp =inport(0x21) |0x04; //close IRQ2 interrupt
outport(0x21,temp);
enable();
setvect(0x0a,old_dpram); //restore interrupt vector to old program
}

void far interrupt dpram()
{
unsigned char i;
unsigned char da[10];

temp =inport(0xfe2f);
for(i =0; i<10; i++)
{
da[i] =inportb(0x220);
}
}

void main()
{
enable_int();
}

在编译的时候通不过,停在getvect()这个函数这里,我找不出来是什么原因,有知道的吗?请帮个忙,谢谢!
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowan79 2004-08-20
  • 打赏
  • 举报
回复
JT
xiaowan79 2004-08-20
  • 打赏
  • 举报
回复
难道是我的TC不对了,谢谢两位,结贴,我再试试。谢谢!
sekelon 2004-08-20
  • 打赏
  • 举报
回复
我用楼主的程序放到我的TC30里面编译通过啊,没有什么问题啊
getvect和setvect的用法楼主用的都对啊
LGD589 2004-08-20
  • 打赏
  • 举报
回复
我在TC2.0下编译可以通过,没有你说的问题.
下面是以前写的一个定时中断的声明和setvect(),getvect(),参考一下:
void interrupt far (*IntOldTimer)(void);
void interrupt IntNewTimer(void);

IntOldTimer=getvect(0x08);
setvect(0x08,IntNewTimer);
xiaowan79 2004-08-20
  • 打赏
  • 举报
回复
或者,有人用TC写过中断的程序吗?其中的setvect(),getvect()的用法能讲一下吗?我google了也没G到。
xiaowan79 2004-08-20
  • 打赏
  • 举报
回复
1、我用的是TC3编译的,用//注解是没有问题的
2、temp是我漏掉了,不影响程序的,主要的问题是在getvect(),位于dos.h库里,我贴出来了,如下:
在enable_int()里,第二行的 old_dpram =getvect(0x0a)这里:
Error:can't assign 'void(far*)(...)' to 'void(far*)()' in function enable_int()

sekelon 2004-08-20
  • 打赏
  • 举报
回复
编译不过有出错信息的吧,贴出来吧
LGD589 2004-08-20
  • 打赏
  • 举报
回复
不支持行注释,改为块注释(/**/)看看;
还有:temp =inport(0xfe2f);temp未定义.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧