微机原理课程设计数字时钟程序.docx
河北科技高校课程设计报告学生姓名:学号:专业班级:电子信息科学及工程课程名称:微型计算机原理及应用学年学期:2011-2012学年第1学期指导老师:20011年12月课程设计成果评定表学生姓名学号成果专业班级起止时间2011/12/262011/12/30设计题目数字时钟程序指导教师评语指导老师:书目一、课设题目及目的.4二、设计任务4三、总框图及设计流程4四、源程序清单.6五、调试结果及显示.19六、个人贡献19七、课程设计总结及体会21一、课设题目及目的实习题目:数字时钟程序实习目的:通过实习,使我们进一步弄懂所学到的课本学问,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论学问的理解,提高汇编语言应用于技术的实践操作技能,驾驭汇编语言应用系统设计、研制的方法,培育利用科技革新、开发和创新的基本实力,为毕业后从事及其相关的工作打卜肯定的基础。二、课设任务本课题为利用汇编语言设置时钟程序,其显示效果为:截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。再有,可以给它设定一个A1.ARM时间,到这个时间它就能产生信号,起到定时作用,。除此之外还能显示日期,日期分为年、月、H,其显示方式为XXNX年XX月XX日。显示时间DB*PRESSMORMTOCHANGESo1.ND!*,OAH,ODHDB,*PRESSSORSTOSETTHETIME*,OH,ODH;显示功能菜单DB'*presSESCBUTTONTOEXIT*',OAH1ODH1,S'TNDB'P1.EASEINPUTTHENEWTIME(HH:MM:SS),ODH,OAH,'$'TMDB,P1.EASEINPUTTHEA1.ARMTIME(HH:MM:SS),ODH,OAH,'MUSICMESSDB,P1.EASECHOOSETHETYPEOFMUSIC:1(FAST)2(MIDD1.E)3(S1.OW)',ODH,OAH,$'MESS2DB,TIMEIS,OAH,ODH1,$,MESS3DB,TODAYIS,OH,ODII,'$'DBUFFER1.DB20DUPC')T_BUFFDB40;在数据段开一段时间显示缓冲区DB?DB40D1.IP(?)HORDB?MINDB?SECDB?TEMI,HORDB?TEMPMINDB?TEMPSECDB?MUSICDW800;存放音乐的频率数DTENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:CA1.1.C1.EAR;调用清屏子程序DISP1.AY:;时间显示部分MOVX,DTMOVDS,AXMOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BXMOVAH,2CH;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,C1.,DH中推断时间是否相等SUBDH,1+1修正CA1.1.CHECKMOVA1.,CHMOVAH,0CA1.1.BCTD制BCD码子程序PUSHXANDA1.,OFOHMOVC1.,4RORA1.,C1.OR1.,30»MOVBX,A1.区INCBX冲区的下一个地址POPAXANDA1.,OFH;秒数;小时数设定;调用进制转换子程序二进;选取A1.高四位;设置右循环的次数;右循环;加3011得到ACSH码;将得到的结果送到T_BUFF缓冲;BX自加1,指针指向下一个缓;选取低四位ORA1.,30HVoVBX,A1.:将转换后的低四位值送入缓冲区的下一个地址INCBXVOVA1.显示分隔符号MOVBX,A1.INCBXMOVAH,2CH;取时间INT2IHMoVA1.C1.;分钟数设定MOVH,0CA1.1.Ben);调用进制转换子程序二进制BCD码子程序PUSHXANDA1.OFOH;选取A1.高四位MOVC1.,4;设定循环次数RO1.A1.,C1.;循环左移4次OR1.,30H;力口30H得到ACSII码MOVBX,A1.;将得到的结果送到T_BUFF缓冲区INCBXiBX自加1,指针指向下一个缓冲区的下一个地址POPAXND1.,OFH;选取低四位ORA1.,30HMOVBX,A1.;将转换后的低四位值送入缓冲区的下一个地INCBXMOVA1.,:,;显示分隔符号MOVBX,A1.INCBXMOVH,2CH;秒设定INT21HMOV1.,DHMOVH,0CA1.1.BCTD;调用进制转换子程序二进制BCD码子程序PUSHAXNDA1.,OFOH:选取1.高四位MOVC1.,4RO1.1.,C1.ORA1.,30H;加30H得到ACSI1.码MOVBX,A1.;将得到的结果送到T_BUFF缓冲区INCBXPOPAXANr)A1.,OFH;选取低四位ORA1.,30HMOVBX,A1.;将转换后的低四位值送入缓冲区的下一个地INCBXMOV1.,$,;将字符串的结束位送至显示缓冲区的地终一位MOVBX,1.CA1.1.DATEPUSHBX;置光标位置,H=2,BH=O,DH跟D1.分别为行号及列号,并入栈爱护BXMOVAH,2:0'1.用于此程序最下边的在下面的两个置光标位置MOVBH,0MOVDH,17;行MOVD1.,41;列INTIOHPOPBX1.EADX,T_BUFF;送T.BUFF偏移地址到DX,并调用DOS显本功能,功能号为9MOVAH,9INT21H:至此当前时间的显示功能结束!PUSHBX;置光标位置MOVH,2MOVBH,0MOVDH,16MOVD1.,41INTIOH;日期POPBX1.EDX,DBuFFER1.MOVAH,9INT21HPUSHBX;置光标位置MOVH,2MOVBH,0MOVDH,16MOV)1.,21INTIOHPOPBX1.EADX,MESS3MOVH,9INT21H;显示MESS3PUSHBX;置光标位置MOVH,2MOVBH,0MOVDU,0MOVD1.,0INTIOHPOPBX1.EADX,MESS1.MOVAU,9INT21H;显示MESSIPUSHBX;置光标位置MOVH,2MOVBH,0MOVDH,17MOVD1.,21INTIOHPoPBX1.EDX,MESS2MOVAH,9INT21H:显示MESS2CA1.1.DE1.AY1.MOVH,1;调用键盘I/O中断功能号1,获得键值到A1.INT16HCMP1.,M,JEEditmiisicCMP1.,*M,JEEDITMUSICCMPA1.,'C':是C键,转移闹钟时间修改程序JEEDITTIMECMPA1.,'C'是:键,转移闹钟时间修改程序JEedittimeCMPA1.,'S'是S键,转移时间修改程序JECORCMPA1.,'S'是S键,转移时间修改程序JECORCMP1.,IBHJZQUIT;是ESC键,退出程序JMPDISP1.AYQUIT:MOVH,4CHINT21HRETCOR:CA1.1.SETTIME;设置时间EDITMUSICPROCPUSHAX;入栈爱护数据PUSHBXPUSHCXPUSHDXPUSHFMOVDXfOFFSETMUSICMISS;显示修改音乐的种类提示MOVAH,09HINT21HVOVDX,OFFSETT_BUFF;数据缓冲区的数据输入MOVAH,OAHINT21HANDDX,OH1.EABX,T_BUFFINCBXINCBXINCBXMOVA1.,BXCMP1.1,JEM800T0CMPA1.,'2,JEM1600TOCMPA1.,'3,JEM3200TOM800T0:M0VMUSIC,800JMPTM1600T0:M0VMUSIC,1600JMPTM3200T0:M0VMUSIC,3200T:POPF;出栈复原数据POPDXPOPCXPOPBXPOPXJMPSTARTRET;返回DOSEDITMUSICEW)P;结束BCTDPROCNEAR;二进制BCD码子程序;AX输入参数;AX输出参数,存放调整过的BCD码MOVDX,AXMOVAX,0MOVCX,16;设置循环次数IJCTD1.:C1.C;清进位标记CRC1.DX,1;通过进位的循环左移ADCA1.A1.;带进位加法DAA;加法的十进制调整XCHGA1.,AH;交换高,低8位ADC1.,1.DAXCHG1.,AH1.OOPBCTD1.;循环次数保存在CX里RETBCTDENDPEDIKIMEPROC;时间修改程序PUSHAX;入栈爱护数据PUSHBXPUSHCXPUSHDXPUSHFMOVI)X,OFFSETTM;显示修改时间的格式提示MOVA1.1.,09HINT2IHMOVDX,OFFSETT_BUFF;数据缓冲区的数据输入MOVH,OHINT21HANDDX,0111.EABX,T_BUFFINCBXINCBXINCBXMOVDH,BXSUBDH,30HINCBXMOVD1.,BXSUBD1.,30HMOVC1.,IOMOVA1.,DHMU1.C1.DD1.,D1.MOVCH,1.MOVHOR1A1.MOVTEMPHOR,1.INCBXINCBXMOVDH,BXSUBDH,30HINCBXMOVD1.,BXSUBD1.,30HMOVC1.,10MOVA1.,DHMU1.C1.ADDA1.D1.MOVC1.,1.MOVMIN1A1.MOVTEMPMIN,1.INCBXINCBXMOVD1.1.,BXSUBI)H,30HINCBXMOVD1.,BXSUBD1.,30HMOVC1.,IOMOVA1.,DHMU1.C1.ADD1.,D1.MOVDH,1.MOVTEM