教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

实验一设计数码管电子表

来源:网络收集 时间:2026-08-15
导读: 实验一 设计数码管电子表 一. 实验要求: 使用8253的两个计数器串连,作为微机系统的外扩定时源,以数码管电路作为外扩输出设备,采用中断方式编程,实现数码管电子表“具体要求如下: 1.六位数码管分别显示时,分,秒。 2.初始时间由主机键盘输入。 3.

实验一 设计数码管电子表

一. 实验要求:

使用8253的两个计数器串连,作为微机系统的外扩定时源,以数码管电路作为外扩输出设备,采用中断方式编程,实现数码管电子表“具体要求如下:

1.六位数码管分别显示时,分,秒。 2.初始时间由主机键盘输入。

3.主机按任意键停止计时返回DOS。

二:实验电路

CS 200H-207H

(*注意:A1,A0用来选择8253内部三个计数器中的一个,它们分别与计算机地址线的低两位相连。RD,WR 用来控制8253的读写,它们分别与计算机的IOR,IOW相连)

电路分析:

从Q2出来的时钟频率为1MHZ,为实现一秒钟调用一次中断,必须要每1000000次时钟调用一次中断。我们同时将计数器0和计数器1的初值都设为1000,并将计数器0的输出OUT0作为计数器1的时钟,并将计数器1的输出OUT1连到B4端子上,这样就实现了每1000×1000=1000000次时钟调用一次中断。

三.8253控制字格式

四.程序清单:

TITLE DISPTIME DSEG SEGMENT

INPUT_TIM DB 'Please input the current t ime.',13,10,'$'

SHOW_TIM DB 'Time is as the follow.Press Ctr-C to exit.',13,10,'$'

BAD_DATA DB 'Digits mush be between 0 and 9',13,10,'$'

BAD_HRS DB 'Hour must be between 0 and 23',13,10,'$'

BAD_MINS DB 'Minutes mush be between 0 and 59',13,10,'$'

BAD_SECS DB 'Seconds mush be between 0 and 59',13,10,'$' CRLF DB 13,10,'$'

ASK_HRS DB 'Hour(0-23):$' ASK_MINS DB 'Minute(0-59):$' ASK_SECS DB 'Second(0-59):$' USER DB 3,3 DUP(?) TIME DB 3 DUP(?) COUNT DW 1 OLD0A DD ? TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DSEG ENDS

SSEG SEGMENT STACK 'STACK' DB 256 DUP(?) SSEG ENDS

CSEG SEGMENT ASSUME

CS:CSEG,SS:SSEG,DS:DSEG,ES:DSEG START PROC FAR

MOV AX,DSEG MOV DS,AX

CALL GET_TIME CLI

CALL I8253 (初始化8253) CALL I8259 (初始化8259) CALL RD0A

(读入原0A中断向量)

CALL WR0A(写入新中断向量) ROTATE: CALL DISPLAY(只要不按键,

就不断调用DISPLAY显示TIME变量中的时间)

MOV AH,1 INT 16H JZ ROTATE

(按键输入后退出。) CALL RESET MOV AH,4CH INT 21H RET START ENDP

;************************************ (SERVICE为新的中断程序) SERVICE PROC NEAR PUSH AX PUSH DS

MOV AX,DSEG MOV DS,AX

CALL CHANGE_TIME

(函数CHANGE_TIME用以将时间增加一秒)

MOV AL,20H

OUT 20H,AL(送应答信号) POP DS POP AX IRET SERVICE ENDP ;************************************ (此函数将保存在TIME变量中的时间显示在数码管上。)

DISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI

MOV SI,OFFSET TIME MOV BX,OFFSET TABLE MOV CL,4 MOV AL,[SI] MOV AH,AL SAR AL,CL

AND AH,00001111B

XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,01H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,02H OUT DX,AL MOV AL,0 OUT DX,AL

MOV AL,[SI+1] MOV AH,AL SAR AL,CL

AND AH,00001111B XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,04H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,08H OUT DX,AL MOV AL,0 OUT DX,AL

MOV AL,[SI+2] MOV AH,AL SAR AL,CL

AND AH,00001111B

XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,10H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT

MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,20H OUT DX,AL MOV AL,0 OUT DX,AL

POP SI POP DX POP CX POP BX POP AX RET DISPLAY ENDP

;************************************ I8253 PROC NEAR

MOV AL,00110100B MOV DX,20BH OUT DX,AL (设定8253的计算器0,写入时先低字节后高字节,方式2,二进制计数)

MOV AX,1000

MOV DX,208H OUT DX,AL

MOV AL,AH

OUT DX,AL

(计数器0的初值设为1000。) MOV AL,01110100B MOV DX,20BH OUT DX,AL (设定8253的计算器1,入时先低字节后高字节,方式2,二进制计数)

MOV AX,1000

OUT DX,AL MOV AL,AH OUT DX,AL

(计数器1初值设为1000。) RET I8253 ENDP

;********************************** I8259 PROC NEAR IN AL,21H

AND AL,11111011B OUT 21H,AL IN AL,0A1H

AND AL,11111101B OUT 0A1H,AL RET I8259 ENDP

;******************************** RD0A PROC NEAR

MOV AX,350AH INT 21H

MOV WORD PTR OLD0A,BX MOV WORD PTR OLD0A+2,ES RET RD0A ENDP

WR0A PROC NEAR PUSH DS

MOV AX,CSEG MOV DS,AX

MOV DX,OFFSET SERVICE MOV AX,250AH INT 21H POP DS RET WR0A ENDP

;******************************** RESET PROC NEAR

MOV DX,WORD PTR OLD0A MOV DS,WORD PTR OLD0A+2 MOV AX,250AH

INT 21H (恢复原来的中断向量) IN AL,0A1H

OR AL,00000010B

OUT 0A1H,AL (屏蔽用户中断) RET RESET ENDP

;*********************************** (函数GET_TIME的作用是接受用户输入的时间,并把它保存在6字节变量TIME中。 为了保证程序的严谨,如果输入的时间非法,则显示出错信息并要求重输。) GET_TIME PROC NEAR

LEA DX,INPUT_TIM MOV AH,9

INT 21H (提示输入时间) HOUR: LEA DX,ASK_HRS MOV AH,9

INT 21H (提示输入小时) CALL INPUT_TIME

(函数INPUT_TIME的功能是把用户输入的字符转化为时间值并存放在BL中如果输入的不是数字,那么让标志寄存器CF=1) JC HOUR (输入不是数字,重输) CMP BL,23H JNA HRS2

(如果输入的数字比24小,那么跳到HRS2去执行下面的内容;如果输入的数字大于等于24, …… 此处隐藏:13249字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验一设计数码管电子表.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1995039.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)