您的位置:程序门 -> c/c++ ->



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于c语言设置中断的问题[已结贴,结贴人:feng_013]
发表于:2007-07-19 10:11:44 楼主
我要用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();       /*开放中断*/      
    }
发表于:2007-07-19 10:15:391楼 得分:10
查查看是不是8259的片子问题,换个irq
发表于:2007-07-19 10:15:582楼 得分:10
还有为什么是   0x0f,,0x表示什么意思,,是表示后面用16进制表示吗??

是。
这是一个数值,表示一个中断号
发表于:2007-07-19 10:16:353楼 得分:10
有个例子:

//利用中断实现每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;
}
发表于:2007-07-19 11:11:024楼 得分:0
#ifdef   __cplusplus
    #define   __cppargs   ...
#else
    #define   __cppargs
#endif

void   interrupt   (   *oldhandler)(__cppargs);  

请问下这个宏定义表示什么意思,为什么要有一个   __cppargs的参数,
那个...表示什么意思啊


快速检索

最新资讯
热门点击