微机原理课程设计秒表.docx

上传人:b****1 文档编号:10763188 上传时间:2023-05-27 格式:DOCX 页数:21 大小:219.93KB
下载 相关 举报
微机原理课程设计秒表.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

微机原理课程设计秒表

微机原理课程设计

设计项目:

电子秒表

院系:

山东大学电气工程学院

班级:

08级2班

姓名:

韩德帅200808190055

冯岩200808190045

指导教师:

秦安文

设计日期:

2010年12月

目录

一、设计任务-------------------------------------------------------------3

二、相关功能的介绍----------------------------------------------------3

三、设计原理-------------------------------------------------------------3

1.原理概述

2.延时程序

3.光标定位子程序原理

4.清屏原理

5.字符及字符串显示原理

6.压缩BCD转为ASCII码原理

7.动态扫描键盘原理

四、程序流程图----------------------------------------------------------4

1.主程序流程图

2.各子程序流程图

五、程序代码-------------------------------------------------------------5

六、程序运行结果------------------------------------------------------14

七、程序调试中的问题及解决方法---------------------------------15

八、心得收获------------------------------------------------------------15

九、参考资料------------------------------------------------------------16

 

一、设计任务

1.具有秒和0.1秒计时,并显示在屏幕中央

2.具有启(Start)、停(End)功能

3.具有暂停(End)、继续(Continue)功能

4.具有复位(Restart)功能

5.能同时实现多个时间分别计数(M)

6.具有记忆功能

2、相关功能的介绍

该秒表计数功能的实现是通过调用延时程序实现的(为纯软件实现,不能达到准确计数)。

具有启、停、继续、复位、同时多组计数等功能。

该秒表软件界面友好,即使对汇编语言一无所知的人也能轻松运行EXE程序,通过软件的提示输入S、E、C、R、M来实现秒表计数,易于操作。

通过DOS系统9号功能的调用,实现字符串的输出,展现出一个比较漂亮的秒表计数界面。

通过程序开辟专门的记忆区,实现了同时多组计数的功能,在实际应用中比较方便。

三、设计原理

1.原理概述

通过调用DOS系统的8号功能实现控制字符的输入,通过调用延时程序实现十分之一秒的定时,通过调用DOS系统的2号功能实现光标定位,调用DOS系统的2号功能实现字符的输出,通过调用DOS系统的9号功能实现字符串的输出。

2.延时程序

本设计利用软件实现延时(不是很精确),调用TIME实现延时。

其原理:

通过可控制的循环来占用CPU的时间来实现延时,分为内外两层循环,外循环由AX中的数值来控制,内循环有CX中的值来控制。

3.光标定位子程序原理

DOS显示屏为25行、80列,左上角为(0,0),右下角(18,4F)

设置光标,可调用BIOS系统,用汇编语句调用中断INT10H。

入口信息为

(AH)=2要设置光标;

(BH)=0页号;

(DH,DL)=光标的行号、列号

4.清屏原理

开始执行程序时为保证有一个洁净的屏幕,可使显示屏做上滚动作,使屏幕留下一片空白。

要使屏幕上滚,可用汇编语句INT10H,入口信息为

(AH)=6使屏幕上滚

(AL)=00上滚行数

(CH,CL)=滚动区域左上角的行、列号

(DH,DL)=滚动区域右下角的行、列号

(BG)=00颜色的设置

5.字符及字符串显示原理

通过调用DOS系统模块2只能是西安DL中的一个字符的显示。

为了实现字符串的显示,调用其9号模块功能,其入口信息为

(AH)=9显示字符串的功能模块

(DS:

DX)指向字符串的首地址,要求字符串以字符‘$’结尾。

6.压缩BCD转为ASCII码原理

(1.)两位的:

先将压缩BCD码的高4位取出,右移四位后,与30H相或,存到相应内存单元;然后将低4位取出,与30H相或,存到下一内存单元。

(2.)一位的:

原数字加30H

7.动态扫描键盘原理

运用INT21H的8号功能来实现动态扫描键盘。

如果有键按下,则相应的键值的ASCII码被存到AL中。

判断AL中的数值,若不是控制字符,则继续循环,从而实现动态扫描键盘。

 

四、程序流程图

1.主程序流程图

2.子程序流程图

 

五、程序代码

DATSEGMENT;设置数据段

BUFDB'Inputstart(S)ormemory(M)orend(E)orcontinue(C)orrestart(R)$';设置功能说明MESSDB'',0ah,0dh

DB'Happy^New~*Year',0ah,0dh

DB'^/~*',0ah,0dh

DB'^/~*',0ah,0dh

DB'^/~*',0ah,0dh

DB'^/~*',0ah,0dh

DB'^*',0ah,0dh

DB'^(&)(&)*',0ah,0dh

DB'^*',0ah,0dh

DB'^O*',0ah,0dh

DB'^*',0ah,0dh

DB'^(&&&&)',0ah,0dh

DB'&&&&',0ah,0dh

DB'********************',0ah,0dh

DB'******************',0ah,0dh

DB'**********',0ah,0dh

DB'**********',0ah,0dh

DB'**********',0ah,0dh

DB'**********',0ah,0dh

DB'**********',0ah,0dh

DB'*****************',0ah,0dh

DB'***************************',0ah,0dh

DB'',0ah,0dh

DB'DesignedbyHanDeshuai&FengYanCopyright@2010--2012','$'

TIPDB'MEMORY$';定义记忆提示

BUFFERDB20DUP(?

);定义缓存区

NUMDB1

LODEQU0144H;记忆显示区光标的位置

DATENDS

;--------------------代码段----主程序单元------------------

CODSEGMENT;定义代码段

STARTPROCFAR

ASSUMECS:

COD,DS:

DAT

MOVAX,DAT

MOVDS,AX

CALLCLR;图形区清屏并设置颜色

CALLCLRDAT;秒表数字区清屏并设置颜色

CALLCLRMER;记忆区清屏并设置颜色

MOVDX,OFFSETBUF;输出功能说明

MOVAH,09H;输出字符串

INT21H

MOVDX,OFFSETMESS;输出功能说明

MOVAH,09H

INT21H

CALLDISMER;"MEMORY"的光标位置

MOVDX,OFFSETTIP;输出"MEMORY"

MOVAH,09H

INT21H

CALLGO;设置初植

LOAD:

CALLIOSET;光标定位

CALLHALT;等待输入

MOVDX,0

MOVCH,0

AGAIN:

CALLTIME;调用延时程序

MOVAL,DL;十分之一秒加一

ADDAL,1

DAA

CMPAL,10H

JENEXT1;满十进位

MOVDL,AL

JMPDISPY;不满十显示

NEXT1:

MOVDL,0

MOVAL,DH;秒位加一

ADDAL,1

DAA

MOVDH,AL

CMPAL,60H

JNEDISPY

MOVDH,0

MOVAL,CH;分位加一

ADDAL,1

DAA

MOVCH,AL

CMPAL,60H

JNEDISPY;满60清零

MOVCH,0

DISPY:

;显示电子秒表

MOVBX,OFFSETBUFFER;取缓冲区地址

MOVAL,CH

CALLTRAN;将分位转变为ASCII码并送缓冲区

INCBX

INCBX

MOVAL,DH;将秒位转变为ASCII码并送缓冲区

CALLTRAN

INCBX

INCBX

MOVAL,DL;将十分之一秒位转变为ASCII码并送缓冲区

CALLTRAN2

PUSHBX

PUSHCX

PUSHDX

CALLIOSET;光标置位

MOVDX,OFFSETBUFFER;输出缓冲区字符串

MOVAH,09H

INT21H

POPDX

POPCX

POPBX

MOVAH,0BH;等待键盘输入

INT21H

ANDAL,AL

JZAGAIN

MOVAH,08H

INT21H

CMPAL,'M'

JNZR1

CALLMEMORY

JMPAGAIN

R1:

CMPAL,'R';判断输入是否为R

JNENEXT2;不是则判断是否为E

CALLMEMORY;若是则调用记忆功能保存当前值

MOVCH,0;初值清零重新计数

MOVDL,0

MOVDH,0

JMPAGAIN

NEXT2:

CMPAL,'E';判断是否为E

JNEAGAIN;不是则继续计数

NEXT3:

;若是则暂停计数

MOVAH,08H

INT21H

CMPAL,'C';判断是否输入C

JEAGAIN;若是则继续计数

CMPAL,'R';判断是否输入R

JNENEXT3;若不是则继续等待输入

CALLMEMORY;若是则调用记忆功能

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,'$'

MOV[BX],AL

RET

GOENDP

;--------------------光标定位子程序----------------------

IOSETPROC

MOVDX,121DH;光标定位在18行39列

MOVBH,00;页号

MOVAH,02H;要设置光标

INT10H

RET

IOSETENDP

HALTPROC

MOVAH,08H

INT21H

CMPAL,'S'

JNEHALT

RET

HALTENDP

;----------------------BCD转ASCII码子程序1-----------

TRANPROC

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

;----------------------BCD转ASCII码子程序2-----------

TRAN2PROC

ADDAL,30H

MOV[BX],AL

RET

TRAN2ENDP

;------------------延时子程序-----------------

TIMEPROC

PUSHCX

PUSHAX

MOVAX,06EEH;通过改变AX的初值来校准秒表

MOVCX,0FFFFH

A1:

DECAX

JNZA2

JMPA3

A2:

DECCX

JNZA2

JMPA1

A3:

POPAX

POPCX

RET

TIMEENDP

;-----------------记忆功能子程序-----------

MEMORYPROC

PUSHDX

PUSHBX

PUSHAX

CMPNUM,20

JEX2

ADDNUM,1

X1:

MOVDX,LOD

ADDDH,NUM

MOVBH,00

MOVAH,02H

INT10H

MOVDX,OFFSETBUFFER

MOVAH,09H

INT21H

POPAX

POPBX

POPDX

RET

X2:

CALLCLRMER

MOVNUM,1

JMPX1

MEMORYENDP

;----------------------图形区清屏并设置颜色子程序----

CLRPROC

MOVAH,06H;使屏幕上滚

MOVAL,18H;上滚行数

MOVCX,0000H;滚动区域左上角的行号列号

MOVDX,1840H;滚动区域右下角的行号列号

MOVBH,2CH;空白行属性

INT10H

RET

CLRENDP

;----------------数据区清屏并设置颜色子程序------------

CLRDATPROC

MOVAH,6

MOVAL,1

MOVCX,121DH

MOVDX,0E23H

MOVBH,6EH

INT10H

RET

CLRDATENDP

;------------------------记忆区清屏并设置颜色子程序---------

CLRMERPROC

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,6

MOVAL,18H

MOVCX,0141H

MOVDX,184FH

MOVBH,5EH

INT10H

POPDX

POPCX

POPBX

POPAX

RET

CLRMERENDP

;------------------------记忆提示光标定位---------------

DISMERPROC

MOVAH,02H

MOVBH,00

MOVDX,0043H

INT10H

RET

DISMERENDP

CODENDS;结束代码段

ENDSTART;结束源程序

 

六、程序运行结果

 

七、程序调试中的问题及解决方法

1.主程序的调试

主程序使用压缩BCD码做的加法,再用DAA进行调整,这时要注意DAA只能对AL中的结果进行调整,因此只能用AL做加法,再将数据传送过去。

2.BCD码调整为ASCII码子程序调试

BCD码调整为ASCII码时,分、秒同0.1秒不能调用同一个子程序,否则屏幕显示时,0.1秒位的显示的也是两个数。

应该分开调用,分秒位调用时用TRAN,0.1秒调用时用TRAN2。

3.延时子程序的调试

延时程序的时间并没有经过精确计算,因此只能用试探法逐渐增加或减小AX值。

最终选定AX=0BFFH。

4.图形显示程序的调试

本设计图形的显示用了字符串输出。

刚开始编程时由于图形太大超过了25行,图形不能正确的显示,经过多次反复修改,最终图形得以正确显示。

在使用字符串输出时一定注意在最后加上‘$’字符,还应该注意“0ah,0dh”的正确使用。

5.清屏子程序调试

书中没有具体指明颜色代号,只能通过从01H开始依次尝试。

经过多次调试最终确定图形使用0CH绿色,字幕使用0EH黄色,记忆区使用0DH紫色。

8、心得体会

“纸上得来终觉浅,绝知此事要躬行”,这是本次课程设计我最大的体会。

刚开始时,看着老师给的参考材料,心里想“这个课程设计不是很难的事情嘛,把这几个子程序堆一块不就完了”,可是真正做起来时,才发现事情远非想的那么简单。

从上机软件的选取,到课程设计报告的最终完成,我们经历了很多曲折,也收获了很多,下面具体阐述一下。

1.软件的选取

古语云:

工欲善其事必先利其器。

汇编语言上机软件和流程图绘制软件的选取对此次课程设计非常重要。

经过对比我们最终选取了Masm,Edrw最终也能熟练操作这两款软件。

这是此次设计较大的收获。

2.图案的设计

为了能得到一个比较漂亮的界面显示,我们在图案设计上花了不少功夫。

很多次设计的图案很漂亮,可是搬到程序里面运行时却是一堆乱码,让我们很沮丧...还有要把秒表的显示正好调到图案正中央,我们也经过了多次调试。

在这个过程中,我们学会了耐心,去除浮躁,平心静气的把程序一遍遍的修改、调试,臻于完美。

3.程序调试

程序调试前,我们检查了好几遍。

可是调试时还是错误百出。

尤其是“;”的使用,一定要区分英文输入的分号和中文分号的区别,还有字符串结束时一定要加‘$’,否则会出现乱码。

这些都是调试中发现的问题,只有注意细节,细心,才能顺利完成任务。

总结:

通过本次课程设计,我加深了对课汇编语言的理解,同时熟练掌握了汇编语言的编辑、调试软件。

在以后的学习生活中还要继续保持严谨认真的科学态度,保持不断尝试和探索的耐心,保持勇于解决问题的决心。

不断地向老师、同学们学习、交流,分享吸取他们的经验,更好的提高自己。

 

九、参考书目

《微型计算机原理》P150~158、P166~171张荣祥中国电力出版社

 

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

当前位置:首页 > 工程科技 > 能源化工

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

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