微机原理课程设计电子闹钟.docx

上传人:小飞机 文档编号:3513920 上传时间:2023-03-13 格式:DOCX 页数:13 大小:40.32KB
返回 下载 相关 举报
微机原理课程设计电子闹钟.docx_第1页
第1页 / 共13页
微机原理课程设计电子闹钟.docx_第2页
第2页 / 共13页
微机原理课程设计电子闹钟.docx_第3页
第3页 / 共13页
微机原理课程设计电子闹钟.docx_第4页
第4页 / 共13页
微机原理课程设计电子闹钟.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《微机原理课程设计电子闹钟.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子闹钟.docx(13页珍藏版)》请在三一办公上搜索。

1、微机原理课程设计电子闹钟电子钟设计 1任务要求 1.1显示位置:屏幕中央. 1.2日期显示格式时:分:秒. 1.312/24时制可调. 1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间. 2工作原理 1时钟起始时间的设置 先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储

2、器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。 2延时程序 调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。 3时间显示 调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BC

3、D码字符串转换成ASCII字符串,字符串最后以字符“”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。 4程序堆图 5程序清单 DATA SEGMENT BUFFER DB 10 ;设置输入字符串用缓冲区 DB ? DB 10 DUP(?) TS DB TIME SYSTEM IS:$ CT DB CURRENT TIME IS:$ PM DB PM $ AM DB AM $ KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR

4、 DB ? DAT ENDS STA SEGMENT PARA STACK STACK STAPN DB 100 DUP(?) TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H ;设置1CH中断 MOV AL,1CH INT 21H ;段地址放入ES,偏移地址放入BX MOV KEEPIP,BX ;保偏移地址存 MOV KEEP

5、CS,ES ;保存段地址 PUSH DS MOV DX,OFFSET TIME MOV AX,SEG TIME MOV DS,AX MOV AL,1CH MOV AH,25H ;设置中断功能调用 INT 21H POP DS MOV DX,OFFSET TS ;DOS功能模块,显示字符串 MOV AH,9 INT 21H MOV AH,1 ;DOS功能模块,从键盘输入字符 INT 21H MOV AH,1 INT 21H MOV SR,AL MOV DL,0AH ;换行 MOV AH,2 INT 21H MOV DL,0DH ;回车 MOV AH,2 INT 21H MOV DX,OFFSET

6、 CT ;DOS功能模块,显示字符串,提示从键盘输入 MOV AH,9 INT 21H MOV DX,OFFSET BUFFER MOV AH,10 ;DOS功能模块,从键盘输入字符串到缓冲区 INT 21H MOV BX,OFFSET BUFFER+2 CALL TRAN1 ;将输入的ASCII码转换为BCD码 INC BX INC BX CALL TRAN1 INC BX INC BX CALL TRAN1 MOV BX,OFFSET BUFFER+2 MOV AL,BX CALL MUL10 ;将BCD码转换为压缩的BCD码 MOV CH,AL INC BX INC BX MOV AL,

7、BX CALL MUL10 MOV DH,AL INC BX INC BX MOV AL,BX CALL MUL10 MOV DL,AL AGAIN: PUSH CX MOV CX,18 STI ;开中断 W: CMP CX,0 JNE W CLI POP CX MOV AL,DL ADD AL,1 ;秒加1 DAA MOV DL,AL CMP AL,60H ;秒与60比较 JNE DISPY ;小于60S,转显示程序 MOV DL,0 ;等于60S, 秒值为0,分+1 MOV AL,DH ADD AL,1 DAA MOV DH,AL CMP AL,60H ;分于60比较 JNE DISPY

8、MOV DH,0 MOV AL,CH ADD AL,1 DAA MOV CH,AL MOV AL, SR CMP AL,32H JNE NEXT JMP DISPY NEXT: MOV AL,CH MOV HOUR,CH CMP AL,24H JNE DISPY MOV CH,0 DISPY: CALL IOCLR CALL IOSET1 CALL STAR CALL IOSET2 CALL STAR CALL IOSET MOV BX,OFFSET BUFFER MOV AL,SR CMP AL,32H JNE NEXT2 CALL AD12 MOV AL,HOUR JMP NEXT1 NE

9、XT2: MOV AL,CH ;时值转换成ASCII码 NEXT1: CALL TRAN2 ;将压缩BCD码转换成ASCII码 INC BX MOV AL,: MOV BX,AL INC BX MOV AL,DH ;分值转换成ASCII码 CALL TRAN2 INC BX MOV AL,: MOV BX,AL INC BX MOV AL,DL ;秒值转换成ASCII码 CALL TRAN2 INC BX MOV AL,$ ;显示字符串结束码 MOV BX,AL PUSH BX PUSH CX PUSH DX MOV DX,OFFSET BUFFER MOV AH,9 ;DOS功能模块,显示字

10、符串 INT 21H POP DX POP CX POP BX JMP AGAIN CLI PUSH DS MOV DX,KEEPIP MOV AX,KEEPCS MOV DS,AX MOV AH,25H MOV AL,1CH INT 21H POP DS STI RET START ENDP MUL10 PROC ;将BCD码转换为压缩的BCD码 ADD AL,AL DAA MOV CL,AL ADD AL,AL DAA ADD AL,AL DAA ADD AL,CL DAA MOV CL,AL INC BX MOV AL,BX ADD AL,CL RET MUL10 ENDP TRAN1

11、PROC MOV AL,BX AND AL,0FH MOV BX,AL INC BX MOV AL,BX AND AL,0FH MOV BX,AL RET TRAN1 ENDP TRAN2 PROC MOV CL,AL SHR AL,1 SHR AL,1 SHR AL,1 SHR AL,1 OR AL,30H MOV BX,AL INC BX MOV AL,CL AND AL,0FH OR AL,30H MOV BX,AL RET TRAN2 ENDP IOCLR PROC PUSH CX PUSH DX PUSH BX PUSH AX MOV AX,0600H MOV BH,02 SUB C

12、X,CX MOV DX,184FH INT 10H ;ASCII码转换成BCD码 ;将压缩BCD码转换成ASCII码;调用BIOS,清除全屏幕 POP AX POP BX POP DX POP CX RET IOCLR ENDP TIME PROC DEC CX IRET TIME ENDP PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MO

13、V BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H 调用BIOS,设置屏幕光标在中央 ; POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H

14、X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,

15、AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR 6设计时遇到的问题及解决方法 在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的微机原理与接口技术(基于

16、16位机),重点研究了第9章中断,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。 设中断服务程序入口地址为TIME,则相应的程序如下: KEEPIP DW 0 ;设置内存缓冲区,用于暂存 KEEPCS DW 0 ;DOS的中断矢量 ;在主程序的初始化部分,先取出DOS的中断矢量并加以保存,然后装入需要的中断矢量 MOV AH,35H ;取出DOS的中断矢量,并送ES:BX MOV AL,1CH INT 21H MOV KEEPIP,BX ;保存DOS的中断矢量 MOV KEEPCS,ES PUSH DS;保护DS MOV DX,OFFSET TIME ;将中断矢量取

17、代 MOV AX,SEG TIME ;DOS的中断矢量 MOV DS,AX MOV AL,1CH MOV AH,25H ;设置中断功能调用 INT 21H POP DS ;恢复DS AGAIN: PUSH CX MOV CX,18 STI ;开中断 W: CMP CX,0 JNE W CLI TIME PROC DEC CX IRET TIME ENDP ;在程序结尾处,用以下程序恢复DOS的中断矢量 CLI PUSH DS MOV DX,KEEPIP MOV AX,KEEPCS MOV DS,AX MOV AH,25H MOV AL,1CH INT 21H POP DS STI 7新增功能及

18、实现方法 7.112时制时显示AM或PM AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV

19、AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP 7.2绿色显示时间 IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP 7.3在数字上下方各显示一行个数同小时数的= IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT

20、10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX PO

21、P CX POP BX POP AX RET STAR ENDP 8心得体会 这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。首先就是借鉴.鲁迅先生曾说过要拿来,对,在这次课程设计中,就要拿来不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我的设计,为我节省了很多的时间。还有就是指导老师提供的资料很重要.这次课程设计的大部分程序,都可以在李老师提供的资料中找到,这对我的程序设计很有帮助,从这些资料中,我可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有李老师提供的源程序,我将面临很大的困难。 文章引用自:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号