欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    计时器汇编语言程序设计.doc

    • 资源ID:1050673       资源大小:217.57KB        全文页数:20页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计时器汇编语言程序设计.doc

    1、武汉理工大学微机原理课程设计说明书 计时器汇编语言程序设计1设计要求1.1初始条件 采用16位微处理器 8086 CPU以及86系列微型计算机的指令系统; 软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。1.2设计任务 设计汇编语言程序,实现计时功能,具体功能要求如下:(1) 设计一个计时器界面,形式为:时:分:秒;(2) 单击“S”或“s”键开始计时,单击“P”或“p”停止计时,单击“G”或“g”键继续计时,单击“C”或“c”键清0;(3) 单击”ESC”键退出程序。(2)单击”ESC”键退出程序。根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试。

    2、2总体方案论证2.1方案一 利用8155芯片设计一个具有时、分、秒显示的电子时钟,启动按键,数码管从初始设置的时间开始显示。从设计要求可知,需要键盘扫描部分,时间控制部分,初始值设置部分,数码管显示部分,延时部分。 时间走动部分的实现:各个时钟的个位部分逢十进一,秒和分钟的十位部分是逢六进一。当时的十位达到2时,个位为4时,程序跳到清零部分,程序从零开始计时。 数码管显示部分的功能是实现时、分、秒的显示,可以用六个数码管从左至右一次显示时间,采用分配存储单元的形式,地址从低到高分别显示秒、分、时。 延时部分是对秒的个位进行延时,延时中调用系统时钟显示程序,以便连续不断地显示并实现一秒延时的计时

    3、功能,从而实现电子时钟的设计。2.2方案二 利用DOS功能设计界面显示时间00:00:00:00,在MFS中的微机原理实验集成环境MF2KP中编写程序,根据设计要求,需要界面设置,键盘按键输入检测,显示初值时间,显示形式,键盘控制设置,时间进位处理,设置中断频率,暂停和继续计时。通过调用系统的08h号或者1ch号中断来进行设置,使其能够产生100Hz即10ms 一次的中断,同时修改原08号中断的入口地址,使其每次中断执行一次计时的中断服务程序,进而动态显示时间。2.3方案论证 方案一要用到8155芯片和数码管,而且计时器是调用系统时钟完成的,这种方法必须每秒或者每更短的时间调用系统 时钟然后进

    4、行相减操作才能达到计时的每秒时时显示动态时间,虽然理论上可以实现计时 功能,但是会比较的麻烦。方案二通过调用系统的08h号或者1ch号中断来进行设置,使其能够产生100Hz即10ms 一次的中断进而动态显示时间。这种方法不仅简单易行,而且较方便。而且方案二在DOS环境下运行的,不需要额外的芯片,所以方案二更好更合适。3程序流程图3.1主程序流程图主程序流程图如图3-1所示,主程序是用来完成屏幕初始化:清屏和显示初始界面,同时对键盘按键输入检测和对键盘按下的键值进行判断,执行相应键值所对应的程序,达到开始、暂停、 继续、清零、退出的功能。进而动态显示和控制时间。3.2中断服务子程序流程图 中断服

    5、务子程序流程图如图3-2所示,中断服务子程序的功能是每次中断执行一次该 程序,对十毫秒位、百毫秒位、秒位、十秒位、分钟位、十分钟位、小时位和十小时位进 行加1和判断是否进位操作,即达到该时间的情况下就给该时间对应位进行加1操作,使其能够显示正确的动态的时间。 停止计时 显示停止计时时间 清零 显示初始时间 继续计时 显示动态时间 开中断计时 显示动态时间结束 按ESC键 按c/C键按g/G键检验键盘状态按下p/P键按下s/S键读字符显示提示语和初值时间清屏开始 图3-1 主程序流程图 清零 退出中断 十小时位加1十h位3小时位10 N24 小时位加1 N加1(N初值为0)十分位6 十分钟位加1

    6、ms位10 分钟位加1十秒位6 十秒位加1 秒位10十ms位10 秒位加1 十ms位加1ms位10 毫秒位加1 设置中断频率 开中断 设置中断屏蔽器 设置中断入口地址图3-2 中断服务子程序流程图4.程序设计步骤 4.1界面设置 在DOS界面中显示时间,要输入输出数据,需要设置界面。界面设置需要用到DOS功能调用的INT 10H指令。INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,当一切设定好之后再调用 INT 10H。1.设置光标形状:mov ah,1 ; 置光标类型,不显示

    7、光标mov ch,20hint 10h2.设置光标位置:mov dh,0 ; 行号mov dl, 0 ; 列号:mov bh,0 ; 页号mov ah, 2 ; 置光标位置int 10h3.在Teletype模式下显示字符:show3:mov ah, 0eh ; 显示字符(光标前移 ) ,al 字符, bl 前景色mov al, siint 10hinc siloop show3 为了使计时器的显示界面更加直观更加清楚,所以可以在int10h的情况下将AH赋值为06,初始化屏幕,同时置AL为00H而且为全屏空白,同时颜色通过在int 10H的情况下BH=000ch显示为红色,这样计时器会更加醒

    8、目。4.2检验键盘状态由于要实现键盘按下不同的键值实现各种不同的功能,所以需要判断键盘输入的为哪个键。首先检查键盘是否有输入, 若没有输入,则跳过检查键盘输入的键值的程序,若有输入则比较输入为何种键,接着执行该键值对应要完成的功能的程序。检验键盘状态程序如下:mov ah, 0bh ; 检验键盘状态,有输入 al=00 ,无输入 al=0fint 21hinc aljnz s1mov ah, 08h ; 键盘输入无回显 ,(al)= 输入字符int 21hcmp al, 1bh ; 按下 Esc 键结束程序je gooutcmp al, p ; 按下 p 键停止计时je pausecmp al

    9、, P ; 按下 p 键停止计时je pausecmp al, c ; 按下 c 键清零je clearcmp al, C ; 按下 C 键清零je clearjmp s14.3中断子程序1.08H号中断入口地址设置 由于要使用 08H 号中断来实现,计时功能,所以首先要获得08H号中断的原来的入口地址,AL里存中断类型号,将其存在了 ES:BX 里,接着设置其新入口地址,将新的中断向量存在 DS:DX 里就可以实现设置新入口地址。具体的代码实现如下:mov al, 08hmov ah, 35h ; 获取 08h 号中断的原入口地址int 21hpush espush bxpush dsmov

    10、 ax, seg int08hmov ds, axmov dx, offset int08h ; 设置08h号中断的新入口地址mov al,08hmov ah,25hint 21h ; 调用08h号中断的服务程序pop ds2.中断屏蔽器设置 中断屏蔽寄存器的 I/O 端口地址是 21H , 它的 8 位对应控制 8 个外部设备 。 某位为 0 允许某外部设备中断,为 1 则表示某外部设备的中断请求被屏蔽。由上图可以看出要使键盘和定时器允许外部中断 , 则令其对应的位置零 ,同时使其他设备不允许外部中断。于是可通过以下代码进行设置:in al, 21hpush axmov al, 111111

    11、00bout 21h, al3.中断频率设置 根据设计要求,需要使系统内部 8253 输出方波频率为 100Hz,所以要对 08H号中断设置,使其能够 10ms 一次中断,同时要使其工作在通道0方式3的方波发生器。8253是微机系统常用的定时器芯片,它有三个独立的 16 位减法计数器,每个计数器分配一个端口地址,分别为 40h,41h,42h 。还有一个控制寄存器,端口地址为 43h 。把中断子程序的段地址和偏移地址送到 08H 中断向量中 , 由于 08H 中断向量硬件中断 ,计数 器 0 的输出 端 OU T 与中断控制 器 8259 A 的一位相连每秒中 断 18. 2 次 , 故需要

    12、把 18.2H Z改为 100HZ ,而 CLK0 的输入频率是 1.1931817MHZ ,故需把 1.1931817 除以 100 的初始值送到 40H 端口就可以实现每秒 100 次的中断。所以设置计数初值为 11932 ,这样就可以达到 10ms 中断一次。实现该功能的代码如下:mov al, 00110110b ;设置通道 0 的方式 3out 43h, almov ax, 11932;定时器的时钟频率为 1.1931817MHz ,计数初值 = 1193182 / 100=11932out 40h, almov al, ahout 40h, al4.4判断计时进位 当十毫秒位超过9

    13、的时候,要对百毫秒位进 1,如果百毫秒位超过9时,要对秒位进1,当秒位超过,9时,对十秒位进1,如果十秒位超过5时,才对分钟位进 1 ,分钟位超过 9时,对十分钟位进 1 ,如果十分钟位超过 5 时,对小时位进1。小时位的进位设计就要考虑到小时最多24的特殊性了,所以设置一个变量,在小时位加1的同时给它也加1.如果这个变量加到了24则重新开始计时,此时再把变量置零。实现此部分功能的程序代码如下:inc msec2 ;十毫秒位加 1cmp msec2, 3ah ;十毫秒位是否小于 100jb tmov msec2,30hinc msec1cmp msec1,3ah ;百毫秒位是否小于 10jb

    14、tmov msec1,30hinc sec2cmp sec2,3ah ;秒位是否小于 10jb tmov sec2,30hinc sec1cmp sec1,36h ;十秒位是否小于 6jb tmov sec1,30hinc min2cmp min2,3ah ;分钟位是否小于 10jb tmov min2,30hinc min1cmp min1,36h ;十分钟位是否小于6jb tmov min1,30hinc hou2inc ncmp n, 24 ;比较是否到了24小时,到了就跳到清零程序jz qinlingcmp hou2,3ah ;小时位是否小于10jb tmov hou2,30hinc

    15、hou1cmp hou1,33h ;十小时位是否小于3jb tmov hou1,30ht: mov al,20hout 20h,al;中断结束命令pop dspop axIret4.5暂停与继续计时 要暂停计时器,实际上是在暂停发生中断时显示的时间的加 1 操作,所以可以设置08h号中断的入口地址使其不进入计时中断服务程序进行加1操作,这样就能达到暂停计时的功能。同理使其继续计时也是设置 08h号中断的入口地址,使其继续进入计时中断服务程序就可以继续进行计时了。实现此功能的代码如下:pause:pop axout 21h,alpop dx ; 把 bx 送到 dx , 原中断向量存在 ES:B

    16、X 中pop bxpush dsmov ds,bxmov al,08hmov ah,25h ; 设置 08h 号中断入口地址为保存下来的原入口地址int 21hpop dsaa1:mov ah, 08h ; 键盘输入无回显, al= 输入字符int 21hcmp al, 1bh ;按下 Esc 键结束程序je gooutcmp al, g;按下 g 键继续程序je jixucmp al, G; 按下 G 键继续程序je jixujmp aa1jixu:jmp q15程序调试说明与分析5.1初始界面运行程序后初始界面如图5-1所示:图5-1 初始界面5.2按下S键开始计时界面按下S键后开始计时界

    17、面如图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心得体会 计算机的诞生是人类科学史上的一件大事。半个多世纪以来,计算机得到了迅猛的发展,从小型机到巨型机,从台式机到手提电脑,科学家实现了计算机一代接一代的跨越性的飞跃。其中微机的一个代表机型是个人计

    18、算机,得到了极为广泛的应用,已经成为了人们生活中的必不可少的一部分,人们用它上网来了解世界各地的资讯,用它进行财务处理来管理公司和家庭开支,用它控制机电部件来实现过程操作的自动化对科研工作者而言,微机更是需要掌握的“第二语言”。这次微机课程设计让我了解到了微机在各个方面的应用。 平常我们上微机课时,老师讲的都是理论知识,讲的很详细但比较简单,编程也是这样,平常作业和考试时一段程序不超过20行,所以做课设前觉得应该很容易,再拿到题后,构思了一天,发现虽然思路不难,但要处理的模块太多了,就计时器汇编语言程序设计来说,进位跳转就有6次,还要设计界面(这些需要靠自学掌握),还有频率设置,说起来简单,就

    19、是1秒100次脉冲,但真正做时不知从哪下手我上网也查了一些资料,发现程序比自己想象中的要长,在word中程序有7、8页长,经过两天的研究,翻书,查资料结合自己所学,总算看懂了大部分,对照网上的资料,自己慢慢学着编程,一开始错误一大堆,经过耐心的寻找、对比、问同学后终于调试出来了。我心中的大石终于放下了。在这次微机课程设计中,通过翻书、查资料、与同学讨论,让我实践能力得到了质的飞跃,让我对微机这门课程有了更深的了解,同时也加深了理论知识的掌握,让我们学以致用,使我们所学的知识掌握的更加牢固,感谢黄老师耐心的教导,是你让我们对微机有了更新的了解,让我们对微机有了浓厚的兴趣。我希望我们可以多做点课程

    20、设计,让理论与实践结合,这样才能激发我们的创新思想,我们也能更快更牢固的掌握知识。 参考文献1彭虎等著.微机原理与接口技术(第二版).电子工业出版社,20052艾德才.Pentium系列微型计算机原理与接口技术.高等教育出版社,20003戴梅萼.微型计算机原理与接口技术.清华大学出版社,20034周明德.微型计算机系统原理及应用.清华大学出版社,2002附件(程序清单)data segmenthou1 db 0hou2 db 0mw db :min1 db 0min2 db 0m db :sec1 db 0sec2 db 0m2 db :msec1 db 0msec2 db 0count eq

    21、u $-hou1h db 0hello db Copyright by jibinggao.,0ah,0dh db Welcome to use the calculagraph of sail. ,0ah,0dh db s:start p:pause g:continue Esc:exit c:clear ,0ah,0dhdata endscode segmentmain proc farassume cs:code,ds:datastart:mov ax, datamov ds, axmov ah,1 ; 置光标类型,不显示光标mov ch,20hint 10hcall clean_scr

    22、eenpush axpush bx mov ax,0600h ;ah=06(滚动)al=00(全屏空白) mov bh,000ch ;设置背景颜色(3)和前景颜色(e) sub cx,cx mov dx,5f5fhint 10hpop axpop bxmov dh,1; 行号mov dl,0 ; 列号mov bh,0 ; 页号mov ah, 2 ; 置光标位置int 10hmov cx, 115mov si, offset helloshow3:mov ah, 0eh ; 显示字符(光标前移 ) ,al 字符, bl 前景色mov al, siint 10hinc siloop show3ca

    23、ll locate_cursorcall showq2: mov ah, 08h ; 键盘输入无回显, al= 输入字符int 21hcmp al, 1bh ; 按下 Esc 键结束程序je goout1jmp yygoout1: mov ah, 4chint 21hyy: cmp al ,s ; 按下 s 键开始计时je q1cmp al ,Sje q1jmp q2q1: cli ; 使 IF 清零mov al, 08hmov ah, 35h ; 获 取 08 h 号中断的原入口地址int 21hpush espush bxpush dsmov ax, seg int08hmov ds, a

    24、xmov dx, offset int08h ; 设置 08h 号中断的新入口地址mov al,08hmov ah,25hint 21h ; 调 用 08 h 号中断的服务程序pop dsin al,21h ;PC 机中 的8253 端口地址为 40H-43H ,这段程序应该是 给8253 初始化和写定时初值push ax ; 8253 是微机系统常用的定时器芯片,它有三个独立的 16 位减法计数器,每个计数器分配一个端口地址,分别为 40h,41h,42h。还有一个控制寄存器,端口地址为 43hmov al, 11111100bout 21h, almov al, 00110110bout

    25、43h, almov ax,11932 ; 定时器的时钟频率 为1.193 187 MHz,计数初值 = 11931 87 / 100=1193 2out 40h, almov al, ahout 40h, alstis1: call locate_cursorcall showmov ah, 0bh ; 检验键盘状态,有输入 al=00 ,无输入 al=0ffhint 21hinc al ;jnz s1mov ah, 08h ; 键盘输入无回显, al= 输入字符int 21hcmp al, 1bh ; 按下 Esc 键结束程序je gooutcmp al, p ; 按下 p 键停止计时je

    26、 pausecmp al, P ; 按下 p 键停止计时je pausecmp al, c ; 按下 c 键清零je clearcmp al, C ; 按下 c 键清零je clearjmp s1clear: pop axout 21h,alpop dx ; 把 bx 送到 dxpop bxpush dsmov ds,bxmov al,08hmov ah,25hint 21hpop dsmov h, 0mov min1, 30hmov min2, 30hmov sec1, 30hmov sec2, 30hmov msec1, 30hmov msec2, 30hjmp startpause:po

    27、p axout 21h,alpop dx ; 把 bx 送到 dx ,原中断向量存在 ES:BX 中pop bxpush dsmov ds,bxmov al,08hmov ah,25hint 21hpop dsaa1:mov ah, 08h ; 键盘输入无回显, al= 输入字符int 21hcmp al, 1bh ; 按下 Esc 键结束程序je gooutcmp al, g ; 按下 g 键继续程序je jixucmp al, G ; 按下 g 键继续程序je jixujmp aa1jixu:jmp q1goout:pop axout 21h,alpop dx ; 把 bx 送到 dxpo

    28、p ds ; 把 es 送到 dsmov ax, 2508hint 21hmov al, 00110110bout 43h, alsub al, alout 40h, alout 40h, almov ah, 4chint 21hmain endpint08h proc near ; 使 用8253/8254 定时器 0 的中断类型 8 计时 , 以 100 次/s 的频率发出中断 , 相当于一次中断 10mspush axpush dsmov ax,datamov ds,axinc msec2cmp msec2, 3ahjb tmov msec2,30hinc msec1cmp msec1,

    29、3ahjb tmov msec1,30hinc sec2cmp sec2,3ahjb tmov sec2,30hinc sec1cmp sec1,36hjb tmov sec1,30hinc min2cmp min2,3ahjb tmov min2,30hinc min1cmp min1,36hjb tmov min1,30hinc hou2cmp hou2,3ahjb tmov hou2,30hinc hou1cmp hou1,33hjb tmov hou1,30ht: mov al,20hout 20h,al ; 中断结束命令pop dspop axiret ; 中断返回int08h en

    30、dp ; 中断服务程序结束clean_screen proc nearpush axpush bxpush cxpush dxmov ah, 6 ; 屏幕初始化或向上滚动mov al, 0 ; 清屏mov bh, 0 ; 滚入行属性mov ch, 0 ; 左上角行号mov cl, 0 ; 左上角列号mov dh, 24 ; 右下角行号mov dl, 79 ; 右下角列号int 10hpop dxpop cxpop bxpop axretclean_screen endplocate_cursor proc nearpush dxpush bxpush axmov dh, 12 ; 行号mov

    31、dl, 33 ; 列号mov bh, 0 ; 页号mov ah, 2 ; 置光标位置int 10hpop axpop bxpop dxretlocate_cursor endpshow proc nearpush cxpush bxpush sipush axmov si, offset hou1mov cx,countshow1:mov bl,7mov ah, 0eh; 显示字符(光标前移 ) , al 字符, bl 前景色mov al, siint 10hinc siloop show1pop axpop sipop bxpop cxretshow endpcode endsend start19


    注意事项

    本文(计时器汇编语言程序设计.doc)为本站会员(星星)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922