Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Программирование портов. Звук.

Управление аппаратурой компьютера осуществляется через управляющие регистры этой аппаратуры. Каждый из регистров имеет свой адрес от 0000h до FFFFh . Этот адрес или номер называется портом и программирование аппаратуры путем непосредственного обращения к портам называется программирование через порты. Обращение к портам осуществляется с помощью 2-х команд.

In - ввод из порта

Out - вывод в порт

Рассмотрим программирование через порты на примере управления динамиком компьютера.

П

1

рограммирование звука в простейшем случае осуществляется путём периодического включения и выключения тока, протекающего через динамик, по командам программы. Если частота переключения лежит в пределах 16-16Кгц- мы слышим звуковой тон соответствующей частоты. Для управления током динамика служит бит 1 порта с номером 61h.

61h

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

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

Cli ; запрет асинхронного прерыванмя

in AL,61h ; ввод содержимого порта 61h

mov CX,4000 ; длительность звукового сигнала

begin:

push CX ; сохранить служебный цикл

or AL,2 ; установим бит 1

out 61h,AL ; выведем в порт , включив динамик

mov CX,1000 ; пауза, в течении которой через

loop $ ; динамик течёт ток

and AL,11111101B ; сбросим бит 1

out 61h,AL ; выведем в порт, выключив динамик

mov CX,1000 ; организуем паузу, в течении которой

loop $ ; через динамик не течёт ток

pop CX ; восстановим служебный цикл

loop begin ; выводим

sti ; разрешим прерывание

cli – в действительности просто запретить прерывание только от таймера, который прерывая 18 раз в сек будут прерывать генерацию тока и искажённость звука . Для выборочного запр. прерывания надо программировать контролер, запрещающий все прерывания. Поместить данные из порта можно только в регистр AL или AX. Номер порта задаётся в команде в виде числа, если номер не превышает FFh или поместить в регистр DX. В последнем случае используется команда in AL,DX .

Чтение из порта необходимо, т.к. нельзя изменять отдельные биты.

Команда loop $ передаёт управление сама на себя, т.е.label1: loop label1.

Команда and сбрасывает бит. Ток в динамике выключается, образуя второй полупериод звукового колебания. Частота и длительность звукового тока в этом случае зависит от скорости работы процессора. Для того чтобы не зависеть от CPU используется следующая история.

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

В прграммирование звука указывают 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]