微机原理课设-电子秒表(共27页).doc
《微机原理课设-电子秒表(共27页).doc》由会员分享,可在线阅读,更多相关《微机原理课设-电子秒表(共27页).doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上湖南文理学院芙蓉学院微机原理课程设计报告课程名称: 电子秒表 专业班级: 学生学号: 学生姓名: 指导教师: 完成时间: 评阅意见:评定成绩: 评阅教师 日期 专心-专注-专业目 录第1章 总体设计方案1.1 课程设计的内容和要求一、课程设计内容:设计一个带时间显示的电子秒表,具体内容如下:1. 电子秒表的初始状态为零,分别显示分、秒、毫秒;2. 设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;3. 有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。二、课程设计要求:1. 独立完成课程设
2、计任务;2. 通过老师当场验收;3. 交出完整的课程设计报告。1.2 课程设计原理题目要求实现电子秒表功能和显示当前时间的功能。这两部分的共同点是都需要实现时间显示和时间运行功能。除此之外,电子秒表还需要有开始计时和停止计时功能。因此电子秒表是本次课程设计的主要部分。在本次设计中主要使用了8255A并行接口芯片,8253定时/计数器,8259A中断控制器,8279键盘/显示芯片。具体原理和功能如下:1. 利用8255A芯片实现时钟和秒表之间的切换。将其连接到一个开关上,读取开关的电位,以此来判断是时钟模式还是秒表模式。2. 利用8253芯片计时。用8253的分频功能使其产生周期为1s和1ms的
3、方波,分别为时钟和秒表计时。3. 利用8259A芯片接收中断。中断分为三种类型,分别是一秒一次的时钟计时中断,一毫秒一次的秒表计时中断和控制秒表开始和停止的中断。4. 利用8279芯片在数码管上显示当前时间或秒表时间。1.3 课程设计思路由于要求实现时钟和秒表两种功能。因此需要设计时钟和秒表两个模式。时钟模式下,以秒为计时单位,计时功能和显示当前时间功能。秒表模式下,以毫秒为计时单位,有开始、停止和显示计时结果的功能。首先,将8255A芯片的PC0接口连接到开关。读C端口的值。判断是0还是1。0代表时钟模式,1代表秒表模式。然后,根据判断结果调用相应模式下的显示功能。这样不停地读8255A芯片
4、,然后判断,最后显示。构成一个死循环。若在这个过程中有中断,则会执行中断服务程序。时间中断由8253芯片产生,周期分别为1s和1ms。时钟的最大时间为23时59分59秒,超过后从零开始重新计时。秒表最大时间为59分59秒999毫秒。当计数大于这个值时,秒表不再更新。对秒表的控制中断由一个手动脉冲产生。将按键次数保存在名为pad的内存空间中。pad只能有0、1、2三个值,分别代表清零、开始计时和停止计时。8259芯片接收中断,并调用相应模式下的中断服务程序。在时钟模式下,直接将时间加一秒。在秒表模式下,或清零(重新开始,pad=0),或将时间加一毫秒(开始计时,pad=1),或不做任何处理(停止
5、计时,pad=2)。 要实现以上分析的功能,可以设计4个模块。模块名和作用见表1.1。表1.1 模块划分及功能描述模块名称功能主程序模块调用初始化模块,判断时间模式,调用相应的显示函数初始化模块初始化各芯片,装入中断向量时钟模块实现时钟计时和显示功能秒表模块实现秒表的计时、显示和控制功能1.4 设计环境硬件环境:AEDK实验箱软件环境:LCT88EA应用软件、WindowXP操作系统、PC机第2章 详细设计方案2.1 实现方法1. 内存分配程序中所需定义的内存单元含义如下:timer0:存放当前时钟的值,共6个字节。时、分、秒各占两个字节;timer1:存放秒表的计数值,共7个字节。分和秒各占
6、两个字节,毫秒占三个字节;pad:存放秒表的按键次数,共1个字节。可以有三种取值,0代表清零,1代表开始计时,2代表停止计时。当计数值大于2时,变为0重新开始计数;tab:存放09在数码管上显示的编码,共10个字节。2. 按键设置秒表有一个按钮,接手动脉冲和8259A芯片的中断引脚。每次按键,pad都做相应改变。按第一次开始计时(pad=1),按第二次计时暂停(pad=2),显示当前记录的时间,按第三次计时停止(pad=0),回到初始态。3. 时钟频率选择CPU的频率为。用8253芯片产生方波。计数器1的接CPU时钟脉冲,计数初值为307,使产生周期为1ms的方波。计数器0的接,计数初值为10
7、00,使产生周期为1s的方波。4. 中断设置8259A芯片的中断引脚、分别接8253芯片的、和手动脉冲。5. 显示设置显示功能由8279芯片和数码管实现。显示分为两种情况。时钟模式下的显示规则是(时-分-秒),即(00-00-00)。秒表模式下的显示规则是(分-秒.毫秒),即(00-00.000)。6. 端口地址分配本次课程设计共使用了4种芯片,他们的端口号设置如表2.1所示。表2.1 端口地址分配表芯片名称端口号含义8255A200H203HA端口、B端口、C端口、控制端口8253210H213H计数器0、计数器1、计数器2、控制端口8259A220H221H偶地址端口、奇地址端口82792
8、30H、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随时响应中断,更新时钟状态,把应显示的
9、结果送入time0和time1中,以备显示。主程序的流程如图2.1。开始设置数据段关中断初始化各芯片开中断读8255A芯片的C端口值PC=0调用display0,显示时钟调用display1,显示秒表是否图2.1 主程序流程图2.2.2初始化模块初始化模块主要用于初始化各芯片,设定芯片工作方式,以及装入中断向量等。各芯片初始化情况如表2.3所示。表2.3 芯片的初始化芯片名称初始化8255AC口低四位输入,控制字9BH8253计数器1:先送低八位,后高八位,工作方式3,二进制计数,计数初值307;计数器0:先送低八位,后高八位,工作方式3,二进制计数,计数初值10008259AICW1:上升沿
10、触发,单片,写ICW4,控制字13H;ICW2:中断类型号30H,控制字30H;ICW4:正常EOI,8086/8088系统,控制字01H;中断向量:中断类型号30H、31H、32H对应的中断服务程序为int_timer0、int_timer1、int_pad8279清除显示和显示寄存器,控制字0D2H;键盘显示命令,八个字符显示,左端输入方式,控制字00H2.2.3时钟模块时钟模块主要是为了实现时钟的计时和显示功能。时钟的计时功能由int_timer0子程序实现,属于中断服务程序。显示功能由display0程序实现,由主程序调用。1. int_timer0这个中断服务程序的中断类型号为30H
11、。8253芯片产生周期为1s的方波,当其上升沿到达8259A芯片的引脚后,进入中断服务程序int_timer0。进入int_timer0后,首先从内存中读出前一秒的时间的最后一位,即time0的最后一位,然后加1。若有进位,则把当前这一位置零,然后读出前一位再加一,再判断是否有进位。以此类推,直到没有进位或者达到计数最大值为止。把修改后的时间存回内存中,以备显示。2. display0这是时钟模式的显示程序。在时钟模式下会反复被主程序调用。首先设置8279A芯片的显示方式。然后读取time0的最后一位,用XLAT命令查tab表,将得到的结果输出到8279A芯片,然后在数码管上显示。每显示两位数
12、字,就在中间显示一条横线以分隔时分秒。2.2.4秒表模块与时钟模式类似,秒表模式也需要计时和显示功能。除此之外,秒表模式还需要有按键控制功能用于开始、暂停计时和清零。计时功能由int_timer1实现,属于中断服务程序。显示功能由display1子程序实现。按键功能由int_pad实现,属于中断服务程序。1. int_timer1这个中断服务程序的中断类型号为31H。8253芯片产生周期为1ms的方波,当其上升沿到达8259芯片的引脚后,进入中断服务程序int_timer1。进入int_timer1后,首先从内存pad中读出按键次数。若pad中的值为2,说明现在秒表处于停止状态,计时停止,不将
13、秒表的计时值刷新,所以直接中断返回。若pad中的值为1,说明秒表正在计时,应将秒表的计时值加1ms。加1的方法与时钟加1的方法类似。先读出 time1的最低位,加1后判断进位。最后中断返回。若pad中的值为0,说明秒表要重新开始计时,需要将秒表清零。即把time0中的每一位都改为零。最后中断返回。2. display1这是秒表模式的显示程序,在秒表模式下会反复被主程序调用。显示方法与display1类似。不同的是,秒表的显示格式是00-00.000,即在显示秒的最后一位时,需要加一个小数点。实现的方法是,先将这一位查表转化为可在数码管上的编码,由于数码管是否显示小数点是由编码的最高位指示的,所
14、以只需将编码和80H进行或运算即可添加小数点。最后将结果输出到数码管显示。3. int_pad 这个中断服务程序的中断类型号为32H。当手动脉冲被按下的时候,进入这个中断服务程序。将pad中的值加1。pad中的初始值为0,当加到3时,将其变为0。2.3 程序连线图CS=210H8253OUT1CLK0OUT0CS=220H8259AIR1IR0IR3手动脉冲8279CS=230H数码管CLK1CPU时钟脉冲8255APC0 CS=210H开关图2.2 程序连线图第3章 调试及结果分析3.1 调试步骤及方法由于程序比较大,要整体调试会非常困难,不容易找出哪里有问题。所以必须分而治之,将程序拆分开
15、来调试。由于整个程序被化分为了几个模块,所以,调试可以按模块来进行。我将调试分为时钟模块和秒表模块。因为时钟模块相对简单,所以先调试时钟模块,后调试秒表模块。3.1.1程序的语法错误 由于对汇编语言还不熟悉,所以出现了较多的语法错误。主要错误有以下一些。程序格式错误。例如,子程序最后应写RET。寄存器寻址方式错误。例如,在装中断向量的时候,应该是寄存器间接寻址,要加中括号。跳转错误。跳转的最大值不能超过一定的限度。而且跳转的标号不能重复。写地址错。例如,在向某个端口送数据的时候,不能直接写地址,而必须将端口地址放入寄存器DX中,再送数据。3.1.2时钟模块调试过程时钟模块又分为显示模块和计数模
16、块。先调试显示模块,再调试计数模块。1. 显示模块调试中的问题及解决方案问题1:数码管没有任何反应问题分析:在初始化8279时,数码管就应该被清除显示,即会不显示任何东西,但是先在数码管上的数并没有被清除,说明了可能是8279工作错误。检查程序后发现,8279的控制端口是231H,但是正确的应该为232H。解决方案:将控制端口号改为232H。问题2:数码管显示乱码问题分析:8279在初始化时已经清除了显示,但是还是显示乱码,说明是后送入的数有错。解决方案:检查程序后发现,在初始化各芯片的时候没有关中断和开中断,8259A可能错误的响应的中断。问题3:显示顺序颠倒问题分析:由于设置的是从左到右的
17、八位显示,所以应该是送显示数的顺序不对。解决方案:将display0中的送显顺序颠倒。2. 计数模块调试中的问题及解决方案问题1:数码管显示结果一直为初始值问题分析:可能的原因是8253芯片没有产生方波或是8259A芯片没有响应中断。解决方案:将8259A和8253断开,然后将手动脉冲接到8259A的中断引脚。用手动脉冲来产生中断。结果显示没有任何改变,说明中断有问题。问题2:中断响应问题,当接手动脉冲时,8259A的表现是不响应中断,时钟值不增加。问题分析:检查中断向量装入是否正确,再检查中断服务程序。最后发现是中断服务程序有错。在使用各寄存器之前,没有对其进行相应的保护,导致结果异常。 解
18、决方案:int_timer0开始时将AX/BX/CX/DX分别压入栈中,在程序结束时弹出。问题3:将8253和8259A相连后,只能响应一次中断。问题分析:在中断没有错误的情况下,只能是8253出错。8259A响应了一次中断是因为8253在启动时,会从低电平变为高电平。在这个上升沿,8259A响应了中断,将时钟加1。但后来就没有响应中断。再将8253接到LED灯上,发现其一直不亮,说明8253产生的波有错误。检查8253的初始化后发现是送的计数初值和送数的方式都有错。解决方案:将计数初值和送数方式改正。问题4:时钟显示错位问题分析:在只送初值的情况下,显示没有问题,但当时钟增加的时候,显示会错
19、位。解决方案:改变显示方式在显示之前将显示方式写为90H3.1.3秒表模块调试过程在时钟模块被调试完后,秒表模块就更容易调试了,因为两个模式的显示和计时都大同小异。因此,调试过程中的主要问题出在秒表的控制上。问题1:按控制按钮秒表没有反应问题分析:可能是控制信号没有得到响应,检查程序发现,int_pad的中断类型号装入有错。解决方案:将中断类型好改正后问题解决了。问题2:在秒表模式下开始计后,若切换到时钟模式,则显示会发生错误。问题分析:肯能是两个模式有冲突的地方。经过检查程序发现,可能是因为没有保护寄存器的原因。解决方案:int_timer1开始时将AX/BX/CX/DX分别压入栈中,在程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 电子 秒表 27
限制150内