没有合适的资源?快使用搜索试试~ 我知道了~
首页微机原理 电子时钟实验
资源详情
资源推荐
实验一 设计数码管电子表 无 82 班 王一舟 981070
实验一 设计数码管电子表
一. 实验要求:
使用 8253 的两个计数器串连,作为微机系统的外扩定时源,以数码管电路
作为外扩输出设备,采用中断方式编程,实现数码管电子表“具体要求如下:
1.六位数码管分别显示时,分,秒。
2.初始时间由主机键盘输入。
3.主机按任意键停止计时返回 DOS。
二:实验电路
+5V
与计算机数据线相连
208H-20FH 接 B4 端子
A(+5V)
A1 Q2 B(8MHZ)
A0
IOR
IOW
8253
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 控制字格式
D7 D6 D5 D4 D3 D2 D1 D0
SC1 SC2 RL1 RL0 M2 M1 M0 BCD
1
GATE0 D7-D0
GATE1 OUT0
OUT1
CS OUT2
A1 CLK0
A0 CLK1
RD CLK2
WR
2*393
IO 地址译码器数码管电路
通道选择:
00=计数器 0
01=计数器 1
10=计数器 2
11=非法
操作类型:
00=计数器锁存
01=读/写低字节
10=读/写高字节
11=读/写 16 位字,
先 低字节,后高 字
节
方式选择:
000=方式 0
001=方式 1
X10=方式 2
X11=方式 3
100=方式 4
101=方式 5
计数方式:
0=二进制计数
1=BCD 码计数
实验一 设计数码管电子表 无 82 班 王一舟 981070
四.程序清单:
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
2
实验一 设计数码管电子表 无 82 班 王一舟 981070
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,二进制计数)
3
实验一 设计数码管电子表 无 82 班 王一舟 981070
MOV AX,1000
MOV DX,209H
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,那么要求重输。对于分,秒
的输入也按照此法处理。)
LEA DX,BAD_HRS
MOV AH,9
INT 21H
JMP HOUR
HRS2: PUSH BX
MIN: LEA DX,ASK_MINS
MOV AH,9
INT 21H
CALL INPUT_TIME
JC MIN
CMP BL,59H
JNA MIN2
LEA DX,BAD_MINS
MOV AH,9
INT 21H
JMP MIN
4
剩余16页未读,继续阅读
ch7482216
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功