河北科技大学课程设计报告学生姓名:学号:专业班级: 电子信息科学与工程课程名称:微型计算机原理及应用学年学期: 2 01 1 —2012 学年第1 学期指导教师:20 0 1 1年 1 2月课程设计成绩评定表目录一、课设题目及目的………………………………….4二、设计任务………………………………………….4三、总框图及设计流程 (4)四、ﻩ源程序清单 (6)五、ﻩ调试结果及显示 (19)六、ﻩ个人贡献………………………………………….19七、课程设计总结及体会 (21)一、课设题目及目的实习题目:数字时钟程序实习目的:通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。
二、课设任务本课题为利用汇编语言设置时钟程序,其显示效果为:截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。
再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。
除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx 月xx日。
'*DB '***********PRESS ESCBUTTON TO EXIT**************',0AH,0DH,'$'TN DB'PLEASE INPUT THE NEW TIME(HH:MM:SS):',0DH,0AH,'$'TMDB'PLEASE INPUT THE ALARM TIME (HH:MM:SS):',0DH,0AH,'$'MUSICMESS DB'PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW)',0DH,0AH,'$'MESS2DB'TIME IS:',0AH,0DH,'$'MESS3DB 'TODAY IS:',0AH,0DH,'$'DBUFFER1DB20DUP('')T_BUFFD B 40 ;在数据段开一段时间显示缓冲区DB ?DB 40DUP(?)HOR DB?MIN DB?SEC DB?TEMPHOR DB ?TEMPMIN DB?TEMPSEC DB?MUSIC DW 800;存放音乐的频率数DATA ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDSCODESEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART:CALL CLEAR ;调用清屏子程序DISPLAY:;时间显示部分MOV AX,DATAMOVDS,AXMOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BXMOV AH,2CH;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,CL,DH中INT 21H;判断时间是否相等SUB DH,1;秒数+1修正CALL CHECK;.........................................................................MOV AL,CH;小时数设定MOV AH,0CALLBCTD;调用进制转换子程序二进制BCD码子程序PUSH AXAND AL,0F0H;选取AL高四位MOV CL,4 ;设置右循环的次数ROR AL,CL;右循环OR AL,30H ;加30H得到ACSII码MOV[BX],AL;将得到的结果送到T_BUFF缓冲区INC BX;BX自加1,指针指向下一个缓冲区的下一个地址POP AXAND AL,0FH;选取低四位ORAL,30HMOV [BX],AL;将转换后的低四位值送入缓冲区的下一个地址INCBX ;........................................................................MOV AL,':';显示分隔符号MOV [BX],ALINCBX;........................................................................MOVAH,2CH;取时间INT21H ;.......................................................................MOV AL,CL;分钟数设定MOV AH,0CALLBCTD;调用进制转换子程序二进制BCD码子程序PUSH AXAND AL,0F0H;选取AL高四位MOV CL,4;设定循环次数ROL AL,CL;循环左移4次ORAL,30H;加30H得到ACSII码MOV[BX],AL;将得到的结果送到T_BUFF缓冲区INC BX;BX自加1,指针指向下一个缓冲区的下一个地址POPAXAND AL,0FH;选取低四位OR AL,30HMOV[BX],AL;将转换后的低四位值送入缓冲区的下一个地址INC BX ;.....................................................................MOV AL,':';显示分隔符号MOV[BX],ALINC BX;.....................................................................MOV AH,2CH;秒设定MOV AL,DHMOV AH,0CALLBCTD;调用进制转换子程序二进制BCD码子程序PUSH AXAND AL,0F0H;选取AL高四位MOV CL,4ROLAL,CLOR AL,30H;加30H得到ACSII码MOV[BX],AL;将得到的结果送到T_BUFF缓冲区INC BXPOP AXAND AL,0FH;选取低四位OR AL,30HMOV [BX],AL;将转换后的低四位值送入缓冲区的下一个地址INC BX ;..........................................................MOV AL,'$';将字符串的结束位送至显示缓冲区的最后一位MOV [BX],AL ;..........................................................CALL DATEPUSH BX ;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX MOV AH,2;0~1用于此程序最下边的在下面的两个置光标位置MOV BH,0MOVDH,17;行MOVDL,41;列INT10HPOP BXLEA DX,T_BUFF;送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9MOV AH,9INT 21H;至此当前时间的显示功能结束!PUSH BX ;置光标位置MOV AH,2MOVBH,0MOVDH,16MOVDL,41INT 10H ;日期POP BXLEA DX,DBUFFER1MOV AH,9INT 21HPUSH BX ;置光标位置MOVAH,2MOV BH,0MOV DL,21INT10HPOP BXLEA DX,MESS3MOV AH,9INT 21H;显示MESS3PUSH BX ;置光标位置MOV AH,2MOV BH,0MOV DH,0MOV DL,0INT 10HPOPBXLEA DX,MESS1MOV AH,9INT 21H;显示MESS1PUSH BX ;置光标位置MOV AH,2MOV BH,0MOV DH,17MOV DL,21INT 10HPOP BXLEADX,MESS2MOVAH,9INT 21H ;显示MESS2 ;.............................................CALLDELAY1MOVAH,1;调用键盘I/O中断功能号1,获取键值到ALINT 16HCMP AL,'M'JE EDITMUSICCMP AL,'M'JE EDITMUSICCMP AL,'C' ;是C键,转移闹钟时间修改程序JE EDITTIMECMP AL,'C';是C键,转移闹钟时间修改程序JEEDITTIMECMP AL,'S' ;是S键,转移时间修改程序JE CORCMP AL,'S';是S键,转移时间修改程序JE CORCMP AL,1BHJZQUIT;是ESC键,退出程序JMP DISPLAYQUIT:MOV AH,4CHINT21HRETCOR: CALL SETTIME;设置时间;..........................................EDITMUSICPROCPUSH AX;入栈保护数据PUSH BXPUSHCXPUSHDXPUSHFMOVDX,OFFSET MUSICMESS ;显示修改音乐的种类提示MOV AH,09HINT 21HMOV DX,OFFSETT_BUFF;数据缓冲区的数据输入MOVAH,0AHINT 21HAND DX,0HLEA BX,T_BUFFINC BXINC BXINC BXMOVAL,[BX]CMP AL,'1'JE M800TOCMP AL,'2'JEM1600TOCMP AL,'3'JE M3200TOM800TO:MOV MUSIC,800JMP TM1600TO:MOV MUSIC,1600JMPTM3200TO:MOV MUSIC,3200T:POPF;出栈恢复数据POPDXPOP CXPOP BXPOP AXJMPSTARTRET;返回DOSEDITMUSICENDP;结束BCTD PROC NEAR ;二进制BCD码子程序;AX输入参数;AX输出参数,存放调整过的BCD码MOV DX,AXMOV AX,0MOV CX,16 ;设置循环次数BCTD1:CLC ;清进位标志CRCL DX,1 ;通过进位的循环左移ADC AL,AL ;带进位加法DAA ;加法的十进制调整XCHG AL,AH ;交换高,低8位ADC AL,ALDAAXCHG AL,AHLOOP BCTD1 ;循环次数保存在CX里RETBCTD ENDP ;.....................................EDITTIME PROC ;时间修改程序PUSH AX;入栈保护数据PUSH BXPUSHCXPUSH DXPUSHFMOV DX,OFFSETTM ;显示修改时间的格式提示MOVAH,09HINT 21HMOVDX,OFFSETT_BUFF ;数据缓冲区的数据输入MOV AH,0AHINT21HAND DX,0HLEA BX, T_BUFFINC BXINCBXINC BXMOVDH,[BX]SUB DH,30HINC BXMOV DL,[BX]SUBDL,30HMOVCL,10MOVAL,DHMUL CLADD AL,DLMOVCH,ALMOV HOR,ALMOV TEMPHOR,ALINC BXINCBXMOV DH,[BX]SUB DH,30HINCBXMOVDL,[BX]SUB DL,30HMOV CL,10MOV AL,DHMULCLADDAL,DLMOV CL,ALMOV MIN,ALMOV TEMPMIN,ALINC BXINC BXMOV DH,[BX]SUB DH,30HINCBXMOVDL,[BX]SUB DL,30HMOVCL,10MOV AL,DHMUL CLADD AL,DLMOVDH,ALMOV TEMPSEC,AL POPF;出栈恢复数据POP DXPOPCXPOP BXPOP AXJMP STARTRETEDITTIME ENDP ;...................................... CLEAR PROC NEARPUSH AX;入栈保护现场PUSHBXPUSHCXPUSH DXMOVAX,0600H;AH=06(滚动)AL=00(全屏空白)MOV BH,1FH;设置背景颜色(1蓝色)和前景颜色(F白色)SUB CX,CXMOV DX,5F5FHINT10HPOPDX;出栈恢复现场POP CXPOP BXPOP AXRETCLEARENDP;....................DATE PROCNEARMOV AH,2AH;取日期CX:DH:DL=年:月:日AL=星期INT21HMOV SI,0MOV AX,CXMOV BX,100DIVBLMOVBL,AHCALL BCDASC1;日期数值转换成相应的ASCII码字符MOVAL,BLCALL BCDASC1INC SIMOV AL,DHCALL BCDASC1INCSIMOV AL,DLCALL BCDASC1MOV AL,'$'MOV DBUFFER1[SI],ALRETDATE ENDP;..................BCDASC1PROC NEARPUSH BXCBWMOVBL,10DIV BLADD AL,'0'MOV DBUFFER1[SI],ALINC SIADDAH,'0'MOV DBUFFER1[SI],AHINC SIPOP BXRETBCDASC1ENDP ;........................................SETTIME PROC;时间修改子程序CALL INPUT;调用键盘输入子程序输入数据MOV CH,HORMOVCL,MINMOV DH,SECAND DL,0HMOV AH,2DHINT21HJMP STARTRETSETTIMEENDP;........................................DELAY1PROC;精确延迟时间子程序MOV DX,04FFH;循环次数UP:XOR CX,CXA:NOPLOOP ADEC DXJNZ UPRETDELAY1ENDP;.......................................INPUT PROC;输入子程序PUSHAX;入栈保护数据PUSH BXPUSH CXPUSHDXPUSHFMOV DX,OFFSETTN;显示修改时间的格式提示MOV AH,09HINT 21HMOV DX,OFFSET T_BUFF;数据缓冲区的数据输入MOVAH,0AHINT21HAND DX,0HLEA BX,T_BUFFINC BXINCBXMOV DH,[BX] SUB DH,30HINC BXMOV DL,[BX] SUB DL,30HMOV CL,10MOV AL,DHMUL CLADD AL,DL MOV CH,AL MOVHOR,AL INC BXINCBXMOV DH,[BX] SUB DH,30HINC BXMOV DL,[BX]SUB DL,30HMOV CL,10MOVAL,DHMULCLADDAL,DLMOV CL,ALMOVMIN,ALINC BXINC BXMOV DH,[BX]SUBDH,30H INC BXMOV DL,[BX] SUB DL,30H MOV CL,10 MOV AL,DH MULCLADDAL,DLMOVDH,ALMOV SEC,ALPOPF;出栈恢复数据POP DXPOP CXPOP BXPOP AXINPUT ENDP ;..................................................CHECKPROCPUSH AXPUSHBXCMP CH,TEMPHOR;设置定点报时JNE CF1CMPCL,TEMPMINJNE CF1CMPDH,TEMPSECJEXIANGCF1:CMPCL,0 ;设置整点报时JNE CFCMP DH,0JNE CFXIANG:CALL OPENPUSH DXPUSH CXMOV DX,12HMOV AX,34DEHMOVCX,MUSICDIV CXOUT 42H,ALMOV AL,AHOUT 42H,ALMOV AH,1INT 21HPOP CXPOP DXCALL CLOSECF:POP BXPOPAXRETCHECK ENDPOPENPROCPUSHAXIN AL,61HOR AL,03HOUT 61H,ALPOP AXOPEN ENDPCLOSE PROCPUSH AXIN AL,61HAND AL,0FCHOUT61H,ALPOP AXRETCLOSE ENDP;................CODE ENDSEND START五.调试结果及显示六.个人贡献在本次课设实现过程中,我主要负责程序校正,和一部分程序的解释,主要有以下程序: MOV AL,CH;小时数设定MOVAH,0CALLBCTD ;调用进制转换子程序二进制BCD码子程序PUSH AXANDAL,0F0H ;选取AL高四位MOV CL,4;设置右循环的次数RORAL,CL ;右循环ORAL,30H ;加30H得到ACSII码MOV [BX],AL ;将得到的结果送到T_BUFF缓冲区INC BX ;BX自加1,指针指向下一个缓冲区的下一个地址POP AXAND AL,0FH;选取低四位OR AL,30HMOV [BX],AL;将转换后的低四位值送入缓冲区的下一个地址INC BX ;........................................................................MOV AL,':';显示分隔符号MOV [BX],ALINCBX;........................................................................MOV AH,2CH;取时间INT 21H ;.......................................................................MOVAL,CL;分钟数设定MOV AH,0CALL BCTD;调用进制转换子程序二进制BCD码子程序PUSHAXAND AL,0F0H;选取AL高四位MOV CL,4;设定循环次数ROLAL,CL;循环左移4次ORAL,30H;加30H得到ACSII码MOV [BX],AL ;将得到的结果送到T_BUFF缓冲区INC BX;BX自加1,指针指向下一个缓冲区的下一个地址POP AXAND AL,0FH;选取低四位ORAL,30HMOV [BX],AL;将转换后的低四位值送入缓冲区的下一个地址INC BX ;.....................................................................MOVAL,':';显示分隔符号MOV[BX],ALINC BX ;.....................................................................MOVAH,2CH ;秒设定INT21HMOVAL,DHMOV AH,0CALL BCTD;调用进制转换子程序二进制BCD码子程序PUSH AXAND AL,0F0H;选取AL高四位MOV CL,4ROL AL,CLOR AL,30H;加30H得到ACSII码MOV[BX],AL;将得到的结果送到T_BUFF缓冲区INC BXPOP AXANDAL,0FH;选取低四位OR AL,30HMOV[BX],AL;将转换后的低四位值送入缓冲区的下一个地址INC BX;…………………………………CLEARPROC NEARPUSH AX ;入栈保护现场PUSH BXPUSHCXPUSH DXMOV AX,0600H;AH=06(滚动)AL=00(全屏空白)MOV BH,1FH;设置背景颜色(1蓝色)和前景颜色(F白色)SUB CX,CXMOV DX,5F5FHINT 10HPOP DX;出栈恢复现场POP CXPOP BXPOP AXRETCLEAR ENDP;………………………………BCTD PROC NEAR ;二进制BCD码子程序;AX输入参数;AX输出参数,存放调整过的BCD码MOV DX,AXMOV AX,0MOV CX,16 ;设置循环次数七.课程设计总结及体会在这次的课程设计中,我们选择的题目是电子时钟设计,在设计的过程中,我们进行了相关资料的查询。