当前位置:文档之家› 东南大学 微机原理 微机系统与接口 实验三 四 实验报告 自动化学院

东南大学 微机原理 微机系统与接口 实验三 四 实验报告 自动化学院

东南大学

《微机实验及课程设计》

实验报告

实验三TPC 装置系统,I/O 与存储器

实验四(1)简单输入输出

姓名:学号:08011

专业:自动化实验室:计算机硬件技术

实验时间:2013 年04月9日报告时间:2013 年04月21 日评定成绩:审阅教师:

一. 实验目的与内容

实验三:

(1)实验目的:

1)了解掌握TPC 实验系统的基本原理和组成结构,学会测试检查TPC-PCI 总线转接卡地址;

2)正确掌握I/O 地址译码电路的工作原理,学会动态调试程序DEBUG/TD 的直接I/O 操作方法;

3)学会利用I/O 指令单步调试检查硬件接口功能,学会利用示波器检测I/O 指令执行时总线情况;

4)进一步熟悉8086/8088 及PC 机的分段存储特性,了解存储器扩展原理,完成编程及测试。(2)实验内容:

1)观察了解TPC-2003A 实验系统的基本原理和组成结构,测试基本单元电路功能,熟悉各部分辅助

电路的使用;

2)通过Win/XP 控制台硬件信息或测试程序检查TPC-PCI 总线转接卡地址,并记录;

3)按图3.3-5 的I/O 地址译码测试参考电路连线,分析电路原理,分别利用动态调试程序直接I/O

操作功能和单步功能测试;

4)编程利用片选负脉冲控制指示灯(如L7)闪烁发光(亮、灭、亮、灭、……),时间间隔通过软

件延时实现;

5)修改延时参数,使亮(约1秒)与灭的时间间隔分别为1 秒、5 秒和8 秒,记录延时程序对应参数

BX,CX。

实验四:

(1)实验目的

6)进一步掌握TPC实验装置的基本原理和组成结构

7)掌握利用I/O指令单步调试检查硬件接口功能,学会用示波器检测I/O指令执行时总线情况

8)掌握简单并行输入输出接口的工作原理和使用方法,进一步熟悉掌握输入输出单元的功能和使用

(2)实验内容

9)连接简单并行输出接口电路,编程从键盘输入一个字符或数字,将其ASCII码通过这个输出接口

电路输出,根据8个放光二极管发光情况验证正确性

10)连接简单并行输入接口电路,用逻辑电平开关K0~K7预置一字母的ASCII码,编程输入这个ASCII

码,并将其对应字母在屏幕上显示出来

二. 基本实验原理

实验三:

实验电路图见3.3-5,实验电路中D 触发器CLK 端输入脉冲时,上升沿使Q 端锁存输出高电平L7

发光,CD 端为低电平时L7 灭:

参考程序:程序名:decode.asm

ioportequ 0c800h-0280h ;tpc卡中设备的IO 地址

outport1 equ ioport+2a0h ;CLK 端译码输出端选为地址Y4 outport2 equ ioport+2a8h ;CD 端对应译码输出选为地址Y5 stacks segment stack

db 100 dup (?)

stacks ends

code segment

assumecs:code,ss:stacks

mainproc far

start: movax,stacks

movss,ax

mov dx,outport1 ;Y4,置位,CLK 端写

outdx,al

call delay ;调延时子程序

mov dx,outport2 ;Y5,清空CD 端写

outdx,al

call delay ;调延时子程序

mov ah,1

int 16h

je start ;ZF=1,无键输入

mov ah,4ch

int 21h ;返回DOS 操作系统

mainendp

delay proc near ;延时子程序

mov bx,2000

ZZZ: mov cx,0

ZZ: loop ZZ

decbx

jne ZZZ

ret

delayendp

code ends

end start

实验四:

(1)简单并行输入输出接口电路连线图

输出接口电路输入接口电路

(2)简单并行输入输出电路原理

数据D0~D7先预存入273中,当输出端口2A8H和写信号同时低电平时,发生时钟触发,此时将数据运送到输出端Q1~Q8。开关电平预先将所输入信号存入244中,同样当端口2A0H和读信号同时低电平时,使244使能端工作,数据通过244的输出端存入到D0~D7

三. 方案实现与测试

实验三:

(1)查看并替换TPC 扩展卡 I/O 和存储基地址

1)参照实验指导书安装接口卡及其驱动程序;

2)启动微机并打开“控制面板”-〉“系统”-〉“设备管理器”,找到“微机原理教学实验系统”,

打开“TPC”,点击“资源”看到占用的存储和中断资源,找到两个输入/输出范围,其中一个范围大小是 0ffH 的是 PCI 接口芯片上的设置寄存器组占用的 I/O 地址空间,另一个范围大小是7fH 的是 TPC 设备的 I/O 地址

由上图可知,实验中TPC 设备的 I/O 地址空间起始地址为0EC00H。

3)用记录下的实际基址值替换每个汇编程序头中的定义行中的值,并重新编译链接

代码为:

ioportequ 0EC00h-0280h

outport1equ ioport+2a0h

outport2 equ ioport+2a8h

(2)I/0译码测试实验电路

1)将试验箱安装好,并按原理图搭接译码电路。

2)执行下面两条指令:

MOV DX,0EC20H

OUT DX,AL

Y4输出一个负脉冲,灯亮

执行下面两条指令:MOV DX,0EC28H

OUT DX,AL

Y5输出一个负脉冲,灯灭

3)动态调试程序DEBUG/TD的直接I/O操作方法(OUTPUT):

?命令行方式比较简单,启动debug,在命令符-后键入O EC20 20回车,其中20H为输出量,

EC20H为端口地址。执行完第一句灯亮,执行第二句灯灭

?TD模式下,启动TD,将光标置于代码区右击可得到代码区的局部菜单,选中I/O选项将出现

菜单,选择Out byte,在编辑菜单中输入要输出的地址以及输出内容,格式为:输出地址,内容。例如要使译码电路Y5输出一个负脉冲,可键入相应内容如下图所示:

?通过让Y4,Y5交替输出负脉冲,观察L7的亮灭变化,总结I/O地址译码电路原理,尝试编写

程序利用这个负脉冲控制L7闪烁发光,时间间隔通过软件延时实现。

程序主要算法:

利用delay子程序进行延时操作,控制LED的亮灭。

delay proc near ;延时子程序

mov bx,2000

ZZZ: mov cx,0

ZZ: loop ZZ

decbx

jne ZZZ

ret

delay endp

将程序保存为.asm格式,使用tasm进行汇编,再使用tlink进行链接,得到.exe可执行文

件,使用TD进行调试,全屏下F9运行,观察实验箱。实验箱的LED灯进行周期性的亮灭。

修改延时长度,即bx中保存的数值,再进行汇编调试,观察LED的亮灭周期,随数值的增

大而延长或数值的减小而缩短。

实验四:

(1)按照图搭接好电路,编程从键盘输入字符或数字,将其ASCII码通过输出接口输出,根据点阵某一列

的发光情况验证正确性。

1)实验电路中并行输出接口的地址为2A8H,输出数据需要三条指令:

MOV AL,8

MOV DX,EC28

OUT DX,AL

DEBUG中运行如下图所示,则点阵的某一列灯点亮表示的二进制值为00001000,即为8。

2)编写程序如下:

ioport equ 0ec00h-0280h ;tpc卡中设备的io地址

ls273 equ ioport+2a8h ;译码输出端地址Y5片选ls273

stacks segment stack

db 100 dup (?)

stacks ends

code segment

assume cs:code,ss:stacks

main proc far

start:mov ax,stacks

movss,ax

mov ah,2 ;回车符

mov dl,0dh

int 21h

mov ah,1 ;等待键盘输入

int 21h

cmp al,27 ;判断是否为ESC键

je exit ;若是则退出

mov dx,ls273 ;若不是,从2A8H输出其ASCII码

out dx,al

jmp start ;转start

exit: mov ah,4ch ;返回DOS

int 21h

main endp

code ends

end start

若输入字符为a,则点阵的某一列灯点亮表示的二进制值为01100001,即为61,是a所对应的

ASCII码。

(2)用逻辑电平开关K0-K7预置一字母的ASCII码,编程输入这个ASCII码,并将其对应字母在屏幕上显

示出来。(标准ASCII码的范围为20H-FFH)

1)判断输入动态调试程序DEBUG/TD 的直接I/O 操作方法(Input)。

?TD 模式下,启动TD(全屏模式),将光标置于代码区右击后可得到代码区局部菜单,选中I/O 选

项出现菜单;

?选择in byte,在编辑菜单中输入所要读入数据的地址,确认后即可得到该地址的数据内容,要

读74ls244 的当前输出端的数据,可在编辑菜单中输入:

0EC00-280+2A0H 或 0EC20H

?确认后即可得到74LS244 输入端的数据,结果如下图所示

2)实验电路中并行输入接口的地址是2A0H,通过上述并行接口输入数据需要2条指令:

MOV DX,EC20

IN AL,DX

DEBUG中运行如下图所示,执行完这两条语句过后开关代表的数字08被存入AL。

3)编写程序让其显示开关电平所输入的ASCII码对应的数据值编写程序如下:

ioport equ 0EC00h-0280h ;tpc卡中设备的io地址

ls244 equ ioport+2a0h ;译码地址Y4片选ls244

stacks segment stack

db 100 dup (?)

stacks ends

code segment

assume cs:code,ss:stacks

main proc far

start: movax,stacks

movss,ax

mov dx,ls244 ;从2A0输入一数据

in al,dx

movdl,al ;将所读数据保存在DL中

mov ah,02

int 21h

mov dl,0dh ;显示回车符

int 21h

mov dl,0ah ;显示换行符

int 21h

mov ah,06 ;是否有键按下

mov dl,0ffh

int 21h

jnz exit

je start ;若无,则转start

exit: mov ah,4ch ;返回DOS

int 21h

code ends

end start

如图所示,开关对应的二进制输入信号为01001000,即为48,此时屏幕显示字符H。符合程序设计要求。

四.选做实验内容:

实验三:

(1)如果用只访问一个I/O 地址(而不是二个I/O 地址)的方法来实现发光二极管闪烁发光,电路应怎样

连接?画出电路图。(提示:将D 触发器连接成1 位的计数器)。编写相应的程序使发光二极管闪烁发光,并上机验证。

答:电路修改:将D触发器的Q非段与D端相连接,CD端接+5V。

程序:

ioportequ 0ec00h-0280h ;tpc卡中设备的io地址

outport1 equ ioport+2a0h ;译码输出端地址Y4

stacks segment stack

db 100 dup (?)

stacks ends

code segment

assumecs:code,ss:stacks

mainproc far

start: movax,stacks

movss,ax

mov dx,outport1

outdx,al

call delay ;调延时子程序

int 16h

je start

mov ah,4ch

int 21h

mainendp

delay proc near ;延时子程序

mov bx,2000

ZZZ: mov cx,0

ZZ: loop ZZ

decbx

jne ZZZ

ret

delayendp

code ends

end start

实验四:

(1)利用基本实验(1)中输出锁存电路将L0~L7制成流水灯,流水方向由键盘控制,可随时切换,流水

间隔时间也由键盘控制

设计思路:选择两个按键如“1”“2”分别控制流水灯的方向,至于控制流水间隔,我的想法是通过按一次键灯移位一次,这样由两个键控制了流水灯的方向和间隔,具体程序在之前的输出地程序中进行改动编写程序:

ioport equ 0b800h-0280h ;tpc卡中设备的io地址

ls273 equ ioport+2a8h ;译码输出端地址Y5片选ls273

stacks segment stack

db 100 dup (?)

stacks ends

code segment

assumecs:code,ss:stacks

mainproc far

start:mov ax,stacks

movss,ax

mov ah,2 ;回车符

mov dl,0dh

int 21h

mov ah,1 ;等待键盘输入

int 21h

cmp al,27 ;判断是否为ESC键

je exit ;若是则退出

mov dx,ls273 ;若不是,从2A8H输出其ASCII码

outdx,al

jmp start ;转start

exit: mov ah,4ch ;返回DOS

int 21h

mainendp

code ends

end start

四.分析与总结

实验三:

通过本实验,我们进一步掌握掌握了I/O地址译码电路的工作原理,通过对I/O口的输出进行控制,从而使得D触发器的状态改变,小灯开始闪烁。这是第一次做硬件实验,要连的线不多,但是由于一开始对实验箱还是不够熟悉,有时候找不到线应该接到哪里,但是仔细研究过实验箱的结构以后,我对它的各部分组成和使用时的注意事项都有了一定的了解。另外,实验前我还对TPC设备的I/O基址和TPC卡中的PCI接口芯片的I/O地址的概念和区分一头雾水,经过实验,我对于他们分别代表什么,和在程序中如何使用有了一定的认识。

总之,这次实验跟硬件打交道让人觉得很新鲜,也很有收获,对于课本上讲授的I/O地址译码电路的工作原理有了更加深刻的认识和比较直观的感受。

实验四:

本次实验熟悉了并行输入输出电路,学会了用TD和DEBUG对I/O进行直接操作的方法,也通过编程实现实验要求加深了对于I/O操作的理解。做输出实验时,按ESC键不退出,我们把CMP AL,27改为了CMP AL,32。希望程序在按下数字键2的时候退出,结果按了2还是不退出,在老师的指导下,通过单步调试发现,按下2键,AL变为32,但是比较的那一行代码不是CMP AL,32了,而是CMP AL,20 经过研究,在debug下和TD中直接输入代码

mov al,32

cmp al,32

运行以后ZF等于1,即此时默认32都是十六进制数,但是假如像下图一样在记事本中写好这样的代码,通过编译链接,在TD打开可以看到代码的第二行变成了CMP AL,20,也就是说明这时候的32被当成10进制数来处理了。因此我们在源代码中改写成32H,这样按下数字键2就可以退出程序了。

输入实验完成比较顺利。

总之,通过这部分的实践操作,我进一步掌握了TPC实验装置的基本原理和组成结构, 熟悉测试检查TPC-PCI总线转接卡地址、I/O地址译码电路的工作原理、动态调试程序直接I/O操作方法;掌握利用I/O 指令单步调试检查硬件接口功能,学会利用示波器检测I/O指令执行时总线情况;掌握简单并行输入输出接口的工作原理及使用方法, 进一步熟悉掌握输入输出单元的功能和使用,同时也熟悉了对于软件的编写以及配合硬件的使用。

相关主题
文本预览
相关文档 最新文档