北航微机原理实验报告(3).doc
《北航微机原理实验报告(3).doc》由会员分享,可在线阅读,更多相关《北航微机原理实验报告(3).doc(4页珍藏版)》请在冰点文库上搜索。
微机原理实验报告(3)
一、实验名称
七段数码显示
二、实验目的
掌握接口芯片的编址方法,掌握8255的初始化设置,及数码管显示原理,掌握段控及位控的概念。
三、实验内容
连接地址译码器与8255的连线及8255与数码管的连线;
在数据段中存放0到9的字型码;
从微机键盘键入2个数字的ASCII码,在输入过程中检查如非数字则重新输入;
然后将输入的ASCII码变成相应的数字,再利用换码指令XLAT查表得到相应的字型码;
将字型码送到8255输出口所接的数码管上显示。
四、程序流程图:
(见末页)
五、实验结论:
符合预期,输入2个数字,七段数码管显示这两个数字。
六、实验心得
七段数码显示作为第一次硬件实验,虽然程序不难,但是在实验过程中还是遇到了不少这样或者那样的问题。
主要问题还是集中在硬件方面。
程序方面,上机之前我已经完成了程序的编写,在实验室用了大概20分钟进行了调试,消除了7个编程中的错误。
但是进行编译运行后,数码管始终无法显示正确的数字。
在确定程序无误后,我只能逐一排查运行失败的原因。
我首先检查了硬件连线,并且将优盘从主机上拔下,将影响因素尽量消除,但是仍然无法得到正确的结果。
接着我换来了已经完成实验的同学的实验箱,重新编译运行,数码管依旧无法正确显示。
最后不得已,我又换了一台电脑,编译运行同样的程序用同一个实验箱,终于获得了正确的结果。
实验后我思考了一下问什么会出现这种问题,我觉得可能是用于计算机与实验箱相连的扁平接线有问题才导致数码管始终无法正常工作。
这次实验过后,对于微机原理知识来说我并没有太多的收获,毕竟做到第三次实验,编写程序和软件的应用都已经轻车熟路了。
但是通过遇到上述的这个问题,我在分析问题、解决问题方面的能力有所提高。
这就是我这次最大的收获。
七、实验程序:
INPORTAEQU0EF00H-280H+288H
INPORTBEQU0EF00H-280H+289H
INPORTCEQU0EF00H-280H+28AH
INPORTCRLEQU0EF00H-280H+28BH
STACKSEGMENTSTACK
DW100DUP(?
)
STACKENDS
DATASEGMENT
FIGUREDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
XDB2DUP(?
)
STRINGDB'PLEASEENTERTWONUMBERS:
',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
MAINPROC
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETX
MOVDX,OFFSETSTRING
MOVAH,9
INT21H
CALLKEYIN
ANDDL,0FH
MOV[SI],DL
INCSI
CALLKEYIN
ANDDL,0FH
MOV[SI],DL
MOVDX,INPORTCRL
MOVAL,10000010B
OUTDX,AL
MOVBX,OFFSETFIGURE
NEXT1:
MOVDX,INPORTA
MOVSI,OFFSETX
MOVAL,[SI+1]
XLAT
OUTDX,AL
MOVDX,INPORTC
MOVAL,01B;PC1=0,PC0=1
OUTDX,AL
CALLDELAY
MOVDX,INPORTA
MOVSI,OFFSETX
MOVAL,[SI]
XLAT
OUTDX,AL
MOVDX,INPORTC
MOVAL,10B;PC1=1,PC0=0
OUTDX,AL
CALLDELAY
MOVDL,0FFH
MOVAH,6
INT21H
JZNEXT1
MOVAH,4CH
INT21H
MAINENDP
KEYINPROC
AGAIN:
MOVAH,8
INT21H
CMPAL,30H
JBAGAIN
CMPAL,39H
JAAGAIN
MOVDL,AL
MOVAH,2
INT21H
RET
KEYINENDP
DELAYPROC
PUSHBX
PUSHCX
MOVBX,100
MOVCX,0
NEXT2:
LOOPNEXT2
DECBX
JNZNEXT2
POPCX
POPBX
RET
DELAYENDP
CODEENDS
ENDMAIN
流程图:
开始
将数码管的字型码存入数据段
从键盘输入2个数字
输入数字存入数据段
N
设置8255控制字
Y
取数据段取个位数字偏移地址送入AL寄存器
设置8255A口工作方式:
将字型码输出至A口
利用XLAT指令查得该数字所对应的字型码
判断输入是否为2个数字
Y
初始化
设置8255C口工作方式:
使PC1置0,PC0置1
调用延时子程序
取数据段取十位数字偏移地址送入AL寄存器
设置8255A口工作方式:
将字型码输出至A口
设置8255C口工作方式:
使PC1置1,PC0置0
检查是否有键按下
调用延时子程序
返回DOS
N
Y