您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 8086数字电子钟的设计
HefeiUniversity微机原理与接口技术课程设计论文题目:数字电子钟的设计报告人:黄应光0705076043王腾0705076045班级:07级自动化(2)班指导老师:刘伟、林泽坤2010年01月02日论文题目数字电子钟的设计指导教师刘伟学生班级07自动化2班学生姓名黄应光王腾设计内容分析论证(1)实验线路(2)理论分析(3)功能流程设计条件要求①具有24/12小时计时;②正点报时;③设置时间;④设置闹钟;⑤显示用数码管;⑥设置按键尽量少;⑦可扩展秒表功能;设计进程安排第一周设计任务:(1):明确课题对程序功能,运算精度等方面的要求及硬件条件(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):存储器资源分配第二周设计任务:(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。文献资料准备《微型计算机原理及接口技术》中国科技大学出版社吴秀清周荷琴编著《16-32位微型计算机技术及应用》清华大学出版社戴梅萼史嘉权编著汇编语言程序设计》南京大学出版社姚君遗编著《汇编语言程序设计教程》清华大学出版社杨记文编著《微型计算机原理及接口技术》实验指导书摘要:以8086或是8066为cpu,利用8253可编程定时/计数器、8259中断控制器、8255可编程并行接口芯片和七段数码管设计一个电子钟的电路,并编制一段程序使的该电子钟能正常运行。并且能用手动控制输入的方法修改电子时钟的时间。主要目的是通过此次课程设计是我们对一般的电子产品的设计有所了解,并在此的基础上更加深入、熟练地学习8086、8253、8259等芯片的基本知识。关键词:数字电子钟、8086、8253、8255、中断。目录录一、设计任务书…………………………..2二、摘要…………………………...……...3三、目录…………………………………..4四、设计目的……………………………..5五、实验连线……………………………..5六、设计思想……………………………6七、功能流程图…………………………..7八、汇编程序………………………..…....8九、心得体会…………...……………….22一、设计目的:(1)熟悉掌握8086/88指令系统。(2)理解掌握定时/计数器和中断的使用方法。(3)掌握微机原理实验系统的使用,掌握控制数码管显示的程序。(4)掌握一定的汇编语言知识,培养自己的动手操作能力。(5)学习程序设计的基本思路和方法。二、实验连线三、设计思想1、概述:程序主体设计:本程序共有分端口设置模块,计数模块,显示模块等几个模块。C--DISPLAY12,34,56----将闹钟设置为12:34:56;G--GOAHEAD----开中断,闹钟恢复走时D--STOPTODISPLAY-----关中断,闹钟停止走时E--EXITTODOS----返回DOSM--SETTHECLOCK-----设置闹铃时间F--OPENTHECLOCK-----设置闹钟功能为开B--CLOSETHECLOCK-----设置闹钟功能为关P--POSITIONTHEBENINNINGDATE------设置闹钟的时间2、计时器软件的设计:①主程序中,要对各个用到的芯片进行初始化,目的是使其每20毫秒产生一次方波。8253A的定时器输出与8259A的IR2连接,计数器0工作在模式3(方波发生器),计数值采用二进制格式,输出作为计数器1的输入,计数器1工作在模式2(分频器),计数值采用二进制格式,输出到总线IRQ2,向CPU发送时钟中断信号,根据两个计数器的设置,系统每隔20毫秒便由8253A产生一次中断请求,即每隔20毫秒执行一次中断处理程序。这个方法将与时间相关的两个模块即显示模块和计时模块放在中断处理程序中,这样,就保证了数字显示的稳定,中断处理程序完成计时功能要依靠两个方面,因为中断处理程序是每20毫秒执行一次,但计时并不是以20毫秒为单位进行的,而是以秒为单位进行的,所以,计时功能的实现一方面要利用20毫秒这个基准时间单位,另一方面借助一个计数单位。计数单位的初始值为50,每进行一次中断,便使计数单元的内容减1。每当计数单元从50减为0时,说明已经过了1秒时间。并判断是否有进位,如有则进行修改,实现进位。并在LED上显示。②显示部分:本程序显示部分用了6个共阴极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。四、功能流程图收到50次中断?进位处理部分(下)闹铃开?计数值减一(初值为50)YN闹铃时间到?中断进入YYN响铃退出中断服务四、源程序以及注释;*键盘显示8255LED*;;*********************;IO_PLX_DEVICE_IDEQU05406H;TPC卡设备IDIO_PLX_VENDOR_IDEQU010B5H;TPC卡厂商IDIO_PLX_SUB_IDEQU0905410B5H;TPC卡子设备及厂商IDPA55EQU218H-200H;8255端口地址PB55EQU219H-200HP55CTLEQU21BH-200HPORTSEGEQU211H-200H;LED端口地址PORTBITEQU210H-200HTIM_CTLEQU203H-200H;8253端口地址TIMER0EQU200H-200HTIMER1EQU201H-200HMODE03EQU36H;0011-0111MODE12EQU74H;0111-0101DATASEGMENTCSREGDW?IPREGDW?;旧中断向量保存空间IO_9054BASE_ADDRESSDB4DUP(0);TPC卡PCI接口芯片I/O基地址暂存空间IO_BASE_ADDRESSDB4DUP(0);TPC卡I/O基地址暂存空间INTERRUPT_LINEDB2DUP(0);TPC卡中断号暂存空间PCICARDNOTFINDDB0DH,0AH,'TPCPCICARDNOTFINDORADDRESS/INTERRUPTERROR!!!',0DH,0AH,'$'IO9054BASEADDRESSDB0DH,0AH,'TPCPCICARD9054CHIPI/OBASEADDRESS:','$'IOBASEADDRESSDB0DH,0AH,'TPCPCICARDI/OBASEADDRESS:','$'INTNUMBERDB0DH,0AH,'TPCPCICARDINTERRUPTLINE:','$'ENTER_RETURNDB0DH,0AH,'$'MESSDB'8253ATIMER0INMODE3!COUNT=0200H',0AH,0DHDB'8253ATIMER1INMODE2!COUNT=0AH',0AH,0DH,'$'MESS1DB'IAMRINGING',0AH,0DH,'$'IRQ_VECTDB08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,70H,71H,72H,73H,74H,75H,76H,77H;新的中断向量,中断0-7的向量为:08H-0FH,中断8-15的向量为:70H-77HIRQ_MASK_0_7_TABLEDB011111110B,011111101B,011111011B,011110111BDB011101111B,011011111B,010111111B,001111111BDB011111011B,011111011B,011111011B,011111011BDB011111011B,011111011B,011111011B,011111011B;新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零IRQ_MASK_8_15_TABLEDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB011111110B,011111101B,011111011B,011110111BDB011101111B,011011111B,010111111B,001111111B;新的中断掩码,中断0-7时全一,中断8-15时从低至高相应位为零COUNTDB15CTIMEDB00H,00H,00H,00H,00H,00HCLOCKDB0AH,0AH,0AH,0AH,0AH,0AHBUFDB00H,00H,00H,00H,00H,00H;*****************MYBELLDB00H;***********OFF***INITIALIZEMONTH3DB0DAY3DB0CHAR1DB?INTMASKDB?CONST1DW?LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00HTABLE1DW0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001HDW0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002HDW0104H,0204H,0404H,0804H,1004H,2004H,4004H,8004HCHARDB'CDEFBA9845673210RPMG';MAXDAYDB00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FHMESDB'INSMALLKEYRORD',0AH,0DHDB'C--DISPLAY12,45,37;G--GOAHEAD',0AH,0DHDB'D--STOPTODISPLAY;E--EXITTODOS',0AH,0DHDB'M--SETTHECLOCK;F--OPENTHECLOCK',0AH,0DHDB'B--CLOSETHECLOCK',0AH,0DHDB'P--POSITIONTHEBENINNINGDATE',0AH,0DH,'$'DATAENDSSTACKSSEGMENTDB100DUP(?)STADW512DUP(?)TOPEQULENGTHSTASTACKSENDSCODESEGMENT;ASSUMECS:CODE,DS:DATA,SS:STACKS,ES:DATASTART:;ENABLELOCALINTERRUPTINPUT.386CLIMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKSMOVSS,AXCALLFINDTPC;查找TPC卡资源并显示MOVAH,0INT1AH;时间中断,保存到DX中MOVBX,DXT1:MOVAH,0INT1AHCMPBX,DXJZT1MOVBX,DXMOVSI,0T2:MOVAH,0INT1AHMOVAX,800HT3:DECAX;循环800H次JNZT3INCSICMPBX,DXJZT2MOVAX,30HMOVBX,SIMULBXMOVBX,56HDIVBXMOVWORDPTRCONST1,AXMOVDX,WORDPTRIO_BASE_ADDRESS;初始化8253ADDDX,TIM_CTL;控制口MOVAL,MODE03;36H==00110110;计数器0工作在模式3(方波发生器),计数值采用二进制格式OUTDX,ALMOVDX,WORDPTRIO_BASE_ADDRESSADDDX,TIMER0;计时器0MOVAL,00HOUTDX,ALMOVAL,02HOUTDX,ALMOVDX,WORDPTRIO_BASE_ADDRESSADDDX,TIM_CTL;74H==01110100;设置计数器1工作在模式2(分频器),计数值采用二进制格式MOVAL,MODE12OUTDX,ALMOVDX,WORDPTRIO_BASE_ADDRESSADDDX,TIMER1MOVAL,0AHOUTDX,ALMOVAL
本文标题:8086数字电子钟的设计
链接地址:https://www.777doc.com/doc-5410070 .html