资源描述
计算机原理及接口技术
实验指导书
计算机硬件实验室
前言
本教材是与“微机原理与接口技术”课程配套的实验教材,共安排了6个实验,覆盖了普通高等学校“微机原理与接口技术”实验的基本内容,具有基础性、实用性、趣味性和提高性,为学生提高分析问题和解决问题的能力提供了一种好的途径。
本书的特点是精明简要,在保证基本实验的基础上尽量缩小篇幅,主要涉及了最常用的接口芯片实验,如定时器/计数器电路8253、并行接口电路8255、串行接口电路8251、A/D转换电路ADC0809等。书中实验程序都经调试通过。只要读懂硬件电路与相应的汇编语言程序就能顺利做出实验。本书程序框图,与汇编语言程序均已给出,可读性强,避免了学生在实验上花费大量时间。
本书以充实、巩固课程学习、培养科学实验技能和严谨的工作作风为目的,可作为普通高校计算机专业相应课程的实验教材,也可供电子工程技术人员参考。
本书由刘肃、李琦、张军老师编写,耿恒山老师进行了编审。敬请读者提出宝贵意见。
编者
2001年2月
目录
1.前言
2.汇编语言程序的建立和执行…………………………………………………(3)
3.8253计数器/定时器实验…………………………………………………(7)
4.8255A并行口实验<一>…………………………………………………(9)
5.8255A并行口实验<二>……………………………………………………(13)
6 A/D 实验 ……………………………………………………………………(14)
7.LED显示实验…………………………………………………………………(23)
8.8251A串行口实验……………………………………………………………(30)
汇编语言程序的建立和执行
《TPC—1型十六位微机实验培训系统》要求用汇编语言来编写程序。现在,我们来说明汇编语言程序从建立到执行的过程。
要建立和运行汇编语言程序,系统盘上应该首先有如下文件:
EDIT.COM 编辑程序
ASM.EXE 汇编程序
(或MASM.EXE) 宏汇编程序
LINK.EXE 连接程序
DEBUG.COM 调试程序
其中ASM.EXE是普通汇编程序,它不支持宏汇编,如果要用宏汇编,则必须用MASM.EXE。
下面,以建立和执行用户程序ABC.EXE为例来说明上机过程。
1.用EDIT命令建立汇编语言源程序(ASM文件)
源程序就是用汇编语言的语句编写的程序,它不能被机器识别.源程序必须以 ASM为附加文件名.
例如打入命令:
A>EDIT ABC.ASM (每个命令后面应输入回车,以下均如此)
此时用户可以通过编辑程序来输入用户程序ABC.ASM。至于EDIT.EXE编辑程序的使用方法,可以按F1键获取帮助。
2.用 ASM(或者MASM)命令产生目标文件[OBJ文件]
源程序建立以后,就可以用汇编程序ASM.EXE(或者MASM.EXE)进行汇编。所谓汇编,实际上就是把以 ASM为附加名的源文件转换成用二进制代码表示的目标文件,目标文件以 OBJ为附加名。汇编过程中,汇编程序对源文件进行二次扫描,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,用户可以再用编辑程序来修改源程序中的错误。最后,得到没有语法错误的 OBJ文件。
例如,对 ABC.ASM的汇编过程如下:
A >MASM ABC.ASM
此时,汇编程序给出如下回答:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp1981—1985,1987,all rights reserved,
Object filename [EX MOVS.OBJ]:
Source listing [NUL.LIST]:ABC
Cross reference[NUL.CRFI:ABC
如果被汇编的程序没有语法错误,则屏幕上还给出如下信息:
Warning Severs
Errors Errors
0 0
从上面的操作过程中可以看到,汇编程序的输入文件就是用户编写的汇编语言源程序,它必须以 ASM为文件扩展名。汇编程序的输出文件有三个:
第一个是目标文件,它以 OBJ为扩展名,产生 OBJ文件是我们进行汇编操作的主要目的,所以这个文件是一定要产生,也一定会产生的,操作时,这一步只要打人回车就行了;
第二个是列表文件,它以 LST为扩展名,列表文件同时给出源程序和机器语言程序,从而,可以使调试变得方便,列表文件是可有可无的,如果不需要,则在屏幕上出现提示信息[NUL.LIST]:时,打入回车即可,如果需要,则打入文件名和回车;
第三个是交叉符号表,此表给出了用户定义的所有符号,对每个符号都列出了将其定义的所在行号和引用的行号,并在定义行号上加上“#”号,同列表文件一样,交叉符号表也是为了便于调试而设置的,对于一些规模较大的程序,交叉符号表为调试工作带来很大方便。当然,交叉符号表也是可有可无的,如不需要,那么,在屏幕上出现提示信息[NUL.CRF]:时,打入回车即可。
汇编过程结束时,会给出源程序中的警告性错误[Warning Errors]和严重错误[Severs Errors],前者指一般性错误,后者指语法性错误,当存在这两类错误时,屏幕上除指出错误个数外,还给出错误信息代号,程序员可以通过查找手册弄清错误的性质。
如果汇编过程中,发现有错误,则程序员应该重新用编辑命令修改错误,再进行汇编,最终直到汇编正确通过。要指出的是汇编过程只能指出源程序中的语法错误,并不能指出算法错误和其他错误。
3.用 LINK命令产生执行文件(EXE文件)
汇编过程根据源程序产生出二进制的目标文件(OBJ文件),但 OBJ文件用的是浮动地址,它不能直接上机执行。所以还必须使用链接程序(LINK)将OBJ文件转换成可执行的 EXE文件。 LINK命令还可以将某一个目标文件和其他多个模块(这些模块可以是由用户编写的,也可以是某个程序库中存在的)链接起来。
具体操作如下(以对ABC.OBJ进行链接为例):
A> LINK ABC
此时,在屏幕上见到如下回答信息:
IBM 5552 Multistation Linker 2.00(C) Copyright IBM Corp.1985
Run File[ABC.EX E]:
List File[ NUL.MAP]:
Libraries[.LIB]:
Warning: NO STACK Segment
LINK命令有一个输入文件,即 OBJ文件。
LINK过程产生两个输出文件,一个是扩展名为 EXE的执行文件,产生此文件当然是LINK过程的主要目的。另一个是扩展名为MAP的列表分配文件,有人也称它为映象文件,它给出每个段在内存中的分配情况。比如某一个列表分配文件为如下内容:
Warning:NO STACK Segment
Start Stop Length Name Class
0000H 0015H 0016H CODE,
0020H 0045H 0026H DATA
0050H 0061H 0012H EXTRA
Origin Group
Program entry Point at 0000:0000
MAP文件也是可有可无的。
有时,用户程序用到库函数,此时,对于提示信息LIBRARIES[.LIB],要输入库名。
从 LINK过程的提示信息中,可看到最后给出了一个“无堆栈段”的警告性错误,这并不影响程序的执行。当然,如果源程序中设置了堆栈段,则无此提示信息。
4.程序的执行
有了.EXE文件后,就可以执行程序了,此时,只要打入文件名即可。仍以ABC为例:
A> ABC
A>
实际上,大部分程序必须经过调试阶段才能纠正程序设计中的错误,从而得到正确的结果。所谓调试阶段,就是用调试程序(DEBUG程序)发现错误,再经过编辑,汇编、链接纠正错误。关于DEBUG程序中的各种命令,可参阅 DOS手册,下面给出最常用的几个命令。
先进入DEBUG程序并装入要调试的程序ABC.EXE,操作命令如下:
A> DEBUG ABC.EXE ;进入 DEBUG,并装配ABC.EXE
—
此时,屏幕上出现一个短划线。为了察看程序运行情况,常常要分段运行程序,为此,要设立”断点”,即让程序运行到某处自动停下,并把所有寄存器的内容显示出来。为了确定我们所要设定的断点地址,常常用到反汇编命令,反汇编命令格式如下:
一U ;从当前地址开始反汇编
也可以从某个地址处开始反汇编,如下所示。
一U200 ;从 CS:200处开始反汇编
程序员心中确定了断点地址后,就可以用G命令来设置断点。比如,想把断点设置在0120H处,则如下打入命令:
—G0120
此时,程序在0120H处停下,并显示所有寄存器以及各标志位的当前值,在最后一行还给出下一条将要执行的指令的地址、机器语言和汇编语言。程序员可以从显示的寄存器的内容来了解程序运行是否正确。
对于某些程序段,单从寄存器的内容看不到程序运行的结果,而需要观察数据段的内容,此时可以用d命令,使用格式如下:
—d DS:0000 ;从数据段的零单元开始显示128个字节
在有些情况下,为了确定错误到底由哪条指令的执行所引起,要用到跟踪命令。跟踪命令也叫单步执行命令,此命令使程序每执行一条指令,便给出所有寄存器的内容。
比如:
—T3 ;从当前地址往下执行三条指令
此命令使得从当前地址往下执行三条指令,每执行一条,便给出各寄存器内容。最后,给出下一条要执行的指令地址、机器语言和汇编语言。
从DEBUG退出时,使用如下命令:
—Q
每一个有经验的程序员都必定熟练掌握调试程序的各主要命令。为此,初学者要花一定功夫查阅、掌握DOS手册中有关DEBUG程序的说明。
实验一 8253计数器/定时器实验
一、实验目的:
1.学会通过62芯总线、驱动器、译码器等,在PC/XT机外扩展新的芯片。
2.掌握8253定时器编程原理,用示波器观察不同模式下的波形。
二、实验内容:
用8253构成一个方波发生器或分频器。
1.按下图连接硬件线路:
2.编程将定时器0设为模式3(方波),定时器1设为模式2(分频),定时器0的输出脉冲作为定时器1的时钟输入。在示波器中,观察定时器0和1的输出波形及其关系。
三、程序框图:
开始
在定时器控制端口写入控制字36H
即设置定时器0为模式3
往定时器0中送初值,先送低字节F4H,
再送高字节01H,即初值01F4H
在控制端口写入控制字74H,
即设置定时器1为模式2
往定时器1中送初值,先送低字节0AH,再送高字节00,即定时器1为10分频
结束
8253控制端口地址为203H 定时器0地址为200H 定时器1地址为201H
注:CLK0连接由8MHZ时钟分频得到的250KHZ,则定时器 l输出 OUT1约为50HZ。
四、 实验报告要求:
1.编写实验程序。
2.画出OUT0、 OUT1的输出波形。
3.改变定时器0计数值为奇数(01F5)时,画出其输出波形。
4.总结模式2、模式3的工作特点。
实验二 8255A并行口实验<一>
一、实验目的:
1.掌握8255A编程原理。
2.了解键盘结构,学会读取按键的方法。
二、实验内容:
用8255来控制一个小键盘的识别。
1.线路图如下:
注:在实验台上8255A的CS端接218—21F插孔,PA0一 PA7,PB0一PB2与其旁边的插孔短接。
8255A的端口 A地址为 218H
端口 B地址为 219H
端口 C地址为 21AH
控制口地址为 21BH
2.编写程序,使得在小键盘按键后,微机屏幕上有相应字符显示出来.
三、编程指南:
1.通过采用行扫描法或行反转法,识别键盘上的闭合键。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止.
行反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式。程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如果此时有某一键被按下,则必定会使某一列线值为0。然后,程序再对两个并行端口进行方式设置,使行线上工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行端口输出,再读行线上的输入值,那么,在闭合键所在的行线上的值必定为0。这样,当一个键被按下时,必定可以读得一对唯一的行值和列值,在我们提供的程序中就采用行反转法来识别键盘按键。
2.在程序设计时,将各个键对应的代码(列值,行值)放在一个表中。程序通过查表来确定具体按下的为哪一个键。
四、程序清单
PA55 EQU 218H ;8255A的A口地址
PB55 EQU 219H ;8255A的B口地址
P55CTL EQU 21BH ;8255A的控制口地址
DATA SEGMENT
TABIE DW 0101H,0102H,0104H,0108H,0110H,0120H,0140H,0180H
DW 0201H,0202H,0204H,0208H,0210H,0220H,0240H,0280H
DW 0401H,0402H,0404H,0408H,0410H,0420H,0440H,0480H
CHAR DB ‘CDEFBA9845673210 RPMG’ ;字符码表
MES DB ‘PLAY ANY KEY IN THE SMALL KEYBOARD!’,
0AH,0DH
DB ‘IT WILL BE ON THE SCREEN! END WITH R’,
0AH,0DH,’$’
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ;DS指向数据段
MOV DX,OFFSET MES
MOV AH,09 ;显示提示信息
INT 21 H
KY: CALL KEY ;调键盘扫描子程序,健入
字符的ASCII码在DL中
CMP DL,‘R’ ;键入的字符不是结束字符
JNZ KY ‘R’, 则转 KY继续
MOV AX,4C00H ;返回 DOS
INT 21 H
RET
MAIN ENDP
KEY PROC NEAR ;键盘扫描子程序,键人字
符的ASCII码送 DL中
KST: MOV AL,82H
MOV DX,P55CTL ;设置8255A的控制字,均
OUT DX,AL 工作于方式0,端口A为 输出,B为输入
WAIT1: MOV AL,00
MOV DX,PA55 ;端口 A输出全0
OUT DX,AL
MOV DX,PB55 ;从端口B读入列值
IN AL,DX
CMP AL,0FFH ;若为0FFH,则说明无键
JZ WAIT1 按下,转 WAIT1
PUSH AX ;入栈保存列值
PUSH AX
MOV CX,1000H
DLY: LOOP DLY ;延时去抖动
MOV DX,P55CTL
MOV AL,90H ;设置8255A的控制字,均
OUT DX,AL 工作于方式0,端口A为
输入,B为输出
MOV DX,PB55
POP AX ;从端口B输出列值
OUT DX,AL
MOV DX,PA55 ;从端口A读进行值
IN AL,DX
POP BX ;列值送 AH中
MOV AH,BL
NOT AX ;行、列值取反
MOV SI,OFFSET TABLE ;扫描码表首址
MOV DI,OFFSET CHAR ;字符码表首址
MOV CX,24 ;小键盘共3×8=24健
TT: CMP AX,[SI] ;扫描码相符则转 NN
JZ NN
DEC CX ;计数值减1
JZ KST ;已全部比较完,仍不相符
则转 KST
ADD SI,2 ;修改指针
INC DI
JMP TT ;继续比较
NN: MOV DL,[DI]
MOV AH,02 ;显示该扫描 码对应字符
INT 21 H
PUSH DX ;字符 ASCII码入栈保存
MOV AL,82H
MOV DX,P55CTL ;设置8255A控制字,均工
OUT DX,AL 作于方式0,端口A为输
出,B为输人
WAIT2: MOV AL,00
MOV DX,PA55 ;端口A输出全0
OUT DX,AL
MOV DX,PB55 ;从端口 B读进列值
IN AL,DX
CMP AL,0FFH ;有键按下则转WAIT2等
待释放
JNZ WAIT2
POP DX ;退栈
RET
KEY ENDP
CODE ENDS
END START
五、 实验报告要求:
1.参考实验程序画出流程图。
2.用行扫描法编写实验程序,并进行调试。
3.写出实验心得体会。
实验三 8255A 并行口实验< 二 >
一、实验目的:
掌握通过8255并行口传输数据的方法,读取开关的数据,控制LED发光二极管的亮灭。
二、实验内容:
编写一个开关量控制程序。
1.输入开关状态全为0时,PA口上发光二极管循环轮流点亮。
2.当开关处于非全0时,则直接把开关状态在发光二极管上显示出来。
三、实验步骤:
1. 将8255的PA0~PA7与LED1~LED8,PC4~PC7与LED9~LED12相连。
将8255的PB0~PB7与KEY1~KEY8,PC0~PC3与KEY9~KEY12相连。
2. 编写程序,为8255初始化,使三个端口均工作在方式0,设A组为输出状态,B组为输入状态,根据实验内容调试程序,完成实验要求。
四、编程提示:
各LED为共阳极发光二极管,使其点亮应使8255相应端口的相应位清0。
五、实验报告要求:
1.画出实验线路图。
2.编写程序并绘制流程图。
3.通过实验总结8255的三种工作方式。
展开阅读全文