找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5818|回复: 2
打印 上一主题 下一主题
收起左侧

8259A的proteus仿真实例 带程序源码

[复制链接]
跳转到指定楼层
楼主


程序源码如下:
  1. .MODEL SMALL
  2. .8086
  3. .stack
  4. .data
  5. LED byte 00000001B
  6. .code
  7. start:
  8.     cli
  9.     mov ax,0        ; init interrupt vector TABLE
  10.     mov ds,ax
  11.     mov si,0
  12.     mov cx,80H
  13.     mov ax,offset intx
  14.     mov bx,seg intx
  15. l:  mov [si],ax
  16.     mov [si+2],bx
  17.     add si,4
  18.     loop l
  19.     mov si,60h*4      ; init INT1 interrupt vector
  20.     mov ax,offset int0
  21.     mov [si],ax
  22.     mov ax,seg int0
  23.     mov [si+2],ax
  24.     mov ax,@data
  25.     mov ds,ax
  26.     mov dx,206h    ; init 8255
  27.     mov al,10000000b
  28.     out dx,al
  29.     JMP $+2
  30.     mov al,LED
  31.     mov dx,200h
  32.     out dx,al
  33.     JMP $+2
  34.     mov al,00010011b  ;  init  8259
  35.     mov dx,210h
  36.     out dx,al         ; ICW1
  37.     JMP $+2
  38.     mov al,60h
  39.     mov dx,212h
  40.     out dx,al         ; ICW2
  41.     JMP $+2
  42.     mov ax,00000001h
  43.     out dx,al         ; ICW4
  44.     JMP $+2
  45.     mov ax,0
  46.     out dx,al         ; OCW1
  47.     JMP $+2
  48.     sti
  49.     jmp $
  50. int0  proc
  51.     rol LED, 1
  52.     mov al, LED
  53.     MOV dx, 200h
  54.     out dx, al
  55.     jmp $+2
  56.     mov al,20h
  57.     mov dx,210h
  58.     out dx,al
  59.     jmp $+2
  60.     iret
  61. int0 endp
  62. intx proc
  63.     ror LED, 1
  64.     mov al, LED
  65.     MOV dx, 200h
  66.     out dx, al
  67.     jmp $+2
  68.     mov al,20h
  69.     mov dx,210h
  70.     out dx,al
  71.     jmp $+2
  72.     iret
  73. intx endp
  74. END start
复制代码

对于8259A的仿真我倒是做成了,可是成功的很郁闷,其实大家很多做的就差最后一点了。
1.首先原来软件的8259改成8259A(加几个字符)大家应该都知道,我不说这个了。
2.经过反复的实验,我发现虽然仿真的时候看到8259A在第二个INTA返回给8086的中断号是对的,但是实际上到了8086那里这个中断号就变了,而且好像变成随机的了。因此,如果你只有一个中断,那你就把整个中断向量表的所有表项全部填上该中断处理程序的入口地址,你就会发现,当中断来的时候,中断处理程序被执行了,当然前提是你的程序没有错误。
我把我做的给大家做示范吧,不过大家注意修改一下“Code Generation Tool “ 中的设置


8259A仿真实例所有资料下载:
base8259.rar (39.25 KB, 下载次数: 113)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:189935 发表于 2017-4-16 18:22 | 只看该作者
    ;jmp $
       
;8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号,
;所以改成如下:       
yx:        MOV DX,100H  ;100H是一个没有设备的地址
    MOV AL,60h   ;该数必须是60h,才能在有中断时转入60h号中断处理程序
    OUT DX,AL
        jmp yx
回复

使用道具 举报

板凳
ID:257351 发表于 2019-7-11 13:12 | 只看该作者
好,希望做的不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表