微机原理与接口课程设计.docx
《微机原理与接口课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理与接口课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
![微机原理与接口课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/22/f1f615ee-8c13-47bd-96a3-70adadb02c41/f1f615ee-8c13-47bd-96a3-70adadb02c411.gif)
微机原理与接口课程设计
引言
21世纪是信息技术高度发展且得到广泛应用的时代,信息技术从多方面改变着人类的生活、工作和思维方式。
我们每一个人都应当学习信息技术、应用信息技术。
微型计算机原理与接口技术是我们计算机科学与技术专业重要的一门基础专业课之一,要求我们有较强的自学能力和分析解决问题的能力以及实际动手能力,其作用是为了培养学生善于用计算机作为工具。
通过课程设计掌握汇编语言的编程、调试,通过对芯片的学习,初步了解微机应用系统的开发过程及设计过程。
长期以来,注重课本知识,轻视实际动手能力是我们学习中普遍从在的现象。
进行课程设计的目的就是要改变我们的这种学习方法,使我们即具备了理论知识,也能够解决实际学习,生活工作方面遇到的问题。
让我门把理论用到了实际中去,将知识变成实际的生产力,把理论与实际有效的结合起来,让我们对知识有了更深一步的学习。
也促进了我们的学习积极心。
也做到了手与脑的有效结合。
通过课程设计,也可以让我们对所学的知识有了更一步的了解,并能掌握学习理论时没有注意的细节。
也会意识到程序的编写要注意没一个细节,每一个空格等,并能通过调试寻找错误,改正错误,解决问题。
计算机课程有两种不同的方法:
一是从理论入手;二是从实际入手。
中国有上下五千年的历史,都是应用时间来记载的,时间就是金钱,所以就从我们的生活和实际出发,我们的每件事,每个计划或是事件的安排都会受到时间的限制,而这次的课程设计也就是我们日常生活中处处注意的,一个有关时间的问题。
目录
引言1
1.概述3
1.1课程设计的目的3
1.2课程设计的任务3
1.3设计的题目3
1.4设计要求3
2.总体方案设计4
2.1主程序设计思想4
2.2设计原理说明4
2.3设计应用的环境4
3.系统分析4
4.软件设计5
4.1程序流程图5
4.2程序源代码6
5.系统调试16
5.1显示系统时间16
5.2按B键修改年月日16
5.3按C键修改具体时间17
6.设计总结17
7.参考文献17
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:
MM:
DD):
',0DH,0AH,'$';提示输入日期的格式
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
MOV[BX],AH;将转换后的低四位值送入缓冲区的第二个地址
INCBX
PUSHAX
ANDAL,0F0H;选取AL高四位
MOVCL,4;设置右循环的次数
ROLAL,CL;右循环
ORAL,30H;加30H得到ACSII码
MOV[BX],AL;将得到的结果送到T_BUFF缓冲区
INCBX;BX自加1,指针指向下一个缓冲区的下一个地址
POPAX
ANDAL,0FH;选取低四位
ORAL,30H
MOV[BX],AL;将转换后的低四位值送入缓冲区的第二个地址
INCBX
;---------------------
MOVAL,':
';显示分隔符号
MOV[BX],AL
INCBX
;-------------------------
MOVAH,2AH
INT21H
MOVAL,DH;月设定
MOVAH,0
CALLBCTD
PUSHAX
ANDAL,0F0H
MOVCL,4
ROLAL,CL
ORAL,30H
MOV[BX],AL
INCBX
POPAX
ANDAL,0FH
ORAL,30H
MOV[BX],AL
INCBX
;-------------------------------------------------------------------------
MOVAL,':
';显示分隔符号
MOV[BX],AL
INCBX
;-------------------------------------------------------------------------
MOVAH,2AH;日设定
INT21H
MOVAL,DL
MOVAH,0
CALLBCTD
PUSHAX
ANDAL,0F0H
MOVCL,4
ROLAL,CL
ORAL,30H
MOV[BX],AL
INCBX
POPAX
ANDAL,0FH
ORAL,30H
MOV[BX],AL
INCBX
;----------------------------------------------------------
MOVAL,'/';显示分隔符号
MOV[BX],AL
INCBX
;-------------------------------------------------------
MOVAH,2CH;调用DOS时间调用功能,功能号:
2CH,小时,分钟,秒数分别保存在CH,CL,DH中
INT21H
MOVAL,CH;小时数设定
MOVAH,0
CALLBCTD;调用进制转换子程序
PUSHAX
ANDAL,0F0H;选取AL高四位
MOVCL,4;设置右循环的次数
ROLAL,CL;右循环
ORAL,30H;加30H得到ACSII码
MOV[BX],AL;将得到的结果送到T_BUFF缓冲区
INCBX;BX自加1,指针指向下一个缓冲区的下一个地址
POPAX
ANDAL,0FH;选取低四位
ORAL,30H
MOV[BX],AL;将转换后的低四位值送入缓冲区的第二个地址
INCBX
;----------------------------------------------------------
MOVAL,':
';显示分隔符号
MOV[BX],AL
INCBX
;-------------------------------------------------------
MOVAH,2CH
INT21H
MOVAL,CL;分钟数设定
MOVAH,0
CALLBCTD
PUSHAX
ANDAL,0F0H
MOVCL,4
ROLAL,CL
ORAL,30H
MOV[BX],AL
INCBX
POPAX
ANDAL,0FH
ORAL,30H
MOV[BX],AL
INCBX
;-------------------------------------------------------------------------
MOVAL,':
';显示分隔符号
MOV[BX],AL
INCBX
;-------------------------------------------------------------------------
MOVAH,2CH;秒设定
INT21H
MOVAL,DH
MOVAH,0
CALLBCTD
PUSHAX
ANDAL,0F0H
MOVCL,4
ROLAL,CL
ORAL,30H
MOV[BX],AL
INCBX
POPAX
ANDAL,0FH
ORAL,30H
MOV[BX],AL
INCBX
;----------------------------------------------------------------------
MOVAL,'$';将字符串的结束位送至显示缓冲区的最后一位
MOV[BX],AL
;------------------------------------------------------------------------
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
INT21H
PUSHBX;置光标位置
MOVAH,2
MOVBH,0
MOVDH,10
MOVDL,21
INT10H
POPBX
LEADX,MESS
MOVAH,9
INT21H
;-----------------------------
CALLDELAY1;调用精确延时子程序
MOVAH,1;调用键盘I/O中断功能号1,获取键值到AL
INT16H
CMPAL,'B';是B键,转到日期修改程序
JEBORRECT
CMPAL,'B';是B键,转到日期修改程序
JEBORRECT
CMPAL,'C';是C键,转到时间修改程序
JECORRECT
CMPAL,'C';是C键,转到时间修改程序
JECORRECT
CMPAL,1BH
JZQUIT;是ESC键,退出程序
JMPDISPLAY
QUIT:
MOVAH,4CH;程序终止功能号
INT21H
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里
RET
BCTDENDP
;---------------精确延迟时间子程序---------------
DELAY1PROC
MOVDX,04FFH;循环次数
UP:
XORCX,CX
A:
NOP
LOOPA
DECDX
JNZUP
RET
DELAY1ENDP
;---------------时间修改子程序------------
CORRECTPROC
CALLINPUT;调用键盘输入子程序输入数据
MOVCH,HOR
MOVCL,MIN
MOVDH,SEC
ANDDL,0H
MOVAH,2DH
INT21H
JMPSTART
RET
CORRECTENDP
;---------------键盘输入子程序----------
INPUTPROC
PUSHAX;入栈保护数据
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVDX,OFFSETTN;显示修改时间的格式提示
MOVAH,09H
INT21H
MOVDX,OFFSETT_BUFF;数据缓冲区的数据输入
MOVAH,0AH
INT21H
ANDDX,0H
LEABX,T_BUFF
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVCH,AL
MOVHOR,AL
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVCL,AL
MOVMIN,AL
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVDH,AL
MOVSEC,AL
POPF;出栈恢复数据
POPDX
POPCX
POPBX
POPAX
RET
INPUTENDP
;---------------日期修改子程序------------
BORRECTPROC
CALLINPUT2;调用键盘输入子程序输入数据
MOVCX,YEAR
MOVDH,MON
MOVDL,DAY
MOVAH,2BH
INT21H
JMPSTART
RET
BORRECTENDP
;---------------键盘输入子程序----------
INPUT2PROC
PUSHAX;入栈保护数据
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVDX,OFFSETTB;显示修改日期的格式提示
MOVAH,09H
INT21H
MOVDX,OFFSETT_BUFF;数据缓冲区的数据输入
MOVAH,0AH
INT21H
ANDDX,0H
LEABX,T_BUFF
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVAH,00H
MOVCX,100
MULCX
MOVYEAR,AX
MOVAX,00H
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
ADDYEAR,AX
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVMON,AL
INCBX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOVDL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOVDAY,AL
POPF;出栈恢复数据
POPDX
POPCX
POPBX
POPAX
RET
INPUT2ENDP
;----------------------------
CODEENDS
ENDSTART
5.系统调试
5.1显示系统时间
5.2按B键修改年月日
说明:
修改日期时,必须将B消除掉,才能按正确的格式修改日期。
然后按下Enter键,系统会保存已修改好的值。
输入的格式为xxxxxxxx,要有空格。
5.3按C键修改具体时间
说明:
修改时间时,也要消除C然后输入正确的格式对时间进行修改。
按下enter键自动保存时间。
输入的格式同上。
6.设计总结
为期一周的《微机原理课程设计》结束了,回想起这一周的课程设计,颇有一些感慨。
此次课程设计的题目对我来说并不简单,由于汇编知识的匮乏,在前面几天的时间基本上是把《微机原理与接口技术》上的例题看懂,同时查找一些关于汇编知识的书籍,逐渐才摸索出编写时钟程序设计的思路以及程序模块的具体编写。
尽管这一周的课程设计时间短暂并且困难重重,但是在解决困难的同时我也学到了许多课堂上学不到的东西。
在整个设计过程中,我不但查阅了一些相关的资料,还得到了老师和同学们的帮助,无论在理论和实践能力都得到了很大锻炼,不但使我学到了很多知识,还促使我能深入独立思考一些问题,这对我以后的学习和工作有很大的益处。
当然由于时间仓促,加上我的编写水平有限,这次课程设计也有很多有待改进及完善的地方,还请老师指正,在以后的时间里我会进一步进行学习和完善。
7.参考文献
(1)谭浩强主编的《微型计算机原理与接口技术》(第三版)中国铁道出版社;
(2)雷印胜、贾萍、胡晓鹏等主编的《汇编语言程序设计教程》科学出版社;
(3)詹仁华主编的《汇编语言程序设计习题解答及课程实验、设计辅导》中国电力出版社;
(4)郑初华主编的《汇编语言、微机原理及接口技术》(第二版)电子工业出版社;