人人范文网 范文大全

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

发布时间:2020-03-03 02:54:45 来源:范文大全 收藏本文 下载本文 手机版

电子钟设计

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子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。

2延时程序

调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。

3时间显示

调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,(DS:DX)应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下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 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 KEEPCS,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 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,[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

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 NEXT2: 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功能模块,显示字符串

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 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 CX,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 MOV 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 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,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位机)》,重点研究了第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

;将中断矢量取代

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新增功能及实现方法

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 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 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 POP CX POP BX POP AX RET STAR ENDP „„ 8心得体会

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

微机原理课程设计(电子时钟)

微机原理课程设计

微机原理课程设计

微机原理课程设计

微机原理课程设计

微机原理课程设计

微机原理课程设计

微机原理课程设计

课程设计数字电子闹钟

微机原理课程设计题目

微机原理课程设计电子闹钟
《微机原理课程设计电子闹钟.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档