《微机原理课程设计说明书简单计算机的设计.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计说明书简单计算机的设计.doc(17页珍藏版)》请在三一办公上搜索。
1、郑州航空工业管理学院微机原理课程设计说明书 2007 级 电气工程及其自动化 专业 1206972 班级题 目 简单计算机的设计 指导教师 职 称 学 号 1206972 姓 名 二一0 年 六 月 十八 日简易计算器的设计摘要: 1、课题:设计一个可以进行2位数的四则运算的计算器。2、要求:(1)键输入数和运算符号; (2)LED显示运算过程和结果(十进制数); (3)表示出当前的运算类型; (4)具有清零和复位功能; (5)具有连续运算功能。关键词: 8279A芯片、74LS138译码器、74LS240芯片、小键盘、LED发光二极管。一、简单计算器工作的基本原理:首先利用程序不断扫描键盘是
2、不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序进行2位数四则运算。运算完成后将运算的结果储存并显示到LED显示器上。通过键盘上的C键实现清零和复位功能。在一次运算之后可以直接进行下一次运算无需复位。二、设计方案 1、硬件部分本次设计所选用的芯片为:8279A芯片、LED发光二极管、小键盘。由于8279A的输出电流与LED不匹配的问题,需要驱动电流,本实验中选择74LS240。(1)、8279A芯片在本设计中用8279A芯片控制键盘输入和LED显示。8279A芯片是一种通用的可编程序的键盘/显示接口器件,可与任何8位机接口,能完成键盘输
3、入和LED显示控制两种功能。采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点,是实时性较高的测控系统的首选器件之一。(2)、74LS138译码器在本设计中74LS138译码器用来扫描计数器采用编码工作方式。74LS138译码器的功能:74LS138是3/8译码器,即对3个输入信号进行译码,得到8个输出状态。G1、G2A、G2B为数据允许输出端,G2A、G2B低电平有效,G1高电平有效。A、B、
4、C为译码信号输出端,Y0Y7为译码输出端,低电平有效。(3)、74LS240译码器本设计中74LS240译码器主要是为增加LED的驱动电流。74LS240译码器的功能:74LS240 TTL 八反相三态缓冲器/线驱动器各个引出端: 1A、2A为输入端; 、为三态允许端(低电平有效);1Y8Y为输出端。(4)、小键盘本设计中小键盘用于输入二进制数字。(5)、LED发光二极管在本设计中采用7段数字LED发光二级管,做为终端显示。显示数值的输入及结果输出的显示。在本设计中采用共阴极接法。 2、软件部分输入:小键盘上的16个按键中0到9十个数字键作为数字输入,A、B、C、D分别作为加、减、乘、除,F作
5、为等于号。通过对8279初始化,实现对每个按键赋予不同的功能。显示:8279A芯片内部有一个显示RAM和一个FIFO RAM,可以暂存从小键盘中读出的数据,同时可以将内存中的数据暂存到显示RAM中,简化了程序复杂程度。每次将各个位要显示的数据处理好后到换码表中找到对应值,初始化8279A后将值送到数据口,即实现显示的目的。清零:在程序中设置了按键数目的限制(定为8),当8个数码块全有字符显示后再按键,清除显示。三、硬件设计硬件电路图的设计:图中8279A的地址由和A0决定,故数据口地址为7FFEH,命令口地址为7FFFH。图中显示部分段选码由8279的OUTA3OUTA0、OUTB3OUTB0
6、通过驱动器74LS240提供,位选码由SL2SL0 经3-8译码器通过驱动器74LS240提供。四、软件设计在软件设计中,显示方式采用了8个字符显示,从左输入方式,编码扫描键盘,双键锁定。由于该系统对实时性及速度要求并不十分高,所以时钟频率采用6M Hz已足够了,故程序时钟命令字取为2AH,用以保证100kHz的内部工作频率。由于采用10ms定时扫描查询方式,所以在下次开始扫描时,先应清空8279A,清除显示RAM大约需要160s的时间,在此期间,FIFO状态字的最高位DU=1,表示显示无效,CPU不能显示RAM写入数据,所以清除命令状态字取D1H。CPU对8279A的控制是先读回8279A的
7、状态字,查看PIFORAM中有无字符,若有将根据字符个数读出所有字符,并进行相应处理;若无,则直接返回。CPU对8279A的监视采用查询方式,对8279A分配的数据口地址为8000H,状态口地址为8001H,CPU每隔10ms定时中断查询一次,所有显示采用查询段码表的方式实现,简化了程序设计过程,提高了程序质量。程序流程图如下:开始调用地址转化调用8279初始化DI取数据首地址是否有按键按下N按键数加1显示结果AL=6 ?AL与KEYCONT换CALL KEY_NUMAL中是否为加AL是否为减AL是否为乘号AL是否为除AL中大于10ALKEYOUNT,INC ALAL5?重新扫描按键转加法转减
8、法转乘法转除法按键数置0,清除显示清零NNNNYYNNYYNNN程序清单:STACK SEGMENT STCAK DB 64 DUP(?)STACK ENDS DATA SEGMENT ORG 3000H VAR1 DB 00H,01H,02H,03H,04H VAR2 DB 3FH, 3FH, 3FH, 3FH, 3FH, 3FH, 3FH, 3FH, 3FH, 3FH VAR3 DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H VAR4 DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00
9、HTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AL,88H OUT 63H,AL ;82255A初始化 MOV BX,0000H ;BX清零STT: MOV AL,00H ;键盘测试 OUT 61H.ALNEXT: IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ KEYABC CALL DISP ;调
10、用显示程序 JMP STTKEYABC:CALL TIME ;延时 IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ KEY JMP STTKEY: MOV AL,0FEH ;键盘扫描识别 OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_0 CALL KEY8 JMP STTKKEY_0: TEST AL,40H JNZ KEY_9 CALL KEY0 JMP STTKKEY_9: MOV AL,0FDH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_1 CALL KEY9 JMP STTKKEY_
11、1: TEST AL,40H JNZ KEY_A CALL KEY1 JMP STTKKEY_A: MOV AL,0FBH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_2 CALL KEYA JMP STTKKEY_2: TEST AL,40H JNZ KEY_B CALL KEY2 JMP STTKKEY_B: MOV AL,0F7H OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_3 CALL KEYB JMP STTKKEY_3: TEST AL,40H JNZ KEY_C CALL KEY3 JMP STTKKEY
12、_C: MOV AL,0EFH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_4 CALL KEYC JMP STTKKEY_4: TEST AL,40H JNZ KEY_D CALL KEY4 JMP STTKKEY_D: MOV AL,0DFH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_5 CALL KEYD JMP STTKKEY_5: TEST AL,40H JNZ KEY_D CALL KEY5 JMP STTKKEY_E: MOV AL,0BFH OUT 61H,AL IN AL,62H TEST AL,8
13、0H JNZ KEY_6 CALL KEYE JMP STTKKEY_6: TEST AL,40H JNZ KEY_F CALL KEY6 JMP STTKKEY_F: MOV AL,07FH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_7 CALL KEYF JMP STTKKEY_7: TEST AL,40H JNZ KEY_71 CALL KEY7 JMP STTKKEY_71:JMP STTKKEY9: CMP BH,00H ;按键9处理子程序 JZ KEY9_1 ;未按过符号键,不清零 CALL CLEAR ;已按过符号键,清零KEY9_1:CA
14、LL LP1 ;低4位字节前移 MOV AL,6FH ;最低字节输入一个数据 MOV SI+4,AL MOV AL,09H MOV DI+4,AL CALL DISP ;显示 RET;返回KEY8: CMP BH,00H ;按键8处理子程序 JZ KEY8_1 CALL CLEARKEY8_1:CALL LP1 MOV AL,7FH MOV SI+4,AL MOV AL,08H MOV DI+4,AL CALL DISP RETKEY7: CMP BH,00H ;按键7处理子程序 JZ KEY7_1 CALL CLEARKEY7_1:CALL LP1 MOV AL,07H MOV SI+4,A
15、L MOV AL,07H MOV DI+4,AL CALL DISP RETKEY6: CMP BH,00H ;按键6处理子程序 JZ KEY6_1 CALL CLEARKEY6_1:CALL LP1 MOV AL,7DH MOV SI+4,AL MOV AL,06H MOV DI+4,AL CALL DISP RETKEY5: CMP BH,00H ;按键5处理子程序 JZ KEY5_1 CALL CLEARKEY5_1:CALL LP1 MOV AL,6DH MOV SI+4,AL MOV AL,05H MOV DI+4,AL CALL DISP RETKEY4: CMP BH,00H ;
16、按键4处理子程序 JZ KEY4_1 CALL CLEARKEY4_1:CALL LP1 MOV AL,66H MOV SI+4,AL MOV AL,04H MOV DI+4,AL CALL DISP RETKEY3: CMP BH,00H ;按键3处理子程序 JZ KEY3_1 CALL CLEARKEY3_1:CALL LP1 MOV AL,4FH MOV SI+4,AL MOV AL,03H MOV DI+4,AL CALL DISP RETKEY2: CMP BH,00H ;按键2处理子程序 JZ KEY2_1 CALL CLEARKEY2_1:CALL LP1 MOV AL,5BH
17、MOV SI+4,AL MOV AL,02H MOV DI+4,AL CALL DISP RETKEY1: CMP BH,00H ;按键1处理子程序 JZ KEY1_1 CALL CLEARKEY1_1:CALL LP1 MOV AL,06H MOV SI+4,AL MOV AL,01H MOV DI+4,AL CALL DISP RETKEY0: CMP BH,00H ;按键0处理子程序 JZ KEY0_1 CALL CLEARKEY0_1:CALL LP1 MOV AL,3FH MOV SI+4,AL MOV AL,00H MOV DI+4,AL CALL DISP RETKEYA: CM
18、P BH,00H ;按键+号处理子程序 JNZ KEYA_1 CALL LP3 ;保存输入的数据KEYA_1:MOV BX,0101H;设置符号标志 RET;返回KEYB: CMP BH,00H ;按键-号处理子程序 JNZ KEYB_1 CALL LP3 ;保存输入的数据KEYB_1:MOV BX,0102H ;设置符号标志 RET;返回KEYC: CMP BH,00H ;按键*号处理子程序 JNZ KEYC_1 CALL LP3 ;保存输入的数据KEYC_1:MOV BX,0103H ;设置符号标志 RET;返回KEYD: CMP BH,00H ;按键/号处理子程序 JNZ KEYD_1
19、CALL LP3 ;保存输入的数据KEYD_1:MOV BX,0104H ;设置符号标志 RET ;返回KEYE: MOV BH,01H ;按键=号处理子程序 CMP BL,01H ;是+号? JZ K1 ;进行加法运算 CMP BL,02H ;是-号? JZ K2 ;进行减法运算 CMP BL,03H ;时*号? JZ K3 ;进行乘法运算 CMP BL,04H ;是/号? JZ K4 ;进行除法运算STTE: RETK1: CALL ADD1 JMP STTEK2: CALL SUB1 JMP STTEK3: CALL MUL1 JMP STTEK4: CALL DIV1 JMP STTE
20、KEYF: CALL CLEAR ;按键C(清零)处理子序 RETCLEAR: MOV SI,OFFSET VAR2;数据清零子程序 MOV DI,OFFSET VAR3 MOV CX,000AHCLEAR1:MOV AL,3FH MOV SI,AL MOV AL,00H MOV DI,AL INC SI INC DI LOOP CLEAR1 MOV BH,00H RETADD1: MOV SI,OFFSET VAR3 ;加法子程序 MOV DI,OFFSET VAR4 CLC MOV CX,0005HADD_1: MOV AL,DI ADC AL,SI AAA MOV DI,AL INC S
21、I INC DI LOOP ADD_1 CALL CHANGE CALL DISP RETSUB1: MOV SI,OFFSET VAR3 ;减法子程序 MOV DI,OFFSET VAR4 CLC MOV CX,0005HSUB_1: MOV AL,DI MOV CL,SI AAS MOV DI,AL INC SI INC DI LOOP SUB_1 CALL CHANGE CALL DISP RETMUL1: MOV SI,OFFSET VAR3 ;乘法子程序 MOV DI,OFFSET VAR4MOV AL,DI MOV CL,SI MUL CL AAM MOV DI+5,AX MOV
22、AL,DI+1 MUL CL AAM ADD AL,DI+6 AAA MOV DI+6,AX MOV AL,DI MOV CL,SI+1 MUL CL AAM MOV SI+5,AX MOV AL,DI+1 MUL CL AAM ADD AL,SI+6 AAA MOV SI+6,AX MOV AL,DI+5 MOV DI,AL MOV AL,DI+6 ADD AL,SI+5 AAA MOV DI+1,AL MOV AL,DI+7 ADC AL,SI+6 AAA MOV DI+2,AL MOV AL.00H ADC AL,SI+7 AAA MOV DI+3,AL CALL CHANGE CALL
23、 DISP RETDIV1: MOV SI,OFFSET VAR3 ;除法子程序 MOV DI,OFFSET VAR4 MOV AH,00H MOV AL,DI+1 MOV CK,SI DIV CL MOV DI+1,AL MOV AL,DI AAD DIV CL MOV DI,AL CALL CHANGE CALL DISP RETLP1: MOV CX,0004H ;数据移位保存子程序(4位) MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR3LP2: MOV AL,SI+3 MOV SI+4,AL MOV AL,DI+3 MOV DI+4,AL DEC SI DE
24、C DI LOOP LP2 RETLP3: MOV CX,0005H ;保存上一次数据子程序 MOV SI,OFFSET VAR3 MOV DI,OFFSET VAR4LP4: MOV AL,SI MOV DI,AL DEC SI DEC DI LOOP LP4 RETCHANGE:MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR3 MOV BX,OFFSET TABLE MOV CX,0005HCOMP0: MOV AL,DI XLAT MOV SI,AL INC SI INC DI LOOP COMP0 RETDISP: MOV SI,OFFSET VAR1 MOV
25、 DI,OFFSET VAR2 MOV DL,DI+4 CMP 3FH JNZ DIR4 MOV DL,DI+3 CMP DL,3FH JNZ DIR3 MOV DL,DI+2 CMP DL,3EH JNZ DIR2 MOV DL,DI+1 CMP DL,3FH JNZ DIR1 JMP DIR0DIR4: MOV CX,0005H JMP DIRDIR3: MOV CX,0004H JMP DIRDIR2: MOV CX,0003H JMP DIR DIR1: MOV CX,0002H JMP DIRDIR0: MOV CX,0001HDIR: MOV AL,SI OUT 62H,AL MO
26、V AL,DI OUT 60H,AL CALL TIME INC SI INC DI LOOP DIR RETTIME: PUSH AX PUSH CX MOV CX,0040HTIME1: MOV AX,0300HTIME2: DEC AX JNZ TIME2 LOOP TIME1 POP CX POP AX RETSTTK: CALL DISP ;放键测试程序 MOV AL,00H OUT 61H,AL IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ STTK JMP STTCODE ENDS五、系统调试1、硬件调试本设计采用八位七段LED显示器、十六键小键盘、
27、74LS138译码器、74LS240译码器及8279A芯片。LED显示器采用的是共阴极接法,8279A通过74LS138译码器扩展28键盘、8位显示器,最后通过七段LED显示出相应的数字。将八位七段LED测试完后,都能正常显示,则硬件调试成功。2、软件调试本实验通过小键盘的按键输入与键号相同的十进制数值,利用LED七段显示器循环显示与所按下键相对应的十进制数,编译链接无错误后开始单步调试,找出错误的地方,确保无误后全速运行得出结果。3、联机调试 将实验箱总电源开关打开,打开PC机上的集成软件。编译程序、编译通过后,单步调试并观察结果以及各寄存器中值得变化,然后单步连续执行观察按下键与显示数值。
28、出现问题时对程序进行修改,直至出现正确结果。4、调试中出现的问题(1)、全速运行时LED显示器显示全为暗红色8字型?原因:由于指令运行的速度很快,导致新旧数据有重影(前一次显示数据时为亮的二极管没有显示结束,导致新显示的数据看不清楚)。(2)、 程序在输入完两个数值后,按ABCD键即加减乘除却没有结果显示出来?原因:在程序上结构混乱,导致程序调用出现错误,不调用算法子程序,使得结果不显示 。5、调试结果实验调试运行通过后,LED无显示。输入两个两位数,每按一位,在LED低位上显示出相应数值,之前输入的数字则往左移动一位。所输入的数,前两位作为第一个数,后两位作为第二个数,再输入加减乘除,调用相
29、应子程序,计算结果并且显示出来。六、参考文献1、钱晓捷主编:微机原理与接口技术,第4版,机械工业出版社,2008年出版2、沈美明等编著:80X86汇编语言程序设计,清华大学出版社,2001年出版。3、杨素行等编著:微型计算机系统原理及应用,第2版,清华大学出版社,2004年出版。4、许立梓等编著:微型计算机原理及应用,北京机械工业出版,2003年出版5、白彩英主编:微型计算机常用芯片手册,上海科学技术出版社,1984年出版6、胡汉才主编:单片机原理及其接口技术,清华大学出版社,2002年出版7、冯博琴主编:微机原理与接口技术,清华大学出版社,2007年出版8、戴梅萼主编:微型计算机技术及应用,
30、清华大学出版社,2007年出版9、何小海、严华编著:微机原理与接口技术,科学出版社,2006年出版10、 WWW.UT365.COM设计总结:本次课程设计实现了一个简易的计算器,用到了8279A、LED发光二极管、小键盘、74LS240译码器和74LS138译码器等芯片,通过本次课程设计,使我对这些芯片特性及用法有了进一步的了解。通过本次设计,不仅锻炼了我查找信息、分析问题的能力以及知识的应用能力,而且使我感触最深的就是处理问题不要急于求成,要不断地对问题进行思考。只有牢固、熟练的掌握了基础知识,才能够对问题的解决有个准确的把握,找到解决问题的切入点,攻克难点,与此同时,在课程设计中,我们要有严谨的态度,不要畏缩。在设计过程中,我们遇到很多通过翻阅资料及网上查找都解决不了的问题,通过王老师的指导,给我们设计思路指定准确的方向。最后,经过不断完善和修改,使设计的简易计算器的功能的实现更加完善,同时提高我们对知识的灵活运用的能力。指导教师评语:课程设计成绩: 指导教师签名: 年 月 日