Программирование звукового канала таймера. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование звукового канала таймера.



 

В прграммирование звука указывают 2 микросхемы - таймер и ЛПА, управляющей клавиатурой и динамиком.

 


Таймер  

 

Микросхема таймера работает независимо от процессора (и параллельно с ним) от собственного генератора, вырабатывающего сигналы с частотой 1,19318 Мгц. Таймер имеет 3 независимых канала. Для управления режимом каналов используется регистр команд (порт 43h). Каждый канал включает счётчик передающий импульы от ГТИ в регистр-фиксатор, в которой программно заносится число, определяющее коэффициент пересчета. Фиксаторы каналов таймера адресуются через порты 40h, 41h, 42h.

При включении компьютера в фиксатор канала 0 записывается число 65535(FFFFh)(максимально возможное число), в результате чего сигналы на входе канала 0 имеют частоту 18.2 1/с. Эти сигналы возбуждают прерывания с вектором 08h, который определяется программой,осуществляя отсчёт текущего времени.

Канал 2 связан с динамиком и используется для генерации звука. Изменяя содержимое фиксатора этого канала можно изменять частоту сигналов, поступающих на динамик от 18,2Гц до 1,19Мгц.

Реально для возбуждения звука можно использовать частоты приблизительно до 10Кгц.

ППА имеет следующие порты 60h-порт А

61h-порт В

62h-порт С

Порт А используется для приёма кодов, нажимаемых на клавиатуре, порты В и С для управления клавиатурой и таймером и для хранения информации о конфигурации компьютера. Микросхемы ППА используются в IBM PC и CP/XT. В PC/AT и PS/2 такой микросхемы нет, однако приём с клавиатуры и управление таймером осуществляется через порты с теми же адресами.

Бит 0 порта 61 управляет включением и выклячением канала 2 таймера. Если бит 0 в 1, то на выходе канала действует сигнал заданой частоты, при сбросе бита 0- сигналы отсутствуют. Бит 1 управляет током, текущим через динамик. Т.е. прекратить работу динамика можно либо сбросив в 0 бит 0 либо бит 1.

Программирование любого канала таймера осуществляется путём пересылки кода в регистр команд(43h).

Формат 7 6 5 4 3 2 1 0

               

канал код режим 0 – дв. сч.

операции 1 –дв. дес.

 

Режим - разовый и периодический с различной скважностью.

Для возбуждения звука используется режим 011- периодическая генерация прямоугольных сигналов со скважностью 2. В битах 4 и 5 записывается способ загрузки в фиксатор константы. Обычно используется код 11, что позволяет загрузить в фиксатор 16-ти разрядную константу пересчёта 2-мя последовательными командами. Сначала младшие байты, потом старший. Т.о. управляющее слово оказывается равным 10110110В или В6h.

 

 

mov AL,0B6h;управляющее слово

out 43h,AL;в регистр команд

;установим частоту канала 2 таймера

mov AX, 11930;1193000Гц 11930=100Гц

out 42h,AL;младший байт константы в порт

movAL,Ah

out 42h,AL;старший байт константы в порт

;включим динамик и разрешим разрешим работу таймера

in AL,61h;

or AL,3;установим биты 0 и 1

out 61h,AL;

;После загрузки выключим динамик и запретим таймер звука

and AL, 11111100B;сбросим биты 0 и1

out 61h,AL

 

На любом этапе вывода звука можно изменять его частоту (эффект летящей бомбы)

;режим таймера

mov AL,0B6h

out 43h,AL

;вкл. динамик

in AL,61h

or AL,3

out 61h,AL

;изменяем частоту в процессе звучания

mov CX,200;число шагов

music: mov AX,tone

out 42h,AL

mov AL,AH

out 42h,AL

snb tone,30;изменим константу пересчёта задержки

loop music

;выключить динамик

in AL,61h

and AL,0FCh

out 61h,AL

tone dw 5000

 

Таймер допускает повторную загрузку фиксатора после того, как однозначно установлен режим его работы.

 

Загр.

2б. знак (int и другие) ® AX

4б (long, float,..) ® AX, BX

8б (double) ® AX, BX, CX, DX

 


Интерфейс с Си

 

extern caps();

main ()

{

char c;

for(c=’a’; c<=’z’; c++) caps(c);

c = caps (‘z’+1);

caps (c);

caps (‘\n’+32);

}

func segment

public caps

caps proc near

push bp

mov bp,sp

mov DL,[BP]+4;взять аргумент

sub DL,32;перевести в заглавные

push AX

mov AH,2

int 21h

pop AX

pop BP

ret 2

caps endp

func ends

end

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 420; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.88.130 (0.01 с.)