微机原理课程设计报告书.docx

上传人:b****8 文档编号:9613614 上传时间:2023-05-20 格式:DOCX 页数:21 大小:536.58KB
下载 相关 举报
微机原理课程设计报告书.docx_第1页
第1页 / 共21页
微机原理课程设计报告书.docx_第2页
第2页 / 共21页
微机原理课程设计报告书.docx_第3页
第3页 / 共21页
微机原理课程设计报告书.docx_第4页
第4页 / 共21页
微机原理课程设计报告书.docx_第5页
第5页 / 共21页
微机原理课程设计报告书.docx_第6页
第6页 / 共21页
微机原理课程设计报告书.docx_第7页
第7页 / 共21页
微机原理课程设计报告书.docx_第8页
第8页 / 共21页
微机原理课程设计报告书.docx_第9页
第9页 / 共21页
微机原理课程设计报告书.docx_第10页
第10页 / 共21页
微机原理课程设计报告书.docx_第11页
第11页 / 共21页
微机原理课程设计报告书.docx_第12页
第12页 / 共21页
微机原理课程设计报告书.docx_第13页
第13页 / 共21页
微机原理课程设计报告书.docx_第14页
第14页 / 共21页
微机原理课程设计报告书.docx_第15页
第15页 / 共21页
微机原理课程设计报告书.docx_第16页
第16页 / 共21页
微机原理课程设计报告书.docx_第17页
第17页 / 共21页
微机原理课程设计报告书.docx_第18页
第18页 / 共21页
微机原理课程设计报告书.docx_第19页
第19页 / 共21页
微机原理课程设计报告书.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计报告书.docx

《微机原理课程设计报告书.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告书.docx(21页珍藏版)》请在冰点文库上搜索。

微机原理课程设计报告书.docx

微机原理课程设计报告书

微机原理与应用

课程设计

 

一、设计任务

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)延时子程序流程图

四、程序段

五、程序调试

六、程序运行结果

七、心得体会

八、参考文献

一、设计任务:

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码程序)

计算机显示数据时使用的是数据的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时,再次计时开始。

三.框图(见附页)

四、程序清单(附显示结果)

DATSEGMENT

SPACEDB2000DUP('')

FU1DB'Wherethereisawill$'

FU2DB'Thereisaway$'

FU3DB'MadeBy:

$'

FU4DB'SunandFeng$'

FU5DB'12/28/2008$'

FU6DB"INPUTSSTARTRRESETEENDCCONTINUE$";设置控制字符串

BUFFERDB10DUP(?

);定义缓冲区

DATENDS

CODSEGMENT

STARTPROCFAR

ASSUMECS:

COD,DS:

DAT

MOVAX,DAT

MOVDS,AX

CLOUR:

;字体颜色设置

MOVAX,0003H

INT10H

MOVAX,DAT

MOVDS,AX

MOVES,AX

MOVBP,OFFSETSPACE

MOVDX,0E00H

MOVCX,2000

MOVBX,0004H

MOVAX,1300H

INT10H

MOVAH,02H

MOVBH,00

MOVDX,182DH

INT10H

MOVDL,'~'

MOVAH,02H

INT21H

 

MOVAH,02H

MOVBH,00

MOVDX,1823H

INT10H

MOVDL,'~'

MOVAH,02H

INT21H

DISMACROX;用宏显示苹果图案

MOVAH,02H

XORBH,BH

MOVDX,X

INT10H

MOVDL,'*'

MOVAH,02H

INT21H

ENDM

PUSHDX

PUSHAX

PUSHBX

DIS0A28H

DIS0928H

DIS0829H

DIS0729H

DIS062AH

DIS052AH

DIS042BH

DIS032CH

DIS0B28H

DIS0A2AH

DIS092CH

DIS082EH

DIS0730H

DIS0732H

DIS0834H

DIS0936H

DIS0A38H

DIS0B39H

DIS0C3AH

DIS0D3BH

DIS0E3CH

DIS0F3CH

DIS103CH

DIS113BH

DIS1239H

DIS1337H

DIS1435H

DIS1533H

DIS1631H

DIS172FH

DIS172BH

DIS1629H

DIS1528H

 

DIS1627H

DIS1725H

DIS1721H

DIS161FH

DIS151DH

DIS141BH

DIS1319H

DIS1217H

DIS1115H

DIS1014H

DIS0F14H

DIS0E14H

DIS0D15H

DIS0C16H

DIS0B17H

DIS0A18H

DIS091AH

DIS081CH

DIS071EH

DIS0720H

DIS0822H

DIS0924H

DIS0A26H

 

POPBX

POPAX

POPDX

 

DISSMACROX,Y;用宏显示字符串

MOVAH,02H

XORBH,BH

MOVDX,X

INT10H

MOVDX,OFFSETY

MOVAH,09H

INT21H

ENDM

PUSHAX

PUSHBX

PUSHDX

DISS0F1AH,FU1

DISS1227H,FU2

DISS1439H,FU3

DISS163FH,FU4

DISS1842H,FU5

DISS0004H,FU6

POPDX

POPBX

POPAX

CALLGO;赋值程序调用

LOAD:

CALLIOSET;光标置屏中央程序调用

CALLHALT;等待开始信号程序调用

MOVDX,0

MOVCX,0;1/100秒与秒初值赋0

AGAIN:

CALLTIME;延时程序调用

MOVAL,DL;1/100秒值加1

ADDAL,1

DAA;BCD码调整

JCNEXT1;1/100秒等于100时清零

MOVDL,AL;1/100秒值存DL

JMPDISPY;1/100秒不等于100时显示

NEXT1:

MOVDL,0;1/100秒值回零

MOVAL,DH;秒值加1

ADDAL,1

DAA

MOVDH,AL;秒值存DH

CMPAL,60H;秒值与60比较

JENEXT4;秒值为60时,向分值进一

MOVDH,AL

JNEDISPY;秒值不为60时显示

NEXT4:

;秒值回零

MOVDH,0

MOVAL,CH

ADDAL,1

DAA

MOVCH,AL

CMPCH,60H

JNEDISPY;分值不为60时显示

MOVCH,0;分值回零

DISPY:

MOVBX,OFFSETBUFFER;显示程序

MOVAL,CH;分值BCD码转ASCII码

CALLTRAN

INCBX

INCBX

MOVAL,DH

CALLTRAN;秒值BCD码转ASCII码

INCBX

INCBX

MOVAL,DL;1/100秒值BCD码转ASCII码CALLTRAN

MOV[BX],AL

PUSHBX

PUSHCX

PUSHDX

CALLIOSET

MOVDX,OFFSETBUFFER;时间显示

MOVAH,09H

INT21H

POPDX

POPCX

POPBX

MOVAH,0BH;判断是否有键盘输入

INT21H

ANDAL,AL

JZAGAIN;无键入则转计时程序

MOVAH,08H;键入控制符

INT21H

CMPAL,'R';判断是否为复位信号

JNENEXT2;若为非复位信号则判断是否为结束信号

MOVDL,0;键入为复位信号则复位后继续计时

MOVDH,0

JMPAGAIN

NEXT2:

CMPAL,'E';判断是否为结束信号

JNEAGAIN;若为非结束信号则计时继续

NEXT3:

MOVAH,08H;若为结束信号则计时暂停

INT21H

CMPAL,'C';判断计时是否继续

JEAGAIN

CMPAL,'R';判断是否为复位信号

JNENEXT3;若为非复位信号则继续等待键入

CALLGO;若为复位信号则复位并转至开头等待

CALLIOSET

MOVDX,OFFSETBUFFER

MOVAH,09H

INT21H

JMPLOAD

RET

STARTENDP

GOPROC;赋值程序

MOVBX,OFFSETBUFFER

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,':

'

MOV[BX],AL

INCBX

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,':

'

MOV[BX],AL

INCBX

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,'0'

MOV[BX],AL

INCBX

MOVAL,'$'

MOV[BX],AL

RET

GOENDP

IOSETPROC;光标置屏中央程序

MOVDX,0D27H

MOVBH,00

MOVAH,02H

INT10H

RET

IOSETENDP

HALTPROC;等待开始信号键入程序

MOVAH,08H

INT21H

CMPAL,'S'

JNEHALT

RET

HALTENDP

TRANPROC;BCD码转ASCII码程序

MOVCL,AL

SHRAL,1

SHRAL,1

SHRAL,1

SHRAL,1

ORAL,30H

MOV[BX],AL

INCBX

MOVAL,CL

ANDAL,0FH

ORAL,30H

MOV[BX],AL

RET

TRANENDP

TIMEPROC;延时程序

PUSHCX

PUSHAX

MOVAX,00B0H

MOVCX,0FFFFH

A1:

DECAX

JNZA2

JMPA3

A2:

DECCX

JNZA2

JMPA1

A3:

POPAX

POPCX

RET

TIMEENDP

CODENDS

ENDSTART;程序结束

五、程序调试

由于是第一次用汇编语言编写一个较为复杂的程序以实现具体功能,在编写以及调试过程中我们遇到了很多问题,经过组员的努力和同学及老师的帮助问题得以顺利解决,下面列举了我们遇到的问题及其解决方法以供参考。

1.我们将程序打入电脑进行汇编时,发现汇编程序运行后没有生成相应格式的文件,相反却是满页的错误提示,按照软件的提示我们查找问题,发现都是低级错误,只要认真即可避免。

2.经过正确的汇编后,可执行文件生成,开始后进入DOS运行界面,屏幕上显示的全是乱码,经过查找,最终我们找到问题症结所在:

缓冲区赋初值后没有在其末尾赋入结束标志字符‘$’,经过重新定义,问题解决。

3.乱码问题解决后,屏幕显示计数结果,但却并没有显示在屏幕中央,这种问题只能是光标定位程序IOSET调用出现错误,在仔细检查该程序后发现DX赋值错误,将0027H改为0D27H后问题解决。

4.重新运行程序时,我们发现1/100秒值未从零开始变化而是从13开始

递变,经过我们三个的努力和同学的帮助我们找到了错误原因:

AGING程序开始运行时,DH和DL(分别存放秒值和1/100秒值)在此前的过程之前DH和DL的值发生变化,因此须在AGAIN程序的开始将DH和DL置零,问题解决。

5.屏幕中央显示结果时,只有秒和百分之一秒显示,没有分显示。

经检查是显示程序中没有定义分显示,加上分显示程序后分秒正常跳动。

6.我们添加宏定义不能运行,没有得到预期的效果。

经过我们组员的努力,发现应该将宏展开置于宏定义后面。

我们认为宏展开放于最后,中间程序将其变量改变,使得最后不能将宏展开。

7.在CLOUR程序段中,定义的是字体或屏幕颜色。

开始时只有一半的屏幕显示颜色。

我们改变中间变量,发现是字符串长度设置的太少,然后定义字符串长度大一些,问题得以解决。

六、程序运行结果

1、程序初始运行

2、控制字符控制运行中

七、心得体会

经过这次课程设计,我觉得我有了很大的收获,:

1.我大锻炼了自己搞科研的能力,作为我们大学生,尤其是工科的大学生,对于科研能力,能够自主开发课题,项目有着很高的要求,而我们很多大学生动手研发的能力还不是很强。

而通过这次课程设计,使自己的研发能力有了很大堤提高。

2.我对于工科设计的严谨性,仔细性有了更深地体会。

我们本次设计的秒表仅仅是工科设计中非常简单的一个,思想并不是非常复杂,手头也有一定的资料,但是我们在研发,调试过程中还是出现了一些错误。

简单的一些程序好检查,但是如果说是以后要设计的一些大型程序,出现故障就不是那么容易检查了。

这就要求我们在以后的工程设计当中要更为细致仔细。

3我的专业知识得到了很好的巩固,对于本专业的一些问题有了更深的思考。

原来有很多知识只是死学课本,而并没有与实际相结合,而这次课程设计使我的专业知识与实际有了很好的契合。

4.在程序设计中不能够想当然,许多程序,功能在脑子中想得很好,但是将其转变城实际程序就会出现许多问题。

如何由脑子里的构想转变成实际的程序,这是我以后需要提高的一点。

5.掌握了一些检查与判断错误的经验与方法,对今后的专业学习与设计有着深刻的影响。

6.对专业设计的许多流程、原则、注意事项以及撰写专业报告的有关事项有了一定的了解。

7.学到了书本上没有的知识,掌握了一些程序设计的技巧,对以后的学习与设计有深远影响。

总之,经过这次课程设计,我对今后的专业学习所要注意的事项有了更深刻地了解,这对我以后的学习必将产生深远的影响。

八、参考文献

1.志坚主编,《Intel8086/8088系列微型计算机原理及接口技术》,:

中国电力,2007年4月第三次印刷。

2.工业大学荣祥主编,《微型计算机原理》,:

中国电力。

 

屏幕或字体颜色显示

主程序流程图

N

Y

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2