xiaowei061 发表于 2010-8-29 11:58:20

Proteus 8259A可编程中断控制器修复

Proteus 8259A可编程中断控制器修复办法

图片不少....DOC文件里看吧:
点击此处下载 ourdev_578536.doc(文件大小:79K) (原文件名:Proteus 8259A 可编程中断控制器修复.doc)
最后结果图:
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_578537.JPG
(原文件名:未命名.JPG)

大致思路:

大家在仿真时都碰到这样的问题,我也是,于是摸索了下:

既然是创建model失败,问题就应该与model有关了,于是我对比了下8255A等其他82**先片的参数,即用右键make device 选项打开器件编辑框,两次next到:

选择MODDLL,可以看到:

同样的方法打开8255A的MODDLL选项对比:

没多大区别,就是在Description 多了3个字母:*** DLL,那我们也加上去吧。。。
右键8259,make device 更名8259A,两次NEXT,修改MODDLL的参数,即:

在Description选项末尾加上:空格DLL。一路NEXT,最后OK。。。

这是我测试的结果,新建一个仿真图,找到8259A芯片,测试运行,暂停,右键选择最下面的选项:PIC status,结果如下:
(备注: 今天刚解决,暂时未与处理器配合使用,看到的人在运行成功后麻烦把你的测试结果也分享上来。。。做个修复实例)

xiaowei061 发表于 2010-8-29 12:25:47

忘了说了,我的版本是7.7版...

bdgog 发表于 2010-9-17 08:11:28

楼主能否把仿真传一下

wuqishuang 发表于 2010-11-6 10:58:50

帮顶一个!!!

hjb372 发表于 2010-11-23 08:22:14

回复【楼主位】xiaowei061
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_599772N77PM2.JPG
(原文件名:1.JPG)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_599773CGRERG.JPG
(原文件名:2.JPG)

hjb372 发表于 2010-11-23 08:25:55

1.jpg为8259中断仿真,但CPU不能接收中断类型号?请高手指导!
//设置中断失量表
void set_int(unsigned char int_no, void * service_proc)
{ _asm
    { push es
      xor ax, ax
      mov es, ax
      mov al, int_no
      xor ah, ah
      shl ax, 1
      shl ax, 1
      mov si, ax
      mov ax, service_proc
      mov es:, ax
      inc si
      inc si
      mov bx, cs
      mov es:, bx
      pop es
    }
}
//中断处理函数
void _interrupt _far int_8259(void)
{
      char i,j,k;
      for(k=0; k<5;k++)
      {
      outp(ADR_273,0x00);
      for(i=0; i<120;i++){for(j=0; j<200;j++){}}
      outp(ADR_273,0xff);
      for(i=0; i<120;i++){for(j=0; j<200;j++){}}
        }
      outp(ADR_8259A,0x20);//OCW2,send EOI
}
void init_inttab(void)
// 在中断失量表添加40h号中断失量
{ set_int(0x40, (void *)&int_8259);
}

hjb372 发表于 2010-11-23 08:31:01

2.jpg 为查询方式编程,发完查询命令0x0c8259 的isr为什么不变为1,查询命令字标志位也不置位?
   while(1)
   {
   do{
      delay(100);   
      imr=inp(ADR_8259A+2);//直接读IMR
      outp(ADR_8259A,0x0a);//读IRR命令字
      irr=inp(ADR_8259A);
      outp(ADR_8259A,0x0b);//读ISR命令字
      isr=inp(ADR_8259A);
      outp(ADR_8259A,0x0c);//查询命令字
      irq=inp(ADR_8259A);      
      }
      while(!(irq&0x80));
   }

Pony279 发表于 2013-1-10 19:37:54

"暂时未与处理器配合使用"

楼主后来测试过没啊?
我发现8086取的中断号是最后一次出现在总线上的数据, 而不是自己在8259上设置的...
页: [1]
查看完整版本: Proteus 8259A可编程中断控制器修复