微机原理课设电子秒表.docx
- 文档编号:1153109
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:26
- 大小:65.60KB
微机原理课设电子秒表.docx
《微机原理课设电子秒表.docx》由会员分享,可在线阅读,更多相关《微机原理课设电子秒表.docx(26页珍藏版)》请在冰豆网上搜索。
微机原理课设电子秒表
湖南文理学院芙蓉学院
微机原理课程设计报告
课程名称:
电子秒表
专业班级:
学生学号:
学生姓名:
指导教师:
完成时间:
评阅意见:
评定成绩:
评阅教师日期
第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可能错误
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 电子 秒表
![提示](https://static.bdocx.com/images/bang_tan.gif)