《微机课程设计报告.doc》由会员分享,可在线阅读,更多相关《微机课程设计报告.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课 程 设 计 课程名称 微机原理及应用课程设计 题目名称_ _算法部分_学生学院_ _自动化学院_ _专业班级_ _06级自动化1班_ _学 号_ _ _学生姓名_ _谭升达_指导教师_ _李传芳 黄英_ _2008年 12 月 23 日广东工业大学课程设计任务书题目名称计算器学生学院自动化学院专业班级06级自动化1班姓 名谭升达学 号一、课程设计的目的1、巩固和加深对微机原理及应用课程内容的认识和理解,提高应用水平;2、掌握汇编语言程序的编程方法;3、熟悉键盘控制和七段数码管的使用。 二、课程设计的要求与数据课程设计内容上机编程:1、在显示器上显示任意四位十六进制数;2、将8个键按实验室要
2、求定义键值,按任意键在显示器上显示对应键值,要求显示值能左移; 3、实现:a)定义键盘按键,5个数字键1、3、5、6、7,3个功能键:减号-,除号,等号=;b)可进行三位10进制减法运算;c)可进行两位8进制除法运算。三、课程设计应完成的工作课程设计完成后,交课程设计报告一份(内容包括:系统设计说明、系统原理图、程序设计流程图、源程序),按规定格式书写。四、课程设计进程安排序号设计各阶段内容地点起止日期1搜集、整理和研究资料图书馆22日2编制调试程序,实现要求的功能实2-20623日3书写课程设计报告书宿舍2325日五、应收集的资料及主要参考文献1 许立倖等编.微型计算机原理及应用.北京:机械
3、工业出版社,20032 许立倖等编.微型计算机原理及应用习题解答、实验指导及课程设计.北京:机械工业出版社,2004发出任务书日期: 年 月 日 指导教师签名:计划完成日期: 年 月 日 基层教学单位责任人签章:主管院长签章:目 录1 设计任务目的及要求41.1 设计目的41.2 设计说明42 各模块程序42.1 LED显示程序42.2 按键输入程序62.3 计算器程序123 结论与心得体会22参考文献221 设计任务目的及要求1.1 设计目的设计一个具有三位10进制减法运算和两位8进制除法运算的计算器。(详见报告中的附页)1.2 设计说明使用24的键盘按键操作,其中包括5个数字键1、3、5、
4、6、7,3个功能键:减号-,除号,等号=。2 各模块程序2.1 LED显示程序;*;把存储器单元中的0AH,02H,0FH,09H从四位七段LED;同时显示出来,要求做成循环程序,用XLAT来译码;*DATA SEGMENTORG 0000HLED4DB0AH,02H,0FH,09H;显示缓冲区ORG 0010HLED7DB3FH,06H,5BH,4FH;编码DB66H,6DH,7DH,07HDB7FH,6FH,77H,7CHDB39H,5EH,79H,71HDATA ENDSSTACK SEGMENT DW64DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:C
5、ODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,LED4LEA DI,LED7MOV AL,81H;初始化8255OUT 63H,ALMAIN:CALL DISPCALL DELAYJMP MAIN;.;显示程序DISP:PUSH AXPUSH BXPUSH CXPUSH DXMOV CX,4;4位显示MOV BX,OFFSET LED4;显示码表首地址MOV AX,0000H ;数码偏移初始化MOV DL,0DDH ;位码初始化D1:PUSH AXXLAT;取数码偏移量,存ALPUSH BXM
6、OV BX,OFFSET LED7XLAT;取对应的数码,存ALPOP BXOUT 60H,AL;编码输出到A口MOV AL,DLOUT 61H,AL ;位码输出到B口POP AXINC AX;数据偏移量+1ROL DL,1;位码右移CALL DELAYLOOP D1POP DXPOP CXPOP BXPOP AXRET ;.;延时程序DELAY:PUSH AXPUSH CXMOV AX,0002HD_:MOV CX,0300HLOOP $DEC AXJNZ D_POP CXPOP AXRET;. INT 03HCODE ENDS END START2.2 按键输入程序;*;编写程序,实现以下
7、键盘功能,并能左移显示;5 A 7 F;B 3 C 0;*DATA SEGMENT ;除编码表外,其他数据遵循高位在前,低位在后的原则ORG 0000HLED4DB4 DUP (0);显示缓冲区ORG 0010HLED7DB3FH,06H,5BH,4FH;编码DB66H,6DH,7DH,07HDB7FH,6FH,77H,7CHDB39H,5EH,79H,71HORG 0020HDATA1DB4 DUP (0);数据1DATA ENDSSTACK SEGMENT DW64 DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKS
8、TART: MOV AX,DATA MOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,LED4 LEA DI,LED7 MOV AL,81H;初始化8255 OUT 63H,AL MOV BX,0000HMAIN:CALL SCANCALL DISPJMP MAIN;.;显示程序DISP:PUSH AXPUSH BXPUSH CXPUSH DXMOV CX,4;4位显示MOV BX,OFFSET LED4;显示码表首地址MOV AX,0000H ;数码偏移初始化MOV DL,0DDH ;位码初始化D1:PUSH AXXLAT;取数码偏移量,存ALPUSH BXMOV B
9、X,OFFSET LED7XLAT;取对应的数码,存ALPOP BXOUT 60H,AL;编码输出到A口MOV AL,DLOUT 61H,AL ;位码输出到B口POP AXINC AX;数据偏移量+1ROL DL,1;位码右移CALL DELAYLOOP D1POP DXPOP CXPOP BXPOP AXRET ;.;键盘扫描程序SCAN:MOV AL,00HOUT 61H,ALINAL,62HAND AL,03HCMP AL,03HJNZKEYABCRET;无按键返回;. ;去键盘抖动KEYABC: CALL DELAYINAL,62HAND AL,03HCMP AL,03HJNZKEY_
10、ARET;无按键返回 ;键盘扫描识别KEY_A:MOV AL,0FDHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_6CALL KEYAJMP STTKKEY_6:TEST AL,02HJNZKEY_BCALL KEY6JMP STTKKEY_B:MOV AL,0FBHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_7CALL KEYBJMP STTKKEY_7:TEST AL,02HJNZ KEY_CCALL KEY7JMP STTKKEY_C:MOV AL,0F7HOUT 61H,ALINAL,62HTEST AL,01HJNZKEY_
11、5CALL KEYCJMP STTKKEY_5:TEST AL,02HJNZKEY_1CALL KEY5JMP STTKKEY_1:MOV AL,0EFHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_3CALL KEY1JMP STTKKEY_3:TEST AL,02HJNZ KEY_31CALL KEY3KEY_31:JMP STTK;.;放键释放测试程序STTK:CALL DISP;延时MOV AL,00HOUT 61H,ALINAL,62HANDAL,03HCMP AL,03HJNZ STTK;有按键,等待按键释放RET;在SCAN返回MAIN;.;按键子程序
12、KEY1:;按键1号处理子程序MOV DL,0;为SAVE_1提供数据CALL SAVE_1;将DL数据压入DATA1CALL MOVE;将DATA1数据移入显示缓冲区CALL DISP;即时显示当前操作数据RET;(下同);.KEY3:;按键3号处理子程序MOV DL,0FHCALL SAVE_1CALL MOVECALL DISPRET;.KEY5:;按键5号处理子程序MOV DL,7CALL SAVE_1CALL MOVECALL DISPRET;.KEY6:;按键6号处理子程序MOV DL,5CALL SAVE_1CALL MOVECALL DISPRET;.KEY7:;按键7号处理子
13、程序MOV DL,0AHCALL SAVE_1CALL MOVECALL DISPRET;.KEYA:;按键-号处理子程序MOV DL,0BHCALL SAVE_1CALL MOVECALL DISPRET;.KEYB:;按键/号处理子程序MOV DL,03HCALL SAVE_1CALL MOVECALL DISPRET;.KEYC:;按键=号处理子程序MOV DL,0CHCALL SAVE_1CALL MOVECALL DISPRET;.;移位保存数据,将DL压入DATA1低位SAVE_1:PUSH AXPUSH BXMOV BX,OFFSET DATA1MOV AL,BX+1MOV BX
14、,ALMOV AL,BX+2MOV BX+1,ALMOV AL,BX+3MOV BX+2,ALMOV AL,DL;DL数据压入低位MOV BX+3,ALPOP BXPOP AXRET;.;将DATA1数据转移到显示缓冲区MOVE:PUSH AXPUSH SIPUSH DIMOV CX,4;数据长度MOV SI,OFFSET DATA1;定位DATA1MOV DI,OFFSET LED4;定位显示缓冲区M_:MOV AL,SIMOV DI,ALINC SIINC DILOOP M_POP DIPOP SIPOP AXRET;.;延时程序DELAY:PUSH AXPUSH CXMOV AX,000
15、2HD_:MOV CX,0300HLOOP $DEC AXJNZ D_POP CXPOP AXRET;. INT 03HCODE ENDS END START2.3 计算器程序;*;编写计算器,实现三位10进制减法运算,两位8进制除法运算;5个数字键,3个功能键(=号具有清零功能),键盘定义如下:;6 7 5 3;A B C 1;*DATA SEGMENT ;除编码表外,其他数据遵循高位在前,低位在后的原则ORG 0000HLED4DB4 DUP (0);显示缓冲区ORG 0010HLED7DB3FH,06H,5BH,4FH;编码DB66H,6DH,7DH,07HDB7FH,6FH,77H,7
16、CHDB39H,5EH,79H,71HORG 0020HDATA1DB4 DUP (0);数据1:当前操作值ORG 0028HDATA2DB4 DUP (0);数据2:保存值DATA ENDSSTACK SEGMENT DW64 DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX LEA SI,LED4 LEA DI,LED7 MOV AL,81H;初始化8255 OUT 63H,AL MOV BX,0000HMAIN:CALL SCANCALL DISPJMP MA
17、IN;.;显示程序DISP:PUSH AXPUSH BXPUSH CXPUSH DXMOV CX,4;4位显示MOV BX,OFFSET LED4;显示码表首地址MOV AX,0000H ;数码偏移初始化MOV DL,0DDH ;位码初始化D1:PUSH AXXLAT;取数码偏移量,存ALPUSH BXMOV BX,OFFSET LED7XLAT;取对应的数码,存ALPOP BXOUT 60H,AL;编码输出到A口MOV AL,DLOUT 61H,AL ;位码输出到B口POP AXINC AX;数据偏移量+1ROL DL,1;位码右移CALL DELAYLOOP D1POP DXPOP CXP
18、OP BXPOP AXRET ;.;键盘扫描程序SCAN:MOV AL,00HOUT 61H,ALINAL,62HAND AL,03HCMP AL,03HJNZKEYABCRET;无按键返回;. ;去键盘抖动KEYABC: CALL DELAYINAL,62HAND AL,03HCMP AL,03HJNZKEY_ARET;无按键返回 ;键盘扫描识别KEY_A:MOV AL,0FDHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_6CALL KEYAJMP STTKKEY_6:TEST AL,02HJNZKEY_BCALL KEY6JMP STTKKEY_B:MOV A
19、L,0FBHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_7CALL KEYBJMP STTKKEY_7:TEST AL,02HJNZ KEY_CCALL KEY7JMP STTKKEY_C:MOV AL,0F7HOUT 61H,ALINAL,62HTEST AL,01HJNZKEY_5CALL KEYCJMP STTKKEY_5:TEST AL,02HJNZKEY_1CALL KEY5JMP STTKKEY_1:MOV AL,0EFHOUT 61H,ALINAL,62HTEST AL,01HJNZ KEY_3CALL KEY1JMP STTKKEY_3:TEST
20、AL,02HJNZ KEY_31CALL KEY3KEY_31:JMP STTK;.;放键释放测试程序STTK:CALL DISP;延时MOV AL,00HOUT 61H,ALINAL,62HANDAL,03HCMP AL,03HJNZ STTK;有按键,等待按键释放RET;在SCAN返回MAIN;.;按键子程序KEY1:;按键1号处理子程序CMP BH,00HJZKEY1_;没接触过符号键,不清零CALL CLEAR;已按过符号键,清零KEY1_:MOV DL,1;为SAVE_1提供数据CALL SAVE_1;将DL数据压入DATA1CALL MOVE;将DATA1数据移入显示缓冲区CALL
21、 DISP;即时显示当前操作数据RET;(下同);.KEY3:;按键3号处理子程序CMP BH,00HJZKEY3_CALL CLEARKEY3_:MOV DL,3CALL SAVE_1CALL MOVECALL DISPRET;.KEY5:;按键5号处理子程序CMP BH,00HJZKEY5_CALL CLEARKEY5_:MOV DL,5CALL SAVE_1CALL MOVECALL DISPRET;.KEY6:;按键6号处理子程序CMP BH,00HJZKEY6_CALL CLEARKEY6_:MOV DL,6CALL SAVE_1CALL MOVECALL DISPRET;.KEY7
22、:;按键7号处理子程序CMP BH,00HJZKEY7_CALL CLEARKEY7_:MOV DL,7CALL SAVE_1CALL MOVECALL DISPRET;.KEYA:;按键-号处理子程序CMP BH,00HJNZ KEYA_;有标志位不保存(多符号输入情况)CALL SAVE_2;保存输入的数据KEYA_:MOV BX,0101H;设置0101标志位RET;.KEYB:;按键/号处理子程序CMP BH,00HJNZ KEYB_CALL SAVE_2KEYB_:MOV BX,0102HRET;.KEYC:;按键=号处理子程序 ;添加=号清零功能CMP BL,00HJNZ KEYC
23、_1CALL CLEARCALL MOVECALL DISPKEYC_1:MOV BH,01H;置标志位,待数据输入后清零DATA1CMP BL,01H;是-号?JZK1CMP BL,02H;是/号?JZK2KEYC_END:RETK1:CALL SUB10;进行十进制减法运算JMP KEYC_ENDK2:CALL DIV8;进行八进制除法运算JMP KEYC_END;.;DATA1数据清零子程序CLEAR:PUSH SIMOV SI,OFFSET DATA1MOV CX,4CLEAR_:MOV AL,00HMOV SI,ALINC SILOOP CLEAR_MOV BH,00HPOP SIR
24、ET;.;移位保存数据,将DL压入DATA1低位SAVE_1:PUSH AXPUSH BXMOV BX,OFFSET DATA1MOV AL,BX+1MOV BX,ALMOV AL,BX+2MOV BX+1,ALMOV AL,BX+3MOV BX+2,ALMOV AL,DL;DL数据压入低位MOV BX+3,ALPOP BXPOP AXRET;.;将DATA1数据存至DATA2SAVE_2:PUSH AXPUSH SIPUSH DIMOV CX,4;数据长度MOV SI,OFFSET DATA1;定位DATA1MOV DI,OFFSET DATA2;定位DATA2S_:MOV AL,SIMOV
25、 DI,ALINC SIINC DILOOP S_POP DIPOP SIPOP AXRET;.;将DATA1数据转移到显示缓冲区MOVE:PUSH AXPUSH SIPUSH DIMOV CX,4;数据长度MOV SI,OFFSET DATA1;定位DATA1MOV DI,OFFSET LED4;定位显示缓冲区M_:MOV AL,SIMOV DI,ALINC SIINC DILOOP M_POP DIPOP SIPOP AXRET;.;延时程序DELAY:PUSH AXPUSH CXMOV AX,0002HD_:MOV CX,0300HLOOP $DEC AXJNZ D_POP CXPOP
26、AXRET;.;三位10进制减法子程序SUB10: MOV SI,OFFSET DATA2 MOV DI,OFFSET DATA1 CLC MOV CX,4SUB10_: MOV AL,SI+3 SBB AL,DI+3 AAS MOV DI+3,ALDEC SIDEC DILOOP SUB10_CALL MOVE;DATA1数据传到LED4CALL DISP;显示计算结果CALL DELAYMOV BL,00H;运算完毕,清符号位BLRET ;.;两位8进制除法子程序DIV8: MOV SI,OFFSET DATA2 MOV DI,OFFSET DATA1 CLC ;调整DATA2,8进制转1
27、6进制,存在DXMOV DL,SI+3MOV DH,00HMOV BX,8MOV AL,SI+2AND AX,000FHPUSH DXMUL BXPOPDXADD DX,AXMOV BX,64MOV AL,SI+1AND AX,000FHPUSH DXMUL BXPOP DXADD DX,AXMOV BX,512MOV AL,SIAND AX,000FHPUSH DXMUL BXPOP DXADD DX,AXPUSH DX ;调整DATA1,8进制转16进制,存CXMOV CL,DI+3MOV CH,00HMOV AL,DI+2AND AX,000FHMOV BX,8MUL BXADD CX,
28、AXMOV AL,DI+1AND AX,000FHMOV BX,64MUL BXADD CX,AXMOV AL,DIAND AX,000FHMOV BX,512MUL BXADD CX,AX ;以16进制的形式相除POP AX;DATA2的16进制形式转到AXMOV DX,0000HMOV CH,00HDIV CX;相除 ;调整结果为8进制,将其送到DATA1MOV CX,8MOV DX,0000HDIVCXMOV DI+3,DLMOV DX,0000HDIV CXMOV DI+2,DLMOV DX,0000HDIV CXMOV DI+1,DLMOV DX,0000HDIV CXMOV DI,
29、DLCALL MOVE;DATA1传到显示缓冲区CALL DISP;显示计算结果CALL DELAYMOV BL,00H;运算完毕,清除状态位BLRET;. INT 03HCODE ENDS END START3 结论与心得体会这次为期一周的实训让我收获很大。第一天时间主要用来搜集资料,查阅书籍,构思程序结构,编写程序框架,构件程序的基本模块。然后第二天在机房结合硬件,对程序的正确性和完整性加以验证,仔细观察调试过程中出现的错误,认真思考出现错误的原因,运用单步运行、设置断点等调试方法,一步一步排错纠错。并在过程中不断总结,逐步修正,使程序得以不断完善。总的来讲,整个过程让我的收获很大。进一步建立微机系统概念,加深对系统的理解和认识,提高微机系统的应用水平。进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高了编写汇编语言程序的水平和学习了程序的调试方法。在编写程序过程中,不断地发现错误、调试程序、纠正代码,这种不断探索的学习过程,让我对汇编语言程序的编写有了更深层次的理解和体会。除此之外,还进一步熟悉了接口、熟悉了键盘控制和七段数码管及其他芯片的使用,对整个微机系统有了更全面的认识。参考文献1 许立倖等编.微型计算机原理及应用.北京:机械工业出版社,20032 许立倖等编.微型计算机原理及应用习题解答、实验指导及课程设计.北京:机械工业出版社,2004
限制150内