Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программирование таймера и динамика

Генерацию звука через системный динамик ЭВМ реализуют, как правило, одним из двух способов – программированием порта РВ интерфейса 8255 вручную или при помощи программируемого таймера 8253. Рассмотрим оба способа.

Для задания временных интервалов и формирования сигналов с различными временными параметрами в ЭВМ PC/XT/АТ применяется программируемый таймер 8253 (отечественный аналог КР580ВН53), в AT – 8254. В состав таймера входят: буфер шины данных, схема управления вводом-выводом и три независимых канала, каждый из которых содержит регистр режима, схему управления каналом, буфер и 16-разрядный счетчик.

Программирование канала осуществляется путем вывода управляющих слов в регистр режима каналов и начального значения в его счетчики. Каждый канал имеет управляющий вход GATE и выход OUT и может работать в одном из следующих шести режимов:

 

Режим 0 (прерывание терминального счета).

Режим 1 (ждущий мультивибратор).

Режим 2 (генератор частоты).

Режим 3 (генератор меандра).

Режим 4 (счетчик событий).

Режим 5 (счетчик событий с автозагрузкой).

 

В ЭВМ PC таймер имеет базовый адрес 40h и следующие программируемые регистры:

Адрес Операция Назначение
40h Запись Загрузка счетчика канала 0
Чтение Чтение счетчика канала 0
41h Запись Загрузка счетчика канала 1
Чтение Чтение счетчика канала 1
42h Запись Загрузка счетчика канала 2
Чтение Чтение счетчика канала 2
43h Запись Запись управляющего слова в регистр режима канала

Существует два способа чтения текущего значения счетчика канала.

1. Чтение с остановом счетчика. Для обеспечения стабильных показаний необходимо приостановить работу канала либо подачей сигнала низкого уровня на вход GATE (кроме режима 1), либо блокированием тактовых импульсов.

2. Чтение «на лету». Для считывания счетчика без остановки процесса счета используется посылка в порт 43h управляющего слова в режиме «защелкивания». Это управляющее слово фиксирует текущее значение счетчика и дает возможность считать его младший байт, а затем старший байт.

В IBM PC каналы таймера 8253 имеют следующее назначение:

Канал Назначение Режим
  системные часы (IRQO) 3, счетчик=0 (65536)
  запрос для канала 0 ПДП регенерация памяти) 2, счетчик=18
  генератор звука  

Тактовая частота каждого канала равна 1, 19318 МГц, т. е. каждый такт имеет длительность 0, 84 мсек. Вход GATE каналов 0 и 1 всегда имеют высокий уровень, поэтому счет на этих каналах разрешен всегда. Вход GATE канала 2 управляется битом 0 порта РВ интерфейса 8255, связанного с портом 61h.

При начальной загрузке BIOS инициализирует канал 0 для работы в режиме 3 со счетчиком 0 (т. е. 65536 декрементов на цикл счета). Поэтому частота системных часов равна 1, 19 МГц/65536 = 18.2 Гц.

Прерывание IRQ0, связанное с вектором Int 8, происходит также 18, 2 раз в секунду, т. е. каждые 55 мсек.

Перепрограммирование канала 0, ведет к следующим последствиям:

• BIOS теряет возможность отслеживать текущее время и дату;

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

Канал 1 работает в режиме 2 со счетчиком 18, поэтому регенерация динамической памяти происходит каждые 18 м/сек. Перепрограммировать его нельзя, так как это приведет к потере данных в ОЗУ.

Канал 2 используется для генерации звука следующим образом.

Так как на вход звукогенератора поступает логическое «И» двух сигналов: выхода OUT 2 – го канала таймера и содержимого бита 1 порта РВ интерфейса 8255, то поэтому простейший способ генерации звука состоит в программировании канала 2 таймера так, чтобы он выдавал прямоугольный импульс заданной частоты, лежащий в звуковом диапазоне (20 Гц – 20 КГц). Для этого следует использовать режим таймера 3 с подходящим начальным значением счетчика. Если затем установить биты 0 и 1 порта РВ, то импульс начнет поступать на вход звукогенератора (бит 0 – это вход GATE канала 2, разрешающий счет, а бит 1 – разрешение выдачи выхода OUT на вход звукогенератора). Для выключения звука достаточно сбросить биты 0 – 1 в РВ. Преимущество этого метода состоит в том, что, запустив генерацию звука, ЦП может выполнять другие действия. Значение счетчика 2 – го канала вычисляется по формуле n=1193181/f=1234DDh/f (1193181 – тактовая частота таймера в Гц, f – требуемая частота звука).

Второй способ генерации звука состоит в том, чтобы генерировать звуковые импульсы не выходом таймера, а установкой и сбросом бита 1 в регистре РВ, например, по следующей схеме:

Программа генерации звука;

Вход: N= количество импульсов;

FREQ= длительность импульса.

 


In al, 61h;портРВ

and al, not

mov al, not;сброс бита О dx, N

Repeat: or al, 2

out 61h, al;установить бит 1

mov cx, FREQ

Wait_On:

loop Wait_On

and al, not 2;сбросить бит 1

out 61h, al

mov cx, FREQ

Wait_Off:

loop Wait_Off

dec dx

jnz Repeat


 

Программирование этого способа основано на следующих формулах. Если
Т – длительность звучания в сек, f – частота звука в Гц, at – тактовая частота процессора ПЭВМ, то

N = Tf; FREQ = t/(34f).

Константа 34 объясняется тем, что длительность каждого из циклов Wait_on и Wait_off приблизительно равна (17сх) машинных тактов.

Неудобство этого метода состоит в том, что ЦП полностью занят генерацией звука – любое прерывание испортит временную диаграмму звукового сигнала. Однако он обеспечивает точную подстройку частоты и позволяет создавать несимметричные импульсы варьированием задержек в циклах Wait on и Wait off.

1. Пример программирования динамика компьютера.

В следующей задаче требуется продемонстрировать возможности аппаратных средств ЭВМ для генерации звука через системный динамик, используя порты программируемого таймера 42h и 43h, а также порта РВ микросхемы интерфейса 8255.

По заданию, необходимо написать программу, генерирующую звуковые сигналы по нажатию клавиш клавиатуры и прекращающую генерацию звука после их отпускания. Выход из программы по клавише Escape. Частота сигналов должна быть пропорциональна сканкодам клавиш.

2. Описание фрагментов программы.

Программа генерации звука состоит из двух подпрограмм: включение звука (программирование таймера), выключение звука (сброс битов 0 – 1 порта интерфейса 8255) и цикла сканирования порта клавиатуры.

1. Подпрограмма генерации звука (Sound).

Работает следующим образом: на вход подпрограммы поступает скан-код нажатой клавиши, значение которого умножается на 20 с целью получить значение счетчика, таким образом, чтобы генерирование сигналов происходило в звуковом диапазоне. Далее устанавливается 0 – 1 порта 61h (бит 0 – вход GATE канала 2, разрешающий счет, бит 1 – разрешение выдачи выхода OUT на вход звукогенератора). Далее формируется управляющее слово таймера, программирующее его работу по каналу 2 в режиме 3, после занесения управляющего слова таймера в порт 43h, туда же побайтно заносится значение счетчика. После этого начинается генерация звука.

2. Подпрограмма выключения звука (No_Sound). Для выключения звука сбрасываются(обнуляются) биты 0 – 1 порта 61h, что запрещает подачу сигнала на вход звукогенератора и закрывает вход GATE канала 2.

3. Цикл сканирования порта клавиатуры.

В цикле сканирования порта клавиатуры происходит считывание скан-кода клавиши по порту 61h, сравнение его со скан-кодом клавиши ESC. При положительном результате сравнения происходит выход из программы. При отрицательном – происходит сравнение старшего бита скан-кода для определения, нажата ли еще клавиша или уже отпущена.

 


Code segment

ORG 100H

assume CS: Code

Begin:

in al, 61h

or al, 40h

out 61h, al; Установка запрета

Cycle:;клавиатурного прерывания

in al, 60h

клавиши (РА)

cmp al, 01;считывание сканкода клавиши

je Quit

test al, 1OOOOOOOb;"Это Escape?";"Да", - на;выход

jnz Unpressed

;"Клавиша отпущена

call Sound;"Да", - выключить звук

jmp Cycl;"Нет", - включить звук

Unpressed:

call No_Sound;Отключаем звук (на всякий

jmp Cycle

Quit:;Процедура выхода

call No Sound;Разрешение клавиатурного

;цикл опроса клавиатуры

in al, 61h;Процедура отключения прерывания

and al, not 40h

out 61h, al;порт РВ

ret;сброс битов 0-1

No Sound proc near

 

push ax

in al, 61h

and al, not 3

out 61h, al

pop ax

ret

No_Sound endp

 

Sound proc near

push ax

push bx

push dx

xor ah, ah;Процедура включения звука

mov dl, 2Oh;получить значение счетчика в

mul dl;приемлемом диапазоне частот

mov bx, ax;счетчик таймера

in al, 61h;порт РВ

or al, 3

out 61h, al;установить бит 0-1

mov al, OOOOlOllb;управляющее слово таймера:

mov dx, 43h;канал 2, режим 3.

out dx, al

dec dx

mov al, bl;вывод в регистр режима

Done: Sound code

out dx, al

mov al, bh

out dx, al

pop dx

pop bx

pop ax

ret

endp

ends

END Begin


<== предыдущая лекция | следующая лекция ==>
End start | Работа с файлами
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 2137; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.033 сек.