1、马世宽微机原理作业资料微机原理作业 题 目: 基于微机总线的计算器设计 学 院: 机电工程学院 专 业: 机械电子 姓 名: 马世宽 学 号: 2014020274 指导老师: 杨杰 2015年1月5日基于微机总线的计算器设计1.设计要求 设计基于微机总线的计算器,要求能完成一位数位数的四则运算。硬件为基于ISA总线的接口板,包括键盘、LED或液晶显示。软件方面则需通过编程来实现运算功能。2.设计原理设计的思路是:首先对键盘进行扫描,如有按键按下,确定并判断键值,将该值储存并显示在LED屏上。如有“=”按下,则调取存储的数据进行相应的计算,并将结果显示在屏幕上。设计硬件如图2.1所示。图2.1
2、电路图3.硬件功能3.1可编程并行通信接口芯片8255A图3.1 8255内部原理图图3.2 8255引脚图3.1.1 并行输入/输出端口A,B,C 8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7PA0、PB7PB0、PC7PC0。端口都是8位,都可以作为输入或输出。通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。3.1.2 A组和B组控制部件端口A和端口C的高4位(PC7PC4)构成A组;由A组控制部件实现控制功能。 端口B和端口C的低4位(PC3PC0)构成B组;由B
3、组控制部件实现控制功能。 A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0D7)送来的控制字,并根据他们来定义各个端口的操作方式。3.1.3 数据总线缓冲存储器 三态双向8位缓冲器,是8255A与总线之间的数据接口。与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。3.1.4读/写控制部件 8255A完成读/写控制功能的部件。能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。CS 片选信号:由CPU输入,有效时表示该8255A被选中。 RD, WR 读、写控制信号:由CPU输入。RD有效表示CPU读8255A,WR有效表示CPU写8
4、255A。RESET 复位信号:由CPU输入。RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。定义工作方式控制字:工作方式0:8255A中各端口的基本输入/输出方式。键盘输入模块图3.3 8255控制口3.2键盘下图是一个4x4键盘的结构图,因为4x4键盘有8个管脚,于是将键盘接8255A的PC口,进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4x4键盘则要求4个I/O引脚输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。图3.4 键盘3.3 LED显示屏 因为要计算-9
5、9的四则运算,为了显示更加清晰、明了,本次设计共使用了5块LED显示屏,这样就可以显示出输入的算式。电路图如下图所示。图3.5 LED显示屏4.软件设计4.1 程序流程图 否 是 否是 否是图4.1 主程序流程图4.2 程序代码编程也可以主要分为三部分;键盘扫描、数据处理、数码管显示,另外还有译码电路,8255A口的地址是0040H,B口地址为0041H,C口地址为0042H,控制字寄存器地址0043H。8255A采用的是方式0,A、B口输出,C口的高低四位作为两个4位的端口。PORT_A EQU 40H ;8255 A口地址PORT_B EQU 41H ;8255 B口地址PORT_C EQ
6、U 42H ;8255 C口地址PORT_CTL EQU 43H ;8255 控制口地址DATA SEGMENT ZIFUCHUAN DB 80 DUP(?) ;保存输入的字符串 NUMBER1 DB 0 ;保存第一个操作数 NUMBER2 DB 0 ;保存第二个操作数 NUMBER1SIGN DB + ;第一个数的符号 NUMBER2SIGN DB + ;第二个数的符号 COMPUTESIGN DB # ;运算符号 H DB 0 ;键盘行号 L DB 0 ;键盘列号 DISCODE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH, 4BH,03H,B4H,
7、30H ;数字及运算符号段码表DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FARBEGIN: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AXSTART1: MOV NUMBER1SIGN,+ MOV NUMBER2SIGN,+ MOV COMPUTESIGN,# ;对所有的数据进行初始化 MOV AX,0 MOV BX,0 MOV DI,0 MOV SI,0 MOV CX,0 MOV DX,0 MOV NUMBER1,0 MOV NUMBER2,0 MOV DI,OFFSET ZI
8、FUCHUAN CALL KEYKEY PROC NEAR ;键盘扫描子程序MOV DX, PORT_CTLMOV AL, 10000001BOUT DX,AL ;送控制字KS: ;检查有无按键按下MOV DX, PORT_CMOV AL,00H ;低四行送0OUT DX,ALIN AL,DXAND AL,0FH ;检查高四列CAM AL,0FHJNE XSH1 ;无键按下,跳转MOVCX,50LOOP$ ;延时消抖INAL,DX ;重读列值AND AL,0FH CAM AL,0FHJNE XSH1 MOVH,0 ;有键按下,先把行列号变量清0MOVL,0MOVBH,0EH ;扫描法读键值:N
9、EXT:MOVAL,BHOUTPORT_C,ALNEXTH:INAL,PORT_C;读列值,判断是第几列有键按下AND AL,0FHCMP AL,0FHJNE NEXTLROL BH,01INC H ;每读一列,H加1JMP NEXTNEXTL: ;读行值MOV DX, PORT_CTLMOV AL, 10010000B OUT DX,ALMOV BH,E0HNEXTL1:MOV AL,BHINAL,PORT_C;读行值,判断是第几行有键按下AND AL,0FHCMP AL,0FHJNE DONEROL BH,01INC L ;JMP NEXTL1DONE: CALL KEYCHECK JMP
10、 EXITXSH1: CALL XIANSHI JMP EXITEXIT: RETKEY ENDPKEYCHECK PROC NEAR ;键值计算子程序MOVDL,LMOVDH,HSHLDL,1SHLDL,1;列号乘4ADDDL,DHCMPDL,9;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL;按下的是运算键CMPDL,14JZOUTP_CALL;按下的是等于键NUM_CALL:MOV ZIFUCHUANSI, DLINC SICALL XIANSHICONT_CALL: MOVZIFUCHUANSI, DL;存放运算键的键值 INC SI CALL XIANSH
11、IJMPEXIT1OUTP_CALL:CALL CHECKJAMP EXIT1EXIT1: RETKEYVALUEENDPXIANSHI PROC NEAR ;显示子程序MOV SI,0KSH:MOV AL,ZIFUCHUANSIMOV BX,OFSET DISCODEXLAT DISCODE ;查表,取段码 MOV DX, PORT_A OUT DX,AL ;段码送PA口 MOV DX, PORT_B OUT DX,SI MOVCX,50 LOOP$ ;延时 INC SI CMP SI,2 JBE KSH RETXIANSHI ENDP MAIN ENDPCHECK PROC NEAR ;第
12、一个数的识别 MOV SI,0 MOV AL,ZIFUCHUANSI MOV NUMBER1,AL INC SI CALL CHECK1 JMP EXIT1EXIT1: RETCHECK ENDPCHECK1 PROC NEAR ;运算符的识别 MOV AL,ZIFUCHUANSI CMP AL,0AH JZ COMPUTE1 ;将运算符保存 CMP AL,0B JZ COMPUTE1 CMP AL,0CH JZ COMPUTE1 CMP AL,0DH JZ COMPUTE1COMPUTE1: MOV COMPUTESIGN,AL ;记录为运算符号 INC SI CALL CHECK2 CHE
13、CK1 ENDP CHECK2 PROC NEAR ;检验第二个数字 MOV AL,ZIFUCHUANSI MOV NUMBER2,AL INC SI CALL CHECK3 JMP EXIT2EXIT2: RET CHECK2 ENDPCHECK3 PROC NEAR ;比较运算符 CMP COMPUTESIGN,0CH ;12为乘法 JZ MULTIPLY1 CMP COMPUTESIGN,0DH ;13为除法 JZ DEVIDE11 CMP COMPUTESIGN,0AH ;10为加法 JZ PLUS1 CMP COMPUTESIGN,0BH ;11为减法 JZ MINUS1 JMP E
14、XIT3MULTIPLY1: CALL MULTIPLY JMP EXIT3DEVIDE11: CALL DIVIDE JMP EXIT3PLUS1: CALL PLUS JMP EXIT3MINUS1: CALL MINUS EXIT3: RETCHECK3 ENDPMULTIPLY PROC NEAR ;两个数的乘法运算 MOV AL,NUMBER1 MOV CL,NUMBER2 ; MUL CL MOV SI,0 MOV ZIFUCHUANSI,AH INC SI MOV ZIFUCHUANSI,AL CALL XIANSHI RETMULTIPLY ENDPDIVIDE PROC NE
15、AR ;除法运算 MOV AL,NUMBER1 MOV BL,NUMBER2DIV BL MOV SI,0MOV ZIFUCHUANSI,AL ;除法只显示商CALL XIANSHIRET DIVIDE ENDPPLUS PROC NEAR ;加法运算 MOV AL,NUMBER1 MOV BL,NUMBER2 ADD AL,BL MOV SI,0 MOV ZIFUCHUANSI,AL ; CALL XIANSH RETPLUS ENDP MINUS PROC NEAR ;减法运算 MOV AL,NUMBER1 MOV BL,NUMBER2 SUB AL,BL MOV SI,0 MOV ZIFUCHUANSI,AL RET MINUS ENDP
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2