合肥工业大学微机原理课程设计数字闹钟讲解_第1页
合肥工业大学微机原理课程设计数字闹钟讲解_第2页
合肥工业大学微机原理课程设计数字闹钟讲解_第3页
合肥工业大学微机原理课程设计数字闹钟讲解_第4页
合肥工业大学微机原理课程设计数字闹钟讲解_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术 13-1班学号:2013211601 姓 名:康安一、设计题目及要求:1 .通过8253定时器产生1秒脉冲定时中断。在中断服务程序 中实现秒、分、小时的进位(24小时制)。2 .在七段数码管上显示当前的时分秒(例如, 12点10分40 秒显示为121040)。3 .按“ C”键可设置时钟的时间当前值(对准时间)。4 .按“ D”键设置闹铃时间。5 .按“E”键表示时钟开始运行。6 .程序运行时,首先按“ D”键设置闹铃时间,然后按“C”键设置时钟的时间,再按“ E”让时钟开始运行。当前时间运行到闹铃时间

2、时,6个数码管全部 闪烁显示“ 8”。设计思想: 总体思想:控制1、功能概述:实验箱连线:本实验建立在Dais实验箱基础上完成的基本连线及程序如下138译码器:A,B,C,D,分别连接 A2,A3,A4,GS ;y0连接8253的CS片选信号;y1连接8259的CS片选信号;8253连线:分频信号 T2接8253的CLK0 ;8253 的 OUT0 接 8259 的 IR7;8253的gate信号接+5V ;8259连线:8259的数据线接入数据总线;本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块, (1)程序运行后,LED显示000000初始值,并且开始计数(2)按C键设

3、置初始时间,LED清零,显示待输入状态“,之后用户输入数字, 更改LED显示内容。考虑到第一个数只能是 0, 1, 2,当第一个数显示 2时第二个数只能 显示04,同理下面各位应满足时钟数值的合理的取值;(3)按D键设置闹钟时间,清除 LED显示内容,显示待输入状态“-,之后用户 输入数字,更改 LED显示内容。数字的取值情况和按C键设置初始时间相同。(4)按E键运行日钟,LED显示内容恢复为按 C键设置的时间,并开始计时。(5)当LED显示的数字和预先设置好的闹钟相同时,更改 LED显示状态,改为 “888888”,闪烁显示10秒后恢复原来的时间,继续计数。2、主程序设计(他人完成)主程序中

4、完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给 CPU 一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成 时间计数加,即完成电子表的整体设计。当 LED显示的时间达到预先设置的时间,关闭中 断,更改显示内容,在显示一段时间后恢复显示,打开中断,使电子表恢复运行。3、LED显示子程序设计(他人完成)本程序显示部分用了 6个共阳极LED作为显示管,显示程序要做到每送一次段码就送 一次位码,每送一次位码后, 将位码中的0右移1位作为下次的位码, 从而可以

5、实现从左到 右使6个LED依次显示出相应的数字。 虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。4、键盘扫描子程序设计(他人完成)本程序主要实现对键盘的按键进行扫描, 为参数返回。判断用户是否按下的键值,并将按下的键值作5、时钟功能设置(独立负责)本程序段负责实现判断用户按下的键值,功能设置。判断键值的方法为设置三个标志位,根据按下的键值转入不同的程序段执行相应的三个标志位分别对应 3个按键,当按键被按下时,将对应的标志位置为 1,在程序段中对三个标志位进行判断,从而实现不同的功能设 置。首先调用键盘扫描子程序 GetK

6、ey获取用户输入的键值,之后将键值分别与 0ch, 0dh, 0eh 比较:若键值为标志 ButtonD若键值为C,则跳入下一个程序段和 ButtonE 为 0;D,则跳入下一个程序段SETC,SETD,将对应的标志位将对应的标志位ButtonCButtonD置为1,置为1,其余两个其余两个标志 ButtonC 和 ButtonE 为 0;若键值为E,则跳入下一个程序段SETE,将对应的标志位ButtonE置为1,同时由于要更改显示的时间状态,将使用到的一个临时缓冲区E键被按下后,要将buff缓冲区内存的时间转移到 两个标志 ButtonD和ButtonE为0;buff的取出标志位flag也置

7、为1,表示LedBuff上来显示用户设置的时间。 其余若键值为数字,则跳入下一个程序段NEXT。NEXT程序段负责完成三个功能:设置时间、置闹钟以及时钟运行。此程序段通过判断 三个标志是否为1,来实现不同的功能。若ButtonC为1,意味着当前是设置时钟模式,用户在按下C键之后入的6位数字键为设置的时间;若 ButtonD为1,意味着当前是设置闹钟模式,用户在按下C键之后输入的6位数字键为设置好的闹钟时间;若 ButtonE为1,意味着时钟开始运行。详情见图6、闹钟显示功能(他人完成)本程序段负责实现时间达到闹钟设置时间的操作,对LED显示的内容进行判断,当 6个二极管显示的数字完全相同时,

8、即满足闹钟响的条件, 此时关闭中断,并将LED显示内容 更改为“ 888888”,显示10S后将LED恢复为响之前的状态,打开中断,继续运行时钟7、8259初始化及中断设置(独立负责)8259芯片:在该系统中,8259主要担负着处理 8253的一秒时间的脉冲信号,通过8253的每秒的刺激下向 CPU发送中断请求,进而CPU处理担负时间计算的中断子程序,即可完成每秒钟时间自加 1秒的功能,因此 8259的初始化设置应为:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT D

9、X,ALMOV AL,7FH ;IRQ7OUT DX,AL在接U到8253的脉冲后,需要执行的中断程序功能为对LED显示的数字进行判断,显 示合理的数值,即要满足显示秒的 LED管显示的最大值为 59,显示分钟的最大值为 59,显 示时钟的最大值为 23,最大时间不能超过 23: 59: 59。具体判断方法见“时间值合理的判 断”8、8253定时器设置(他人完成)8253芯片:在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在着 连接关系。8253主要担负着时间计时的功能,通过对分频单元提供的频率信号进行方法产 生一秒时间为周期的脉冲信号。三、功能流程图:1、主程序流程图

10、(他人完成)开始初始化8259芯片调用DIS显示子程序调用GetKey子程序扫描键值中断V Y调用中断子程序进行时间计数2、LED显示子程序流程图(他人完成)irN、一,6位显示完全?Y返回3、按键处理子程序流程图(独立负责)NNYY清空数据缓冲区清空数据缓冲区输入时钟时间输入闹钟时间Y执行(合作完成)秒值加1中断入口N到60?Y保护现场秒值加iN恢复现场到60?Y关显示N中断返回Y中断子程序-时间计数子程序流程图秒值加iY调用GetKey返回小时清零四、结果讨论:1、实验结果:程序运行,数码管开始从 000000走表,按C键后显示开始对时钟进行初始值设置,设置完成后按D键后,LED显示进入闹

11、钟设置状态,在设置完闹钟后按 E键开始运行,LED管显示为设置好的时间并接收8253的中断,实现不断走表。当显示时间达到闹钟时间时,LED管显示888888,在闪烁10S结束闹钟状态,再次显示时间,并开始走表。2、问题解决:自己遇到的问题:在测试C、D、E三个功能键时常常出现误输入的情况,为便于查看用户输入的值,在 用户按下相应的功能键时,将LED显示为此时显示 ,用户依次输入6个数字,相应地,在 LED上由左向右依次显示用户输入的数字,方便查看用户是否输入了自己 想测试的时间。组员遇到的问题:调试程序时发现时钟初始值可以设置,但是初始值设置完后时钟并没有走表,于是将8253的输出端的线接入至

12、手动的单脉冲的发生器,进行手动给8259刺激,结果时钟开始随手按动开始走表,可以断定该8253芯片可能已经损坏,换了个试验箱后遇到了同样的情况, 直至换了功能正常的实验箱后实验现象才正确展现。附录:实验代码:(完整的源程序)CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODE ;org 5000hPort0 EQU 0FFE0HPort1 EQU 0FFE1Hport00 equ 0FFF0Hport33 equ 0FFF3HOUTSEG equ 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口 /键扫口IN_KEY equ 0ffdeh

13、;键盘读入口 org 3400hLedBuf db 6 dup;显示缓冲CBuf db 6 dup(0fh)buf db 6 dup(?);临时存放时刻buttonC DB 02H ;若C键被按则置1buttonD DB 03H ;若D键被按贝U置 1buttonE DB 00H ;若E键被按贝U置 1flag DB 00h ;时间从BUF取出至U LEDBUF标志cflag DB 00hStart:;mov cflag,00mov LedBuf+0,00h ;开启时显示000000mov LedBuf+1,00hmov LedBuf+2,00hmov LedBuf+3,00hmov LedB

14、uf+4,00hmov LedBuf+5,00hmov si,0初始化J J J J J J J J J J J J J J J J J J J J J J J J push ax push dxMOV DX,port33 MOV AL,36H OUT DX,AL MOV DX,port00 MOV AL,00H OUT DX,AL MOV AL,4BH OUT DX,AL pop dx pop axCLIMOV AX,OFFSET INT8259MOV BX,003cHMOV BX,AXMOV BX,003EHMOV AX,0000HMOV BX,AXCALL FOR8259STIJ J J

15、 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J Jcon8:CALL DIS and al,0fh ;显示键码 cmp al,0dh ;d:设置闹钟 jz setDcall GetKey cmp al,20h jz con8;扫描键盘并读取键值 检测是否按下按键cmp al,0ch ;c:设置时钟先时后分 jz setC cmp al,0eh 时钟运行 jnz zhong ;CDE均不是,则跳转到 NEXT jmp setE setD: mov buttonD,01h MOV

16、buttonC,00h MOV buttonE,00hhui:mov cx,6mov si,6 push ax mov al,LedBufsi;之前代码声明过,si为0,所以此处 si将依次为0, 1, 2, 3, 4, 5mov bufsi,al ;依次把LEDBUF里的时分秒存到 BUF pop ax inc si loop hui mov si,00h mov LedBuf+0,11h ;开启时显示mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11h mov LedBuf+4,11h mov LedBuf+5,11h call disCLI ;

17、关中断,进入设置闹钟模式 jmp con8zhong:jmp nextsetC: MOV buttonC,01hMOV buttonD,00hMOV buttonE,00h mov si,00hmov LedBuf+0,11h ;开启时显示mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11h mov LedBuf+4,11h mov LedBuf+5,11h call disCLI ;关中断,进入设置当前时间模式 jmp con8setE:MOV buttonE,01hMOV buttonD,00hMOV buttonC,00hcmp flag,01

18、hjz nextSTI ;开中断,即确认C、D的输入值next:mov bl,buttonD ;通过判断三种标志,跳转到响应设置上cmp bl,01hjz writeDEmov bl,buttonCcmp bl,01hjz writeCmov bl,buttonEcmp bl,01hjz writeDEjmp con8;writeC:mov LedBuf+si,al inc siPUSH CXMOV CX,100DELAYc: call disLOOP DELAYCPOP CXcmp si,06hjnz overCmov buttonC,00hoverC: jmp con8;writeDE:c

19、mp flag, 01h ;若取出BUF内时间标志与 E键标志均为1,则把BUF的内容取回LEDBUF jnz goDcmp buttonE,01hjz recoverLED goD: cmp si,06hjnb overDmov LedBuf+si,al ;显示当前按下的键值 mov Cbuf+si,al ;存入闹钟缓冲区inc siPUSH CX ;键盘防抖MOV CX,100DELAYd: call disLOOP DELAYDPOP CX cmp si,06hjnz overd ;若SI不等06h即小于6,则跳到con8处,继续获取键值,直至 6位闹钟设置完毕MOV BUTTOND,0

20、0H;闹钟设置完毕,使 D键标志失效,使其不会继续设置闹钟,并将取出BUF内时间标志置1mov flag,01h overD: JMP con8recoverLED: cli ;实现从 BUF知LEDbuf功能的具体代码区 push si push cx PUSH BXmov cx,0006hloopD: mov bx,offset LedBufpush cx dec cx mov si,cx pop cxmov bl,Bufsimov LedBufsi,bl loop loopDPUSH CX ;键盘防抖 MOV CX,100 DELAYdd: call dis LOOP DELAYDd P

21、OP CXMOV BUTTONE,00H ;任务完成,是 E键标志失效,取出标志失效,闹钟响标志生效 mov flag,00h MOV Cflag,01h sti POP BX pop cx pop si sti jmp con8 ;StartRing: cli push si push cx call LEDtoBUF ;启动闹钟显示前,存储 LEDbuf mov cx,08h loopring1:mov LedBuf+0,08h ;开启时显示888888” mov LedBuf+1,08h mov LedBuf+2,08h mov LedBuf+3,08h mov LedBuf+4,08h

22、 mov LedBuf+5,08hpush cx ;延时 MOV CX,100 DELAYringl: call dis LOOP DELAYringl pop cxmov LedBuf+0,010h mov LedBuf+1,010h mov LedBuf+2,010h mov LedBuf+3,010h mov LedBuf+4,010h mov LedBuf+5,010hpush cx ;延时 MOV CX,100 DELAYring2: call dis LOOP DELAYring2 pop cxloop loopringlcall BUFtoLED ;闹钟显示结束,恢复LEDbuf

23、;mov juRing,00hpop cxpop sistiret judgeclock: cmp Cflag,01h ;判断是否到达闹钟具体代码区 jnz Noringmov al,LedBufcmp al, CBufjnz Noringmov al,LedBuf+1cmp al,CBuf+1jnz Noringmov al,LedBuf+2cmp al,CBuf+2jnz Noringmov al,LedBuf+3cmp al,CBuf+3jnz Noringmov al,LedBuf+4cmp al,CBuf+4jnz Noringmov al,LedBuf+5cmp al,CBuf+5

24、jnz Noringjmp YesringNoring:jmp returnYesring:call startringreturn:retLEDtoBUF: PUSH si push ax mov si,00hLBloop: mov al,LEDbufsi MOV bufsi,al inc si cmp si,06h jnz LBloop POP AX POP SI RETBUFtoLED: push si push ax mov si,00h BLloop: MOV AL,BUFsi mov LedBufsi,AL INC SI CMP SI,06H JNZ BLloop pop ax p

25、op si retJ J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J JFOR8259:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET 中断子程序J J J J J J J J J J J J J J J J J J J J J J J J I T J4 J J J J J J J J J J J

26、J J J J J J J J J J J J J J J J J J J J J JINT8259:clipush axpush bxpush cxpush si;call judgeclock;cmp juRing,01h;jnz noRing1;call StartRingnoRingl: mov al,LedBuf+5;此处往下的代码区均无问题,无需更改 mov ah,0call judgemov LedBuf+5,almov si,4hcall judge6dec sicall judge9dec sicall judge6dec sicall judge24cmp cflag,01

27、hjnz noringgg call judgeclock noringgg:pop sipop cxpop bxpop ax CALL DISSTIIRET;judge: cmp al,09hjnz LL1mov al,0mov ah,1h jmp judge。LL1: inc aljudgeO: retjudge6: mov al,LedBuf+siadd al,ahmov ah,0hcmp al,06hjnz LL2mov al,0mov ah,1hLL2: mov LedBuf+si,al ret judge9: mov al,LedBuf+si add al,ahmov ah,0hc

28、mp al,0ahjnz LL3mov al,0mov ah,1hLL3: mov LedBuf+si,al retjudge24: mov al,LedBuf+0 cmp al,2jz LL4call judge9mov al,LedBuf+0add al,ahmov ah,0hmov LedBuf+0,aljmp L24LL4:mov al,LedBuf+1add al,ahmov ah,0hcmp al,4hjnz LL5mov al,0mov LedBuf+0,almov LedBuf+1,alJMP L24LL5: mov LedBuf+1,alL24: retJ J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J;GetKey:;键扫子程序mov al,0ffh ;关显示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论