欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    [工学]微机课程设计报告数字时钟.doc

    • 资源ID:4532902       资源大小:484.21KB        全文页数:31页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [工学]微机课程设计报告数字时钟.doc

    微机课程设计报告班级:组长:组员:完成日期:指导老师:目 录1 概述31.1设计目的31.2 设计要求42 概要设计42.1设计环境与器材42.2设计思想52.3电路原理与主要心片功能52.3.1 8253主要功能62.3.2 8255主要功能72.3.3 8259主要功能82.3.4 8279主要功能103 详细设计113.1显示模块的实现123.2转换为段码模块133.3修改时间模块的实现143.4中段计时模块的实现173.5主程序流程图174 接口电路逻辑图184.1方案一实验连接线路图20 4.2 方案二实验连接线路图 215 实现功能与操作说明225.1功能225.2操作说明226 调试记录及误差分析226.1调试结果记录226.2 误差分析 237 课程设计工作日志 238 总结体会249 附录(程序清单)25一、 概述1.1 设计目的1)题目: 设计数字时钟:实时显示时间于LED数码管,并可以修改时间;2)设计目的:通过一个学期对微机原理与接口技术学习,我们掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让我们在学完该课程之后,进行一次课程设计,使我们将课堂所学的知识和实践有机结合起来,初步掌握接口电路设计的方法,提高我们学生的分析和解决实际问题的能力。通过设计实践,还培养了我们查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。1.2 设计要求本次课程设计的内容为电子时钟的设计与实现,利用8253可编程定时计数器,8259中断控制器,8255可编程并行接口芯片和8279让六个七段数码管显示时分秒设计一个电子钟的电路。利用定时器从0开始进行计时,将计时的结果可以分别通过软件延迟和硬件中断两种方式显示在数码管上。每隔1秒,秒钟计时一次,到60秒,分钟加1,秒钟清零;到60分小时加1,分钟清零;到24时时小时、分钟、秒钟都清零,重新开始计时,这时记做是一天24时。在本次做的数字时钟中我小组还做出了进行修改时间和在到整点时进行声音提示功能。总体内容:设计一数字电子时钟,能在数码管上显示时间并计时。二、概要设计2.1设计环境与器材(1)电脑一台 功能:用于对程序的进行编译测试等,同时还需要对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。(2)实验箱一台 功能:此设备必须能提供我们小组做的数字时钟所需的8253、8255、8259、8279和显示灯等必要芯片。并且能通过接受PC机传来的信息,显示出相应的功能。以支持电子时钟的实现。(3)导线若干条 功能:用于电路和芯片之间的连接。2.2设计思想这次的课程设计数字时钟我小组选用了两种方案完成,这边我们主要讲第二种方案的设计思想,第二种方案是通过硬件中断的方法来实现。该方案主要是由以下模块组成:一.将时分秒转换为段码;二.显示时分秒模块;三中断计时模块;四.修改时间模块;在整个电子钟的设计中,我们使用8253用于定时功能,由于8259的中断只能是电平与边缘触发,我们这边选择用的是边缘触发。我们选择8253初始化控制字为35H,工作在方式2,在每次的计数初值的N-1时产生一个脉冲。在CLK0引脚接入1MHZ的时钟周期,而将计数初值通过两个计数器写为1000000时,继而在OUT1会每1s产生一个脉冲,然后将输出的脉冲送到8259的IR0产生中断,产生的中断信号去自动修改秒针,根据秒钟的判断再对时和分进行计数。电子时钟的显示格式 HH.MM.SS 由左到右分别为时、分、秒,六个数码管动态显示时、 分、秒的当前值。最大记时 23:59:59 超过这个时间时分秒位都清零重新开始。 对于本次实验的一个功能:修改时间功能,该功能主要通过设置8255的工作方式为A口输入,然后将8个开关分别接A口端,通过读入8个开关的状态,判断要进行的修改操作。本实验我们设置8个开关所对应的功能:K0:0表示不修改时间,拨到1状态表示要进行修改时间操作;K1: 拨到1状态可以实现时钟全部清零的功能;K2: 对数字钟的秒进行加操作;K3: 对数字钟的秒进行减操作;K4: 对数字钟的分进行加操作;K5: 对数字钟的分进行减操作;K6: 对数字钟的时进行加操作;K7: 对数字钟的时进行减操作。对于本实验的另一个功能就是在我们在程序的8259里边调用中断函数时进行判断时、分、秒有没超过最大值时,如果到了整点即当分钟达到60min要执行时加1时,系统会通过滴一声来提示。该功能主要是通过8253的计数器2,提供一个声音频率,再对8253初始化一个工作方式,通过计数器2的out2输入该频率的声音到喇叭。2.3电路原理与主要芯片功能本次设计实现的电子时钟的功能,电子时钟主要采用可编程并行接口芯片8255A、中断控制器2859A、定时/计数器8253、LED数码显示管和两个按键来设置一个控制灯的开关来组合设计。其中主要用8259A的IR7中断服务程序完成秒、分、时的运算即计时功能,IR6的中断服务程序完成调时、调分功能。8253用来产生50ms的脉冲作为IR7的中断请求信号。8255A负责将内存里的时位、分位和秒位数值输出到数码管。8279A用来控制显示器显示时钟。按键K1+和K2+分别作为IR2和IR6的中断请求信号。按键K1+启动/关闭对时功能,它决定是否屏蔽IR7和IR6中断源。2.3.1 8253主要功能1、主要功能:(1)具有三个独立的16位减法计数器;(2)每个计数器可按二进制或十进制计数;(3)每个计数器的计数速率可达2MHZ;(4)每个计数器有六种工作方式;(5)全部输入输出都与TTL电平兼容。2、8253内部结构: 图2.0 8253内部结构3、8253的控制字: 控制字的作用是决定8253各计数器工作方式。 控制字寄存器实际上是3个,分别控制三个计数器,但它们的端口地址相同。D7、D6 :计数器选择 00 计数器0; 01 计数器1 10 计数器2; 11 非法D5、D4 :读写格式 00 计数器锁存;使当前计数值锁存,以后再读取;因计数器为16位,而数据线8位,故需锁存,分次读取。01 只读写计数器的低8位,高8位自动为0; 10 只读写计数器高8位,低8位自动为0; 11 先读写计数器低8位,再读写高8位。D3、D2、D1 :计数器工作方式 000 方式0; 001 方式1; ×10 方式2; ×11 方式3; 100 方式4; 101 方式5;D0 :计数数制,决定计数器按二进制计数或BCD码(十进制)计数。 0 二进制; 1 BCD码(十进制)2.3.2 8255主要功能8255 可编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片, 图2.1 内部结构及引脚它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间 的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。用+5V 单电源供电,能在以下三种方式下工作:方式0-基本输入/出方式、方式1-选通输入/出方式、方式2-双向选通工作方式。8255 的内部结构及引脚如图2.1所示:8255 工作方式控制字和C口按位置位/ 复位控制字格式如图3-7-2 所示:图2.2 置位/ 复位控制字格式2.3.3 8259主要功能中断控制器8259A 是Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级 排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编 程来设定。同时,在不需增加其他电路的情况下,通过多片8259A 的级连,能构成多达64 级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应 和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。8259A 的内部结构和引脚如图2.3所示:图2.3 内部结构和引脚8259A 的命令共有7 个,一类是初始化命令字,另一类是操作命令。8259A 的编程就是根据 应用需要将初始化命令字ICW1-ICW4 和操作命令字OCW1- OCW3 分别写入初始化命令寄存器 组和操作命令寄存器组。OCW1-OCW3 各命令字格 式如图2.4所示,其中OCW1 用于设置中断屏蔽操作字,OCW2 用于设置优先级循环方式和中断结束方式的操作命令字,OCW3 用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设 置对8259 内部寄存器的读出命令。图2.4 OCW1-OCW3 各命令字格2.3.4 8279主要功能8279是可编程的键盘、显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64B RAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。 图2.5引脚图图2.6 8279命令字如上图,8279的一条命令由两大部分组成,一部分表征命令类型,为命令特征位,由命令寄存器高3位D7-D5决定。D7-D5三位的状态可组合出8种形式,对应8类命令。另一部分为命令的具体内容,由D4-D0决定。每种特征所代表的命令如表3.3所示:D4、D3两位用来设定4种显示方式,D2-D0三位用以设定8种键盘/显示扫描方式, 分别如表3.4和表3.5所示。三、详细设计3.1显示模块的实现使用8279控制,用数码管的显示功能来设计,显示部分用八只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这八只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。电子时钟用到的是0-9十个数字,它们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。该模块主要是将运算模块和对时模块运算出来并存放在内存单元里的十六进制时位、分位和秒位数值转化为十进制,并通过八只数码管显示出来,其中实验室中提供给我们的实验箱因为数码管只有六个,此模块实现的硬件是使用实验箱中的LED单元,采用软件译码,即在程序中设置一个段选码表。CPU直接往LED输出八段代码,省去了硬件译码器。显示的基本代码如下:mov cx,8xz: mov dx,b79 ;逐个清零 mov al,0 out dx,al ;清空显示 loop xz mov cx,8 mov dx,b79 lea si,dis ;缓冲区dis中存放有八位数码管所要显示的值play: mov al,si out dx,al inc si loop play流程图:开始cx赋值8循环控制将数码管清零cx 赋值8循环控制将dis 存放的段码在数码管上显示(即显示时间)返回图4.1 显示模块流程图 3.2转换为段码模块流程图:开始将dis的有效地址给si将秒的十位和个位分离存放在si和si+1中将分的十位和个位分离存放在si+2和si+3中将时的各位和十位分离存入si+4和si+5中将led的有效地址给bx将cx赋值8通过循环控制将dis中的数值转换成断码返回 图4.2 转换为段码模块流程图 3.3修改时间模块利用8个拨码开关,每拨动一次开关,对应的时钟、分钟、秒钟做相应的修改操作。流程图:开始初始化8255读A口将A口的原来的值读入ah将当前的值读入akou中比对A口的两个状态,找出是否有值不同判断最后一位是否为0返回YNal 左移一位对时的十位修改al 左移一位对时的个位修改判断时是否大于等于24YN时清零al 左移一位对分的十位修改al 左移一位对分的个位修改判断分是否大于等于60Y分清零Nal 左移一位对秒的十位修改al 左移一位对秒的个位修改判断秒是否大于等于60Y分清零Nal 左移一位adc bl 0判断bl是否小于1N 时分秒清零Y调用transaction函数将时间转换成段码调用show函数将时间在数码管上显示读A口判断最后一位是否为0Y返回N 图4.3 修改时间模块流程图 3.4中段计时模块流程图:开始秒加1判断秒是否等于60分加1Y判断分是否等于60Y时加1判断时是否等于24Y时分秒清零清中断NNN返回 图4.4 中断计时模块流程图 3.5主程序流程图开始将段地址放入ds中设定8279工作方式设定8255工作方式调用函数设定8253工作方式,选择工作方式3,采用二进制计数,先读第八位,再读高八位,通过计数器0和计数器1数个脉冲十的六次方产生1秒的时间调用函数设定8259的工作方式,初始化icw1,命令字13H,初始化icw2,选择ir0作为中断,指令八号中断,初始化icw4其命令字为1启用中断调用transaction函数将时间转换成段码调用show函数将时间在数码管上显示关闭中断调用do8255函数实现对时间修改图4.5 主程序模块流程图 四、接口电路逻辑图4.1方案一实验连接线路图8279的接线如下: CS79接地址208-20F;8255的接线如下: CS55接地址200-207, PA0-PA7分别接相应的开关K0-K7; 接线图见纸质附表(1)。4.2 方案二实验连接线路图8253的接线如下:CLK0和CLK2都接1M脉冲,OUT0接CLK1,OUT1接8259的IR0,OUT2接音乐发生器CATE0、GATE1和GATE2都接+5V;CS53接地址218-21F8259的接线如下: Cs59接地址210-217;8279的接线如下: Cs79接地址208-20F;8255的接线如下: CS55接地址200-207, PA0-PA7分别接相应的开关K0-K7; 接线图见纸质附表(2)。五、系统功能与操作说明5.1功能系统的功能主要是实现一下几个方面的内容:1)在程序运行前给时间的时、分、秒分别赋个初值,程序将时间存入内存中,然后一运行程序时就会显示初始化的时间;2)程序设计了通过8253定时(1s为周期产生一个方波)、8259提供中断来使秒钟加1,使能具有时钟计时功能;3)通过8255芯片的A口接到八个拨动开关上,设计了修改时间的操作功能;4)先在中断程序那边进行秒加1,并对秒、分、时判断中通过判断分是否达到最大值即60分钟,如果是,则说明到整时了,再通过8253的计数器2,输出预先设定好的一定频率的声音,作为该系统的一个整点报时的功能;5)我们通过右数起开关2的状态来决定是否要开始设定一个闹钟时间,拨到1状态表示进入设置闹钟状态,此时第38个开关分别对应闹钟的时、分、秒的修改。当时间运行到设定的闹钟时间时也是通过8253的计数器2,输出预先设定好的一定频率的声音提示闹钟时间到了,这就是闹钟的功能。5.2操作说明这边的操作说明主要是针对在运行程序后要进行修改时间时的操作,修改主要是由八个开关来控制。从右数起,第一个拨到1状态表示当前可以执行修改时间的操作了;第二个拨到1表示对时钟进行闹钟设定;第三个表示对秒钟执行加操作;第四个表示对秒钟执行减操作;第五个表示对秒钟执行加操作;第四个表示对秒钟执行减操作;第六个表示对分钟执行加操作;第四个表示对分钟执行减操作;第七个表示对时钟执行加操作;第八个表示对时钟执行减操作;确认修改后即可通过将第一个开关拨回0状态,让数字时钟继续进行计时。对于闹钟功能,开关2的状态来决定是否要开始设定一个闹钟时间,拨到1状态表示进入设置闹钟状态,此时第38个开关分别对应闹钟的时、分、秒的修改。当时间运行到设定的闹钟时间时也是通过8253的计数器2,输出预先设定好的一定频率的声音提示闹钟时间到了。六、调试记录及误差分析6.1 调试结果记录A,之前调试程序时,使用了jnz,jz等条件转移指令,出现了错误提示:跳转的字节数超出范围 改进方法:使用范围更大的jmp无条件转移指令B,实验调试过程中,我们发现中断程序没有运行,在检查完程序后,可以确定程序没有错误,之后我们猜测可能是8259芯片的问题,我们换了台实验机,全速运行之后,秒钟就可以跳动了。调试结果是硬件问题,问题已解决。6.2 误差分析用秒表对时钟进行误差分析:对数字时钟五分钟的走动进行五次时间误差测试,结果为:时钟:00:00:05:00 秒表:00:04:59:60 相差:时钟:00:00:05:00 秒表:00:05:00:10相差:时钟:00:00:05:00 秒表:00:05:00:13相差:时钟:00:00:05:00 秒表:00:04:59:87相差:时钟:00:00:05:00 秒表:00:04:59:76相差:误差分析: 我们运用了两个方案,这是用硬件中断来实现时钟的,会比用软件中断的来得准确,每五分钟的误差,差不多都是差零点几,去掉人为的不同步原因,硬件中断是比较准确的。t=(0.4+0.1+0.13+0.13+0.24)/5=0.18s,即平均每五分钟差0.18秒。则一小时约慢了2.16秒。总结体会九、附录(程序清单)方案一:Z8279 equ 20AhD8279 equ 208h ; 8279端口地址Ledmod equ 0Ledfeq equ 38h cs55a equ 200hcs55b equ 201hcs55 equ 203hcode segmentassume cs:codestart:mov ax,csmov ds,axmov dx,z8279mov al,ledmod ;设定8279工作模式out dx,almov al,ledfeq ;扫描频率out dx,almain: call readsec ;读秒 call timer call turn ;将时分秒转换为段码 call display ;显示时分秒 call do8255 jmp mainexit1: mov dx,cs55 mov al,90h out dx,al mov al,7fhpm1: mov dx,cs55b out dx,al push ax call readsec pop ax ror al,1 jmp pm1 mov ah,4ch int 21hLed db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhsec db 0min db 45hour db 08dis db 8 dup(0) ;显示缓冲区akou db 0;=timer proc cmp sec,59 ;59秒 jae min1add jmp near ptr goon1 min1add: inc min mov sec,0 cmp min,59 jae hour1add jmp goon1hour1add: inc hour mov min,0 cmp hour,24 jb goon1 ;清时钟 mov hour,0 mov min,0 mov sec,0goon1: rettimer endp;=readsec proc near ;读秒 push cx push bx mov bx,4 lpp: mov cx,0ffffhdelayaa: loop delayaa dec bx cmp bx,0 jne lpp inc sec pop bx pop cx retreadsec endp turn proc near ; 转换函数 lea si,dis mov bl,10 xor ax,ax ;清零 mov al,sec div bl mov si,ah ;秒的个位 inc si mov si,al ;秒的十位 add si,3 xor ax,ax ;清零 mov al,min div bl mov si,ah ;分的个位 inc si mov si,al ;分的十位 inc si xor ax,ax ;清零 mov al,hour div bl mov si,ah ;时的个位 inc si mov si,al ;时的十位 mov cx,8 lea si,dis lea bx,ledaskii: ;查表转换为段码 mov al,si xlat mov si,al inc si loop askii retturn endp;=display proc near ;显示函数 mov cx,8Xz:mov dx,d8279 ;逐个清零 mov al,0 out dx,al;清空显示loop xz mov cx,8 mov dx,d8279 lea si,display: mov al,si out dx,al inc si loop play retdisplay endp;=do8255 proc near push ax ;8255初始化 mov dx,cs55 mov al,90h ; 8255控制,A口输入 out dx,al tb1: ;调表 mov dx,cs55a in al,dx ;读A口 mov ah,akou xor ah,al mov akou,al ;保存当前A口状态 test al,01h jz end1 ;调表0,结束 shl ah,1 adc hour,0 shl ah,1 sbb hour,0 shl ah,1 adc min,0 shl ah,1 sbb min,0 shl ah,1 adc sec,0 shl ah,1 sbb sec,0 call turn call display mov dx,cs55a in al,dx test al,01h jnz tb1 end1: pop ax retdo8255 endpcode ends end start方案二:ledmod equ 0 ;工作模式ledfeq equ 38h ;扫描频率 a55 equ 200hb55 equ 201hc55 equ 203h ;8255端口地址a79 equ 20Ah ;8279端口地址b79 equ 208h a59 equ 210h ;8259端口地址b59 equ 211ha53 equ 218hb53 equ 219hc53 equ 21ahd53 equ 21bh ;8253端口地址code segmentassume cs:codestart:climov ax,csmov ds,ax mov dx,a79mov al,ledmod ;设定8279工作模式out dx,almov al,ledfeqout dx,al ;扫描频率mov dx,c55 mov al,80h out dx,al call d8253init call d8259initstimain: call transation ;将时分秒转换为段码cli call show ;显示时分秒 sticli call do8255sti jmp mainled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhsec db 56min db 58hour db 22dis db 8 dup(0) ;显示缓冲区akou db 0;=d8253init proc near mov dx,d53 mov al,36h ;控制字 out dx,al mov ax,1000 ;计0 初值 mov dx,a53 out dx,al mov al,ah out dx,al mov dx,d53 mov al,76h out dx,al mov dx,b53 mov ax,1000 out dx,al mov al,ah out dx,al retd8253init endp;=d8259init proc mov al,13h ;icw1 mov dx,a59 ;8259初始化 out dx,al mov al,8 ;icw2 mov dx,b59 out dx,al mov al,1 ;icw4 out dx,al mov ax,0 push ds mov ds,ax ;写8259中断程序的入口地址 lea ax,int0 mov ds:4*8,ax mov ax,cs mov ds:4*8+2,ax in al,dx and al,0feh out dx,al mov dx,c55 ;8255初始化 mov al,80h out dx,al pop ds retd8259init endp;=int0 proc nearcliinc sec cmp sec,60 ;60秒 jae min1add jmp goon1 min1add: inc min mov sec,0 cmp min,60 jae hour1add jmp goon1hour1add: inc hour mov ax,08e5h push ax mov dx,d53 mov al,0b7h out dx,al pop ax mov dx,c53 out dx,al mov al,ah out dx,almov cx,0bb: loop bb mov ax,33h out dx,al mov al,ah out dx,al mov min,0 cmp hour,24 jb goon1

    注意事项

    本文([工学]微机课程设计报告数字时钟.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开