微机原理与接口技术课程设计报告Word文档下载推荐.docx
- 文档编号:16263424
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:11
- 大小:204.13KB
微机原理与接口技术课程设计报告Word文档下载推荐.docx
《微机原理与接口技术课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计报告Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
⑴.利用定时中断实现时钟显示。
当产生定时中断时(由8259A的IRQ0引起),CPU转入BIOS的08H号中断处理程序,在该中断处理程序中是一条软中断指令“INT1CH”,而在该软中断程序中只有一条IRET指令,这样系统每秒钟产生18.2次定时中断,调用18.2次INT1CH,这为开发者提供了一个编写与时间有关的程序的软中断接口,上例的定时响铃就是借用这个软接口实现的。
其具体操作如下:
①在时钟显示程序,截获1CH号中断,在新的1CH中断处理程序安排一个计数器,记录调用的次数,每18次(约一秒钟)显示一次当前时间。
②利用BOIS的1AH号中断的0号功能,读取当前计时器的数值:
入口参数:
AH=02H
执行:
INT1AH
出口参数:
AL=午夜信号,CH=时的BCD码,CL=分的BCD码,DH=秒的BCD码
③利用BIOS的10H号中断的13H号功能,实现在屏幕的右上角显示时间。
④在主程序中要保存原1CH号中断的中断向量,并设置新的时钟显示中断程序的中断向量,然后作其它工作,如调用BIOS的键盘中断INT16H的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÷
发声频率。
流程图:
主程序流程图:
中断程序:
4.程序及说明
count_val=18;
间隔数(约为一秒)
dpage=0;
显示页码数
row=0;
显示行号
column=70-buff_len;
显示开始列号
column1=70-buff_len1;
显示日期的开始列号
color=07h;
字体颜色
.286
.modelsmall
.code;
为方便程序驻留内存,把中断处理程序放在主程序之前
;
下面是1CH中断处理程序使用的变量
countdwcount_val;
“滴答”间隔计数器
hhhhdb?
?
"
:
"
小时的定义
mmmmdb?
分的定义
ssssdb?
秒的定义
buff_len=$-offsethhhh;
显示时间字长
xxxxdb?
年高两位的定义
yyyydb?
\"
年低两位的定义
zzzzdb?
月定义
rrrrdb?
日定义
buff_len1=$-offsetxxxx;
显示日期字长
cursordw?
保存当前光标位置
;
1CH号中断处理程序代码
new1ch:
cmpcs:
count,0;
是否到显示时候
jznext;
判断是否转到next
deccs:
count;
否则间隔计数器减1
iret;
中断返回
next:
;
显示系统时间日期子程序
movcs:
count,count_val;
间隔计数器重置初值18
sti;
开中断
pusha;
保护现场
pushds
pushes
pushcs;
填写DS和ES
popds
popes
callget_t;
调用读取系统时间子程序
movbh,dpage;
BX<
-页号
movah,3;
取原光标位置
int10h
movcursor,dx;
保存原光标位置
movbp,offsethhhh;
bp<
-时间信息串首地址
movbh,dpage
movdh,row
movdl,column
movbl,color
movcx,buff_len
moval,0;
al<
-显示模式,移动光标
movah,13h;
显示时钟
movbh,dpage
movdx,cursor
movah,2;
恢复光标原位置
callget_m;
调用读取系统日期中断程序
movah,3
movcursor,dx
movbp,offsetxxxx;
-日期信息串首地址
movdh,row+1
movdl,column1
movcx,buff_len1
moval,0
movah,13h
movah,2
popes;
恢复现场
popa
iret;
get_tproc;
取当前系统时间过程
取时间信息
int1ah
moval,ch;
-ch中的小时数
callttasc;
调用转换压缩BCD码为ASCLL码子程序
xchgah,al;
高低位ASCLL码互换
movwordptrhhhh,ax;
保存小时数
moval,cl;
-cl中的分钟数
callttasc
xchgah,al
movwordptrmmmm,ax;
保存分钟数
moval,dh;
-dh中的秒数
callttasc
movwordptrssss,ax;
保存秒数
ret
get_tendp
get_mproc;
取当前系统日期过程
movah,2ah;
取系统日期
int21h
movax,cx
movcl,10d
divcl
movbh,ah
xorah,ah
movbl,ah
addbx,3030h
movwordptryyyy,bx;
保存年的低两位数
movwordptrxxxx,bx;
保存年的高两位数
xorax,ax
xorbx,bx
moval,dh
cbw
callcharge
movwordptrzzzz,ax;
保存月数
moval,dl
cbw
movwordptrrrrr,ax;
保存日数
popa
ret
get_mendp
chargeproc;
二进制转化为十进制过程
pushcx
pushdx
addal,30h
addah,30h;
转化为十进制
popdx
popcx
ret
chargeendp
ttascproc;
压缩BCD码为ASCLL码子程序
movah,al
andal,0fh
movcl,4
shrah,cl;
高四位移到低位四位
addax,3030h;
转为ASCLL码
ttascendp
初始化代码和变量
old1chdd?
start:
pushcs
popds;
填写DS
movax,351ch;
取1CH号中断向量
int21h
movwordptrold1ch,bx;
保存向量偏移地址
movwordptrold1ch+2,es;
保存向量段地址
movdx,offsetnew1ch;
dx<
-新时钟中断入口偏移地址
movax,251ch;
新中断段地址已在DS中
int21h;
设置新的1CH号中断向量
movah,0;
等待按键
int16h
ldsdx,old1ch
恢复原中断向量
movah,4ch
endstart
5.系统测试
1.测试方法
首先在命令提示符下编译运行源程序,显示出时间和日期,然后在
.asm文件里面修改显示位置,显示顺序部分程序,调整秒数显示的频率,然后编译运行,观察更改过后的运行结果。
2.测试结果
图1
图2
图1为初始程序运行结果
图2表示经过部分修改过后的运行结果
运行结果如上图所示,第二个图是在第一个图的源程序上经过改变列号,改变时间和日期的首地址和增加了一个秒的变量,保存了两个秒数的变化,使其结果变成图2
6.总结与体会
通过这次的综合设计性实验,让我更加清楚的了解了8259A在PC机中的工作情况,基本掌握了软中断服务程序的结构及编写方法。
同时学习并深刻了结了PC机发声的原理和方式,掌握了PC机发声程序和延时程序的编写方法,进一步了结了8255A和8253在PC机中的应用。
在本课程设计中,学会了应用接口技术各汇编语言程序设计技术,在PC机上实现时钟显示、定时和响铃,以提高接口、汇编技术的应用能力。
在编程方面,通过这次实验,让我加深了对DOS和BIOS系统功能指令的理解,把以前没记住的指令都加深了印象,巩固了汇编语言编程的基础知识。
在独立完成实验过程还有写困难,本次试验在同学的帮助下完成了实验编程,希望以后在这方面有更大的进步;
还有部分指令在使用过程中理解有困难,在学习过程多我会再多花些时间去理解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)