【接口技术】实验2:I/O端口地址译码 & 并行接口输入输出

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MorleyOlsen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值