微机原理课程设计报告_简易计算器的设计_第1页
微机原理课程设计报告_简易计算器的设计_第2页
微机原理课程设计报告_简易计算器的设计_第3页
微机原理课程设计报告_简易计算器的设计_第4页
微机原理课程设计报告_简易计算器的设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、-. z.目录一 前言1二 总体设计2三 硬件设计23.1微处理器8086芯片23.2可编程并行接口芯片8255A33.3LED数码管43.444矩阵按键43.5硬件原理图6四 软件设计74.1程序流程图74.2源代码9五 仿真18六 课程设计体会18七 参考文献19一 前言1.1课程设计的目的和任务课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。通过课程设计,要求学生熟悉和掌握微机

2、系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告

3、表达设计思想和结果的能力。1.2课程设计指导及要求在课程设计时,23名同学组成1个设计小组,分别完成工程的功能设计、电路编辑及调试、编码及调试和课程设计报告编写工作。同批次同学中选择同一题的不超过3组。在教师指导下,可以相互讨论。每设计小组提交1份设计报告,设计报告由设计小组同学独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进展阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导教师。同学应积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。学生在设计中可以引用所需的参考资料

4、,防止重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。指导教师要引导学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。学生要在教师的指导下制定好自己各环节的详细设计进程方案,按给定的时间方案保质保量的完成个阶段的设计任务。设计中可边设计,边修改,软件设计与硬件设计可交替进展,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。二 总体设计设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序进展判断,是数值则进展存储并同时进展显示,是运算符号等就

5、调用相应的子程序进展操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现4位十进制数以内的加减乘除法运算。运算完成后将运算的结果储存并显示到LED显示器上。三 硬件设计3.1 微处理器8086芯片当引脚接高电平时,CPU工作于最小模式。此时,引脚信号2431的含义及其功能如下:1IO/M/memory I/O select:存储器、I/O端口选择控制信号。信号指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时访问存储器,表示当前要进展CPU与存储器之间的数据传送。为低电平时,访问I/O端口,表示当前要进展CPU与I/O端口之间的数据传送。2WR/write:写信号,输出,低电

6、平有效。信号有效时,说明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。3INTA/interrupt acknowledge:可屏蔽中断响应信号,输出,低电平有效。 CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行中断效劳程序。4ALEaddress lock enable:地址锁存允许信号,输出,高电平有效。 CPU利用ALE信号可以把AD15 AD0地址/数据、A19/S6A16/S3地址/状态线上的地址信息锁存在地址锁存器中。5DT/data transmit or receive:数据发送/接收信号

7、,输出,三态。 DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。6DEN/data enable:数据允许控制信号,输出,三态,低电平有效。信号用作总线收发器的选通控制信号。当为低电平时,说明CPU进展数据的读/写操作。7HOLDbus hold request:总线保持请求信号,输入,高电平有效。在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。8HLDAhold acknowledge:总线保持响应信号,输出

8、,高电平有效。HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。3.2 可编程并行接口芯片8255A微机系统的信息交换有两种方式:并行通信接口方式和串行通信接口方式。接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。8255A可为86系列CPU与外部设备之间提供并行输入/输出的通道。由于它是可编程的,可以通过软件来设置芯片的工作方式,因此,用8255A连接外部设备时

9、,通常不用再附加外部电路,使用教方便。并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。在输入过程中,输入设备把数据送给接口,并且使状态线输入准备好有效。接口把数据存放在输入缓冲存放器中,同时使输入答复线有效,作为对外设的响应。外设在收到这个答复信号后,就撤消数据和输入准备好信号。数据到达接口中后,接口会在状态存放器中设置输入准备好标志,或者向CPU发一个中断请求。CPU可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动去除状态存放器中的标志,且撤消对CPU的中断请求。在输出过程中,每当输出存放器可以接收数据,接口就会将状态存放器中输出准备好状态置1或向CPU

10、发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会去除输出准备好状态,把数据送往外设,并向外设发一个数据输出准备好信号。外设受到驱动后,便接收数据,并向接口电路发一个输出答复信号,接口收到该答复信号后,又将状态存放器中输出准备好置位,以便CPU输出下一个数据。定义工作方式控制字:3.3 LED数码管LED为发光二极管构成的显示器件,亦称数码管。由7个字符段和一个小数点段组成,每段对应一个发光二极管,当发光二极管点亮时,相应的字符段点亮。LED有共阴极和共阳极两种供给状态。共阴极显示时,将LED显示的接地,将八个字符段端a、b、c、d、e、f、g、dp依

11、次与一个8位I/O口的最低到最高位连接,当I/O给LED的哪个字符段送入一个高电平时,该段就被点亮,从而可从这7个字符段中被点亮的构成相应的字符显示出来。同理,阳极即将端接Vcc,其显示原理与阴极的根本一样,但I/O口送入低电平是相应的段才被点亮。3.4 44矩阵按键键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进展检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进展检测,也许对一个比拟简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低本钱,另外一方面键盘比用独立按

12、键要美观,这也是键盘能够长期得到人们青睐的原因,可是硬件上的节省必然导致软件上编程的复杂,那就来看看键盘到底使软件编程有多复杂因为44矩阵键盘有8个管脚,于是将键盘接8255A的PC口,至于为什么选择PC是有原因的,进展键盘扫描一般要求有一局部的I/O口的工作方式是输入,另一局部I/O是输出,具体到44键盘则要求4个I/O口输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。3.5 硬件原理图四 软件设计4.1 程序流程图1键盘扫描程序流程图:开场初始化延时12ms键扫描保存键值键闭合?键释放?完毕键闭合?YYYNNN2总程序流程图:计算键值扫描

13、加法运算减法运算显示乘法运算存储除法运算数值?运算符? = ?清零 + ? - ? * ?4.2 源代码DATA SEGMENT*DB;存放数据的每一位*1DW ;存放第一个数据值*2DW;存放第二个数据值YDW;存放运算结果SDB ;存放运算符号值EDB ;按下等号键标记CC DB ;存放运算数据位数HDB0 ;存放按键行号LDB0 ;存放按键列号DISCODEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段码表DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART

14、:MOVA*,DATAMOVDS,A*MOVAL,90H;设置为A口输入,B口输出,C口输出OUT46H,ALMOVDI,OFFSET *+3;DI指向*的高位KKK:CALLKEY;扫描按键JMPKKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK:CALLDISP;等待按键按下的同时进展显示MOVAL,0F0H;所有行输出低电平OUT44H,ALINAL,40HCMPAL,0FFH ;读列值JZ CHECK;假设都为高电平则无键按下,等待MOVC*,50LOOP$ ;延时消抖INAL,D* ;重读列值CMPAL,0FFHJZCHECK ;无

15、键按下一直等待MOVH,0 ;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH ;扫描法读键值:从第一行开场测试,即PC0输出低电平NE*T:MOVAL,BHOUT 44H,ALNE*TH:INAL,40H ;读列值,判断是第几列有键按下TESTAL,BL ;从第一列开场判断JZWAIT0ROLBL,1CMPBL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试JZNE*TLINCH;每判断一列,列号加1JMPNE*TH;再对下一列进展判断NE*TL:MOVH,0MOVBL,01HROLBH,1 ;对下一行测试,让下一个PC口输出低电平CMPBH,0EF

16、HJZE*ITINCLJMPNE*TWAIT0:INAL,40H ;假设有键按下,则等该按键松开后再计算键值CMPAL,0FFHJNZWAIT0MOVC*,50LOOP$;延时消抖INAL,40HCMPAL,0FFHJNZWAIT0CALLKEYVALUE ;调计算键值子程序E*IT:RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值键值=行号*4+列号键值存放在DL存放器中KEYVALUE PROCMOVDL,LMOVDH,HSHLDL,1SHLDL,1 ;列号乘4ADDDL,DHCMPDL,9;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL;按下的

17、是运算键CMPDL,14JZOUTP_CALL ;按下的是等于键CMPDL,15JZCLR_CALL;按下的是去除键NUM_CALL: CALLNUMBER;调数字键处理子程序JMPE*IT1CONT_CALL:MOVS,DL ;存放运算键的键值MOVE,0CALLCOUNT 调运算键处理子程序,计算第一个加数JMPE*IT1OUTP_CALL:CALLOUTP ;调等号键处理子程序JMPE*IT1CLR_CALL:CALLCLEAR ;调去除键处理子程序E*IT1:RETKEYVALUE ENDP;以下为去除键处理子程序,按下去除键后,*变量全部清0CLEAR PROCMOV*3,0MOV*

18、2,0MOV*1,0MOV*0,0CALLBITPRETCLEAR ENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入*2变量;并根据运算符号,调用相应的运算子程序OUTP PROCPUSHA*PUSHD*PUSHB*INCECALLCOUNT ;调运算键处理子程序,计算第二个运算数据CMPS,10JZADD_CALL ;运算符为加号,则调用加法子程序CMPS,11JZSUB_CALL ;运算符为减号,则调用减法子程序CMPS,12JZMUL_CALL ;运算符为乘号,则调用乘法子程序CMPS,13CALLDIVP ;运算符为除号,则调用除法子程序JMPSTORE

19、1ADD_CALL:CALLADDPJMPSTORE1SUB_CALL:CALLSUBPJMPSTORE1MUL_CALL:CALLMULPSTORE1:MOVA*,Y ;以下程序将各运算子程序返回的运算结果,按位分解,送入*变量MOVD*,0MOVB*,1000DIVB*MOV*0, ALMOVA*,D*MOVBL,100DIVBLMOV*1,ALMOVAL,AHMOVAH,0MOVBL,10DIVBLMOV*2,ALMOV*3,AHPOPB*POPD*POPA*RETOUTP ENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入*1变量;或者将第二个运算数据的数值计

20、算出来并存入*2变量;将运算符的值存入S变量COUNT PROCPUSHA*PUSHB*PUSHD*MOVD*,0CALLBITP ;测试*中的数据是多少位CMPCC,4 ;输入的数据是4位数?JZC4CMPCC,3 ;输入的数据是3位数?JZ C3CMPCC,2 ;输入的数据是2位数?JZC2JMPC1 ;输入的数据是1位数?C4:MOVA*,0MOVAL,*0MOV B*,1000MUL B*MOV D*,A*C3:MOVAL,*1MOV BL,100MUL BLADD D*,A*C2:MOV AL,*2MOVBL,10MULBLADDD*,A*C1:MOVAL,*3MOVAH,0ADDD

21、*,A*CMPE,1JNZ*1_SMOV*2,D* ;按下的是等号,则将第二个运算数据的值存入*2变量JMPE*IT3*1_S:MOV*1,D* ;按下的是运算符号,则将第一个运算数据的值存*1变量MOV*3,0;清空*变量MOV*2,0MOV*1,0MOV *0,0E*IT3: POP D*POPB*POPA*RETCOUNT ENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在*变量中,并由CC记录数据的位数NUMBER PROCCMPE,1JNZCONTINUEMOVE,0CALLCLEARCONTINUE:CMPCC,0 ;目前数据为0位,即没有数据,则转到SSSJZSSS

22、PUSHA*PUSHD*MOVAL,*3MOVAH,*2MOVDL,*1MOVDH,*0MOV C*,8LL:SHLA*, 1RCLD*,1LOOPLLMOV*3,ALMOV*2,AHMOV*1,DLMOV*0,DHPOPD*POPA*SSS:MOV DI,DL ;将当前键入的数据存放到*的最低位INCCC ;数据位数加1CMPCC,4 ;判断数据位数JNGE*IT2MOVCC,0 ;如果数据超过4位,重新从最低位开场存放MOV*2,0MOV*1,0MOV *0,0E*IT2: CALL DISP ;调显示子程序,显示输入的数据RETNUMBER ENDP;加法子程序ADDP PROCPUSH

23、A*MOVA*,*1ADDA*,*2MOVY,A*POPA*RETADDP ENDP;减法子程序SUBP PROCPUSHA*MOVA*,*1SUBA*,*2MOV Y,A*POP A*RETSUBP ENDP;乘法子程序MULP PROCPUSHA*PUSHD*MOV A*,*1MOVD*,*2MULD*MOVY,A*POPD*POPA*RETMULP ENDP;除法子程序DIVP PROCPUSHA*PUSHB*PUSHD*MOVD*,0MOV A*,*1MOVB*,*2DIV B*MOVY,A*POP D*POP B*POP A*RETDIVP ENDP;显示子程序,将*中的数值按位显示

24、出来DISP PROCPUSHB*PUSH A*MOVBH,0LEA SI,DISCODECALLBITP ;测试*位数CMP CC,4JZ QIANCMP CC,3JZ BAICMP CC,2JZ SHICMP CC,1JMP GJMP NONEQIAN:MOVAH,11100000B ;从第4位开场显示MOVAL,AHOUT 44H,ALMOV BL,*0MOV AL,SI+B*OUT 42H,ALCALL DELYMOV AL,0OUT 42H,ALBAI:MOVAH,11010000B ;从第3位开场显示MOV AL,AHOUT44H,ALMOV BL,*1MOV AL,SI+B*OU

25、T 42H,ALCALL DELYMOV AL,0OUT 42H,ALSHI:MOV AH,10110000B ;从第2位开场显示MOV AL,AHOUT 44H,ALMOV BL,*2MOV AL,SI+B*OUT 42H,ALCALL DELYMOV AL,0OUT 42H,ALG:MOV AH,01110000B ;从第1位开场显示MOVAL,AHOUT 44H,ALMOV BL,*3MOV AL,SI+B*OUT 42H,ALCALL DELYJMP E*IT4NONE: MOVAL,0 ;*中没有数据,不显示OUT42H,ALE*IT4: POP A*POP B*RETDISP EN

26、DP;分析数据位数子程序BITP PROCCMP *0,0 ;如果*0不为0,则数据为4位数JNZ FOURBITCMP *1,0 ;如果*1不为0,则数据为3位数JNZ THREEBITCMP *2,0 ;如果*2不为0,则数据为2位数JNZ TOWBITCMP *3,0 ;如果*3不为0,则数据为1位数JNZ ONEBITJMP ZER0BIT ;否则,没有数据FOURBIT:MOVCC,4JMPE*IT5THREEBIT: MOVCC,3JMP E*IT5TOWBIT: MOV CC,2JMP E*IT5ONEBIT: MOV CC,1JMP E*IT5ZER0BIT: MOV CC,0

27、E*IT5: RETBITP ENDP;延时子程序DELY PROCPUSHC*MOV C*,100LOOP $POP C*RETDELY ENDPCODE ENDSEND START五 仿真第一步,进展数码管显示的仿真。编写一段直接赋值送到数码管显示的程序,进展数码管显示的仿真。第二步,进展键盘扫描的仿真。编写代码,将扫描到的键值送到数码管显示。第三步,在数码管显示和键盘扫描程序都正确的根底上,逐步增加代码,增加功能,逐步实现按键值的存储与显示、清零、加法、减法、乘法、除法等功能的仿真。六 课程设计体会上学期刚学过微机原理,学得不是很深入,仅限于课本知识的掌握,而此次课程设计将会是一个很好的时机,来考察自己对课本知识的掌握以及应用情况。本次课程设计是四人一组,并且自由选择设计课题,我们小组选择了简易计算器的课题,在做的过程中也遇到很多困难。在硬件设计模块,参考了课本上的相关例题以及查阅相关资料,发现关于此次课程设计的所有课题的硬件原理图都有很大的共同之处,都是利用8086芯片经过地址锁存器,再通过译码器,最后利用8255A或者更多芯片如8253等进展设计在软件设计模块,数码管显示和键盘扫描程序参考了书上的相关例题,也查阅了很多资料,发现原理都差不多,并且对此次课程设计有了较为清晰的思路。前一周根本上都在写程序,期间一直没有进展仿真。在写好所有的程序时,才开场

温馨提示

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

评论

0/150

提交评论