微机原理多功能电子钟课程设计.docx
- 文档编号:12599053
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:21
- 大小:201.68KB
微机原理多功能电子钟课程设计.docx
《微机原理多功能电子钟课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理多功能电子钟课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
微机原理多功能电子钟课程设计
目录
一、设计背景1
二、设计要求和目的1
2.1、设计要求1
2.2、设计目的2
三、设计的具体实现3
3.1、系统设计3
3.2、单元电路的设计4
3.2.18255的介绍及初始化4
3.2.28259的介绍及初始化5
3.2.38253的介绍及初始化7
四、程序设计流程图及代码9
4.1、主程序流程图:
9
4.2、电子时钟中断处理程序流程图:
10
4.3、显示模块流程图:
11
4.4、程序代码:
11
五、心得体会及建议20
六、附录22
七、参考文献22
电子钟课程设计报告
一、设计背景
电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。
与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。
它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二、设计要求和目的
2.1、设计要求
利用8259A中断控制器、8253定时/计数器、8255A接口芯片以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。
电子时钟的显示格式HH:
MM:
SS由左到右分别为时、分、秒,最大记时59:
59:
59超过这个时间时分秒位都清零从00:
00:
00重新开始。
1.电子时钟具有二十四小时循环记时功能,走时要准。
2.显示格式,时:
分:
秒。
3.利用8253作为定时器。
2.2、设计目的
通过本次课程设计,学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与实践应用相结合的能力。
进一步加深对专业知识和理论知识的认识和理解,使设计者的设计水平和对所学知识的应用能力以及分析问题、解决问题的能力得到全面提高。
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
1.熟练掌握8086/88教学系统的基本操作和调试程序的各种指令。
2.掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。
3.掌握8255的各种工作方式及其应用编程。
4.掌握8253定时/计数器的工作原理、工作方式及其应用编程。
5.熟悉编程及调试程序的方法。
6.练习LED-KEYBOARDUNIT的使用方法和数码管的显示编程方法。
三、设计的具体实现
3.1、系统设计
该系统是一个简单的利用8253定时器、8255可并行通信接口和中断控制器8259设计的电子时钟系统,在该系统中设有一个启动键,启动键未按下时,显示初始化界面“HELLO”;当按下启动键时,8253定时器开始计时(8253的初值为10000,接1MHz的脉冲,即当8253计满100时正好是1S),当计时计满100时,8259便产生一次中断,在LED显示器便显示系统预先设计好的初始值便开始从秒位开始加1,当加到10S时,10s位加1,加到60S时分位加1,同时秒位清零。
本系统将与时间密切相关的两个模块即显示模块和计时模块放在中断处理程序中,这样,就保证了LED的数字每隔10ms得到一次刷新,从而保证了数字显示的稳定。
中断处理程序完成计时功能要依靠两个方面,因为中断处理程序是每10ms执行一次,但计时并不是一10ms为单位进行的,而是以秒为单位进行的,所以,计时功能的事项一方面要利用10ms这个基准时间单位,另一方面要借助于一个计数单元。
计数单元的初始值为100,每进行一次中断,便使计数单元的内容减1,也就是说,每10ms作一次计数。
每当计数单元从100减为0时,说明已经经过了10ms*100=1s时间,于是使秒位加1。
秒位加1之后,又须判断由此而可能引起的进位,如有进位,则应实现正确的修改。
修改完以后,再将LED显示一遍。
3.2、单元电路的设计
3.2.18255的介绍及初始化
Intel8255A是一种通用的可编程并行接口芯片,它具有24条I/O引脚和A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的。
图1引脚图8255的内部结构及引脚如图:
图2内部结构图8255初始化:
可并行通信接口8255的控制字是方式选择控制字,A口工作在方式1下,用来读键值,B口工作在方式0下,为输出做扫描,C口为输出口,其初始化为:
8255控制口地址为20bh
A端口地址为208h
B端口地址为209h
C端口地址为20ah
movdx,20bh
moval,10000001b
outdx,al
3.2.28259的介绍及初始化
中断控制器8259是一种可编程中断控制器。
可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。
8259A的内部结构和引脚如图2.3所示:
图3内部结构和引脚图
8259A的主要功能:
(1)具有8级优先权控制,通过级连可扩展至64级。
(2)毎一级均可通过编程实现屏蔽或开放。
(3)能向CPU提供相应的中断类型号。
(4)可通过编程选择不同的工作方式。
8259初始化:
8259的命令共有7个,一类是初始化命令字,另一类是操作命令。
8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。
OCW1中断屏蔽操作命令字,要求写入8259的奇地址端口;
moval,13h
movdx,210h
outdx,al;ICW1初始化
moval,08h
movdx,211h
outdx,al;ICW2初始化
moval,01h
outdx,al;ICW4初始化
inal,dx
andal,0feh
outdx,al
3.2.38253的介绍及初始化
8253是NMOS工艺制成的可编程计数器/定时器,内部有三个计数器,分别为计数器0、计数器1和计数器2。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8253的主要功能:
(1)毎片有三个独立的16位计数通道。
(2)每个计数器可按二进制或十进制来计数。
(3)每个计数器最高计数速率可达2.6MHz。
(4)每个计数器具有6种可编程工作方式。
(5)所有输入、输出均与TTL电平兼容,便于与外围接口电路相连。
8254的工作方式如下:
(1)方式0:
计数结束产生中断。
(2)方式1:
可重触发单稳态方式。
(3)方式2:
频率发生器。
(4)方式3:
方波发生器。
(5)方式4:
软件触发的选通信号发生器。
(6)方式5:
硬件触发的选通信号发生器。
8253初始化:
做为计数器的计数器/定时器8253,在设置好计数初值后,便开始减1计数,为0时,输出一个信号;控制字设置:
BCD为设置为计数值为二进制格式,模式选择为模式2(即为分频器,当控制字写入后,输出段OUT变为高电平作为初始状态,当计数初值写入初值寄存器后,下一个时钟脉冲时,计数初值被写到计数执行部件,然后计数执行部件做减1计数,减到1时,输出端OUT变为低电平;完成一次计数过程后,输出端OUT又变为高电平,开始一个新的计数过程,由此可以周而复始的进行下去),读写指示位为先写低8位字节,再读写高8位字节,计数器选择计数器0。
其中8253的计数初值为10000d,当接1MHZ的脉冲时,分频后的输出值为0.01S。
8253的初始化为:
8253控制端口地址为203h
计数器0端口地址为200h
moval,34h
movdx,203h
outdx,al
movdx,200h
movax,10000d
outdx,al
moval,ah
outdx,al
四、程序设计流程图及代码
4.1、主程序流程图:
4.2、电子时钟中断处理程序流程图:
4.3、显示模块流程图:
4.4、程序代码:
codesegment
assumecs:
code,ds:
code
start:
movax,cs
movds,ax
movbp,0064h;设置计数初值
jmpstart1
portbitequ208h
portsegequ209h
start1:
movdx,20bh
moval,10000001b
outdx,al;8255初始化*******************************************************
moval,34h
movdx,203h
outdx,al;8253写控制字
movdx,200h
movax,10000d
outdx,al
moval,ah
outdx,al;8253初始化
*******************************************************
moval,13h;8259初始化
movdx,210h
outdx,al;ICW1初始化
moval,08h
movdx,211h
outdx,al;ICW2初始化
moval,01h
outdx,al;ICW4初始化
inal,dx
andal,0feh
outdx,al;OCW1打开非屏蔽位
*******************************************************pushds
movax,0
movds,ax
movax,offsetintr
movds:
wordptr[4*8],ax
movax,cs
movds:
wordptr[4*8+2],ax;设置中断向量
popds
***************************************************;主程序开始
ab:
movdx,20ah
inal,dx
andal,1
cmpal,01h;判断时钟是否启动
jzintr1;若启动,则开中断
callshowhello;没启动,则转显示
cli;关中断
jmpab
intr1:
sti;开中断
jmpab;检测时钟状态
*******************************************************
;初始界面显示程序
showhello:
leabx,TABLE
leadi,BUFDA
movcl,11011111b;位码
next:
movdx,208h
moval,cl
outdx,al;输出位码
moval,[di+06];取段码
xlat
movdx,209h;输出段码
outdx,al
pushcx
movcx,30h
delay1:
loopdelay1;软件延迟
popcx
cmpcl,11111110b;判断是否扫完一遍
jzaaaa;显示完一遍则返回
incdi
rorcl,1;循环右移一位
jmpnext
aaaa:
ret
*******************************************************
;中断处理程序
intrprocnear
pushsi
pushax保存寄存器的内容
decbp;计数单元减1
jnzdisplay;如未计到100,则直接转显示
movdi,offsetBUFDA
movbp,0064h;计数单元设置初值
moval,[di+05]
incal;秒位加1
mov[di+05],al
cmpal,0ah;是否引起进位
jnzdisplay;无进位则转显示
moval,00
mov[di+05],al
moval,[di+04]
incal;有进位则本位清零,前一位加1
mov[di+04],al
cmpal,06;是否满60秒
jnzdisplay;否,则转显示
moval,00
mov[di+04],al
moval,[di+03]
incal;是则本位清零,而分位加1
mov[di+03],al
cmpal,0ah;是否引起分位有进位
jnzdisplay;否,则转显示
moval,00
mov[di+03],al
moval,[di+02]
incal
mov[di+02],al;有进位,则本位清零,前一位加1
cmpal,06;是否满60分
jnzdisplay;否,则转显示
moval,00
mov[di+02],al
moval,[di+01]
incal;有进位,则本位清零,前一位加1
mov[di+01],al
cmpal,04;是否引起时位有进位
jnzdisplay;否,则转显示
moval,00
mov[di+01],al
moval,[di]
incal;是则本位清零,前一位加1
mov[si],al
cmpal,02;是否满24小时
jnzdisplay;否,则转显示
moval,00
mov[di],al;是则本位清零
display:
calldispl;调用显示程序
movdx,210h
moval,20h
outdx,al;手动结束中断
popax
popsi
iret
intrendp;被中断处理程序调用的显示程序
displprocnear
pushdx
pushcx
pushbx
pushsi
movcx,0006;显示位数
movbx,offsetTABLE
movsi,offsetBUFDA
movah,11011111b
displ1:
movdx,portbit
moval,0ffh
outdx,al;关显示
pushcx
movcx,0100h
wait1:
loopwait1;软件延时
movdx,portseg
moval,[si]
xlat;转换
outdx,al;输出段码
movdx,portbit
moval,ah
outdx,al;输出位码
movcx,0100h
wait2:
loopwait2;延时
popcx
rorah,1
incsi
loopdispl1
popsi
popbx
popcx
popdx
ret
displendp
*******************************************************
TABLE:
db3fh;“0”的段码
db06h;“1”的段码
db5bh;“2”的段码
db4fh;“3”的段码
db66h;“4”的段码
db6dh;“5”的段码
db7dh;“6”的段码
db07h;“7”的段码
db7fh;“8”的段码
db6fh;“9”的段码
db00h
db76h;“H”的段码
db79h;“E”的段码
db38h;“L”的段码
db38h;“L”的段码
db5ch;“o”的段码
BUFDA:
db0,2,5,9,5,5,11,12,13,14,15,16
codeends
endstart
五、心得体会及建议
为期两周的数字电路课程设计结束了,在我们组成员的共同努力下,终于完成了老师布置的主要任务。
虽然有些时候不尽人意,不能很顺利或者完美的实现,但是通过我们共同的努力,也学会了很多东西。
首先,通过这次课程设计使使我在课堂中学到的东西充分的融入到实践当中。
我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
其次,通过本次设计,我系统的了解了时钟的设计流程,尤其是硬、软件的设计方法,掌握了显示电路的基本功能及编程方法,掌握了显示电路的一般原理。
开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。
最后,通过该课程设计,我进一步的熟悉了可并行通信接口8255、计数器/定时器8253及中断控制器8259处理器程序的编程方法的编程原理和7段LED数码管显示器的工作原理,为以后独立的设计系统提供了丰富的实践经验。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
本次课程设计完成了实时时钟的设计到实现的全部过程,结果满足设计要求,设计主要用到了8255,8253,8259三种芯片,程序也比较长比较麻烦,同时也遇到了不少困难。
系统设计的开始几天的时间,没有什么大的进展,仅仅是初始界面就调试了很长时间才成功,当8253定时/计数器来做其中的秒定时模块时,因为8253所能提供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元,所以就要求在写程序时就要有明确的思路。
关于显示模块和对时模块,在了解LED、8259、8253的功能和用法后,问题很容易解决。
以后的几天的时间开始调中断程序,程序中一旦有了中断,调试就困难了,调中断调了好几天,难度挺大的,任何一个初始化的失误都可能使你的程序不正常,在多次调试之后,终于完成了该部分的调试工作。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在巫老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
六、附录
PC机一台
Windows操作系统一套
8259一片
8253两片
8255一片
CPU一片
LED数码管8只
电阻
三极管
七、参考文献
1、戴梅萼,史嘉权编著.微型计算机技术及应用(第三版).北京:
清华大学出版社,2003
2、李顺增,吴国东,赵河明等.微机原理及接口技术.北京:
机械工业出版社,2006
3、李大友.微型计算机原理[M].北京:
清华大学出版社,1998.7
4、眭碧霞.微型计算机原理与组成[M].人民邮电出版社,2003.8
5、徐晨、陈继红、王春明、徐慧.微机原理及应用.高等教育出版社.2004.8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 多功能 电子钟 课程设计