8253和8259来实现的简单的时钟硬件中断时钟设计.docx
- 文档编号:11639685
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:12
- 大小:333.47KB
8253和8259来实现的简单的时钟硬件中断时钟设计.docx
《8253和8259来实现的简单的时钟硬件中断时钟设计.docx》由会员分享,可在线阅读,更多相关《8253和8259来实现的简单的时钟硬件中断时钟设计.docx(12页珍藏版)》请在冰豆网上搜索。
8253和8259来实现的简单的时钟硬件中断时钟设计
利用8253和8259实现简单时钟
一、内容
利用PC系列微机现有的硬件和软件资源编写程序,以便在显示器屏幕上显示XX(时):
XX(分):
XX(秒),并且每秒钟更新一次显示。
二、设计目的
掌握8253、8259A芯片。
三、设计思路
IBMPC/XT系统板上使用了一片8253-5,其地址为40H~43H,其中0通道在方式3下工作,初值设置23小时59分50秒,每隔55ms向中断控制器8259A的IRQ0端发一次中断请求。
此定时中断的用途之一是系统报时。
现在借用原有电路,重新设置定时器、编写中断服务程序来做硬件时钟实验,为此程序开始应首先保护原系统的08H中断的中断矢量(中断服务程序入口地址),以便程序退出时恢复原系统的设置。
保护原系统的08H中断的中断矢量可用DOS35H功能调用读出,并加以适当保存,也可以用以下指令将中断矢量压入堆栈保存。
具体过程:
等待按键按下,调用DOS的显示字符串功能,并对中断进行压栈操作后,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化的0通道,3方式,二进制计数进行方式3的10ms方波,即每10ms中断一次,通过保护原有的8259A的中断屏蔽寄存器IMR的内存,进行下一步的IMR的重写,只开放始终和键盘的中断处理。
进而开中断,运行TIMER模块的时间调用及DOS显示系统时间的功能,待TIMER模块运行结束之后,关闭中断返回DOS,程序结束。
CLI;关中断
CLD;DF=0
MOVAX,0000H
MOVDS,AX;DS:
SI指向08H中断矢量表中的位置
MOVSI,0020H
LODSW
MOVBX,AX;BX:
原中断服务程序入口偏移地址
LODSW;AX:
原中断服务程序入口的段地址
PUSHAX;压栈保护
PUSHBX
四、硬件原理图及相关说明
1、8253
这是8253的相关图形,一般8253要实现定时、计数控制大致可采用三种方法:
设计数字逻辑电路来实现定时或计数的要求。
即由硬件电路实现的定时器/
计数器。
用软件来实现定时和计数的要求。
即采用循环方式执行若干条指令,使程
序段执行时占用一定的延时时间。
采用可编程定时器/计数器。
其定时与计数功能可由程序灵活设定,设定后
于CPU并行工作,不占用CPU的时间,可以很好地解决以上两种定时存在的不足,这种方式广泛应用于各种定时或计数场合。
8253的工作方式三是方波发生器,方式三的输出为方波,具有“初始化自动重装”功能。
向8253写入控制字后,OUT输出变为高电平,在写完计数初值后计数器自动开始对输入时钟CLK计数,OUT输出保持高电平。
当计数到一半时,输出变为低电平,直至计数到0,在重装计数初值,OUT端变高开始新一轮计数。
2、8259A
8259A常用于中断优先级管理电路,它的功能有三种:
它可以接受多个外部中断源的中断请求,并进行优先级别判断,选中当前
优先级别最高的中断请求,再将此请求送到微处理器的中断输入端。
具有提供中断向量、屏蔽中断输入等功能。
8259A使用单+5V电源供电,有多种中断管理方式,自动提供中断服务程序
入口地址,使用灵活方便。
五、软件流程图及其说明
图1.0硬件中断时钟设计流程图
硬件中断时钟设计算法具体描述,等待建按下调用DOS的7号功能键,并将中断的中断矢量进行压栈保护,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化产生10ms方波,每10ms中断一次,保护原有的8259A的中断屏蔽寄存器IMR的内存,进行下一步的IMR的重写。
进而开中断,然后调用DOS的6好功能键,通过判断是否有键按下和是否按下的是空格键实现显示时间和关闭中断返回DOS,程序结束。
六、功能模快设计说明
1、模块1
这部分模块是实现当按下空格键时程序关中断,恢复IMR,重新设置8253中断时间,恢复中断矢量以及开中断。
2、模块2
3、模块3
这个模块是实现的等待功能
4、模块4
根据秒值是否相同来执行循环,但秒值变化了就返回继续执行程序。
七、源程序
STACKSEGMENT
DB256DUP(0)
STACKENDS
DATASEGMENT
COUNTDB100
TENHDB'2'
HOURDB'3:
'
TENMDB'5'
MINUTEDB'9'
DB':
'
TENSDB'5'
SECONDDB'0',0DH,'$'
DATAENDS
CODESEGMENT
STARTPROCFAR
ASSUMECS:
CODE
PUSHDS
MOVAX,0
PUSHAX
MOVAH,08H;等待键按下,AL=字符的ASCII码
INT21H;将中断矢量压入堆栈保存
CLI;清中断允许位
CLD;清方向标志位
MOVAX,0000H
MOVDS,AX
MOVSI,0020H;DS:
SI指向08H中断向量
LODSW;取08中断入口的偏移地址
MOVBX,AX
LODSW;取08中断入口段地址
PUSHAX;压栈保护
PUSHBX
;将中断矢量压入堆栈保存
MOVAX,DATA;建立数据段的可寻址性
MOVDS,AX
ASSUMEDS:
DATA
;将向中断矢量写入新地址
MOVAX,0000H
MOVES,AX
MOVDI,0020H;ES:
DS指向08中断向量存放地址
MOVAX,OFFSETTIMER
STOSW;写入偏移地址
MOVAX,CS
STOSW;写入段地址
;将向中断矢量写入新地址
MOVAL,00110110B;8253初始化,0通道,3方式,二进制计数
OUT43H,AL
MOVAX,11932;初值=11932
OUT40H,AL
MOVAL,AH
OUT40H,AL
INAL,21H;读8259的中段屏蔽寄存器IMR
PUSHAX;压栈保护
;MOVAL,0FCH
STI;开中断
FOREVER:
MOVDL,0FFH;有键按下吗?
MOVAH,06H
INT21H
JZDISP;无键按下则转显示DISP
CMPAL,20H;是空格键吗?
JZEXIT;是则退出
DISP:
MOVDX,OFFSETTENH;不是则显示时间
MOVAH,09H
INT21H
MOVAL,SECOND;取秒单元值
WAITCHA:
CMPAL,SECOND;改变否?
JZWAITCHA;没变则等待
JMPFOREVER;变则转FOREVER
EXIT:
CLI;有空格键按下退出关中断
CLD;清方向标志位
POPAX
OUT21H,AL;恢复IMR
MOVAL,36H;8253初始化,55ms
OUT43H,AL
MOVAL,0
OUT40H,AL
OUT40H,AL
;恢复中断矢量
MOVAX,0;恢复08H中断中断向量
MOVES,AX
MOVDI,4*8
POPAX
STOSW
POPAX
STOSW
STI
;恢复中断矢量
RET
STARTENDP
CODEENDS
ENDSTART
八、程序调试
本次实验采用的是MASMFORWINDOWS集成实验环境2010软件,只需要用记事本将程序保存成.asm文件,然后直接用其打开然后运行即可自动编译连接并出结果。
如程序有问题可直接在MASMFORWINDOWS集成实验环境2010软件中调试并运行直到结果正确。
1、程序调试界面
2、运行过程
打开运行窗口
按下任意键显示时间
按下空格键停止计时
按下任意键退出窗口
九、心得体会
在设计过程中虽然遇到了不少困难,但当我通过自己查资料、或是向向同学请教在网上询问,在克服了一个又一个难点之后,我的设计正是进入具体操作阶段:
1、设计思路的分析阶段。
我根据一些经典的算法再加上我的自我分析,写出了符合这次设计要求的算法,并就此画出相应的流程图;2、源代码的编写阶段。
这一过程我还是参考了不少经典例子,再结合实际需要,运用从课堂上掌握的基本汇编语言知识,终于完成了初步的源代码;3、代码的调试过程。
这算是本次课设的重点过程之一,因为发现错误并改正错误就靠这一过程来完成,经过多次调试,我终于得到了一个正确的程序,使得设计方案中发现的问题得到解决并成功实现系统所需功能,那种成就感和满足感足以让我忘记了这些天来的辛苦。
这次课程设计给了我们一次应用自己所学知识的机会,使我对这门课程有更深层次的理解,让我们深刻体会到了:
一个人的力量是有限的,多请教别人,虚心求问是我在以后学习中应该多多发扬的。
总之,珍惜每一次课程设计的机会,好好锻炼自己提高自己,才真正达到课程设计这门课的目的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8253 8259 实现 简单 时钟 硬件 中断 设计