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

上传人:b****4 文档编号:26932011 上传时间:2023-06-24 格式:DOCX 页数:21 大小:76.25KB
下载 相关 举报
微机原理课程设计电子秒表.docx_第1页
第1页 / 共21页
微机原理课程设计电子秒表.docx_第2页
第2页 / 共21页
微机原理课程设计电子秒表.docx_第3页
第3页 / 共21页
微机原理课程设计电子秒表.docx_第4页
第4页 / 共21页
微机原理课程设计电子秒表.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

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

《微机原理课程设计电子秒表.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子秒表.docx(21页珍藏版)》请在冰豆网上搜索。

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

微机原理课程设计电子秒表

航空航天大学

 

课程设计报告

 

课程设计名称:

微机系统综合课程设计

课程设计题目:

电子秒表

 

院(系):

计算机学院

专业:

计算机科学与技术

班级:

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的各种功能,还对程序的调试有了进一步的掌握。

在课设过程中,通过翻阅书籍,咨询同学,上网找资料,不但提高了我的查找能力,而且还提高了自己快速融合各种信息,并将其转变为自己的知识的能力。

而且,从这次课程设计活动中我认识到了一定要认真对待每一个问题,因为,很有可能就在一个你不注意的地方导致你失败。

总之,这次课设是自己用心去完成的一项工作,但,由于本人水平有限能力有限,此次课程设计还有很多不足,敬请老师谅解!

在此次课设中,得到了老师及同学不少帮助,所以,我在这里要衷心地感谢老师的耐心指导以及同学们的热心帮助!

 

指导教师评语:

 

指导教师(签字):

      年月日

课程设计成绩

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

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1