微机原理课程设计电子秒表.docx
《微机原理课程设计电子秒表.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子秒表.docx(21页珍藏版)》请在冰豆网上搜索。
微机原理课程设计电子秒表
航空航天大学
课程设计报告
课程设计名称:
微机系统综合课程设计
课程设计题目:
电子秒表
院(系):
计算机学院
专业:
计算机科学与技术
班级:
04010101
学号:
2010040101024
姓名:
指导教师:
訾学博
完成日期:
2013年7月5日
第1章总体设计方案
1.1课程设计的容和要求
一、课程设计容:
设计一个带时间显示的电子秒表,具体容如下:
1.电子秒表的初始状态为零,分别显示分、秒、毫秒;
2.设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;
3.有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。
二、课程设计要求:
1.独立完成课程设计任务;
2.通过老师当场验收;
3.交出完整的课程设计报告。
1.2设计原理
根据课程设计任务书的容与要求,要设计一个带时间显示的电子秒表,设计一个按钮带有计时开始、计时暂停、计时清零功能,还要可以进行时钟显示。
在本次设计中主要使用了8253定时/计数器芯片、8259A中断控制芯片以及8279键盘/显示芯片来完成电子秒表的计时过程和时钟显示过程的模拟。
程序开始时扫描键盘判断是否按键,如有则读出相应的控制键,来决定做什么操作,例如开始计时、暂停计时、停止计时、时钟显示等等。
利用8253定时/计数器芯片实现分频功能,使其产生100HZ(10毫秒)的方波,使计时周期为10ms;利用8259A中断控制芯片产生中断响应,通过8253控制8259每10毫秒产生一次中断,使秒表加1,实现计时功能;利用8279键盘/显示芯片在数码管上进行显示,将秒表的计时过程、时钟的当前时间显示在数码管上。
1.3设计思路
采用汇编语言程序结合硬件电路设计方法,利用AEDK实验箱上已有芯片来实现一个带时间显示的电子秒表(包括开始计时、暂停计时、停止计时、时钟显示等等)。
(1)提出方案
首先,实现电子秒表的计时功能;其次,通过一个按钮实现电子秒表的开始计时、暂停计时、停止计时的功能;再次,通过一个按钮实现秒表显示和时钟显示切换的功能;最后,要实现秒表的运行和停止与时钟运行的互不影响。
(2)方案论证
为了完成电子秒表的计时功能,可以应用8253定时/计数器芯片,设定计数器0工作在模式3,由于本实验要求计时周期为10毫秒,故可以利用8253实现分频功能,使其产生100HZ的方波。
并且利用8259产生中断响应每10毫秒产生一次中断,使计数器加1,实现秒表计数。
并当秒表达到最大值时,即59分59秒990毫秒,将秒表重新初始化;当时钟达到最大值时,即23时59分59秒,将时钟重新初始化
为通过一个按钮实现电子秒表的开始计时、暂停计时、停止计时的功能,可以利用8279键盘/显示芯片来读入键值,再设置num来计数,以便来区分开始计时、暂停计时、停止计时。
为通过一个按钮实现秒表显示和时钟显示切换的功能,可以利用8279键盘/显示芯片来读入键值,再设置n来区分是秒表显示、还是时钟显示。
为实现秒表的运行和停止与时钟运行的互不影响,设置flag来区分是秒表运行、还是秒表停止,在中断中判断秒表是否运行。
1.4实验环境
·硬件环境:
AEDK实验箱,PC机。
·软件环境:
LCA88ET应用软件。
第2章详细设计方案
2.1主程序设计
主程序流程图如图2.1所示。
图2.1主程序流程图
2.2功能模块的设计与实现
对8253、8259、8279各个芯片进行初始化,并将中断服务程序装入中断向量表。
利用8253定时/计数器芯片产生100HZ的方波,使8259每10毫秒产生一次中断,使秒表加1,实现计时功能利用8279的键盘输入功能输入控制键,利用显示功能,秒表或时钟显示在七段数码管上。
(1)芯片初始化模块的设计与实现
对8253、8259、8279等芯片进行初始化,并将中断服务程序装入中断向量表。
流程图如下所示:
图2.2芯片初始化流程图
(2)功能实现模块的设计与实现
利用8253定时/计数器芯片产生100HZ的方波,使8259每10毫秒产生一次中断,使秒表加1,实现计时功能利用8279的键盘输入功能输入控制键,利用显示功能,秒表或时钟显示在七段数码管上。
程序中所需定义的存单元含义如下:
disbufm:
秒表的时间值;
disbufh:
时钟的时间值;
tab:
存放能在数码管上显示0-9的十六进制码;
flag:
标志是计时运行(0)还是计时停止
(1);
flag1:
标志是秒表未达最大值(0)还是秒表达最大值
(1);
flag2:
标志是时钟未达最大值(0)还是时钟达最大值
(1);
n:
标志是秒表显示(0)还是时钟显示
(1);
num:
标志是第几次按下A键。
程序中所需的秒表的各个功能键定义如下:
A:
,按第一次时秒表开始计时,按第二次时秒表计时暂停按第三次时秒表计时停止,回到初始态;
B:
切换键,进行秒表显示和时钟显示的切换。
(1)清屏子程序的实现
在清屏时所显示的状态与秒表在初始状态一样,即00-00-00,数码管显示如图2.3所示。
图2.3清屏图
在清屏子程序中,修改disbufm或disbufh中的值,使分、秒、十毫秒或时、分、秒每位都为零。
秒表清屏子程序:
begin1:
;秒表初始化
movbyteptr[di],0
movbyteptr[di+1],0
movbyteptr[di+3],0
movbyteptr[di+4],0
movbyteptr[di+6],0
movbyteptr[di+7],0
ret
(2)中断服务子程序
在中断服务子程序中实现了秒表的计时和显示与时钟的计时和显示功能,每当8259进入中断后,都要修改disbufh或disbufm和disbufh中所存的时间信息,再对disbufh或disbufm中每一位的值与最大值进行比较,若达到最大值(秒表达到最大值59-59-99,时钟达到最大值23-59-59)将disbufh或disbufm进行初始化,最后要通过8279将disbufm或disbufh中所存的时间信息显示一遍。
2.3程序连线图
程序连线图如图2.4所示。
307200HZ
200-207
VCC
210-217
注:
8279键盘/显示芯片自带
220-227有小键盘及8位数码管
图2.4程序连线图
第3章结果测试及分析
3.1结果测试
测试结果如下:
(1)时钟以时、分、秒形式显示时间,显示时间如XX-XX-XX;
(2)电子秒表的初始状态为零,分别显示分、秒、10毫秒,显示00-00-00;
(3)按A键开始秒表计时,显示时间如XX-XX-XX;
(4)再按一次A键秒表暂停计时,显示秒表暂停时的时间;
(5)第三次按A键时秒表计时器清零,显示00-00-00;
(6)按B键时实现秒表显示和时钟显示的切换。
3.2结果分析
对于上述的运行结果和操作过程,已经达到了课程设计任务书中的要求。
秒表的初始状态为零,分别显示分、秒、10毫秒;按钮A,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;按钮B,实现秒表显示和时钟显示的切换,当不用电子秒表的功能时,可以显示当先的时间,分别为时、分、秒形式。
参考文献
[1]龚尚福.微机原理与接口技术[M]:
电子科技大学,2003
[2]美明,温冬婵.IBM-PC汇编语言程序设计[M]北京:
清华大学,2001
[3]雪兰.汇编语言程序设计[M]北京:
清华大学,2006
[4]王爱英.计算机组成与设计[M]北京:
教育,2003
[5]王忠民.微型计算机原理[M]:
电子科技大学,2003
附录
codesegment
assumecs:
code
main:
jmpstart
disbufmdb0,0,0ah,0,0,0ah,0,0;秒表初值
disbufhdb2,3,0ah,5,9,0ah,5,8,0,0;时钟初值
flagdb1
flag1db0
flag2db0
numdb0
ndb1
start:
movax,8100h
movds,ax
cli;关中断
calli8279
calli8259
calli8253
calls1
sti;开中断
key:
a:
movdx,222h;是否有键读入
inal,dx
andal,0fh
jza
moval,40h
outdx,al
movdx,220h
inal,dx
cmpal,0ah
jzsta
jmpchange
sta:
;start
cmpnum,0
jnzpau
movflag,0
movnum,1
jmpkey
pau:
;pause
cmpnum,1
jnzcle
movflag,1
movnum,2
jmpkey
cle:
;clear
movdi,offsetdisbufm
callbegin1
movnum,0
jmpkey
change:
;change
cmpal,0bh
jnzkey
cmpn,0
jzchange1
movn,0
jmpkey
change1:
movn,1
jmpkey
i8279:
moval,0d2h;8279A初始化220-227
movdx,222h
outdx,al
moval,0
outdx,al
ret
i8253:
moval,36h;8253A初始化200-207
movdx,203h
outdx,al
movax,0c00h
movdx,200h
outdx,al
moval,ah
outdx,al
ret
i8259:
moval,13h;8259A初始化210-217
movdx,210h
outdx,al
moval,30h
movdx,211h
outdx,al
moval,03h
outdx,al
moval,0feh;中断IR0
outdx,al
ret
begin1:
;秒表初始化
movbyteptr[di],0
movbyteptr[di+1],0
movbyteptr[di+3],0
movbyteptr[di+4],0
movbyteptr[di+6],0
movbyteptr[di+7],0
ret
begin2:
;时钟初始化
movbyteptr[di],0
movbyteptr[di+1],0
movbyteptr[di+3],0
movbyteptr[di+4],0
movbyteptr[di+6],0
movbyteptr[di+7],0
movbyteptr[di+8],0
movbyteptr[di+9],0
ret
s1:
;中断向量的装入
pushds
pushbx
xorax,ax
movds,ax
movbx,30h*4
movax,offsetintr
mov[bx],ax
movax,8100h
mov[bx+2],ax
popbx
popds
ret
intr:
;中断
pushax
pushdi
pushdx
movsi,offsetdisbufm
movdi,offsetdisbufh
cmpflag,0
jnzr
;秒表计时
cmpbyteptr[si+7],9
jzc1
incbyteptr[si+7]
jmpr
c1:
movbyteptr[si+7],0
cmpbyteptr[si+6],9
jzc2
incbyteptr[si+6]
jmpr
c2:
movbyteptr[si+6],0
cmpbyteptr[si+4],9
jzc3
incbyteptr[si+4]
jmpr
c3:
movbyteptr[si+4],0
cmpbyteptr[si+3],5
jzc4
incbyteptr[si+3]
jmpr
c4:
movbyteptr[si+3],0
cmpbyteptr[si+1],9
jzc5
incbyteptr[si+1]
jmpr
c5:
movbyteptr[si+1],0
incbyteptr[si]
;时钟计时
r:
cmpbyteptr[di+9],9
jzr1
incbyteptr[di+9]
jmpisend
r1:
movbyteptr[di+9],0
cmpbyteptr[di+8],9
jzr2
incbyteptr[di+8]
jmpisend
r2:
movbyteptr[di+8],0
cmpbyteptr[di+7],9
jzr3
incbyteptr[di+7]
jmpisend
r3:
movbyteptr[di+7],0
cmpbyteptr[di+6],5
jzr4
incbyteptr[di+6]
jmpisend
r4:
movbyteptr[di+6],0
cmpbyteptr[di+4],9
jzr5
incbyteptr[di+4]
jmpisend
r5:
movbyteptr[di+4],0
cmpbyteptr[di+3],5
jzr6
incbyteptr[di+3]
jmpisend
r6:
movbyteptr[di+3],0
cmpbyteptr[di+1],9
jzr7
incbyteptr[di+1]
jmpisend
r7:
movbyteptr[di+1],0
incbyteptr[di]
isend:
cmpflag,0
jnzisend1
;秒表是否到最大值
cmpbyteptr[si],5
jnzdisplay
cmpbyteptr[si+1],9
jnzdisplay
cmpbyteptr[si+3],5
jnzdisplay
cmpbyteptr[si+4],9
jnzdisplay
cmpbyteptr[si+6],9
jnzdisplay
cmpbyteptr[si+7],9
jnzdisplay
movflag1,1
;时钟是否到最大值
isend1:
cmpbyteptr[di],2
jnzdisplay
cmpbyteptr[di+1],3
jnzdisplay
cmpbyteptr[di+3],5
jnzdisplay
cmpbyteptr[di+4],9
jnzdisplay
cmpbyteptr[di+6],5
jnzdisplay
cmpbyteptr[di+7],9
jnzdisplay
cmpbyteptr[di+8],9
jnzdisplay
cmpbyteptr[di+9],9
jnzdisplay
movflag2,1
display:
;显示
movbx,offsettab
cmpn,0
jnzh
movsi,offsetdisbufm
jmph1
h:
movsi,offsetdisbufh
h1:
addsi,7
moval,90h
movdx,222h
outdx,al
movcx,8
dis:
moval,[si]
xlat
movdx,220h
outdx,al
decsi
loopdis
cmpflag1,0
jzh2
pushdi
movdi,offsetdisbufm
callbegin1
movflag1,0
popdi
h2:
cmpflag2,0
jzh3
pushdi
movdi,offsetdisbufh
callbegin2
movflag2,0
popdi
h3:
popdx
popdi
popax
iret
tabdb3fh,6,5bh,4fh,66h,6dh,7dh,7,7fh,6fh,40h
codeends
endmain
课程设计总结:
通过此次的课程设计,我学会了许多在课堂上学不到的知识。
有一些知识只有你自己亲身去实践,去发现问题,然后依靠自己解决了问题,你才能真正掌握。
通过本次实验,我对8279,8253,8259芯片都有了进一步的了解,尤其是8279的各种控制字及8279的各种功能,还对程序的调试有了进一步的掌握。
在课设过程中,通过翻阅书籍,咨询同学,上网找资料,不但提高了我的查找能力,而且还提高了自己快速融合各种信息,并将其转变为自己的知识的能力。
而且,从这次课程设计活动中我认识到了一定要认真对待每一个问题,因为,很有可能就在一个你不注意的地方导致你失败。
总之,这次课设是自己用心去完成的一项工作,但,由于本人水平有限能力有限,此次课程设计还有很多不足,敬请老师谅解!
在此次课设中,得到了老师及同学不少帮助,所以,我在这里要衷心地感谢老师的耐心指导以及同学们的热心帮助!
指导教师评语:
指导教师(签字):
年月日
课程设计成绩