




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微 机 原 理 课 程 设 计 书院别 电气工程学院 专业 电气工程及其自动化 班级 题目 打字计时程序 学生 学号 同组者 2011年 1 月 7日打字练习计时程序目 录第一章 设计要求11.1设计任务11.2设计要求11.3设计目的1第二章 设计环境1DOS中断介绍1第三章 课题设计33.1硬件设计33.2软件设计33.3系统运行过程描述43.4 设计中遇到的问题及解决方法53.5 新增功能及其实现方法5第四章 设计体会6附录6附录一 程序流程图6附录二 源程序8第一章 设计要求1.1设计任务利用PC机键盘和时间中断、字符显示实现打字练习程序。1.2设计要求1) 自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2) 在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3) 每输入完一行按回车键后,可显示出练习输入的时间。4)自行添加若干功能。 1.3设计目的 熟悉与掌握有关键盘和时间的中断及字符显示技术。第二章 设计环境 DOS中断介绍 使用DOS提供的程序控制硬件。优点是兼容性好,使用方便。DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。DOS的功能调用不依赖于具体的硬件系统。所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。其功能一览表可参见附录。为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号称为功能号。这样,用户就能通过指定功能号来调用INT 21H的不同子功能。DOS系统功能调用的方法如下:1) -功能号。2) 在其他寄存器中放入该功能所要求的人口参数。3) 在执行INT 21H指令。4) 分析出口参数。用户程序与DOS、BIOS和硬件的关系见图应 用程 序DOSBIOS硬 件第三章 课题设计3.1 硬件设计通过将从8259A的INT端与主8259A的IRQ2相连来实现两片8259A的级联,主8259A的IRQ0接收8254的55ms定时器中断,IRQ1接收键盘中断。主8259A的INT端与CPU相连。3.2 软件设计在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中。自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。在主程序部分保存原有09类型的中段向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车符(0DH)。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某一个功能(如Esc键、Shift键等)退出程序,结束打字练习。打字时间统计利用自编的定时器中断处理程序Clint来完成。每输入一个例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count的计数值为18时,sec计数单元加1,当sec计数值打到60时,min计数单元加1.因为输入完一个句子无论如何也不会到达小时级,所以对hours计数值的调整判断,实际上只起到退出定时器的作用。显示时间的子程序disptime分别将各计时单元的二进制数转换为十进制数,并以min:sec:msec的形式出来。其中msec是有count中的计数值转换成的: Count*1s/18.2=count*55ms此式中,18.2是计算机系统产生的一个时间中断,每秒18.2次 3.3 系统运行过程描述1.程序运行开始,设置堆栈段与数据段。然后调用定义过的宏定义,以显示一个用户欢迎和提示操作界面。2.清屏,调用显示动画的子程序,显示一段动画效果。3.关中断,然后保存09H和1CH中断向量到自设的单元中,用自定义的中断处理程序替换原中断。4.通过ICW1控制字允许8259A的IRQ0和IRQ1接收中断,开中断。5.调用kbget取字符,若队列为空,则一直循环等待字符输入。6.键盘中断产生后,在kbint中将有效输入字符存入队列。7.若输入无效,则退出程序;若输入有效,但对比例句输入有误,则显示红色字符,若输入正确,则正常显示字符。之后判断是否输入完一句,.若输入未完成,则继续等待字符输入;若输入完成,则显示输入所用的时间。8显示出输入字符的个数和错误的个数9.若五句都输入完成,则在显示错误个数后从第一句开始重新输入。10.在整个程序运行过程中开中断的时候,每55ms执行一次定时器中断,在clint中计时。3.4 设计中遇到的问题及解决方法1.统计输入错误个数时,发现如果例句未输完则错误个数显示正确,但是如果例句输完则错误个数总是少一个。检查发现当每次输完一句话时会按回车,当例句未输完时输的这个回车是错误的,最后输出错误个数时应该减一,而例句输完时输的这个回车是正确的,最后输出错误个数就不用减一。发现这个问题后我们对程序进行适当修改,避免了错误。 2.加新功能shift键时,中断程编写完后,运行程序时只要一按shift,屏幕上就会不停地出字符,当时吓了一跳赶紧关上了,然后仔细检查编写的中断程序没有发现问题,我开始怀疑原理有问题。但是我又重新看了一下整个程序,终于发现问题所在。在kbget里的kbflag是与0比较的,不是0的话返回。之前kbflag只有0和80h两个值,所以程序正确。而我改的中断程序中又赋予了kbflag新的值,所以kbget中应该与80h比较,是80h的话返回。3.5 新增功能及其实现方法1.宏调用。在程序的开始定义了一个宏,先设置好形参,在宏调用的时候把实参准备好即可。本功能的作用在于给用户问好,并提示应如何使用该软件。2.大写字符与上档字符输入功能。根据读取的扫描码可判别是否按下了shift键,并把按动的状态记录在一个标志单元kbflag中。按下right_shift键kbflag的第0位置1,按下left_shift键,kbflag的第1位置1,放开左或右shift键,kbflag恢复为0。当kbflag的第0位或第1位为1时,再按下数字键或字母键,则应被转换为上档符号或大写字符,为此应再设一个字符转换表shiftab。当未按动shift键时,所有按键通过scantab转换;当按下shift键时,按键应通过有相应上档符及大写字母的shiftab转换表。3.统计打字错误数和总数。定义了两个变量length1(总数)和length2(错误个数),每次调用dispchar或dispchar1后length1加一,每次kbget得到一个字符后与例句相同位置字符比较,不同则length2加一。通过将例句首址给di,然后di+length1来确定与输入字符同位置的例句中的字符。4.错误字符红色显示。每次得到一个字符后与例句中相同位置比较,相同调用dispchar显示,不同调用dispchar1显示。Dispchar1与dispchar不同之处就是其中的bx=2,则显示红色。5.加入动画效果。在开始测试打字前,欣赏一段动画,有利于放松心情,取得更好的成绩。动画子程序原理:用7个字符构造了一个小汽车,将这7个字符的ascii码,每个字符显示的类型,相对行及相对列放到一个表中,通过plot子程序能够将此小汽车画出。画出之后调用dly延时程序让小汽车显示,之后调用erase程序将小汽车擦除,就是让其显示成黑色。然后列数增加,再画出小汽车,再擦除。这样不断向前,看上去就是小汽车在移动,直到列数达到80,返回主程序。第四章 设计体会 此次课程设计让我感受颇多,从拿到课题开始,我就下定决心投入大量精力对待这项任务。之后查阅一些资料,对程序的每个细节有了更深入的了解,在反复看程序的过程中,大大加深了我对此程序的兴趣。之后又根据程序本身加了几个新功能,还算是比较顺利,遇到的问题都能自行解决,这也大大的增加了我的信心。通过此次课程设计,使我所学的知识得到了应用,全面的掌握了微型计算机与dos方式的工作原理、编程和使用方法。加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握dos开发方法,为以后进行实际的软件开发奠定良好的基础。附录附录一 程序流程图保存原中断向量09H到自设的单元中设置自定义处理程序的中断向量09H保存原中断向量1CH到自设的单元中设置自定义处理程序的中断向量1CH设置允许键盘和定时器中断设置显示方式为8025显示提示信息在屏幕上显示例句初使化变量count、sec、min、hours开始中断调用kbget检测并等待键盘中断的子程序kbflag=80h?(键盘输入的是控制键或功能键吗)调用dispchar显示该字符键入的字符为回车符0DHAL换行符(0AH)调用dispchar显示回车换行符字符调用disptime显示打字时间显示回车换行符字符5个例句都练习完了吗?开始恢复原中断向量1CH、09H,返回操作系统结束NYNYY附录二 源程序 MENU MACRO OP1,OP2,OP3 ;菜单显示宏定义 MOV AH,02H MOV BH,00H MOV DH,OP1 MOV DL,OP2 INT 10H MOV AH,09H LEA DX,OP3 MOV BH,0 MOV BL,0A4H INT 21H ENDM STACK SEGMENT PARA STACK stack DB 256 DUP(0) TOP LABEL WORD STACK ENDS DATA SEGMENT PARA PUBLIC data BUFFER DB 16H DUP(0) BUFPT1 DW 0 BUFPT2 DW 0 KBFLAG DB 0 PROMPT DB *please practise typing*,0DH,0AH,$ SCANTAB DB 0,0,1234567890-=,8,0 DB qwertyuiop,0DH,0 DB asdfghjkl;,0,0,0,0 DB zxcvbnm,./,0,0,0 DB ,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 789-456+1230. EVEN SHIFTAB DB 0,0,!#$%&*()_+,0,0 DB QWERTYUIOP,0DH,0 DB ASDFGHJKL:,0,0,0 DB ZXCVBNM?,0,0,0 DB ,26 DUP(0) EVEN OLDCS9 DW ? OLDIP9 DW ? STR1 DB AbcD efGh iJkl MnoP qrSt uVwx yZ. DB 0DH,0AH,$ STR2 DB There are some newspapers on the table. DB 0DH,0AH,$ STR3 DB There are some clouds in the sky. DB 0DH,0AH,$ STR4 DB She always eats her lunch at noon. DB 0DH,0AH,$ STR5 DB I do not like autumn and winter. CRLF DB 0DH,0AH,0AH,$ COLON DB :,$ EVEN STRING1 DB 0DH,0AH,THE LENGTH OF THE SENTENCE IS:,$ STRING2 DB 0DH,0AH,THE WRONG NUMBERS ARE:,$ LENGTH1 DW 0 LENGTH2 DW 0 SADDR DW STR1,STR2,STR3,STR4,STR5 COUNT DW 0 SEC DW 0 MIN DW 0 HOURS DW 0 SAVE_LC DW 2 DUP(?) ZK DB HELLO TEACHER.WELCOME TO TEST$ NO DB DATE:2011/1/1$ MEG DB PRESS ENTER KEY TO CONTINUE.$ MEG1 DB *$ MEG2 DB PRODUCER:Lvang Sunweifeng$ MEG3 DB NUMBER:200800190133 200800190175$ MEG4 DB HOPE THAT WE PLAY HAPPY!$ BUFA DB 200 DB ? DB 200 DUP(0) BUFB DB 200 DUP(?) CAR DB 7 ;小汽车的字符图形表 DB 52H,7,0,0 DB 0B1H,7,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,7,1,0 DB 4FH,7,0,-3 DB 2,7,-2,1 CHAR DW ? POINTER DW ? LINE DB ? COL DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MAIN PROC FAR START: MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX CALL QING MENU 05D,15D,ZK MENU 07H,15D,NO MENU 09D,15D,MEG MENU 11D,15D,MEG1 MENU 13D,15D,MEG2 MENU 15D,15D,MEG3 MENU 17D,15D,MEG4 MOV AH,01H INT 21H CMP AL,0DH JE SPEED3 CMP AL,20H JE EXT EXT: CALL QICHE MOV AH,4CH INT 21H SPEED3: MOV AH,35H MOV AL,09H INT 21H MOV OLDCS9,ES MOV OLDIP9,BX PUSH DS MOV DX,SEG KBINT MOV DS,DX MOV DX,OFFSET KBINT MOV AL,09H MOV AH,25H INT 21H POP DS MOV AH,35H MOV AL,1CH INT 21H MOV SAVE_LC,BX MOV SAVE_LC+2,ES PUSH DS MOV DX,SEG CLINT MOV DS,DX MOV DX,OFFSET CLINT MOV AL,1CH MOV AH,25H INT 21H POP DS IN AL,21H AND AL,11111100B OUT 21H,AL MOV AH,0 MOV AL,4 INT 10H FIRST: MOV DX,OFFSET PROMPT MOV AH,9 INT 21H MOV SI,0 NEXT: MOV LENGTH1,0 MOV LENGTH2,0 MOV DX,SADDRSI MOV AH,09H INT 21H MOV COUNT,0 MOV SEC,0 MOV MIN,0 MOV HOURS,0 STI FOREVER: CALL KBGET TEST KBFLAG,80H JNZ ENDINT MOV DI,SADDRSI ADD DI,LENGTH1 CMP DI,AL JZ M1 PUSH AX CALL DISPCHAR1 INC LENGTH2 JMP M2 M1: PUSH AX CALL DISPCHAR M2: POP AX INC LENGTH1 CMP AL,0DH JNZ FOREVER MOV AL,0AH CALL DISPCHAR CALL DISPTIME LEA DX,STRING1 MOV AH,09H INT 21H DEC LENGTH1 MOV AX,LENGTH1 CALL BINDEC LEA DX,STRING2 MOV AH,09H INT 21H MOV AL,0DH CMP DI,AL JZ M3 DEC LENGTH2 M3: MOV AX,LENGTH2 CALL BINDEC LEA DX,CRLF MOV AH,09H INT 21H ADD SI,2 CMP SI,5*2 JNE NEXT JMP FIRST ENDINT: CLI PUSH DS MOV DX,SAVE_LC MOV AX,SAVE_LC+2 MOV DS,AX MOV AL,1CH MOV AH,25H INT 21H POP DS PUSH DS MOV DX,OLDIP9 MOV AX,OLDCS9 MOV DS,AX MOV AL,09H MOV AH,25H INT 21H POP DS STI RET MAIN ENDP CLINT PROC NEAR PUSH DS MOV BX,DATA MOV DS,BX LEA BX,COUNT INC WORD PTRBX CMP WORD PTRBX,18 JNE RETURN CALL INCT ADJ: CMP HOURS,12 JLE RETURN SUB HOURS,12 RETURN: POP DS STI IRET CLINT ENDP INCT PROC NEAR MOV WORD PTRBX,0 ADD BX,2 INC WORD PTRBX CMP WORD PTRBX,60 JNE EXIT CALL INCT EXIT: RET INCT ENDP DISPTIME PROC NEAR MOV AX,MIN CALL BINDEC MOV BX,0 MOV AL,: MOV AH,0EH INT 10H MOV AX,SEC CALL BINDEC MOV BX,0 MOV AL,: MOV AH,0EH INT 10H MOV BX,COUNT MOV AL,55D MUL BL CALL BINDEC RET DISPTIME ENDP BINDEC PROC NEAR MOV CX,100D CALL DECDIV MOV CX,10D CALL DECDIV MOV CX,1 CALL DECDIV RET BINDEC ENDP DECDIV PROC NEAR MOV DX,0 DIV CX MOV BX,1H ADD AL,30H MOV AH,0EH INT 10H MOV AX,DX RET DECDIV ENDP KBGET PROC NEAR PUSH BX CLI MOV BX,BUFPT1 CMP BX,BUFPT2 JNZ KBGET2 CMP KBFLAG,80H JZ KBGET3 STI POP BX JMP KBGET KBGET2: MOV AL,BUFFER+BX INC BX CMP BX,16 JC KBGET3 MOV BX,0 KBGET3: MOV BUFPT1,BX POP BX RET KBGET ENDP KBINT PROC FAR PUSH BX PUSH AX; IN AL,60H PUSH AX IN AL,61H OR AL,80H OUT 61H,AL AND AL,7FH OUT 61H,AL; POP AX CMP AL,2AH JZ KBINT5 CMP AL,36H JZ KBINT6 TEST AL,80H JNZ KBINT7 TEST KBFLAG,03H JNZ KBINT9 MOV BX,OFFSET SCANTAB XLAT SCANTAB CMP AL,0 JNZ KBINT4 MOV KBFLAG,80H JMP KBINT2 KBINT5: OR KBFLAG,02H JMP KBINT2 KBINT6: OR KBFLAG,01H JMP KBINT2 KBINT9: MOV BX,OFFSET SHIFTAB XLAT SHIFTAB CMP AL,0 JNZ KBINT4 MOV KBFLAG,80H JMP KBINT2 KBINT4: MOV BX,BUFPT2 MOV BUFFER+BX,AL INC BX CMP BX,16 JC KBINT3 MOV BX,0 KBINT3: CMP BX,BUFPT1 JZ KBINT2 MOV BUFPT2,BX KBINT7: CMP AL,0AAH JZ KBINT8 CMP AL,0B6H JZ KBINT8 JMP KBINT2 KBINT8: MOV KBFLAG,0 KBINT2: CLI MOV AL,20H OUT 20H,AL POP AX POP BX STI IRET KBINT ENDP DISPCHAR PROC NEAR PUSH BX MOV BX,7 MOV AH,0EH INT 10H POP BX RET DISPCHAR ENDP DISPCHAR1 PROC NEAR PUSH BX MOV BX,2 MOV AH,0EH INT 10H POP BX RET DISPCHAR1 ENDP QING PROC NEAR MOV AH,6 MOV AL,0 MOV CX,0 MOV DH,24 M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《屁屁侦探》读书分享
- DB41T 2867-2025黄花菜病虫害绿色防控技术规程
- DB37T 4906-2025水泥稳定铁尾矿混合料路面基层施工技术规范
- 2025年注册电气工程师考试试题及答案
- 水痘及手足口病知识培训课件
- 砀山语文中考试卷及答案
- 输血试题及答案(2025版)
- 2025年院感理论考试试题及答案指导
- 液氨安全知识培训填空题课件
- 煤矿从业人员考试训练及答案解析
- 《直播营销与运营》PPT商品选择与规划
- 贵州福贵康护理院装修改造工程环评报告
- 贵阳区域分析
- 《中国居民膳食指南(2022)》解读
- 常见秋冬季传染病预防
- CRM-客户关系管理系统毕业论文
- 质量源于设计-QbD课件
- 教学第三章土壤侵蚀课件
- 仓储物流安全隐患排查表-附带法规依据
- 三年级道德与法治下册不一样的你我他
- 幼儿绘本故事:绘本PPT
评论
0/150
提交评论