【Proteus仿真8086】简单IO接口实验——无条件传输和查询方式

本文介绍了基于8086微处理器的程序查询方式控制LED灯和读取开关状态。通过74LS373接口和74LS244缓冲器实现无条件传输,当开关K0闭合时点亮特定LED,开关K1闭合则点亮另一组LED。程序中使用了`test`指令来判断开关状态,并通过`out`指令控制LED。简化电路时,可以省去最后一个74LS243。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 本次实验内容来自于顾晖老师《微机原理与接口技术 基于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值