【接口技术】实验2:基本I/O实验

news2024/11/18 0:12:16

实验2 基本I/O实验

一、实验目的

1:掌握I/O端口地址译码电路的工作原理。

2:掌握简单并行接口的工作原理及使用方法。

二、实验内容

1:I/O端口地址译码实验

I/O地址译码电路不仅与地址信号有关,而且与控制信号有关。参加译码的控制信号有AEN、/IOR、/IOW。

其中AEN信号表示是否采用DMA方式传输,AEN=1时,为DMA方式,系统总线由DMA控制器占用;AEN=O时,为非DMA方式,系统总线由CPU占用。因此当采用查询和中断方式时,就要使AEN信号为逻辑0,并参加译码,作为译码有效选中 I/0端口的必要条件。

/IOR、/IOW可作为译码电路的输入线参加译码,来控制端口的读/写;也可不参加译码,而作为数据总线上的缓冲器74LS244/245的方向控制线,来控制端口的读/写。

实验电路如图所示,其中74LS74为D触发器,可直接使用实验台上的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址”输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、…),时间间隔通过软件延时实现。即实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。

接线表如下所示:

待接线1

待接线2

I/O地址的Y2(290H——297H)

D触发器的CLK端

I/O地址的Y4(2A0H——2A7H)

D触发器的CD端

D触发器的D端

D触发器的SD端

D触发器的Q端

L7

D触发器的SD端

VCC(+5V)

流程图如下所示:

2:并行接口输入/输出实验

实验电路如图所示,简单并行输出接口电路图连接电路74LS273、74LS32。74LS273为八D触发器,8个D输入端分别接数据总线DO~D7,8个Q输出端接LED显示电路LO~L7。编程从键盘输入一个字符或数字,将其ASCII码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。

实验电路如图所示,简单并行输入接口电路图连接电路74LS244、74LS32。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出KO~K7,8个数据输出端分别接数据总线DO~D7。用逻辑电平开关预置某个字母的ASCII码,编程输入这个ASCII码,并将其对应字母在屏幕上显示出来。

 接线表如下所示:

待接线1

待接线2

I/O-in的接口

8位逻辑开关的接口

输入的CS端

I/O译码的Y4

I/O-out的接口

8位LED灯的接口

输出的CS端

I/O译码的Y5

流程图如下所示:

 

 

三、源程序(含注释)

实验内容1:

OUTPORT1 EQU 2A0H

OUTPORT2 EQU 2A8H

CODE SEGMENT

ASSUME CS:CODE

START:

  MOV DX,290H

  OUT DX,AL      ; DX (290H, CLK) 输出一个负脉冲,将触发器置 1

  CALL DELAY     ; 调延时子程序

  MOV DX,2A0H

  OUT DX,AL      ; DX (2A0H, CD) 输出一个负脉冲,将触发器复位

  CALL DELAY     ; 调延时子程序

  MOV AH,1       ; 功能 1:读取键盘

  INT 16H        ; 调用中断

  JE  START      ; if 没有读取到按键 goto START

  MOV AH,4CH     ; 功能 4CH:程序结束

  INT 21H        ; 调用中断,结束程序

DELAY PROC NEAR  ; 延时子程序

  MOV BX,200     ; BX <- 200

L1:

  MOV CX,0       ; CX <- 0

L2:

  LOOP L2        ; CX == 0,跳出循环,所以相当于 NOP

  DEC BX         ; BX--

  JNE L1         ; if BX != 0 goto 111

  RET            ; return

DELAY ENDP

CODE ENDS

END START

实验内容2:

简单输出接口

LS273 EQU 2A8H

CODE SEGMENT

ASSUME CS:CODE

START:

  MOV AH,0     ;调用0号功能

  INT 16H      ; 等待键盘输入

  DEC AH       ; AH--

  JZ EXIT      ; if AH == 0 goto EXIT

  ; 此时 AL 已经是输入的 ASCII

  MOV DX,LS273

  OUT DX,AL    ; ASCII 码输出到 LS273

  MOV AH,02    ; 调用2号功能

  MOV DL,AL

  INT 21H      ; 输出该字符

  JMP START    ; START

EXIT:

  MOV AH,4CH   ; 返回

  INT 21H

CODE ENDS

END START

简单输入接口

LS244 EQU 2A0H

CODE SEGMENT

ASSUME CS:CODE

START:

  MOV DX,LS244

  IN AL,DX     ; LS244 输入一个字符

  MOV AH,02    ; 调用2号功能

  MOV DL,AL

  INT 21H      ; 输出该字符

  MOV DL,0DH

  INT 21H      ; 输出回车

  MOV AH,1     ; 调用1号功能

  INT 16H      ; 检测键盘输入

  JE START     ; if 无输入 goto START

EXIT:

  MOV AH,4CH   ; 返回

  INT 21H

CODE ENDS

END START

四、遇到的问题和解决过程

问题1:实验1的参考代码中,代码段标签出现问题。汇编程序中不能使用数字作为标签名称,例如下图中的【111:】和【11:】。

解决1:将标签名称更改为字母组成的字符串,例如下图中的【L1:】和【L2:】。


问题2:在完成实验1的过程中,编译运行程序时出现写和读的报错。例如【An error occurred during tpca write at 290】。

解决2:一开始进行了电路连接的检查,我们并没有发现导线连接上的错误。接着我们怀疑是读写口处的接线存在接触不良的情况,因此重新更换了导线并插紧。后续编译运行不存在进一步的报错。

五、实验结果

实验内容1:


由上图可知,L7闪烁的程序成功编译并运行。

L7亮起状态如上图所示。

L7熄灭状态如上图所示。

随着时间的流逝,L7不断地进行亮起和熄灭状态之间的切换,直至用户按下键盘任意按键为止。

最终实验结果如视频附件2-1.mp4所示。

实验内容2:

【输出】

由上图可知,简单并行接口输出的程序成功编译并运行。

输入【0】字符后,LED灯的亮起情况如上图所示。

输入【1】字符后,LED灯的亮起情况如上图所示。

输入【2】字符后,LED灯的亮起情况如上图所示。

最终实验结果如视频附件2-2-out.mp4所示。


【输入】

由上图可知,简单并行接口输入的程序成功编译并运行。

如上图所示,先在拨码开关处输入【A】字符的ASCII码。

屏幕上显示出拨码开关处输入的字符,结果如上图所示。(后续我们增加了回车0dH,避免了字符的刷屏,结果如【输入】部分的第一张图所示)

最终实验结果如视频附件2-2-in.mp4所示。

六、体会与总结

1:使用试验箱时,需要断掉电源之后才能进行接口之间的插线工作,否则有可能会损坏实验箱及其功能部件。

2:如果环境出现读/写口处的报错,可以优先考虑是不是接线端存在接触不良的情况,选择换线或插紧。

3:学习了I/O地址译码的作用,并体会了其产生的实际效果。每个设备或端口都有一个特定的地址,译码器负责将CPU的指令定向到正确的地址。在此次实验的第一部分,我们通过Y2向CLK输出一个信号,使得D触发器工作且L7亮起,同时通过Y4向CD输出一个信号,使得D触发器复位且L7熄灭。

4:在进行接口连线时,不要完全依赖实验指导书的接线提示,需要自己理解各部分端口的关联内容,才能完成接线的工作。例如在此次实验的第二部分,我们需要理解逻辑开关处是与I/O的输入端口相连,LED显示处是与I/O的输出端口相连,而不是一味地寻找JP1接口和JP2接口的位置。

5:通过调用回车功能,可以消除字符刷屏的现象。

6:此次实验的第一部分中的参考代码给出了如何判断键盘按键是否按下,这块代码后续可以复用至第二部分中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1251326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试HOT200】滑动窗口篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…

Flink实战(11)-Exactly-Once语义之两阶段提交

0 大纲 [Apache Flink]2017年12月发布的1.4.0版本开始&#xff0c;为流计算引入里程碑特性&#xff1a;TwoPhaseCommitSinkFunction。它提取了两阶段提交协议的通用逻辑&#xff0c;使得通过Flink来构建端到端的Exactly-Once程序成为可能。同时支持&#xff1a; 数据源&#…

【问题思考总结】多维随机变量函数的分布的两种情况的计算方法【离连/连连】

问题 今天做李六第一套的时候发现&#xff0c;有的时候&#xff0c;面对这种第二问的题&#xff0c;很自然地就想到了Fz&#xff08;z&#xff09;&#xff0c;然后进行化简&#xff0c;但是有的时候&#xff0c;像这道题&#xff0c;就突然发现P{XY<z}是一个非常复杂的形式…

The Bridge:从临床数据到临床应用(预测模型总结)

The Bridge:从临床数据到临床应用&#xff08;预测模型总结&#xff09; 如果说把临床预测模型比作临床数据和临床应用之间的一座“桥梁”&#xff0c;那它应该包括这样几个环节&#xff1a;模型的构建和评价、模型的概率矫正、模型决策阈值的确定和模型的局部再评价。 模型的构…

Qt 串口编程-从入门到实战

1. Qt 串口通信流程解析 1.1 串行通信和并行通信对比 并行通信适合距离较短的通信&#xff0c;且信号容易受干扰&#xff0c;成本高串口通讯-设备&#xff08;蓝牙&#xff0c; wifi&#xff0c; gprs&#xff0c; gps&#xff09; 1.2 Qt 串口通信具体流程 1. 创建 QSerial…

渗透测试--Nacos系统

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

从零到Kafka:万字带你体验Spring Boot整合消息驱动的奇妙之旅

Spring Boot与Kafka从零开始整合指南 准备工作创建项目 Spring Boot与Kafka的初次邂逅配置生产者消费者模拟测试 消息处理生产者发送消息消费者处理消息自定义序列化器 主页传送门&#xff1a;&#x1f4c0; 传送 准备工作 Spring boot: &#xff5c; 基于Spring的开源框架&a…

scipy 笔记:scipy.spatial.distance

1 pdist 计算n维空间中观测点之间的成对距离。 scipy.spatial.distance.pdist(X, metriceuclidean, *, outNone, **kwargs) 1.1 主要参数 X一个m行n列的数组&#xff0c;表示n维空间中的m个原始观测点metric使用的距离度量out输出数组。如果非空&#xff0c;压缩的距离矩阵…

每日一题:LeetCode-103/107.二叉树的(层序/锯齿形层序)遍历

每日一题系列&#xff08;day 04&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

interface previously declared 的bug问题

其实就是重复定义了&#xff0c;只需要加如下的代码即可&#xff1a; 其中把APB的部分改成自己的接口名字就好了。

『亚马逊云科技产品测评』活动征文|EC2 实例安装 docker 与配套软件部署前后端分离的医疗管理后台系统

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 一、AWS 产品类别选择 &#xff08;1&#xff09;应用服务器选择…

【接口技术】实验1:简易汇编程序调试

实验1 简易汇编程序调试 一、实验目的 1&#xff1a;掌握在集成开发软件环境中汇编程序的编写、调试方法。 2&#xff1a;学会用DOS功能调用&#xff08;1号和2号&#xff09;完成输入和输出。 二、实验内容 1-1&#xff1a; 在以BUF为首地址的字节存储区存放有若干个无符…

02 RANSAC算法 及 Python 实现

文章目录 02 RANSAC算法 及 Python 实现2.1 简介2.2 算法流程2.3 RANSAC 算法实现直线拟合2.4 利用 RANSAC 算法减少 ORB 特征点误匹配 02 RANSAC算法 及 Python 实现 2.1 简介 RANSAC &#xff08;Random Sample Consensus&#xff0c;随机抽样一致&#xff09;算法的 基本假…

网络通信基础概念介绍

网络通信基础概念介绍 局域网LAN 局域网&#xff0c;即 Local Area Network&#xff0c;简称LAN。 局域网内的主机之间能方便的进行网络通信&#xff0c;又称为内网&#xff1b;局域网和局域网之间在没有连接的情况下&#xff0c;是无法通信的。 局域网是指在一个相对较小的…

Android设计模式--外观模式

弈之为术&#xff0c;在人自悟 一&#xff0c;定义 外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。提供一个高层次的接口&#xff0c;使得子系统更易于使用。 外观模式在开发中的使用频率是非常高的&#xff0c;尤其是在第三方的SDK里面&#xff0…

redis运维(二十)redis 的扩展应用 lua(二)

一 redis 的扩展应用 lua redis lua脚本语法 ① 什么是脚本缓存 redis 缓存lua脚本 说明&#xff1a; 重启redis,脚本缓存会丢失 下面讲解 SCRIPT ... 系列 SCRIPT ② LOAD 语法&#xff1a;SCRIPT LOAD lua代码 -->载入一个脚本,只是预加载,不执行思考1&#xff1…

leetcode中“辅助栈”类题目和“单调栈”类题目的异同

1 总结 1 栈中元素的特性 2 单调栈存在一次性连续删除多个栈顶的情况&#xff0c;但是普通的栈&#xff0c;一次只pop掉一个栈顶元素 2 LC1209. 删除字符串中的所有相邻重复项 II - 普通辅助栈 class Solution {public String removeDuplicates(String s, int k) {int ns.l…

OSG粒子系统与阴影-爆炸模拟(3)

爆炸模拟示例 爆炸模拟示例的代码如程序清单11-4 所示&#xff1a; /* 爆炸模拟示例 */ void explosion_11_4() {osg::ref_ptr<osgViewer::Viewer> viewer new osgViewer::Viewer();osg::ref_ptr<osg::GraphicsContext::Traits> traits new osg::GraphicsContex…

Linux:Ubuntu虚拟机安装详解:VMware下的逐步指南

目录 1. centOS系统 2. ubuntu系统 1. 下载Ubuntu映像 step1 step2 step3 2. 新建虚拟机 step1 step2 Step3 step4 step5 step6 内存 内核 映像 显示 网络 3. 网络配置 NAT模式 本机IP获取 ​编辑 bridge模式 4. 开启虚拟机 5. 虚拟机常用配置 语言 …