微机原理课程设计-练习打字程序(详细).doc_第1页
微机原理课程设计-练习打字程序(详细).doc_第2页
微机原理课程设计-练习打字程序(详细).doc_第3页
微机原理课程设计-练习打字程序(详细).doc_第4页
微机原理课程设计-练习打字程序(详细).doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

精品文档微机原理课程设计报告题 目: 练习打字程序 学生姓名: 傅湘黔 学 号: 201017010220 专业班级: 计科专业10102班 同组姓名: 刘再科 指导教师: 杨红杰 设计时间: 2013年下学期第17周 指导老师意见:评定成绩: 签名: 日期: 年 月 日 目录1课程设计内容与目的22相关理论知识32.1扬声器驱动32.2 相关指令33程序段设计53.1字符串的输入设计53.2错字变红色的设计53.3报警部分设计64硬件设计74.1并行接口8255A74.2硬件连接图95程序流程图106程序调试效果117心得体会118参考文献12附录121课程设计内容与目的课程设计内容:设计一个在键盘上练习打字的程序。先在屏幕上显示一段文字,用户按照它在键盘上输入,如果按错键则以红色显示并报警,正确的输入,则正常显示。课程设计目的:熟悉和掌握有关键盘ASC码,中断及字符显示技术。课程设计要求:自行编制报警中断和显示错字红色中断处理程序,为保存原中断向量。程序运行时,通过条件调用自编的中断向量处理程序。程序退出时,恢复中断向量。屏幕上显示出提示信息和练习的字符段,按照字符段从键盘上输入字符即可,每输入完一行后能自动刷新练习的字符段按Esc键可退出程序。2相关理论知识2.1扬声器驱动PC机上的大多数I/O都是由主板上的8255(或8255A)可编程外围接口芯片(PPI)管理,用PPI输出寄存器中的PB0和PB1来控制扬声器的驱动,而8253的通道2的输出端与扬声器相连,PB0连接通道2的CKL2,PB1和通道2的OUT2通过一与非门连接扬声器,在PB0与PB1都为高电平时,由8253产生的脉冲就进入扬声器产生声音。2.2 相关指令 1)无条件转移指令无条件转移指令必须指定转移的目标地址(或称为转向地址),将程序无条件地转移到目标地址,去执行从该地址开始的指令。如 “JMP 目标地址” 2)条件转移指令 条件指令是根据执行该指令前标志位的状态而决定是否发生的控制转移指令。每条指令测试不同的标志位组合,看是否满足条件。若不满足,则继续执行跟在条件转移指令后面的指令;若满足则将程序控制指令转移到改指令给出的目标地址,去执行那里开始的程序。如用到的“JA 目标地址”用到的标志符:JC-CF标志为1,则转移JNC-CF标志为0,则转移JA-高于/不低于等于转移JB-低于/不高于等于转移JG-大于/不小于等于转移 3)循环控制指令在设计循环程序时,可用于控制指令来控制循环是否继续。如loop指令,其指令格式“loop 目标地址” 4)子程序调用和返回指令CALL指令:实现子程序(或过程)的调用。其格式“CALL 目标地址”RET指令:和CALL指令配对用,实现调用指令结束后的返回 为了保证返回的正确性,CPU会自动将CALL指令的下一条指令所在的内存地址推入堆栈;当子程序执行RET指令时,会将堆栈栈顶的内容弹出,放在IP和/或CS寄存器中,以保证子程序调用过程和返回过程的正确性。 5)中断指令“INT n”改指令执行时转到中断服务(又称中断例行)程序。中断服务程序执行完后返回INT指令下一条指令继续执行。设计中用到的INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用。设计中用到的INT 21H 是由 BIOS 对设备所提供的服务程序,使用 INT 21H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用。设计中用到的INT 16H的00,01控制从键盘读入字符的中断。BIOS中断: (INT 10H功能表)BIOS中断: (INT 21H功能表)3程序段设计3.1字符串的输入设计用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的16H的01H功能,接受从键盘输入的字符到AL寄存器。设计中,通过字符的ASC码范围,用随机循环的方法显示需要练习的字符串3.2错字变红色的设计有中断“INT 10H”AH=9时,在光标处按指定属性或颜色显示字符。设计中将原来显示的字符存到AX的AL中,AH控制中断,AL存字符的ASC码,然后BL存要输入的字符的ASC码,BL颜色(图形模式,仅适用于PCjr),而可知BL=10时字符为绿色,BL=12时字符为绿色,所以通过对BL来定义颜色。设计中有打字对时定义为绿色MOV AL, BLMOV BL, 10 ;定义绿色MOVTO DH, DL ;字符位置 MOV AH, 9 MOV CX, 1 INT 10H ;在光标处按指定属性显示字符打字错时定义为红色MOV AL, BL MOV BL, 12 ;定义红色MOVTO DH, DL ;字符位置 MOV AH, 9 MOV CX, 1 INT 10H ;在光标处按指定属性显示字符 3.3报警部分设计为了具有打错字报警输出能力,系统主板上装有一个2.25英寸的扬声器以及控制电路和驱动电路。控制电路能以位触发和定时器控制两种不同的方式驱动扬声器发声。通过程序将方波信号输出到8255A的4号2端口,在译码电路的作用下8255A芯片被选中,具体过程是:8086的地址总线中的低八位A7、A6、A5、A4、A3、A2、A1、A0分别为:0 1 1 0 0 0 0 1十六进制为61H且8255A。程序直接控制PPI(8255A可编程外围接口芯片)的输出控制寄存器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而控制开关电路产生一串脉冲波形,这些脉冲经放大电路放大后驱动扬声器发出声音。 采用位触发方式发声的程序段如下: SOUND PROC PUSH AXPUSH CX IN AL, 61HAND AL, 11111101B ;关断定时器通道2的门控 OUT 61H, AL MOV CX, 10000AGAIN_S: XOR AL, 2 ;触发61H端口的第一位 OUT 61H, AL CALL DELAY LOOP AGAIN_S POP CX POP AX RETSOUND ENDPDELAY PROC ; 延时 PUSH CX MOV CX, 0FFFHNEXT_D: NOP LOOP NEXT_D POP CX RETDELAY ENDP;* 通过以上的程序,我们可以实现使系统主板上的喇叭发声的功能。4硬件设计4.1并行接口8255A(1) 8255A的内部结构图2 8255A的内部结构1) 8255A有3个8位数据接口,即接口A、接口B和接口C,可利用编程方法设置3个端口是作为输入端口还是输出端口;2) 8255A能适应CPU和I/O接口之间的多种数据传送方式的要求,如无条件传送、查询方式传送、中断方式传送。8255A设置了方式0、方式1以及方式2;3) 数据总线缓冲器是个双向三态8位数据缓冲器,与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。输入数据、输出数据、控制命令字都是通过数据总线缓冲器进行传递的;4) 读/写控制逻辑电路接收来自CPU地址总线的信号和控制信号,并发出命令到两个控制组(A组和B组)。它控制把CPU发出的控制命令或输出的数据送到相应的端口,或者把外设的状态或输入的数据相应的端口送到CPU;5) A组控制和B组控制一方面接收芯片内部总线上的控制字,一方面接收来自读/写控制逻辑电路的读/写命令,从而解决端口的工作方式和读/写操作。其中,A组控制电路控制端口A和端口C高4位(PC7-PC4)的工作方式和读/写操作:而B组控制电路控制端口B和端口C低4位(PC3-PC0)工作方式和读写操作。(2) 8255A的外部引脚图3 8255A的功能引脚图1) 与外部设备端相连的引脚 PA7-PA0:A端口的输入/输出引脚; PB7-PB0:B端口的输入/输出引脚; PC7-PC0:C端口的输入/输出引脚;2) 与CPU相连的引脚RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器都被清0,同时3个端口被自动设为输入端口;D7-D0:8255A的数据线,和系统数据总线相连;CS:芯片选择信号。只有当CS有效时,读出信号RD和写入信号WR才对8255A有效;RD:读出信号。CPU通过IN指令使RD有效,将数据或状态信息从8255A中读到CPU; WR:写入信号。CPU通过OUT指令使WR有效,将数据或状态信息从CPU中写道8255A;A1,A0:端口选择信号。8255A内部有3个数据端口和1个控制端口,共4个端口。规定A1,A0为00、01、10和11时,分别选中端口A、端口B、端口C和控制端口。(3) 8255A的控制字1) 8255A的方式控制字 8255A共有两个控制字,即工作方式控制字和对C口置位/复位控制字。4.2硬件连接图5程序流程图6程序调试效果运行后打字练习,打对字符为绿色,打错字符为红色。如图5-1图5-17心得体会这次的课程设计是以两个人一组的,相对以前的课程设计来说,这次的课程设计要内容上少一点,。这次我们选的这个课题也是突发奇想的,平时在寝室看到我们有同学在寝室练习打字,用的是金山打字通,于是我们想,我们是不是也能用自己学的知识做一个练习打字的程序出来,通过在网络上查找资料发现这个确实可行,我们就把这个课程设计做下来了,在这个过程中我们也遇到了很多问题,这些问题有些是我们能够解决的,有些问题我们想了很久也没有想出来,然后我们请求老师的帮助,通过老师的指导,我们解决了很多问题,也学到了很多东西。以前没有接触到的知识在这次课程设计中也学到了。在设计中我们组内也出现过一些争执,但是最后还是在我们的交流下还是很好的解决了,可见,在组间交流是很重要的,学会交流对我们学习东西也是很重要的,无论是在哪个领域。最后,真心要谢谢我们的老师,开始选题的时候确实很迷茫,要是没有老师的指导真的不知道该如何开始,老师给了我们关键性的指导,有问题的时候老师总能悉心教导,谢谢老师。8参考文献 微机原理与接口技术周配玲编 电子工业出版社2005.4微机原理与接口技术实验指导与习题集周明德编 人民邮电出版社 2002.5微机原理及应用实验教程甘思源编 重庆大学出版社1998.3附录 打字练习程序清单LF = 0AHCR = 0DH;宏定义部分PRINT MACRO P1,P2 ;输出“*”PUSH AXPUSH BXPUSH CXMOV AH, 09HMOV AL, P1MOV BH, 0MOV BL, P2MOV CX, 1INT 10H ;在光标处按指定属性显示字符 POP CXPOP BXPOP AXENDMMOVTO MACRO P1,P2 ;移动光标到指定位置PUSH AXPUSH DXMOV AH, 2MOV DH, P1MOV DL, P2INT 10H ;设置光标位置POP DXPOP AXENDMOUTPUT MACRO MSG,P1,P2,P3 ;输出字符串LOCAL DIFFER, EXITOFPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV DH, P2MOV DL, P3 MOV BH, 0 MOV BL, P1 MOV DI, 0DIFFER:MOV AH, 02HINT 10HMOV CL, MSGDICMP CL, $JE EXITOF MOV AH, 9 MOV AL, MSGDI MOV CX, 1 INT 10H INC DI INC DL JMP DIFFEREXITOF: POP DI POP DX POP CX POP BX POP AX ENDM XIANSHI_G MACRO ;输出箭头指示符PUSH AXPUSH BXPUSH CXMOV CX, 1 MOV AH, 9 MOV AL, 19H MOV BL, 10001100B INT 10H POP CX POP BX POP AX ENDM DSEG SEGMENT DATA;显示窗口内容 MSG0 DB *THE RATE OF CORRECT:$ MSG1 DB $ MSG2 DB * _ INSTRUCTION _ *$ MSG3 DB PRESS BACK SPACE TO DELETE!$ MSG4 DB PRESS ESC TO EXIT!$ SECONT DB 0 ; COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制DSEG ENDSSSEG SEGMENT STACK STACK DW 100h DUP(?)SSEG ENDSCSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DSEG MOV DS, AX MOV ES, AX PRACTISE:CALL SHUCHU_K MOV DH, 1 MOV DL, 1 MOVTO DH, DLXIANSHI_G ;显示“箭头”MOV AH, 0INT 1AHMOV AL, DL ;随机生成字母CONT_1:CMP AL, 7EH JA CONT CMP AL, 20H JB CON JMP CONTICONT:SUB AL, 7EHJMP CONT_1CON:ADD AL, 20HCONTI: MOV CX, 78 MOV AH, 9 MOV BL, 00001111B MOV DH, 2 MOV DL, 0 JMP SHUCHU TZD_1: ;跳转点到“EXIT”JMP TZD_2 SHUCHU:INC DLMOVTO DH, DL INT 10H ADD AL, DL CMP AL, 7EH JA CONTINUECMP AL, 20HJB CONTINUE1 LOOP SHUCHU JMP DAZIRUKOUCONTINUE:SUB AL, 7EHCONTINUE1:ADD AL, 20HLOOP SHUCHU ;到此为输出上面一行要打字练习的内容;下面开始打字练习*DAZIRUKOU:MOV DH, 3MOV DL, 1;提示信息* PUSH DX MOV DH, 18MOV DL, 2OUTPUT MSG2, 13, DH, DLMOV DH, 19MOV DL, 2OUTPUT MSG3, 10, DH, DL MOV DH, 20MOV DL, 2OUTPUT MSG4, 10, DH, DLMOV DH, 21MOV DL, 27MOVTO DH, DLPOP DX;*PRESS:MOVTO DH, DLMOV AH, 01H INT 16H ;从键盘读入字符JNE KEYJMP PRESSKEY:MOV AH, 00INT 16H ;从键盘读入字符JMP ISESCISESC:CMP AL, 1BHJE TZD_2CMP AL, 08HJE DELETEINC COUNT2INC COUNT1 ;是上面的字符,则COUNT1加1JMP ISEQUALTZD_2: ;设定跳转点到“EXIT”JMP SKIP1DELETE: MOV AX, COUNT1CMP AX, 0JNE DELETE_GDELETE_G:DEC COUNT1DEC COUNT2SUB DH, 2MOVTO DH, DLPRINT , 0DEC DLMOVTO DH, DLXIANSHI_GADD DH, 2MOVTO DH, DLMOV AH, 08HINT 10H ;读光标处的字符及其属性CMP AH, 10 ;8号功能时, AH=属性,AH=ASC码JNZ DELDEL:PRINT ,0TZD_DAZI1: ;跳转点,到“打字”JMP PRESSISEQUAL: MOV BL, ALCMP AL, 20HJB WRONGCMP AL, 7FHJA WRONGSUB DH, 2MOVTO DH, DLPRINT ,0INC DLMOVTO DH, DLXIANSHI_GINC DHDEC DLMOVTO DH, DLMOV AH, 8 ;读得光标处字符送到AL中INT 10HCMP AL, BLJE EQUALCALL SOUND ;在此处添加警报声MOV AL, BLMOV BL, 12 ;错字变红色JMP UNEQUALWRONG:TZD_DAZI0:JMP TZD_DAZI1EQUAL:MOV AL, BLMOV BL, 10UNEQUAL:INC DHMOVTO DH, DLMOV AH, 9MOV CX, 1INT 10H ;在光标处按指定属性显示字符INC DLMOV AX, COUNT2CMP AL, 78JB TZD_DAZI0SUB AX, 78MOV COUNT2, AXREFLESH: ;满一行后自动刷新(78个字符)MOV AH, 7INT 21H ;无回显过滤的字符输入JMP PRACTISESKIP1: JMP EXITNONE:NOPJMP

温馨提示

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

评论

0/150

提交评论