用汇编语言设计接口程序

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:13:55
一,原理
PC机的主机箱上装有一只小喇叭,由定时器8253和并行接口芯片8255控制其发音,其电路如下:

8253 DRIVER
1.9318MHZ CLK
OUT2
8255

PB0 GATE2
PB1

8253用定时器2来产生896Hz的音频信号使喇叭发声,我们可以改变定时器2的计数值来改变声音频率,通过发声的延时程序来获得时间长短不同的声音,于是就可以通过编程;来获得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。如果再把音符1,2,3,4,
. . .
5,6,7,1,2,3,••••••与数字键1,2,3,4,5,6,7,8,9,••••••对应起来,就可以把计算机变成电子琴。
以下给出有关资料:

1.音符 1, 2, 3, 4 ,5 ,6, 7, 1, 2, 3, 4, 5, 6, 7, ⅰ

频率 131 147 165 175 196 220 247 262 294 330 349 392 440 494 523

2.计数值计算公式
计数值=1.19318MHz(时钟频率)/ 给定频率
=1234DCH / 给定频率

8253道地地定时器通道2的端口地址:42H(存放计数值,先送低位字节,后送高位字节)
命令寄

;下面是sound.asm通用发声程序
public soundf
cseg segment para'code'
assume cs:cseg
soundf proc far
push ax
push bx
push cx
push dx
push di

mov al,0b6h
out 43h,al
mov dx,12h
mov ax,348ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1: mov cx,4815
call waitf
delay: loop delay
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp

waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret<