毕业
--8253定时器 计数器接口与数字电子琴
实验要求
实验:8253定时器/计数器接口与数字电子琴 一、 实验目的
加深对课堂教授内容的理解,掌握汇编语言的语法
;
熟悉所用的计算机系统的操作方法,了解和熟悉8086微处理器的逻辑结构、工作模式、指令系统、汇编语言程序实验、DEBUG程序调试工具;
学习上机调试程序的方法和技巧,提高编程能力。
二、 实验环境
1、操作系统:DOS、windows98/2000/xp
2、软件:MASM宏汇编
三、 实验内容
1、内容:根据提供的音乐频率表和时间表,编写程序控制8253,使其输出
连接到扬声器上能发出相应的乐曲。
2、说明:一个音符对应一个频率。将对应一个音符频率的方波通到扬声器
上就可发出这个音符的声音。音符与频率对照表如下图所示:
音符 1 2 3 4 5 6 7 I
频率 524 588 660 698 784 880 988 1048
(利用8253的方式3—“方波发生器”,改变定时器2的计数值来改变声
音频率,通过编程来获得声调(频率)和节奏(延时长短),使计算机演
奏出音乐来。)
将相应的一种频率的计数初值写入计数器,就可产生对应频率的方波。计
数初值计算如下:
计数初值=输入时钟?输出频率
例如输入时钟采用系统总线上CLK(1.041667MHZ),要得到800HZ的频
率,计数初值即为1041667/800。对于每个音符演奏的时间,可以通过软
件延时来处理。
8253用于发声的电原理图:
3、要求:自选曲目,实现该曲目的演奏功能,完成实验报告(电子版:文
件类型*.doc)并提交一份完整的程序清单(文件类型:*.asm);实验报
告字数不得少于1200字
实验报告内容要求:有实验目的、实验环境、实验内容及主要工作原理
(附8253内部结构和引脚图;8253控制字及初始化编程原理;发声程序
电路原理图、
图;主要功能附必要的功能说明。)、实验步骤、实验
总结、参考资料。
三、 实验内容
实验线路如下图,8253的CLK2接1.19MHz时钟,GATE2接+5V,OUT2接喇叭。8255的B口PB0 、PB1、PB2、PB3、PB4、PB5、PB6、PB7,分别接开关KK0、KK1、KK2、KK3、KK4、KK5、KK6、KK7,作为电子琴的按键输入。拨动不同的开关,发出相应的音阶。
设定8253的2#通道工作方式为方式3——方波发生器,用于计数一定的方波数,发出七个音阶相应的频率。 8255B口作为输入,工作方式为方式0——基本输入\输出方式。
四、 实验步骤
(1) 编写并输入程序,检查无误后,经汇编、连接后装入系统。 stack segment stack
dw 64 dup(?)
stack ends
data segment
msg dw -1
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
push ds
mov dx, 43h
mov al,10110111B ;8253计数器2读/写计数器16位数模式3 BCD
码
out dx,al
mov dx,63h
使用8253实现使用1到8弹奏歌曲
;其他键退出
data segment
message db 'Use 1 ... 8 to play the music','$'
frequ dw 524, 588, 660, 698, 784, 880, 988, 1048
data ends
code segment
assume cs:code, ds:data start:
mov ax, data
mov ds, ax
lea dx, message
mov ah, 09h
int 21h
mov al, 10110110b
out 43h, al ;set the control
next: mov ah, 7
int 21h
cmp al, '1'
jb exit
cmp al, '8'
ja exit
;get the frequency of the number
sub al, 30h
mov ah, 0
mov bx, ax
sub bx, 1
shl bx, 1
mov cx, frequ[bx]
;get the counter
mov ax, 34dch
mov dx, 12h ;DX:AX=1234DCH=1193180D
div cx
mov bx, ax ;set the counter
mov ax, bx
out 42h, al ;send the lower
mov al, ah
out 42h, al ;send th higner
in al, 61h ;set the 0 and 1 as '1'
or al, 03h
out 61h, al
mov cx, 0ffffh
delay: mov dx, 100h
dec_dx: dec dx
jnz dec_dx
loop delay
in al, 61h
and al, 11111100b
out 61h, al ;open the voice
jmp next
exit:
mov ah, 4ch
int 21h
code ends
end start
六、
实验总结:
经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试 过,就肯定学到了不少东西,也真正体会到做电子设计行业工作的辛苦,不过自己收获还是挺大的。
这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。
经过短短一周的课程设计,我认识到,课程设计能真正让人学到实际应用的东西的一门课程。收获比上几星期课还多。
首先,要实现题目要求的功能并有所创新,我们必须全心地投入其中,养成一种敢于钻研敢于创新的习惯。在把课程要求实现到实际中来的过程中,首先必须清楚明白地了解几个参考程序的每一行的意思,这就需要敢于静心钻研。为了把使得程序更加完整,就必须进行创新,这就需要敢于创新。
其次,通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧。为了了解键盘,查找了不少8279芯片的资料,了解了键盘的初始化,存取缓存,扫描键盘,读取键码以及键码和显示码之间的转换。为了实现基本功能,认真研究了参考程序的意义,了解了电子琴的不同音阶放音功能的实现,长短音的实现,更深入了解了8253计时器的使用方法。
编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。调试程序中,学习了DEBUG 的使用,DEBUG对检查程序的错误作用很大。同时,也要灵活使用各种调试方法,来缩小寻找错误的范围。
检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。在设计扩展功能的过程中,大胆想像并且用多种思路来求解实现目标是必备的武器。
四、 参考资料
《16位微机原理及接口技术》许文丹主编 西安电子科技出版社
《IBM-PC汇编语言程序设计》沈美明 温冬婵编著 清华大学出版社