北京理工大学ZHZH

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

北京理工大学微机原理与接口技术实验报告实验内容:微机原理综合设计组别:姓名:班级:学号:一、实验目的1.利用所学知识设计简单计算器。二、实验内容利用8255控制试验箱上的键盘,实现2位十进制数以内的加减乘除运算,将运算结果通过8250发送到上位机。键盘为10个数字键0-9,六个功能键+、-、*、/、=、复位。三、实验方法1.设计思路⑴.根据题目要求首先应该实现试验箱上的键盘扫描功能,计算按下键码的键值(键值检测中应该加入相应的延时程序以达到精确扫描的目的)。再进行加减乘除算数运算,通过8250芯片发送到上位机,利用串口小助手实现算数。2.实验程序流程图。四、实验源程序(必要的文字注释)初始化按键闭合?开始按键扫描保存键值进行算数运算按键恢复?输出结果结束NNYY1.简单计算器程序。ASSUMECS:CODECODESEGMENTORG100HSTART:MOVDX,04A6H;控制寄存器地址MOVAX,90H;设置为A口输入,;B口输出,C输出OUTDX,AX;8255初始化MOVAX,0MOVDS,AXAAA:MOVDI,2000HMOVCX,10CCC1:MOVDS:[DI],0INCDILOOPCCC1MOVDI,2000HMOVDX,486HMOVAX,80HOUTDX,AXMOVDX,480HMOVAX,12OUTDX,AXMOVDX,482HMOVAX,0OUTDX,AXMOVDX,486HMOVAX,7OUTDX,AXMOVDX,482HMOVAX,0OUTDX,AXMOVDX,48AHINAX,DXMOVDX,480HINAX,DXCHECK0:;CHECK0检测是否有健被按下MOVAX,OOH;C口的PC0、PC1、PC2作为行选择线MOVDX,04A4H;C口地址OUTDX,AX;写入C口内容00H,即令所有行为低电平MOVDX,04A0H;A口地址INAX,DX;读入A口的内容CMPAL,OFFH;判定是否有列线为低电平JECHECK0;没有,无闭合键,则循环等待MOVCX,05FFH;延迟常数,可以修改来改变延时时间DELAY:LOOPDELAY;有,则延迟清除抖动,当cx=0时则停止该循环行扫描键盘和列扫描键盘,确定被按键的行值和列值MOVCL,3;行数MOVAH,0MOVAL,0FBH;0fbh=11111011BCONTIN:PUSHAL;将ax的内容(0fbh)入栈保存MOVDX,04A4H;C口地址OUTDX,AL;写入C口内容0fbh=11111011B,即将第三行置为低电平MOVDX,04A0H;A口地址INAL,DX;读入A口的内容MOVAH,AL;将A口的内容送入ahCMPGH,0FFH;判断是否有列线为低电平JNENEXT;比较结果不等于0则转移,即有列线为低电平POPAX;比较结果等于0,即没有列线为低电平,(ax)=00fbhRORAL,1;fbh(11111011B)循环右移,(al)=11111101检测下一行LOOPCONTIN;循环扫描下一行,确定行JMPCHECK0;若所有行都没有被按下,则返回check0重新检测NEXT:MOVCH,CL;保存行值至chMOVCL,7;列值从0开始编号0-7BEGIN0:SHLAH,1;ah为A口的内容,逻辑左移1位,末位补0JNCGOON;无进位则转移,即可确定列LOOPBEGIN0;继续循环,确定列JMPCHECK0GOON:;计算显示码在discode中的位置:(行数-1)*8+列值MOVBL,CL;保存列值至BLDECCH;行数减1MOVCL,3SHLCH,CL;左移三位即相当于减1之后的行数*8ADDDL,CH;确定显示码在discode表中的偏移量,即(行数-1)*8+列值MOVBH,0MOVCX,BX;显示码在discode表中的偏移量送CXDISPLAY:;显示输出MOVSI,OFFSETDISCODEADDSI,CX;显示码偏移地址MOVDX,040AH;C口地址MOVAL,0FHOUTDX,AL;写入C口内容,使位控(LED1)有效MOVAL,CS:[SI];取被按键的显示字形码送入alMOVDX,04A2H;B口地址OUTDX,AL;将显示字形码送B口输出显示NOPNOPCMPAL,3fhJNZL1MOVAH,0JMPNEXT1L1:;定义键码子程序L1CMPAL,06hJNZL2MOVAH,1JMPNEXT1L2:;定义键码子程序L2CMPAL,5bhJNZL3MOVAH,2JMPNEXT1L3:;定义键码子程序L3CMPAL,4fhJNZL4MOVAH,3JMPNEXT1L4:;定义键码子程序L4CMPAL,66hJNZL5MOVAH,4JMPNEXT1L5:;定义键码子程序L5CMPAL,6dhJNZL6MOVAH,5JMPNEXT1L6:;定义键码子程序L6CMPAL,7dhJNZL7MOVAH,6JMPNEXT1L7:CMPAL,07hJNZL8MOVAH,7JMPNEXT1L8:;定义键码子程序L8CMPAL,7fhJNZL9JMPNEXT1L9:CMPAL,6fh;AL与6FH比较JNZL10;若ZF=0则存入L10中MOVAH,9JMPNEXT1L10:CMPAL,77hJNZL11MOVAH,10JMPNEXT1L11:CMPAL,7chJNZL12MOVAH,11JMPNEXT1L12:CMPAL,39hJNZL13MOVAH,12JMPNEXT1L13:CMPAL,5ehJNZL14MOVAH,13JMPNEXT1L14:CMPAL,79hJNZL15JMPNEXT1L15:CMPAL,71hJMPAAANEXT1:MOVDS:[DI],AHINCDICMPDI,2004HCALLDELAY1JEACLTJMPCHECK0ACLT:MOVAX,0MOVDX,0MOVDI,2000H;将2000H送入DIMOVAL,DS:[DI];将DS:[DI]的地址送入ALMOVDL,DS:[DI+2]MOVBL,DS:[DI+1]CMPBL,10JNZK1ADDAL,DLPUSHAX;将AX压栈JMPLOOP1;转移到LOOP1地址K1:CMPBL,11JNZK2SUBAL,DLPUSHAXJMPLOOP1K2:CMPBL,12JNZK3MULDLPUSHAXJMPLOOP1K3:CMPBL,13JNZLOOP1DIVDLPUSHAXJMPLOOP1PPP:LOOP1:CALLDELAY1CALLSENDJMPKKKDELAY1:;延时子程序MOVCX,0FFFFHLLL:LOOPLLLRETSEND:PUSHAXMOVDX,48AHSEND1:INAX,DXJNZSEND2JMPSEND1SEND2:POPAXMOVDX,480HOUTDX,ALRETKKK:JMPCHECK0DISCODEDB3fh,06h,5bh,4fh,66h,6dh,7dh,07h;(0-7);定义各键码DB7fh,6fh,77h,7ch,39h,5eh,79h,71h;(8-F)DB01h,02h,04h,08h,10h,20h,40h,80h;(abcdefgh);显示字形码表CODEENDS;代码段结束ENDSTART;程序段结束五.实验结果简单计算器1位十进制实验结果截图。六.实验中遇到的问题及解决办法。1.开始的时候自己编写的程序是按照4x4键盘编写,但实验室中所用到的试验箱是3x8的键位分布。原本编写的键盘扫描程序要进行修改。经过第一次的尝试我们失败了。之后我们经过请教同学和自己修改终于让我们看到了希望,程序能过成功的进行键盘扫描。2.之后的实验结果再一次无情的打击到我,实验并未能按照预期的要求实现2位十进制数的计算而只能进行一位十进制数的计算,两位十进制数无法正常的输入。由于自身知识掌握的不够扎实最后并未成功的解决。七、心得体会与建议我的心得真的太多,综合设计实验也让我看清自己的不足,对于这个实验虽然自己花了很多的时间但并未得到预想的结果。微机原理理论课程已经学完了自己真正的学到了多少知识只有自己知道。我一直都是以一种消极的态度对待这门课程而显然我也为自己的愚蠢付出代价。还有最后的宝贵日子希望自己能够好好地把握。同时我觉得自己在编程上很有问题该花更多的时间在编程上。这一次的实验也是对自己的一次清醒认识吧!感谢老师的殷切教导。

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功