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,结果如下:
(备注: 今天刚解决,暂时未与处理器配合使用,看到的人在运行成功后麻烦把你的测试结果也分享上来。。。做个修复实例) 忘了说了,我的版本是7.7版... 楼主能否把仿真传一下 帮顶一个!!! 回复【楼主位】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) 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);
} 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));
} "暂时未与处理器配合使用"
楼主后来测试过没啊?
我发现8086取的中断号是最后一次出现在总线上的数据, 而不是自己在8259上设置的...
页:
[1]