8086 Proteus仿真

Proteus仿真8086时,使用74373作地址锁存器,仿真时一直没发现输出指定的地址,LE引脚也是一直置0,想问一下是仿真电路图画错了,还是代码有问题?
源码:

IOY0         EQU   0300H           ;8255片选端口始地址
MY8255_A     EQU   IOY0 + 00H      ;8255的A口地址
MY8255_B     EQU   IOY0 + 04H      ;8255的B口地址
MY8255_C     EQU   IOY0 + 08H      ;8255的C口地址
MY8255_MODE  EQU   IOY0 + 0CH      ;8255的控制寄存器地址  

Data  segment
Table DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH
Table1 DB 3FH,73H,79H,54H,79H,5EH
Table2 DB 79H,31H,31H,3CH,31H
BitSelect DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
Origin DB 01D,02D,03D,04D
Adminkey DB 04D,03D,02D,01D
Counter1 DB 0
Counter2 DB 0
Counter3 DB 0
Counter4 DB 0
Open_flag DB 0
Warning_flag DB 0
Admin_flag DB 0
Delete_flag DB 0
Disp_flag DB 0
Data   ends

Stack1 segment stack
       DW 1000H dup(?)
Stack1 ends  

Code   segment
       assume cs:code,ds:data,ss:stack1
Start:  
       mov ax,data
       mov ds,ax
       
Start1:
       mov si,0200H
       mov ax,0
       mov bx,0
       mov cx,0
       mov dx,0       
       
Setio:    
       mov dx,MY8255_MODE
       mov al,81h
       out dx,al
      
Init:
       lea bx,bitselect
       mov al,[bx+counter2]
       mov dx,MY8255_B
       out dx,al
       mov al,80H
       mov dx,MY8255_A
       out dx,al
       call delay_1ms
       inc counter2
       jmp init   
      
;Startdisp:
       ;mov al,40H
       ;mov bl,feh
       ;mov dx,MY8255_A
       ;out dx,al
       ;mov dx,MY8255_B 
       ;out dx,bh
       ;sal bh,1
       ;cmp bh,40H
       ;je startdisp

Waitkey_row:
       mov al,0
       mov dx,MY8255_C
       out dx,al
       in al,dx
       and al,0fh
       cmp al,00h
       jne waitkey_row
       call delay_1ms
       mov al,00h
       out dx,al
       in al,dx
       and al,0fh
       cmp al,00h 
       jne waitkey_row
         
Detect_Row:
       mov bl,0
       and al,0fh
       shr al,1
       jnc reverse
       inc bl
       loop detect_row
       
Reverse:
       mov al,88H
       mov dx,MY8255_MODE
       out dx,al
       
Waitkey_line:
       mov al,0
       mov dx,MY8255_C
       out dx,al
       in al,dx
       and al,0f0h
       cmp al,0h
       jne waitkey_line
       call delay_1ms
       mov al,00h
       out dx,al
       in al,dx
       and al,0f0h
       cmp al,00h
       jne waitkey_row
       shr al,1
       shr al,1
       shr al,1
       shr al,1
       mov dl,0
       mov cx,0004H
       
Detect_Line:
       and al,0fh
       shr al,1
       inc dl
       jnc recond_line
       loop detect_line
    
Recond_Line:
       mov al,bl
       shr al,1
       shr al,1
       add al,dl
       ;cmp delete_flag,0
       ;jnz display
       ;cmp al,0      
       ;je waitkey_row      
       cmp al,10
       jb  setting  
       cmp al,0
       jz  num_input
       jmp display        
     
Num_input:    
       mov [si][counter1],al
       inc counter1   
       
Display:        
       mov al,0
       mov bx,0
       call display_num
       jmp waitkey_row
       
Setting:
       mov counter4,al
       mov al,0
       call menu
       jmp waitkey_row
       
Display_num proc near

cycle:
       lea di,bitselect
       mov al,[di][counter2]
       mov dx,MY8255_B
       out dx,al
       lea di,table
       mov bl,[si][counter2]
       mov al,[di][bx]
       mov dx,MY8255_A
       out dx,al 
       call delay_1ms
       inc bx
       inc counter2
       mov dl,counter1
       cmp counter2,dl
       jnz cycle     
       ret 
Display_num endp
 
Menu proc near
       cmp counter4,0BH
       je clear
       cmp counter4,0CH
       je delete
       cmp counter4,0DH
       je reset
       cmp counter4,0EH
       je confirm
       cmp counter4,0FH
       je admin
       cmp counter4,10H
       je close
 
clear:
       jmp start1
       
delete:
       dec counter1
       jmp waitkey_row
       
reset:
       mov cx,6
       mov bh,0
       mov ax,0
       
set_code:
       lea di,origin
       mov ax,[si+bx]
       mov [di+bx],ax
       jmp waitkey_row
       loop set_code
       
confirm:
       mov bh,0
       mov cx,6 
             
compare:
       cmp admin_flag,0
       jne compare_adminkey
       je compare_password
       
compare_adminkey:
       lea di,adminkey
       mov dl,[di+counter3]
       cmp [si+counter3],dl
       jz warning
       inc counter3
       loop compare
       mov counter3,0 
       jmp admin_mode

compare_password:
       lea di,adminkey
       mov dl,[di+counter3]
       cmp [si+counter3],dl
       jz warning
       inc counter3
       loop compare 
       mov counter3,0
       jmp open
       
admin_mode:
       mov dx,MY8255_B
       mov al,0feh
       out dx,al
       jmp waitkey_row
  
open:
       mov ah,0 
       cmp open_flag,1
       je open_disp              
       mov open_flag,1
       
open_disp:
       mov dx,MY8255_B
       lea di,bitselect
       mov al,[di+bx]
       out dx,al
       lea di,table1
       mov dx,MY8255_A
       mov al,[di+bx]
       or al,80H
       out dx,al      
       call delay_1ms
       inc bl
       cmp bl,7
       jz open
       jmp waitkey_row
  
warning:
       cmp warning_flag,1
       je warning_disp
       mov bh,1
       mov al,0
       mov warning_flag,1 
       
warning_disp:
       mov dx,MY8255_B
       lea di,bitselect
       mov al,[di+bx]
       out dx,al   
       lea di,table2    
       mov dx,MY8255_A
       mov al,[di+bx]
       out dx,al     
       inc ah
       call delay_1ms
       jmp waitkey_row
             
admin: 
       mov admin_flag,1
       jmp waitkey_row  
       
close:
       jmp start1          
       ret
Menu endp      
          
Delay_5ms proc near
       mov cx,0B5FH
       loop $
       ret
delay_5ms endp

Delay_1ms proc near
       mov cx,0126H          
       loop $
       ret
delay_1ms endp          

    MOV AH,4CH
    INT 21H

Code ends
   end  start

电路图:

img

img

Proteus和汇编源文件:
链接:https://pan.baidu.com/s/1uIVzq6NSjSIjdeeu7yquGA?pwd=upj9
提取码:upj9

希望 帮忙解答

由于您提供的代码只是部分代码,我无法看到完整的程序和相关的电路图。但是从您提供的信息来看,可能存在以下问题:

未能正确连接锁存器和8255芯片,导致输出错误。
未能正确设置锁存器的控制信号,导致地址不能正确锁存。
数据总线上的数据没有被有效地存储到指定的地址中。
为了解决这个问题,您可以尝试以下几种方法:

确保您已经正确连接了锁存器和8255芯片。检查电路图和仿真模型,并确保它们之间正确连接。
检查锁存器的控制信号是否正确设置,特别是时钟信号。如果时钟信号不稳定,可能导致地址无法正确锁存。
使用调试工具来确认数据是否正确存储在指定的地址中。可以使用调试工具来单步执行程序,并监视内存地址中的数据。
希望这些信息对您有所帮助!