【Proteus仿真8086实验二】简单IO接口实验——LED灯依次亮起和跑马灯

本文介绍了如何利用8086微处理器控制LED灯,通过译码器和锁存器实现数据输出,详细讲解了延时子程序编写,并演示了基础程序与改进版跑马灯。涉及的难点在于指令执行时间和延时计算。

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

  • 这次实验内容根据B站一个老师录制的讲解视频,程序同样来源于此,刚开始上手的时候跟着老师学比较快一点

实验一原理讲解

实验一常见问题1


  • 实验结果如图所示,原理图略有改动,使用锁存器373隔离数据和LED灯,当译码器154和写信号同时有效时数据输出

  • 使用273分离地址线并作为译码器输入,A7A6A3A4=0011时IO3有效地址为30H
    在这里插入图片描述

  • 代码主要难度在于完成一个延时子程序,延长事件为100 * 1000 * 执行一条指令的时间,可以大概估算一下8086CPU运算速率为5MHz,大概执行指令需要1us量级,乘以10^5大概在毫秒级

assume cs:codesg, ds:datasg

datasg segment
   data db 01h, 03h, 07h, 0fh, 1fh, 3fh, 7fh, 0ffh
datasg ends

codesg segment
start:
   mov dx, 30h
loop1:
   mov bx, offset data
   mov cx, 8
s:
   mov al, [bx]
   out dx, al
   call delay
   inc bx
   loop s
   jmp loop1
   
delay proc
   push cx
   push bx
   mov bx, 100
delay1:
   mov cx, 1000
delay2:
   loop delay2
   dec bx
   jnz delay1
   pop bx
   pop cx
   ret
delay endp

codesg ends
end start
  • 对以上程序稍微修改就是跑马灯程序,将0000 0001循环左移
assume cs:codesg, ds:datasg

datasg segment
   data db 01h, 03h, 07h, 0fh, 1fh, 3fh, 7fh, 0ffh
datasg ends

codesg segment
start:
   mov dx, 30h
loop1:
   mov bx, offset data
   mov cx, 8
   mov al, 01h
s:
   ;mov al, [bx]
   out dx, al
   call delay
   ;inc bx
   rol al, 1
   loop s
   jmp loop1
   
delay proc
   push cx
   push bx
   mov bx, 100
delay1:
   mov cx, 1000
delay2:
   loop delay2
   dec bx
   jnz delay1
   pop bx
   pop cx
   ret
delay endp

codesg ends
end start
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值