微机原理课程设计报告.doc_第1页
微机原理课程设计报告.doc_第2页
微机原理课程设计报告.doc_第3页
微机原理课程设计报告.doc_第4页
微机原理课程设计报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

河南理工大学计算机科学与技术学院课程设计报告2011 2012学年第 二 学期课程名称 微型计算机原理与接口技术设计题目 简单计算器设计 学生姓名 黄文广 学 号 321009010226 专业班级 计本10-2班 指导教师 李泉溪 2011 年 9 月 7 日目录一:概述3(1)设计要求:3(2)设计思路:3二:硬件电路设计4(1)键盘输入模块4(2)数码管显示电路5(3)8255A6三:部分源程序8(1)键盘源程序8(2)数码管显示源程序10四:课程设计体会11一:概述(1)设计要求: 1.通过小键盘做加减运算。七段数码管显示器作输入数据和结果数据的显示。 2.数字用小键盘09,R,P,M,G作功能键 R开始运算(包括撤销运算),显示0 P + M - G = E 退出返回dos 3.运算顺序: a.输入一原始数据显示器跟随显示 b.按+或-显示器内容不变 c.再输入一数据,显示器跟随显示。 d.按 = 显示器显示结果数据,当超出能显示的最大值,显示F(溢出) e.按R重新开始运算 f.按E,结束退出(2)设计思路: 首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现2位十进制数以内的加减法运算。运算完成后将运算的结果储存并显示到LED显示器上。二:硬件电路设计(1)键盘输入模块键盘采用矩阵式。我采用4*4矩阵键盘。键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成4*4矩阵,其中4根行线作为8255A的输出线与PA3PA0连接,并且作为8255A的输入线与PB4PB7连接。4根列线作为8255A的输入线与PB3-PB0连接。让PA0-PA7依次连接键盘的4行4列,在无键压下时,由于接到+5V上的上拉电阻的作用,列线被置成高电平。压下某一键后,该键所在的行线和列线接通。这时,如果向被压下键所在的行线上输出一个低电平信号,则对应的列线也呈现低电平。当从B口读取列线信号时,便能检测到该列线上的低电平。读取B口的状态时,还能读到行线上的低电平信号。这样,根据读入的行和列状态中低电平的位置,便能确定哪个键被压下了。如下图所示: 图2-1 键盘电路 (2)数码管显示电路 38译码器八个数码管位0 阳极a b c d e f g h位7位2位3位4位5位6位8位1驱动器PC0PC1PC2PC3PC4PC5PC6PC78255APA4PA5PA6 1 2 3 4 5 6 7 8存储运算符存储1操作数存储0操作数存储当前要显示的数8字节数据缓冲区数据分布 八位数码管显示电路图其中PC0-PC7作为输出位,PA4-PA6作为选择八个数码管中一个来显示数字。八位数码管只用到位0,位1两个。 (3)8255A1.并行输入/输出端口A,B,C 8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7PA0、PB7PB0、PC7PC0。端口都是8位,都可以作为输入或输出。通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。2. A组和B组控制部件 端口A和端口C的高4位(PC7PC4)构成A组;由A组控制部件实现控制功能。 端口B和端口C的低4位(PC3PC0)构成B组;由B组控制部件实现控制功能。 A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0D7)送来的控制字,并根据他们来定义各个端口的操作方式。3.数据总线缓冲存储器 三态双向8位缓冲器,是8255A与8086CPU之间的数据接口。与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。4.读/写控制部件 8255A读/写控制部件是完成读/写控制功能的部件。能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。 5. CS 片选信号:由CPU输入,有效时表示该8255A被选中。 RD, WR 读、写控制信号:由CPU输入。RD有效表示CPU读8255A,WR有效表示CPU写8255A。RESET 复位信号:由CPU输入。RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。 图2-4 .8255A内部结构 定义工作方式控制字: 工作方式0为8255A中各端口的基本输入/输出方式。 图2-5 .8255A工作方式控制三:部分源程序(1)键盘源程序下面是键盘检测、去抖动、键值编码和确定键名的汇编语言程序。程序运行后,若返回值AH=0,表示已读到有效的键值,并在AL中存有0F键的16进制代码;若AH=l,则表示出错。;端口地址 : PORT-A EQU 0FF9H;8255 A口地址 PORT-B EQU 0FFBH;8255 B口地址 PORT-C EQU 0FFDH;8255 C口地址 PORT-CTL EQU 0FFFH;8255控制口地址;数据段,键盘扫描码表DATA SEGMENTBUFDATA DB 8 DUP(0) ;数字缓冲区;0 1 2 3 4 5 6 7TABLE DB 77H, 7BH, 7DH, 7EH, 0B7H,0BBH,0BDH,0BEH; 8 9 A B C D E FDB 0D7H,0DBH,0DDH,0DEH,0E7H,0EBH,0EDH,0EEHDATA ENDS;堆栈段STACK SEGMENT STACK DW 50DUP(0) TOP_STACK LABEL WORDSTACK ENDS;代码段CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX, STACK MOV SS, AX LEA SP, TOP_STACK MOV AX, DATA MOV DS, AX;初始化8255A,方式0,A口作输出,B口和C口为输入 MOV DX, PORTCTL ;指向控制口 MOV AL,10001011B ;控制字 OUT DX, AL ;写入控制字;向所有行送0 MOV DX,PORT-A ;A口 MOV AL,00H OUT DX, AL ;向 A口各位输出 0;读列,查看是否所有键均松开 MOV DX,PORT-BWAIT_OPEN : IN AL,DX ;键盘状态读入 B口 AND AL, 0FH ;只查低4位(列值) CMP AL,0FH ;是否都为1(各键均松开) JNE WAIT_OPEN ;否,继续查;各键均已松开,再查列是否有0,即是否有键压下WAIT_ PRES: IN AL,DX ;读B口 AND AL,0FH ;只查低4位 CMP AL,0FH ;是否有键压下 JE WAIT_PRES ;无,等待;有键压下,延时20ms,消抖动 MOV CX, 16EAHDELAY:LOOP DELAY ;延时20ms;再查列,看键是否仍被压着 IN AL,DX AND AL,0FH CMP AL,0FH JE WAIT_PRES ;已松开,转出等待压键;键仍被压着,确定哪一个键被压下 MOV AL,0FEH MOV CL,AL ;CL=1111 1110BNEXT_ROW:MOV DX,PORT-A ; A口 OUT DX, AL ;下一行输出低电平 MOV DX, PORT-B ;B口 IN AL, DX ;读入B口状态 AND AL,0FH ;只截取列值 CMP AL,0FH ;是否均为1 JNE ENCODE;否,表示有键压下,转去编码 ROL CL,01 ;均为1,使下行输出0 MOV AL, CL JMP NEXT_ROW ;查看下行;已找到有一列为低电平,对压键的行列值编码ENCODE:MOV BX ,000FH;建立地址指针,先指向F键对应的地址 IN AL,DX ;从B口读入行列号NEXTTRY:CMP AL,TABLE;读入的行列值与表中查得的相等吗? JE DONE ;相等,转出 DEC BX ;不等,指向下一个(键值较小者)地址 JNS NEXT_TRY ;若地址尚末减为负值,继续查 MOV AH,01 ;若减为负值,置出错码01AH中 JMP EXIT;退出 DONE:MOV AL,BL ; BL中存有键的16进制代码 MOV AH, 00 ;AH=0,读到有效键值 如果是0-9 存入1,2字节中,并存入3,4或5,6字节。 JMP SMG_SHOW;显示数字 如果是+,-(10或11): 存入数据缓冲区第五个字节 如果是=:(12) 计算两个数的运算结果,并存入第一,二字节 JMP SMG_SHOW;显示结果 如果是重新开始符号:(13) 清除缓冲区内容 如果是退出符号:(14) 则退出 EXIT:HLT CODE ENDS END(2)数码管显示源程序下面是数码管显示程序SMG_SHOW: MOV DI,OFFSET BUFDATA ;指向数字缓冲区 MOV CL,0FEH ;指向最左边数码管DISP:MOV AL,DI ;取出数字 MOV BX,OFFSET TABLE ;指向显示代码表 XLAT ;得到显示代码 MOV DX,PORT-C ;PORT-C为段控制端口 OUT DX,AL ;送出段码 MOV AL,CL ;取出位显示代码 MOV DX,PORT-A ;PORT-A为位控制端口 OUT DX,AL ;送出位码 CALL DELAY ;实现数码管延时显示 INC DI ;指向下一个数字 ROL CL,1 ;指向下一个数码管 CMP CL,02H ;是否指向最右边的数码管JNZ DISP ;没有,显示下一个数字RET ;8位数码管都显示一遍,返回四:课程设计体会本次课程设计我选择的是模拟运算器的设计这一题,咋一看还觉得不难,后来看了小键盘和七段数码管的工作原理后,才发现,这题目确实挺复杂繁琐的。本次的课程设计是一个相对而言比较难的设计,因为这次设计不仅仅是课本上知识的整合,而且还有很多是课外的扩展。这次课程设计可以说是一个挑战。首先8255A的初始化和8086的接线也是十分简单,但是等到编成的时候发现有很多不懂得地方,觉得很容易的算法在编程中很难实现。于是我开始查看课本和有关的资料,知道了一些编程常用的方法。受益匪浅。而后我用心编写这程序。经过自己的努力和同学的帮助终于完成了相应的要求。本次课程设计,不仅使我加深了对接口程序设计

温馨提示

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

最新文档

评论

0/150

提交评论