读书人

关于c语言设置中断的有关问题

发布时间: 2012-02-05 12:07:15 作者: rapoo

关于c语言设置中断的问题
我要用c语言设置外部中断8259的IRQ7中断,但是设置后却没法响应。。
用geninterrupt (0x0f);函数由计算机自己产生0f中断却可以,
我同学的就可以响应外部中断。。
还有为什么是 0x0f,,0x表示什么意思,,是表示后面用16进制表示吗??

不知道是否我的中断号设置得不对,我应该怎么写呢,将0x0f如何修改。。


void interrupt int60 (__argu)
{
puts( "zhongduan! \n ");
}

install (int60,0x0f); /*设置中断*/
for(i=0;i <5;i++) /*计算机自动产生5次中断*/
{
geninterrupt (0x0f);
}

void install (void interrupt (*fadd)(__argu),int num) /*安装中断*/
{
disable(); /*关闭中断*/
setvect(num, fadd); /*设置中断*/
enable(); /*开放中断*/
}

[解决办法]
查查看是不是8259的片子问题,换个irq
[解决办法]
还有为什么是 0x0f,,0x表示什么意思,,是表示后面用16进制表示吗??

是。
这是一个数值,表示一个中断号
[解决办法]
有个例子:

//利用中断实现每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;
}

读书人网 >C语言

热点推荐