硬件中断时钟设计微机课程设计.docx
《硬件中断时钟设计微机课程设计.docx》由会员分享,可在线阅读,更多相关《硬件中断时钟设计微机课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
硬件中断时钟设计微机课程设计
微机原理课程设计
报告
设计题目:
硬件中断时钟设计
姓名:
班级:
学号:
专业:
指导老师:
2012年1月2日
课程设计说明书
1.课程设计题目:
硬件中断时钟设计
2.课程设计内容:
利用PC系列微机现有的硬件和软件资源编写程序,以便在显示器屏幕上显示XX(时):
XX(分):
XX(秒),并且每秒钟更新一次显示。
3.课程设计目的:
1)掌握8253可编程定时器/计数器的编程方法。
2)掌握在PC机上使用中断方式工作时主程序及中断服务程序的编写方法。
4.课程设计要求:
编写程序,利用主机内的8253/8254-2的计数器0产生10ms对称方波输出,该输出送至IRQ0使8259A每10ms产生一次中断,100次中断后秒数加1,然后调整时、分、秒并显示在屏幕上。
程序从按下任意键开始显示数据区中存放的时间值,运行中按下空格键则停止运行,并返回DOS。
摘要
微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
汇编语言是微机原理和接口设计的基础,微机主机和接口所要实现的功能都要通过汇编语言来实现。
尽管汇编语言设计程序有编程效率低的缺点,但其运行效率高,速度快,并且特别适合很多特殊应用的场合,如加密解密、病毒分析和防治、软件破解等。
这些在应用方面的优点是其他语言不可比拟的,面对硬件的直接控制更是其特长。
因此,在很多高级语言(如C++)中都可嵌入用汇编语言编写的程序段,以实现优势互补,发挥各自的长处。
索引关键词:
微机原理、DOS、软件调试、汇编语言、程序
目录
一概述………………………………………………………………………………4
二设计内容…………………………………………………………………………4
三设计目的…………………………………………………………………………4
四方案设计及论证…………………………………………………………………4
4.1设计思路………………………………………………………………………4
4.2硬件原理图及相关说明………………………………………………………5
4.2.18253……………………………………………………………………5
4.2.28259A…………………………………………………………………6
4.3软件流程图及其说明…………………………………………………………7
4.4功能模快设计说明……………………………………………………………8
4.5程序代码………………………………………………………………………9
4.6程序调试……………………………………………………………………14
4.6.1程序调试界面…………………………………………………………14
4.6.2程序运行过程…………………………………………………………14
五心得体会…………………………………………………………………………15
六参考文献…………………………………………………………………………16
1、概述
本设计是利用Masmforwindow集成实验环境来实现的,编写程序,利用主机内的8253/8254-2的计数器0产生10ms对称方波输出,该输出送至IRQ0使8259A每10ms产生一次中断,100次中断后秒数加1,通过计数器值count自减,即从100自减到0为止,即是100*10ms=1s,只有当COUNT数值减到1时,才是1s的时间,通过秒值+1,重复操作秒个位和“9”比较,如果为真,返回DOS显示当前时间的数值;如果为假,即是进位后秒十位加1操作而个位清零操作,然后用上述道理,比较分个位与“9”的大小,如果为真,返回DOS显示当前时间的数值;如果为假,即是进位后分十位加1操作而分个位清零操作,并在DOS窗口下进行输出显示。
程序从按下任意键开始显示数据区中存放的时间值,运行中按下空格键则停止运行,并返回DOS。
2、设计内容
利用PC系列微机现有的硬件和软件资源编写程序,以便在显示器屏幕上显示XX(时):
XX(分):
XX(秒),并且每秒钟更新一次显示。
3、设计目的
1)掌握8253可编程定时器/计数器的编程方法。
2)掌握在PC机上使用中断方式工作时主程序及中断服务程序的编写方法。
4、方案设计与论证
1.设计思路
IBMPC/XT系统板上使用了一片8253-5,其地址为40H~43H,其中0通道在方式3下工作,初值设置23小时59分50秒,每隔55ms向中断控制器8259A的IRQ0端发一次中断请求。
此定时中断的用途之一是系统报时。
现在借用原有电路,重新设置定时器、编写中断服务程序来做硬件时钟实验,为此程序开始应首先保护原系统的08H中断的中断矢量(中断服务程序入口地址),以便程序退出时恢复原系统的设置。
保护原系统的08H中断的中断矢量可用DOS35H功能调用读出,并加以适当保存,也可以用以下指令将中断矢量压入堆栈保存。
具体过程:
等待按键按下,调用DOS的显示字符串功能,并对中断进行压栈操作后,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化的0通道,3方式,二进制计数进行方式3的10ms方波,即每10ms中断一次,通过保护原4有的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
2.硬件原理图及相关说明
8253:
这是8253的相关图形,一般8253要实现定时、计数控制大致可采用三种方法:
(1)设计数字逻辑电路来实现定时或计数的要求。
即由硬件电路实现的定时器/计数器。
(2)用软件来实现定时和计数的要求。
即采用循环方式执行若干条指令,使程序段执行时占用一定的延时时间。
(3)采用可编程定时器/计数器。
其定时与计数功能可由程序灵活设定,设定后于CPU并行工作,不占用CPU的时间,可以很好地解决以上两种定时存在的不足,这种方式广泛应用于各种定时或计数场合。
8253的工作方式三是方波发生器,方式三的输出为方波,具有“初始化自动重装”功能。
向8253写入控制字后,OUT输出变为高电平,在写完计数初值后计数器自动开始对输入时钟CLK计数,OUT输出保持高电平。
当计数到一半时,输出变为低电平,直至计数到0,在重装计数初值,OUT端变高开始新一轮计数。
8259A:
8259A常用于中断优先级管理电路,它的功能有三种:
(1)它可以接受多个外部中断源的中断请求,并进行优先级别判断,选中当前优先级别最高的中断请求,再将此请求送到微处理器的中断输入端。
(2)具有提供中断向量、屏蔽中断输入等功能。
(3)8259A使用单+5V电源供电,有多种中断管理方式,自动提供中断服务程序入口地址,使用灵活方便。
3.软件流程图及其说明
图1.0硬件中断时钟设计流程图
硬件中断时钟设计算法具体描述,等待建按下调用DOS的7号功能键,并将中断的中断矢量进行压栈保护,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化产生10ms方波,每10ms中断一次,保护原有的8259A的中断屏蔽寄存器IMR的内存,进行下一步的IMR的重写。
进而开中断,然后调用DOS的6好功能键,通过判断是否有键按下和是否按下的是空格键实现显示时间和关闭中断返回DOS,程序结束。
4.功能模快设计说明
模块1:
这部分模块是实现当按下空格键时程序关中断,恢复IMR,重新设置8253中断时间,恢复中断矢量以及开中断。
模块2:
这部分模块是实现当没按键的时候显示时间。
模块3:
这个模块是实现的等待功能
模块4:
根据秒值是否相同来执行循环,但秒值变化了就返回继续执行程序。
5.程序代码
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,07H;等待键按下,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
TIMERPROCFAR
PUSHAX
DECCOUNT
JNZL2;不到1秒L2
MOVCOUNT,100;到1秒,重置COUNT,并修改时间
INCSECOND
CMPSECOND,'9'
JLETIMEXT;如果小于等于9
MOVSECOND,'0'
INCTENS
CMPTENS,'6'
JLTIMEXT;如果小于6
MOVTENS,'0'
INCMINUTE
CMPMINUTE,'9'
JLETIMEXT;如果小于等于9
MOVMINUTE,'0'
INCTENM
CMPTENM,'6';如果小于6
JLTIMEXT
MOVTENM,'0'
JMPL3
L2:
JMPTIMEXT
L3:
MOVAL,HOUR
ANDAL,0FH
MOVAH,TENH
ANDAH,0FH
MOVCL,4;
RORAH,CL
ORAL,AH;AH放到AL高四位
ADDAL,1
DAA
CMPAL,24
JLL1;小于24转不然置0
MOVTENH,'0'
MOVHOUR,'0'
JMPTIMEXT
L1:
MOVAH,AL
ANDAL,0FH
ORAL,30H
MOVHOUR,AL
MOVCL,4
RORAH,CL
ANDAH,0FH
ORAH,30H
MOVTENH,AH
TIMEXT:
MOVAL,20H
OUT20H,AL;发中断结束命令
POPAX
IRET
TIMERENDP
STARTENDP
CODEENDS
ENDSTART
6.程序调试说明
(1)程序调试界面
(2)程序运行过程
①打开运行窗口
②按下任意键显示时间
③按下空格键停止计时
④按下任意键退出窗口
5、学习心得
在本次课程设计中,我的设计题目是硬件中断时钟设计。
经过两周的课程设计,我们不但对课本上的知识有了更深的了解和巩固,而且我还学到了平时在课堂上都学习不到的知识,使我对系统的开发过程有了更加完整的认识。
在设计过程中虽然遇到了不少困难,但当我通过自己查资料以及向同学请教在网上询问,在克服了一个又一个难点之后,我的设计正是进入具体操作阶段:
1、设计思路的分析阶段。
我根据一些经典的算法再加上我的自我分析,写出了符合这次设计要求的算法,并就此画出相应的流程图;
2、源代码的编写阶段。
这一过程我还是参考了不少经典例子,再结合实际需要,运用从课堂上掌握的基本汇编语言知识,终于完成了初步的源代码;
3、代码的调试过程。
这算是本次课设的重点过程之一,因为发现错误并改正错误就靠这一过程来完成,经过老师的指点和多次调试,我终于得到了一个正确的程序,使得设计方案中发现的问题得到解决并成功实现系统所需功能,那种成就感和满足感足以让我忘记了这些天来的辛苦;
4、设计报告的编写过程。
当然这是对本次课程设计的一个总结,在付出那么多努力之后,能看到自己的劳动成果还是很开心的。
两周的微机原理课程设计在忙碌、紧张、而又充实氛围中度过了,在这短暂的两周时间里,我学到了很多知识,熟悉了好多程序代码,也认识到自己很多不足的地方。
时间虽短,我却收获颇丰,不单单是对于知识的收获,还是对自己的一种肯定。
这次课程设计给了我们一次应用自己所学知识的机会,使我微机原理这门课程有更深层次的理解,让我们深刻体会到了:
一个人的力量是有限的,多请教别人,虚心求问是我在以后学习中应该多多发扬的。
总之,珍惜每一次课程设计的机会,好好锻炼自己提高自己,才真正达到课程设计这门课的目的。
6、参考文献
[1]谢微成.微型计算机原理与接口技术.第一版.武汉:
华中科技大学出版社,2009
[2]宋杰.微型计算机原理与接口技术课程设计.第一版.北京:
机械工业出版社,2006
东华理工大学长江学院
课程设计评分表
学生姓名:
班级:
学号:
课程设计题目:
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
10
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
10
理论依据充分,数据准确,公式推导正确
10
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
10
能体现创造性思维,或有独特见解
10
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
10
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
10
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
10
有一定篇幅,字符数不少于5000
10
总分
100
指导教师评语:
指导教师签名:
年月日