《微机原理与接口技术》.doc
《《微机原理与接口技术》.doc》由会员分享,可在线阅读,更多相关《《微机原理与接口技术》.doc(28页珍藏版)》请在沃文网上搜索。
1、武汉理工大学微机原理与接口技术课程设计说明书1.设计任务及要求1.1微机原理与接口技术课程设计目的 对典型的微机应用系统进行设计,要求根据具体的课题题目画出系统结构框图、系统接线图;能用所学习的汇编语言进行典型的程序设计并上机进行调试。并能根据要求写出设计课程设计报告,报告要求文字整洁、语言通顺、制图规范、程序完整正确。1.2设计任务本课程设计是一个在键盘上练习打字并统计时间及正确率的实用程序。在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,按某个键开始练习,可显示出练习的时间及正确率,并一行练习完毕后系统自动生成另外一行随机字母。1.3设计要求1设计要求:(1)设计一个在键
2、盘上练习打字并能统计时间及正确率的程序。(2)熟悉和掌握有关键盘和时间的中断及字符显示计数。(3)编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。2设计功能:(1)按照显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间及正确率,打字练习过程中输入的字符与打字练习的内容不符时会产生警报,打字练习可以一直进行下去直至练习者停止 (2)能用自编的中断向量处理程序处理中断。 2.方案比较及论证2.1方案比较根据打字计时练习的设计要求可知,我们可以依据缓冲区中字符系列的产生这一要求的实现有两种设计方案:方案一是缓冲区中的
3、字母是预先设定好的,后面所进行的打字练习是依照预先设定好的字符系列进行;方案二是缓冲区中的字母是随机生成的,每一次打字练习的字符系列都是随机产生的。其他要求的实现都是一样的。方案一:缓冲区中的字符系列是预先设定好的。这种设计方案要求在内存中预先开辟一段存储空间存放将要进行打字练习的字符系列,在后面进行打字练习的时候再将字符系列取出进行操作。这种设计方案占用的内存较多并且需要先将字符系列取出后再进行操作,程序写起来很长,指令太多,同时设计的方案对于使用者来说太过单一,想尝试不同字符系列的打字练习时还要另行修改程序,适用性差。方案二:缓冲区中的字符系列是系统自动随机生成的。这种设计方案要求系统随机
4、生成字符系列,不需要预先分配内存单元,在开始新一轮的打字练习时就自动随机生成字符系列。这种设计方案运用到的指令少,占用的内存少,设计的程序适用性好,不需要修改程序就可以尝试不同的字符系列的打字练习。2.2方案论述在设计打字练习时,根据打字练习的过程来设计打字计时练习的程序,首先在打字练习的界面上要有输出的提示信息提示对打字练习要进行的操作,其次是打字练习内容字母系列的生成,然后才开始进行打字练习,打字计时练习的过程在系统内部是一个不断循环的过程,在系统内部时钟每次嘀嗒计数循环一次,首先需要判断是否从键盘键入字符,这里面有一个循环检测的过程直至有字符键入系统,其次需要知道键入的字符是否是特殊字符
5、,判断打字练习进行哪步操作。这是一个大的分支程序,需要有很多的跳转并且需要不断的调用子程序实现不同的功能。最后在一轮打字练习结束时需要有一个分支的选择,是再次进行打字练习的设置还是退出打字练习的程序。3.软件设计说明3.1软件思想由打字计时练习的设计要求可知设计主要分为以下几个步骤:打字练习过程中提示信息的输出,随机字母系列的生成,打字练习过程中键入字符的正确与否,打字练习过程的时间及正确率的显示,字母系列是否键入完毕。运用汇编语言设计的程序分为主程序和子程序。主程序主要用于随机字母系列的生成,打字计时练习过程键入字符正确与否的判断,字母系列是否输入完毕,打字计时练习的新一轮的开始。子程序分别
6、实现不同的功能,分别如下:子程序SHUCHU_TISHI中,实现的是打字练习过程中输出提示信息。子程序BINDEC实现的是显示时间,分别将各遍野单元的二进制数转换为十进制数,并以COUNT5:COUNT4:COUNT3的形式显示出来。子程序DECDIV实现的是数字以ASCII字符形式输出子程序TIME实现的是打字练习过程的计时及输出子程序SOUND实现的打字计时练习过程中键入字符与相应打字内容不等时的警报。方案一的设计思路:系统随机生成打字练习的内容将需要输出的提示信息,记录打字练习的正确率参数及计时单元等预先放在DATA数据段中,程序开始时就输出提示信息然后系统随机生成打字内容存放在内存中,
7、然后开始打字练习,由自编的中断程序PRESS检测按键时产生的中断,并把按键的扫描码转换为ASCII码,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。在主程序部分保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。键入的字符时,还应判断字符是否为空格(20H)。如为空格,需要再次的调用INT21H中断,从键盘输入字符直至输入的字符不是空格,还要判断是否是退出和回车,如果是跳到重新输入字符处,重新开始从
8、键盘键入字符判断。如果不是,进入键入的字符是否是正确处,进行各自相应的操作直至键入某一功能键(如Esc键、Shift键等)退出程序,结束打字练习。在键盘打字计时采用10类型的键盘中断,来取得输入字符并将字符显示在屏幕上;在统计时间时利用08类型的定时器中断所嵌套的ICH软中断来计时。当一个字符输入完后(回车键作为结束符),屏幕上以COUNT5:COUNT4:COUNT3的格式显示出打字练习的时间。在统计时间和正确率时需要利用数制转换子程序,将系统自行计数的二进制转换成十进制输出。自行编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向
9、量。自编中断处理程序也是本课题需要考虑的重要问题。虽然系统自带了许多中断例行程序可以由INT指令来执行,但在本课题中需要对原中断例行程序的功能进行扩充才可。3.2程序流程图主程序如图所示:图一主程序流程图上图为主程序流程图,是依据设计思路中未调用子程序的几个步骤得来TIME PROC 时间子程序流程图如图2所示:PUSH AX判断DH是否为零PUSH DXMAIN: 否MOV AH, 2INT 1AHCMP DH, SECONTJNE GETJMP NEXT 是 秒表COUNT3加一GET: MOV SECONT,DHINC COUNT3MOV AX, COUNT3CMP AX, 60判断CO
10、UNT5是否为60JNE NEXT4MOV COUNT3, 0INC COUNT4MOV AX, COUNT4 否CMP AX, 60JNE NEXT4 是MOV COUNT4, 0将COUNT5置零,并将分钟加一INC COUNT5NEXT4:MOV DH, 20MOV DL, 23MOVTO DH, DL 是MOV AX, COUNT5 判断COUNT4是否为60CALL BINDEC 否MOV AH, 2MOV DL, :INT 21HMOV AX, COUNT4CALL BINDEC将COUNT4置零,并将小时加一MOV AH, 2MOV DL, :INT 21HMOV AX, COU
11、NT3CALL BINDEC 显示时间NEXT:POP DXPOP AXRET 图二 时间子程序流程图TIMEENDPSOUND PROC PUSH AX 报警子程序流程图如图3所示:PUSH CX 输入控制参数 IN AL, 61H AND AL, 11111101B OUT 61H, AL MOV CX, 10000 将AL的第二位取反AGAIN_S: XOR AL, 2 OUT 61H, AL CALL DELAY LOOP AGAIN_S 将AL的值通过端口地址传进去 POP CX POP AX RETSOUND ENDPDELAY PROC PUSH CX 延迟 MOV CX, 0F
12、FFHNEXT_D: NOP LOOP NEXT_D POP CX 图3 报警子程序流程图 RETDELAY ENDP 在主程序中对键入字符ACSII是否介于33和127之间的判断,其流程图如图4所示:图4:键入字符的判断流程图3.3代码设计1. 功能模块说明(1)定义数据段,设置主要参数: 输出提示信息,记录正确率和计时的参数(2)代码段调用中断8259,键盘中断,时钟中断,设置打字计时文件程序顺序(3)使用子程序分化各子功能SHUCHU_TISHI PROC ;输出提示信息SOUND PROC ;发声BINDEC PROC NEAR ;将二进制转化为十进制显示时间DECDIV PROC N
13、EAR ;转化成字符显示TIME PROC ;统计时间 2. 具体代码实现及关键代码分析;定义堆栈段;*SSEG SEGMENT STACK STACK DW 100 DUP(?)SSEG ENDS;* 整个程序按两个中断源分为两部分。在数据段中,前半部分是键盘处理所需要的数据变量,包括输入字符,字符缓冲区,09H中断向量的保存单元等。后半部分是定时器中断处理所需要的数据变量,其中有一个打字练习内容及其地址表SADDR,计时单元COUNT3,COUNT4,COUNT5以及记录真确率的变量COUNT0,COUNT1中断向量的存贮单元等。在堆栈段定义一个“先进先出”的缓冲区(buffer):由于键
14、盘是通过中断方式工作的,由于键盘中断的出现是完全随机的,因此要示键盘I/O程序要缓冲或保留它接收的任一键盘输入。故需定义一个缓冲区,也叫循环队列。;定义数据段;*DSEG SEGMENT DATA;显示窗口内容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB PRESS ESC TO END! $ MSG3 DB THE PASSED TIME:$ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER TO RESTART!$ MSG6 DB PRESS ESC TO OUT! $ SECONT DB 0 COUNT0
15、 DW 0 ;为了记录正确的字符数 COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制 COUNT3 DW 0;秒 COUNT4 DW 0;分 COUNT5 DW 0;时DSEG ENDS;*数据段定义了在后面要用到的计时变量,记录打字练习的正确率及需要输出的提示信息;定义代码段;*CSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*主程序start:输出打字操作的提示信息,随机生成字符系列,打字练习过程,打字时间的统计及正确率的计算。;输出提示信息程序SHUCHU_TISHI PROC:通过对DH,D
16、L的赋值将光标定位在DH行DL列,调用宏定义OUTPUT设置输出字符串的属性并在DH行DL列输出;输出提示信息*SHUCHU_TISHI PROC ADD DH,3 ADD DL,28 OUTPUT MSG1,14, DH, DL ADD DH, 2 ADD DL,2 OUTPUT MSG2, 11, DH, DL RETSHUCHU_TISHI ENDP;*;正确率统计和报警程序由于本次课设还要求设计的汇编语言程序具有统计正确率的功能,所以必须要有一段可以实现记录输入字符个数,并通过一个判断输入的字符是否与屏幕上由程序自动生成的字符串当中相对应的字符相同的程序,若相同的话,则使得统计输入正确
17、的字符的寄存器增加一,然后将这两个程序联合使用来实现正确率的功能。由于这两个程序当中有需要调用其他子程序,涉及到的程序过多,这里只给出一小段核心程序,如下:MOVTO DH, DL ; 显示光标的位置MOV AX, COUNT0CALL BINDEC ; 显示输入字母的个数MOV AH, 2MOV DL, / INT 21H MOV AX, BINDEC ; 显示输入正确的字母个数CALL CHANGEPOP DXJMP PRESS 首先在这段程序当中,用到了宏指令MOVTO,前面也说到了该宏指令可以通过控制DH、DL的值来控制输出字符的位置。从而可以方便的控制想要显示的内容在屏幕上的位置。在
18、这段程序当中还涉及到了INT 21H中断的应用,当AH当中为02H时,DL当中的存储内容就是直接显示的内容,在这里我们用到“/”即分数的形式来表达正确率,而不是直接计算出百分比。“/” 前面显示的内容是用户输入的内容与程序显示的字符一致的个数,作为分子,而“/”后面显示的内容是用户一共键入的字符个数,作为分母。由于在计算机当中,数据均以二进制的形式来储存,但二进制并不是我们所习惯的数值表达方式,所以数据输出前需要经过一个进制转换程序的处理,经转换以后再输出到屏幕上供用户观看。在这里就又涉及到了进制转换程序。由于在本程序当中,进制转换程序并不是主要的程序单元,它只用作为辅助程序。需要提到的是当用
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理与接口技术 微机 原理 接口 技术
