微机原理与接口技术实验二:8255A控制4按键二进制输入数码管显示

前言:

本实验针对于清华大学版《微机原理与接口技术》,其相关内容仅供参考,如有错误练习评论。

其使用的语言为汇编语言,相关的编译环境为EMU8086,硬件仿真环境为PROTEUS 8 其他版本可能存在运行问题。

本次实验的内容如下:

1、使用8086作为主控芯片,控制以下过程进行

2、使用8255A芯片,实现信号的I/O输入输出

3、通过4个按键对应二进制的四位,来控制数码管的数字输出十六进制

其最终的电路图如下所示:

主要模块原理介绍与参考代码:

对于8255A工作方式如下:

8255A是一种可编程并行接口芯片,它有三种工作方式:

  1. 方式0(基本输入/输出方式):在这种方式下,8255A的三个端口(A、B和C)都可以独立地设置为输入或输出模式。每个端口都有8位数据线,可以进行字节级别的数据传输。

  2. 方式1(选通输入/输出方式):这种方式下,端口A和端口B被分为两个4位的半端口(A高四位和A低四位,B高四位和B低四位)。端口C被用作控制端口,用于选择哪个半端口进行输入或输出操作。这种方式允许在同一时刻对两个不同的外设进行数据传输。

  3. 方式2(双向选通输入/输出方式):这种方式下,端口B被配置为一个8位的双向数据端口,而端口A的高四位和端口C的低四位被用作控制端口。这种方式主要用于与需要双向数据传输的外设进行通信。

在使用8255A时,需要通过写入控制字来设置其工作方式和各个端口的功能。控制字写入到控制寄存器中,根据控制字的不同位设置,8255A会进入相应的工作方式并配置相应的端口功能。

8255A对应的电路图引脚如下:

对于本实验中,8255A的工作方式为A口工作方式0 输入 B口工作方式0 输出

assembly
; 8255A方式0初始化和操作示例

ORG 0000H

BEGIN:
    ; 初始化8255A
    MOV AL, 80H ; 方式0控制字,A口输出,B口输入
    OUT 0640H, AL ; 将控制字写入到控制端口

    ; 向端口A写入数据(例如:将0FFH写入端口A)
    MOV AL, 0FFH
    OUT 0641H, AL ; 假设端口A的地址为0641H

    ; 读取端口B的数据
    IN AL, 0642H ; 假设端口B的地址为0642H

    ; 下面的代码可以根据需要进行其他操作或循环读写

    JMP BEGIN ; 无限循环

END

8086芯片介绍:

8086芯片是由美国英特尔公司(Intel)在1978年推出的16位微处理器,它是x86架构的始祖。以下是对8086芯片的主要特性和介绍:

1. **架构和性能**:
   - 8086是一个16位的微处理器,这意味着它能够同时处理16位的数据。
   - 它采用了高性能的HMOS(High-Mobility Metal-Oxide-Semiconductor)工艺制造,芯片上集成了大约2.9万只晶体管。

2. **地址总线和寻址能力**:
   - 8086拥有20条地址线,这使得它可以直接寻址1MB(即2的20次方)的内存空间。

3. **数据总线**:
   - 它有16位的数据总线,用于在处理器和其他设备之间传输数据。

4. **外部接口**:
   - 8086采用40引脚双列直插式封装(DIP),提供与系统其他部分的物理连接。

5. **电源供应**:
   - 8086使用单一的+5V电源供电。

6. **时钟频率**:
   - 初始版本的8086工作在5MHz的时钟频率下。

7. **预取指令**:
   - 8086通过总线接口单元(Bus Interface Unit, BIU)实现预取指令功能,BIU包含一个6字节的预取队列,可以提前从内存中获取指令供执行单元(Execution Unit, EU)使用,提高了处理器的效率。

8. **寄存器**:
   - 8086包含14个寄存器,包括通用寄存器(AX、BX、CX、DX)、指针寄存器(SP、BP、SI、DI)、段寄存器(CS、DS、ES、SS)以及指令指针寄存器(IP)和标志寄存器(FLAGS)。

9. **操作模式**:
   - 8086支持最小模式和最大模式两种操作模式,最小模式主要用于简单的系统设计,而最大模式则允许与其他处理器或设备共享总线。

10. **后继产品**:
    - 随后,Intel推出了8088芯片,它与8086非常相似,但具有8位的外部数据总线,这使得它能够与更便宜的8位硬件兼容,同时也降低了成本。

8086的推出对于个人计算机的发展产生了深远影响,它的x86架构成为此后几十年来桌面和服务器计算领域的主导架构,并且经过多次扩展和优化,发展成为现代的x64架构。

8086引脚图:

74LS373芯片

引脚图如下:

它是一种8位三态缓冲器/锁存器,常用于数据总线的控制和接口电路中。

其功能如下:

  • 74LS373具有8个独立的D型触发器,每个触发器都有一个数据输入(D)、输出(Q)和使能(G)端口。
  • 当使能端(G)为高电平时,数据输入(D)与输出(Q)之间是透明的,即数据可以直接从输入传递到输出,此时74LS373工作在缓冲器模式。
  • 当使能端(G)为低电平时,数据输入被锁存在触发器中,输出保持不变,直到下一次使能信号变为高电平,此时74LS373工作在锁存器模式

并且具有三态输出:

      74LS373还具有一个三态输出控制端(OE),当OE为高电平时,所有输出(Q)被置于高阻态,这意味着它们既不会驱动高电平也不会驱动低电平,从而允许其他设备在同一总线上进行数据传输。

其参考代码如下:

assembly
; 74LS373汇编语言参考代码

ORG 0000H

BEGIN:
    ; 假设74LS373的使能端口地址为0x60h,数据输入来自数据总线
    ; 这里假设要将数据0123H写入74LS373的前四个位

    ; 设置74LS373的使能端为高电平,允许数据通过
    MOV AL, 00000001B ; 将最低位设置为1,其他位为0
    OUT 060h, AL

    ; 将数据写入数据总线
    MOV AX, 0123H
    OUT DX, AX ; 假设DX是数据总线的低8位端口地址

    ; 设置74LS373的使能端为低电平,锁存数据
    MOV AL, 00000000B ; 将所有位设置为0
    OUT 060h, AL

    ; 下面的代码可以根据需要进行其他操作或循环读写

    JMP BEGIN ; 无限循环

END

74LS245芯片

引脚图如下:

它是一种8位总线传输开关,常用于在两条数据总线之间进行数据传输。

其功能具体如下:

  • 74LS245具有双向数据传输能力,可以作为总线缓冲器或总线传输开关使用。
  • 它有两组8位的数据输入/输出端口(A和B),以及一个方向控制端(DIR)和一个使能端(OE)。

使用参考代码如下:

assembly
; 74LS245汇编语言参考代码

ORG 0000H

BEGIN:
    ; 假设74LS245的使能端口地址为0x60h,方向控制端口地址为0x61h
    ; 这里假设要将数据总线A上的数据传输到数据总线B上

    ; 设置74LS245的使能端为高电平,关闭数据传输
    MOV AL, 00000001B ; 将最低位设置为1,其他位为0
    OUT 060h, AL

    ; 设置74LS245的方向控制端为高电平,从A端口输入,B端口输出
    MOV AL, 00000001B ; 将最低位设置为1,其他位为0
    OUT 061h, AL

    ; 将数据总线A上的数据读入寄存器AX
    IN AX, DX ; 假设DX是数据总线A的低8位端口地址

    ; 设置74LS245的使能端为低电平,打开数据传输
    MOV AL, 00000000B ; 将所有位设置为0
    OUT 060h, AL

    ; 将AX中的数据写入数据总线B
    OUT BX, AX ; 假设BX是数据总线B的低8位端口地址

    ; 下面的代码可以根据需要进行其他操作或循环读写

    JMP BEGIN ; 无限循环

END

74LS138芯片

其引脚图如下:

其功能简单说为:三八译码器,对于学习数电的同学来说并不陌生。

三线输入,八线输出。

其功能如下:

  • 74LS138的主要功能是将三个二进制输入信号(A、B、C)解码为八个独立的输出信号(Y0-Y7)。
  • 当特定的输入组合出现时,对应的输出位会被驱动为低电平(逻辑0),其余未选中的输出则保持高电平(逻辑1)。

其参考代码如下:

assembly
; 74LS138汇编语言参考代码

ORG 0000H

BEGIN:
    ; 假设74LS138的输入端口地址分别为0x60h(A)、0x61h(B)、0x62h(C)
    ; 这里假设要选择74LS138的第5个输出(Y4)

    ; 将输入A、B、C设置为对应的二进制值(对于Y4,A=1, B=0, C=1)
    MOV AL, 00000001B ; 将最低位设置为1,其他位为0
    OUT 060h, AL ; 设置A为1

    MOV AL, 00000000B ; 将所有位设置为0
    OUT 061h, AL ; 设置B为0

    MOV AL, 00000001B ; 将最低位设置为1,其他位为0
    OUT 062h, AL ; 设置C为1

    ; 下面的代码可以根据需要进行其他操作或循环选择不同的输出

    JMP BEGIN ; 无限循环

END

仿真相关

在仿真中,我们可以发现一些问题,例如电路都正常工作状态,但是对于其中的一些信号显示并不完善,高低信号所表示的颜色没有变化。

为解决这个问题,笔者在电路中增加了示波器来观察信号的变化

下图为示波器接线图

示波器正常波形如下:

改变第一个开关后,波形直接跳转

同样,闭合式,波形依旧有明显的变化:

得出结论:是电信号变化太快,而导致颜色没有变化。

本实验的其他功能实现图,如下所示:

好的,本次实验内容如上,完整实现,具体的实现代码与电路见资源。

https://download.csdn.net/download/qq_65777333/88661522?spm=1001.2014.3001.5503 

如果没有还在审核中,继续加油,勇攀高峰!!!

  • 29
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验目的: 1.了解8255A芯片的基本功能和工作原理; 2.掌握8255A芯片的编程方法; 3.掌握8255A芯片的应用。 实验设备: 1.微机实验箱; 2.8255A芯片; 3.适配器; 4.万用表。 实验原理: 8255A芯片是具有并行输入输出接口功能的可编程I/O接口芯片。它包含3个8位I/O端口,即PortA、PortB、PortC,每个端口可以作为输入或输出使用。此外,8255A芯片还具有2个工作模式,即I/O模式和手摇模式,可以通过编程来选择。 实验内容: 1.将8255A芯片插入适配器中,并将适配器插入微机实验箱中。 2.编写程序,将8255A芯片的端口A、B、C设置为输出端口,利用端口A、B、C控制8个LED灯的亮灭。 3.编写程序,将8255A芯片的端口A、B、C设置为输入端口,利用端口A、B、C读取8个开关的状态,并将读取的结果通过串口输出。 实验步骤: 1.选择适配器上的8255A芯片,将其插入微机实验箱中。 2.在微机实验箱上连接8个LED灯和8个开关,并将它们分别与8255A芯片的端口A、B、C相连。 3.打开微机实验箱,进入DOS系统。 4.编写程序,将8255A芯片的端口A、B、C设置为输出端口,利用端口A、B、C控制8个LED灯的亮灭。程序如下: MOV AL, 0FFH ;将端口A、B、C设置为输出端口 OUT 61H, AL MOV AL, 0 ;将端口A、B、C清零 OUT 60H, AL MOV AL, 0FFH ;将端口A、B、C设置为电平 OUT 60H, AL 5.编写程序,将8255A芯片的端口A、B、C设置为输入端口,利用端口A、B、C读取8个开关的状态,并将读取的结果通过串口输出。程序如下: MOV AL, 0 ;将端口A、B、C设置为输入端口 OUT 61H, AL MOV AL, 0 ;将端口A、B、C清零 OUT 60H, AL IN AL, 60H ;读取端口A的状态 MOV BL, AL ;将端口A的状态存入BL中 IN AL, 61H ;读取端口B的状态 MOV CL, AL ;将端口B的状态存入CL中 IN AL, 62H ;读取端口C的状态 MOV DL, AL ;将端口C的状态存入DL中 MOV AH, 02H ;设置串口输出 MOV DL, BL ;输出端口A的状态 INT 21H MOV DL, CL ;输出端口B的状态 INT 21H MOV DL, DL ;输出端口C的状态 INT 21H 6.保存程序并运行,观察LED灯的亮灭和串口输出的结果。 实验注意事项: 1.在进行实验时,需要注意芯片的引脚连接和电路的正确性,以避免出现电路短路或其他异常情况。 2.在编写程序时,需要注意语法和参数的正确性,并对程序进行调试和测试,以确保程序的正确性和稳定性。 3.在实验过程中,需要遵守实验室的安全规定,注意用电安全和器材保护,以保证实验的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵玄月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值