微机原理与接口课程设计Word格式文档下载.docx
《微机原理与接口课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理与接口课程设计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
1.概述
1.1课程设计的目的
对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
培养学生综合运用所学知识独立完成汇编程序课题的能力。
使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
1.2课程设计的任务
通过微型计算机原理与接口技术的课程设计可以让我们学生更深一步的了解课本知识,掌握编译器的编译环境,从而能对自己所写的编程进行不断的改进,最终达到我们想要的结果。
课程设计不但培养了我们的动手能力,还激发了我门对课外知识的兴趣,我们可以从图书馆,找到相关的书籍进行学习,也可以上网查阅到我们想要的东西。
学到我们在书本上学不到的东西,从而开阔我们的视野。
1.3设计的题目
用汇编语言编写一个时钟程序,再微机屏幕上显示当前时间的年、月、日、时、分、秒。
在程序起动后可键入当前时间,回车键按下后,开始计时,微机屏幕上显示当前时间XXXX年XX月XX日XX时XX分XX秒。
并且可以进行对时间的修改等操作。
1.4设计要求
(1)了解并掌握汇编语言设计的一般方法,具备初步的独立分析的设计能力;
(2)初步掌握软件开发过程的问题分析、系统分析、程序编码、测试运行等基本方法和能力;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
(4)最后掌握用汇编语言编写程序,画出程序流程图,对程序进行调试。
2.总体方案设计
2.1主程序设计思想
此设计程序要求结构化的显示系统的时间和日期。
程序要求能对时间的年月日和时分秒进行修改并有退出选项的功能。
我们可以设计三个选项以供用户选择:
B对年月日进行修改,C对时分秒进行修改和Esc退出程序。
三个选项分别可以用三个过程实现其功能。
2.2设计原理说明
(1)日期时间显示
先在数据端开一段显示缓冲区,用来存储系统时间。
调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII码。
再分别将小时数、分钟数、秒数存入显示缓冲区。
(2)日期时间修改
在修改时间的时候调用键盘输入输出程序实现日期时钟的修改功能,然后存入结束字符‘$’。
调用DOS字符串显示功能将日期时间显示在显示器上,调用屏幕的I/O中断,定位光标的开始位置,将时间显示在预先定义好的位置。
(3)延时程序
把程序设计成用刷新的方式来不断获取系统的时间,这样就有了会一秒一秒走动的电子时钟。
在此过程需要用到延时程序,所以我们把延时程序单独做成一个子程序,然后在需要的时候调用它,使得时间的显示程序更加精炼。
2.3设计应用的环境
硬件环境:
PC机。
软件环境:
Masm2009。
3.系统分析
看时间已经是我们每天都在干的事情,而且我们身边的电子表,时钟表,手表等都用了不同的方式在显示着时间,这次的课程设计正是我们身边这些时间显示的结合,我们既可以看着它走动,也可以对它进行修改,并且它显示的时间与我们的电脑是同步的,当然你改动它的值,电脑上的时间也会改动。
所以这个设计对我来说是意义很大的。
它既用到了我们微机原理所学的知识,也用到了编译器中涉及到的知识,既可以让我们看见它的实质,也可以从中学到很多编译方面的知识,为我们以后的学习打下了基础。
有了一个小小的设计,我们就会迈进一大步,了解更深的知识。
此次设计也用到了DOS系统方面的知识,让我门对知识有了多角度的认识。
4.软件设计
4.1程序流程图
4.2程序源代码
DATASEGMENT
TNDB'
PLEASEINPUTTHENEWTIME(HH:
MM:
SS):
'
0DH,0AH,'
$'
;
提示输入时间的格式
TBDB'
PLEASEINPUTTHENEWDATE(YYYY:
DD):
提示输入日期的格式
MESSDB'
TIMEIS:
0AH,0DH,'
T_BUFFDB40;
在数据段开一段时间显示缓冲区T_BUFF为名字
DB?
DB40DUP(?
)
YEARDW?
年
MONDB?
月
DAYDB?
日
HORDB?
小时
MINDB?
分钟
SECDB?
秒
DATAENDS
STACKSEGMENTSTACK
DB100DUP(?
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA;
确定各个逻辑段的类型
START:
DISPLAY:
时间显示部分
MOVAX,SEGDATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVBX,OFFSETT_BUFF;
送T_BUFF的偏移地址到BX
MOVAH,2AH;
调用DOS时间调用功能,功能号:
2AH,年,月,日分别保存在CX,DH,DL中
INT21H
MOVAX,CX;
年设定
CALLBCTD;
调用进制转换子程序
PUSHAX
ANDAH,0F0H;
选取AH高四位
MOVCL,4;
设置右循环的次数
ROLAH,CL;
右循环
ORAH,30H;
加30H得到ACSII码
MOV[BX],AH;
将得到的结果送到T_BUFF缓冲区
INCBX;
BX自加1,指针指向下一个缓冲区的下一个地址
POPAX
ANDAH,0FH;
选取低四位
ORAH,30H
将转换后的低四位值送入缓冲区的第二个地址
INCBX
ANDAL,0F0H;
选取AL高四位
ROLAL,CL;
ORAL,30H;
MOV[BX],AL;
ANDAL,0FH;
ORAL,30H
;
---------------------
MOVAL,'
:
'
显示分隔符号
MOV[BX],AL
-------------------------
MOVAH,2AH
MOVAL,DH;
月设定
MOVAH,0
CALLBCTD
ANDAL,0F0H
MOVCL,4
ROLAL,CL
MOV[BX],AL
POPAX
ANDAL,0FH
-------------------------------------------------------------------------
-------------------------------------------------------------------------
MOVAH,2AH;
日设定
MOVAL,DL
----------------------------------------------------------
/'
INCBX
-------------------------------------------------------
MOVAH,2CH;
2CH,小时,分钟,秒数分别保存在CH,CL,DH中
MOVAL,CH;
小时数设定
MOVAH,2CH
MOVAL,CL;
分钟数设定
MOVAH,2CH;
秒设定
MOVAL,DH
----------------------------------------------------------------------
将字符串的结束位送至显示缓冲区的最后一位
------------------------------------------------------------------------
PUSHBX;
置光标位置,AH=2,BH=0DH跟DL分别为行号与列号,并入栈保护BX
MOVAH,2
MOVBH,0
MOVDH,10
MOVDL,31
INT10H
POPBX
LEADX,T_BUFF;
送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9
MOVAH,9
置光标位置
MOVDL,21
LEADX,MESS
MOVAH,9
-----------------------------
CALLDELAY1;
调用精确延时子程序
MOVAH,1;
调用键盘I/O中断功能号1,获取键值到AL
INT16H
CMPAL,'
B'
是B键,转到日期修改程序
JEBORRECT
CMPAL,'
C'
是C键,转到时间修改程序
JECORRECT
是C键,转到时间修改程序
JECORRECT
CMPAL,1BH
JZQUIT;
是ESC键,退出程序
JMPDISPLAY
QUIT:
MOVAH,4CH;
程序终止功能号
RET
-----------------二进制转BCD码子程序--------------
BCTDPROCNEAR
AX输入参数
AX输出参数,存放调整过的BCD码
MOVDX,AX
MOVAX,0
MOVCX,16;
设循环次数
BCTD1:
CLC;
清进位标志C
RCLDX,1;
通过进位的循环右移
ADCAL,AL;
带进位加法
DAA;
加法的十进制调整
XCHGAL,AH;
交换高、低八位
ADCAL,AL
DAA
XCHGAL,AH
LOOPBCTD1;
循环次数保存在CX里
BCTDENDP
---------------精确延迟时间子程序---------------
DELAY1PROC
MOVDX,04FFH;
循环次数
UP:
XORCX,CX
A:
NOP
LOOPA
DECDX
JNZUP
DELAY1ENDP
---------------时间修改子程序------------
CORRECTPROC
CALLINPUT;
调用键盘输入子程序输入数据
MOVCH,HOR
MOVCL,MIN
MOVDH,SEC
ANDDL,0H
MOVAH,2DH
JMPSTART
CORRECTENDP
---------------键盘输入子程序----------
INPUTPROC
PUSHAX;
入栈保护数据
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVDX,OFFSETTN;
显示修改时间的格式提示
MOVAH,09H
INT21H
MOVDX,OFFSETT_BUFF;
数据缓冲区的数据输入
MOVAH,0AH
ANDDX,0H
LEABX,T_BUFF
INCBX
MOVDH,[BX]
SUBDH,30H
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVCH,AL
MOVHOR,AL
MOVCL,AL
MOVMIN,AL
MOVDH,AL
MOVSEC,AL
POPF;
出栈恢复数据
POPDX
POPCX
POPBX
POPAX
RET
INPUTENDP
---------------日期修改子程序------------
BORRECTPROC
CALLINPUT2;
MOVCX,YEAR
MOVDH,MON
MOVDL,DAY
MOVAH,2BH
BORRECTENDP
INPUT2PROC
MOVDX,OFFSETTB;
显示修改日期的格式提示
MOVAH,00H
MOVCX,100
MULCX
MOVYEAR,AX
MOVAX,00H
ADDYEAR,AX
MOVMON,AL
MOVDAY,AL
INPUT2ENDP
----------------------------
CODEENDS
ENDSTART
5.系统调试
5.1显示系统时间
5.2按B键修改年月日
说明:
修改日期时,必须将B消除掉,才能按正确的格式修改日期。
然后按下Enter键,系统会保存已修改好的值。
输入的格式为xxxxxxxx,要有空格。
5.3按C键修改具体时间
修改时间时,也要消除C然后输入正确的格式对时间进行修改。
按下enter键自动保存时间。
输入的格式同上。
6.设计总结
为期一周的《微机原理课程设计》结束了,回想起这一周的课程设计,颇有一些感慨。
此次课程设计的题目对我来说并不简单,由于汇编知识的匮乏,在前面几天的时间基本上是把《微机原理与接口技术》上的例题看懂,同时查找一些关于汇编知识的书籍,逐渐才摸索出编写时钟程序设计的思路以及程序模块的具体编写。
尽管这一周的课程设计时间短暂并且困难重重,但是在解决困难的同时我也学到了许多课堂上学不到的东西。
在整个设计过程中,我不但查阅了一些相关的资料,还得到了老师和同学们的帮助,无论在理论和实践能力都得到了很大锻炼,不但使我学到了很多知识,还促使我能深入独立思考一些问题,这对我以后的学习和工作有很大的益处。
当然由于时间仓促,加上我的编写水平有限,这次课程设计也有很多有待改进及完善的地方,还请老师指正,在以后的时间里我会进一步进行学习和完善。
7.参考文献
(1)谭浩强主编的《微型计算机原理与接口技术》(第三版)中国铁道出版社;
(2)雷印胜、贾萍、胡晓鹏等主编的《汇编语言程序设计教程》科学出版社;
(3)詹仁华主编的《汇编语言程序设计习题解答及课程实验、设计辅导》中国电力出版社;
(4)郑初华主编的《汇编语言、微机原理及接口技术》(第二版)电子工业出版社;