电子钟课程设计报告微机原理与接口技术.docx
《电子钟课程设计报告微机原理与接口技术.docx》由会员分享,可在线阅读,更多相关《电子钟课程设计报告微机原理与接口技术.docx(24页珍藏版)》请在冰豆网上搜索。
电子钟课程设计报告微机原理与接口技术
课程设计报告
课程名称微机原理与接口技术
系别:
工程技术系
专业班级:
电子信息工程0901
学号:
09XXXXXX5
姓名:
XXX
课程题目:
电子钟的设计与制作
完成日期:
2011-12-23
指导老师:
显明
2011年12月23日
课程设计目的
1、熟悉唐都试验箱,掌握试验箱各个模块的使用方法。
2、掌握微机常用的输入输出方式及接口技术。
3、掌握一定的汇编语言知识,培养自己的动手操作能力。
4、学习程序设计的基本思路和方法。
5、利用现在的实验器材和软件平台,进行实验的调试,实现电子钟的各项功能要求,如动态显示实时时钟的时/分/秒数据。
课程设计要求
利用8254定时器设计一个具有分、秒显示的电子时钟,并定义一个启动键,当按下该键时时钟从当前设定值(可在显示,缓冲区中予置)开始走时。
利用微机原理试验箱的数码管显示单元,把时间显示在LED数码管上。
课程设计注意事项
1、编写代码时应注意代码的准确性。
2、正确的在试验箱上安装各芯片,注意其引脚是否正确。
3、在更换芯片时应用起子从芯片两端轻轻翘起。
4、连接完电路时要检查电路是否正确。
5、测试试验箱是否与pc机相连。
6、验证代码的正确性,发现问题。
课程设计容
选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。
时、分、秒的数值通过对8255的编程可送到七段数码管上显示。
课程设计简要操作步骤
1、了解电子钟的工作原理
2、画出电路原理图
3、根据原理图编写代码
4、连接电路图
5、将试验箱与pc机相连
6、植入代码,检查代码的正确性
7、反复检验,寻找问题,解决问题
8、撰写实验报告、实验过程及实验心得体会
9、完成实验
课程设计心得体会
这次设计让我收获了很多,既是对自己所学到的知识作一个肯定,也是对《微型计算机原理及应用》的复习,更主要的是通过设计增强了自己动手的能力。
在这次课程设计中涉及到很多芯片的应用,最大特点是软,硬件的结合,对动手能里的要求很大,设计完成后我的编程水平提高了一大步。
这次设计,更增加了我对微机原理的兴趣,为我将来的学习明确了目标。
同时加深了对相关理论知道及专业知识的掌握度,锻炼及提高了理解问题,分析问题,解决问题的饿能力,更深刻的体会到了理论联系实际的重要性。
课程设计评语及成绩
评语
成绩
指导教师
年月日
摘要1
关键词2
一、概述2
1.1设计目的2
1.2设计要求2
1.3设计容3
1.4设计思想3
二、设计与制作4
2.1设计原理4
2.2硬件电路设计5
2.3程序流程图8
三、结果分析9
四、结论与展望9
五、心得体会及建议10
致谢11
参考文献12
电子钟的设计与制作
摘要:
微机控制即微型计算机原理控制。
是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
微型计算机原理控制应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡,电子宠物等,这些都离不开微型计算机原理控制。
我们组本次设计的题目是简单电子钟程序设计,用到了定时芯片8254,中断控制器8259和可编程并行芯片8255。
在编辑1毫秒定时程序时,用到了中断控制器8259。
此程序主要由四部分组成:
第一部分为最主要的部分定义显示界面;
第二部分为利用延时程序,并将调用的二进制表示的时间数转换成ASCII码,并将时间数存入存区;
第三部分将存在系统存区的时间数用七段数码管显示出来;
第四部分利用循环程序分别对秒个位、秒十位、分个位、分十位与相应的规定值进行比较,结合延时程序来实现电子钟数字的跳变,从而形成走时准确的电子钟。
该程序实现了准确显示秒和分,读数准确,走时精准。
此电子钟能准确的从0分0秒走时到59分59秒,然后能自动回复到0分0秒循环走时。
关键词:
可编程并行芯片8255定时芯片8254中断控制器8259延时计数比较定时中断七段数码显示管
一、概述
1.1设计目的
通过本次课程设计学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使设计者的设计水平和对所学知识的应用能力以及分析问题解决问题的能力得到全面提高。
1.1.1熟练掌握8086/88教学系统的基本操作和调试程序的各种指令。
1.1.2掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。
1.1.3掌握8255的各种工作方式及其应用编程。
1.1.4掌握8253定时/计数器的工作原理、工作方式及其应用编程。
1.1.5熟悉编程及调试程序的方法。
1.2设计要求
利用8259A中断控制器、8253定时/计数器、8255A接口芯片以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。
电子时钟的显示格式HH:
MM:
SS由左到右分别为时、分、秒,最大记时59:
59:
59超过这个时间时分秒位都清零从00:
00:
00重新开始。
1.3设计容
选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。
时、分、秒的数值通过对8255的编程可送到七段数码管上显示。
1.4设计思想
1.4.1在主程序中要分别对8253、8259、8255进行初始化编程,8253的计数器2可在方式0下工作。
1.4.28255的A口、B口都设为方式0,为基本的输入输出方式。
1.4.3在中断服务程序中对中断次数进行统计,当满10次时就进行一次时、分、秒的处理。
时、分、秒分别对应6个存储单元,分别存放时、分、秒的十位和个位。
当中断次数满10次时,将秒的个位加1,同理对分,时亻相应处理。
1.4.4七段数码管显示作为子程序,将时、分、秒对应存储单元的容分别取出并转换成相应的段码,从8255的B口输出,A口输出对应位的位选信号,延时后进行下一位的显示。
硬件连接的整体思想图
8253
D7CLK0
.OUT0
.GATE0
D0CLK1
OUT1
GATE1
CLK2
OUT2
GATE2
CS
8259
CSA0
WRINTA
RDIR7
D7IR6
D6IR5
..
..
D0IR0
CAS0INT
CAS1SP/EN
GNDCAS2
D78255PA7
D6PA6
.PA5
.PA4
D0PA3
WRPA2
RDPA1
CSPA0
A1PB7
A0PB6
RESETPB5
PC7PB4
PC6PB3
.PB2
.PB1
PC0PB0
CPU
D7
D6
D5
.
.
D0
。
。
。
200208210
III
20720F217
译码器
6位七段LED数码管显示器
启动键
1M
高电平
INTA
INTR
硬件连接实物图
二、设计与制作
2.1设计原理
基本工作原理:
系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。
以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。
在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。
本设计由8259A中断控制器、8253定时/计数器、8255A接口芯片、LED数码显示管和两个按键组成。
主要用8259A的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,IRQ6的中断服务程序完成调时、调分功能。
8253用来产生50ms的脉冲信号作为IRQ7的中断请求信号。
按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。
按键KK1+启动/关闭对时功能。
它决定是否屏蔽IRQ7和IRQ6中断源。
8255A负责将存里的时位和分位值输出到数码管。
电子时钟的显示格式HH:
MM:
SS由左到右分别为时、分、秒,每百分之一秒对百分之一秒寄存器的容加一,并依次对秒、分、小时寄存器的容加一,六个数码管动态显示时、分、秒的当前值。
最大记时59:
59:
59超过这个时间时分秒位都清零从00:
00:
00重新开始。
2.2硬件电路设计
2.2.18259芯片介绍
中断控制器8259A是专门为控制优先级中断而设计开发的芯片。
它将中断源优先排队、辨别中断源以及提供中断矢量的电路集于一片中。
因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
同时,在不需要增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。
8259A的主要功能如下:
8259芯片
①一片8259A可以接受并管理8级可屏蔽中断请求,通过9片8259A级联可扩展至64级可屏蔽中断优先控制。
②对每一级中断都可以通过程序来屏蔽或允许。
③在中断响应周期,8259A可为CPU提供相应的中断类型码。
④具有多种工作方式,并可通过编程来加以选择。
通过初始化编程向8259A写入相应的初始化命令ICW,可以使芯片处于一个规定的基本工作方式,并在此方式下进行工作。
8259A的初始化命令字共有4个ICW1-ICW4,进行初始化时要求ICW1-ICW4按一定的顺序写入。
2.2.28253芯片介绍
8253芯片
8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)8253部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
2.2.38255芯片介绍
8255特性:
①一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.
②具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.
8255引脚功能:
RESET:
复位输入线,CS:
芯片选择信号线,RD:
读信号线,WR:
写入信号,D0~D7:
三态双向数据总线,PA0~PA7:
端口A输入输出线,PB0~PB7:
端口B输入输出线,PC0~PC7:
端口C输入输出线,A0,A1:
地址选择线
2.3程序流程图
时、分转化为十进制,存到内存单元中
计算时、分的各位数值在TABLE中对应编码
结束
开始
依次在61H段输出到LED显示
显示模块流程图:
三、结果分析
最后,我们得到了预期的结果,电路能完成准确的硬件定时和显示。
在一开始的连线中,因为粗心,没有把片选信号连正确,后来参考了网上的一些资料,仔细的盘查,才发现了错误,在实验过程中有些实验箱也可能会存在一些问题,有时可以换个实验箱解决问题
四、结论与展望
将编写好的源程序输入,编译后出现很多错误,经过反复修改直到程序运行通过。
将生成的可执行程序装入TND86/88的存里,在监控状态下运行程序,可是数码管显示的数字并不与理论计算值相符合,并且显示的数字不停地闪动,经过反复分析源程序发现问题出现在存单元里时位和分位在转化为十进制时,存储转化的结果的地址空间的顺序弄混了。
数字闪动的原因应该出在显示子程序里,经过分析问题出在显示子程序里缺少延时程序。
编写延时子程序,并在显示子程序调用它;编译源程序,装入生成的可执行文件,并运行。
数码管显示的数字与理论值相符合,并能正常计时,但当按动KK1+键时,却不能启动对时功能,按动KK2+时,也不能调时、调分。
问题很可能出在两键控制的中断源上,检查源程序也找不出错误,当把IRQ5换成IRQ2后,在进行调试,结果成功。
五、心得体会及建议
经过一周努力,在指导老师和同学的帮助下,终于如期完成了该电子时钟的课程设计。
当然在课程设计的过程中遇到了许多问题,但是经过查阅有关资料和向老师、同学请教后,还是一一解决了。
首先,通过这次课程设计使使我在课堂中学到的东西充分的融入到实践当中。
我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
其次,通过本次设计,我系统的了解了时钟的设计流程,尤其是硬、软件的设计方法,掌握了显示电路的基本功能及编程方法,掌握了显示电路的一般原理。
开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。
最后,通过该课程设计,我进一步的熟悉了可并行通信接口8255、计数器/定时器8253及中断控制器8259处理器程序的编程方法的编程原理和7段LED数码管显示器的工作原理,为以后独立的设计系统提供了丰富的实践经验。
以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的容以确保程序的正确性上都有了很大程度的提高。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
本次课程设计完成了实时时钟的设计到实现的全部过程,结果满足设计要求,设计主要用到了8255,8253,8259和三个芯片,程序也比较长比较麻烦,同时也遇到了不少困难。
系统设计的开始几天的时间,没有什么大的进展,仅仅是初始界面就调试了很长时间才成功,当8253定时/计数器来做其中的秒定时模块时,因为8253所能提供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在存里开辟存储单元,所以就要求在写程序时就要有明确的思路。
关于显示模块和对时模块,在了解LED、8259、8253的功能和用法后,问题很容易解决。
以后的几天的时间开始调中断程序,程序中一旦有了中断,调试就困难了,调中断调了好几天,难度挺大的,任何一个初始化的失误都可能使你的程序不正常,在多次调试之后,终于完成了该部分的调试工作。
参考文献
[1]立,邓振杰,荆淑霞等编著.微型计算机及接口技术(第三版).中国铁道出版社
附录:
程序清单:
MY8255_AEQU0600H
MY8255_BEQU0602H
MY8255_CEQU0604H
MY8255_CONEQU0606H
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
DATASEGMENT
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATAENDS
SSTACKSEGMENTSTACK
DW200DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK,DS:
DATA
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETIRQ7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,CS;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
CLI
POPDS
MOVAX,DATA
MOVDS,AX
MOVCX,03H
MOVDI,3000H
MOVAL,00H
LP:
MOV[DI],AL
INCDI
LOOPLP
;MOVDI,3003H
MOVSI,4000H
MOVAL,00H
MOV[SI],AL;清显示缓冲
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOV[SI+4],AL
MOV[SI+5],AL
MOVSI,4000H
MOVAL,11H
OUT20H,AL
MOVAL,08H
OUT21H,AL
MOVAL,04H
OUT21H,AL
MOVAL,01H
OUT21H,AL
MOVAL,6FH
OUT21H,AL
MOVDX,CON8254
;MOVAL,30H;计数器0,方式0
MOVAL,36H;计数器0,方式3,产生50ms方波
OUTDX,AL
MOVDX,A8254;计数初值为3E8H=1000,产生1ms中断
MOVAL,50H;c350H=50000,产生50ms
OUTDX,AL
MOVAL,0c3H
OUTDX,AL
MOVDX,CON8254
MOVAL,50H;计数器1,方式0
OUTDX,AL
MOVDX,B8254;计数初值为3E8H=1000,产生1ms中断
MOVAL,20H;c350H=50000,产生50ms中断
OUTDX,AL
MOVDX,MY8255_CON;写8255控制字
MOVAL,81H
OUTDX,AL
STI
AA1:
CALLDIS;调用显示子程序
JMPAA1
DIS:
PUSHAX
MOVSI,4000H
MOVDL,0DFH
MOVAL,DL
AGAIN:
PUSHDX
MOVDX,MY8255_A
OUTDX,AL;selectfirstseg
MOVAL,[SI]
MOVBX,OFFSETDTABLE
XLAT
MOVDX,MY8255_B
OUTDX,AL
CALLDALLY
INCSI
POPDX
MOVAL,DL
TESTAL,01H
JZOUT1
RORAL,1
MOVDL,AL
JMPAGAIN
OUT1:
POPAX
RET
DALLY:
PUSHCX
MOVCX,0005H
T1:
MOVAX,0010H
T2:
DECAX
JNZT2
LOOPT1
POPCX
RET
IRQ7:
PUSHAX
MOVDX,B8254;重装计数初值
MOVAL,20H
OUTDX,AL
;MOVAX,0173H
;INT10H;显示字符s
;;SECOND
MOVDI,3000H
MOVDL,[DI]
MOVAH,00H
MOVAL,DL
MOVBL,10
DIVBL
MOVBH,AH;AH保存余数,al保存商
MOVBL,AL;
MOVSI,4001H;4000H存单元保存秒的十位
MOV[SI],AL
ORAL,30H;ADD30H
MOVAH,01H
INT10H
MOVAL,BH
MOVSI,4000H;4001H存单元保存秒的个位
MOV[SI],AL
ORAL,30H;ADD30H
MOVAH,01H
INT10H
MOVAX,0120H;20h=空格
INT10H
MOVDI,3000H
MOVDL,[DI]
INCDL
MOV[DI],DL
CMPDL,60
JLNEXT1
MOVDL,00H
MOVDI,3000H
MOV[DI],DL
MOVDI,3001H
MOVDL,[DI]
INCDL
MOV[DI],DL;SAVEUPDATEMINUTE
MOVAH,00H
MOVAL,DL
MOVBL,10
DIVBL
MOVBH,AH;AH保存余数,al保存商
MOVBL,AL;
MOVSI,4003H;4000H存单元保存秒的十位
MOV[SI],AL
ORAL,30H;ADD30H
MOVAH,01H
INT10H
MOVAL,BH
MOVSI,4002H;4001H存单元保存秒的个位
MOV[SI],AL
ORAL,30H;ADD30H
MOVAH,01H
INT10H
MOVAX,0