微机原理报告.docx
《微机原理报告.docx》由会员分享,可在线阅读,更多相关《微机原理报告.docx(30页珍藏版)》请在冰豆网上搜索。
微机原理报告
第一部分接口实验
实验一使用ADC0809的A/D转换实验
一、实验目的
加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。
二、实验步骤
1、正确连接好实验线路
2、理解实验原理
3、仔细阅读,弄懂实验程序
4、安装软件
三、实验结果
■打开实验源文件:
在文件(FILE)栏目下选择打开(OPEN),在本软件所在的安装目录中8HASM子目录下选择源程序,如选H0809.ASM,屏幕上出现源文件窗口)。
■编译、连接并装载目标文件:
点击调试图标,对当前源文件窗口内的源文件进行编译、连接并装载到实验板的RAM中。
目标文件装载起始地址默认为源文件中ORG定义的程序段起始地址。
在反汇编窗口内显示刚才装入的程序,并有一红色小箭头指示在起始程序行上。
■运行程序:
点击运行图标,在数码管上应显示“0809-XX”。
■调节电位器WD1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。
用ADC0809做A/D转换,其模拟量与数字量对应关系的典型值为+5V-FFH,2.5V-80H,0V-00H。
实验结果如图所示,实验成功。
实验二使用DAC0832的D/A转换实验
(一)
一、实验目的
熟悉DAC0832数模转换器的特性和接口方法,掌握D/A输出程序的设计和调试方法。
二、实验步骤
1、根据原理图正确连接好实验线路
2、正确理解实验原理
3、运行实验程序
用示波器测量DOUT插孔,应有方波输出,方波的周期约为1ms。
三、实验结果
用示波器测量DOUT插孔,应有方波输出,方波的周期约为1ms。
实验结果如图所示,实验成功。
实验三使用DAC0832的D/A转换实验
(二)
一、实验目的
进一步掌握数/模转换的基本原理。
二、实验步骤
1、根据原理图正确连接好实验线路。
2、运行实验程序
三、实验结果
用示波器测量DOUT插孔,应有锯齿波输出。
实验结果如图所示,实验成功。
实验四8255A可编程并行口实验
(一)
一、实验目的
1、掌握并行接口芯片8255A和微机接口的连接方法。
2、掌握并行接口芯片8255A的工作方式及其编程方法。
二、实验步骤
1、按实验图连好线路。
2、运行实验程序,拨动K1~8,L0~L7会跟着亮灭。
三、实验结果
运行实验程序,拨动K1~8,L0~L7会跟着亮灭。
实验结果如图所示,实验成功。
实验五8253A定时/计数器实验
一、实验目的
学习8253A可编程定时/计数器与8088CPU的接口方法;了解8253A的工作方式;掌握8253A在各种方式下的编程方法。
二、实验步骤
1、按图连好实验线路
2、运行实验程序
3、用示波器测量8253A的OUT2输出插孔,应有频率为1KHZ的方波输出,幅值0~4V。
三、实验结果
实验结果如图所示,实验成功。
实验六使用8259A的单级中断控制实验
一、实验目的
1、掌握中断控制器8259A与微机接口的原理和方法。
2、掌握中断控制器8259A的应用编程。
二、实验步骤
1、按图6-2连好实验线路
2、运行实验程序
在数码管上显示“8259-1”。
3、按AN按键,每按一次产生一次中断,在显示器左边一位显示中断次数,满5次中断,显示器显示“8259good”。
三、实验结果
正确连接线后,数码管显示8259—01,按AN后,显示器没有变化。
反复分析后觉得实验没有错误,可能是实验板IRQ3插孔损坏。
实验七小直流电机调速实验
一、实验目的
1、掌握直流电机的驱动原理。
2、了解直流电机调速的方法。
二、实验步骤
1、确认连线正确性。
2、从起始地址开始连续运行程序,观察直流电机的转速。
三、实验结果
实验结果如图所示,实验成功。
实验八用D/A、A/D实验闭环测试
一、实验步骤
1、加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。
2、熟悉DAC0832数模转换器的特性和接口方法,掌握D/A输出程序的设计和调试方法。
二、实验步骤
1)正确理解实验原理。
2)连接好实验线路。
3)运行实验程序,观察运行结果。
三、实验结果
实验结果如图所示,实验成功。
实验九用0832和8255实现对直流电机的调速控制
一、实验目的
1、掌握直流电机的驱动原理。
2、了解直流电机调速的方法。
二、实验步骤
1.连好实验线路。
2.运行实验程序,观察实验结果。
三、实验结果
实验结果如图所示,实验成功。
实验十计数器实验
一、实验目的
1、掌握8259中断控制器的接口方法.
2、掌握8259中断控制器的应用编程.
二、实验步骤
1、连好实验线路。
2、运行实验程序,在显示器上上显示"8259-1"。
3、按AN按键,每按二次产生一次中断,在显示器左边一位显示中断次数,计数值在十进制内循环显示。
三、实验结果
正确连接线后,数码管显示8259—01,按AN后,显示器没有变化。
反复分析后觉得实验没有错误,可能是实验板IRQ3插孔损坏。
第二部分Debug实验
1、实验目的
1、掌握进入和退出DEBUG程序的方法
2、掌握DEBUG中的a命令、t命令、u命令等的使用
二、实验内容
(1)进入debug
(2)输入a执行命令,能将指令直接汇编成机器码输入到内存中。
输入程序代码
Movax,1000
Movbx,2000
Pushax
Poshbx
Popax
Popbx
执行t命令,逐条跟踪程序的执行,每条指令执行后都显示各寄存器的内容,如果指定起始地址,则t命令会从指定的地点开始跟踪,我们还可以指定跟踪一次所运行指令的个数。
(3)G指令执行汇编命令功能:
执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。
说明:
如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。
如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。
(4)U对机器代码反汇编显示
(5)R命令功能:
一,显示单个寄存器的内容,并提供修改功能。
二,显示所有寄存器内容,再加上字母标志位状态以及要执行的下一条指令。
三,显示8个标志位状态,并提供修改功能。
若不想改变则回车即可。
Rcx将寄存器的值设为100
最后执行r命令观看修改后的寄存器值
(6)D命令显示内存区域的内容
最左边是内存的起始地址,中间以16进制形式显示内存值,从指定内存单元开始的128个内存单元的内容,最右边以ascll码的形式显示内存
查看内存13b7h处的内容,d段地址:
偏移地址
(7)E指令改变内存单位的内容
格式E起始位置
按空格键继续按连续的两个空格跳到后一个字节
综合应用
1.实验内容:
设在A,B和C单元中分别存放着一个数。
若三个数都不是0,则求出三数之和并存放于D单元中;若其中有一个为0,则把其他两个单元也清零。
2.实验分析:
在A,B和C单元中分别存放着一个数,分别将A,B,C与0进行比较,有0则跳转到NEXT,将A,B,C清零;没0则将A,B,C相加,结果存放在D。
3.源代码:
datesegment
adw2
bdw3
cdw1
ddw0
dateends
codesegment
mainprocfar
assumecs:
code,ds:
date
start:
pushds
subax,ax
pushax
movax,date
movds,ax
begin:
cmpa,0
jenext
cmpb,0
jenext
cmpc,0
jenext
movax,a
addax,b
addax,c
movd,ax
jmpshortexit
next:
mova,0
movb,0
movc,0
exit:
ret
mainendp
codeends
endstart
4.实验截图:
5.结果分析:
(1)第一个实验图:
A,B,C分别为2,3,1理论计算A=2,B=3,C=1,D为6。
结果保存在DS中,查看DS寄存器的值,结果正确。
(2)第二个实验图:
A,B,C分别为0,3,1,理论计算A=0,B=0,C=0,D为0。
结果保存在DS中,查看DS寄存器的值,结果正确。
第三部分汇编语言程序调试实验
实验一
1.实验内容
通过查表,实现一位0~9十进制数转换为对应格雷码显示。
2.源代码
数据段
DSEGSEGMENT'DATA'
;TODO:
addyourdatahere!
!
!
!
TABDB18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H
NUMDB05H,08H
DSEGENDS
SSEGSEGMENTSTACK'STACK'
DW100hDUP(?
)
SSEGENDS
代码段
CSEGSEGMENT'CODE'
;*******************************************
STARTPROCFAR
;StorereturnaddresstoOS:
PUSHDS
MOVAX,0
PUSHAX
;setsegmentregisters:
MOVAX,DSEG
MOVDS,AX
MOVES,AX
;TODO:
addyourcodehere!
!
MOVBX,OFFSETTAB
MOVAL,NUM
ANDAL,0FH
XLAT
MOVDL,AL
MOVAH,2
INT21H
MOVAL,NUM+1
ANDAL,0FH
XLAT
MOVDL,AL
MOVAH,2
INT21H
;returntooperatingsystem:
RET
STARTENDP
;*******************************************
CSEGENDS
ENDSTART;setentrypoint.
CSEGSEGMENT'CODE'
;*******************************************
STARTPROCFAR
;StorereturnaddresstoOS:
PUSHDS
MOVAX,0
PUSHAX
;setsegmentregisters:
MOVAX,DSEG
MOVDS,AX
MOVES,AX
;TODO:
addyourcodehere!
!
MOVBX,OFFSETTAB
MOVAL,NUM
ANDAL,0FH
XLAT
MOVDL,AL
MOVAH,2
INT21H
MOVAL,NUM+1
ANDAL,0FH
XLAT
MOVDL,AL
MOVAH,2
INT21H
;returntooperatingsystem:
RET
STARTENDP
;*******************************************
CSEGENDS
ENDSTART;
3.实验截图
实验二
实验目的:
1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程。
实验要求:
将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。
结果显示在屏幕上。
实验步骤:
实验程序如下:
DATASSEGMENT
num1db'3','2','4','5','0';被加数
num2db'2','6','7','1','0';加数
sdb'5423+1762=$';显示的公式形式,$表示输出结束
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
DATAS
START:
MOVAX,DATAS
MOVDS,AX;DS指向数据段
movES,AX;ES指向数据段
movcx,5;5次循环
leadx,s;要显示的字符串的首偏移地址
movah,9h;9号DOS功能调用显示字符串s
int21h
movsi,offsetnum1;si指向num1首地址
movdi,offsetnum2;di指向num2首地址
clc;清零进位寄存器CF
adds:
LODSB
adcal,[di];有符号加法
aaa;调整ASCII码加法结果指令
stosb;所得结果以字节为单位存储到数据段di指向的位置,di+1
loopadds;循环知道cx为零,cx-1
movah,02h;以下为输出加法结果
movcx,5;共有5位数循环5次
adjust:
movdl,[di-1]
ordl,30h;二进制数转换成其相应ASCII码
decdi;输出下一位
int21h
loopadjust
MOVAH,4CH
INT21H;21号功能调用程序退出
CODESENDS
输入程序编译成功以后,显示如下图:
实验总结:
1、通过实验,学会了使用汇编语言实现多位十进制数的相加运算。
2、实验中应注意,在声明data的部分数字的顺序和实际中数字的顺序是相反的,因为存储器是从低位到高位存储的。
3、要为DATAS段指定两个段寄存器DS和ES分别存放加数和被加数,同时相加结果也存放在ES段中。
4、了解LODSB的用法,每次循环后SI都会自动加一,与此类似的STOSB使用时,寄存器DI指向的地址也会自动后移一位。
5、通过实验,我还了解了ASCII码到BCD码运算的转变,以及运算结果的BCD码通过调整转变成ASCII码存储和显示。
实验三两数字相乘
实验目的:
掌握乘法指令的用法
实验要求:
实现一个多位十进制数和一个一位十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,结果显示在屏幕上
实验步骤:
实验程序如下:
DATASEGMENT
ADB'5','7','4','1','3';被乘数
BDB'7';乘数
MDB6DUP(0);6位字节型存储单元
SDB'31475*7=$';输出的公式
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
CLD;将方向标志寄存器DF清零,指令LODSB和STOSB中di,si做自增1的处理
MOVSI,OFFSETA;A为源操作数
MOVDI,OFFSETM;B为目的操作数
MOVCX,5
ANDB,0FH;将ASCII码数据转换成二进制形式
MOVBYTEPTR[DI],0
L1:
moval,[si];乘数与被乘数相乘
LODSB
ANDAL,0FH
MULB
AAM
ADDAL,[DI]
AAA
mov[di],al
incdi
STOSB
MOV[DI],AH;结果的存储
incsi
LOOPL1
MOVDX,OFFSETS
MOVAH,9
INT21H
MOVCX,6
L2:
MOVDL,[DI]
ADDDL,30H
MOVAH,02H
INT21H;显示所得数据
DECDI
LOOPL2
MOVAX,4CH
INT21H
CODEENDS
ENDSTART
实验结果如下图所示:
总结:
1、通过实验学会了,使用汇编语言完成相乘运算。
2、试验中通过设定CX的值控制循环的次数。
3、在LODSB和STOSB指令中,SI和DI会每次自动增加1。
4、在A串中,由于数据是按从低地址到高地址的顺序存放的,所以ADB'5','7','4','1','3'其实表示的是31475。
5、程序的L2循环使得所存二进制数据转换成相对应的ASCII码,并通过DOS功能调用输出。
实验四
实验目的
从键盘输入一个字符串,将其中小写字母转换为大写字母,然后显示。
该程序的执行,首先要判断输入字符是否为小写字母(ASCII码61H~7AH),如果是,则转换为大写字母(ASCII码41H~5AH)。
程序源代码:
DATASEGMENT
KEYNUM=255
KEYBUFDBKEYNUM
DB0
DBKEYNUMDUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVDX,OFFSETKEYBUF;用DOS的0AH号功能调用;输入一个字符串
MOVAH,0AH
INT21H;回车符结束
MOVDL,0AH;换行,用来在下一行显示转变换后的字符串
MOVAH,2
INT21H
MOVBX,OFFSETKEYBUF+1;取出字符串中的字符个数
MOVCL,[BX]
MOVCH,0;作为循环的次数
AGAIN:
INCBX
MOVDL,[BX];取出一个字符
CMPDL,‘a’;小于小写字母a,不需要处理
JBDISP
CMPDL,‘z’;大于小写字母z,不需要处理
JADISP
SUBDL,20H;小写字母,转换为大些字母
DISP:
MOVAH,2;显示一个字符
INT21H
LOOPAGAIN;循环处理,直到整个字符串处理完
CODEENDS
ENDSTART
第四部分实验总结
心得体会:
本次微机原理实验的硬件实验部分让我收获了很多。
让我们不仅复习了课程上学习到的有关接口技术的知识,更让我们从直接操作实验箱的过程中,把接口技术运用到实际中。
初学《微机原理》时,感觉摸不着头绪。
面对着众多的术语、概念及原理性的问题不知道该如何下手。
在了解课程的特点后,我发现,应该以微机的整机概念为突破口,在如何建立整体概念上下功夫。
在实验的过程中,我和组员一起研究并把大部分的实验结果通过示波器或数码管和转轮正确显示出来。
我们对实验六和实验十做了大量的调试,可是没有正确做出来,在更换实验设备后仍未能正确做出,有所遗憾。
本次微机实验加强了我的自主能力、动手能力和独立思考、团结协作的能力。
通过这一次的实验学习,真的对它有了全新的认识,虽然说这门课已经结束了,但我会坚持对它的学习,是自己在汇编语言上有一个长足的提高!
最后特别感谢老师的帮助和指导让我们得以完成实验。
参考文献:
[1]梁建武《微机原理与接口技术》中国水利水电出版社