微机原理课程设计报告_数字时钟的实现(附代码)

上传人:飞*** 文档编号:97019873 上传时间:2022-05-26 格式:DOCX 页数:46 大小:577.04KB
收藏 版权申诉 举报 下载
微机原理课程设计报告_数字时钟的实现(附代码)_第1页
第1页 / 共46页
微机原理课程设计报告_数字时钟的实现(附代码)_第2页
第2页 / 共46页
微机原理课程设计报告_数字时钟的实现(附代码)_第3页
第3页 / 共46页
资源描述:

《微机原理课程设计报告_数字时钟的实现(附代码)》由会员分享,可在线阅读,更多相关《微机原理课程设计报告_数字时钟的实现(附代码)(46页珍藏版)》请在装配图网上搜索。

1、合肥工业大学计算机与信息学院课程设计课 程:微机原理与接口技术设计 专业班级:计算机科学与技术学 号:姓 名:、设计题目及要求:II题6】数字时钟1 .通过8253定时器作产生秒脉冲定时中断。在中断服务程序中实现秒小时的进位(24小时制)。2 .在七段数码管上显示当前的时分秒(例如,12点10分40秒显示为121040 )。3 .按C可设置时钟的时间当前值(对准时间)二、设计思想:总体思想:1 8088CPU控制H 8253控制L +LED数码管1、功能概述:实验箱连线:本实验建立在Dais实验箱基础上完成的基本连线及程序如下138译码器:A,B,C,D,分别连接 A2,A3,A4,GS ;

2、y0连接8253的CS片选信号;y1连接8259的CS片选信号;8253连线:分频信号T2接8253的CLKO ;8253 的 OUTO 接 8259 的 IR7;8253的gate信号接+5V ;8259连线:8259的数据线接入数据总线;DO,那数露三” )本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块,(1)程序运行后,LED显示000000初始值,弁且开始计数(2)按C键进行设置初始时间,考虑到第一个数只能是0, 1, 2,当第一个数显示2时第二个数只能显示 04 ,同理下面各位应满足时钟数值的合理的取值;(3)在手动输入初始值时,按 D键进行回退1位修改已设置值,

3、连续按 D键可以全部 进行 删除修改。2、主程序设计主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259 一个刺激,当8259接受到刺激后会给 CPU 一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。详细流程图见图三-1。3、LED显示子程序设计本程序显示部分用了 6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的 0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应白数字。虽然 C

4、PU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。4、键盘扫描子程序设计本程序需要用键盘对时间的初始值进行设置,因此对键盘扫描的子程序需要满足的功能如下:判断是否是C键,若不是就返回至主程序,若是 C键就开始对时间初始值进行设置,同时因注意到第一个值不可以超过2,第一个数是2时第二数不能超过 4,余下的同理要满 足时间数值的取值范围呢,若不是合法输入不予反应继续等待输入。当遇到输入数值错误 时可以按下D键进行删除一位重新设置;当 6位初始值全部设置成功后,电子表将自动开 始走表。5、时间运算子程序设计该子程序的主要功能是对时、分、

5、秒的运算,弁把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为秒定时模块和运算模块。定时模块交由8253通过对分频出来的频率进行放大至1秒,因此每隔1秒对8259进 行刺激,进而使CPU处理中断子程序及时间运算的子程序。另外,在中断服务程序里,必 须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;当分加 至U 60时,时加1、分清零。当时加到24时,直接清零。6、中断设置8259芯片:在该系统中,8259主要担负着处理 8253的一秒时间的脉冲信号,通过 8253的每秒的刺激下向 CPU发送中断请求,进而 CPU处理担负时间计算

6、的中断子程序,即可完成每秒钟时间自加1秒的功能,因此8259的设置应为:ICW1 :单片,边沿触发,写入ICW4ICW2 :写入 08HICW3:7、定时器设置8253芯片:在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在 着连接关系。8253主要担负着时间计时的功能,通过对分频单元提供的频率信号进行方法产生一秒时间为周期的脉冲信号,因此8253的设置应为:控制口写入:00110100b;计算器0选择先低后高两字节读或写方式2二进制计数;计数器0写入:38400 ;时间系数通过计算可以产生 1秒的脉冲信号;&编址及控制字确定(1) 8259端口及控制字设置:Port_8

7、259_0 EQU 0FFE0HPort 8259 1 EQU 0FFE1H8259初始化设置:ICW4ICW1 : 00010011,边沿触发,单片方式,写ICW2 : 00001000 ,INIT8259:MOV AL,13HMOV DX,Port_8259_0OUT DX,ALMOV AL,08HMOV DX,Port_8259_1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH;IRQ7OUT DX,ALRET(2) 8253端口及控制字设置PORT 8253 00EQU 0FFE4HPORT 8253 01EQU 0FFE5HPORT 8253 10EQU

8、 0FFE6HPORT_8253_118253初始化设置EQU 0FFE7HINITCLKO:MOV DX,PORT_8253_11MOV AL,00110100BOUT DX,ALMOV DX,PORT_8253_00;CLK0MOV AX,38400OUT DX,ALMOV AL,AHOUT DX,ALRET(2) LED 端口 :;段控制口位控制口 /键扫口;键盘读入口OUTSEG EQU 0FFDCHOUTBIT EQU 0FFDDH键盘端口 :IN_KEY EQU 0FFDEH(4) LED数码管字型码:LEDMAP:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,

9、082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EHDB0BFH(5)键码定义:KEYTABLE:DB 07H,04H,08H,05H,09H,06H,0AH,0BHDB 01H,00H,02H,0FH,03H,0EH,0CH,0DH三、功能流程图:1、主程序流程图(开始初始化芯片I1 I调用display显示子程I序I调用handlekey灌盘舱理程序i周用中断子程序处理时间计数2、LED显示子程序流程图3、按键处理子程序流程图调用 read_ksy4、中断子程序-时间计数子程序流程图四、结果讨论:1、实验结果:程序运行,数码管开始从 000

10、000走表,按C键后显示 开始对时钟进行初始值设置,设置初始值时可以按D键进行回退修改。2、问题解决:(1)添加D键的回退删除功能:在 C键功能实现区域里不断检测 D键是否按下,若按 下则将LED上一位数码管设置成今将设置时间的地址回退1,及可完成对D键的功能设 置;(2)调试程序时发现时钟初始值可以设置,D键回退功能也是可以的,8253gate信号也正确连接着,但是初始值设置完后时钟弁没有走表,于是将8253的输出端的线接入至手动的单脉冲的发生器,进行手动给 8259刺激,结果时钟开始随手按动开始走表,可以断定该8253芯片可能已经损坏,换了个试验箱后遇到了同样的情况,直至换了功能正常的实验

11、箱后实验现象才正确展现 。3、功能完善可以在课题要求的基础上添加一些功能,使得电子时钟的功能更加完善:(1)添加暂停功能,按键 A时间暂停,再按A键时间继续走;(2)添加闹铃功能,按键 B设置闹铃时间,时间到时控制鸣笛闹铃;(3)添加倒数计时的功能,按键 E设置倒数的初始值,时间到即鸣笛闹铃;可以看出本次课程设计的课题可以完善的地方有很多,如果只满意于已完成的则大错特错了,课程设计虽然已经结束,但是课下仍然可以对自己的课题进行进步的探索,不断完善,不断追求完美,这也是我们需要的。4、实验总结(1) 通过此次课程设计,将微机原理与接口技术课程所学的知识运用到了实际操作中,弁学会了数码管显示电子时

12、钟的制作方法;实验过程中遇到了一些困难和问题,通过同学之间的讨论和查找资料也一一攻破,顺利完成了课程设计,实验结果符合课题要求。(2) 中断服务程序设计时还应注意以下几个问题*A.因为8086CPU在响应中断时不能自动地保护它的各寄存器(除标志寄存器外)内容,虽然可用寄存器在主程序和中断服务程序之间传送参量和结果,但这样做极易引起意想不到的错误,所以应当避免,而采用指定内存单元进行参数传递;B.使用堆栈实现保护现场与恢复现场。使用时要注意堆栈的先进后出的特性,同时要确保堆栈有足够的空间,防止堆栈溢出;C?R有中断服务程序用到的那些寄存器(标志寄存器除外)的内容才需要加以保护;D.在从中断服务程

13、序返回之前,即使CPU处于关中断状态也不必开中断。在执行IERT指令后,CPU自动恢复中断前标志寄存器。(3) 调试的时候因为遇到两个实验箱都是有问题的,本来以为是程序出现了问题 ,来何检查程序,直到最后又换了个实验箱才知道程序是正确的,实验箱是实验的基础,我们做实验时都应该细心爱护,弄坏了芯片,给自己和他人都带来了不便 。附录:实验代码:(完整的源程序)CODE SEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG 3400HStart:JMP programLedMap:八段管显示码h;db 0bfhdb 0f7hKeyTable:;键码定义db07h,04h,0

14、8h,05h,09h,06h,0ah,0bh db01h,00h,02h,0fh,03h,0eh,0ch,0dhdb0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8hdb080h,090h,088h,083h,0c6h,0a1h,086h,08eOUTSEGequ0ffdch;段控制口OUTBITequ0ffddh;位控制口 /键扫口IN_KEYequ0ffdeh;键盘读入口LedBuf db 6 dup(?)time DB 0,0,0,0,0,0;显示缓冲;INTNumequ20Port 8259 0EQU 0FFE0H ;1110 0000Port_8259 _

15、1EQU 0FFE1HPort 8253 00EQU 0FFE4H ;0 01Port825301EQU 0FFE5Hini tCLK0:Port825310EQU 0FFE6Hmov dx,Port_8253_11Port825311EQU 0FFE7Hmov al,00110100bout dx,alprogram:call ini tCLKOmov dx,Port_8253_00;clk OCLImov ax,38400main Loop:MOV AX,OFFSET i nt8259MOV BX,003cHMOV BX,AXMOV BX,003EHMOV AX,0000HMOV BX,A

16、XSTIcall in it8259call update_ledbuffcall displaycall han dle_keyjmp main Loopout dx,almov al,ahout dx,alretin 48259:MOV AL,13HMOV DX,Port_8259_0OUT DX,ALMOV AL,08HMOV DX,Port_8259_1OUT DX,ALMOV AL,09Hin t8259:clipush axpush bxpush cxMOV AL,20H0010MOV DX,Port_8259_0OUT DX,ALcall time Inccall update_

17、ledbuffpop cxpop bxpop axstitime5;该位清零OUT DX,ALiretMOV AL,7FH;IRQ7OUT DX,ALRETtimelnc:push bx push cxmov bx,offset timeadd bx,5取inc byte ptr bxcmp byte ptr bx,10jb n ext5mov byte ptr bx,0dec bx ;下一位加1inc byte ptr bxinc bxn ext5: dec bxcmp byte ptr bx,6jb n ext4mov byte ptr bx,0dec bxinc byte ptr bxi

18、ncn ext4: deccmpjbmovdecincincnext3:deccmpjbmovdecincincn ext2: decbxbxbyte ptr bx,1Onext3byte ptr bx,0bxbyte ptr bxbxbxbyte ptr bx,6next2byte ptr bx,0bxbyte ptr bxbxbxcmp byte ptr bx,2jnz cmp10cmp4:inc bxcmp byte ptr bx,4jb next1mov byte ptr bx,0dec bxmov byte ptr bx,0jmp over_time Inccmp10: inc bx

19、cmp byte ptr bx,10jb next1mov byte ptr bx,0dec bxinc byte ptr bxinc bxdec bxnext1:dec bxmov al,0out dx,al;关所有八段管mov al,bxmov dx,OUTSEGout dx,almov dx,OUTBITmov al,ahout dx,al;显示一位八段管push axmov ah,1call Delaypop axshr ah,1inc bxdec cljnz DLoopcmp byte ptr bx,3jb over_time Incmov byte ptr bx,0over_tim

20、e Inc:pop cxpop bxretdisplay:push axpush bxpush cxpush dxmov bx,offset LEDBufmov cl,6 洪6个八段管;从左边开始显示mov ah,OO1OOOOObDLoop:mov dx.OUTBITmov dx.OUTBITmov bx,offset LEDMAPmov ah,0xlat;查找对应字形码mov bx,offset LedBufmov ch,0add bx,cxdec bxmov bx,al ;放入 LedBufcl-1dec cljnz ulooppop dxpop cxpop bxpop axretmov

21、 al,0out dx,al;关所有八段管pop dxpop cxpop bxpop axretupdate_ledbuff:push axpush bxpush cxpush dxmov cl,6uloop:mov bx,offset timemov al,cl dec almov ah,0xlat取出timecl-1Delay:延时子程序push cxey:movcx,256loop $popcxret Delayl:延时子程序pushcxmovcx,50lxxx:call displayloop lxxx popcxrethandiecall read_key cmp al,0ch jn

22、e nextRjmp n extCnextR:retnextC:climov bx, offset timemov cl,6loop_d:mov byte ptr bx,16inc bxloop loop_dcall update_ledbuffmov bx, offset timet1:call Displaycall read_keycmp al,2ja t1t1_over:mov bx,alcall update_ledbuffcall Delay1t2:call Displaycall read_keyJNE T22JMP T1T22:CMP AL,ODHcall read_keyCM

23、P AL,0DHmov byte ptr bx,16call update_ledbuff callDelay1cmp al,9T33:ja t2cmp byte ptr bx,2 jecmp_k_4 jmp t2_overt3over:cmp_k_4:cmp al,3ja t2jmp t2_overt2over:inc bxt4:t3:mov bx,alcall update_ledbuffcall Delay1call DisplayJNE T33 mov byte ptr bx,16DEC BXcall update_ledbuffcall Delay1JMP T2cmp al,5ja

24、t3inc bxmov byte ptrbx,alcall update_ledbuffcall Delay1call Displaycall read_keyCMP AL,ODHJNE T44mov byte ptr bx,16DEC BXcall update_ledbuffcall Delay1JMP T3T44:cmp al,9ja t4t4_over:inc bxmov bx,alcall update_ledbuffcall Delay1t5:call Displaycall read_key;+CMP AL,0DHJNE T55mov byte ptr bx,16DEC BXca

25、ll update_ledbuffcall Delay1JMP T4T55:cmp al,5ja t5t5_over:inc bxmov bx,alcall update_ledbuffcall Delay1t6:call Displaycall read_keyCMP AL,ODHJNE T66read_key:push bxmov byte ptr bx,16push cxDEC BXpush dxcall update_ledbuffmoval,0ffh ;关显示口call Delay1movdx,OUTSEGJMP T5T66:outmovdx,albl,0cmp al,9movah,

26、0fehja t6movcx,8key1:moval,aht6_over:movdx,OUTBITkey_overinc bxoutdx,almov bx,alshlal,1call update_ledbuffcall Delay1call Delay1stiretmovnopnopnopnopnopnopah,alkey4:test al,4je key5mov al,10hjmp key6key5:test al,8je nkeymov al,18hkey6:add al,blcmp al,10hjnc fkeymov bx,offset KeyTablexlatfkey:pop dxpop cxpop bxretmov dx,IN_KEY in al,dx n ot alnopnopand al,0fhjnz key2inc blloop keyln key: mov al,20hpop dxpop cxpop bxretkey2:test al,1je key3mov al,0jmp key6key3:test al,2je key4mov al,8jmp key6CODE ENDSEND Start

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!