微机原理课程设计.docx
- 文档编号:11520224
- 上传时间:2023-03-02
- 格式:DOCX
- 页数:15
- 大小:83.65KB
微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
1、课程设计目的:
综合运用本课程知识,利用集成电路设计实现一些中小规模电子电路或者完成一定功能的程序,以复习巩固课堂所学的理论知识,提高程序设计实现系统、绘制系统电路图的能力,为实际应用奠定一定的基础。
2、课程设计时间安排:
第一天:
教师布置设计任务,讲解设计要求,提示设计要点。
第二~四天:
查阅资料(在图书馆或上网),提出设计方案(2~3个),对提出的方法作比较以选出性价比最高的设计方法。
第三~七天:
画出详细电路图,编写程序,调试程序,得出实验结果并写出设计报告。
3、课程设计内容及要求:
电子时钟。
(在计算机屏幕上显示当前系统的时间,日期,或时间和日期,3人一组)
设计目的:
1.了解定时/计数器和中断(DOS/BIOS)的使用;
2.掌握定时/计数器和中断的工作原理和编程方法。
编程要求:
1.调用系统时间,在屏幕上显示出来;
2.获取键盘的按键值,判断键值并退出系统。
程序设计参考步骤:
第一部分:
定义显示界面。
第二部分:
调用系统时间(日期),并将调用的用二进制表示的时间数转换成ASCII码,并将时间数(日期数)存入内存区。
第三部分:
将存在系统内存区的时间数(日期数)用显示字符串的形式显示出来。
第四部分:
获取键盘的按键值,判断键值并退出系统。
软件设计思路
先在数据段开一段显示缓冲区,用来存储系统时间,调用子程序的清屏部分。
调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII码。
再分别将小时数、分钟数、秒数存入显示缓冲区,在修改时间的时候调用键盘输入输出程序实现时钟的修改功能,然后存入结束字符‘$’。
调用DOS字符串显示功能将时间显示在显示器上,调用屏幕的I/O中断,定位光标的开始位置,将时间显示在预先定义好的位置。
把程序设计成用刷新的方式来不断获取系统的时间,这样就有了会一秒一秒走动的电子时钟。
软件各模块内容
(一)光标定位子程序原理
DOS显示屏为25行、80列,左上角为(0,0),右下角(18,4F)
设置光标,可调用BIOS系统,用汇编语句调用中断INT10H。
入口信息为
(AH)=2要设置光标;
(BH)=0页号;
(DH,DL)=光标的行号、列号
(二)清屏原理
开始执行程序时为保证有一个洁净的屏幕,可使显示屏做上滚动作,使屏幕留下一片空白。
要使屏幕上滚,可用汇编语句INT10H,入口信息为
(AH)=6使屏幕上滚
(AL)=00上滚行数
(CH,CL)=滚动区域左上角的行、列号
(DH,DL)=滚动区域右下角的行、列号
(BG)=00颜色的设置
(三)字符及字符串显示原理
通过调用DOS系统模块2只能是西安DL中的一个字符的显示。
为了实现字符串的显示,调用其9号模块功能,其入口信息为
(AH)=9显示字符串的功能模块
(DS:
DX)指向字符串的首地址,要求字符串以字符‘$’结尾。
(四)压缩BCD转为ASCII码原理
(1.)两位的:
先将压缩BCD码的高4位取出,右移四位后,与30H相或,存到相应内存单元;然后将低4位取出,与30H相或,存到下一内存单元。
(2.)一位的:
原数字加30H
(五)动态扫描键盘原理
运用INT21H的8号功能来实现动态扫描键盘。
如果有键按下,则相应的键值的ASCII码被存到AL中。
判断AL中的数值,若不是控制字符,则继续循环,从而实现动态扫描键盘。
三、程序流程图设计
第四章系统实现
一、程序原代码清单及详细注释
;--------------------------------数据段定义阶段-------------------------------------------------------
datasegment
TSDB?
0ah,0dh
DB?
0ah,0dh
DB'====**======@@======**=====',0ah,0dh
DB'Pleaseinputthenewtime(hh:
mm:
ss):
',0dh,0ah,'$';提示输入时间的格式
mess2db'TheTimeis:
',0ah,0dh,'$'
HCQdb40;在数据段开一段时间显示缓冲区,大小为40个字节
hordb?
;为变量分配一个字节的空间,初值为任意字符
mindb?
;为变量分配一个字节的空间,初值为任意字符
secdb?
;为变量分配一个字节的空间,初值为任意字符
dataends
;--------------------------------堆栈段定义阶段-------------------------------------------------
stacksegment
db100dup(?
);定义100个字节的堆栈段
stackends
;--------------------------------代码段定义阶段------------------------------------------
codesegment
assumecs:
code,ss:
stack,ds:
data;确定各个逻辑段的类型
start:
callclear;调用清屏子程序
;-------------------------------
display:
;时间显示部分
movax,data;将DATA的段基地址送到寄存器AX
movds,ax;将AX寄存器的内容存到DS中
movbx,offsetHCQ;送HCQ的偏移地址到BX
movah,2ch;调用DOS时间调用功能,功能号:
2cH,小时,分钟,秒数
int21h;分别保存在CH,CL,DH中
moval,ch;小时数设定
movah,0;此处置零是为了
callC16-10;调用进制转换子程序
incbx
;----------------------------------------------------------
moval,':
';显示分隔符号
mov[bx],al;将寄存器内容存入BX中
incbx;寄存器指向的地址+1
;-------------------------------------------------------
movah,2ch;调用DOS时间调用功能,功能号:
2cH,小时,分钟,秒数
int21h;分别保存在CH,CL,DH中
moval,cl;分钟数设定
movah,0;将该位置零
callC16
incbx
;-------------------------------------------------------------------------
moval,':
';显示分隔符号
mov[bx],al;将寄存器内容存入BX中
incbx;寄存器指向的地址+1
;---------------------秒的设计---------------------------------
movah,2ch;秒设定
int21h
moval,dh
movah,0;将该位置零
callC16
incbx
;----------------------------------------------------------------------
moval,'$';将字符串的结束位送至显示缓冲区的最后一位
mov[bx],al
;------------------------------------------------------------------------
pushbx;修改时间显示的地方
movah,2;置光标位置,调用功能号AH=2
movbh,0;置显示模式
movdh,17;DH跟DL分别为行号与列号,并入栈保护BX
movdl,50;显示输出在第17行
int10h;显示输出在51列
popbx
leadx,HCQ;送HCQ偏移地址到DX,并调用DOS显示功能,功能号为9
movah,9;调用DOS9号功能,显示字符串
int21h
pushbx
movah,2;置光标位置调用DOS的功能,AH=2
movbh,0;置显示以下模式
movdh,1;修改前面附加的内容的显示位置
movdl,0
int10h
movah,9;调用DOS9号功能,显示字符串
int21h
popbx;BX寄存器出栈
pushbx;PUSHBX
movah,2;置光标位置
movbh,0;置显示模式
movdh,17;定位在17行
movdl,35;定位在35列
int10h
popbx
leadx,mess2;取mess1的有效地址赋给DX
movah,9
int21h
;-----------------------------
movah,1;调用键盘I/O中断功能号1,获取键值到AL
int16h
cmpal,'c';是c键,转到时间修改程序
jeCor
cmpal,'C';是C键,转到时间修改程序
jeCor
cmpal,1bh
jzquit;是ESC键,退出程序
jmpdisplay
quit:
movah,4ch;程序终止功能号
int21h
ret
Cor:
callcorrect;调用时间修改子程序
;-------------------------------
C16PROCNEAR
PUSHCX
MOVAH,0;16位二进制数转换为ASCII码
MOVCX,10D;基数10
DIVCL;用除10取余的方法转换为BCD码(二进制码)
ADDAX,3030H;BCD码转换为ASCII码的代码
MOV[BX],AL;此时将低八位的AL加载到BX中,[BX]指的是寄存器BX指向的内存单元
INCBX;BX指向的存储单元加一
MOV[BX],AH
POPCX
RET
C16ENDP
;-------------------------------------------
clearprocnear
pushax;入栈保护现场
pushbx
pushcx
pushdx
movax,0600h;ah=06(滚动)al=00(全屏空白)
movbh,2eh;设置背景颜色
(2)和前景颜色(e)
subcx,cx;将寄存器清零
movdx,5f5fh;设备重定向子功能号功能描述
int10h
popdx;出栈恢复现场
popcx
popbx
popax
ret
clearendp
;----------------------------
correctprocnear;时间修改子程序
callinput;调用键盘输入子程序输入数据
movch,hor
movcl,min
movdh,sec
anddl,0h
movah,2dh;调用DOS功能调用系统时间并修改系统时间
int21h
jmpstart
ret
correctendp
;-------------------------------------------
inputprocnear,;键盘输入子程序
pushax;入栈保护数据
pushbx
pushcx
pushdx
pushf
movdx,offsetTS;显示修改时间的格式提示
movah,09h;显示字符串,提示的内容
int21h;调用DOS功能
movdx,OFFSETHCQ;数据缓冲区的数据输入
movah,0ah;带缓存的键盘输入(字符串)
int21h
anddx,0h;将寄存器置零
leabx,HCQ;向BX装入有效地址
incbx;地址+1
incbx;跳过‘:
’
movdh,[bx];将[BX]的内容储存到寄存器DH中
subdh,30h;将得到的ASCII码转化为16进制的数据
incbx;地址加1
movdl,[bx];分
subdl,30h;转化为16进制的数据
movcl,10;计数器计数十次
moval,dh;将DH的内容送入寄存器
mulcl;通过减30h,再乘10的方法得到该二进制数
addal,dl;然后将两个数据相加
movch,al;存入时间
movhor,al;将寄存器的内容存入HOR中
incbx
incbx
movdh,[bx];将ASCII码转换为二进制数
subdh,30h
incbx
movdl,[bx]
subdl,30h
movcl,10
moval,dh
mulcl;乘以10
addal,dl
movcl,al
movmin,al
incbx
incbx
movdh,[bx];将ASCII码转换为二进制数
subdh,30h
incbx
movdl,[bx]
subdl,30h
movcl,10
moval,dh
mulcl
addal,dl
movdh,al
movsec,al
popf;出栈恢复数据
popdx
popcx
popbx
popax
ret
inputendp
;----------------------------
codeends
endstart
二、实验结果
点击运行后,出现运行的结果如下:
当按下‘c’或‘C’时显示提示符“pleaseinputthenewtime(hh:
mm:
ss):
”
总结
“纸上得来终觉浅,绝知此事要躬行”,这是本次课程设计最大的体会。
刚开始时,看着老师给的参考材料,心里想“这个课程设计不是很难的事情嘛,把这几个子程序堆一块不就完了”,可是真正做起来时,才发现事情远非想的那么简单。
从上机软件的选取,到课程设计报告的最终完成,经历了很多曲折,也收获了很多,下面具体阐述一下。
图案的设计
为了能得到一个比较漂亮的界面显示,在图案设计上花了不少功夫。
很多次设计的图案很漂亮,可是搬到程序里面运行时却是一堆乱码,让很沮丧...还有要把秒表的显示正好调到图案正中央,也经过了多次调试。
在这个过程中,学会了耐心,去除浮躁,平心静气的把程序一遍遍的修改、调试,臻于完美。
程序调试
程序调试前,检查了好几遍。
可是调试时还是错误百出。
尤其是“;”的使用,一定要区分英文输入的分号和中文分号的区别,还有字符串结束时一定要加‘$’,否则会出现乱码。
这些都是调试中发现的问题,只有注意细节,细心,才能顺利完成任务。
通过本次课程设计,加深了对课汇编语言的理解,同时熟练掌握了汇编语言的编辑、调试软件。
在以后的学习生活中还要继续保持严谨认真的科学态度,保持不断尝试和探索的耐心,保持勇于解决问题的决心。
不断地向老师、同学们学习、交流,分享吸取他们的经验,更好的提高自己。
参考文献
《微型计算机原理与接口技术(第二版)》朱定华主编清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计