汇编与接口课程实验3——利用8255A实现LED的流水点亮实验

2023-11-04

一、 实验目的

该实验的目的在于让学生掌握8255A和微机接口的连接方法,了解8255A的基本的工作原理和编程方法。

二、 实验内容

PA口接8个拨动开关K1-K8,PB口接8个LED。初始由开关K1-K8设定8位不同的值,当执行程序后LED按K1-K8初始设定的值点亮,并向右流动(8255A工作在0方式)。选择完成在数码管上显示“8255-A”。

三、 实验接线图

在这里插入图片描述

四、 实验编程提示

LED右流水仅仅取决于第1次开关的位置,一旦LED流水开始, LED流水的次序将不再理睬开关位置的重新变化。
提示:为了使流水显示明显,每个位置应加延时程序。

五、 实验步骤

1、 根据原理图正确连接实验线路(需要连接红线)。
2、 正确理解实验原理。
3、 编写实验程序,并上机调试,观察实验结果。

接线图:
在这里插入图片描述

实验流程图:
在这里插入图片描述

实验程序及注释

DATA SEGMENT
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX

MOV DX,283H	;命令口地址
MOV AL,98H     ;100110000方式,输入,输入,0方式,输出,输出)
OUT DX,AL	;送到命令口

MOV DX,281H   	;CLEAR PORT B
MOV AL,00H	;清空B口
OUT DX,AL	;送到命令口

WAIT1:MOV DX,280H	;A口
IN AL,DX			;获取当前命令行情况
AND AL, 11111111B		;判断是否有开关已经打开
JZ WAIT1			;如果没有,继续循环等待

;将获取的A口信息进行调整,因为可能有多个开关被打开之后再运行的程序
MOV CX,08H	;设置最大循环量	
MOV BL,01H	;判断开关位置的条件	
LP1:MOV DL,AL	;将获取的A口进行调整
AND DL,BL	;判断BL中为1的位置的开关是否打开
JNZ OT		;JNZ说明打开的开关就是当前BL对应的那个,可以跳出循环,开始点亮
SHL BL,1H		;如果不是,将BL逻辑左移一位
LOOP LP1		;再次循环
OT:MOV AL,DL	;找到对应的

;跑马灯的具体实现部分
LP2:MOV DX,281H	;B口地址
    OUT DX,AL	;将命令送到B口
    CALL DELAY	;调用延时,放置跑马灯太快观察不到
    ROR AL,01H	;循环右移一位,完成跑马灯的要求
    JMP LP2	;继续循环,一直进行上述步骤

;时延部分
DELAY PROC 
    PUSH BX
    PUSH CX
    MOV BX,0FFFFH
DL1:MOV CX,0FH	;外层循环
DL2:DEC CX	;内层循环,两层循环的目的是延长时延时间
    JNZ DL2
    DEC BX 
    JNZ DL1
    POP CX
    POP BX
    RET
DELAY ENDP

CODE ENDS
END START

结果展示及分析:

实现结果为:如果先打开开关再运行程序,实验箱会自动的从打开开关位置开始,LED依次闪亮,如果没有打开开关运行程序,LED不闪亮,只有打开开关后才会正常进行跑马灯。

思考题:

在本次的程序中,我们在跑马灯开始进行之后再对开关进行操作的时候是不会对LED的闪亮造成影响,因为程序中关于点亮LED灯的部分是一个无限的循环。
老师在实验的时候提出的思考为,在跑马灯的过程中,再打开一个开关,让下一个时间的跑马灯从这个开关对应的LED灯开始。
我的解决思路是:要实现这个要求,只需要在点亮LED的死循环中添加一个判定条件即可。在死循环中,设置变量始终记录开关情况,同时在之前开始跑马灯时候的A口数据也通过变量保存下来,在每一次循环中都进行一次比较,如果相等,说明没有发生变化,正常进行循环,如果不相等,说明发生变化,直接跳转到之前程序中的LP1即可。
补充实验 在数码管上显示“8255-A”

程序流程图:
在这里插入图片描述

接线图:
在这里插入图片描述

实验程序及注释:

code segment 		;初始化代码段
assume cs:code
start:		;初始化,设置A口B口工作方式
mov dx,293h 	;送入命令口地址
mov al,10001001b 		;传入命令字
out dx,al

;显示A口输入的数并循环移位
xor ax,ax
mov bl,0
lop:      
mov dx,292h  
in al,dx   
cmp al,ah  
jz next   
mov ah,al
mov bl,ah
rol bl,1    
next: 
ror bl,1   
mov al,bl
mov dx,291h
out dx,al
mov cx,3fffh

;显示8255-A 
doit:
 ;显示8
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,7fh;数字8所对应的段码
 out dx,al
 mov dx,291h
 mov al,00100000b
 out dx,al
 call DELAY		;延时程序,防止数字跳转过快,便于观察
 
 ;显示2
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,5bh;数字2所对应的段码
 out dx,al
 mov dx,291h
 mov al,00010000b
 out dx,al
 call DELAY

 ;显示5
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,6dh;数字5所对应的段码
 out dx,al
 mov dx,291h
 mov al,00001000b
 out dx,al
 call DELAY

 ;显示5
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,6dh;数字5所对应的段码
 out dx,al
 mov dx,291h
 mov al,00000100b
 out dx,al
 call DELAY

 ;显示-
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,40h;数字-所对应的段码
 out dx,al
 mov dx,291h
 mov al,00000010b
 out dx,al
 call DELAY
 
 ;显示A
 mov dx,291h
 mov al,00000000b
 out dx,al
 mov dx,290h
 mov al,77h;数字A所对应的段码
 out dx,al
 mov dx,291h
 mov al,00000001b
 out dx,al
 call DELAY
 loop doit     
 jmp lop 
 
;延时程序 
 DELAY PROC 
    PUSH BX
    PUSH CX
    MOV BX,0FFFFH
DL1:MOV CX,06FH
DL2:DEC CX
    JNZ DL2
    DEC BX 
    JNZ DL1
    POP CX
    POP BX
    RET
DELAY ENDP

code ends
end start

实验结果:
程序开始后,LED数码管上流水线式循环显示8255-A,每一位显示延时较长,确保能够看清。已经给老师检查过

思考题:
本实验也可以使用C口,将我原本的程序中的291H改为292H并将相关连线改到C口即可。或者通过复位/置位命令字对C端口的每一位进行置位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编与接口课程实验3——利用8255A实现LED的流水点亮实验 的相关文章

  • 如何获取变量token的值

    一 什么是token 1 客户端使用用户名跟密码请求登录 2 服务端收到请求 去验证用户名与密码 3 验证成功后 服务端会签发一个 Token 再把这个 Token 发送给客户端 4 客户端收到 Token 以后可以把它存储起来 比如放在
  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • docker从入门到实践

    本文的主要目的是帮助零基础的读者快速上手docker 并掌握一些相关的常见命令 同时 本文也是作者对学习docker的一个笔记记录 本文主要是从实例出发 讲解一些docker的基本操作 若有不妥或错误之处 烦请指出 不胜感激 PS 关于do
  • x86-64 汇编基础 ---- 记读 《CS: APP》

    x86 64 汇编基础 记读 CS APP 通常情况下 使用现代的优化编译器产生的代码至少与一个熟练的汇编语言程序员手工编写的代码一样有效 1 看懂汇编码 1 汇编码的格式 ATT格式 这是GCC OBJDUMP和其它一些工具的常用格式 由
  • 汇编——寄存器的分类和功能

    在汇编中 个人感觉最重要的部分其实就是寄存器了 这次我们了解一下寄存器的分类和功能 先说一下寄存器是什么吧 其实就是一部分的空间 我们可以使用这些空间来存储内容 寄存器的空间都是16位的 80x86中 后来有增长 也就是1个字的空间 堆栈则
  • Lumen开发:Lumen的异常处理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 Lumen的核心类Application引用了专门用于异常处理的RegistersExceptionHandlers class Application extends Container
  • 史上最全的最通俗易懂的-jmeter调试错误全集

    一 前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题 但是无从下手 不知道从哪里开始找起 对于初学者而言这是一个非常头痛的事情 这里结合笔者的经验 总结出以下方法 二 通过查看运行日志调试问题 写好脚本后 可以先试着运
  • List接口不是很详细的介绍

    文章目录 前言 一 List是什么 1 1 List概述 1 2 常用API 带有Index 都是List新增方法 1 3 List用法 二 常见实用类 2 1 ArrayList与Vector 2 2 ArrayList与LinkedLi
  • asm:常用语法

    常用语法 1 循环 1 1 使用条件跳转指令实现循环 1 2 使用LOOP指令实现循环 2 字符串 2 1 指定字符串的长度 2 2 字符串指令 2 3 重复前缀 3 数组 4 递归 5 宏 6 文件操作 7 内存管理 1 循环 1 1 使
  • 汇编宏伪指令介绍

    1 汇编宏伪指令介绍 macro macname macargs endm 1 macro 和 endm 表示宏定义的开始和结束 2 macro 后面接着宏定义的名字 然后是参数 参数后面的宏定义的实现 3 在宏定义中使用参数 需要添加前缀
  • 汇编 跳转指令: JMP、JCXZ、JECXZ、JA、JE、JNA、JNE、JZ、JB、JS、JC、JNC、JG、JNBE、JO、JP、JL、JPO、JGE、JLE 汇编语言

    以下为JCXZ和JECXZ JMP
  • 机器语言->汇编语言->高级语言

    在硬件层面来看 计算机的运行就是高底电压的变化 这种高低电压的变化在早期是通过开关或插拔电线来控制的 计算机中用0和1来表示低电压和高电压 这些0和1的序列就可以控制计算机CPU进行各种动作 一组一组的0 1序列就是一个一个的指令 这些指令
  • 汇编语言11之中断和int指令以及端口

    中断第处理外部突发事件的一个重要技术 硬件中断 外部中断 一般是外设发出的中断 内部中断 硬件出错或运算出错引起的中断 不可被屏蔽 软件中断 中断处理程序 CPU必须建立中断信息和中断处理程序之间的联系 中断信息中包含 1byte 中断类型
  • 报错为method does not override method from its superclass解决

    你要重写接口的方法就得让实现类实现接口 public class UserServiceImpl implements UserService 没有实现接口就加重写注解 Override 系统不知道重写了什么接口方法 肯定报错 建议巩固一下
  • 接口并发性能测试开发之:从测试方案设计、测试策略、指标分析到代码编写,这一篇全搞定。

    并发接口性能设计思路与代码编写 1 引言 2 并发测试定义 3 并发测试分类 4 设计思路整理 5 测试方案设计 6 指标分析 7 代码实战 8 总结 1 引言 这篇是我3月份在公司内部做的技术分享内容 由于我在公司内部分享的内容较多 以及
  • flask模块mock接口(一)

    目录 一 安装第三方模块 二 flask模块的使用 三 动态路由 四 返回json格式数据 有时候测试需要调用第三方接口进行测试 但是第三方接口没有提供时 我们可以通过mock接口模拟第三方接口 一 安装第三方
  • ads+jlink和keil+jlink调试环境配置

    ads1 2 and jlinkv8 1 安装ads1 2和jlink驱动Setup JLinkARM V408i exe 安装ads1 2时 最后在100 时如果持续时间长 耐心等一下吧 没有等待而点了cancel 则之后就不好重装了 解
  • CSharp之接口(Interface)

    接口通过Interface关键字修饰 接口是抽象类的一个实例 当抽象类中所有的方法全部为抽象方法时 这个抽象类可以称为接口 接口不能被实例化 接口中的方法没有方法体 只能包含方法的声明 并且所有方法成员是公有的 public 接口中成员不能
  • [原创]C++98升级到C++20的复习旅途-从汇编及逆向角度去分析“constexpr“关键字

    简介 常用网名 猪头三 出生日期 1981 XX XX QQ 643439947 个人网站 80x86汇编小站 https www x86asm org 编程生涯 2001年 至今 共22年 职业生涯 20年 开发语言 C C 80x86A
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级

随机推荐

  • nginx安装及部署

    下载 官方网站 https nginx org en download html Windows下安装 安装 下载后解压 切记不能含有中文路径 文件结构如图 我解压的路径就有中文 记得拷贝放置于英文目录下即可 启动 两种方法 1 直接双击该
  • C语言(函数与预处理、指针)

    一 函数与预处理 一 一维数组 1 一维数组的定义格式为 类型说明符 数组名 常量表达式 例如 int a 10 它表示定义了一个整形数组 数组名为a 有10个元素 2 在定义数组时 需要指定数组中元素的个数 方括弧中的常量表达式用来表示元
  • 基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频

    系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程 一 FFMPEG Conan 环境集成 基于 FFmpeg 的跨平台视频播放器简明教程 二 基础知识和解封装 demux 基于 FFmpeg 的跨平台视频播放器简明教程 三 视频
  • 69. Sqrt(x)

    Implement int sqrt int x Compute and return the square root of x where x is guaranteed to be a non negative integer Sinc
  • 新闻分析:解密代号A1S

    本周二SAP董事长特拉普纳 Hasso Plattner 在Software 2007会议上发言时阐述了SAP新的软件设计方法 SAP表示在过去的三年中有3000多名工程师都在运用这种新的软件设计方法在开发代号为A1S的新产品 虽然这一代号
  • HTML的input类型为hidden导致无法reset改字段的value问题

    问题关键 根据HTML规范 hidden是非ui类元素 不接受用户处理 所以form的 reset并不影响它 http stackoverflow com questions 6367793 why does the reset butto
  • 一种通用的业务监控触发方案设计

    一 背景 业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期 实现业务监控主要分成两步 一 在业务系统中选择节点发送消息触发业务监控 二 系统在接收到mq消息或者定时任务调度时 根据消息中或者任务中的业务数据查询业务执行
  • go-micro 在linux下安装出现service auth not found

    1 安装micro linux下执行该命令 wget q https raw githubusercontent com micro micro master scripts install sh O bin bash 2 micro se
  • vue 实现md5、base64加密

    背景 前端使用密码登录的时候 一般都会使用密文传输 否则控制台就能看到密码 具体实现如下 使用 md5 进行加密 1 安装 cnpm install save js md5 2 在 main js 全局引用 import md5 from
  • pycharm console 报错

    描述 pycharm的console本来用的好好地 但是我也不知道自己改了啥 结果报错了 报错 Error Console process terminated with error Traceback most recent call l
  • Inheritance___CH_17

    17 1 Introduction to inheritance A hierarchy is a diagram that shows how various objects are related Most hierarchies ei
  • 华为交换机配置链路聚合

    文章目录 1 拓扑图 2 任务描述 3 Sw1配置 4 Sw2配置 5 Lacp模式链路聚合演示 https blog csdn net qq 45042462 article details 120938052 1 拓扑图 2 任务描述
  • 正则表达式校验版本号

    需求 校验版本号 规则 X Y Z 1 99 0 99 0 99 要求 1 必须是三位 例如 x x x的形式 2 每位x的范围分别为1 99 0 99 0 99 3 不允许的情况 0 x x 01 x x x 0x x x 00 x x
  • Python根据Excel名单实现文件夹下文件批量改名

    班级收集截图 通过缓存快速获取图片 可是文件夹内的文件是乱码 所以采用Python进行批量改名操作 import os import xlrd count 1 path C Users White Desktop 18 文件所在文件夹 ex
  • 排查Linux服务器是否被入侵步骤

    作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 以下是结合centos7 9操作系统进行排查Linux操作系统是否被入侵 其他Linux发行版的操作类似 1 入侵者可能会删除机器的日志信息 可以查看日志信息
  • No projects are found to import 问题如何解决

    在myeclipse中导入项目遇到 No projects are found to import 导致原因 项目目录中没有 project或者 classpath 解决方案 1 project classpath直接拷贝到相应位置即可 2
  • 大数据——Java 知识点整理

    1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java开发工具包 提供了java的开发环境和运行环境 JRE Java Runtime Environment 的简称 java运行环境 为ja
  • FSDataInputStream中的seek()方法

    FSDataInputStream实现了Seekable接口 实现方法 其中的seek long pos 方法可以 对任意位置进行重新定位 与java io inputstream中的skip 不同 举个例子对 hdfs中的一个文件进行两次
  • JavaScript 使用 canvas arcTo() 在画布上画一条弧线

    arcTo 在画布上创建介于两个切线之间的弧 曲线 arcTo 使用 stroke 方法在画布上绘制确切的弧
  • 汇编与接口课程实验3——利用8255A实现LED的流水点亮实验

    一 实验目的 该实验的目的在于让学生掌握8255A和微机接口的连接方法 了解8255A的基本的工作原理和编程方法 二 实验内容 PA口接8个拨动开关K1 K8 PB口接8个LED 初始由开关K1 K8设定8位不同的值 当执行程序后LED按K