微机原理及应用实验简.docx
- 文档编号:15289821
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:81
- 大小:703.50KB
微机原理及应用实验简.docx
《微机原理及应用实验简.docx》由会员分享,可在线阅读,更多相关《微机原理及应用实验简.docx(81页珍藏版)》请在冰点文库上搜索。
微机原理及应用实验简
微机原理及应用
实验指导书
孟志华编写
目录
《微机原理及应用》课程实验操作说明1
实验一DEBUG的基本调试命令3
实验二循环结构程序设计11
实验三排序结构程序设计13
实验四子程序设计15
实验五系统功能调用19
实验六8253定时/计数器的应用22
6.0基础知识22
6.1实验18253的工作方式及基本应用24
6.2实验28253应用——分频器25
6.3实验38253应用——双路时钟电路26
实验七8255A并行通信接口的应用30
7.0基础知识30
7.1实验18255A工作方式0、1的基本应用32
7.2实验28255A应用——交通灯控制35
7.3实验38255A应用——键盘输入38
实验八ADC0809模数转换器的应用44
8.0基础知识44
8.1实验1ADC0809的基本应用45
8.2实验2ADC0809应用——数字录音47
实验九8255A与ADC0809的综合应用51
《微机原理及应用》课程实验操作说明
实验箱说明
实验箱选用的是由武汉恒科公司生产的EPC-1000型PC104总线结构的实验箱。
实验箱表面安装有一个凸起的工控机集成控制模块,其中初装了一个基本的DOS操作系统,并提供2M的电子硬盘。
实验箱中只提供基本的功能单元并预留了部分插座。
主要的外围接口芯片在需要使用时,可将芯片直接插入相应的预留插座,然后自行连接系统设计所需的三大总线。
实验箱系统没有鼠标功能,需要外接一个102键的键盘,来实现字符输入。
同时需要接入一个显示器,来实现显示输出。
实验箱的面板上有两个开关,左边绿色灯亮的开关主管工控模块,即操作系统。
右边红色灯亮的开关用来给外围芯片供电。
汇编语言程序设计部分(软件)
使用任何语言进行程序设计的第一步都是确定需要解决问题的目标,然后根据目标设计出结构框图,然后才是根据框图设计、调试程序。
使用汇编语言进行程序设计包括以下几个步骤。
1.使用EDIT或EDITPLUS等编辑软件编辑、修改、生成汇编语言源程序(ASM文件);
2.使用MASM或TASM编译软件对源程序进行编译,生成目标代码文件(OBJ文件);
3.使用Link或Tlink连接程序,将目标代码文件连接成可执行文件(EXE或COM);
4.利用Debug调试程序,检验可执行文件的运行情况(Debug的功能及用法将在后面加以详细的介绍)。
在第二、三、四步如发现错误都要返回第一步,对源文件进行修改,然后重复以上过程,直到程序能正确运行为止,其过程可用流程图表示如下:
具体使用方法如下:
1、打开工控模块系统开关,编辑程序(编辑工具:
EDIT)。
输入源程序并保存,后缀名为.ASM。
2、编译程序。
在DOS状态下,用MASM.EXE编译源程序。
编译无错误后,会生成相应的OBJ目标文件和交叉文件。
我们需要的是OBJ文件。
如果是利用PC机来调试汇编程序需要另外注意:
操作系统为WIN2K,XP等的机器要求用MASM6.0以上版本。
格式:
MASMEXAM1.ASM或MASMEXAM1.ASM;
如果结尾不加分号,那么回车后会有一个提示,提示将要生成的OBJ文件名和其他相应的一些文件名是什么?
可以一路回车取默认值,即与源文件同文件名。
如果加上分号后,可避免这些提示。
直接生成同文件名的OBJ文件。
3、连接程序。
用LINK.EXE连接OBJ文件,生成可执行的EXE文件。
格式:
LINKEXAM1.OBJ或LINKEXAM1.OBJ;(区别同上)
如果源程序中无堆栈段,则在连接完后,有一个警告提示,提示程序无堆栈段,此处警告可忽略。
4、运行并调试程序。
根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件装入内存后,用G命令运行。
例:
C:
\>DEBUG文件名.EXE
-U;先用反汇编命令查看程序装入的地址和数据段的地址
:
-G=xxxx:
xxxx;从程序被装入的地址处,开始运行程序
5、查看程序运行结果。
6、PC机也可使用EMU8086软件对汇编程序进行调试和运行。
(使用方法此处省略)
外围芯片接口部分(硬件)
操作步骤:
1、编辑和调试程序。
在实验箱所提供的DOS环境中对源程序进行编辑和调试。
2、连线。
利用所提供的连接线将外围芯片需使用到的三大总线与实验箱系统总线对应相连。
3、运行程序,并查看运行结果。
4、程序运行结果不正确时,对程序和硬件连接线路进行检查。
找出错误并调整后,重新运行程序,直到结果正确(注意检查连接线的好坏)。
5、实验箱提供多处电源和地的接入点,可直接使用。
6、实验箱提供了部分74系列的数字逻辑芯片,根据需要选用。
实验一DEBUG的基本调试命令
一、实验目的
掌握DEBUG调试软件的基本命令。
为今后编程调试,打下基础。
二、实验仪器、设备
计算机或EPC-1000型嵌入式微机实验仪。
三、实验内容
DEBUG.EXE是专门为分析、研制和开发汇编语言程序而设计的一种调试工具。
是DOS的一个外部命令。
具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。
它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。
WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。
1、DEBUG的启动
在DOS提示符下键入命令:
C:
\>DEBUG[盘符:
][路径][文件名][.EXE/COM]↙
例如:
DEBUGC:
\TEST.EXE↙
这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG进行程序调试。
在计算机不带调试文件进入DEBUG后,IP寄存器为100H,DS,ES,SS,CS为相同的值,此时可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序,如果命令行中有文件名,则DOS把DEBUG程序调入内存后,再由DEBUG将指定的文件装入内存。
DEBUG的相关命令在“-”标志后进行输入。
2、DEBUG的常用命令
(1)汇编命令A
格式:
A↙或A[起始地址]↙;每输入完一条指令,用回车键来确认。
功能:
将输入的源程序指令汇编成目标代码并从指定地址单元开始存放。
若缺省起始地址,则从当前CS:
100(段地址:
偏移地址)地址开始存放。
A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。
如有错误,用^Error提示。
然后重新输入正确指令即可。
例:
我们利用A命令将下段程序送入当前CS段,偏移量为100内存中,其操作如下:
-A100
181d:
0100MOVAL,0;181d为系统自动分配的存储单元段地址,0100为
指定的偏移地址
:
0102MOVDI,200H
^Error程序中接收16进制数,但不带H标志
:
0102MOVDI,200
181D:
0105MOVCX,65;65为十进制数101
181D:
0108LL:
MOV[DI],AL
^Error程序中不认符号地址
:
0108MOV[DI],AL
:
010AINCAL
:
010CLOOPLL
^Error程序中不认符号地址
:
010CLOOP0108
181D:
010E
从以上程序的输入情况可以看出在A命令下输入程序时,所有数据为十六进制数,且在数据尾端不加十六进制数标志符H,在程序中不认符号地址,跳转指令的入口地址必须是其绝对地址。
程序输入完后,可用反汇编U命令来查看程序。
(2)反汇编命令U
格式:
U[起始地址]↙或U[起始地址][结束地址]↙
功能:
从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:
IP开始反汇编,或将指定范围内的存储单元中的目标代码转换成汇编指令。
若要继续反汇编,直接输入U↙,DEBUG自动从上次反汇编命令最后一条指令的下一条指令地址开始进行反汇编。
例:
对上述输入程序进行反汇编
-U181D:
0100↙
段地址:
偏移地址机器码汇编语句
181D:
0100B000MOVAL,00
181D:
0102BF0002MOVDI,0200
181D:
0105B96500MOVCX,0065
181D:
01088805MOV[DI],AL
181D:
010AFEC0INCAL
181D:
010CE0FALOOPNZ0108
181D:
010EXXXXXXX
说明:
当用DEBUG文件名的方式把一个外部文件装入内存后,可用U命令来查看程序装载的入口地址。
(3)显示、修改寄存器命令R
格式:
R[寄存器名]或R↙
功能:
若给出寄存器名,则显示该寄存器的内容并可进行修改。
缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
-R↙
AX=0000BX=0004CX=0020DX=0000SP=0080BP=0000SI=0000
DI=0000DS=3000ES=23A0CS=138EIP=0000
NVUPDIPLNZNAPONC
138E:
0000B83412MOVAX,1234
若要修改寄存器AX的内容,可按如下操作:
-RAX;输入命令
AX0000;显示当前AX的内容
:
;供修改,不修改,按回车键。
若要修改AX为059F
-RAX↙
AX0000
:
059F↙;则把AX寄存器的当前内容修改为059F。
若对标志寄存器进行修改,输入:
-RF
屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。
NVUPDIPLNZNAPONC
不修改按回车键。
要修改需个别输入一个或多个此标志的相反值,再按回车键。
R命令只能显示、修改16位寄存器。
其中标志位状态的含义可见下表:
标 志 名
标志为1
标志为0
OF
DF
IF
SF
ZF
AF
PF
CF
溢出(是/否)
方向(减量/增量)
中断(允许/关闭)
符号(负/正)
零(是/否)
辅助进位(是/否)
奇偶(偶/奇)
进位(是/否)
OV
DN
EI
NG
ZR
AC
PE
CY
NV
UP
DI
PL
NZ
NA
PO
NC
(4)显示存储单元命令D
格式:
D[起始地址]↙或D[起始地址][结束地址]↙
功能:
从起始地址开始按十六进制显示80H(128)个单元的内容,每行16个单元,共8行,或显示指定范围内存储单元的内容。
如果缺省起始地址或地址范围,则从当前的地址开始显示。
注:
查看程序指令用U命令,查看程序运行结果(数据)用D命令查看。
例如:
格式1:
-D100;从DS:
0100H开始显示128个单元内容,假设当前DS=067c
格式2:
-D100120;显示DS:
0100-DS:
0120区间单元的内容
格式3:
-D067c:
0100067c:
0120功能同上
067C:
0100 C7D70D0A32333334-D5C5B4C63010420C ....2334....0.B.
067C:
0110 0341424344454647-48494A4B4C4D4E4F .ABCDEFGHIJKLMNO
067C:
0120 8B
说明:
左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,“.”表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果完全没有指定地址,则显示上一个D命令的最后一个单元的内容。
在存储器里以字节为单位存储信息。
为了正确地存放或取得信息,每一个字节单元给以一个存储器地址。
地址从0开始编号,顺序地每次加1。
在机器里,地址也是用二进制数来表示的。
它是无符号整数,书写格式为十六进制。
16位二进制可以表示2的16次方个字节单元的地址,它可表示的地址范围应该是0-65535。
为方便,存储器的容量以2的10次方=1024为基本单位,称为1K。
这样,65536个字节单元的存储容量就是64K,其地址编号的范围用16进制数表示为0-FFFFH。
如下所示。
0000,0001,0002,……,……,……0009,000A,000B,000C,000D,000E,000F,
0010,0011,0012,……,……,……0019,001A,001B,001C,001D,001E,001F,
0020,0021,0022,……,……,……0029,002A,002B,002C,002D,002E,002F,
……
FFE0,FFE1,FFE2,……,……,……FFE9,FFEA,FFEB,FFEC,FFED,FFEE,FFEF,
FFF0,FFF1,FFF2,……,……,……FFF9,FFFA,FFFB,FFFC,FFFD,FFFE,FFFF。
一个字存入存储器要占用相邻的两个字节。
存放时,低位字节存入低地址,高位字节存入高地址,以相反的次序存入的。
(5)修改存储单元命令E
格式:
E[起始地址][内容表]↙或E[地址]↙
功能:
按内容表的内容修改从起始地址开始的多个连续存储单元内容(即用内容表指定的内容来代替当前存储单元的内容)或逐个修改指定地址单元的当前内容。
例1:
-EDS:
0100'ABC'1234↙
表示从DS:
0100为起始单元的连续五个字节单元的内容依次被修改为:
'A'、'B'、'C'、12H、34H(即41H42H43H12H34H)
例2:
-E156F:
0010↙
156F:
001041.5F
其中156F:
0010单元原来的值是41H,5FH为输入的修改值。
若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就会显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。
如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。
(6)运行命令G
格式:
G=[起始地址][断点地址1][断点地址2]..↙或G=地址↙
功能:
CPU从指定起始地址开始执行程序语句,直到断点地址处结束或从指定地址开始运行程序。
例段地址:
偏移地址机器码汇编语句
181D:
0100B000MOVAL,00
181D:
0102BF0002MOVDI,0200
181D:
0105B96500MOVCX,0065
:
:
-G=181D:
01000102↙AL的内容按要求被修改成00,DI的内容并未修改。
-G0105↙DI的内容被修改为200
-G=181D:
0100↙从181D:
0100处开始执行程序,直到程序中的结束指令处,如果程序中没有结束命令则会越过程序,一直往下运行很可能会造成死循环并死机。
因为存储单元中除了程序外还有很多随机数,这些随机数会被转换成相应的一些程序代码。
因而,除非确保程序中有结束命令,否则用G=[起始地址][末地址]的方式运行程序。
(7)跟踪命令T
格式:
T=[起始地址][正整数]或T正整数↙
功能:
从指定地址开始连续执行‘正整数’条指令。
若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:
IP指示地址开始执行一条指令。
在程序调试过程中特别是在较大的程序调试中,G命令和T命令交叉使用可以较快地发现问题。
(8)指定文件命令N
格式:
N[路径][文件名][.扩展名]↙
功能:
指定即将调入内存或从内存写入磁盘的文件名。
该命令应该用在L命令和W命令之前。
用N命名的文件可以无后缀名,但如果是程序通常是.COM但不能是.EXE,如果是数据是.DAT。
在程序调试完成后为了保存文件,不致于关机后文件丢失,我们可以将通过A汇编所产生的目标文件存入磁盘中。
一个文件要存入磁盘首先要告诉计算机,文件的长度,其次要告诉计算机文件的名称,以及文件起始地址。
(9)写磁盘命令W
格式1:
W<起始地址>[驱动器号]<起始扇区><扇区数>↙
格式2:
W[起始地址]↙
功能:
将正在调试的程序或数据写到磁盘中。
注:
在用W命令前,以N命名命令指定一个文件名,用R命令修改寄存器BX和CX的内容为新写文件的长度。
如W命令中缺省地址项,则地址以CS:
100为起始地址,否则以指定地址为待写数据的起始地址。
将内存中指定范围内一段存储单元的内容保存成硬盘中指定的文件。
指定的范围也就是文件的大小要先送到BX和CX寄存器中,即从程序起始地址开始将BX×10000H+CX个字节的内容存放到由N命令指定的文件中。
BX中存放程序段地址的末地址与首地址的差(通常程序都存放在一个段中,即BX=0),CX中存放偏移地址的末地址与首地址的差+1。
以A命令中的程序为例:
程序从地址181D:
0100开始,到181D:
010D结束,则BX的内容为段地址差181D-181D=0000,CX的内容为偏移地址差010D-0100+1=000E。
通常CX的长度,可以直接通过程序最后一条指令的下一条随机指令的首地址来计算,即010E-0100=000E。
-NEXM.COM↙先给文件命名
-RBX↙指定文件长度
BX:
0000
:
0000
-RCX↙
CX:
003C
:
000E
-W181D:
0100↙指定程序的首地址
Writing0000Ebytes
(10)装入命令L
格式:
L[起始地址]↙或L↙
功能:
将由N命令指定的文件装入到内存中指定起始地址的存储区。
若省略起始地址,则装入到CS:
100处或按原来文件定位约定装入到相应位置。
例1:
-ND:
\TEST.COM将TEST.COM程序装入内存
-L↙
-U↙装入后用U命令查看程序装载地址
注:
装载的如果是一段程序则装载的地址必须和写入时一致,如不确定地址,在L后可不加入地址,由系统指定地址。
如果是数据文件则无此要求。
例2:
-ND:
\TEST.DAT
-LDS:
200↙将TEST.DAT数据文件装入到内存DS:
200处
(11)输入指令I
格式:
I[端口地址]↙
功能:
I/O端口访问,从指定的端口输入并显示一个字节。
(12)输出指令O
格式:
O[端口地址][字节]↙
功能:
I/O端口访问,发送字节到指定的输出端口。
(13)十六进制算术运算命令H
格式:
H[十六进制数][十六进制数]↙
功能:
将两个十六进制数相加和相减,其结果在下一行中显示出来。
例:
-H3F01↙
0040003E
(14)传送命令M
格式:
M[范围][地址]↙
功能:
将某一指定的存储区的内容拷贝至另一指定的存储区。
例:
将程序所生成的数据拷贝到以300为起始地址的存储区中
-MDS:
200264300↙
用DDS:
300364查看拷贝结果。
为了验证拷贝是否完全正确DEBUG下提供了一比较命令C。
(15)比较命令C
格式:
C[范围][地址]↙
功能[:
比较两存储块的内容。
例:
对上面新拷贝的数据进行比较
-CDS:
200264300↙
假如存储块中有一两个单元的内容不一样结果又如何呢?
可用E命令改变存储单位的内容。
(16)检索命令S
格式:
S[范围][清单]↙
功能:
在指定存储区中检索清单中的字符(串)。
例:
-SDS:
300400“ABCD”↙
除了前面提到的E命令可修改存储单位内容外F命令也可对存储单元进行修改。
(17)填写命令F
格式:
F[范围]][清单]↙或F[起始地址][L字节个数][清单]↙
功能:
用清单中的值填写指定范围内的存储单元。
例1:
-FDS:
40041FF3“XYZ”ZA
用0F3H,58H,59H,5AH,2AH字符串重复填写以DS:
400~41F为起始地址的20H个单元,可执行
-DDS:
400观察结果
例2:
-FDS:
500L10“XYZ”10是10H,即16个字节
用58H,59H,5AH重复填写DS:
0500-DS:
0510单元。
(18)退出命令Q
格式:
Q↙
功能:
退出DEBUG,返回到操作系统。
以上介绍的是DEBUG常用命令,其他命令请参考相关书籍。
练习程序:
1、将0-99这100个数依次存放到1000:
0000为首地址的存储单元中。
xxxx:
0100MOVAX,1000;数据段地址
MOVDS,AX
XORBX,BX;清零
MOVCX,0064;置循环次数
MOVAL,00
xxxx:
010CMOV[BX],AL
INCAL
DAA;加法的十进制调整
INCBX
LOOP010C;跳转到010c处
INT03
所对应的宏汇编格式的程序:
DATASEGMENT
32DWDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,1000H
MOVDS,AX
XORBX,BX
MOVCX,0064H
MOVAL,00H
A1:
MOV[BX],AL
INCAL
DAA
INCBX
LOOPA1
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
四、实验步骤
通过练习程序,熟悉相关的DEBUG命令。
(1)用A命令逐条输入程序语句;
(2)用U命令检查程序输入情况;
(3)保存该程序到硬盘中;
1>先计算该段程序的大小(末地址减首地址加1),分别在BX和CX送入相应的数值;
2>用N命令给程序起文件名;
例:
-NC:
\STU\文件名.COM↙此时保存的文件后缀名只能是.COM。
3>用W命令将程序写入到一个指定的目录下的文件或由计算机的默认路径选择目录。
例:
-Wxxxx:
xxxx或-W↙此时可检查指定路径的文件是否生成。
(4)用Q命令退出DEBUG环境;
(5)用DEBUG路径:
\文件名.COM的格式,将刚才生成的文件重新装入到内存中;
(6)用U命令,查看程序转载的地址;
(7)用G命令运行程序;
例:
-G=xxxx:
xxxx从程序装载处的地址开始运行
(8)查看运行结果。
结果在寄存器中,用R命令查看,结果在存储单元中,用D命令查看。
五、实验报告要求
参考前言内相关部分内容。
六、实验注意事项
要注意针对寄存器和内存单元处理命令的区别。
保存内存数据到文件时,要注意BX的大小是否正确,否则会使生成的数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 应用 实验