计时器汇编语言程序设计 (1)Word文档格式.doc

上传人:wj 文档编号:224279 上传时间:2023-04-28 格式:DOC 页数:20 大小:217.57KB
下载 相关 举报
计时器汇编语言程序设计 (1)Word文档格式.doc_第1页
第1页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第2页
第2页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第3页
第3页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第4页
第4页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第5页
第5页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第6页
第6页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第7页
第7页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第8页
第8页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第9页
第9页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第10页
第10页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第11页
第11页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第12页
第12页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第13页
第13页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第14页
第14页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第15页
第15页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第16页
第16页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第17页
第17页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第18页
第18页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第19页
第19页 / 共20页
计时器汇编语言程序设计 (1)Word文档格式.doc_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计时器汇编语言程序设计 (1)Word文档格式.doc

《计时器汇编语言程序设计 (1)Word文档格式.doc》由会员分享,可在线阅读,更多相关《计时器汇编语言程序设计 (1)Word文档格式.doc(20页珍藏版)》请在冰点文库上搜索。

计时器汇编语言程序设计 (1)Word文档格式.doc

3.2中断服务子程序流程图

中断服务子程序流程图如图3-2所示,中断服务子程序的功能是每次中断执行一次该程序,对十毫秒位、百毫秒位、秒位、十秒位、分钟位、十分钟位、小时位和十小时位进行加1和判断是否进位操作,即达到该时间的情况下就给该时间对应位进行加1操作,使其能够显示正确的动态的时间。

停止计时

显示停止计时时间

清零

显示初始时间

继续计时

显示动态时间

开中断计时

结束

按ESC键

按c/C键

按g/G键

检验键盘状态

按下p/P键

按下s/S键

读字符

显示提示语和初值时间

清屏

开始

图3-1主程序流程图清零

退出中断

十小时位加1

十h位<

3

小时位<

10

N<

24

小时位加1

N加1(N初值为0)

十分位<

6

十分钟位加1

ms位<

分钟位加1

十秒位<

十秒位加1

秒位<

十ms位<

秒位加1

十ms位加1

毫秒位加1

设置中断频率

开中断

设置中断屏蔽器

设置中断入口地址

图3-2中断服务子程序流程图

4.程序设计步骤

4.1界面设置

在DOS界面中显示时间,要输入输出数据,需要设置界面。

界面设置需要用到DOS功能调用的INT10H指令。

INT10H是由BIOS对屏幕及显示器所提供的服务程序,使用INT10H中断服务程序时,先指定AH寄存器为下表编号其中之一,该编号表示欲调用的功用,当一切设定好之后再调用INT10H。

1.设置光标形状:

movah,1;

置光标类型,不显示光标

movch,20h

int10h

2.设置光标位置:

movdh,0;

行号

movdl,0;

列号:

movbh,0;

页号

movah,2;

置光标位置

3.在Teletype模式下显示字符:

show3:

movah,0eh;

显示字符(光标前移),al字符,bl前景色

moval,[si]

incsi

loopshow3

为了使计时器的显示界面更加直观更加清楚,所以可以在int10h的情况下将AH赋值为06,初始化屏幕,同时置AL为00H而且为全屏空白,同时颜色通过在int10H的情况下BH=000ch显示为红色,这样计时器会更加醒目。

4.2检验键盘状态

由于要实现键盘按下不同的键值实现各种不同的功能,所以需要判断键盘输入的为哪个键。

首先检查键盘是否有输入,若没有输入,则跳过检查键盘输入的键值的程序,若有输入则比较输入为何种键,接着执行该键值对应要完成的功能的程序。

检验键盘状态程序如下:

movah,0bh;

检验键盘状态,有输入al=00,无输入al=0f

int21h

incal

jnzs1

movah,08h;

键盘输入无回显,(al)=输入字符

cmpal,1bh;

按下Esc键结束程序

jegoout

cmpal,'

p'

;

按下p键停止计时

jepause

P'

c'

按下c键清零

jeclear

C'

按下C键清零

jmps1

4.3中断子程序

1.08H号中断入口地址设置

由于要使用08H号中断来实现,计时功能,所以首先要获得08H号中断的原来的入口地址,AL里存中断类型号,将其存在了ES:

BX里,接着设置其新入口地址,将新的中断向量存在DS:

DX里就可以实现设置新入口地址。

具体的代码实现如下:

moval,08h

movah,35h;

获取08h号中断的原入口地址

pushes

pushbx

pushds

movax,segint08h

movds,ax

movdx,offsetint08h;

设置08h号中断的新入口地址

moval,08h

movah,25h

int21h;

调用08h号中断的服务程序

popds

2.中断屏蔽器设置

中断屏蔽寄存器的I/O端口地址是21H,它的8位对应控制8个外部设备。

某位为0允许某外部设备中断,为1则表示某外部设备的中断请求被屏蔽。

由上图可以看出要使键盘和定时器允许外部中断,则令其对应的位置零,同时使其他设备不允许外部中断。

于是可通过以下代码进行设置:

inal,21h

pushax

moval,11111100b

out21h,al

3.中断频率设置

根据设计要求,需要使系统内部8253输出方波频率为100Hz,所以要对08H号中断设置,使其能够10ms一次中断,同时要使其工作在通道0方式3的方波发生器。

8253是微机系统常用的定时器芯片,它有三个独立的16位减法计数器,每个计数器分配一个端口地址,分别为40h,41h,42h。

还有一个控制寄存器,端口地址为43h。

把中断子程序的段地址和偏移地址送到08H中断向量中,由于08H中断向量硬件中断,计数器0的输出端OUT与中断控制器8259A的一位相连每秒中断18.2次,故需要把18.2HZ改为100HZ,而CLK0的输入频率是1.1931817MHZ,故需把1.1931817除以100的初始值送到40H端口就可以实现每秒100次的中断。

所以设置计数初值为11932,这样就可以达到10ms中断一次。

实现该功能的代码如下:

moval,00110110b;

设置通道0的方式3

out43h,al

movax,11932;

定时器的时钟频率为1.1931817MHz,计数初值=1193182/100=11932

out40h,al

moval,ah

4.4判断计时进位

当十毫秒位超过9的时候,要对百毫秒位进1,如果百毫秒位超过9时,要对秒位进1,当秒位超过,9时,对十秒位进1,如果十秒位超过5时,才对分钟位进1,分钟位超过9时,对十分钟位进1,如果十分钟位超过5时,对小时位进1。

小时位的进位设计就要考虑到小时最多24的特殊性了,所以设置一个变量,在小时位加1的同时给它也加1.如果这个变量加到了24则重新开始计时,此时再把变量置零。

实现此部分功能的程序代码如下:

incmsec2;

十毫秒位加1

cmpmsec2,3ah;

十毫秒位是否小于100

jbt

movmsec2,30h

incmsec1

cmpmsec1,3ah;

百毫秒位是否小于10

movmsec1,30h

incsec2

cmpsec2,3ah;

秒位是否小于10

movsec2,30h

incsec1

cmpsec1,36h;

十秒位是否小于6

movsec1,30h

incmin2

cmpmin2,3ah;

分钟位是否小于10

movmin2,30h

incmin1

cmpmin1,36h;

十分钟位是否小于6

movmin1,30h

inchou2

incn

cmpn,24;

比较是否到了24小时,到了就跳到清零程序

jzqinling

cmphou2,3ah;

小时位是否小于10

movhou2,30h

inchou1

cmphou1,33h;

十小时位是否小于3

movhou1,30h

t:

moval,20h

out20h,al;

中断结束命令

popax

Iret

4.5暂停与继续计时

要暂停计时器,实际上是在暂停发生中断时显示的时间的加1操作,所以可以设置08h号中断的入口地址使其不进入计时中断服务程序进行加1操作,这样就能达到暂停计时的功能。

同理使其继续计时也是设置08h号中断的入口地址,使其继续进入计时中断服务程序就可以继续进行计时了。

实现此功能的代码如下:

pause:

out21h,al

popdx;

把bx送到dx,原中断向量存在ES:

BX中

popbx

movds,bx

movah,25h;

设置08h号中断入口地址为保存下来的原入口地址

aa1:

movah,08h;

键盘输入无回显,al=输入字符

cmpal,1bh;

按下Esc键结束程序

g'

按下g键继续程序

jejixu

G'

按下G键继续程序

jmpaa1

jixu:

jmpq1

5程序调试说明与分析

5.1初始界面

运行程序后初始界面如图5-1所示:

图5-1初始界面

5.2按下S键开始计时界面

按下S键后开始计时界面如图5-2所示:

图5-2按下S键后开始计时界面

5.3按下P键暂停计时界面

按下P键暂停计时界面如图5-3所示:

图5-3按下P键暂停计时界面

5.4按下G键继续计时界面

按下G键继续计时界面如图5-4所示:

图5-4按下G键继续计时界面

5.5按下C键清零界面

5.5按下C键清零界面如图5-4所示:

图5-5按下C键清零计时界面

5.6按下ESC键退出

程序运行后在任意时刻按下ESC键,程序退出。

6心得体会

计算机的诞生是人类科学史上的一件大事。

半个多世纪以来,计算机得到了迅猛的发展,从小型机到巨型机,从台式机到手提电脑,科学家实现了计算机一代接一代的跨越性的飞跃。

其中微机的一个代表机型是个人计算机,得到了极为广泛的应用,已经成为了人们生活中的必不可少的一部分,人们用它上网来了解世界各地的资讯,用它进行财务处理来管理公司和家庭开支,用它控制机电部件来实现过程操作的自动化……对科研工作者而言,微机更是需要掌握的“第二语言”。

这次微机课程设计让我了解到了微机在各个方面的应用。

平常我们上微机课时,老师讲的都是理论知识,讲的很详细但比较简单,编程也是这样,平常作业和考试时一段程序不超过20行,所以做课设前觉得应该很容易,再拿到题后,构思了一天,发现虽然思路不难,但要处理的模块太多了,就计时器汇编语言程序设计来说,进位跳转就有6次,还要设计界面(这些需要靠自学掌握),还有频率设置,说起来简单,就是1秒100次脉冲,但真正做时不知从哪下手……我上网也查了一些资料,发现程序比自己想象中的要长,在word中程序有7、8页长,经过两天的研究,翻书,查资料结合自己所学,总算看懂了大部分,对照网上的资料,自己慢慢学着编程,一开始错误一大堆,经过耐心的寻找、对比、问同学后终于调试出来了。

我心中的大石终于放下了。

在这次微机课程设计中,通过翻书、查资料、与同学讨论,让我实践能力得到了质的飞跃,让我对微机这门课程有了更深的了解,同时也加深了理论知识的掌握,让我们学以致用,使我们所学的知识掌握的更加牢固,感谢黄老师耐心的教导,是你让我们对微机有了更新的了解,让我们对微机有了浓厚的兴趣。

我希望我们可以多做点课程设计,让理论与实践结合,这样才能激发我们的创新思想,我们也能更快更牢固的掌握知识。

参考文献

[1]彭虎等著.微机原理与接口技术(第二版).电子工业出版社,2005

[2]艾德才.Pentium系列微型计算机原理与接口技术.高等教育出版社,2000

[3]戴梅萼.微型计算机原理与接口技术.清华大学出版社,2003

[4]周明德.微型计算机系统原理及应用.清华大学出版社,2002

附件(程序清单)

datasegment

hou1db'

0'

hou2db'

mwdb'

:

'

min1db'

min2db'

mdb'

sec1db'

sec2db'

m2db'

msec1db'

msec2db'

countequ$-hou1

hdb0

hellodb"

Copyrightbyjibinggao."

0ah,0dh

db"

Welcometousethecalculagraphofsail."

s:

startp:

pauseg:

continueEsc:

exitc:

clear"

dataends

codesegment

mainprocfar

assumecs:

code,ds:

data

start:

movax,data

callclean_screen

movax,0600h;

ah=06(滚动)al=00(全屏空白)

movbh,000ch;

设置背景颜色(3)和前景颜色(e)

subcx,cx

movdx,5f5fh

movdh,1;

movdl,0;

列号

movcx,115

movsi,offsethello

loopshow3

calllocate_cursor

callshow

q2:

movah,08h;

jegoout1

jmpyy

goout1:

movah,4ch

yy:

cmpal,'

s'

按下‘s’键开始计时

jeq1

cmpal,'

S'

jmpq2

q1:

cli;

使IF清零

获取08h号中断的原入口地址

设置08h号中断的新入口地址

调用08h号中断的服务程序

inal,21h;

PC机中的8253端口地址为40H-43H,这段程序应该是给8253初始化和写定时初值

pushax;

8253是微机系统常用的定时器芯片,它有三个独立的16位减法计数器,每个计数器分配一个端口地址,分别为40h,41h,42h。

还有一个控制寄存器,端口地址为43h

moval,00110110b

movax,11932;

定时器的时钟频率为1.193187MHz,计数初值=1193187/100=11932

sti

s1:

calllocate_cursor

检验键盘状态,有输入al=00,无输入al=0ffh

incal;

按下‘p’键停止计时

clear:

popax

popdx;

把bx送到dx

movh,0

movmin1,30h

movmin2,30h

movsec1,30h

movsec2,30h

movmsec1,30h

movmsec2,30h

jmpstart

把bx送到dx,原中断向量存在ES:

按下g键继续程序

goout:

popds;

把es送到ds

movax,2508h

subal,al

movah,4ch

mainendp

int08hprocnear;

使用8253/8254定时器0的中断类型8计时,以100次/s的频率发出中断,相当于一次中断10ms

movax,data

movds,ax

incmsec2

cmpmsec2,3ah

cmpmsec1,3ah

cmpsec2,3ah

cmpsec1,36h

cmpmi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2