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