《微机接口技术课程设计》
设计报告
题目:
专业: 10电子信息工程
班级:
学号:
姓名:
指导老师:
重庆交通大学信息科学与工程学院
设计时间:20## 年6月14 日到 20## 年 6 月 28 号
1.设计任务说明
综合应用接口技术各汇编语言程序设计技术,在PC机上实现时钟显示、定时和响铃。
?利用BIOS 和DOS 的系统功能调用,能将计算机系统的日期和时间读出并 显示出来。
?用“时:分:秒” (都是两位)的形式连续显示系统时间。
?利用定时接口芯片每秒钟响一次铃。
4提示输入定时时间(即定时秒数),每经历指定的秒数,则演奏乐曲。
2. 总体设计
(1)利用定时中断实现时钟显示。
(2)在定时中断发生时同时调用发声程序实现响铃。
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输出的频率信号到达扬声器电路。
利用定时中断实现时钟显示的流程图:
在定时中断发生时同时调用发声程序实现响铃的流程图:
4.程序及说明
count_val=18 ;间隔数(约为一秒)
dpage=0
row=3
column=85-buff_len
color=07h ;显示属性
.286
.model small
.data
MUSTEP dw 330,294,262,294,3
dup(330)
dw 294,294,294,330,392,392
dw 294,294,330,294,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,294
dw 262,262,220,196,196,220,262,294,330,262
dw -1
.code
count dw count_val
yy db ?
xx db ?
hhhh db ?,?," : "
mmmm db ?,?,' : '
ssss db ?,?
db 0ah
mess1 db 4 dup(?)
db " : "
mess2 db 2 dup(?)
db " : "
mess3 db 2 dup(?)
db 0dh,0ah,24h
year dw ?
month db ?
day db ?
buff_len=$-offset hhhh ;显示信息长度
cursor dw ? ;保存当前光标位置
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-6
mov al,0 ;a1←显示模式,移动光标
mov ah,13h ;显示时钟
int 10h
mov bh,dpage
mov dx,cursor
mov ah,2 ;恢复光标原位置
int 10h
pop es ;恢复现场
pop ds
popa
cmp yy,0
jnz rrr
call music
rrr: dec yy
call ring
iret
get_t proc ;取当前系统时间和日期过程
mov ah,2 ;取时间信息
int 1ah
mov al,ch
call ttasc ;调用转换压缩BCD码为ASCII码子程序
xchg ah,al
mov word ptr hhhh,ax ;保存小时数
mov al,cl
call ttasc
xchg ah,al
mov word ptr mmmm,ax
mov al,dh
call ttasc
xchg ah,al
mov word ptr ssss,ax
mov ah,2ah ;取日期数信息
int 21h
mov year,cx
mov month,dh
mov day,dl
mov ax,year
mov bx,length mess1
mov si,offset mess1
call todasc
mov al,month
xor ah,ah
mov bx,length mess2
mov si,offset mess2
call todasc
mov al,day
xor ah,ah
mov bx,length mess3
mov si,offset mess3
call todasc
ret
get_t endp
ttasc proc ;时间调用转换压缩BCD码为ASCII码子程序
push cx
mov ah,al
and al,0fh
mov cl,4
shr ah,cl
add ax,3030h
pop cx
ret
ttasc endp
todasc proc ;日期调用转换为ASCII码子程序
pusha
mov cx,10
t1:
xor dx,dx
div cx
add dl,30h
mov [si+bx-1],dl
dec bx
jnz t1
popa
ret
todasc endp
gsound proc
pusha
mov al,10110110b ;定时器2控制字,方式3,输出方波
out 43h,al
mov dx,12h ;dx|ax ←11933100hz
mov ax,348ch
div di
out 42h,al ;定时器2 分频系数
mov al,ah
out 42h,al
in al,61h ;a1←61h口
mov ah,al ;61h口原数保存到ah中
or al,03h ;61h口的pb和pb置1
out 61h,al ;本行执行后即开始发声
wait1:
mov cx,8289h
call waitf
dec bx
jnc wait1
mov al,ah ;恢复61h口原数据
out 61h,al
popa
ret
gsound endp
ring proc
pusha
mov dx,10000 ;dx←发声次数
in al,61h ;d1 ←0(发声开关)
and al,0fdh ;d1取反
sound:xor al,02h
out 61h,al
mov cx,05fffh ;cx 延时循环初值
ww:loop ww
dec dx
jne sound
popa
ret
ring endp
music proc
mov al,xx
mov yy,al
mov ax,@data
mov ds,ax
lea si,musfre ;取频率表的首地址
lea bp,ds:mustime ;取节拍时间表首地址
freq:
mov di,[si] ;di ←频率
cmp di,-1 ;结束演奏?
je end_mus
mov bx,[bp] ;bx←节拍时间值
call gsound ;调用发声程序
add si,2 ;指向下一个发声频率
add bp,2
jmp freq ;继续演奏下一个音节
end_mus: ret
music endp
waitf proc ;入口参数:CX=COUNT OF 15.08us
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
old1ch dd ?
start: mov ax,@code
mov ds,ax
mov ah,1
int 21h
mov ah,30h
sub al,ah
mov yy,al
mov xx,al
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 ;DX 原中断入口偏移地址
mov ax,251ch ;恢复原中断向量
int 21h
mov ah,4ch
int 21h ;程序结束
end start
5.系统测试
对程序进行编译和链接,成功得实现了显示系统时间和日期,并且能够定时播放简单音乐。
6.总结与体会
这次课程设计,对于我来说还是十分困难的。由于平时不注重上机的练习,在平常的上机课也只是按照书本上的内容依次敲入程序,按步调试,并没有去深刻的理解书本上的理论,和每一步要实现的功能。因此这次的课程设计给我造成了很大的困扰,好在最后经过一番努力,终于做出来程序,并实现功能,我还是很高兴的。
本次实验,要实现时钟的显示和定时控制两项功能,以往的上机实验课上有这方面的探索,所以这次实验我在以前实验的基础上调用另外的子程序,来实现其基本要求。通过这次课程设计,我深刻地认识到要把课堂理论和上机实践联系起来的重要性,仅仅是实现了程序的功能还要了解每一步的作用。或许汇编语言比较高级语言来说有些枯燥和难懂,但是其在一些重要领域有着极重要的地位而难以取代,这门科目的结束并不是学习的结束,我会继续学习汇编语言,让其实现应有的价值。
微机原理与接口设计报告学院:信息科学与工程学院班级:学号:姓名:指导老师:完成时间:20xx年06月24号一、设计目的1、了解交通…
《微机原理与接口技术》课程设计报告交通灯控制系统班级:学号:姓名:指导教师:成绩:xxxx年x月x日目录1、课程设计的目的和要求3…
科技学院课程设计报告20xx20xx年度第一学期名称微机原理与接口技术题目院系动力系自动化专业班级08K2学号学生姓名指导教师设计…
福建农林大学计算机与信息学院信息工程类课程设计报告课程名称课程设计题目姓名系专业年级学号指导教师职称数字信号处理课程设计时域采样定…
微机接口技术课程设计设计报告题目实时钟显示与定时控制设计专业班级学号姓名指导老师设计时间20xx年6月19日到20xx年6月25号…
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)计算机实践过程与体会题目学生姓名指导教师学院专业班级学生学号祁彦翔…
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)题目学生姓名指导教师学院专业班级学生学号课程设计实践报告计算机基础…
点对点数据交换P2P目录需求分析511课程设计目的512课程设计要求513选题与操作流程514开发环境与开发平台5总体设计521总…
xxxxxNormalUniversityofScienceampTechnology一课程设计的目的及要求211设计目标212设…
课程设计报告专业班级姓名学号一实践内容1掌握RJ45网线接头的制作方法1双绞线的性能指标分类2RJ45接头线序各线的位置作用3制作…
西安科技大学课程设计报告课程名称计算机组成原理课题名称复杂模型计算机的设计专业计算机科学与技术班级计科1001班姓名李用维念文洪吴…