8086计算器仿真_第1页
8086计算器仿真_第2页
8086计算器仿真_第3页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、实验报告一、设计任务:利用微机原理所学的8086微处理器相关知识为核心,利用Proteus仿真软件,设计一个关于计算器的仿真电路并编写汇编代码。根据8086的结构和其寻址方式、输入输出、I/O口读写等技术,使用汇编语言的基本语法、伪指令,结合Proteus软件SAMPLED8086DemoBoard示例的理解分析,白行设计。二、需求分析:(1) 用8086作为核心处理器;(2) 用8255芯片连接主机与外设;(3) 用74273锁存器对数据进行锁存;(4) 用数码管显示器来显示输入的数字以及输出的结果;(5) 由于需要输入数字及运算符所以要用到键盘;(6) 用蜂鸣器在按下按键的同时发出声响;(

2、7) 连接整个电路要用到导线以及总线将相应的引脚相连接。1. 三、总体方案(选择与论证)方案的选择:基于技术成熟的Proteus软件,以Proteus软件SAMPLE8086DemoBoard示例为蓝本并充分分析理解,在此基础上提出白己的设计方案。将例子中电路结构优化精简,舍弃不必要的芯片,并用汇编来实现全部功能。即计算器能够进行4位数的加、减、乘、除运算。在此基础上,为使设计的计算器更具有实用性,我们通过循环调用的方式加入了对籍运算的功能。与此同时,为优化人机界面,使计算器更为美观和实用,我们加入软件白带的封装好的矩阵键盘和蜂鸣器。这就使得整个设计更加紧凑。蜂鸣器实现了每按下一次按键就发出一

3、次声响的功能以使按键检测更加直观,实际的计算器无差别。此计算器拥有计数的功能,分白动计数和手动计数两种。白动计数即为一个简单的计时器,用户可按需要定时,当到预定时间时,计算器会发声音提示用户。手动计数有加1和减1两种,当用户需要计数某些场合中尤为适用。2. 方案的论证:8086通过74273锁存器与8255A相连,使8086能够读外部数据和给外部芯片写数据。8255A的A口设置为输出,B口和C口设置为输入,将8255A分别和4*5矩阵、数码管、蜂鸣器相连接。8086不断循环扫描键盘使键盘输入的数据能够读入8086,同时,8086通过8255A,将数据输入给数码管把相应的值显示出来,将高电平送到

4、蜂鸣器的正极输入端使其发出预定的声音。本方案在设计上无错误,应用界面友好的Proteus软件来设计在理论可实现。在大一时学习了C语言,对于程序设计有一定的基础。本学期还学习了汇编程序设计,结合C语言,对汇编程序的设计有一定的经验。此外,小组中有3人曾参加工院的本科生科技创新项目,对单片机的编程熟练,并有一定的工程实践经验。本小组成员团结性强,学习能力好。能够相互协调克服困难。本实验应用的软件技术成熟,在网上有很多成熟的设计可供借图1penopg。a|t|siiyiB叵口回口Pt3。图2四、硬件设计整个设计如图所示,8086通过地址总线与74273相连实现数据锁存的功能,再通过8255A与外设接

5、口相连接,通过其A、B、C口实现对其它设备进行控制。这些设备包括:输入键盘,蜂鸣器,4位数码管,籍运算按钮,计数按钮。五、软件设计本实验的程序部分,其流程图如下:六、具体代码实现由于代码较多,因此放在最后的附录七、调试与测试第一步:对实现基本加、减、乘、除运算的测试。分别进行四种基本运算:1. 计算25+37的结果依次按下2、5、+、3、7、=,在显示器上显示出结果:63加法运算正确。2. 计算27-9的结果依次按下2、7、-、9、=,在显示器上显示出结果:18。减法运算正确。3. 计算15*2的结果依次按下1、5、*、2、=,在显示器上显示出结果:30。乘法运算正确。4. 计算56/8的结果

6、依次按下5、6、/、8、=,在显示器上显示出结果:7。除法运算正确。第二步:对实现每按一次按键蜂鸣器发一次预定声音功能的测试。执行后,按下按键蜂鸣器出声则此功能可以正常实现。第三步:对实现籍运算的功能进行测试计算83的结果依次按下8、人、3,在显示器上显示出结果:524。帚运算正确第四步:对计数功能进行测试使整个电路开始工作,按下白动计数开始的按钮,计数开始,到8结束,蜂鸣器发声提示时间到。此功能执行成功。第五步:手动计数加1和减1的功能测试按下手动加1按钮,数码管上显示的值加1,按下手动减1按钮,数码管上显示的值减1。功能执行正常。1. 八、关键技术本实验利用子程序思想将整个程序模块化,使得

7、程序清晰明了,并且调用方便,移植性好,升级简单;运用矩阵键盘扫描和键值比较确保每一个键都能够被8086及时检测到并正确识别;用大循环将整个程序反复执行,保证程序按设计执行,不会出现跑飞的情况;正确设置8255AX作方式,是8086读取键盘值和送数至数码管高效正确执行。九、实际完成功能通过硬件电路的搭接和汇编程序的设计,我们设计出的计算器可以正确的完成以下功能:对加、减、乘、除的基本运算。通过键盘输入并显示要计算的数字和执行的运算,通过数码显示器显示计算结果;实现每次按下按钮时蜂鸣器都能发出声响。表明已有按键按下,可以根据声响的次数来判断输入数字的个数和是否误输的情况,有效避免和降低了用户错误的

8、发生;实现求籍运算的功能。通过键盘输入底数和籍次,由数码显示器显示计算结果,在简单计算器的基础上,实现了更高级的运算,实用性增强;实现从计数的功能,并有白动计数、手动加1计数和手动减1计数功能可供选择。按下白动计数键,电路便开始实现计数的功能并由数码显示器显示,计数到预定值时停止并提示用户。十、总结(任务分工等)通过小组人员的共同努力,我们顺利实现了计算器的预计全部功能,并在此基础上增加了一些实用的功能。我们小组的任务分工如下:在本次的实验中,使我们熟练地掌握了Proteus软件的运用,对课本的知识理解更加深刻。学会了运用所学的知识来解决实际的问题,积累了一些动手实践的经验。在上课时学习的都是

9、基本的程序设计,没有什么子程序,程序短而且简单,分析起来不困难。而在本实验中,要求设计的是一个完整的系统,这就要求我们从系统出发,把视野放在整体上,力求各个子模块之间的相互协调和配合,共同组成完整可行的系统。本次实验一改以往做实验的风格,通过一个大的综合实验和小组结对的方式,给学员更多的白由发挥空间,使学员的许多方面得到了锻炼。在一个系统中,不是通过各个子模块的简单堆积就能够实现整体的功能,而是各个模块相互协调,发挥各白的功能,才能完美实现所需要的功能。因此,本实验其实难度更大,也更有实际意义。其实际意义早已超越了实验本身。通过一个综合实验,我们更加充分的理解了课本的程序语句,不仅知道各条语句

10、之间的相同点,也理解了在不同条件下它们的不同作用。本实验在做的过程中,我们从一个更高的层次对课本的知识进行了一遍详细的梳理。这次实验,不管是对于课本的学习,还是今后参加工作或者参加电子设计,都有很大的意义。十一、附录实验程序源码DATASEGMENTXDB?,;存放数据的每一位X1DW?;存放第一个数据值X2DW?;存放第一个数据值YDW?;存放运算结果SDB?;存放运算符号值EDB?;按下等号键标记CCDB?;存放运算数据位数HDB0;存放按键行号LDB0;存放按键列号SJISZHIDB?;存放计数值的变量DISCODEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7F

11、H,6FH,77H,7CH,39H,5EH,79H,71H;段码表DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVMOVMOVSJISZHI,0MOV口输出,ch输出OUTMOVx的高位KKK:CALLJMPAX,DATADS,AXAL,90H;设置为A口输入,B46H,ALDI,OFFSETX+3;DI指向KEY;扫描按键KKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEYPROCCHECK:CALLDISP;等待按键按下的同时进行显示MOVAL,0F0H;所有行输出低电平OUT44H,ALINAL,40HCMP

12、AL,0FFH;读列值JZCHECK;若都为高电平则无键按下,等待MOVCX,50LOOP$;延时消抖INAL,DX;重读列值CMPAL,0FFHJZCHECK;无键按下一直等待MOVH,0;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH;扫描法读键值:从第一行开始测试,即PC0输出低电平NEXT:MOVAL,BHOUT44H,ALNEXTH:INAL,40H;读列值,有键按下TESTAL,BL;从第一列开始判断JZWAIT0ROLBL,1CMPBL,20H;当前行状态下没有任何列有键按下,则转为对下一行的测试JZNEXTLINCH;每判断列,列号加1JMPNE

13、XTH;再对下一列进行判断NEXTL:MOVH,0MOVBL,01HROLBH,1;对下一行测试,让下一个PC口输出低电平CMPBH,0EFHJZEXITINCLJMPNEXTWAIT0:INAL,40H;若有键按下,1则冬键松开后再计算键值CMPAL,0FFHJNZWAIT0MOVCX,50LOOP$;延时消抖INAL,40HCMPAL,0FFHJNZWAIT0CALLKEYVALUE;调计算键值子程序EXIT:RETKEYENDP;以下为计算键值子程序,通过行列号计算键值(键值=列号*5+行号);键值存放在DL寄存器中KEYVALUEPROCPUSHAXMOVAL,0FFHOUT42H,A

14、LCALLDELAYCALLDELAYCALLDELAYMOVAL,00HOUT42H,ALPOPAXMOVDL,LMOVDH,HMOVAL,5MULDL;列号乘5MOVDL,ALADDDL,DHCMPDL,0JZQICMPDL,1JZBACMPDL,2JZJIUCMPDL,5JZSHCMPDL,6JZWUCMPDL,7JZLIUSH:CMPDL,9JZJISHU_CALL;自动计数CMPDL,10JZYICMPDL,11JZERCMPDL,12JZSANCMPDL,14JZSJI_CALL;手动加1CMPDL,15JZCLR_CALL;按下的是清除键CMPDL,16JZLINCMPDL,17

15、JZOUTP_CALL;按下的是等于键CMPDL,19JZSJIJ_CALL;手动减1JMPCONT_CALLMOVDL,4CALLNUMBERJMPEXIT1WU:MOVDL,5CALLNUMBERJMPEXIT1LIU:MOVDL,6CALLNUMBERJMPEXIT1QI:MOVDL,7CALLNUMBERJMPEXIT1BA:MOVDL,8CALLNUMBERJMPEXIT1JIU:MOVDL,9CALLNUMBERJMPEXIT1YI:MOVDL,1CALLNUMBERJMPEXIT1ER:MOVDL,2CALLNUMBERJMPEXIT1SAN:MOVDL,3JMPLIN:MOVD

16、L,0CALLNUMBEREXIT1JMPCALLNUMBEREXIT1CLRCALL:CALLCLEAR;调清除键处理子程JMPEXIT1JISHUCALLCALLZJIS;调用白动计数子程序JMPEXIT1SJIJCALLDECSJISZHI;调用减1计数字程序CALLSJISJICALL:INCJISZHICALLSJI;调用手动计数子程序JMPEXIT1NUMCALL:CALLNUMBER;调数字键处理子程JMPEXIT1CONTCALL:MOVS,DL;存放运算键的键值MOVE,0CALLCOUNT;调运算键处理子程序,计算第一个加数JMPOUTP_CALL:CALL序JMPEXIT

17、1:RETKEYVALUEENDP;以下为清除键处理子程序,CLEARPROCMOVMOVMOVMOVCALLRETCLEARENDP;以下为等号键处理子程序,EXIT1OUTP;调等号键处理子程EXIT1按下清除键后,X变量全部清0X3,0X2,0X1,0X0,0BITP数值计算出来存入X2变量OUTPPROCPUSHPUSHPUSHINCCALL序,计算第二个运算数据CMPJZ用加法子程序CMPJZ减法子程序CMPJZ用乘法子程序CMPJZ调用除法子程序CMP;并根据运算符号,调用相应的运算子程序AXDXBXECOUNT;调运算键处理子程S,18ADD_CALL;运算符为加号,则调S,13

18、SUB_CALL;运算符为减号,则调用S,8MUL_CALL;运算符为乘号,则调S,3DIV_CALL;运算符为除号,贝US,4JZCFCALLADDPSTORE1SUBPSTORE1MULPSTORE1CFPSTORE1DIVPSTORE1ADD_CALL:CALLJMPSUB_CALL:CALLJMPMUL_CALL:CALLJMPCF_CALL:CALLJMPDIV_CALL:CALLJMPSTORE1:MOV程序返回的运算结果,按位分解,MOVMOVDIVMOVMOVAX,Y;以下程序将各运算子送入X变量DX,0BX,1000BXX0,ALAX,DXMOVBL,100DIVBLMOVX

19、1,ALMOVAL,AHMOVAH,0MOVBL,10DIVBLMOVX2,ALMOVX3,AHPOPBXPOPDXPOPAXRETOUTPENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量COUNTPROCPUSHAXPUSHDXMOVDX,0CALLBITP;测试X中的数据是多少位CMPCC,4;输入的数据是4位数?JZC4CMPCC,3;输入的数据是3位数?JZC3CMPCC,2;输入的数据是2位数?JZC2JMPC1;输入的数据是1位数?C4:MOVAX,0MOVAL,X0MOV

20、BX,1000MULBXMOVDX,AXC3:MOVAL,X1MOVBL,100MULBLADDDX,AXC2:MOVAL,X2MOVBL,10MULBLADDDX,AXC1:MOVAL,X3MOVAH,0ADDDX,AXCMPE,1JNZX1_SMOVX2,DX;按下的是等号,则将第二个运算数据的值存入X2变量JMPEXIT3X1_S:MOVX1,DX,按下的正算小Jp,则将第一个运算数据的值存X1变量MOVX3,0;清空X变量MOVX2,0MOVX1,0MOVX0,0EXIT3:POPDXPOPBXPOPAXRETCOUNTENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在X

21、变量中,并由CC记录数据的位数NUMBERPROCE,1CMPJNZCONTINUEMOVE,0CALLCLEARCONTINUE:CMPCC,0;目前数据为0位,即没有数据,则转到SSSJZSSS;若已有数据,以下程序将X左移8位;例如:先输入“T,当再输入2时,PUSHPUSHMOVMOVMOVMOVMOVLL:SHLRCLLOOPMOVMOVMOVMOVPOPPOPSSS:MOV放到X的最低位INCCMPJNG;先要将“T从个位移到十位,然后再将“2”存放到个位AXDXAL,X3AH,X2DL,X1DH,X0CX,8AX,1DX,1LLX3,ALX2,AHX1,DLX0,DHDXAXDI

22、,DL;将当前键入的数据存CC;数据位数加1CC,4;判断数据位数EXIT2MOVCC,0;如果数据超过4位,重新从最低位开始存放MOVX2,0MOVX1,0MOVX0,0EXIT2:CALLDISP;调显示子程序,显示输入的数据RETNUMBERENDP;加法子程序ADDPPROCPUSHAXMOVAX,X1ADDAX,X2MOVY,AXPOPAXRETADDPENDP减法子程序SUBPPROCPUSHAXSUBAX,X2MOVY,AXAXPOPRETSUBPENDP;乘法子程序MULPPROCPUSHAXPUSHDXMOVAX,X1MOVDX,X2MULDXMOVY,AXPOPDXPOPA

23、XRETMULPENDP;除法子程序DIVPPROCPUSHAXPUSHDXMOVDX,0MOVAX,X1MOVBX,X2DIVBXMOVY,AXPOPDXPOPBXPOPAXRETDIVPENDP;乘方子程序DXCFPPROCPUSHAXPUSHDXPUSHCXMOVAX,X1MOVDX,X1MOVCX,X2DECCXLP:MULMOVY,AXMOVDX,X1LOOPLPCXDXAX将X中的数值按位显示出来BXAXBH,0SI,DISCODEPOPPOPPOPRETCFPENDP;显示子程序DISPPROCPUSHPUSHMOVLEACALLCMPJZCMPJZCMPJZBITP;测试X位数

24、CC,4QIANCC,3BAICC,2SHICMPJMPCC,1GQIAN:MOVAH,11100000B位开始显示MOVAL,AHOUT44H,ALMOVBL,X0MOVAL,SI+BXOUT42H,ALCALLDELYMOVAL,0OUT42H,ALBAI:MOVAH,11010000B位开始显示MOVAL,AHOUT44H,ALMOVBL,X1MOVAL,SI+BXOUT42H,AL;从第4;从第3CALLDELYMOVAL,0OUT42H,ALSHI:MOVAH,10110000B位开始显示MOVAL,AHOUT44H,ALMOVBL,X2MOVAL,SI+BXOUT42H,ALCAL

25、LDELYMOVAL,0OUT42H,ALG:MOVAH,01110000B位开始显示MOVAL,AHOUT44H,ALMOVBL,X3MOVAL,SI+BXOUT42H,AL;从第2;从第1DELYEXIT4AXBXX0,0;如果X0不为0,则数FOURBITX1,0;如果X1不为0,则数THREEBITX2,0;如果X2不为0,则数TOWBITX3,0;如果X3不为0,则数CALLJMPEXIT4:POPPOPRETDISPENDP;分析数据位数子程序BITPPROCCMP据为4位数JNZCMP据为3位数JNZCMP据为2位数JNZCMP据为1位数ONEBITZER0BIT;否则,没有数据CC,4EXIT5CC,3EXIT5CC,2EXIT5CC,1EXIT5CC,0JNZJMPFOURBIT:MOVJMPTHREEBIT:MOVJMPTOWBIT:MOVJMPONEBIT:MOVJMPZER0BIT:MOVEXIT5:RETBITPENDP;延时子程序DELYPROCPUSHMOVLOOPPOPRETCXCX,100$CXDELYENDP;长延时子程序DELAYPROCPUSHCXMOVCX,60000LOOP$POPCXRETDELAYENDP;手动计数子程序SJIPROCPUSHDXPUSHBXPUSHCXPUSHAXCALLCLEA

温馨提示

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

评论

0/150

提交评论