微机原理与单片机实验报告.docx
《微机原理与单片机实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理与单片机实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
微机原理与单片机实验报告
北京联合大学信息学院
实验报告
课程名称:
微型计算机原理
学号:
姓名:
2012年6月9日
实验1EMU8086模拟器的使用
一实验要求
利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看
二实验目的:
熟悉EMU8086实验环境
三EMU8086环境:
1模拟器编辑窗口
2模拟器调试窗口
四实验内容
实验内容1:
新建文件。
运行emu8086
1.新建文件:
单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:
MOVAX,1020H
MOVBX,2030H
MOVAX,BX
ADDAX,BX
MOV[BX],AX
MOV[2032H],AX
HLT
2.编译:
单击“编译”按钮,对程序段进行编译;
3.保存:
编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。
4.仿真:
单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。
5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。
6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。
7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序,
8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:
0100开始的连续10个单元的内容
9.将“存储器”中的地址改为0700:
2030,查看开始的四个字节的内容,并思考其内容与程序的关联。
10.将“存储器”中地址改为1000:
0100,并将从其开始的连续10个单元的内容改为55H。
实验内容2:
运行范例
在模拟器编辑窗口中
1.点击典型范例
2.选择:
hellow,word程序,编译,运行,观察结果。
修改程序(不要改原有DEMO程序),输出学号,姓名(汉语拼音或英文名)
parenumbers程序,编译,运行,观察结果。
修改程序(不要改原有DEMO程序),将比较对象改为7,编译,运行,观察结果。
4.欣赏其它DEMO范例
实验2数据传送指令的使用
一、实验要求
编写程序代码
指令,注释
二、实验目的
熟练掌握数据传送类指令的格式、功能和应用。
三、实验说明
emu8086环境下自建工程文件。
五、参考程序
1运行以下3段程序,记录用到的4个通用寄存器的内容
1.
movax,0abch
decax
andax,00ffh
movcl,4
salal,1
movcl,al
addcl,78h
pushax
popbx
hlt
2.
movsp,2000h
movax,3000h
movbx,5000h
pushax
pushbx
popax
hlt
3.
movax,1234h
movbx,5678h
movcx,9abch
pushax
pushbx
pushcx
popdi
popsi
popdx
hlt
2运行以下程序,记录AX寄存器的内容,逐条注释指令
Mov[1000h],5566h
movax,[1000h]
leaax,[1000h]
hlt
六、编程,测试,记录程序运行结果。
实验3多位十六进制加法运算实验
一、实验要求
编程实现多位十六进制数的加法运算。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用加法类运算指令编程及调试方法。
3、掌握加法类指令对状态标志位的影响。
三、实验说明
由于本实验是三个十六位二制数相加运算,N4为存放结果,其中N1为1111H、N2为2222H、N3为3333H所以结果应该为6666H
四、实验程序流程图
五、参考程序
DATASEGMENT
NUM1DW1111H;N1
NUM2DW2222H;N2
NUM3DW3333H;N3
NUM4DW0000H;N4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETNUM1
MOVAX,0
ADDAX,[SI+0]
ADDAX,[SI+2]
ADDAX,[SI+4]
MOV[SI+6],AX
JMP$
CODEENDS
ENDBEG
六、编程,测试,记录程序运行结果。
实验5循环程序实验
一、实验要求
练习编程建立8086的循环程序。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用LOOP判断转移指令实验循环的方法。
3、掌握使用LOOP与CX的组合。
三、实验说明
由于本实验是通过给CX一个数值,再通过LOOP作一个判断CX-1是否为0的转移,
实现程序的循环,循环的内容是执行AX+1,所以结果应该为AX最后大小为开始时给定
CX的大小。
四、实验程序流程图
五、参考程序
CODESEGMENT
ASSUMECS:
CODE
CON_AEQU25
CON_BEQU12
START:
MOVAX,0
MOVCX,5
INC_AX:
NOP
INCAX
LOOPINC_AX
JMP$
CODEENDS
ENDSTART
六、编程,测试,记录程序运行结果。
实验6由1到100求和实验
一、实验要求
编程实现1到100求和运算。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用加法类运算指令编程及调试方法。
3、掌握使用循环类指令编程及调试方法。
三、实验说明
由于本实验是1到100的100个数想加,1+2+3+4+……+97+98+99+100=?
求和
四、实验程序流程图
五、参考程序
DATASEGMENT
totalDW0000H;
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETtotal
MOVCX,100
MOVAX,0
MOVBX,1
add_100:
ADDAX,BX
INCBX
LOOPadd_100
MOV[SI],AX
JMP$
CODEENDS
ENDBEG
六、编程,测试,记录程序运行结果。
total=1+2+3+4........+99+100=5050=13BAH(16进制)验证结果是否正确
实验7求表中正数_负数_0的个数实验
一、实验要求
程序中定义数组,编程实现统计数组中正数、负数与0的个数。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握查表方法。
三、实验说明
由于本实验是先在表中存放数据,其它有正数、负数和0,通过程序对表的查询,统计表中
包含正数、负数和0的个数。
四、实验程序流程图
五、参考程序
DATASEGMENT
DBUFDB1,2,-3,-4,-5,1,2,3,4,5,'#';7正3负,#为结束标志
PLUSDB1;正数个数
MINSDB1;负数个数
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVPLUS,0;初始化
MOVMINS,0
MOVDI,0
BG:
CMPDBUF[DI],'#'
JEEN;遇到#结束
INCDI
CMPDBUF[DI],0;和0比较
JGL1;大于
JLL2;小于
L1:
INCPLUS;正数个数加1
JMPBG;继续循环
L2:
INCMINS;负数个数加1
JMPBG
EN:
MOVAH,4CH
INT21H
六、编程,测试,记录程序运行结果。
实验8数据排列实验(冒泡排序)
一、实验要求
1利用PROTEUS平台,编程实现8086的由小到大的数据排列。
2利用系统功能调用实现需要排序数据的输入和排序结果显示。
二、实验目的
1、熟悉实验系统的编程和使用。
2、了解排列的简单算法。
3、了解“冒泡排序”法。
三、实验说明
有序的数列更有利于查找。
本程序用的是“冒泡排序”法,算法是将一个数与后面的数
相比较,如果比后面的数大,则交换,如此将所有数比较一遍后,最大的数就会在数列的最
后面。
再进行下一轮比较,找出第二大数据,如此下去,直到全部数据由小到大排列完成。
四、实验程序流程图
五、参考程序
DATASEGMENT
ARRAYDB25,46,3,75,5,30
COUNTEQU$-ARRAY
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB60DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,COUNT-1
MOVBL,0FFH
AGAINO:
CMPBL,0
JEDONE
XORBL,BL
MOVCX,DX
MOVSI,COUNT-1
AGAIN1:
MOVAL,ARRAY[SI]
CMPAL,ARRAY[SI-1]
JAEUNCH
EXCH:
XCHGARRAY[SI-1],AL
MOVARRAY[SI],AL
MOVBL,0FFH
UNCH:
DECSI
LOOPAGAIN1
DECDX
JNZAGAINO
DONE:
JMP$
CODEENDS
ENDSTART
六、编程,测试,记录程序运行结果。
由于在0040H单元开始的6个字节25,46,3,75,5,30=19H,2EH,03H,4BH,05H,1EH
所以由小到大排列后为:
03H,05H,19H,1EH,2EH,4BH
实验9系统功能调用(大小写转换)
实验目的:
1、掌握DOS调用的输入输出功能
2、掌握分支程序设计的方法
实验内容:
1、每次从屏幕输入一个大写字母,并将其转换为相应的小写字母输出显示到屏幕上,然后继续输入下一个字母;
2、此转换一直进行到输入“#”号为止;
3、若输入过程中输入了除大写字母和“#”以外的其他字符,则在屏幕上给出错误提示信息:
“ERROR!
”,并继续进行下一个大写字母的输入。
实验源程序:
DATASEGMENT
ERRDB'ERROR',0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
IPT:
MOVAH,1;键盘输入大写字母
INT21H
CMPAL,'#'
JEEN
JNEOPT
OPT:
CMPAL,'A';转换为小写字母并输出
JBERROR
CMPAL,'Z'
JAERROR
ADDAL,20H
MOVAH,2
MOVDL,AL
INT21H
JMPIPT
ERROR:
MOVDX,OFFSETERR;输出ERROR并换行
MOVAH,9
INT21H
JMPIPT
EN:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
六、编程,测试,记录程序运行结果。
实验10阶乘(递归运算)
一实验目的:
设计型实验的完成过程。
二实验要求:
利用汇编编写阶乘的算法。
键盘输入数据,屏幕显示结果。
程序最小可算到6的阶乘。
发挥过程中,应注意计算结果的数值范围和计算时间。
三、编程,测试,记录程序运行结果。
实验11ProteusIO工程文件的建立
一、实验要求
运行LabcenterElectronics\Proteus7Professional\SAMPLES\VSMfor8086工程文件
创建proteus工程文件
工程1:
绘制按键和发光二极管,要求仿真状态下,按键能控制二极管的亮灭。
工程2:
绘制原理图
二、实验目的
1参考proteus仿真调试使用手册.doc
2熟悉proteus实验环境
三、实验电路及连线
工程1:
工程2:
四、实验说明
工程1:
工程的创建,存盘,器件的寻找,器件的连接,电路仿真。
工程2:
器件的寻找,总线方式的连接,仿真程序的加载。
五、实验程序流程图
六、绘制原理图,编写测试程序,加载、运行和记录结果。
实验12IO口读写实验(245、373)
一、实验要求
使用74HC245,74HC373,利用3总线扩展I/O口
完成外部8路开关状态的检测和8路指示灯亮灭的控制。
二、实验目的
1、了解CPU常用的端口连接总线的方法。
2、掌握74HC245、74HC373进行数据读入与输出。
三、实验电路及连线
Proteus参考实验电路
四、实验说明
一般情况下,CPU的总线会挂有很多器件,为了防止异常,CPU的总线总线上同一时间只允许接入一个设备。
这些设备需要分时(工作时)接入,要使用一些总线隔离器件,例如74HC245、74HC373。
其中74HC245是三态总线收发器,本实验用它做输入设备,读入开关状态。
74HC373是数据锁存芯片,作为系统的输出设备,通过它作数据的锁住输出。
两个设备的端口地址依据原理图自行计算。
五、实验程序流程图
六、实验步骤
1.Proteus环境下绘制原理图
2.emu8086环境下编写和编译程序。
创建文件类型:
.exe
参考代码如下:
OUT373EQU0E000H
IN245EQU0F000H
MM1:
MOVDX,IN245
INAL,DX
MOVDX,OUT373
OUTDX,AL
JMPMM1
六、绘制原理图,编写测试程序,加载、运行和记录结果。
实验138255接口实验
一、实验要求
1利用8255可编程并行口芯片,实现输入、输出实验,实验中用8255PA口作读取开关状态输入,8255PB口作控制7段数码管输出
2再此基础上利用PC口再外接一个7段数码管,重新定义四个按键功能:
分两组,每组两个按键对应一个数码管
一个按键增1计数,一个按键减1计数
数值在数码管显示
计数范围:
0-9
二、实验目的
1、了解8255芯片结构及编程方法。
2、了解8255输入、输出实验方法。
三、实验电路及连线
1、Proteus实验电路
四、实验说明
8255端口地址依据原理图自行计算。
五、实验程序流程图
六、实验步骤
1.Proteus环境下绘制原理图
2.emu8086环境下编写和编译程序。
创建文件类型:
.exe
参考代码如下:
CT8255SETEQU86H
PORTAEQU80H
PORTBEQU82H
PORTCEQU84H
CTAIBOEQU10010000B;AIN,BOUT
MOVDX,CT8255SET;pcto8255controlbyte;
MOVAL,CTAIBO;controlbyteaddr
OUTDX,AL
G1:
MOVDX,ORTA
INAL,DX
MOVBL,0FFH
SUBBL,AL
MOVAL,BL
MOVBX,OFFSETLED
XLAT
PUSHCX
MOVCX,40H
DELAY:
LOOPDELAY
POPCX
MOVDX,PORTB
OUTDX,AL
JMPG1
LEDDB3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,77H,7cH,39H,5eH,79H,71H
;////共阴数码管段选码表,无小数点
六、绘制原理图,编写测试程序,加载、运行和记录结果。
实验14声光报警
一.实验目的
设计一个基于AT89c52的温度检测系统
二.实验要求
•要求:
采用单片机AT89c52作为控制核心,用软硬件相结合的设计方法实现温度的检测,并给出声光报警。
具体思路是:
用单总线数字温度传感器DS18B20将被测对象的温度信号转换为数字信号,直接向单片机传输数字信号,经单片机处理后,对于超过最大值或低于最小值的温度数据通过蜂鸣器进行报警。
同时外接数据存储器6264完成监控数据的保留。
•设计系统硬件原理图,并绘制PCB版图
系统硬件电路设计原理图见图1所示
实验截图
实验总结
这门课程是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,从而提高我们的实践能力。
回顾起此次实验课,至今我仍感慨颇多,的确,从理论到实践,我深深体会到了“纸上得来终觉浅,绝知此事要躬行!
”这句话的含义。
感觉到自己在实际运用中的知识的匮乏,刚开始的一段时间里,对一些实验的编程感到无从下手,茫然不知所措,经过自己的努力和同学的帮助,以及老师的指导,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
在编程的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时编程计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对单片机汇编语言掌握得不好,对各种器件不够熟悉,甚至陌生……通过这次课程设计之后,一定把以前所学过的知识重新温故。
“千里之行,始于足下”,这是一个短暂而又充实的实验课,我认为对我走向社会起到一个桥梁的作用,过渡的作用,是人生的一段重要的经历,也是一个重要步骤,对将来走上工作岗位也有着很大帮助。