Proteus仿真8086简单IO接口实验——无条件传输和查询方式
Posted 只是有点小怂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Proteus仿真8086简单IO接口实验——无条件传输和查询方式相关的知识,希望对你有一定的参考价值。
- 本次实验内容来自于顾晖老师《微机原理与接口技术 基于8086和Proteus仿真 第3版》的【例7-1】和51CTO课程的讲解内容第七章输入输出接口0704程序查询方式
https://edu.51cto.com/course/24864.html
原理图和代码与书上相比略有改动 - 无条件传输方式CPU不需要了解外设状态而直接与外设通信,一般用于开关和二极管等简单外设。使用74LS373作为接口和CPU通信,控制8个LED同时亮或者熄灭,亮灭时间为毫秒级。
assume cs:codesg
codesg segment 'code'
start:
mov dx, 400h
mov al, 0ffh
again:
out dx, al
call delay
not al
jmp again
delay proc
push cx
push bx
mov bx, 50
wait0:
mov cx, 2801
wait1:
loop wait1
dec bx
jnz wait0
pop bx
pop cx
ret
delay endp
codesg ends
end start
-
当开关K0闭合的时候,点亮LED0、LED1、LED2、LED3;当开关K1闭合时,点亮LED2、LED4、LED6、LED8;其余状态所有LED灯熄灭。在程序中体现为用test指令判断该位是否为0。
-
查询开关状态判断是否亮灯,比较坑的一点是读取开关数据选用了单向缓冲器74LS244,当片选信号有效时A可以传输到Y,因此A端应该接开关,Y端接数据总线D0~D7。74LS245就是双向的,除了片选信号CS还有一个数据传输方向控制引脚AB\\BA。
-
开关状态的端口地址为200H,LED灯的端口地址为400H
-
简化电路可以去掉最后一个273因为IO端口的地址总线只使用了低16位
assume cs:codesg
codesg segment 'code'
start:
mov dx, 200h
in al, dx
test al, 01h ; 开关闭合为低电平,断开高电平
jz L1 ; 查询开关0是否闭合 闭合为0
test al, 02h
jz L2
jmp L3
L1:
mov al, 55h
jmp light
L2:
mov al, 0AAh
jmp light
L3:
mov al, 0h
jmp light
light:
mov dx, 400h
out dx, al
jmp start
codesg ends
end start
以上是关于Proteus仿真8086简单IO接口实验——无条件传输和查询方式的主要内容,如果未能解决你的问题,请参考以下文章
Proteus仿真8086简单IO接口实验——读取开关状态控制灯的亮灭
Proteus仿真8086简单IO接口实验——读取开关状态控制灯的亮灭
Proteus仿真8086实验二简单IO接口实验——LED灯依次亮起和跑马灯