微机原理与接口技术课程设计--实时钟显示与定时控制设计.doc_第1页
微机原理与接口技术课程设计--实时钟显示与定时控制设计.doc_第2页
微机原理与接口技术课程设计--实时钟显示与定时控制设计.doc_第3页
微机原理与接口技术课程设计--实时钟显示与定时控制设计.doc_第4页
微机原理与接口技术课程设计--实时钟显示与定时控制设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机接口技术课程设计设计报告题目:实时钟显示与定时控制设计专业: 电子信息工程 班级: XXXXXXX 学号: XXXXXXXXX 姓名: XXX 指导老师: XXX 设计时间:2013 年 6 月19日到 2013年 6月 25 号1设计任务说明 通过本课程设计,综合应用接口技术各汇编语言程序设计技术,在PC机上实现时钟显示、定时和响铃,以提高接口、汇编技术的应用能力。2. 总体设计(1). 利用BIOS 和DOS 的系统功能调用,能将计算机系统的日期和时间读出并显示出来。(2). 用“时:分:秒” (都是两位)的形式连续显示系统时间。(3)利用定时接口芯片每秒钟响一次铃。(4). 提示输入定时时间(即定时秒数),每经历指定的秒数,则演奏乐曲。3. 详细设计 模块描述: 利用定时中断实现时钟显示。当产生定时中断时(由8259A的IRQ0引起),CPU转入BIOS的08H号中断处理程序,在该中断处理程序中是一条软中断指令“INT 1CH”,而在该软中断程序中只有一条IRET指令,这样系统每秒钟产生18.2次定时中断,调用18.2次INT 1CH,这为开发者提供了一个编写与时间有关的程序的软中断接口,上例的定时响铃就是借用这个软接口实现的。其具体操作如下:在时钟显示程序,截获1CH号中断,在新的1CH中断处理程序安排一个计数器,记录调用的次数,每18次(约一秒钟)显示一次当前时间。利用BOIS的1AH号中断的0号功能,读取当前计时器的数值:入口参数:AH=02H执行: INT 1AH出口参数:AL=午夜信号,CH=时的BCD码,CL=分的BCD码,DH=秒的BCD码 利用BIOS的10H号中断的13H号功能,实现在屏幕的右上角显示时间。在主程序中要保存原1CH号中断的中断向量,并设置新的时钟显示中断程序的中断向量,然后作其它工作,如调用BIOS的键盘中断INT 16H的0号功能,等待用户按键盘,也就是等待中断的发生,并在屏幕右上角显示时间,当用户按键后,主程序工作完成后,恢复原1CH中断向量。在定时中断发生时同时调用发声程序实现响铃。发声程序用定时器驱动扬声器方式,这是直接利用8253/8254定时器产生声音的一种方法。定时器2的GATE2与8255A的端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3(方波)下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连,如下图所示。当PB1=1时,允许OUT2输出的频率信号到达扬声器电路。定时器驱动扬声器方式发声原理定时器2输出的方波频率取决与初始化定时器时提供的计数初值,即对CLK2端的计数脉信号的分频系数。加在CLK2端上的频率为1193100赫之=12348CH赫之,送入定时器2的计数初值为:12348CH发声频率。流程图: 主程序流程图: 开始是否有键盘被按下NY保存原1CH终端的入口地址设置新的1CH中断入口地址中断是否响应NY进入中断程序恢复原1CH号中断的中断向量结束 中断程序:给间隔计数器装初值18是否到显示时候间隔计数器减1转到next给计数器重新装值18并开中断保护现场并填写DS和ES调用get_t和get_m子程序读取系统时间及日期将时间及日期显示到屏幕上程序指定位置处恢复现场中断返回结束开始4程序及说明count_val=18 ;间隔数(约为一秒)dpage=0 ;显示页码数row=0 ;显示行号column=70-buff_len ;显示开始列号column1=70-buff_len1 ;显示日期的开始列号color=07h ;字体颜色.286.model small.code ;为方便程序驻留内存,把中断处理程序放在主程序之前 ;下面是1CH中断处理程序使用的变量count dw count_val ;“滴答”间隔计数器hhhh db ?,?,: ;小时的定义mmmm db ?,?,: ;分的定义ssss db ?,? ;秒的定义buff_len=$-offset hhhh ;显示时间字长xxxx db ?,? ;年高两位的定义yyyy db ?,?, ;年低两位的定义zzzz db ?,?, ;月定义rrrr db ?,? ;日定义buff_len1=$-offset xxxx ;显示日期字长cursor dw ? ;保存当前光标位置;1CH号中断处理程序代码new1ch:cmp cs:count,0 ;是否到显示时候 jz next ;判断是否转到next dec cs:count ;否则间隔计数器减1 iret ;中断返回next: ;显示系统时间日期子程序mov cs:count,count_val ;间隔计数器重置初值18 sti ;开中断 pusha ;保护现场 push ds push es push cs ;填写DS和ES pop ds push ds pop es call get_t ;调用读取系统时间子程序 mov bh,dpage ;BX-页号 mov ah,3 ;取原光标位置 int 10h mov cursor,dx ;保存原光标位置 mov bp,offset hhhh ;bp-时间信息串首地址 mov bh,dpage mov dh,row mov dl,column mov bl,color mov cx,buff_len mov al,0 ;al-显示模式,移动光标 mov ah,13h ;显示时钟 int 10h mov bh,dpage mov dx,cursor mov ah,2 ;恢复光标原位置 int 10h call get_m ;调用读取系统日期中断程序 mov bh,dpage mov ah,3 int 10h mov cursor,dx mov bp,offset xxxx ;bp-日期信息串首地址 mov bh,dpage mov dh,row+1 mov dl,column1 mov bl,color mov cx,buff_len1 mov al,0 mov ah,13h int 10h mov bh,dpage mov dx,cursor mov ah,2 int 10h pop es ;恢复现场 pop ds popa iret ;中断返回get_t proc ;取当前系统时间过程 mov ah,2 ;取时间信息 int 1ah mov al,ch ;al-ch中的小时数 call ttasc ;调用转换压缩BCD码为ASCLL码子程序 xchg ah,al ;高低位ASCLL码互换 mov word ptr hhhh,ax ;保存小时数 mov al,cl ;al-cl中的分钟数 call ttasc xchg ah,al mov word ptr mmmm,ax ;保存分钟数 mov al,dh ;al-dh中的秒数 call ttasc xchg ah,al mov word ptr ssss,ax ;保存秒数 retget_t endpget_m proc ;取当前系统日期过程 pusha ;保护现场 mov ah,2ah ;取系统日期 int 21h mov ax,cx mov cl,10d div cl mov bh,ah xor ah,ah div cl mov bl,ah add bx,3030h mov word ptr yyyy,bx ;保存年的低两位数 xor ah,ah div cl mov bh,ah xor ah,ah div cl mov bl,ah add bx,3030h mov word ptr xxxx,bx ;保存年的高两位数 xor ax,ax xor bx,bx mov al,dh cbw call charge mov word ptr zzzz,ax ;保存月数 xor ax,ax mov al,dl cbw call charge mov word ptr rrrr,ax ;保存日数 popa retget_m endp charge proc ;二进制转化为十进制过程 push cx push dx mov cl,10d div cl add al,30h add ah,30h ;转化为十进制 pop dx pop cx ret charge endp ttasc proc ;压缩BCD码为ASCLL码子程序 push cx mov ah,al and al,0fh mov cl,4 shr ah,cl ;高四位移到低位四位 add ax,3030h ;转为ASCLL码 pop cx retttasc endp;初始化代码和变量old1ch dd ?start: push cs pop ds ;填写DS mov ax,351ch ;取1CH号中断向量 int 21h mov word ptr old1ch,bx ;保存向量偏移地址 mov word ptr old1ch+2,es ;保存向量段地址 mov dx,offset new1ch ;dx-新时钟中断入口偏移地址 mov ax,251ch ;新中断段地址已在DS中 int 21h ;设置新的1CH号中断向量 mov ah,0 ;等待按键 int 16h lds dx,old1ch mov ax,251ch ;恢复原中断向量 int 21h mov ah,4ch int 21h end start5系统测试 1测试方法 首先在命令提示符下编译运行源程序,显示出时间和日期,然后在.asm文件里面修改显示位置,显示顺序部分程序,调整秒数显示的频率,然后编译运行,观察更改过后的运行结果。2.测试结果 图 1图2图1为初始程序运行结果图2表示经过部分修改过后的运行结果运行结果如上图所示,第二个图是在第一个图的源程序上经过改变列号,改变时间和日期的首地址和增加了一个秒的变量,保存了两个秒数的变化,使其结果变成图26总结与体会通过这次的综合设计性实验,让我更加清楚的了解了8259A在PC机中的工作情况,基本掌握了软中断服务程序的结构及编写方法。同时学习并深刻了结了PC机发声的原理和方式,掌握了PC机发声程序和延时程序的编写方法,进一步了结了8255A和8253在P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论