马世宽微机原理作业资料.docx
《马世宽微机原理作业资料.docx》由会员分享,可在线阅读,更多相关《马世宽微机原理作业资料.docx(18页珍藏版)》请在冰点文库上搜索。
马世宽微机原理作业资料
微机原理作业
题目:
基于微机总线的计算器设计
学院:
机电工程学院
专业:
机械电子
姓名:
马世宽
学号:
2014020274
指导老师:
杨杰
2015年1月5日
基于微机总线的计算器设计
1.设计要求
设计基于微机总线的计算器,要求能完成一位数位数的四则运算。
硬件为基于ISA总线的接口板,包括键盘、LED或液晶显示。
软件方面则需通过编程来实现运算功能。
2.设计原理
设计的思路是:
首先对键盘进行扫描,如有按键按下,确定并判断键值,将该值储存并显示在LED屏上。
如有“=”按下,则调取存储的数据进行相应的计算,并将结果显示在屏幕上。
设计硬件如图2.1所示。
图2.1电路图
3.硬件功能
3.1可编程并行通信接口芯片8255A
图3.18255内部原理图
图3.28255引脚图
3.1.1并行输入/输出端口A,B,C
8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。
端口都是8位,都可以作为输入或输出。
通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。
3.1.2A组和B组控制部件
端口A和端口C的高4位(PC7~PC4)构成A组;由A组控制部件实现控制功能。
端口B和端口C的低4位(PC3~PC0)构成B组;由B组控制部件实现控制功能。
A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。
3.1.3数据总线缓冲存储器
三态双向8位缓冲器,是8255A与总线之间的数据接口。
与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。
3.1.4读/写控制部件
8255A完成读/写控制功能的部件。
能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。
CS片选信号:
由CPU输入,有效时表示该8255A被选中。
RD,WR读、写控制信号:
由CPU输入。
RD有效表示CPU读8255A,WR有效表示CPU写8255A。
RESET复位信号:
由CPU输入。
RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。
定义工作方式控制字:
工作方式0:
8255A中各端口的基本输入/输出方式。
键盘输入模块
图3.38255控制口
3.2键盘
下图是一个4x4键盘的结构图,因为4x4键盘有8个管脚,于是将键盘接8255A的PC口,进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4x4键盘则要求4个I/O引脚输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。
图3.4键盘
3.3LED显示屏
因为要计算-9~9的四则运算,为了显示更加清晰、明了,本次设计共使用了5块LED显示屏,这样就可以显示出输入的算式。
电路图如下图所示。
图3.5LED显示屏
4.软件设计
4.1程序流程图
否
是
否
是
否
是
图4.1主程序流程图
4.2程序代码
编程也可以主要分为三部分;键盘扫描、数据处理、数码管显示,另外还有译码电路,8255A口的地址是0040H,B口地址为0041H,C口地址为0042H,
控制字寄存器地址0043H。
8255A采用的是方式0,A、B口输出,C口的高低四位作为两个4位的端口。
PORT_AEQU40H;8255A口地址
PORT_BEQU41H;8255B口地址
PORT_CEQU42H;8255C口地址
PORT_CTLEQU43H;8255控制口地址
DATASEGMENT
ZIFUCHUANDB80DUP(?
);保存输入的字符串
NUMBER1DB0;保存第一个操作数
NUMBER2DB0;保存第二个操作数
NUMBER1SIGNDB'+';第一个数的符号
NUMBER2SIGNDB'+';第二个数的符号
COMPUTESIGNDB'#';运算符号
HDB0;键盘行号
LDB0;键盘列号
DISCODE DB
3FH,06H,5BH,4FH,
66H,6DH,7DH,07H,
7FH,6FH,4BH,03H,
B4H,30H;数字及运算符号段码表
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
BEGIN:
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
START1:
MOVNUMBER1SIGN,'+'
MOVNUMBER2SIGN,'+'
MOVCOMPUTESIGN,'#';对所有的数据进行初始化
MOVAX,0
MOVBX,0
MOVDI,0
MOVSI,0
MOVCX,0
MOVDX,0
MOVNUMBER1,0
MOVNUMBER2,0
MOVDI,OFFSETZIFUCHUAN
CALLKEY
KEYPROCNEAR;键盘扫描子程序
MOVDX,PORT_CTL
MOVAL,10000001B
OUTDX,AL;送控制字
KS:
;检查有无按键按下
MOVDX,PORT_C
MOVAL,00H;低四行送0
OUTDX,AL
INAL,DX
ANDAL,0FH;检查高四列
CAMAL,0FH
JNEXSH1;无键按下,跳转
MOV CX,50
LOOP $ ;延时消抖
IN AL,DX ;重读列值
ANDAL,0FH
CAMAL,0FH
JNEXSH1
MOV H,0 ;有键按下,先把行列号变量清0
MOV L,0
MOV BH,0EH ; 扫描法读键值:
NEXT:
MOV AL,BH
OUT PORT_C,AL
NEXTH:
IN AL,PORT_C ;读列值,判断是第几列有键按下
ANDAL,0FH
CMPAL,0FH
JNENEXTL
ROLBH,01
INCH;每读一列,H加1
JMPNEXT
NEXTL:
;读行值
MOVDX,PORT_CTL
MOVAL,10010000B
OUTDX,AL
MOVBH,E0H
NEXTL1:
MOVAL,BH
IN AL,PORT_C ;读行值,判断是第几行有键按下
ANDAL,0FH
CMPAL,0FH
JNEDONE
ROLBH,01
INCL;
JMPNEXTL1
DONE:
CALLKEYCHECK
JMPEXIT
XSH1:
CALLXIANSHI
JMPEXIT
EXIT:
RET
KEYENDP
KEYCHECKPROCNEAR;键值计算子程序
MOV DL,L
MOV DH,H
SHL DL,1
SHL DL,1 ;列号乘4
ADD DL,DH
CMP DL,9 ;按下的是数字键
JNG NUM_CALL
CMP DL,14
JL CONT_CALL ;按下的是运算键
CMP DL,14
JZ OUTP_CALL ;按下的是等于键
NUM_CALL:
MOVZIFUCHUAN[SI],DL
INCSI
CALLXIANSHI
CONT_CALL:
MOV ZIFUCHUAN[SI],DL ;存放运算键的键值
INCSI
CALLXIANSHI
JMP EXIT1
OUTP_CALL:
CALLCHECK
JAMPEXIT1
EXIT1:
RET
KEYVALUE ENDP
XIANSHIPROCNEAR;显示子程序
MOVSI,0
KSH:
MOVAL,ZIFUCHUAN[SI]
MOVBX,OFSETDISCODE
XLATDISCODE;查表,取段码
MOVDX,PORT_A
OUTDX,AL;段码送PA口
MOVDX,PORT_B
OUTDX,SI
MOV CX,50
LOOP $ ;延时
INCSI
CMPSI,2
JBEKSH
RET
XIANSHIENDP
MAINENDP
CHECKPROCNEAR;第一个数的识别
MOVSI,0
MOVAL,ZIFUCHUAN[SI]
MOVNUMBER1,AL
INCSI
CALLCHECK1
JMPEXIT1
EXIT1:
RET
CHECKENDP
CHECK1PROCNEAR;运算符的识别
MOVAL,ZIFUCHUAN[SI]
CMPAL,0AH
JZCOMPUTE1;将运算符保存
CMPAL,0B
JZCOMPUTE1
CMPAL,0CH
JZCOMPUTE1
CMPAL,0DH
JZCOMPUTE1
COMPUTE1:
MOVCOMPUTESIGN,AL;记录为运算符号
INCSI
CALLCHECK2
CHECK1ENDP
CHECK2PROCNEAR;检验第二个数字
MOVAL,ZIFUCHUAN[SI]
MOVNUMBER2,AL
INCSI
CALLCHECK3
JMPEXIT2
EXIT2:
RET
CHECK2ENDP
CHECK3PROCNEAR;比较运算符
CMPCOMPUTESIGN,0CH;12为乘法
JZMULTIPLY1
CMPCOMPUTESIGN,0DH;13为除法
JZDEVIDE11
CMPCOMPUTESIGN,0AH;10为加法
JZPLUS1
CMPCOMPUTESIGN,0BH;11为减法
JZMINUS1
JMPEXIT3
MULTIPLY1:
CALLMULTIPLY
JMPEXIT3
DEVIDE11:
CALLDIVIDE
JMPEXIT3
PLUS1:
CALLPLUS
JMPEXIT3
MINUS1:
CALLMINUS
EXIT3:
RET
CHECK3ENDP
MULTIPLYPROCNEAR;两个数的乘法运算
MOVAL,NUMBER1
MOVCL,NUMBER2;
MULCL
MOVSI,0
MOVZIFUCHUAN[SI],AH
INCSI
MOVZIFUCHUAN[SI],AL
CALLXIANSHI
RET
MULTIPLYENDP
DIVIDEPROCNEAR;除法运算
MOVAL,NUMBER1
MOVBL,NUMBER2
DIVBL
MOVSI,0
MOVZIFUCHUAN[SI],AL;除法只显示商
CALLXIANSHI
RET
DIVIDEENDP
PLUSPROCNEAR;加法运算
MOVAL,NUMBER1
MOVBL,NUMBER2
ADDAL,BL
MOVSI,0
MOVZIFUCHUAN[SI],AL;
CALLXIANSH
RET
PLUSENDP
MINUSPROCNEAR;减法运算
MOVAL,NUMBER1
MOVBL,NUMBER2
SUBAL,BL
MOVSI,0
MOVZIFUCHUAN[SI],AL
RET
MINUSENDP