微机原理课程设计报告秒表设计.docx

上传人:sccc 文档编号:4890902 上传时间:2023-05-21 格式:DOCX 页数:22 大小:273.60KB
返回 下载 相关 举报
微机原理课程设计报告秒表设计.docx_第1页
第1页 / 共22页
微机原理课程设计报告秒表设计.docx_第2页
第2页 / 共22页
微机原理课程设计报告秒表设计.docx_第3页
第3页 / 共22页
微机原理课程设计报告秒表设计.docx_第4页
第4页 / 共22页
微机原理课程设计报告秒表设计.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《微机原理课程设计报告秒表设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告秒表设计.docx(22页珍藏版)》请在三一办公上搜索。

1、课程设计报告( 20132014 年度第 一 学期)课 程: 微机原理及应用 题 目: 秒表设计 院 系: 自动化系 班 级: 学 号: 学生姓名: Acceler 指导教师: 设计周数: 一周 成 绩: 日期:2014年 1 月 10一、课程设计目的与要求1 通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2 掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。3 培养学生分析问题、解决问题的能力。4 培养学生对微型计算机应用系统的基本设计能力。5 提高学生的实践动手能力和创新能力二、 课程设计正文(一)设计题目:秒表设计:利用实验箱上的小键盘,自定义各按键为启动计时,数据

2、清零,停止并显示。利用六个数码管显示分、秒、毫秒。8253产生10ms定时中断,在中断服务子程序中显示秒表计时。附加部分:加入记录功能,可通过按键记录多次时间,然后在停止计时后,通过键盘上的0,1,2等按键再把记录的时间取出并显示,达到实际秒表的分别计时功能。(二)总体设计方案:1 自定义小键盘中的三个按键分别为启动键、清零键、分别计时键、停止显示键(我们依次选择了MON、LAST、NEXT、RES这三个按键)。2. 利用8253产生的10ms的方波来触发8259产生中断,对秒表进行增1操作3. 动态扫描键盘,判断按键情况,并利用蜂鸣器模拟按键声音4. 根据按键情况确定要显示的内容, 然后对六

3、位数码管进行扫描显示 (三)系统的功能作用:1. 实验箱启动后,六位数码管全部显示为0,如果不对键盘进行操作将始终保持这个状态2. 普通计时功能:按下MON(启动键),数码管开始从零开始显示计时,从左到右依次显示每两位之间用八段数码管的小数点了隔开来作为分、秒、毫秒的区分,按下停止键RES,计时结束,显示停止时的时间。3. 分记功能:在计时过程中按下分别计时按键NEXT,将按下瞬间的显示值存储起来(最多可取16次),再停止计时后,可通过按下0、1、2等按键依次读出第1次、第2次、第3次按键时记录下的时间,并在数码管上显示,达到实际秒表的分别计时功能。4. 清零复位: 按下清零键LAST,六位数

4、码管全部显示为0,实现清零功能。清零后再按下启动键MON,系统将又重新从0开始计时。5. 按键同时伴随音效:在按下小键盘上的按键时,会激活蜂鸣器发出短暂的声音,模拟实际秒表中按键的声音6. 备注:(1) 注意最后两位毫秒表示位实际单位为10ms,所以每加到99后向秒进位再重新从零开始依次增1。(2) 秒表计时最长时间为60分钟,当大于这个时间后,数码管将又重新从零开始计时。(3) 考虑到键盘上0F共十六个键,所以我们设计的系统对分记有次数限制,最多为16次,超过16次时,计时自动停止,但仍可以读出存储下的16个时间。(四)具体硬件电路设计: 1.片选地址的设计:对8086地址线进行锁存后,利用

5、3-8译码器进行译码,为匹配实验箱上的片选地址在电路中我们选择了A12,A13,A14分别接A,B,C,A15接入高电平使能端E1,这样Y0就对应8000h-8fffh,Y1对应9000h-9fffh,依此类推。地址线的锁存: CPU接线设计 译码器设计 1.8253设计: 8253片选信号地址为0C000H ,即8253片选接CS4。 分频器的Fin接4MHz时钟。8253的GATE1,GATE0接VCC。 8253时钟源CLK0接分频电路的F/4输出,8253时钟源CLK1接分频电路的F/64输出。 两个计数器都工作在方式3下。其中out1产生100Hz方波作为8259的中断申请信号,上升

6、沿触发中断;out0产生的方波控制蜂鸣器在按键时同时响起。8253线路图与蜂鸣器的接线2.8259中断设计: 8259片选信号地址为0D000H ,即8253片选接CS5。 8259中断INT0接8253的OUT1,进行中断申请 8259的接线设计 3. 数码管与键盘设计: 为简化接线,直接利用硬件实验箱中的数码管与CPU总线相连的特性(其中8002h为位控制口08004h为段控制口),用8000H做片选信号,即片选接CS0即可控制数码管与键盘。具体硬件电路接线如下图:从电路图中可以看到,数码管位控制口8002h,数码管段控制口8004h,键盘读入口8001h注:最右侧一列的四个按键依次为停止

7、键RES,启动键MON,清零键LAST,分别计时按键NEXT(五)编写程序: 根据电路设计,确定端口8259端口为:偶地址端口D000h,奇地址端口D001h8253的端口为:计数器0 C000h,计数器1 C001,控制寄存器 C003h 数码管位控制口8002h数码管段控制口8004h键盘读入口8001h 根据设计方案,确定8253的初始化命令计数器0的控制字00110110 即36h计数器1的控制字01110110 即76h计数器0将会输出方波控制蜂鸣器计数器1赋初值625D,这样就会将1/16MHz(62.5KHz)的方波转换成100Hz的方波输出,申请中断。 根据题目要求,确定825

8、9的初始化命令ICW1=13H(00010011B);ICW2=20H(00100000B);ICW4=01H(00000001B); 中断向量的装入根据ICW2=20H(10000000B),则确定 IR0的中断类型号就是20H,根据中断向量等相关知识,编写中断向量装入的程序段。 编写服务中断子程序中断子程序中实现对显示时间的增1操作,每进入一次中断最末尾数加一,并判断是否有向高位的进位。得到正确的时间。 编写键盘读入,数码管扫描显示,延时等程序,合理安排编程顺序将整个程序连接起来。(六)程序流程图:中断到?将显示时间增加10ms,利用数码管动态扫描显示扫描键盘,读入按键情况开中断,秒表从零

9、开始计时,等待中断8253,8259初始化中断向量的装入开始等待启动键按下启动键按下?继续等待中断进行计时六位数码管全部显示为零将当前的时间值存储下来关中断,计时停止读出相应的记录时间显示出来主程序流程图NYNY无按键 按下分别计时键按下清零键 按下停止键按下数字键 中断服务子程序流程图是否到60s分加1是否到60min毫秒位加一(也即增加10ms)秒加1是否到1000ms 清零中断结束NYNYNY三、 课程设计总结(一) 课设过程为更快更准的完成课程设计,我们根据选择的设计题目先分步了解相关知识,1.首先对数码管的显示做了了解:为了对数码管更熟悉,在protues上自己绘制了相关电路并编写程

10、序进行仿真,实现一个六位数码管依次循环显示0A的功能2.然后对小键盘的读入做了了解:根据wave自带的范例程序,利用硬件电路实现按下按键在数码管上显示相应的数据,以此为基础了解键盘扫描读入的过程。至此所需模块都所了解后,根据题设要求来构思并绘制主程序流程图。跟据流程图和前期对数码管和小键盘做的了解编写汇编程序,并进行上机调试(二)遇到的问题与解决办法调试过程中,我们先将任务分散化分模块来攻克整个任务。首先只利用中断控制数码管计时,因为有前一天做的基础,我们很顺利实现计时功能,然后考虑加入按键读入部分,问题开始出现1. 由于开始并没有将按键之间的联系与衔接处理好,所以在初步的调试中只有一个启动键

11、实现功能,其他键的功能读出现问题,然后我们花了大概一个小时来仔细讨论与编写功能键之间的跳转,不断进行调试,最终顺利实现各键的功能。2. 在调试程序过程中有的条件跳转间隔太长,而条件跳转只能是短转移,所以我们先利用条件转移跳到近出,在通过jmp跳到目的指令处。3. 在调试过程中发现数码管的显示亮度与扫描速度之间存在矛盾,显示的很清晰的时候就会发现6个数码管扫描速度减慢,为依次点亮;而扫描速度变快时清晰度又就会降低。所以为得到一个合适的延时时间调试了一段时间。4. 加入蜂鸣器模拟按键音,花了一定的时间来确定合适的频率,使得音调合适没有杂音。而且调试延时程序使得发音的时间长短合适。在延时过后重写82

12、53控制字,使计数器复位,蜂鸣器就不再响了。5. 在所有功能实现后又对程序进行了进一步优化,使逻辑更加清晰明了,精简不必要的语句,比如在我们的系统中只涉及到键盘的一列,所以就舍弃了对其他键的选中等问题,尽量精简程序。 6. 加入分别计时的功能后,新添加了几段子程序,子程序的嵌套、调用等操作增多,由于没有对寄存值进行压栈保护,使得各个子程序中使用的寄存器中的值互相影响,出现了数码管乱码现象,经过单步运行调试发现了原因,对每个子程序用到的寄存器值都先进行压栈保护,最终顺利实现了该功能。(三)收获:1. 通过这次程序的制作,使我们对汇编语言的基本知识的使用更加熟练,同时也增加了我们对8253、825

13、9、数码管、键盘等硬件设备的进一步认识2. 在课程设计完成过程中通过和同学的交流,相互启发,使得课设进行的更加有效率,也增加了小组成员的合作的技巧与沟通能力。3. 通过查阅资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学习汇相互编语言的乐趣。4.由于这次编写的程序段较为长,所以需要更为严谨的逻辑才能保证程序顺利执行,而且通过后期对程序的精简与优化,很大程度上提高了我们的程序编写能力。(四)心得与体会 这并不是第一次用汇编语言来设计一个小程序,经过平时实验经验的积累,使得我们面对题目更加有信心,不论是之前的编程实验还是protues硬件仿真和实验箱硬件实验都给我们打下了良好的基础。

14、除了涉及到数码管和键盘的相关知识较为生疏外,对其他硬件的操作还是游刃有余的。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当一个人看书查资料不能解决时,跟队友讨论一下,互相启发,收获很大,可以使很多问题迎刃而解,而且互相学到很多东西。 不可否认,本程序仍存在不少缺点和不足,但通过这次课程设计的确找出了自己在学习上的不足,对以后的学习工作也有指导作用。相信在以后的学习中会克服这些不足,更加熟练掌握汇编语言!四、参考文献1 张永祥. 微型计算机原理. 中国电力出版社. 2005年8月2 武新. 汇编语言程序设计. 武汉理工大学出版社. 2006年7月3 马力. 8086汇编语言程序

15、设计. 机械工业出版社. 2006年9月4 杨季文. 汇编语言程序设计教程. 清华大学出版社. 2008年3月附录源程序:; 本实验利用8253做定时器,用定时器输出的脉冲控制8259产生中断; 在8259中断处理程序中,对分、秒、毫秒进行计数,在等待中断的循; 环中用LED显示时间。; 8253用定时器/计数器1,8253片选接CS4,地址为0C000H。8253时钟; 源CLK1接分频电路的F/64输出。分频器的Fin接4MHz时钟。8253的; GATE1接VCC。; 8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。; 显示电路的KEY/LED CS 接CS0

16、,地址为08000H。CONTROL equ 0c003hCOUNT0 equ 0c000hCOUNT1 equ 0c001hOUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS

17、8259B equ 0d001hdata segmentLEDBuf db 6 dup(3fh) ; 显示缓冲LEDBuf1 db 96 dup(3fh)MINUTE db 0SECOND db 0MS db 0LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable: ; 键码定义 db 32h, 31h, 30h, 33h db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h

18、, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07hdata endscode segment assume cs:code, ds:dataDelay proc near push ax ; 延时子程序 push cx mov al, 50 mov cx,ax loop $ pop cx pop ax retDelay endpdelay1 proc near push cx mov cx,6000 loop $ pop cx retdelay1 endpDisplayLED proc near push bx push cx push

19、 ax push dx mov cl, 6 ; 共6个八段管 mov ah, 20h ; 作为选通信号,高电平有效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, 02h call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al

20、; 关所有八段管 pop dx pop ax pop cx pop bx retDisplayLED endpTestKey proc near mov dx, OUTBIT mov al, 0 out dx, al ; 输出线置为0 mov dx, IN_KEY in al, dx ; 读入键状态 not al and al, 0fh ; 高四位不用 retTestKey endpGetKey proc near mov ch, 00100000b mov cl, 6KLoop: mov dx, OUTBIT mov al, ch ; 找出键所在列 not al out dx, al shr

21、 ch, 1 mov dx, IN_KEY in al, dx not al and al, 0fh jne Goon_ ; 该列有键入 dec cl jnz KLoop mov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_: dec cl shl cl, 2 ; 键值 = 列 X 4 + 行 mov ch, 4LoopC: test al, 1 jnz Exit1 shr al, 1 inc cl dec ch jnz LoopCExit1: mov dx, OUTBIT mov al, 0 out dx, al mov ch, 0 mov bx, off

22、set KeyTable add bx, cx mov al, bx ; 取出键码 mov bl, alWaitRelease: mov dx, OUTBIT mov al, 0 out dx, al ; 等键释放 mov ah, 10 call Delay call TestKey jne WaitRelease mov al, bl retGetKey endpTone proc near push ax mov ax, 1802 ; 查找音频值 call OutTone call delay1 ; 延时 mov dx,CONTROL mov al,36h out dx,al ; 关闭发音

23、 pop ax retTone endpOutTone proc near push ax mov al, 36h ; 计数器0,二进制,方式3。 mov dx, CONTROL out dx, al pop ax mov dx, COUNT0 out dx, al mov al, ah out dx, al retOutTone endpIEnter proc near push ax push dx inc MS mov al, MS cmp al, 100 jne Exit mov MS, 0 inc SECOND mov al, SECOND cmp al, 60 jne Exit m

24、ov SECOND,0 inc MINUTE mov al, MINUTE cmp al, 60 jne Exit mov MINUTE, 0Exit: mov dx, CS8259A mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretIEnter endpIInit proc mov dx, CS8259A mov al, ICW1 out dx, al mov dx, CS8259B mov al, ICW2 out dx, al mov al, ICW4 out dx, al mov al, OCW1 out dx, al ret

25、IInit endpwrite proc near push cx push bx mov cx,6 inc bp mov di,offset LEDBuflop: mov bl,di mov si,bl inc si inc di loop lop pop bx pop cx retwrite endpstart proc near cli mov ax, 0 mov ds, ax mov al, 76h ; 计数器1,方式3,二进制 mov dx, CONTROL out dx, al mov ax, 625 ; 输出频率为100Hz mov dx, COUNT1 out dx, al ;

26、 计数器低字节 mov al, ah out dx, al ; 计数器高字节 mov bx,ICW2*4 ; 装入中断向量 mov ax,offset IEnter mov bx,ax inc bx inc bx mov ax,seg IEnter mov bx,ax call IInit mov ax, data mov ds, ax mov si,offset LEDBuf1 mov bp,0LP: mov MINUTE, 0 mov SECOND, 0 mov MS, 0 mov bx, offset LEDBuf call DisplayLED call TestKey ; 有键入?

27、je LP ; 无键入, 继续显示 call Tone call GetKey ; 读入键码 cmp al,30h je L1 jmp LPL1: mov bx, offset LEDBuf call DisplayLED mov al, MINUTE mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf, al mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx

28、or al, 80h mov LEDBuf+1, al mov al, SECOND mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+2, al mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov LEDBuf+3, al mov al, MS mov ah, 0 mov cl, 10 div cl mov ch, ah mov

29、ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+4, al mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov LEDBuf+5, al call TestKey je L1 call GetKey ; 读入键码L6: cmp al,31h jne L2 call Tone mov LEDBuf, 3fh ; 显示清零 mov LEDBuf+1, 3fh mov LEDBuf+2, 3fh mov LEDBuf+3

30、, 3fh mov LEDBuf+4, 3fh mov LEDBuf+5, 3fh jmp LPL2: cmp al,32h jne L3 call Tone cmp bp,16 jz end1 call writeL3: cmp al,30h jne L4 call Tone stiL4: cmp al,33h jne L5 jmp end1L5: jmp L1end1: call Tone cli mov bx, offset LEDBuflop1: call DisplayLED call TestKey ; 有键入? je lop1 ; 无键入, 继续显示 call GetKey ; 读入键码 cmp al,0fh jg L6 call Tone mov bx,offset LEDBuf1 mov ah,0 shl al,1 mov ch,al shl al,1 add al,ch add bx,ax jmp lop1start endpcode ends end start

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号