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

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

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

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

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

微机原理课设电子秒表

湖南文理学院芙蓉学院

微机原理课程设计报告

课程名称:

    电子秒表     

专业班级:

              

学生学号:

              

学生姓名:

              

指导教师:

              

完成时间:

             

 

评阅意见:

评定成绩:

评阅教师日期

 

目  录

第1章 总体设计方案  1

1.1 课程设计的内容和要求  1

1.2 课程设计原理  1

1.3 课程设计思路  2

1.4 设计环境  2

第2章 详细设计方案  3

2.1 实现方法  3

2.2 模块的设计与实现  4

2.2.1主程序模块  4

2.2.2初始化模块  5

2.2.3时钟模块  6

2.2.4秒表模块  6

2.3 程序连线图  8

第3章 调试及结果分析  9

3.1 调试步骤及方法  9

3.1.1程序的语法错误  9

3.1.2时钟模块调试过程  9

3.1.3秒表模块调试过程  11

3.2 实验结果  11

参考文献  13

附 录(源程序)  14

 

第1章 总体设计方案

1.1 课程设计的内容和要求

一、课程设计内容:

设计一个带时间显示的电子秒表,具体内容如下:

1.电子秒表的初始状态为零,分别显示分、秒、毫秒;

2.设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;

3.有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。

二、课程设计要求:

1.独立完成课程设计任务;

2.通过老师当场验收;

3.交出完整的课程设计报告。

1.2 课程设计原理

题目要求实现电子秒表功能和显示当前时间的功能。

这两部分的共同点是都需要实现时间显示和时间运行功能。

除此之外,电子秒表还需要有开始计时和停止计时功能。

因此电子秒表是本次课程设计的主要部分。

在本次设计中主要使用了8255A并行接口芯片,8253定时/计数器,8259A中断控制器,8279键盘/显示芯片。

具体原理和功能如下:

1.利用8255A芯片实现时钟和秒表之间的切换。

将其连接到一个开关上,读取开关的电位,以此来判断是时钟模式还是秒表模式。

2.利用8253芯片计时。

用8253的分频功能使其产生周期为1s和1ms的方波,分别为时钟和秒表计时。

3.利用8259A芯片接收中断。

中断分为三种类型,分别是一秒一次的时钟计时中断,一毫秒一次的秒表计时中断和控制秒表开始和停止的中断。

4.利用8279芯片在数码管上显示当前时间或秒表时间。

1.3课程设计思路

由于要求实现时钟和秒表两种功能。

因此需要设计时钟和秒表两个模式。

时钟模式下,以秒为计时单位,计时功能和显示当前时间功能。

秒表模式下,以毫秒为计时单位,有开始、停止和显示计时结果的功能。

首先,将8255A芯片的PC0接口连接到开关。

读C端口的值。

判断是0还是1。

0代表时钟模式,1代表秒表模式。

然后,根据判断结果调用相应模式下的显示功能。

这样不停地读8255A芯片,然后判断,最后显示。

构成一个死循环。

若在这个过程中有中断,则会执行中断服务程序。

时间中断由8253芯片产生,周期分别为1s和1ms。

时钟的最大时间为23时59分59秒,超过后从零开始重新计时。

秒表最大时间为59分59秒999毫秒。

当计数大于这个值时,秒表不再更新。

对秒表的控制中断由一个手动脉冲产生。

将按键次数保存在名为pad的内存空间中。

pad只能有0、1、2三个值,分别代表清零、开始计时和停止计时。

8259芯片接收中断,并调用相应模式下的中断服务程序。

在时钟模式下,直接将时间加一秒。

在秒表模式下,或清零(重新开始,pad=0),或将时间加一毫秒(开始计时,pad=1),或不做任何处理(停止计时,pad=2)。

要实现以上分析的功能,可以设计4个模块。

模块名和作用见表1.1。

表1.1模块划分及功能描述

模块名称

功能

主程序模块

调用初始化模块,判断时间模式,调用相应的显示函数

初始化模块

初始化各芯片,装入中断向量

时钟模块

实现时钟计时和显示功能

秒表模块

实现秒表的计时、显示和控制功能

 

 

1.4设计环境

硬件环境:

AEDK实验箱

软件环境:

LCT88EA应用软件、WindowXP操作系统、PC机

 

第2章 详细设计方案

2.1 实现方法

1.内存分配

程序中所需定义的内存单元含义如下:

timer0:

存放当前时钟的值,共6个字节。

时、分、秒各占两个字节;

timer1:

存放秒表的计数值,共7个字节。

分和秒各占两个字节,毫秒占三个字节;

pad:

存放秒表的按键次数,共1个字节。

可以有三种取值,0代表清零,1代表开始计时,2代表停止计时。

当计数值大于2时,变为0重新开始计数;

tab:

存放0~9在数码管上显示的编码,共10个字节。

2.按键设置

秒表有一个按钮,接手动脉冲和8259A芯片的中断引脚。

每次按键,pad都做相应改变。

按第一次开始计时(pad=1),按第二次计时暂停(pad=2),显示当前记录的时间,按第三次计时停止(pad=0),回到初始态。

3.时钟频率选择

CPU的频率为

用8253芯片产生方波。

计数器1的

接CPU时钟脉冲,计数初值为307,使

产生周期为1ms的方波。

计数器0的

,计数初值为1000,使

产生周期为1s的方波。

4.中断设置

8259A芯片的中断引脚

分别接8253芯片的

和手动脉冲。

5.显示设置

显示功能由8279芯片和数码管实现。

显示分为两种情况。

时钟模式下的显示规则是(时-分-秒),即(00-00-00)。

秒表模式下的显示规则是(分-秒.毫秒),即(00-00.000)。

6.端口地址分配

本次课程设计共使用了4种芯片,他们的端口号设置如表2.1所示。

表2.1端口地址分配表

芯片名称

端口号

含义

8255A

200H~203H

A端口、B端口、C端口、控制端口

8253

210H~213H

计数器0、计数器1、计数器2、控制端口

8259A

220H~221H

偶地址端口、奇地址端口

8279

230H、232H

数据端口、控制端口

 

 

 

7.子程序

子程序名称和功能如表2.2所示。

表2.2子函数表

名称

作用

名称

作用

i8255

初始化8255A芯片

i8253

初始化8253芯片

i8259

初始化8259A芯片,装中断向量

i8279

初始化8279芯片

int_timer0

时钟中断服务程序

display0

显示时钟

int_timer1

秒表中断服务程序

display1

显示秒表

int_pad

更改按键次数

 

 

 

 

 

 

2.2 模块的设计与实现

2.2.1主程序模块

主程序的主要功能是初始化各芯片,模式选择以及调用显示函数。

在初始化结束后,程序进入死循环,不断检测8255A芯片C端口的状态,CUP随时响应中断,更新时钟状态,把应显示的结果送入time0和time1中,以备显示。

主程序的流程如图2.1。

图2.1 主程序流程图

2.2.2初始化模块

初始化模块主要用于初始化各芯片,设定芯片工作方式,以及装入中断向量等。

各芯片初始化情况如表2.3所示。

表2.3芯片的初始化

芯片名称

初始化

8255A

C口低四位输入,控制字9BH

8253

计数器1:

先送低八位,后高八位,工作方式3,二进制计数,计数初值307;

计数器0:

先送低八位,后高八位,工作方式3,二进制计数,计数初值1000

8259A

ICW1:

上升沿触发,单片,写ICW4,控制字13H;

ICW2:

中断类型号30H,控制字30H;

ICW4:

正常EOI,8086/8088系统,控制字01H;

中断向量:

中断类型号30H、31H、32H对应的中断服务程序为int_timer0、int_timer1、int_pad

8279

清除显示和显示寄存器,控制字0D2H;

键盘显示命令,八个字符显示,左端输入方式,控制字00H

 

 

2.2.3时钟模块

时钟模块主要是为了实现时钟的计时和显示功能。

时钟的计时功能由int_timer0子程序实现,属于中断服务程序。

显示功能由display0程序实现,由主程序调用。

1.int_timer0

这个中断服务程序的中断类型号为30H。

8253芯片产生周期为1s的方波,当其上升沿到达8259A芯片的

引脚后,进入中断服务程序int_timer0。

进入int_timer0后,首先从内存中读出前一秒的时间的最后一位,即time0的最后一位,然后加1。

若有进位,则把当前这一位置零,然后读出前一位再加一,再判断是否有进位。

以此类推,直到没有进位或者达到计数最大值为止。

把修改后的时间存回内存中,以备显示。

2.display0

这是时钟模式的显示程序。

在时钟模式下会反复被主程序调用。

首先设置8279A芯片的显示方式。

然后读取time0的最后一位,用XLAT命令查tab表,将得到的结果输出到8279A芯片,然后在数码管上显示。

每显示两位数字,就在中间显示一条横线以分隔时分秒。

2.2.4秒表模块

与时钟模式类似,秒表模式也需要计时和显示功能。

除此之外,秒表模式还需要有按键控制功能用于开始、暂停计时和清零。

计时功能由int_timer1实现,属于中断服务程序。

显示功能由display1子程序实现。

按键功能由int_pad实现,属于中断服务程序。

1.int_timer1

这个中断服务程序的中断类型号为31H。

8253芯片产生周期为1ms的方波,当其上升沿到达8259芯片的

引脚后,进入中断服务程序int_timer1。

进入int_timer1后,首先从内存pad中读出按键次数。

若pad中的值为2,说明现在秒表处于停止状态,计时停止,不将秒表的计时值刷新,所以直接中断返回。

若pad中的值为1,说明秒表正在计时,应将秒表的计时值加1ms。

加1的方法与时钟加1的方法类似。

先读出time1的最低位,加1后判断进位。

最后中断返回。

若pad中的值为0,说明秒表要重新开始计时,需要将秒表清零。

即把time0中的每一位都改为零。

最后中断返回。

2.display1

这是秒表模式的显示程序,在秒表模式下会反复被主程序调用。

显示方法与display1类似。

不同的是,秒表的显示格式是00-00.000,即在显示秒的最后一位时,需要加一个小数点。

实现的方法是,先将这一位查表转化为可在数码管上的编码,由于数码管是否显示小数点是由编码的最高位指示的,所以只需将编码和80H进行或运算即可添加小数点。

最后将结果输出到数码管显示。

3.int_pad

这个中断服务程序的中断类型号为32H。

当手动脉冲被按下的时候,进入这个中断服务程序。

将pad中的值加1。

pad中的初始值为0,当加到3时,将其变为0。

2.3 程序连线图

图2.2程序连线图

第3章 调试及结果分析

3.1 调试步骤及方法

由于程序比较大,要整体调试会非常困难,不容易找出哪里有问题。

所以必须分而治之,将程序拆分开来调试。

由于整个程序被化分为了几个模块,所以,调试可以按模块来进行。

我将调试分为时钟模块和秒表模块。

因为时钟模块相对简单,所以先调试时钟模块,后调试秒表模块。

3.1.1程序的语法错误

由于对汇编语言还不熟悉,所以出现了较多的语法错误。

主要错误有以下一些。

程序格式错误。

例如,子程序最后应写RET。

寄存器寻址方式错误。

例如,在装中断向量的时候,应该是寄存器间接寻址,要加中括号。

跳转错误。

跳转的最大值不能超过一定的限度。

而且跳转的标号不能重复。

写地址错。

例如,在向某个端口送数据的时候,不能直接写地址,而必须将端口地址放入寄存器DX中,再送数据。

3.1.2时钟模块调试过程

时钟模块又分为显示模块和计数模块。

先调试显示模块,再调试计数模块。

1.显示模块调试中的问题及解决方案

问题1:

数码管没有任何反应

问题分析:

在初始化8279时,数码管就应该被清除显示,即会不显示任何东西,但是先在数码管上的数并没有被清除,说明了可能是8279工作错误。

检查程序后发现,8279的控制端口是231H,但是正确的应该为232H。

解决方案:

将控制端口号改为232H。

问题2:

数码管显示乱码

问题分析:

8279在初始化时已经清除了显示,但是还是显示乱码,说明是后送入的数有错。

解决方案:

检查程序后发现,在初始化各芯片的时候没有关中断和开中断,8259A可能错误的响应的中断。

问题3:

显示顺序颠倒

问题分析:

由于设置的是从左到右的八位显示,所以应该是送显示数的顺序不对。

解决方案:

将display0中的送显顺序颠倒。

2.计数模块调试中的问题及解决方案

问题1:

数码管显示结果一直为初始值

问题分析:

可能的原因是8253芯片没有产生方波或是8259A芯片没有响应中断。

解决方案:

将8259A和8253断开,然后将手动脉冲接到8259A的

中断引脚。

用手动脉冲来产生中断。

结果显示没有任何改变,说明中断有问题。

问题2:

中断响应问题,当接手动脉冲时,8259A的表现是不响应中断,时钟值不增加。

问题分析:

检查中断向量装入是否正确,再检查中断服务程序。

最后发现是中断服务程序有错。

在使用各寄存器之前,没有对其进行相应的保护,导致结果异常。

解决方案:

int_timer0开始时将AX/BX/CX/DX分别压入栈中,在程序结束时弹出。

问题3:

将8253和8259A相连后,只能响应一次中断。

问题分析:

在中断没有错误的情况下,只能是8253出错。

8259A响应了一次中断是因为8253在启动时,会从低电平变为高电平。

在这个上升沿,8259A响应了中断,将时钟加1。

但后来就没有响应中断。

再将8253接到LED灯上,发现其一直不亮,说明8253产生的波有错误。

检查8253的初始化后发现是送的计数初值和送数的方式都有错。

解决方案:

将计数初值和送数方式改正。

问题4:

时钟显示错位

问题分析:

在只送初值的情况下,显示没有问题,但当时钟增加的时候,显示会错位。

解决方案:

改变显示方式在显示之前将显示方式写为90H

3.1.3秒表模块调试过程

在时钟模块被调试完后,秒表模块就更容易调试了,因为两个模式的显示和计时都大同小异。

因此,调试过程中的主要问题出在秒表的控制上。

问题1:

按控制按钮秒表没有反应

问题分析:

可能是控制信号没有得到响应,检查程序发现,int_pad的中断类型号装入有错。

解决方案:

将中断类型好改正后问题解决了。

问题2:

在秒表模式下开始计后,若切换到时钟模式,则显示会发生错误。

问题分析:

肯能是两个模式有冲突的地方。

经过检查程序发现,可能是因为没有保护寄存器的原因。

解决方案:

int_timer1开始时将AX/BX/CX/DX分别压入栈中,在程序结束时弹出。

问题3:

时钟模拟计时误差大。

在时钟计时显示的时候,有时会停顿有时又加的比较快。

问题分析:

可能是因为CPU响应中断需要一定的时间,也可能是程序安排不恰当

解决方案:

优化程序的结构,适当改变8253的计数初值。

3.2 实验结果

本程序能够满足题目的所有要求,其测试结果如下:

1.将开关置于低电平,进入时钟模式。

数码管显示当前时间,并每秒加1。

2

0

-

1

3

-

5

9

 

 

 

 

 

 

 

 

2.将开关置于高电平,进入秒表模式。

数码管显示计数初值。

0

0

-

0

0.

0

0

0

 

 

 

 

 

 

 

 

3.在秒表模式下,按一下秒表控制按钮,开始计时,数码管不断刷新秒表计时。

0

0

-

0

0.

1

9

8

 

 

 

 

 

 

 

 

4.在秒表开始计数后,切换到时钟模式,时钟仍然在正常计时。

2

0

-

1

4

-

1

1

 

 

 

 

 

 

 

 

5.切换回秒表模式下第二次按下按钮,计时停止,显示最后计时结果。

0

0

-

5

1.

7

1

5

 

 

 

 

 

 

 

 

6.在秒表模式下第三次按下按钮,计时停止,结果清零。

0

0

-

0

0.

0

0

0

 

 

 

 

 

 

 

 

7.将时钟的初值设定为23时59分40秒,30秒后观察结果。

0

0

-

0

0

-

1

0

 

 

 

 

 

 

 

 

8.将秒表的初值设定为59分40秒000毫秒,30秒后观察结果。

5

9

-

5

9.

9

9

9

 

 

 

 

 

 

 

 

参考文献

[1]龚尚福.微机原理与接口技术[M].西安:

西安电子科技大学出版社,2003

[2]王忠民.微型计算机原理[M].西安:

西安电子科技大学出版社,2003

[3]沈美明,温冬婵.IBM-PC汇编语言程序设计[M].北京:

清华大学出版社,2001

[4]郑初华.汇编语言、微机原理及接口技术[M].西安:

西安电子科技大学出版社,2003

[5]仇玉章.32位微型计算机原理与接口技术[M].北京:

清华大学出版社,2000

[6]王富荣.微机原理与汇编语言实用教程[M].北京:

清华大学出版社,2009

[7]白中英.计算机组成原理[M].北京:

科学出版社,2000

[8]罗云彬.Windows环境下32位汇编语言程序设计[M].北京:

电子工业出版社,2002

附 录(源程序)

C8255 EQU203H

D8255CEQU202H

C8253 EQU213H

D82530EQU210H

D82531EQU211H

D82532EQU212H

C82590EQU220H

C82591EQU221H

C8279 EQU232H

D8279 EQU230H

time0EQU1000

time1EQU307

CODESEGMENT

ASSUMECS:

CODE

START:

JMPY

timer0  DB  2,0,1,3,5,9

timer1  DB  7DUP(0)

pad  DB  0

tab  DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0~9

Y:

 ;初始化各芯片

MOVAX,8100H

MOVDS,AX

CLI

CALLi8279

CALLi8259

CALLi8253

CALLi8255

STI

big_lp:

  MOVDX,202H  ;读8255C口

INAL,DX

CMPAL,01H  ;判断是什么模式

JEmode1

CALLdisplay0  ;时间模式,显示时间

JMPbig_lp

mode1:

  CALLdisplay1  ;秒表模式,显示秒表

JMPbig_lp

i8253:

 ;210,211,212,213分别为:

计数器0/计数器1/计数器2/控制端口

;CPU时钟频率为307200HZ

;初始化计数器1,先送低八位,后送高八位,工作方式3,二进制计数

MOVDX,C8253

MOVAL,76H

OUTDX,AL

;使OUT1产生周期为1ms的方波

MOVDX,D82531

MOVAX,time1

OUTDX,AL

MOVAL,AH

OUTDX,AL

;初始化计数器0,,先送低八位,后送高八位,工作方式3,二进制计数

MOVDX,C8253

MOVAL,36H

OUTDX,AL

;CLK0接OUT1,OUT0产生周期为1s的方波

MOVDX,D82530

MOVAX,time0

OUTDX,AL

MOVAL,AH

OUTDX,AL

POPBX

POPCX 

POPDX

POPAX

RET

i8259:

 ;端口地址为220H和221H

;ICW1,上升沿触发,单片,写ICW4

PUSHAX

PUSHDX

PUSHCX

PUSHBX

MOVDX,C82590

MOVAL,13H;  (00010011)

OUTDX,AL

;ICW2,中断类型号为30H,31H,32H

MOVDX,C82591

MOVAL,30H

OUTDX,AL

;ICW4,正常EOI,8086/8088系统

MOVAL,01H

OUTDX,AL

PUSHDS

MOVAX,0

MOVDS,AX

MOVBX,30H*4

MOVAX,OFFSETint_timer0

MOVDS:

[BX],AX

MOVAX,CS

MOVBX,30H*4+2

MOVDS:

[BX],AX

MOVBX,31H*4

MOVAX,OFFSETint_timer1

MOVDS:

[BX],AX

MOVAX,CS

MOVBX,31H*4+2

MOVDS:

[BX],AX

MOVBX,32H*4

MOVAX,OFFSETint_pad

MOVDS:

[BX],AX

MOVAX,CS

MOVBX,32H*4+2

MOVDS:

[BX],AX

POPDS

POPBX

POPCX 

POPDX

POPAX

RET

i8279:

 ;数据端口230H,控制端口232H

;清除显示和显示寄存器

MOVDX,C8279

MOVAL,0D2H

OUTDX,AL

;键盘显示命令,八个字符显示,左端输入方式

MOVAL,0

OUTDX,AL

RET

i8255:

 ;200,201,202,203分别为:

A口/B口/C口/控制端口

;只用到PC0,输入

MOVDX,C8255

MOVAL,9BH

OUTDX,AL

RET

int_timer0PROC

;1秒产生一次中断,每次中断时间加1秒

PUSHAX

PUSHDX

PUSHCX

PUSHBX

PUSHDI

LEADI,timer0

MOVBL,BYTEPTR[DI+5]

CMPBL,9

JEc0;      有进位

INCBL;    

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

当前位置:首页 > 人文社科 > 文学研究

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

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