微机原理课程设计报告-数字时钟的实现(附代码)_第1页
微机原理课程设计报告-数字时钟的实现(附代码)_第2页
微机原理课程设计报告-数字时钟的实现(附代码)_第3页
微机原理课程设计报告-数字时钟的实现(附代码)_第4页
微机原理课程设计报告-数字时钟的实现(附代码)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

资料 合肥工业大学合肥工业大学 计算机与信息学院计算机与信息学院 课程设计课程设计 课课 程 微机原理与接口技术设计程 微机原理与接口技术设计 专业班级 计算机科学与技术专业班级 计算机科学与技术 x x 班班 学学 号 号 姓姓 名 名 资料 一 设计题目及要求 一 设计题目及要求 课题 6 数字时钟 1 通过 8253 定时器作产生秒脉冲定时中断 在中断服务程序中实现秒 分 小时的进位 24 小时制 2 在七段数码管上显示当前的时分秒 例如 12 点 10 分 40 秒显示为 121040 3 按 C 可设置时钟的时间当前值 对准时间 2 2 设计思想 设计思想 总体思想 总体思想 1 1 功能概述 功能概述 实验箱连线 本实验建立在 Dais 实验箱基础上完成的基本连线及程序如下 138 译码器 A B C D 分别连接 A2 A3 A4 GS y0 连接 8253 的 CS 片选信号 y1 连接 8259 的 CS 片选信号 8253 连线 分频信号 T2 接 8253 的 CLK0 8253 的 OUT0 接 8259 的 IR7 8253 的 gate 信号接 5V 8259 连线 8259 的数据线接入数据总线 资料 本程序包括显示模块 键盘扫描模块 时间计数模块 设置模块等几个模块 1 程序运行后 LED 显示 000000 初始值 并且开始计数 2 按 C 键进行设置初始时间 考虑到第一个数只能是 0 1 2 当第一个数显示 2 时第二个数只能显示 0 4 同理下面各位应满足时钟数值的合理的取值 3 在手动输入初始值时 按 D 键进行回退 1 位修改已设置值 连续按 D 键可以全 部进行删除修改 2 2 主程序设计主程序设计 主程序中完成通过调用子程序完成对 8253 及 8259 的初始化 对 8259 进行中断设置 主要在显示子程序和键盘子处理程序之间不断循环 8253 每一秒给 8259 一个刺激 当 8259 接受到刺激后会给 CPU 一个中断请求 CPU 会转去执行中断子程序 而中断子程序 设置成时间计数加 即完成电子表的整体设计 详细流程图见图三 1 3 3 LEDLED 显示子程序设计显示子程序设计 本程序显示部分用了 6 个共阳极 LED 作为显示管 显示程序要做到每送一次段码就送 一次位码 每送一次位码后 将位码中的 0 右移 1 位作为下次的位码 从而可以实现从左 到右使 6 个 LED 依次显示出相应的数字 虽然 CPU 每隔一定时间便执行显示程序 但只 要这个时间段不太长 由于人眼的视觉作用 就可以在 6 个 LED 上同时见到数字显示 4 4 键盘扫描子程序设计键盘扫描子程序设计 本程序需要用键盘对时间的初始值进行设置 因此对键盘扫描的子程序需要满足的功 能如下 判断是否是 C 键 若不是就返回至主程序 若是 C 键就开始对时间初始值进行设置 同时因注意到第一个值不可以超过 2 第一个数是 2 时第二数不能超过 4 余下的同理要 满足时间数值的取值范围呢 若不是合法输入不予反应继续等待输入 当遇到输入数值错 误时可以按下 D 键进行删除一位重新设置 当 6 位初始值全部设置成功后 电子表将自动 开始走表 5 时间运算子程序设计时间运算子程序设计 该子程序的主要功能是对时 分 秒的运算 并把运算出的最终结果存到事先已经开 资料 辟的内存单元里 以便显示模块即时地显示出来 该模块可以细分为秒定时模块和运算模 块 定时模块交由 8253 通过对分频出来的频率进行放大至 1 秒 因此每隔 1 秒对 8259 进 行刺激 进而使 CPU 处理中断子程序及时间运算的子程序 另外 在中断服务程序里 必须对秒 分和时的单元内的数值进行判断 当秒加到 60 时 分必须加 1 秒清零 当 分加到 60 时 时加 1 分清零 当时加到 24 时 直接清零 6 中断设置中断设置 8259 芯片 在该系统中 8259 主要担负着处理 8253 的一秒时间的脉冲信号 通过 8253 的每秒的刺激下向 CPU 发送中断请求 进而 CPU 处理担负时间计算的中断子程序 即可完成每秒钟时间自加 1 秒的功能 因此 8259 的设置应为 ICW1 单片 边沿触发 写入 ICW4 ICW2 写入 08H ICW3 7 定时器设置定时器设置 8253 芯片 在系统中定时 计数芯片 8253 主要与 CPU 及中断扩展芯片 8259 之间存 在着连接关系 8253 主要担负着时间计时的功能 通过对分频单元提供的频率信号进行方 法产生一秒时间为周期的脉冲信号 因此 8253 的设置应为 控制口写入 00110100b 计算器 0 选择先低后高两字节读或写 方式 2 二进制 计数 计数器 0 写入 38400 时间系数通过计算可以产生 1 秒的脉冲信号 8 8 编址及控制字确定编址及控制字确定 1 8259 端口及控制字设置 Port 8259 0 EQU 0FFE0H Port 8259 1 EQU 0FFE1H 8259 初始化设置 ICW1 00010011 边沿触发 单片方式 写入 ICW4 ICW2 00001000 INIT8259 MOV AL 13H MOV DX Port 8259 0 OUT DX AL MOV AL 08H MOV DX Port 8259 1 OUT DX AL MOV AL 09H OUT DX AL MOV AL 7FH IRQ7 OUT DX AL RET 2 8253 端口及控制字设置 资料 PORT 8253 00 EQU 0FFE4H PORT 8253 01 EQU 0FFE5H PORT 8253 10 EQU 0FFE6H PORT 8253 11 EQU 0FFE7H 8253 初始化设置 INITCLK0 MOV DX PORT 8253 11 MOV AL 00110100B OUT DX AL MOV DX PORT 8253 00 CLK0 MOV AX 38400 OUT DX AL MOV AL AH OUT DX AL RET 2 LED 端口 OUTSEG EQU 0FFDCH 段控制口 OUTBIT EQU 0FFDDH 位控制口 键扫口 3 键盘端口 IN KEY EQU 0FFDEH 键盘读入口 4 LED 数码管字型码 LEDMAP DB 0C0H 0F9H 0A4H 0B0H 099H 092H 082H 0F8H DB 080H 090H 088H 083H 0C6H 0A1H 086H 08EH DB 0BFH 5 键码定义 KEYTABLE DB 07H 04H 08H 05H 09H 06H 0AH 0BH DB 01H 00H 02H 0FH 03H 0EH 0CH 0DH 资料 3 3 功能流程图 功能流程图 1 1 主程序流程图主程序流程图 资料 2 2 LEDLED 显示子程序流程图显示子程序流程图 资料 3 3 按键处理子程序流程图 按键处理子程序流程图 资料 4 4 中断子程序 中断子程序 时间计数子程序流程图时间计数子程序流程图 资料 4 4 结果讨论 结果讨论 1 1 实验结果 实验结果 程序运行 数码管开始从 000000 走表 按 C 键后显示 开始对时钟 进行初始值设置 设置初始值时可以按 D 键进行回退修改 2 2 问题解决 问题解决 1 添加 D 键的回退删除功能 在 C 键功能实现区域里不断检测 D 键是否按下 若 按下则将 LED 上一位数码管设置成 并将设置时间的地址回退 1 及可完成对 D 键的 功能设置 2 调试程序时发现时钟初始值可以设置 D 键回退功能也是可以的 8253gate 信 号也正确连接着 但是初始值设置完后时钟并没有走表 于是将 8253 的输出端的线接入 至手动的单脉冲的发生器 进行手动给 8259 刺激 结果时钟开始随手按动开始走表 可 以断定该 8253 芯片可能已经损坏 换了个试验箱后遇到了同样的情况 直至换了功能正 常的实验箱后实验现象才正确展现 3 3 功能完善功能完善 可以在课题要求的基础上添加一些功能 使得电子时钟的功能更加完善 1 添加暂停功能 按键 A 时间暂停 再按 A 键时间继续走 2 添加闹铃功能 按键 B 设置闹铃时间 时间到时控制鸣笛闹铃 3 添加倒数计时的功能 按键 E 设置倒数的初始值 时间到即鸣笛闹铃 可以看出本次课程设计的课题可以完善的地方有很多 如果只满意于已完成的则大错 特错了 课程设计虽然已经结束 但是课下仍然可以对自己的课题进行进步的探索 不断 完善 不断追求完美 这也是我们需要的 4 4 实验总结 实验总结 1 通过此次课程设计 将微机原理与接口技术课程所学的知识运用到了实际操作中 并学会了数码管显示电子时钟的制作方法 实验过程中遇到了一些困难和问题 通过同学 之间的讨论和查找资料也一一攻破 顺利完成了课程设计 实验结果符合课题要求 2 中断服务程序设计时还应注意以下几个问题 A 因为 8086CPU 在响应中断时不能自动地保护它的各寄存器 除标志寄存器外 内容 虽然可用寄存器在主程序和中断服务程序之间传送参量和结果 但这样做极易 引起意想不到的错误 所以应当避免 而采用指定内存单元进行参数传递 B 使用堆栈实现保护现场与恢复现场 使用时要注意堆栈的先进后出的特性 同 时要确保堆栈有足够的空间 防止堆栈溢出 C 只有中断服务程序用到的那些寄存器 标志寄存器除外 的内容才需要加以保 护 D 在从中断服务程序返回之前 即使 CPU 处于关中断状态也不必开中断 在执 行 IERT 指令后 CPU 自动恢复中断前标志寄存器 3 调试的时候因为遇到两个实验箱都是有问题的 本来以为是程序出现了问题 来 回检查程序 直到最后又换了个实验箱才知道程序是正确的 实验箱是实验的基础 我们 做实验时都应该细心爱护 弄坏了芯片 给自己和他人都带来了不便 资料 附录 实验代码 附录 实验代码 完整的源程序 CODESEGMENT ASSUME CS CODE DS CODE ES CODE ORG 3400H Start JMP program LedMap 八段管显示码 db 0c0h 0f9h 0a4h 0b0h 099h 092h 082h 0 f8h db 080h 090h 088h 083h 0c6h 0a1h 086h 0 8eh db 0bfh db 0f7h KeyTable 键码定义 db 07h 04h 08h 05h 09h 06h 0ah 0bh db 01h 00h 02h 0fh 03h 0eh 0ch 0dh OUTSEG equ 0ffdch 段控制口 OUTBIT equ 0ffddh 位控制口 键扫 口 IN KEY equ 0ffdeh 键盘读入口 LedBuf db 6 dup 显示缓冲 time DB 0 0 0 0 0 0 INTNum equ 20 Port 8259 0 EQU 0FFE0H 1110 0000 Port 8259 1 EQU 0FFE1H Port 8253 00 EQU 0FFE4H 0 01 Port 8253 01 EQU 0FFE5H Port 8253 10 EQU 0FFE6H Port 8253 11 EQU 0FFE7H program call initCLK0 CLI MOV AX OFFSET int8259 MOV BX 003CH MOV BX AX MOV BX 003EH MOV AX 0000H MOV BX AX STI call init8259 call update ledbuff mainLoop call display call handle key jmp mainLoop initCLK0 mov dx Port 8253 11 mov al 00110100b out dx al mov dx Port 8253 00 clk0 mov ax 38400 out dx al mov al ah out dx al ret init8259 MOV AL 13H MOV DX Port 8259 0 OUT DX AL MOV AL 08H MOV DX Port 8259 1 OUT DX AL MOV AL 09H OUT DX AL MOV AL 7FH IRQ7 OUT DX AL 资料 RET int8259 cli push ax push bx push cx MOV AL 20H 0010 MOV DX Port 8259 0 OUT DX AL call timeInc call update ledbuff pop cx pop bx pop ax sti iret timeInc push bx push cx mov bx offset time add bx 5 取 time 5 inc byte ptr bx cmp byte ptr bx 10 jb next5 mov byte ptr bx 0 该位清零 dec bx 下一位加 1 inc byte ptr bx inc bx next5 dec bx cmp byte ptr bx 6 jb next4 mov byte ptr bx 0 dec bx inc byte ptr bx inc bx next4 dec bx cmp byte ptr bx 10 jb next3 mov byte ptr bx 0 dec bx inc byte ptr bx inc bx next3 dec bx cmp byte ptr bx 6 jb next2 mov byte ptr bx 0 dec bx inc byte ptr bx inc bx next2 dec bx dec bx cmp byte ptr bx 2 jnz cmp10 cmp4 inc bx cmp byte ptr bx 4 jb next1 mov byte ptr bx 0 dec bx mov byte ptr bx 0 jmp over timeInc cmp10 inc bx cmp byte ptr bx 10 jb next1 mov byte ptr bx 0 dec bx inc byte ptr bx inc bx next1 dec bx cmp byte ptr bx 3 jb over timeInc mov byte ptr bx 0 资料 over timeInc pop cx pop bx ret display push ax push bx push cx push dx mov bx offset LEDBuf mov cl 6 共 6 个八段管 从左边开始显示 mov ah 00100000b DLoop mov dx OUTBIT mov al 0 out dx al 关所有八段管 mov al bx mov dx OUTSEG out dx al mov dx OUTBIT mov al ah out dx al 显示一位八段管 push ax mov ah 1 call Delay pop ax shr ah 1 inc bx dec cl jnz DLoop mov dx OUTBIT mov al 0 out dx al 关所有八段管 pop dx pop cx pop bx pop ax ret update ledbuff push ax push bx push cx push dx mov cl 6 uloop mov bx offset time mov al cl dec al mov ah 0 xlat 取出 time cl 1 mov bx offset LEDMAP mov ah 0 xlat 查找对应字形码 mov bx offset LedBuf mov ch 0 add bx cx dec bx mov bx al 放入 LedBuf cl 1 dec cl jnz uloop pop dx pop cx pop bx pop ax ret Delay 延时子程序 push cx mov cx 256 loop 资料 pop cx ret Delay1 延时子程序 push cx mov cx 50 lxxx call display loop lxxx pop cx ret handle key call read key cmp al 0ch jne nextR jmp nextC nextR ret nextC cli mov bx offset time mov cl 6 loop d mov byte ptr bx 16 inc bx loop loop d call update ledbuff mov bx offset time t1 call Display call read key cmp al 2 ja t1 t1 over mov bx al call update ledbuff call Delay1 t2 call Display call read key CMP AL 0DH JNE T22 mov byte ptr bx 16 call update ledbuff call Delay1 JMP T1 T22 cmp al 9 ja t2 cmp byte ptr bx 2 je cmp k 4 jmp t2 over cmp k 4 cmp al 3 ja t2 jmp t2 over t2 over inc bx mov bx al call update ledbuff call Delay1 t3 call Display call read key CMP AL 0DH JNE T33 mov byte ptr bx 16 DEC BX call update ledbuff call Delay1 JMP T2 T33 cmp al 5 ja t3 t3 over inc bx mov byte ptr bx al call update ledbuff call Delay1 t4 call Display call read key CMP AL 0DH 资料 JNE T44 mov byte ptr bx 16 DEC BX call update ledbuff call Delay1 JMP T3 T44 cmp al 9 ja t4 t4 over inc bx mov bx al call update ledbuff call Delay1 t5 call Display call read key CMP AL 0DH JNE T55 mov byte ptr bx 16 DEC BX call update ledbuff call Delay1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论