微机原理课程设计1微机原理与应用课程设计微机原理课程设计2目录一、设计任务1、计时秒表,具有分、秒和百分之一秒的计时功能。2、可以在屏幕中央显示计时结果,屏幕显示彩色图案和文字。3、秒表具有键控启/停功能,而且可以随时通过键盘复位,清零。二、设计原理1、HALT(启动子程序)2、DIS(宏定义——苹果显示程序)3、DISS(宏定义——字符串的输出)4、CLOUR(字体颜色设置程序)5、IOSET(设置光标位置子程序)6、GO(初始化显示子程序)7、TIME(延时子程序)8、TRAN(压缩BCD码转ASCII码程序)9、复位、停止等功能的实现三、流程图a)主程序流程图b)压缩BCD转ASCII码子程序流程图c)延时子程序流程图四、程序段五、程序调试六、程序运行结果七、心得体会微机原理课程设计3八、参考文献一、设计任务:1.计时秒表,具有分、秒和百分之一秒的计时功能,并可以在屏幕中央显示计时结果。2.屏幕显示彩色图案和文字。3.秒表具有键控启/停功能,而且可以随时通过键盘复位,清零。二、设计原理:本程序的主要设计原理是用主程序完成百分之一秒与秒之间的转换,显示计时结果,实现暂停,暂停再启动,复位,复位再启动的功能,并通过调用一些附加程序,缩减主程序的长度,提高运行效率和精度,现将用到的所有附加程序的原理及其在运行过程中所起到的作用汇总如下:1.DIS(宏定义——苹果显示程序)通过宏调用,实现苹果图案的显示。在宏定义里,设置一个形参变量,作为移动光标的位置,在下面调用宏中,给予变量X不同的实参,输出苹果图案。2.DISS(宏定义——字符串的输出)原理同上。3.CLOUR(字体颜色设置程序)通过字体颜色设置程序,实现屏显字体颜色的改变。当改变BX值时,字体颜色会改变。4.HALT(启动子程序)通过启动子程序,实现计时的开始,当从键盘输入一个字符时,判断是否等于S,如果不等,则在循环执行启动子程序中动态等待,直到输入的字符为S时,计时开始。5.IOSET(设置光标位置子程序)通过设置光标子程序,来设置显示的区域。一般整个屏幕可显示25行,80列,屏幕左上角字符位置为0行0列,右下脚字符为24行79列,对应十六进制为:左上脚为(0,0),右下脚为(18,4F)。入口信息为:(AH)=2要设置光标;(BH)=0页号;(DH,DL)=00要置光标于0行0列。DX赋值为0D27H,光标置位于屏幕中央。6.GO(初始化显示子程序)通过将在数据段定义的BUFFER数组的首址赋给BX,将待显示初值字符串00:00存入数组中的相应位置,当每次复位以后,重新调用该子程序,将程序的执行结果修正为00:00,并显示于屏幕上,从而实现了程序的初值设定和复位功能。7.TIME(延时子程序)计算机每执行一条指令,虽然很快,但是需要一些时间,因此在本程序中可以通过延时程序,让计算机去执行一些无关的程序,来达到时钟秒与百分之一秒转换时的时间延迟。每条指令执行时间的长短,是以计算机的时钟周期为基本单位的,因此不同的计算机可以通过修改延时程序数值来使其达到准确计时。8.TRAN(压缩BCD码转ASCII码程序)微机原理课程设计4计算机显示数据时使用的是数据的ASCII码,而在程序设计当中程序的计时数值是BCD码,因此,需要通过此子程序实现将BCD码转变为ASCII码,以备送屏幕显示。因为时钟计时的压缩BCD码每一个数都有8位,因此将其右移四位并加30H,将其高位数字取出,送BX存放,再将其低位数字取出,加30H,送BX存放,达到不同码制之间转换的目的。9.复位、停止等功能的实现通过对输入字符的判断和各种循环的嵌套调用实现。整体上本程序的主要设计原理是先在数据段中定义“SSTARTRRESETEENDCCONTINUE”控制字符串,并定义缓冲区。将数据段的段基址送DS,并将“SSTARTRRESETEENDCCONTINUE”显示,同时调用GO子程序,将显示结果初始化。同时设置光标,启动计时,启动延时程序,将百分之一秒加1并将其设置为压缩BCB码,当其CF不为1时,送屏幕显示,当其为1时,将其设置为0,并在秒上加1,当秒等于60时,其置0,当其小于60时,送屏幕显示。在计时过程中,如果键入R,则将其复位,并重新开始计时,当键入E时,计时暂停,如果键入C,则继续计时,如果键入R,则复位,设置为00:00,当再次键入S时,再次计时开始。三.框图(见附页)四、程序清单(附显示结果)DATSEGMENTSPACEDB2000DUP('')FU1DB'Wherethereisawill$'FU2DB'Thereisaway$'FU3DB'MadeBy:$'FU4DB'SunandFeng$'FU5DB'12/28/2008$'FU6DBINPUTSSTARTRRESETEENDCCONTINUE$;设置控制字符串BUFFERDB10DUP(?);定义缓冲区DATENDSCODSEGMENTSTARTPROCFARASSUMECS:COD,DS:DATMOVAX,DATMOVDS,AXCLOUR:;字体颜色设置MOVAX,0003HINT10HMOVAX,DATMOVDS,AXMOVES,AXMOVBP,OFFSETSPACEMOVDX,0E00HMOVCX,2000MOVBX,0004H微机原理课程设计5MOVAX,1300HINT10HMOVAH,02HMOVBH,00MOVDX,182DHINT10HMOVDL,'~'MOVAH,02HINT21HMOVAH,02HMOVBH,00MOVDX,1823HINT10HMOVDL,'~'MOVAH,02HINT21HDISMACROX;用宏显示苹果图案MOVAH,02HXORBH,BHMOVDX,XINT10HMOVDL,'*'MOVAH,02HINT21HENDMPUSHDXPUSHAXPUSHBXDIS0A28HDIS0928HDIS0829HDIS0729HDIS062AHDIS052AHDIS042BHDIS032CHDIS0B28H微机原理课程设计6DIS0A2AHDIS092CHDIS082EHDIS0730HDIS0732HDIS0834HDIS0936HDIS0A38HDIS0B39HDIS0C3AHDIS0D3BHDIS0E3CHDIS0F3CHDIS103CHDIS113BHDIS1239HDIS1337HDIS1435HDIS1533HDIS1631HDIS172FHDIS172BHDIS1629HDIS1528HDIS1627HDIS1725HDIS1721HDIS161FHDIS151DHDIS141BHDIS1319HDIS1217HDIS1115HDIS1014HDIS0F14HDIS0E14HDIS0D15HDIS0C16HDIS0B17HDIS0A18HDIS091AHDIS081CH微机原理课程设计7DIS071EHDIS0720HDIS0822HDIS0924HDIS0A26HPOPBXPOPAXPOPDXDISSMACROX,Y;用宏显示字符串MOVAH,02HXORBH,BHMOVDX,XINT10HMOVDX,OFFSETYMOVAH,09HINT21HENDMPUSHAXPUSHBXPUSHDXDISS0F1AH,FU1DISS1227H,FU2DISS1439H,FU3DISS163FH,FU4DISS1842H,FU5DISS0004H,FU6POPDXPOPBXPOPAXCALLGO;赋值程序调用LOAD:CALLIOSET;光标置屏中央程序调用CALLHALT;等待开始信号程序调用MOVDX,0微机原理课程设计8MOVCX,0;1/100秒与秒初值赋0AGAIN:CALLTIME;延时程序调用MOVAL,DL;1/100秒值加1ADDAL,1DAA;BCD码调整JCNEXT1;1/100秒等于100时清零MOVDL,AL;1/100秒值存DLJMPDISPY;1/100秒不等于100时显示NEXT1:MOVDL,0;1/100秒值回零MOVAL,DH;秒值加1ADDAL,1DAAMOVDH,AL;秒值存DHCMPAL,60H;秒值与60比较JENEXT4;秒值为60时,向分值进一MOVDH,ALJNEDISPY;秒值不为60时显示NEXT4:;秒值回零MOVDH,0MOVAL,CHADDAL,1DAAMOVCH,ALCMPCH,60HJNEDISPY;分值不为60时显示MOVCH,0;分值回零DISPY:MOVBX,OFFSETBUFFER;显示程序MOVAL,CH;分值BCD码转ASCII码CALLTRANINCBXINCBXMOVAL,DHCALLTRAN;秒值BCD码转ASCII码INCBXINCBXMOVAL,DL;1/100秒值BCD码转ASCII码CALLTRANMOV[BX],ALPUSHBXPUSHCX微机原理课程设计9PUSHDXCALLIOSETMOVDX,OFFSETBUFFER;时间显示MOVAH,09HINT21HPOPDXPOPCXPOPBXMOVAH,0BH;判断是否有键盘输入INT21HANDAL,ALJZAGAIN;无键入则转计时程序MOVAH,08H;键入控制符INT21HCMPAL,'R';判断是否为复位信号JNENEXT2;若为非复位信号则判断是否为结束信号MOVDL,0;键入为复位信号则复位后继续计时MOVDH,0JMPAGAINNEXT2:CMPAL,'E';判断是否为结束信号JNEAGAIN;若为非结束信号则计时继续NEXT3:MOVAH,08H;若为结束信号则计时暂停INT21HCMPAL,'C';判断计时是否继续JEAGAINCMPAL,'R';判断是否为复位信号JNENEXT3;若为非复位信号则继续等待键入CALLGO;若为复位信号则复位并转至开头等待CALLIOSETMOVDX,OFFSETBUFFERMOVAH,09HINT21HJMPLOADRETSTARTENDPGOPROC;赋值程序MOVBX,OFFSETBUFFERMOVAL,'0'MOV[BX],ALINCBXMOVAL,'0'MOV[BX],ALINCBXMOVAL,':'微机原理课程设计10MOV[BX],ALINCBXMOVAL,'0'MOV[BX],ALINCBXMOVAL,'0'MOV[BX],ALINCBXMOVAL,':'MOV[BX],ALINCBXMOVAL,'0'MOV[BX],ALINCBXMOVAL,'0'MOV[BX],ALINCBXMOVAL,'$'MOV[BX],ALRETGOENDPIOSETPROC;光标置屏中央程序MOVDX,0D27HMOVBH,00MOVAH,02HINT10HRETIOSETENDPHALTPROC;等待开始信号键入程序MOVAH,08HINT21HCMPAL,'S'JNEHALTRETHALTENDPTRANPROC;BCD码转ASCII码程序MOVCL,ALSHRAL,1SHRAL,1SHRAL,1SHRAL,1ORAL,30HMOV[BX],ALINCBX微机原理课程设计11MOVAL,CLANDAL,0FHORAL,30HMOV[BX],ALRETTRANENDPTIMEPROC;延时程序PUSHCXPUSHAXMOVAX,00B0HMOVCX,0FFFFHA1:DECAXJNZA2JMPA3A2:DECCXJNZA2JMPA1A3:POPAXPOPCXRETTIMEENDPCODENDSENDSTART;程序结束五、程序调试由于是第一次用汇编语言编写一个较为复杂的程序以实现具体功能,在编写以及调试过程中我们遇到了很多问题,经过组员的努力和同学及老师的帮助问题得以顺利解决,下面列举了我们遇到的问题及其解决方法以供参考。1.我们将程序打入电脑进行汇编时,发现汇编程序运行后没有生成相应格式的文件,相反却是满页的错误提示,按照软件的提示我们查找问题,发现都是低级错误,只要认真即可避免。2.