- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
、实验目的
(1) 了解可编程定时/计数器芯片8253在PC机里的工作情况。
(2) 掌握PC机定时操作的工作原理。
、实验内容及要求
【实验内容】:
对PC机中的8253进行编程,使得 PC机成为一个精确的时钟;
【实验要求】:
( 1 )程序截获系统原有的时钟中断向量,置入用户自己的时钟中断向量。
(2)将 8253的通道 0设置为工作方式 3,二进制数,装入计数初值 11932,使其 没10ms产生一次定时中断, 即每秒钟中断100次,在程序中设置每一个中断次数计数 器 count100 ,初值为 100,每次中断减一,到 0 后又重新置为 100,并对时间显示串 进行处理。
(3)程序运行时,在命令行输入用户指定的当前时间“ nn:mm:ss”,即以两位数
给出的“时:分”秒” ,按任意键后开始计时,并以 12小时的格式显示当前时间。
( 4 )在程序运行过程中,即时间显示过程中,用户按住任意键,恢复系统原中断 向量,退出时钟程序的运行。
3.【实验流程图】:
【计时操作判断流程图】
时的个位到是否到3YY时的十位到是否到2时的十位到是否到9NYN中断次数计数器是否为0Y分的十位到是否到 6N分的个位到是否到 9Y -秒的十位到是否到 6Y -Y秒是否到
时的个位到是否到
3
Y
Y
时的十位到是否到
2
时的十位到是否到
9
N
Y
N
中断次数计数器是否为
0
Y
分的十位到是否到 6
N
分的个位到是否到 9
Y -
秒的十位到是否到 6
Y -
Y
秒是否到9
时的个位置0,小时十位加1
分的十位置0,小时十位加1
秒的十位置0,分个位加1
分的个位置0,分十位加1
秒个位置0,十位加1
中断次数计数器减一
秒加1
用户定时中断程序流程图】
4. 【实验代码】:
.model small
.model small
.stack 256
.data
count100
db 100
;中断次数计数器
tenhour
db 0
;一小时的十位数
hour
db 0
;一小时的个位数
db :
tenmin
db 0
;分钟的十位数
minute
db 0
;分钟的个位数
db :
tensec
db 0
;秒钟的十位数
second
db 0
;秒钟的个位数
oldtime
dw 0
;保存原时钟中断向量
dw 0
.code
start proc far
;进行程序的首地址保护;指向数据段push ds xor ax, ax push ax mov ax, @data mov es, ax
;进行程序的首地址保护
;指向数据段
mov si, 82h
;指向 PSP 内命令行参数
mov di, offset tenhour
mov cx, 8;放入“ nn:mm:ss ”的 8 个 ASCII
mov cx, 8
cld
;命令行的参数移入显示串中;将数据段的段地址 ax
;命令行的参数移入显示串中
;将数据段的段地址 ax 存入 ds 中
;等待按键程序启动
;关中断
;将段地址ax存入es段中
;产生类型号为 20H 的中断放入 di 中
;将中断向量保存在 bx 中
; 8253 中的命令字:通道 0 ,方式 3,二进制数 ;将设置好的命令字送到 8253 控制端口 ;每秒钟中断 100 次计数值
;置入通道 0 的寄存器
rep movsb mov ds, ax mov ah, 0 int 16h cli mov ax, 0 mov es, ax mov di, 20h mov bx, es:[di] mov oldtime, bx mov bx, es:[di+2] mov [oldtime+2], bx mov ax, offset timer stosw mov ax, seg timer stosw mov al, 36h out 43h, al mov bx, 11932 mov al, bl out 40h, al mov al, bh out 40h, al in al, 21h and al,0fch out 21h, al sti forever: mov ah, 0bh
int 21h
cmp al,0ffh
;设置用户的中断向量
;读取 8259A 的中断屏蔽寄存器 ;开放键盘和时钟中断
;写入 8259A 的新的屏蔽字
;开中断
;循环检查用户书否键入内容
;如果按键,则退出循环
jz exit
mov bx, offset tenhour
;时间显示串首地址放入 bx 中
;读取显示字符串中的一个字符
;读取显示字符串中的一个字符
;显示字符一个字符
;指向下一个字符
;完成 8 次字符显示后回车
;读取秒钟的数
;判断秒钟是否有改变
;等待直到有改变
;重复显示
;恢复原来
文档评论(0)