环境
proteus8.7
功能
开关控制引脚电平,从而控制LED亮灭。
使用了PA1进行输入,PB1进行输出
原理图
代码
; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt
org 100h
; rtl.asm
.MODEL SMALL
.STACK 100H
.DATA
PORT_A EQU 200H ; 8255端口A地址
PORT_CTL EQU 206H ; 8255控制端口地址
PORT_B EQU 202H
DELAY_COUNT DW ? ; 用于延时计数
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV DX, PORT_CTL ; 将控制端口地址存入DX
MOV AL, 90H ; 方式0,端口A输入,端口B输出,端口C输出
OUT DX, AL ; 通过DX间接指定端口地址输出控制字
nop
LOOP_LED:
nop
nop
mov al,0
MOV DX, PORT_A ; 将数据端口地址存入DX
IN AL,DX
NOP
NOP
MOV DX,PORT_B
OUT DX, AL
call DELAY_5KHZ
JMP LOOP_LED
MAIN ENDP
DELAY_5KHZ PROC
nop
nop
nop
RET
DELAY_5KHZ ENDP
END MAIN
ret
详细讲解
硬件部分
使用元件有8086、8255、74hc373、led、开关
其中373锁存8255的模式,也就是使用的port,00是portA...,8086的ALT连接373的LE,ALT引脚功能是使能锁存,8086ALT引脚详见总线工作模式,使用地址的AD1和AD2位进行端口选择
然后8086的数据/地址线低8位和373以及8255的数据连接
8086的读写信号分别和8255的读写信号连接
8255的引脚在输入下有内部上拉,所以直接通过开关和电源地连接即可
8086的NMI可以不接
软件部分
使用emu8086进行汇编的编译,产生.com文件,类似于51的hex文件,用来导入8086进行仿真运行,
这里PORT-CTL是8255的控制寄存器地址
地址的1、2位为模式选择,高位用来做片选,比如使用译码器片选指定器件,这里只用一个8255,所以随便设置即可,这里取02
软件下载以及具体操作可以参考这个视频
最后
作者因为课设第一次使用proteus进行8086的仿真,所以这里记录一下需要注意的东西
1.proteus里面,标号是一种逻辑连接的工具,两个引脚连接的导线有一样的标号时,仿真就认为两个引脚连接在同一个导线上,这可以简化接线,方便设计和仿真
具体操作是鼠标放在导线上,右键选择添加网络标号
2.8086的BUS,给BUS引出并标号,就可以在其他器件的引脚导线上通过标号连接对应的数据位,比如,这里设置BUS位AD[0..15],意思是BUS上有16位,每一位的标号是ADi(i=0,1,..15)
然后在其他器件的引脚导线上设置标号ADi,即可连接指定的总线位
这里分享一个快捷标号的方法,鼠标放在导线上,按键盘A,输入NET=AD#,然后确定,就可以在点击导线时自动标号,初始的i和增长步长可以在"计数初值"和"计数增量"修改
这里NET=指定标号AD,#表示添加的数字,也就是ADi里面的i
3.电源的字符串最好标注极性和大小,比如+5V
4.电阻,在添加硬件选择类别Resistors,然后选择或者搜索需要的电阻即可,双击电阻可以更改阻值,所以选择的电阻阻值不符合要求也没事