微机实时时钟课程设计.docx
《微机实时时钟课程设计.docx》由会员分享,可在线阅读,更多相关《微机实时时钟课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
微机实时时钟课程设计
DATASEGMENT
UISDB0DH,0AH,10dup(0),50DUP('*'),'$'
UIEDB0DH,0AH,10dup(0),50DUP('*'),'$';界面字符
MSG1DB"Thedateis:
$"
MSG2DB"Thetimeis:
$"
MSGINDB"Pleaseselectinputmethods:
",0DH,0AH
DB21DUP(""),"Pressaforsingle,pressiforall$"
MSGDIRDB"Pleaseinputlikethis:
OO:
00",0DH,0AH
DB21DUP(""),"Pressentertocontinue$"
MSGWARNDB"Error!
Pleaseenteragain$"
MSGAIDB"Pressatochangeposition",0DH,0AH
DB21DUP(""),"itochangevalue,entertocontinue$"
MSGSECDB"Pressitostartorstop",0DH,0AH
DB21DUP(""),"Pressqtoquit,atoclearwhenitwasstoped$"
NULINEDB25DUP(?
),'$';清空行
KSBUFDB6,0,6DUP(?
)
KEYNUMDB?
MODEDB?
DAYDB?
MONDB?
YEARDW?
SECDB?
MSECDB?
MINDB?
HOURDB?
BEEPHOURDB0,0
BEEPMINDB0,0
SWIOFFDB"FF$"
SWIONDB"N$"
SETSTRDB"00:
00OFF/ON",'$'
WSTRDB"00:
00:
00",'$'
BFLAGDB0
SFLAGDB0
INISEGDW0
INIOFFDW0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLCLEAR
CALLCREATUI
MOVMODE,0
CALLSOUND
AGAIN:
CALLREFRESH;刷新时间日期
;******BFALG为闹钟与秒表标志位。
下面为处理闹钟
CMPBFLAG,0
JESETMOU
CMPBFLAG,1
JNECRING
CALLCHESTART
JMPSETMOU
CRING:
CALLCHESTOP
JMPSETMOU
JMAGAN:
JMPAGAIN;二级跳转
SETMOU:
MOVDX,0815H
MOVAH,02
MOVBH,0
INT10H;设置光标
;模式判断***********
CMPMODE,0
JEMODE0
CMPMODE,1
JEMODE1
CMPMODE,2
JEMODE2
CMPMODE,3
JEMODE3
MODE0:
CALLTIMESHOW
JMPKEYSCAN
MODE1:
CALLDATESHOW
JMPKEYSCAN
MODE2:
CALLBEEP
MOVMODE,03H
JMPKEYSCAN
MODE3:
CALLSEDWHATCH
MOVMODE,0H
;键盘扫描*********
KEYSCAN:
MOVAH,0BH
INT21H
CMPAL,00
JEAGAIN
MOVAH,08H
INT21H
CMPAL,1BH
JZSTOP
CMPAL,'q'
JEEXIT
CMPAL,'m'
JNEAGAIN
INCMODE
CMPMODE,4
JNEJMAGAN
MOVMODE,0
JMPJMAGAN
STOP:
MOVAH,4CH
INT21H
;*******时间日期刷新*****
REFRESHPROC
PUSHAX
PUSHCX
PUSHDX
MOVAH,2AH
INT21H
MOVDAY,DL
MOVMON,DH
MOVYEAR,CX
MOVAH,2CH
INT21H
MOVHOUR,CH
MOVMIN,CL
MOVSEC,DH
MOVMSEC,DL
POPDX
POPCX
POPAX
RET
REFRESHENDP
;********年月日显示
DATESHOWPROC
PUSHAX
PUSHCX
PUSHDX
MOVDX,OFFSETMSG1
MOVAH,09
INT21H
MOVAX,YEAR;取年
CALLBTOBCD
MOVDL,'/'
MOVAH,02H
INT21H
MOVAH,0
MOVAl,MON;月
CALLBTOBCD
MOVDL,'/'
MOVAH,02H
INT21H
MOVAH,0
MOVAL,DAY;日
CALLBTOBCD
MOVDX,OFFSETNULINE
MOVAH,09
INT21H
POPDX
POPCX
POPAX
RET
DATESHOWENDP
;*********时间显示
TIMESHOWPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVDX,OFFSETMSG2
MOVAH,09
INT21H
MOVAH,0
MOVAL,HOUR;取时
CALLBTOBCD
MOVDL,':
'
MOVAH,02H
INT21H
MOVAH,0
MOVAL,MIN;分
CALLBTOBCD
MOVDL,':
'
MOVAH,02H
INT21H
MOVAH,0
MOVAL,SEC;秒
CALLBTOBCD
CMPSFLAG,0
JETOCLR
MOVDL,':
'
MOVAH,02H
INT21H
MOVAH,0
MOVAL,MSEC;10M秒
CALLBTOBCD
TOCLR:
MOVDX,OFFSETNULINE
MOVAH,09
INT21H
POPDX
POPCX
POPBX
POPAX
RET
TIMESHOWENDP
;将二进制转化为BCD码并显示
BTOBCDPROC
PUSHDX
PUSHBX
PUSHCX
MOVCX,0
MOVBX,10
BTOD:
MOVDX,0
DIVBX
PUSHDX
INCCL
CMPAX,0
JABTOD
SHOW:
POPDX
ADDDL,30h
MOVAH,02h
INT21h
LOOPSHOW
POPCX
POPBX
POPDX
RET
BTOBCDENDP
;*****闹钟设定******
BEEPPROC
MOVDX,0715H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETMSGIN
MOVAH,09
INT21H
CMPBFLAG,2;设定时还在响,那么关闭
JNESETM
INAL,61H
ANDAL,0FDH
OUT61H,AL
SETM:
MOVDX,0715H
MOVAH,02
MOVBH,0
INT10H
MOVAH,07H
INT21H
CMPAL,'a'
JEINA;选择输入方式,a为切换输入,其他键为键盘直接输入
MOVDX,OFFSETMSGDIR
MOVAH,09
INT21H
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETKSBUF
MOVAH,10
INT21H;键盘输入字符存入缓存区
MOVBFLAG,1
MOVSI,OFFSETKSBUF+1
MOVCL,BYTEPTR[SI]
MOVBX,10
INCSI
ANDBYTEPTR[SI],0FH
MOVAL,BYTEPTR[SI]
MULBL
INCSI
ANDBYTEPTR[SI],0FH
ADDAL,BYTEPTR[SI]
MOVBEEPHOUR,AL
ADDSI,2
ANDBYTEPTR[SI],0FH
MOVAL,BYTEPTR[SI]
MULBL
INCSI
ANDBYTEPTR[SI],0FH
ADDAL,BYTEPTR[SI]
MOVBEEPMIN,AL
JMPTOEND
INA:
MOVDX,OFFSETMSGAI;A/I切换输入方式
MOVAH,09
INT21H
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETSETSTR
MOVAH,09
INT21H
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
MOVSI,OFFSETBEEPHOUR
;*****a键切换光标位置*********
KASCAN:
MOVAH,0BH
INT21H
CMPAL,00
JEKASCAN
MOVAH,08H
INT21H
MOVKEYNUM,AL
CMPAL,'a'
JNEKISCAN
MOVBH,0
MOVAH,03H
INT10H
INCDL
INCSI
CMPDL,17H
JETOMI
CMPDL,1AH
JETOSW
CMPDL,22H
JETOHO
JMPSETF
TOMI:
INCDL
JMPSETF
TOSW:
MOVDL,21H
JMPSETF
TOHO:
MOVDL,15H
MOVSI,OFFSETBEEPHOUR
SETF:
MOVAH,02H
INT10H
KAJMP:
JMPKASCAN
;*****i键改变光标处字符*****
KISCAN:
CMPKEYNUM,'i'
JNEJKCR0
MOVAH,08H;读光标处字符
INT10H
INCAL
INCBYTEPTR[SI]
CMPSI,OFFSETBEEPHOUR
JEJUGHOR
CMPSI,OFFSETBEEPHOUR+1
JEJUGHOR2
CMPSI,OFFSETBEEPHOUR+2
JEJUGMIN
CMPSI,OFFSETBEEPHOUR+3
JEJUGMIN2
CMPSI,OFFSETBEEPHOUR+4
JECHGSW
JMPJUGHOR
JKCR0:
JMPKCR
JUGHOR:
CMPAL,32H
JNAPRINT
MOVBYTEPTR[SI],0
MOVAL,30H
JMPPRINT
JUGHOR2:
CMPBEEPHOUR,2H
JETO2
CMPAL,39H
JNAPRINT
MOVBYTEPTR[SI],0
MOVAL,30H
JMPPRINT
TO2:
CMPAL,34H
JNAPRINT
MOVBYTEPTR[SI],0
MOVAL,30H
JMPPRINT
JUGMIN:
CMPAL,35H
JNAPRINT
MOVBYTEPTR[SI],0
MOVAL,30H
JMPPRINT
JUGMIN2:
CMPAL,39H
JNAPRINT
MOVBYTEPTR[SI],0
MOVAL,30H
JMPPRINT
CHGSW:
DECBYTEPTR[SI]
CMPBFLAG,0
JETOON
MOVBFLAG,0
MOVDX,OFFSETSWIOFF
JMPPRISW
TOON:
MOVBFLAG,1
MOVDX,OFFSETSWION
PRISW:
MOVAH,09H
INT21H
MOVDX,0921H
MOVAH,02
MOVBH,0
INT10H
JMPKAJMP0
PRINT:
MOVCX,1H
MOVBX,07H
MOVAH,09H
INT10H
KAJMP0:
JMPKAJMP
KCR:
CMPKEYNUM,0DH
JNEKAJMP0
MOVAL,BEEPHOUR
MOVBX,10
MULBL
ADDAL,BEEPHOUR+1
MOVBEEPHOUR,AL
MOVAL,BEEPMIN
MULBL
ADDAL,BEEPMIN+1
MOVBEEPMIN,AL
TOEND:
RET
BEEPENDP
CHESTARTPROC
MOVCH,HOUR
MOVCL,MIN
CMPBEEPHOUR,CH
JNERETURN
CMPBEEPMIN,CL
JNERETURN
INAL,61H
ORAL,2
OUT61H,AL
INCBFLAG
RETURN:
RET
CHESTARTENDP
CHESTOPPROC
MOVCL,SEC
CMPCL,3
JBESCP
INAL,61H
ANDAL,0FDH
OUT61H,AL
ANDBFLAG,0
ESCP:
RET
CHESTOPENDP
SOUNDPROC
MOVAL,10110110B
OUT43H,AL
MOVDX,0012H
MOVAX,34DEH
MOVDI,1000
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
ANDAL,0FDH
OUT61H,AL
INAL,61H
ORAL,1
OUT61H,AL
RET
SOUNDENDP
;*********以下为秒表部分************
SEDWHATCHPROC
MOVDX,0715H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETMSGSEC
MOVAH,09
INT21H
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
CLI
MOVAL,1CH
MOVAH,35H
INT21H
MOVINISEG,ES
MOVINIOFF,BX
SHOWINI:
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETWSTR
MOVAH,09
INT21H
TO:
MOVHOUR,0
MOVMIN,0
MOVSEC,0
MOVMSEC,0
KSCANW:
MOVAH,0BH
INT21H
CMPAL,00
JEKSCANW
MOVAH,08H
INT21H
CMPAL,'q'
JEEXIT
CMPAL,'m'
JEQTIME
CMPAL,'i'
JETOI
CMPAL,'a'
JNEKSCANW
CMPSFLAG,1
JEKSCANW
JMPTO
TOI:
MOVSFLAG,1
CALLINITIR
WSTART:
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
CALLTIMESHOW
WSTOP:
MOVAH,0BH
INT21H
CMPAL,00
JEWSTART
MOVAH,08H
INT21H
CMPAL,'i'
JNEWSTART
MOVSFLAG,0
JMPKSCANW
QTIME:
CLI
PUSHDS
MOVDX,INIOFF
MOVDS,INISEG
MOVAL,1CH
MOVAH,25H
INT21H
STI
POPDS
MOVAL,00110100B
OUT43H,AL
MOVAL,0FFH
OUT40H,AL
OUT40H,AL
MOVDX,0715H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETNULINE
MOVAH,09
INT21H
MOVDX,0915H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETNULINE
MOVAH,09
INT21H
RET
SEDWHATCHENDP
INITIRPROC
CLI
;初始化8253计时器0,先送低八位,再送高八位,工作方式3,二进制计数方式
MOVAL,00110110B
OUT43H,AL
MOVAX,11932;计数初值送AX
OUT40H,AL
MOVAL,AH
OUT40H,AL
PUSHDS
MOVDX,OFFSETTIMER
MOVAX,SEGTIMER
MOVDS,AX
MOVAX,251CH
INT21H
POPDS
RET
INITIRENDP
TIMERPROC
PUSHAX
PUSHDS
MOVAX,DATA
MOVDS,AX
INCMSEC
CMPMSEC,100
JNEQUIT
MOVMSEC,0
INCSEC
CMPSEC,60
JNEQUIT
ANDSEC,0H
INCMIN
CMPMIN,60
JNEQUIT
INCHOUR
ANDMIN,0H
QUIT:
POPAX
MOVDS,AX
POPAX
STI
IRET
TIMERENDP
CREATUIPROC
PUSHAX
PUSHBX
PUSHDX
MOVDX,OFFSETUIS
MOVAH,09
INT21H
MOVDX,1000H
MOVAH,02
MOVBH,0
INT10H
MOVDX,OFFSETUIE
MOVAH,09
INT21H
POPDX
POPBX
POPAX
RET
CREATUIENDP
CLEARPROC
MOVAX,0002H
INT10H
RET
CLEARENDP
EXIT:
MOVAH,4CH;返回DOS状态
INT21H
CODEENDS
ENDSTART