⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8253.txt

📁 这是一个接口技术的一个题目和一些资料
💻 TXT
字号:
一,原理 
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(存放计数值,先送低位字节,后送高位字节) 
命令寄存器地址:43H 
4.编程参考: 
1) 计算计数值程序段: 
MOV DI, 给定频率 
MOV DX, 12H 
MOV AX, 34DCH 
DIV DI 
AX中即为计数值。 
2) 打开扬声器发声,8255PB0,PBI送出高电平: 
IN AL 61H 
OR AL 3 
OUT 61H AL 
3)关闭扬声器,停止发声: 
IN AL 61H 
OR AL 0FCH 
OUT 61H AL 
二.实验内容: 
1. 设计程序让微机演奏一段简单乐曲 
2. 利用DOS的键盘管理功能。将微机变为一个具有简单功能的电子琴(选作)。


下面是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 
waitf endp 
cseg ends 
end 
;下面是music.asm一个示例乐曲可以在数据段该成别的 
extrn soundf:far 
stack segment para stack 'stack' 
db 64 dup('stack...') 
stack ends 

dseg segment para 'data' 
mus_freq dw 330,294,262,294,3 dup(330) 
dw 3 dup(294),330,392,392 
dw 330,294,262,294,4 dup(330) 
dw 294,294,330,294,262,-1 
mus_time dw 6 dup(25),50 
dw 2 dup(25,25,50) 
dw 12 dup(25),100 
dseg ends 

cseg segment para 'code' 
assume cs:cseg,ss:stack,ds:dseg 
music proc far 
mov ax,dseg 
mov ds,ax 
lea si,mus_freq 
lea bp,ds:mus_time 
freq: 
mov di,[si] 
cmp di,-1 
je end_mus 
mov bx,ds:[bp] 
call soundf 
add si,2 
jmp freq 
end_mus: 
mov ax,4c00h 
int 21h 
music endp 
cseg ends 
end music 
;下面是piano键盘数字键变成电子琴 
extrn soundf:far 
stack segment para stack 'stack' 
db 64 dup('stack...') 
stack ends 

dseg segment para 'data' 
table dw 262,294,330,349,392,440,494,523 
dseg ends 

cseg segment para 'code' 
assume cs:cseg,ds:dseg,ss:stack 
main proc far 
mov ax,dseg 
mov ds,ax 
new_note: 
mov ah,0 
int 16h 
cmp al,0dh 
je exit 
mov bx,offset table 
cmp al,'1' 
jb new_note 
and ax,0fh 
shl ax,1 
sub ax,2 
mov si,ax 
mov di,[bx][si] 
mov bx,10 
call soundf 
jmp new_note 
exit: 
mov ax,4c00h 
int 21h 
main endp 
cseg ends 
end main 


///////////////////////
cseg   segment   
            assume   cs:cseg,   ds:cseg   
            org         100h   
  start:   
            mov   word   ptr   [a+16],   1760   
            mov   word   ptr   [a+26],   208   
            mov   word   ptr   [a+78],   185   
  b:   
            mov   ah,   07   
            int   21h   
            cmp   al,   1bh   
            jz     i   
            cmp   al,   20h   
            jz     b   
            cmp   al,   96   
            jng   c   
            sub   al,   32   
  c:   
            shl   al,   1   
            cbw   
            mov   ah,   0   
            mov   bx,   ax   
            sub   ax,   ax                   ;   mov   ax,   0   
            mov   dx,   12h   
            div   word   ptr[bx+a]   
            mov   bx,   ax   
            mov   al,   0b6h   
            out   43h   ,al   
            mov   al,   bl                   ;   mov   ax,   bx   
            out   42h,   al   
            mov   al,   bh                   ;   mov   al,   ah   
            out   42h,   al   
            in     al,   61h   
            or     al,   3   
            out   61h,   al   
            mov   bx,   0ffffh   
  d:   
            mov   cx,   0ffh   
  e:   
            loop   e   
  f:   
            mov   ah,   0bh   
            int   21h   
            cmp   al,   00   
            jnz   g   
            dec   bx   
            jnz   d   
  g:   
            in     al,   61h   
            and   al,   0fch   
            out   61h,   al   
            mov   cx,   0ffffh   
  h:   
            loop   h   
            jmp     b   
  i:   
            mov   ah,   4ch   
            int   21h   
    
  ;----<data>-------------   
  a         dw   44   dup(60)   
            dw   69,   1388,   78,   85,   1320,   524,   588,   660,   694,   784,   880,   988,   1048   
            dw   1176,   170,   170,   69,   1568,   78,   85,   588,   131,   98,   83,   165,   330,   174   
            dw   196,   20,   278,   247,   139,   156,   124,   110,   312,   338,   262,   347,   147   
            dw   392,   494,   87,   294,   74,   440,   65,   370,   467,   416,   880,   1388,   509   
  cseg   ends   
            end   start  



/////////////////////////////////////
简介:用开关模拟电子琴发声 1、以8255接八个开关K1~K8,做电子琴按键输入 2、以8253控制扬声器,拨动不同的开关,发出相应的音阶 要求:K1-----静音 K2-----发si的音493Hz K3-----发la的音440H ...
用开关模拟电子琴发声
1、以8255接八个开关K1~K8,做电子琴按键输入
2、以8253控制扬声器,拨动不同的开关,发出相应的音阶
要求:K1-----静音
K2-----发si的音493Hz
K3-----发la的音440Hz
K4-----发sol的音392Hz
K5-----发fa的音349Hz
K6-----发mi的音329Hz
K7-----发re的音293Hz
K8-----发do的音261Hz
二、方案的论证比较:
此课程设计是用开关模拟电子琴发声。
硬件方面:
采用并口8255A接8个开关K1—K8,利用8255A方式0,端口A输入方式,即AL=10010000B,可以将开关的量输入到CPU中,利用8个开关做电子琴的8个按键。
驱动控制扬声器利用8253与8255A共同执行(见硬件电路图)。利用8255A的PB0、PB1控制扬声器的开启、关闭。利用定时器8253驱动发声,CPU通过对8253通道2(端口地址42H)进行编程,利用8253方式3以不同的脉冲频率产生不同的输出方波,方波信号通过滤波器、功率放大器使扬声器发声。
软件方面:
利用汇编语言对接口进行编程控制。程序模块主要包括8255A、8253的初始化、开关量的输入、扬声器的开启、关闭及程序的退出。在使8253的初值计数与频率相对应有两种方法,一是利用表的操作,但这种操作不太容易实现,硬件的连接也比较麻烦,易出错;所以我采用的是比较跳转的方式, 比较简单明了,容易理解。程序中的模块关系见程序流程图。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -