有简易计算器到复杂计算器的设计说明_第1页
有简易计算器到复杂计算器的设计说明_第2页
有简易计算器到复杂计算器的设计说明_第3页
有简易计算器到复杂计算器的设计说明_第4页
有简易计算器到复杂计算器的设计说明_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、.专业整理.微机原理实验报告1 .设计任务:根据微机原理课程所学相关知识及实验教程相关内容,在基于 proteus平台,使用汇编语言,以8086为核心的情况下,配合可编 程并行接口器件8255A, LED数码管等器件实现可进行简单四位数加 减乘除法及清零、乘方、对数、二进制转换等扩展功能的十进制计算 器。2 .需求分析:操控核心为微处理器8086芯片,可编程并行接口芯片8255A 对输入扫描的矩阵按键,显示模块LED数码管,其他辅助器件如 74LS138 译码器、74LS373 等。3 .总体方案(选择与论证)流程:第一步,确定键盘是否有输入(使用程序不断进行扫描)。第二步,如果有输入就调用子

2、程序进行判断,是数值则进行存 储并同时进行显示,是运算符号等就调用相应的子程 序进行操作。第三步,继续扫描键盘是否有输入,从而实现4位十进制数以 内的加减乘除法或者扩展功能运算。第四步,运算完成后将运算的结果储存并显示到LED显示器上。4 .硬件设计实验中根据需求需以下器件:微处理器8086芯片U5RESET READY INTA/QS1 INTR hqld/gtTHLDA/GTOAD0.15A16.19ALE/QSO BHE dt/r/sTTEST NMI_ MN/MX CLKDEN/S2RDWR/LOCKM/IO/SO8086当引脚接高电平时,CPU工作于最小模式。此时,引脚信号2431的

3、含义及 其功能如下:(1) I0/M/ (memory I/O select):存储器、I/O端口选择控制信号。信号 指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时访问存储器, 表示当前要进行CPU与存储器之间的数据传送。为低电平时,访问I/O端口, 表示当前要进行CPU与I/O端口之间的数据传送。(2) WR/ (write):写信号,输出,低电平有效。信号有效时,表明CPU 正在执行写总线周理,同时由信号决定是对存储器还是对I/O端口执行写操作。(3 ) INTA/ (interrupt acknowledge):可屏蔽中断响应信号,输出,低电 平有效。CPU通过信号对外设提

4、出的可屏蔽中断请求做出响应。为低电平时, 表示CPU已经响应外设的中断请求,即将执行中断服务程序。(4 ) ALE ( address lock enable ):地址锁存允许信号,输出,高电平有效。 CPU利用ALE信号可以把AD15ADO地址/数据、A19/S6A16/S3地址/状态线 上的地址信息锁存在地址锁存器中。(5 ) DT/ ( data transmit or receive ):数据发送/接收信号,输出,三态。 DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或 I/O端口; DT/为低电平时,CPU接收来自存储器或I/O端口的数据。(6) DEN/

5、 (data enable):数据允许控制信号,输出,三态,低电平有效。 信号用作总线收发器的选通控制信号。当为低电平时,表明CPU进行数据的读/ 写操作。(7 ) HOLD ( bus hold request):总线保持请求信号,输入,高电平有效。 在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求 信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。(8 ) HLDA ( hold acknowledge):总线保持响应信号,输出,高电平有效。 HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高 电平有效的响应信号,同时总

6、线将处于浮空状态,CPU让出对总线的控制权,将 其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变 为低电平,CPU 乂重新获得对总线的控制权。可编程并行接口芯片8255A343732U54H2DOPAOD1PA1D2PA2D3PA3D4PA4D5PA5D6PA6D7PA7RD"PBO丽PB1AOPB2A1PBSRESETPB4PB5CS-PB6PB7PCOPC1PC2PC3PC4PCSPC6PC73113040292?27$391836199208621 22242514工16171312113255A微机系统的信息交换有两种方式:并行通信接口方式和串行通

7、信接口方式。接 口电路在CPU和I/O设备之间起着信号的变换和传输的作用。8255A可为86系列 CPU与外部设备之间提供并行输入/输出的通道。由于它是可编程的,可以通过软件 来设置芯片的工作方式,因此,用8255A连接外部设备时,通常不用再附加外部电 路,使用教方便。并行接口是在多根数据线上,以数据字节/字与I/O设备交换信 息。在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。 接口把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外 设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据 到达接口中后,接口会在“状态寄存器”中设置输入

8、准备好标志,或者向CPU发一 个中断请求。CPU可用查询方式或中断方式从接口中读取数据。接口中的数据被读 取后,接口会自动清除状态寄存器中的标志,且撤消对CPU的中断请求。在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输 出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输 出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据.学习帮手.专业整理.送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数 据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,乂将状态寄 存器中“输出准备好”置位,以便CPU

9、输出下一个数据。定义工作方式控制字:r,端口A输入 01端口 A输出Di DoD7 D6 D5 D定义端口 A为方式O 标志位100 X X 0 X XLPC3PCo为输入J(hPC3PCo为输出L端口 B输入01端口 B输出定义端口 B为方式0IKPC7PC&)为输入0式PC7PG)为输出LED数码管LED为发光二极管构成的显示器件,亦称数码管。由7个字符段和一个小数点 段组成,每段对应一个发光二极管,当发光二极管点亮时,相应的字符段点亮。LED 有共阴极和共阳极两种供应状态。共阴极显示时,将LED显示的COM接地,将八个 字符段端a、b、c、d、e、f、g、dp依次与一个8位I/O

10、 口的最低到最高位连接, 当I/O给LED的哪个字符段送入一个高电平时,该段就被点亮,从而可从这7个字 符段中被点亮的构成相应的字符显示出来。同理,COM阳极即将COM端接Vcc,其 显示原理与COM阴极的基本相同,但I/O 口送入低电平是相应的段才被点亮。,学习帮手.,专业整理.5 .软件设计程序流程图:(1)总程序流程图:.学习帮手.专业整理.,学习帮手.(2)键盘扫描程序流程图:6 .具体代码实现DATA SEGMENTX DB?, ?, ?, ?;存放数据的每一位XIDW9 *;存放第一个数据值X2DW9 *;存放第二个数据值YDW9 *;存放运算结果SDB9 *;存放运算符号值EDB

11、9 *;按下等号键标记ccDB9 *;存放运算数据位数HDB0;存放按键行号LDB0;存放按键列号Z1DB?Z2DB?Z3DB?Z4DB?DISCODE DB3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H,71H;段码表DATA ENDSCODE SEGMENTASSUMESTART: MOVMOVCS:CODE, DS:DATAAX, DATADS, AX,专业整理.MOVAL, 90H;设置为A 口输入,B 口输出,C 口输出OUT46H, ALMOVDI, OFFSET X+3;DI 指向

12、 X 的高位KKK: CALLKEY;扫描按键JMPKKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK: CALLDISP;等待按键按下的同时进行显示MOVAL, OFOH;所有行输出低电平OUT44H, ALINAL, 40HCMPAL, 0FFH;读列值JZCHECK;若都为高电平则无键按下,等待MOVCX, 100LOOP$;延时消抖INCMPJZAL, DXAL, OFFHCHECK;重读列值;无键按下一直等待MOVH, 0;有键按下,先把行列号变量清0MOVL,0MOVBL, 01HMOVBH, OFEH;扫描法读键值:从第一行开始

13、测试,即PCO输出低电平NEXT:MOVAL, BHOUT44H, ALNEXTH:INAL, 40H;读列值,判断是第几列有键按下TESTAL, BL;从第一列开始判断JZWAITOROLBL, 1CMPBL, 80H;当前行状态下没有任何列有键按下,则转为对下一行的测试JZNEXTLINCH;每判断一列,列号加1JMPNEXTH;再对下一列进行判断,学习帮手.,专业整理.NEXTL: MOVH, 0MOVBL, 01HROLBH, 1;对下一行测试,让下一个PC 口输出低电平CMPBH, OEFHJZEXITINCLJMPNEXTWAITO: INAL, 40H;若有键按下,则等该按键松开

14、后再计算键值CMPAL, OFFHJNZWAITOMOVCX, 100LOOP$;延时消抖INAL, 40HCMPAL, OFFHJNZWAITOCALLKEYVALUE调计算键值子程序EXIT: RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值(键值二列号*4+行 号);键值存放在DL寄存器中KEYVALUE PROCMOVDL,LMOVDH,HSHLDL, 1SHLDL, 1;列号乘4ADDDL, DHCMPDL, 9;按下的是数字键JNGNUM_CALLCMPDL, 16JLCONT_CALL;按下的是运算键CMPDL, 16JZOUTP_CALL;按下的是等于键CMPD

15、L, 17JZCLR_CALL;按下的是清除键NUM_CALL:CALLNUMBER调数字键处理子程序JMPEXIT1CONT_CALL:MOVS, DL;存放运算键的键值MOVE, 0CALLCOUNT;调运算键处理子程序,计算第一个加数JMPEXIT1OUTP_CALL:CALLOUTP;调等号键处理子程序JMPEXIT1CLR_CALL:CALLCLEAR;调清除键处理子程序EXIT1:RETKEYVALUEENDP;以下为清除键处理子程序,按下清除键后,X变量全部清0CLEAR PROCMOVX3,0MOVX2,0MOVXl,0MOVX0,0CALLBITPRETCLEAR ENDP.

16、学习帮手.专业整理.;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值 计算出来存入X2变量;并根据运算符号,调用相应的运算子程序OUTP PROCPUSHPUSHPUSHINCCALL算第二个运算数据CMPJZ法子程序CMPJZ数子程序CMPJZ阶乘子程序CMPAXDXBXECOUNT调运算键处理子程序,计S, 10ADD_CALL;运算符为加号,则调用加S, 11LOG_CALL;运算符为对数,则调用对S, 12JCE.CALL;运算符为阶乘号,则调用S, 13JZ DIVP.CALL;运算符为除号,则调用除法子程序CMPS, 14JZK_CALLCMPS, 15CALLERJM

17、PSTORE1ADD_CALL: CALL ADDPJMPSTORE1LOG_CALL: CALLLOGJMP STORE1JCE_CALL: CALL JCEJMPSTORE1DIVP_CALL: CALLDIVPJMPSTORE1K_CALL:CALL KSTORE1: MOVAX, Y;以下程序将各运算子程序.学习帮手.返回的运算结果,按位分解,送入X变量MOVDX, 0MOVBX, 1000DIVBXMOVX0, ALMOVAX, DXMOVBL, 100DIVBLMOVXl, alMOVAL, AHMOVAH, 0MOVBL, 10DIVBLMOVX2,ALMOVX3, AHPOPB

18、XPOPDXPOPAXRETENDPOUTP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入XI变量;或者将第二个运算数据的数值计算出来并存入X2变量,专业整理.;将运算符的值存入S变量COUNTPROCPUSHAXPUSHBXPUSHDXMOVDX, 0CALLBITP;测试X中的数据是多少位CMPCC,4;输入的数据是4位数9 JZC4CMPCC, 3;输入的数据是3位数9 JZC3CMPCC, 2;输入的数据是2位数9 JZC2JMPCl;输入的数据是1位数9 C4:MOVAX, 0MOVAL,XOMOVBX, 1000MULBXMOVDX, AXC3:MOVAL,X

19、1MOVBL,100MULBLADDDX,AXC2:MOVAL,X2MOVBL, 10MULBLADDDX, AXCl:MOVAL,X3MOVAH, 0ADDDX, AXCMPE, 1JNZX1_SMOVX2,DX;按下的是等号,则将第二个运算数据的值存入X2变量JMPEXIT3X1_S:MOVXI, DX;按下的是运算符号,则将第一个运算数据的值存XI变量MOVX,0;清空X变量MOVX,0MOVXl,0.学习帮手.专业整理.MOVX0,0EXIT3:POPDXPOPBXPOPAXRETCOUNTENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数

20、NUMBER PROCCMPE, 1JNZCONTINUEMOVE,0CALLCLEARCONTINUE: CMPCC,0;目前数据为0位,即没有数据,则转到SSSJZ SSS;若已有数据,以下程序将X左移8位。;例如:先输入“1”,当再输入2时, ;先要将“1”从个位移到十位,然后再将“2”存放到个位PUSHAXPUSHDXMOVAL,X3MOVAH,X MOVDL,X1MOVDH,XOMOVCX, 8LL: SHLAX, 1RCLDX, 1LOOPLLMOVX3,ALMOVX2, AHMOVZ3, AHMOVX1,DLMOVZ2, DLMOVXO,DHMOVZ1,DHPOPDXPOPAXS

21、SS: MOVDI,DL;将当前键入的数据存放到X的最低位MOVZ4, DLINCCC;数据位数加1CMPCC,4;判断数据位数JNGEXIT2MOVCC, 0;如果数据超过4位,重新从最低位开始存放MOVX,0MOVXl,0MOVX0,0EXIT2: CALLDISP调显示子程序,显示输入的数据RETNUMBER ENDP;加法子程序ADDP PROCPUSHAXMOVAX, XIAX, X2Y, AXAXADDMOVPOPRETADDP ENDP;对数子程序LOG PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AX, XIMOV BX, 0MOV CX, 2MOV

22、 DX, 0LO:DIV CXCMP AX, 0JZ G2INC BXJMP LOG2:MOV Y, BXPOP DXPOP CXPOP BXPOP AXRETLOG ENDP;阶乘子程序JCE PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AX, XIMOV DX, AXSUB DX, 1MOV CX, DXMOV BX, DXCHENG:MUL DXDEC BXMOV DX, BXLOOP CHENGMOV Y, AXPOP DXPOP CXPOP BXPOP AXRETJCE ENDP;除法子程序DIVP PROCPUSH AXPUSHBXPUSHDXMOVDX

23、, 0MOVAX, XIMOVBX, X2DIVBXMOVY, AXPOPDXPOPBXPOPAXRETDIVPENDP;次方子程序K PROCPUSHAXPUSHDXPUSHCXMOVAX, XIMOVDX, AXMOVCX, X2DEC CXN:IULDXMOV DX, XILOOP NMOVY, AXPOPCXPOPDXPOPAXRETK ENDP.学习帮手.;二进制转换成十进制子程序ER PROCPUSH AXPUSH BXPUSH CXMOV BL, 8MOV AL, Z1MUL BLMOV CX, AXMOV BL, 4MOV AL, Z2MUL BLADD CX, AXMOV B

24、L, 2MOV AL, Z3MUL BLADD CX, AXMOV AL,Z4MOV BL, 1MUL BLADD CX, AXMOV Y, CXPOP CXPOP BXPOP AXRETER ENDP;显示子程序,将X中的数值按位显示出来DISP PROCPUSHBXPUSHAXMOVBH, 0LEASI,DISCODECALLBITP;测试乂位数CMPCC,4JZQIANCMPCC, 3JZBAICMPCC, 2JZSHICMPCC, 1JMPGJMPNONEQIAN:MOVAH, 11100000B;从第4位开始显示MOVAL, AHOUT44H, ALMOVBL,XOMOVAL, SI

25、+BXOUT42H, ALCALLDELYMOVAL, 0OUT42H, ALBAI:MOVAH, 11010000B;从第3位开始显示MOVAL, AHOUT44H, ALMOVBL,X1MOVAL, SI+BXOUT42H, ALCALLDELYMOVAL, 0OUT42H, AL.专业整理.,学习帮手.SHI:MOVAH, 10U0000B始显示MOVAL, AHOUT44H, ALMOVBL,X2MOVAL, SI+BXOUT42H, ALCALLDELYMOVAL, 0OUT42H, ALG:MOVAH, 01U0000B始显示MOVAL, AHOUT44H, ALMOVBL,X3M

26、OVAL, SI+BXOUT42H, ALCALLDELYJMPEXIT4;从第2位开;从第1位开NONE:MOVAL, 0;X中没有数据,不显示OUTEXIT4: POPPOPRETDISP ENDP;分析数据位数子程序BITP PROCCMP42H, ALAXBXX0,0;如果X0不为0,则数据为4位数JNZCMPFOURBITXl,0;如果Xl不为0,则数据为3位数JNZCMPTHREEBITX,0;如果X2不为0,则数据为2位数JNZCMPTOWBITX,0;如果X3不为0,则数据为1位数JNZJMPONEBITZEROBIT;否则,没有数据FOURBIT:MOVCC, 4JMPEXI

27、T5THREEBIT:MOVCC, 3JMPEXIT5TOWBIT:MOVCC, 2JMPEXIT5ONEBIT:MOVCC, 1JMPEXIT5ZEROBIT:MOVCC, 0EXIT5:RETBITPENDP;延时子程序DELYPROCPUSHCXMOVCX, 100LOOP$POPCXRETDELY ENDPCODE ENDS.专业整理.ENDSTART7 .调试与测试第一步,进行数码管显示的仿真。编写一段直接赋值送到数码管 显示的程序,进行数码管显示的仿真。编写程序,输入使数码管显示“HELO”的程序,进行仿真,通过第二步,进行键盘扫描的仿真。编写代码,将扫描到的键值送到 数码管显示。

28、编写程序,使数码管显示所扫描到的键值,进行仿真,通过多次 修改可得结果。测试步骤为:首先选取任意keypad键盘,连接好电路,按下键盘上数字的8, 如图可见,电路线的颜色变化说明产生了脉冲。松开鼠标后,此时数码管显示为所扫描到的键值:再换其他案件,并使数码管显示相应扫描到的键值。第三步,在数码管显示和键盘扫描程序都正确的基础上,逐步增 加代码,增加功能,逐步实现按键值的存储与显示、清零、加法、减 法、乘法、除法等功能的仿真。第四步,在确立好了之前的计算器基础应有程序都正确后,又加 入了几个扩展模块,再次模拟仿真,将调试不通过的扩展部分删去, 只留下可执行的模块。1 .实现二进制与十进制转换功能

29、:输入二进制111b:.学习帮手.按下二进制转换键:再按下二号键,可见数码管显示转换后的十进制数:2.实现求阶乘功能:1.按下要求的数,数码管开始显示:2.按下求阶乘按键,可见产生了脉冲:3.再按下二号键,可见数码管显示结果:计算器扩展后还有其他扩展功能,在此不作赘述。8 .关键技术一、键盘扫描_LJjoiKOwn3B3BR14%R2R31-O 01 c4P Q_I|_I _!=L« 'IO D _O O _O D89+根据如上键盘及电路,可以先扫描列,再扫描行,先给出PCO为 低电平,PC申PC2、PC3均为高电平。若不按键盘,则PAO、PAI、PA2、 PA3、PA4、P

30、A5均为高电平,然后转入下一行测试,给下一行提供低 电平、依次类推。若其中有键按下,则其对应位应显示低电平。这样, 就把按下的键给定位了。根据以上键盘,通过计算按键的值来定位该 位按键。键值工行*4+列,而行、列值可通过循环来实现。 二、数据存储与显示首先定义X0、X1K X、X3四个变量,分别存放按下数 据的每一位的值,若为数字键,首先按下的数字存放在X3中,然 后可以通过移位将输入的数据依次存放于X0、X1K X2、X3 中,要将它的十进制的值,则只要分别乘以1000、100、10、1然后 相乘后保存到原先定义好的变量XI中即可。同理,当输入第二个数 据后,将其显示并保存于X2变量。为了能在数码管中显示,首先应 定义一个数据段,这个数据段存放的二进制数做位数码管的输入,从 而控制数码管的值,十进制数0到15对应的输入分别为3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H ,71Ho因此,我们就将这一连串的数据存放到以变量名为DISCODE为 地址的数据段中,并让DI指向DISCODE,要想输出一个数的话,只 要让DI的地址加上这个数的值即可。联系上述所说的X0、Xl、 X2、X3、要输出它们的值只要让它们加上DI,进行寻址后连入 数码管输入

温馨提示

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

评论

0/150

提交评论