微机原理课程设计用8088设计一个能实现09整数加法运算的计算器和用2位LED数码显示Word文档格式.docx
《微机原理课程设计用8088设计一个能实现09整数加法运算的计算器和用2位LED数码显示Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计用8088设计一个能实现09整数加法运算的计算器和用2位LED数码显示Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
1.画出连接线路图或功能模块引脚连接图。
2.采用8088CPU作主控制器,8255作为并行接口电路实现按键的扫描以及数码管的显示。
3.采用2个共阴极型LED,只需显示0—255范围内的值。
三、设计分析
8255A写方式控制字
8255A各端口结构
四、流程图
否
是
是
是是
五、程序清单
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
BEGIN:
JMPBEGIN
BUFFDB1,2,3,4,5,6
TABLE1
DW3E07H,3E0BH,3D0BH,3B0BH,3E0DH,3D0DH,3B0DH,3E0EH,3D0EH,3B0EH
;
对应0~9的键盘值
DW
370EH,370DH,370BH,3707H,3B07H,3D07H,2F07H,2F0BH,2F0DH,2F0EH,1F07H,1F0BH,1F0DH
对应其他的键盘值
TABLEDB3FH,6,5BH,4FH,66H,6DH,7DH,7,7FH,6FH,46H,40H,48H,00;
0~9上的字型码
XDW0
YDW0
FDB0
NDB0
CDB0
ADDFDB0
SHIDB0
GEDB0
MOVAX,CS
MOVDS,AX
CALLCLEAR
AGAIN:
MOVDX,203H
MOVAL,8255A
CALLLED;
调用子程序
CALLKEY
CMPF,1
JNEAGAIN
CMPBL,9;
对比数字键盘
JLED_PROCE
CMPBL,10
JETO_ADD;
转到加法子程序
CMPBL,11
JMPAGAIN;
返回继续循环
CLEAR1:
CALLCLBUF
JMPAGAIN
D_PROCE:
CMPN,1
JED_P_Y
MOVCL,4
SHLX,CL
MOVBH,0
ADDX,BX
CALLBSHIFT
MOVBUFF+5,BL
D_P_Y:
SHLY,CL
ADDY,BX
TO_ADDCALLBSHIFT;
加法子程序的具体实现
MOVF,0
MOVN,1
MOVADDF,1
KEYPROC;
键盘扫描程序的实现
MOVAL,10001001B
OUTDX,AL;
写控制字
MOVDX,201H
MOVAL,0
OUTDX,AL
MOVDX,202H
INAL,DX
ANDAL,0FH
CMPAL,0FH
JEK_EXIT
MOVCX,3000
LOOP$;
延时
PUSHAX
MOVAL,10000010B;
B_IN,C_OUT
POPAX
MOVBL,AL
ANDAL,00111111H
MOVBH,AL
LEASI,TABLE1
MOVCX,23
MOVAH,0
NK:
CMPBX,[SI]
JEFOUND
INCAH
ADDSI,2
LOOPNK
FOUND:
MOVAL,0;
不断扫描,等待输入
ANDAL,3FH
CMPAL,3FH
JNEFOUND;
如果无输入继续扫描
LOOP$
MOVF,1
MOVBL,AH
K_EXIT:
RET
KEYENDP
STOREPROC;
存储程序
MOVWORDPTRBUFF,1414H
LEASI,BUFF;
赋给偏移地址
MOVCH,4
DISPLAY:
MOVDL,0
MOVAL,BUFF[DL];
取数
MOVCL,10
DIVCL
MOVSHI,AH;
求和的十位
MOVGE,AL;
和的个位
MOVDX,383H;
PA口输出方式选择控制字
MOVAL,80H
MOVDX,380H;
PA口代码输出十位显示
MOVAL,TABLE[SHI]
PB口方式选择控制字
MOVAL,10000000H
MOVDX,381H;
PB口代码输出个位显示
MOVAL,TABLE[GE]
INCDL
JMPDISPLAY
S_REL:
ROLBX,CL;
循环左移四位
MOVAL,BL
ANDAL,0FH;
取低四位
MOV[SI+2],AL
INCSI
DECCH
JNZS_REL
STOREENDP
CODEENDS
ENDSTART
六、硬件部分
七、设计小结
本次课程设计花费了我很多时间和精力,但是也锻炼了我很多方面的能力。
老师在实验要求中指明了要采用8088CPU作主控制器,8255作为并行接口电路实现按键的扫描以及数码管的显示,因此在设计该简易计算器时在芯片的选择上就更加明确了。
但是由于理论学习的知识掌握不太牢固,导致对8255芯片的应用不熟悉,在做课程设计的时候,通过使用8255芯片,我对8255芯片的几种工作方式、如何设置输入输出以及如何写方式控制字等有了更好的掌握。
LED的使用对我来说是非常生疏的,通过查找资料我了解了LED的显示原理。
8255A的初始化和8088的接线也是十分简单,但是等到编成的时候发现有很多不懂得地方,觉得很容易的算法在编程中很难实现。
在写完程序后,编译过程中出现了很多错误,通过查找资料我逐步的排解错误。
在绘制PROTEL图形时,出现了很多问题,特别是不清楚一些芯片的封装,找了很久才找到,而8255A的芯片则完全是自己在PROTEL软件中按课本知识绘制出来再运用于硬件图中,但是也锻炼了我绘图的能力。
本次课程设计,不仅使我加深了对接口程序设计的认识,对接口各部件的工作原理也有了进一步的了解,也增强了分析故障的能力,更重要的是培养了我们面对问题、解决问题的能力。
从理论知识上我对8086和8255的作用、功能以及初始化更加熟悉,并且有了客观上的理解,对键盘的使用和数码管显示问题也有了一定的了解。
在做课程设计的时候,我发现准备好设计思路和画流程图是非常重要的,它让我有针对性的编写程序,可以有效的避免和及时发现错误。
同时,我也认识到,对任何实际问题的处理,都是建立在我们所学的基础知识之上,只有牢固熟练的掌握了基础知识,才能够对问题的解决有个宏观准确的把握,找到解决问题的切入点,攻克难点。
要有严谨的态度,对问题的思考不要畏难,因为任何一点小的思路的错误或者语法的错误,都会导致功能不能实现。
当然我还有很多不足之处,比如知识掌握的不够全面,研究的深度不够,有问题畏畏缩缩不敢问,程序编写不会查缺补漏。
这些都是我需要去改进的地方。
我会在以后的学习中多加注意。
八、参考文献
《微机原理、汇编与接口技术》朱定华清华大学出版社
XX文库