PC机实时时钟的设计剖析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 PC机实时时钟的设计

利用PC机现有的硬件和软件资源设计程序,以实现在显示器上显示XX(时):XX(分):XX(秒)。

(1)设计思路

PC机系统板上使用一片8253,其地址为40H—43H,其通道0以方式3工作,每55ms 向中断控制器8259A IRQ0端发一次中断请求。本设计题要求借用原有电路,重新设置8253的计数器0每10ms产生一次中断,100次中断后加1秒,然后调整时、分、秒并显示在屏幕上。

(2)实时时钟的功能

按下任意键开始显示数据区中存放的时间值,并且每秒更新一次,运行中按下空格键则停止运行并返回DOS。程序中应保护原系统的08H中断矢量以便退出时恢复原系统的设置。

(3)题目的要求

① PC机实时时钟的基本程序如附录一,请根据中断服务程序设计时钟时、分、秒调整的中断服务程序,然后调试实现时钟的基本功能

②在原有程序基础上,增加键盘输入字符功能,可通过修改时、分、秒的数据,实现实时时钟可调整功能。

③在原有程序基础上,设计美观的时钟显示方式及友好的操作方式。

附录一

STACK segment para stack 'stack'

db 256 dup (0)

stack ends

data segment para public 'data'

count db 100

tenh db '1'

hour db '3',20h

tenm db '1'

minute db '0'

db ':'

tens db '5'

second db '0',0dh,'$'

data ends

code segment para public 'code'

start proc far

assume cs:code

push ds

xor ax,ax

push ax

mov ah,01

int 21h

cli

cld

mov ax,0000h

mov ds,ax

mov si,0020h

lodsw

mov bx,ax

lodsw

push ax;seg

push bx;offset

mov ax,data

mov ds,ax

assume ds:data

mov ax,0000h

mov es,ax

mov di,0020h

mov ax,offset timer stosw

mov ax,cs

stosw

mov al,00110110b

out 43h,al

mov ax,11932

out 40h,al

mov al,ah

out 40h,al

in al,21h

push ax

mov al,0fch

sti

forever: mov dl,0ffh

mov ah,06

int 21h

jz disp

cmp al,20h

jz exit

disp:mov dx,offset tenh mov ah,9

mov al,second waitcha: cmp al,second jz waitcha

jmp forever exit: cli

cld

pop ax

out 21h,ax

mov al,36h

out 43h,al

mov al,0

out 40h,al

out 40h,al

mov ax,0

mov es,ax

mov di,4*8

pop ax

stosw

pop ax

stosw

sti

ret

start endp

timer:push ax

push cx

sti

mov al,count

dec al

mov count,al

jnz int_ret

mov count,100

mov al,second

add al,1

aaa

mov second,al

jnc int_ret

mov al,tens

adc al,0

aaa

and al,0fh

mov tens,al

jnz int_ret

mov al,0

mov tens,al

mov al,minute add al,1

aaa

mov minute,al jnc int_ret

mov al,tenm

adc al,0

aaa

and al,0fh

mov tenm,al

cmp al,6

jnz int_ret

mov al,0

mov tenm,al

mov al,tenh

mov cl,4

shl al,cl

mov cl,al

mov al,hour

and al,0fh

or al,cl

add al,1

daa

cmp al,24h

jz reseth

mov ch,al

mov cl,4

shr al,cl

or al,30h

mov tenh,al

mov al,ch

and al,0fh

or al,30h

mov hour,al

jmp int_ret reseth: mov tenh,'0' mov hour,'0' int_ret:

mov al,second

相关文档
最新文档