微机课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PC机实时时钟的设计
利用PC机现有的硬件和软件资源设计程序,以实现在显示器上显示XX(时):XX(分):XX(秒)。DATA SEGMENT
COUNT DB 100
;******************************初始的时间显示********************* TENH DB '1'
HOUR DB '2:'
TENM DB '0'
MINUTE DB '0'
DB ':'
TENS DB '0'
SECOND DB '0',0DH,0DH,'$';初始显示12:00:00
;*****************************初始的界面显示内容******************** ENTER1 DB " --------------------------WELCOME-----------------------------",0AH,0DH DB " BaoYan 120900931 ",0AH,0DH
DB " All Rights Reserved ",0AH,0DH
ENTER2 DB ' The Time Now is ',10 DUP(0)
ENTER3 DB 'Do you want to change the time? [Y/N]'
ENTER4 DB '**--When finished changing the time,please press "enter" to continue--**'
ENTER5 DB '**--You can press the left or right button for changing the hour ,minute --**' ENTER6 DB '**--or second that you want--**'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START PROC FAR
PUSH DS
MOV AX,0
PUSH AX;标准序返回DOS
MOV AH,07H
INT 21H ;初始时无显示,此时等待键盘输入,AL=字符的ASCII码,输入无回显
;***************************将中断矢量压入堆栈保存******************** CLI ;关中断,防止有些硬件对中断的干扰
CLD ;使DF=0
MOV AX,0000H
MOV DS,AX
MOV SI,0020H ;DS:SI指向08H中断向量
LODSW ;取08中断入口的偏移地址
MOV BX,AX
LODSW ;取08中断入口的段地址
PUSH AX
PUSH BX ;压栈保护
MOV AX,DATA
MOV DS,AX ;建立数据段的可寻址性
;************************将中断向量压入新地址************************ MOV AX,0000H
MOV ES,AX
MOV DI,0020H ;ES:DS指向08中断向量存放地址
MOV AX,OFFSET TIMER
STOSW ;写入偏移地址
MOV AX,CS
STOSW ;写入段地址
MOV AL,00110110B ;8253初始化,0通道,方式3,二进制计数
OUT 43H,AL
MOV AX,11932 ;计数初值=11932
OUT 40H,AL
MOV AL,AH
OUT 40H,AL
IN AL,21H ;读8259的中断屏蔽寄存器IMR
PUSH AX ;压栈保护,AL的值为0FCH
STI ;开中断
MOV AH,1
MOV CH,30H
INT 10H ;置光标类型
CALL CLEAN_SCREEN ;清屏
;******************************屏幕初始化*********************** PUSH AX
PUSH BX
MOV AX,0600H ;AH=06(滚动)AL=00(全屏空白)
MOV BH,000CH ;设置背景颜色(3)和前景颜色(e)
SUB CX,CX ;从0行0列开始
MOV DX,8F8FH ;到8F行8F列
INT 10H
POP AX
POP BX
;************************显示ENTER1的内容*********************** MOV DH,1 ;行号
MOV DL,0 ;列号
MOV BH,0 ;页号
MOV AH,2 ;置光标位置
INT 10H
MOV CX,199
MOV SI,OFFSET ENTER1
SHOW: MOV AH,0EH ;显示字符(光标前移),al 字符,bl前景色
MOV AL,[SI]
INT 10H
INC SI
LOOP SHOW
;***********************显示ENTER2的内容************************ PUSH ES
PUSH BP
PUSH BX
PUSH CX
PUSH DX;保护现场,让寄存器压栈(后同)
MOV BP,OFFSET ENTER2;取ENTER2的偏移地址(后同)
MOV AX,SEG ENTER2;取ENTER2的段地址(后同)
MOV ES,AX;ES:BP为欲显示的字符串地址(后同)
MOV CX,60;假设字符串长度为60(后同)
MOV BX,0007H;BH=00,为页号,BL=07H为显示的字符串属性,为银白色(后同)MOV DX,0600H;起始行为06,起始列为00(后同)
MOV AL,1
MOV AH,13H
INT 10H
POP DX
POP CX
POP BX
POP BP
POP ES