《微机原理与接口技术》课程设计-显示系统时间的程序_第1页
《微机原理与接口技术》课程设计-显示系统时间的程序_第2页
《微机原理与接口技术》课程设计-显示系统时间的程序_第3页
《微机原理与接口技术》课程设计-显示系统时间的程序_第4页
《微机原理与接口技术》课程设计-显示系统时间的程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 目 录 TOC o 1-3 h z u HYPERLINK l _Toc252198329 1 设计的目的要求1 HYPERLINK l _Toc252198330 1.1 设计目的1 HYPERLINK l _Toc252198331 1.2 设计任务2 HYPERLINK l _Toc252198332 1.3 具体要求2 HYPERLINK l _Toc252198333 2任务原理分析2 HYPERLINK l _Toc252198334 2 HYPERLINK l _Toc252198335 3 HYPERLINK l _Toc252198336 子程序13 HYPERLINK l

2、 _Toc252198337 2.2.2 子程序24 HYPERLINK l _Toc252198338 2.2.3 子程序37 HYPERLINK l _Toc252198339 2.3 拓展设计及功能说明9 HYPERLINK l _Toc252198340 2.4 程序设计的主流程图9 HYPERLINK l _Toc252198341 3 方案比拟10 HYPERLINK l _Toc252198342 3.1 方案110 HYPERLINK l _Toc252198343 3.1.1 原理说明10 HYPERLINK l _Toc252198344 3.1.2 相关理论知识 PAGE

3、REF _Toc252198344 h 11 HYPERLINK l _Toc252198345 3.1.3 方案1的流程图12 HYPERLINK l _Toc252198346 3.2 方案213 HYPERLINK l _Toc252198347 3.2.1 原理说明13 HYPERLINK l _Toc252198348 4 程序的调试过程14 HYPERLINK l _Toc252198349 5 调试过程中的问题16 HYPERLINK l _Toc252198350 6 心得体会17 HYPERLINK l _Toc252198351 参考文献18 HYPERLINK l _To

4、c252198352 附录19显示系统时间的程序1 设计的目的要求 设计目的1. 掌握中断的使用方法。2. 掌握BIOS系统功能调用。3. 掌握根本的显存读写技术。4. 学会用汇编语言编写一个较完整的实用程序, 培养自己的动手操作能力。5 . 学习程序设计的根本思路和方法,编程、调试、撰写报告等。1.2 设计任务采用汇编语言设计一个显示系统时间程序,在屏幕上以“时:分:秒的形式显示本机系统的时间。按Q退出程序。 具体要求设计任务及要求分析方案比拟及认证说明系统原理阐述软件设计课题需要说明:软件思想,流程图,源程序及程序注释调试记录及结果分析总结参考资料附录:芯片资料或程序清单,软件演示屏幕拷贝

5、图或硬件实物图2任务原理分析本课设的设计任务要求在运行时,在屏幕上以“时:分:秒的形式显示本机系统的时间,并且按Q退出程序。由此可知,首先定义光标显示界面,然后调用BIOS中断,读取系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入显存区,最后将存在系统内存区的时间用字符串的形式显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成循环的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可输入“Q即可退出。如果用图形方式显示效果会更好,而且需注意设置显示时候的背景颜色。在本课程设计中,主要需要

6、三个子程序来完成。子程序分析子程序1 子程序1的功能就是设置光标位置。其根本原理是:在子程序1中,我用到了显示器驱动程序INT 10H中AH=2的功能。AH=2的功能是设置光标位置,入口参数:DH,DL=行、列;BH=页号图形模式为0。为了使显示的时间在DOS屏幕中的中间显示,DX设置为0A24H,即DH=0AH,DL=24H,就是在0AH行,24H列。如果想改变时间显示的位置,只要改变DX的数值就可以到达目的。由于在第零页中定位,可用SUB BH,BH来完成此操作。子程序1的源程序如下:MOV BX,005EHMOV AX,1301HINT 10H ;设置光标位置 MOV AH,02HMOV

7、 DH,0AHMOV DL,24H ;dh显示行x坐标;dl显示列y坐标MOV BH,0 ;页码为0INT 10H子程序1的流程图如图1所示。图1 子程序1的流程图2.2.2 子程序2子程序2的功能是把二进制数转换为十进制ASCII码输出。其根本原理是:首先要完成二进制到十进制数的转换,一般采用“除10取余法来完成,其大致过程如下:将待转换的数在AX中除以10,得到第一个商和余数,此第一个余数就是所求的十进制数的个位;再用第一个商除以10,得到第二个商和余数,此第二个余数就是所求十进制数的十位;重复这一过程直至商为0,此时的余数就是所求十进制数的最高位。 在内存中分配一缓冲区,用来存放以上别离

8、出来的十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很简单,就是给每个十进制位加上30H即可;最后送显示器输出。从转换的过程可以看出,先别离出来的是十进制数的低位,要后显示;后别离出来的是十进制数的高位,应该先显示。因此在编程时,我们可以利用堆栈操作中“先进后出、后进先出的特性,当别离出各十进制位时依次入栈,要逐个转换成ASCII码送显示时依次出栈。 子程序2的流程图如下:BIN10OUT PROC ;二进制转十进制ASCUII码输出子程序 PUSH DI PUSH DX PUSH CX PUSH AX MOV CX,0 LEA DI,TBUF ;去缓冲区首地址BIN

9、1: PUSH CX MOV AX,DX MOV DX,0 MOV CX,10 DIV CX ;AX内容除以DX内容,商在AX,余数在DX XCHG AX,DX ;交换AX,DX的内容 ADD AL,30H ;余数加30H,入栈准备输出 MOV DI,AL INC DI POP CX INC CX ;累加每调用一次要输出的位数 CMP DX,0 ;商和0比拟 JNZ BIN1 ;不等于0转BIN1 CMP CX,1 ;累加器和1比拟 JNZ BIN2 ;不等于1转BIN2 MOV AH,2 ;等于1位,先在改位前输出0 MOV DL,0 INT 21HBIN2: DEC DI ;等于0输出十进

10、制数的各位 MOV AL,DI CALL STDOUT LOOP BIN2 POP AX ;恢复现场 POP CX POP DX POP DI RETBIN10OUT ENDP子程序2的流程图如图2所示。图2 子程序2的流程图.3 子程序3子程序3的功能是读取系统的时间。其根本原理是调用DOS中断功能中的INT 21H ,当AH=2CH时,读取系统的时间,使得CH:CL=时:分,DH:DL=秒:秒100,此程序中精确到秒,这里只要提取时、分、秒、并在内存中分配一缓冲区,用来存放时间,不过此时的时、分、秒都是二进制的,因此要进行二进制和十进制的转换因此进入BCDASC1子程序进行转换成相应的AS

11、CII码字符。子程序的源程序如下: TIME PROC NEAR ;显示时间子程序 DISPLAY1: MOV SI,0 MOV BX,100 ;除以100取整、取余 DIV BL MOV AH,2CH ;取系统时间 INT 21H MOV AL,CH ;把小时数给al CALL BCDASC ;将时间数值转换成ASCII码字符 INC SI MOV AL,CL ;把分数给al CALL BCDASC INC SI MOV AL,DH ;把秒数给al CALL BCDASC MOV BP,OFFSET DBUFFER ;输出:,作为分隔符 MOV DX,0C0DH MOV CX,8 MOV B

12、X,005EH MOV AX,1301HRE: MOV CX,0FFFFH ;延时 DEC BX ;bx减1 JNZ RE ;如果不等于零,转移到re MOV AH,01H ;读键盘缓冲区字符到AH存放器 INT 16H ;读磁盘变化状态 JE DISPLAY1 ;相等转移到display1程序 JMP START MOV AH,4CH INT 21H ;返dos RET TIME ENDP 子程序3的流程图如图3所示。图3 子程序3的流程图 拓展设计及功能说明 在本课设中,在完成老师要求的ASCII码的转换等根本任务以外,我还在显示方式中的背景颜色和字体颜色等方面做了拓展。为了使屏幕显示更加

13、美观,同时也可以方便地改变字体颜色,我采用的是显示器输出中断调用即为INT 10H,其中的0号功能就是指设置显示方式,入口参数:AH=0功能号,AL=设置方式0 7。出口参数:无。一共有8中不同的显示方式,通过修改AL的值即可。 程序设计的主流程图其程序设计的主流程图如图4所示:图4 程序设计的主流程图3 方案比拟 方案1 原理说明首先在数据段开辟一显示缓冲区,用来存储系统时间。然后调用BIOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,分别将来小时数、分钟数、秒数存入显示缓冲区。按照输入的提示,假设输入为“T时, 那么通过写显存将时间显示出来,并且运用了延时设置CX,进行缓

14、冲,对BX递减1并判断BX,当结果为0时,然后读取键盘缓冲区字符,假设键盘缓冲区有新的字符输入,那么跳入START重新开始,假设,没有那么继续从系统读取系统时间,程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可输入“Q即可退出。在本方案中用到了我以上介绍的三个子程序。 相关理论知识1、BIOS功能调用:在存储器系统中,内存器高端8K的ROM中存放有根本输入输出系统即为basic Input/Output System,BIOS例行程序。BIOS给PC系列的不同微处理器提供了兼容的系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用

15、BIOS功能调用,给程序员编程带来极大方便。程序员不必了硬件的具体细节,可直接使用指令设置参数,并中断调用BIOS例行程序,所以利用BIOS功能调用编写的程序简洁,可读性好,而且易于移植。调用DOS或BIOS功能时,有以下几个步骤:1、将调用参数装入指定的存放器。2、如需功能调用号,把它装入AH。3、如需子功能调用号,把它装入AL。4、按中断号调用DOS或BIOS。5、检查返回参数是否正确。2、ASCII的转换与扫描码:键盘是计算机最根本的一种输入设备,用来输入信息,以到达人机对话的目的。当在键盘上“按下或“放开一个键时,如果键盘中断是允许的21H端口的第一位等于0,就会产生一个类型9的中断,

16、并转入到BIOS的键盘中断处理程序。非ASCII码键产生一个指定的操作。在方案1中就用到了通过单个字符的输入来对菜单的项进行选择,这样的程序也称为交互程序。3、显示器输出中断调用:10H中断调用为显示器中断,共有17种功 能。下面列出这次课设程序设计时可能需要的几种功能的使用情况。1、设置显示方式0号功能入口参数:AH=0功能号,AL=设置方式07。出口参数:无。其局部显示方式的8中情况如表1所示:AL显示方式04025黑白文本方式14025彩色文本方式28025黑白文本方式38025彩色文本方式4320200彩色图形方式5320200黑白图形方式6640200黑白图形方式7 8025黑白文本

17、方式表1 8种不同的显示方式2、设置光标类型1号功能入口参数:AH=1功能号,CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小。3、设置光标位置2号功能入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。4、读当前光标位置3号功能入口参数;AH=3功能号,BH=页号。出口参数:DH=行号,DL=列号,CX=光标大小。 方案1的流程图其方案1的流程图如图4所示:图4 方案1的流程图 方案2 原理说明 本方案采用调用几个子程序的思想来完成系统时间的显示,首先取中断向量,保存原有中断,然后设置光标的位置,按课设任务的要求,应该设

18、置在屏幕的中央。接着调用BIOS中断的日时钟INT 1AH,读取系统的时间,然后再调用子程序1将小时的数值转化为ASC码,并且显示出来,再调用显示分号的子程序,分钟和秒钟的转化和显示依次和小时的同理。而在子程序1中又嵌套了两个子程序,一个是将数值转为ASC码的子程序,另一个是将字符显示在屏幕上的子程序。在方案2中,用到了和方案1差不多的理论知识,比方说也用到了BIOS中断的INT 10H的功能中断,也用到了键盘扫描码等等。这里就不再赘述。但是在方案2中,较多的用到了子程序调用的思想。在编程方面,与方案1不同的是,在方案2中我采用了另一种方法来将数值转化为ASC码,即将数值循环的除以10,得到的

19、商即为所转化的十进制的数值,但是这种方法比拟原始,没有什么技巧性。而且在本方案中较多的运用了子程序的调用,过程显得比拟复杂。方案1的程序比拟简洁明了,思路也比拟清晰,综上所述,我选择方案一。4 程序的调试过程1编译汇编源文件,命名为asm。2asm将生成一个OBJ文件,如果有程序有错误,那么提示不能生成OBJ文件,那么就要检查源程序中的错误,并改正。3点击连接,然后点击运行,即可显示结果。结果如下图。4如果要退出程序,从键盘中输入“Q即可。分析:调试屏幕上显示的提示语与系统时间的位置都可通过前面介绍的内容来改变,且程序可从键盘中输入 “Q来退出,很方便简单。而且编者可以根据自己喜欢的颜色来改变

20、字体和背景的颜色。程序所显示的结果如图5所示。图5 运行的结果显示当键盘输入“Q时,程序的显示如图6所示。图6 当按“Q时的程序显示5 调试过程中的问题及解决方法首先是在编程的过程中,在如何使用中断程序来读取系统时间上遇到了难题,因为在平时的理论课上,这一方面接触的比拟少,用什么形式的中断实现功能,对中断的初始化、具体设置、中断返回还不是很清楚,对中断向量表的装载也比拟模糊,由于遇到了这些,我只好先停下我的编程,去图书馆借了清华大学出版社的?汇编语言程序设计?等几本书,认真翻阅了其中关于中断功能的知识,也从网上下载了一些例题和功能介绍来研究学习。在我重点研究了中断过程,通过对这一内容的学习之后

21、,终于对中断有了详细的认识,在设计程序时也容易了很多。其次是在程序调试的过程中,当我按下编译的按键时,虽然显示了是编译成功,但是下面却有两个警告Warning 如图7所示。图7 调试过程中的问题在认真检查后发现是由于STACK和ATR的位置和格式有问题,在修改了以后,将程序保存后再编译时,那么显示编译成功,而且没有警告。总之,在编程和调试过程中都有遇到一些不会的地方,但在经过研究和修改之后,都克服这些难题,最终完成所要求的任务。6 心得体会做了两个星期的微机原理课程设计之后,我从中发现了自己还有很多不会的东西,也学到了很多知识。虽然这学期我们学习了微机原理这门课,对汇编语言有了一定的了解和掌握

22、,也有相应的微机原理实验课让我们加强实践,但是真正轮到自己放手去做时,才发现面对一些以前没遇到过的问题,要自己认真地去研究和分析,当最后看到自己的编写的程序调试成功的时候,我真的觉得很开心,有一种小小的成绩感油然而生。首先是编写程序的过程。刚刚开始时,对于要实现课设的任务需要用哪些指令和知识点都是一头雾水,还有在编程中需要用到一些以前没学过或者没接触过的指令时,比方说如何设置光标位置,如何设置显示方式,如何读取系统时间等等,要自己去翻阅相关的书籍,也利用网络搜索到了很多相关的介绍和例题,进行研究和学习。同时我也很感谢和那些我一起的同学们,遇到难题,我们有时互相讨论,互相帮助,共同解决,这让我们

23、在编程的过程中加快了学习和理解的效率。通过这次的编程,我对微机原理和汇编语言程序有了更加深的认识和理解,也给了我一个很好的时机,讲平时理论课上学到的知识和实践的编程联系起来,我想这对我今后的编程有了很大的帮助。其实是程序调试的过程。在我编写完程序后,我迫不及待的进行调试,却发现并没有形成可执行文件,后来经过分析和检查后发现,我的第一个方案的源程序应该在DOS下运行,于是我用了轻松汇编这个软件。再次进行安装和调试时,就可以正确显示出我的结果。这点让我领悟到,任何时候出现问题都不要慌张,应该冷静的认真的分析,总会找到可以解决的方法。最后是课设材料的整理和编写的过程。由于有了前几次的课程设计的经历,

24、对于排版和字体等的具体要求可以做得比拟好,我想这对今后的毕业设计的撰写有很大的帮助。总之,这次的课程设计让我有三个方面的收获。第一,是对于课本知识的稳固和提高,对学过的只是一次很好的回忆,因为我们平时这样的实践时机不是很多。第二,是我学会了更好地用汇编语言来编程,对于汇编语言的思想和很多的指令在这次课设中都有很大提高。第三,是对各种编程的软件有很了很好的熟悉和认识,对今后再次使用这些软件有很大的帮助。参考文献1 沈美明、温冬婵编著.?IBMPC汇编语言程序设计(第二版)?.北京:清华大学出版社. 2005年2 沈美明、温冬婵编著.?IBMPC汇编语言程序设计(第一版)?.北京:清华大学出版社.

25、 1997年3 周佩玲、彭虎、傅忠谦编著.?微机原理与接口技术?. 北京:电子工业出版社.北京:清华大学出版社. 2007年5 张雪兰、谭毓安、李元章著.?汇编语言程序设计从DOS到WINDOWS?. 北京:清华大学出版社.2006年 6 余朝琨著.?IBM-PC机汇编语言程序设计?.厦门:厦门大学出版社.2001年 附录系统时钟显示源程序:STACK SEGMENT DW 200 DUP (?) STACK ENDS DATA SEGMENT SPACE DB 1000 DUP ( ) DBUFFER DB 8 DUP (:),12 DUP ( ) DBUFFER1 DB 20 DUP (

26、) STR DB PLEASE INPUT TIME(T) QUIT(Q),0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,000DH ;设置显示方式为320*200彩色文本方式 BIOS 中断命令 INT 10H ;显示效劳 MOV AX,DATA MOV DS,AX MOV ES,AX ;数据段,附加段定义 MOV BP,OFFSET SPACE LEA DX,STR ;显示提示信息 MOV AH,9 ;显示提示信息字符串 INT 21H MOV AH,1 ;从键盘输入单个字符 INT 21H CMP AL,54H ;AL=T? JNE B ;不等于那么转到B程序段 CALL TIME ;显示系统时间 调用TIME子程序 B: CMP AL,51H ;AL=Q? JNE STAR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论