实验四 接口实验一、实验目的熟悉8253、8259、8250的使用方法掌握中断管理程序、中断服务程序的编程方法了解串行通信的原理与方法二、实验内容读懂并调通下面的硬件时钟程序硬件时钟程序
利用微机现有资源,不外接任何电路进行硬件实验的例子。本程序通过修改实时时钟(中断类型号08H)的中断向量使之指向用户的中断服务程序,程序中重新设置8253的计数器0,使它每1/100秒产生一次中断,100次中断后秒量加1,然后调整时、分、秒并显示之。程序从按下非空格键开始显示数据区中存放的时间值,然后每秒更新一次显示。运行中若按下空格键即退出程序返回DOS。
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
DATA SEGMENT
SEG8 DW ?
OFF8 DW ?
IMR DB ?
COUNT DB 100
TENH DB '2'
HOUR DB '3:'
TENM DB '5'
MINUTE DB '9:'
TENS DB '5'
SECOND DB '0',0DH,'$'
DATA ENDS
CODE SEGMENT
START PROC FAR
ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
MOV AH,0 ;等待键按下,并读出到AX中
INT 16H
MOV AL,08H ;取8H中断的中断向量并保存
MOV AH,35H
INT 21H
MOV SEG8,ES
MOV OFF8,BX
CLI ;用户中断服务程序装载
PUSH DS
MOV AX,SEG TIMER
MOV DS,AX
MOV DX,OFFSET TIMER
MOV AH,25H
INT 21H
POP DS
MOV AL,00110110B ;8253初始化,10MS中断一次
OUT 43H,AL
MOV AX,11932
OUT 40H,AL
MOV AL,AH
OUT 40H,AL
IN AL,21H ;读8259的IMR
MOV IMR,AL ;保存IMR
MOV AL,0FCH ;重写IMR,开放时钟和键盘中断,;不改变其他位
OUT 21H,AL
STI
FOREVER:
MOV AH,1 ;检测键盘而不等待
INT 16H
CMP AL,20H ;有空格按下吗?
JZ EXIT ;有空格按下退出
MOV DX,OFFSET TENH ;无空格按下,显示时间
MOV AH,09H
INT 21H
MOV AL,SECOND ;取秒值
WAITCHA:
CMP AL,SECOND ;秒值变否
JZ WAITCHA ;秒值不变等待
JMP FOREVER
EXIT: CLI
MOV AL,IMR ;恢复保存的IMR
OUT 21H,AL
MOV AL,36H ;重新设置8253,55MS中断一次
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
CLI ;恢复原中断向量
PUSH DS
MOV AX,SEG8
MOV DS,AX
MOV DX,OFF8
MOV AH,25H
MOV AL,08H
INT 21H
STI
MOV AH,43H
INT 21H
TIMER PROC FAR
PUSH AX
DEC COUNT
JNZ L2
MOV COUNT,100
INC SECOND
CMP SECOND,'9'
JLE TIMEXT
MOV SECOND,'0'
INC TENS
CMP TENS,'6'
JL TIMEXT
MOV TENS,'0'
INC MINUTE
CMP MINUTE,'9'
JLE TIMEXT
MOV MINUTE,'0'
INC TENM
CMP TENM,'6'
JL TIMEXT
MOV TENM,'0'
JMP L3
L2: JMP TIMEXT
L3: MOV AL,HOUR
AND AL,0FH
MOV AH,TENH
AND AH,0DH
MOV CL,4
ROL AH,CL
OR AL,AH
ADD AL,1
DAA
CMP AL,24
JL L1
MOV TENH,'0'
MOV HOUR,'0'
JMP TIMEXT
L1: MOV AH,AL
AND AL,0FH
OR AL,30H
MOV HOUR,AL
MOV CL,4
ROR AH,CL
AND AH,0FH
OR AH,30H
MOV TENH,AH
TIMEXT: MOV AL,20H
OUT 20H,AL
POP AX
IRET
TIMER ENDP
START ENDP
CODE ENDS
END START
参考教材P,260的程序,编写完整的8250通信口自测程序。程序运行过程中,按下Ctrl_c退出程序返回DOS
三、实验报告要求调试通过的程序清单和程序说明