汇编数字钟课程设计.docx
《汇编数字钟课程设计.docx》由会员分享,可在线阅读,更多相关《汇编数字钟课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
汇编数字钟课程设计
微机原理与接口技术
课程设计报告
设计题目:
数字钟设计
学院名称:
信息工程学院
专业:
通信工程
班级:
0801
组员:
卢磊磊(组长)陶纯鑫季宪鹏
指导教师:
王老师
2011年1月5日星期三
摘要:
《微机原理及接口技术》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,我们就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。
所以通过有针对性的课程设计,会使我们学会系统地综合运用所学的理论知识,提高我们在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。
通过课程设计实践,不仅要培养我们的实际动手能力,检验我们对本门课学习的情况,更要培养我们在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。
培养我们实事求是和严肃认真的工作态度。
通过设计过程,要求我们熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使我们得到微机开发应用方面的初步训练。
集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计,我们要熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
关键词:
数字钟时间显示定时器
设计目的:
设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。
其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间。
扩展功能部分则具有:
定时控制和复位功能。
数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。
这两部分都有一个共同特点就是它们都要用到振荡电路提供的256Hz脉冲信号。
为了使电路简单所设计的电路不具备校秒的功能。
并且要用数码管显示时、分、秒,初始时间由程序设定,通过控制按键进行计时。
设计内容:
通过设计数字钟,掌握8253芯片和微机接口原理和方法;熟悉汇编程序设计;熟悉编译环境;剖析实验箱、绘制原理电路并仿真、设计程序完成软硬件设计。
总体设计:
根据设计要求,初步思路如下:
1)计时单元由定时/计数器8253的通道0来实现。
定时采用硬件计数和软件技术相结合的方式,即通过8253产生一定的定时时间,然后再利用软件进行计数,从而实现24小时制定时。
8253定时时间到了之后产生中断信号,8253在中断服务程序中实现时、分、秒的累加。
2)时间显示采用实验平台上的6个LED数码管分别显示时、分、秒,采用动态扫描方式实现。
3)校时通过键盘电路和单脉冲产生单元来输入。
按键包括校时键、加1和减1键等。
系统硬件设计主要利用微机实验平台上的电路模块。
硬件电路主要由键盘电路、单脉冲产生单元、8253定时计数器、8255并行接口单元、LED显示电路和按键等等。
系统的硬件电路设计框图如图1所示。
按键
硬件电路设计框图如图1
硬件设计:
1、LED数码管显示电路如图2
如图2LED数码管是实现显示电路的器件
2、8253计时器和8255并行通信接口结构框图如图所示3、5
所示3为8253定时器为计数器控制电路的
3、按键显示电路如图所示4
如图4按键的作用是实现数字钟定时和计数的
如图5所示为8255并行接口结构图
4、CPU模块结构电路如图6
所示6为CPU电路实现软件运行和向控制端送信号的
5、硬件整体电路图如图7所示
程序流程图及清单:
1)主程序如图所示
(二)
数码管扫描输出
2)LED数码管显示框图
返回
如图(三)数码管显示子程序
3)按键扫描显示
六列扫描完
如图(四)按键扫描子程序框图
4)计数器流程框图如图(五)所示
Y
仿真过程及结果:
1、在按键没有按下的情况下,由于初始给它设定了时间如“82-55-08”
则开始只显示82-55-08,仿真电路图如下图
(一)所示:
2、在按键按下的情况下,在初始设定的时间下由秒个位开始变化,到十向秒十位加一,等到秒十位变为六十时向分为加一,以此类推到时位,完成数字中的变化。
此仿真电路图如下图
(二)所示。
如图
(一)所示电路图
如图
(二)所示电路图
设计心得:
两个星期的课程设计很快就结束了,想想每天在实验室的努力,看着自己两个星期的努力成果,心里感到格外的欣慰。
从最初的无从下手,到分析设计,到编程调试,一步步走来,知识一点一滴的积累,最终完成了这份另自己满意的作品。
在设计的过程中,我也遇到了一些困难,例如,在将键盘输入的值转换成显示数据的时候,我重复调用子程序GetKey,却没有得到我想要的结果,经过一系列的探索和修改,我在调用子程序GetKey前先调用了子程序TestKey,如果键盘有输入,再转入GetKey执行,结果完全正确。
在设计定时器的时候也遇到了一些问题,由于实验箱的故障,输出的时间频率和真正的时间频不等,简单地将计数器的计数初值增大,必定会超出计数器的计数范围。
我翻阅了相关的书本,在老师的帮助下成功解决了这个问题。
解决方法是采用两个计数器串联的方式。
在克服一个又一个困难的过程中,巩固了我所学的理论知识,还培养我的实际动手能力,还培养我在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。
当然,我所完成的这个作品仍不完美。
例如,缺乏人机互动功能,在修改时间的时候秒针停止计时。
这些问题有待我在今后的学习过程中进一步完善。
参考文献:
1、王让定、朱莹、叶富乐等编著《微机原理与接口技术》第二版,清华大学出版社出版,2007.11
2、《IBM-PC汇编语言程序设计》清华大学出版社出版,2001
附录:
源代码
程序:
DATASEGMENT
LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
XDW?
YDW?
ZDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,46H;01000110[8255]
MOVAL,82H;10000010A方式0输出B方式0输入C输出
OUTDX,AL;向8255写控制字
NEXT:
MOVX,08;记录按键次数
MOVY,53
MOVZ,82
LEASI,LED
MOVAL,00010111B;定时器0方式0
OUT4EH,AL;向8253写控制字
MOVAL,255;计数初值为1
MOVDX,48H;计数器0的端口地址
OUTDX,AL
REPEAT0:
REPEAT1:
CALLCONVER;显示子程序
MOVDX,42H
INAL,DX;将PB中的值输入到ALPB的值取决于PB7
CMPAL,0FEH
JZNEXT
TESTAL,80H;判断计数是否结束TEST相与但不改变相应的值
JNZREPEAT1
REPEAT2:
CALLCONVER
MOVDX,42H
INAL,DX
CMPAL,7EH
JZNEXT
TESTAL,80H
JZREPEAT2
INCX;计数结束,按键次数加1
CMPX,60
JNZNEXT1
MOVX,0
INCY
NEXT1:
CMPY,60
JNZNEXT2
MOVY,0
INCZ
NEXT2:
CMPZ,24
JNZNEXT3
MOVZ,0
NEXT3:
CALLCONVER;显示子程序
JMPREPEAT0;重新初始化定时器,为下一次按键准备
CONVERPROC
MOVAX,X
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH:
BHAL:
BL
MOVAL,02H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,01H;00000010
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Y
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH:
BHAL:
BL
MOVAL,20H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,10H;00000010
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Z
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH:
BHAL:
BL
MOVAL,80H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,40H;00000010
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
RET
CONVERENDP
DELYPROC
PUSHCX
MOVCX,1000
L:
LOOPL
POPCX
RET
DELYENDP
CODEENDS
ENDSTART