北邮微机原理与接口技术.docx

上传人:b****4 文档编号:24392631 上传时间:2023-05-27 格式:DOCX 页数:14 大小:219.41KB
下载 相关 举报
北邮微机原理与接口技术.docx_第1页
第1页 / 共14页
北邮微机原理与接口技术.docx_第2页
第2页 / 共14页
北邮微机原理与接口技术.docx_第3页
第3页 / 共14页
北邮微机原理与接口技术.docx_第4页
第4页 / 共14页
北邮微机原理与接口技术.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

北邮微机原理与接口技术.docx

《北邮微机原理与接口技术.docx》由会员分享,可在线阅读,更多相关《北邮微机原理与接口技术.docx(14页珍藏版)》请在冰豆网上搜索。

北邮微机原理与接口技术.docx

北邮微机原理与接口技术

--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--

 

北邮—微机原理与接口技术

(1)(总12页)

微机原理与接口技术硬件实验报告

1.实验一微机实验平台介绍及IO的使用

1.1.实验目的

1.1.1通过实验了解和熟悉实验台的结构,功能及使用方法;

1.1.2通过实验掌握直接使用debug的I、O命令来读写IO端口;

1.1.3学会debug的使用及编写汇编程序。

1.2.实验内容及要求

1.2.1学习使用debug命令,并用I、O命令直接对端口进行读写操作,

1.2.2用汇编语言编写跑马灯程序。

(可以使用EDIT编辑工具。

)要求实现以下两个功能:

A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。

1.2.3使用时要注意,电源打开时不得插拔电缆及各种器件,一定要在断电的情况下连接电路,否则可能会烧坏整个实验系统。

1.3.实验环境及背景

我们使用PCI_IDE50扁平电缆将PC机与实验扩展模块连接起来。

在扩展实验平台上,有八个发光二极管、八个拨码开关。

读取拨码开关和写发光二极管的端口地址已经被做成了0E8E0h。

连接的PC机上安装有DOS操作系统,并有MASM5开发工具。

图1扩展实验模块

1.4.实验步骤

1.4.1.使用debug的I、O命令读写端口

进入DOS,在命令行模式下输入命令debug,用-a选项写入下列程序:

CODE(debugmode)

MOVDX,E8E0

MOVAL,FE

OUTDX,AL

MOVAH,0B

INT21

ORAL,AL

JZ0100

INT20

输入结束后,直接输入回车即可推出-a。

然后,用-g选项运行程序,查看结果。

发现最右边的LED亮,其他不亮。

修改输出内容,再运行查看结果,可以发现:

当输出位对应为1时,灯灭;输出为0时,灯亮。

下面,我们来分析一下以下这段程序的作用。

CODE(debugmode)

MOVAH,0B

INT21

ORAL,AL

JZ0100

INT20

第一句是设置功能调用号,第二句是进行DOS功能调用,检测是否有键盘输入。

如果有键盘输入,则AL为00h,将由JZ0100H跳转;如果有键盘输入,则AL为0FFh,程序继续执行。

程序执行到20H中断时,结束程序。

值得一提的是,在有些语句中,16进制数并不需要以’h’结尾。

这个是因为在debug模式下,语句的读写本来就是按照16进制的,没必要像写汇编源代码(*.asm文件)一样用’h’将16进制数与10进制数区别开来。

1.4.2.使用文本编辑器edit和编译器masm

首先让我们来分析和设计一下这个程序。

这个程序“走马灯”需要速度可调、灯的移位方向可调、灯型可调,具有暂停功能,可以在用户需要的情况下结束程序(返回DOS)。

我们将这些控制端口设置在端口为0E8E0的拨码开关上。

具体开关的用途如下表:

表1拨码开关用途表

开关号

端口的第几位

向上拨(‘1’)的意义

向下拨(‘0’)的意义

S0

0

退出程序,返回DOS

程序正常进行

S1

1

走马灯向右循环移位

走马灯向左循环移位

S2

2

走马灯暂停

走马灯正在运动

S3

3

走马灯慢速运动

走马灯快速运动

S4

4

三个灯同时亮

只有一个灯亮

程序流程图:

图2走马灯流程图

程序代码:

CODE(marquee.asm)

;FILENAME:

marquee.asm

;AUTHOR:

XIAO,Zhiqing(No.13,Cl.07105)

;DATE:

20091209

;DESCRIPTION:

revolvingsceniclampswhichshiftineitherdirection

;USAGE:

switchers--(SW0isthemostleftone)

;SW0(play):

UPexitDOWNplay

;SW1(direction):

UPrightDOWNleft

;SW2(pause):

UPpauseDOWNplay

;SW3(speed):

UPslowDOWNfast

;SW4(mode):

UPthreelightsDOWNonelight

DataSEGMENT

SwStateDB0

LdStateDB0FEH

BufferDB0

DataENDS

StackSEGMENTSTACK'STACK'

DB100HDUP(0)

StackENDS

CodeSEGMENT

ASSUMEDS:

Data,SS:

Stack,CS:

Code

MainPROC

PUSHDS

XORAX,AX

PUSHAX

MOVAX,Data

MOVDS,AX

MOVldState,0FEh;initialize

CALLEndlessRepeat

RET;unreachableinstruction

MainENDP

;procedureEndlessRepeatisaprocedurethatdoprocedure

;‘ProcToRepeat’endlesstimes.

EndlessRepeatPROC

EndlessLoop:

CALLProcToRepeat

JMPEndlessLoop

RET;unreachableinstruction

EndlessRepeatENDP

ProcToRepeatPROC

CALLreadSw

CALLexcuteDirection

CALLexcuteMode

CALLexcutePause;duringthisprocedure,swsareread.

CALLexcuteReturnToDos

CALLexcuteSpeed

RET

ProcToRepeatENDP

;procedureDivFreqprovideclockwhosefrequencyisdivided

;by1000H*8000H=134.2Mtimes

DivFreqPROC

PUSHCX

MOVCX,1000H

MyLoop:

PUSHCX

MOVCX,8000H

MyNestedLoop:

DECCX

JNZMyNestedLoop

POPCX

DECCX

JNZMyLoop

POPCX

RET

DivFreqENDP

;readthestatesofswitchersfromInputPort

ReadSwPROC

PUSHAX

PUSHDX

MOVDX,0E8E0H

INAL,DX

MOVSwState,AL

POPDX

POPAX

RET

ReadSwENDP

;turnonandofftheledsbyOutputPort

WriteLdPROC

PUSHDX

PUSHAX

MOVAL,LdState

MOVDX,0E8E0H

OUTDX,AL

POPAX

POPDX

RET

WriteLdENDP

;iffirstswitcherisup,quittheprogramandreturntodos.

excuteReturnToDosPROC

TESTSWSTATE,01H

JZexitexcuteReturnToDos

CALLreturnToDos

exitexcuteReturnToDos:

RET

excuteReturnToDosENDP

ReturnToDOSPROC

MOVAX,4C00H

INT21H

ReturnToDOSENDP

excuteDirectionPROC

TESTSWSTATE,02H

JZshiftLeft

RORLDSTATE,01H

RORLDState,01H

shiftLeft:

ROLLDSTATE,01H

exitexcuteDirection:

RET

excuteDirectionENDP

;waituntilS2isdown

excutePausePROC

beginexcutePause:

CALLreadSw

TESTswState,04H

JNZbeginexcutePause

RET

excutePauseENDP

;slowmodedelaysaboutthreetimesasthatoffastmode

excuteSpeedPROC

CALLdivFreq

TESTswState,08H

JZexitexcuteSpeed

CALLdivFreq

CALLdivFreq

exitexcuteSpeed:

RET

excuteSpeedENDP

excuteModePROC

PUSHWORDPTRldState

TESTswState,10H

JZsimpleMode

;continuous3ledlightson

PUSHAX

PUSHBX

PUSHCX

MOVAL,ldState

MOVBL,AL

ROLBL,1

ANDBL,AL

MOVCL,BL

ROLCL,1

ANDAL,CL

MOVldState,AL

POPCX

POPBX

POPAX

simpleMode:

CALLwriteLD

exitexcuteMode:

POPWORDPTRldState

RET

excuteModeENDP

CodeENDS

ENDMain

运行结果:

编译、连接并运行后,程序运转正常。

所有选项都可以按照预期方式控制,且可以正确返回DOS。

例如,当S4往下拨后,同一时刻有且只有一个灯亮;

图3单灯模式

当S4往上拨时,同一时刻有且只有三个灯亮。

图4三灯模式

本实验达到要求,通过了验收。

1.5.思考题

通过实验说明用debug中的a命令录入实验中给出的小程序中,有些语句可以不写出“h”字符的原因。

在debug模式下,语句的读写本来就是按照16进制的,没必要像写汇编源代码(*.asm文件)一样用’h’将16进制数与10进制数区别开来。

1.6.心得体会

这次试验是我第一次微机原理试验。

在这次试验中,令我印象最深的是文本编辑器edit的使用。

在以前的学习生活中,在Windows下我一般用Notepad++,在Linux下我一般用vim,编程时还会用到一些IDE配套的文本编辑器。

这次,我第一次使用了文本编辑器edit。

这个文本编辑器和绝大多数图形用户界面的文本编辑器不是很相同。

例如,Windows下的Ctrl+C和Ctrl+V不能使用。

熟悉一个文本编辑器确实是不易的。

图5文本编辑器edit

第二个印象最深的地方是当程序进入死循环时,没有找到办法退出了。

这个特性对我的开发造成了一定的负面影响。

当我们用图形界面IDE进行开发时,当程序进入死循环时,可以强制关闭程序。

Linux下可以把这个进程kill掉。

而DOS下尚未发现解决办法。

这使得返回DOS的功能更加重要。

其实,能正确的终止,也反映了一个程序的有穷性。

参考资料

[1]徐惠民.微机原理与接口技术.北京:

高等教育出版社,2007.

[2]田辉,甘勇.微型计算机技术——系统、接口与通信.北京:

北京航空航天大学出版社,2001.

[3]王玉良.微机原理与接口技术.北京:

北京邮电大学出版社,2006.

[4]ftp:

//.访问时间:

2009年12月.

声明与致谢

本报告涉及所有源代码均属原创作品。

感谢电信工程学院实验中心和纪辉老师及其助教们的大力支持。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1