资源描述:
《数字时钟的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、※※※※※※※※※※※※※※※※※※※※※※※※2009级学生微机原理课程设计微机原理课程设计报告书课题名称数字时钟的设计姓名学号0912401-14院、系、部物理与电信工程系专业通信工程指导教师2011年6月20日14一、设计任务及要求1.电子时钟具有二十四小时循环记时功能,走时要准。2.显示格式为:时:分:秒。3.利用8253作为定时器。指导教师签名:2011年6月6日二、指导教师评语指导教师签名:2011年6月20日三、成绩验收盖章2011年6月20日14数字时钟的设计一、设计目的1.熟练掌握8086
2、/88教学系统的基本操作和调试程序的各种指令。2.掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。3.掌握8255的各种工作方式及其应用编程。4.掌握8253定时/计数器的工作原理、工作方式及其应用编程。5.熟悉编程及调试程序的方法。二、设计要求以8086CPU为核心,利用8259A中断控制器、8253定时/计数器、8255A接口芯片以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。电子时钟的显示格式HH:MM:SS由左到右分别为时
3、、分、秒,最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。三、设计思路此设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由825
4、5控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。此设计由8259A中断控制器、8253定时/计数器、8255A接口芯片、LED数码显示管和两个按键组成。主要用8259A14的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,IRQ6的中断服务程序完成调时、调分功能。8253用来产生50ms的脉冲信号作为IRQ7的中断请求信号。按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。按键K
5、K1+启动/关闭对时功能。它决定是否屏蔽IRQ7和IRQ6中断源。8255A负责将内存里的时位和分位值输出到数码管。电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,每百分之一秒对百分之一秒寄存器的内容加一,并依次对秒、分、小时寄存器的内容加一,六个数码管动态显示时、分、秒的当前值。最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。四、电路及连线设计图1硬件电路接线图五、程序设计145.1程序流程图8255、8253、8259初始化显示提示信息判断启动键的状态是“1”?
6、开中断并调用中断处理程序开始计时调用显示程序显示系统计时结果开始YN图2主程序流程图时、分转化为十进制,存到内存单元中计算时、分的各位数值在TABLE中对应编码依次在61H段输出到LED显示结束开始图3显示模块流程图14计满60秒了吗?NNNNNN保护寄存器秒位加110秒位加1计数单元减1分位加1计满1秒了吗?计满10秒了吗?计满10分了吗?计满60分了吗?10分位加1将字符转换为段码时位加1计满10小时了吗?输出段码输出位码恢复寄存器位码右移1位中断返回10时位加1YYYYYY图4电子时钟中断处理程序流程
7、图145.2程序codesegmentassumecs:code,ds:codestart:movax,csmovds,axmovbp,0064h;设置计数初值jmpstart1portbitequ0ff28hportsegequ0ff29hstart1:movdx,0ff2bhmoval,10000001boutdx,al;8255初始化moval,34hmovdx,0043houtdx,al;8253写控制字movdx,0040hmovax,10000doutdx,almoval,ahoutdx,al;
8、8253初始化moval,13h;8259初始化movdx,0ff80houtdx,al;ICW1初始化moval,08hmovdx,0ff81houtdx,al;ICW2初始化moval,01h14outdx,al;ICW4初始化inal,dxandal,0fehoutdx,al;OCW1打开非屏蔽位pushdsmovax,0movds,axmovax,offsetintrmovds:wordptr[4*8],