| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
10 - канал 2
11 - запрещенная комбинация
Существует два способа чтения текущего значения счетчика
канала.
1. Чтение с остановом счетчика. Для обеспечения стабильных
показаний необходимо приостановить работу канала либо подачей
сигнала низкого уровня на вход GATE (кроме режима 1), либо
блокированием тактовых импульсов.
2. Чтение "на лету". Для считывания счетчика без остановки
процесса счета используется посылка в порт 43h управляющего
- 35 -
слова в режиме "защелкивания" (см. выше). Это управляющее слово
фиксирует текущее значение счетчика и Вы можете считать его
младший байт, а затем старший байт.
E4.2. Таймер на системной плате IBM PCF
В IBM PC каналы таймера имеют следующее назначение.
Канал Назначение Режим
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
0 системные часы (IRQ0) 3, счетчик=0 (65536)
1 запрос для канала 0 ПДП
(регенерация памяти) 2, счетчик=18
2 генератор звука ДД
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Тактовая частота каждого канала равна 1,19318 МГц, т. е.
каждый такт имеет длительность 0,84 мсек. Вход GATE каналов 0 и
1 всегда имеют высокий уровень, поэтому счет на этих каналах
разрешен всегда. Вход GATE канала 2 управляется битом 0 порта PB
интерфейса 8255 (см. гл. 5), связанного с портом 61h.
При начальной загрузке BIOS инициализирует канал 0 для
работы в режиме 3 со счетчиком 0 (т. е. 65536 декрементов на
цикл счета). Поэтому частота системных часов равна
1,19 МГц/65536 = 18.2 Гц
и прерывание IRQ0, связанное с вектором Int 8, происходит 18,2
раз в секунду, т. е. каждые 55 мсек.
Вы можете перепрограммировать канал 0, но тогда
- BIOS не сможет отслеживать текущее время и дату;
- нарушится работа с гибкими дисками, т. к. включение и
выключение их двигателей отсчитывается по текущему времени.
Канал 1 работает в режиме 2 со счетчиком 18, поэтому
регенерация памяти происходит каждые 18 мсек. Перепрог-
раммировать его нельзя, т. к. это приведет к потере данных в
ОЗУ.
Программирование канала 2 описано в следующем пункте.
- 36 -
E4.3. Генерация звукаF
На вход звукогенератора поступает логическое "И" двух
сигналов: выхода 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 - требуемая частота звука).
Пример:
;
; подпрограмма генерации звука
; Вход: АX= частота звука в Гц
;
Sound proc near
push ax ;сохранить регистры
push bx
push dx
mov bx,ax ;частота
mov ax,34DDh
mov dx,12h ;(dx,ax)=1193181
cmp dx,bx ;если bx < 18Гц, то выход
jnb Done ;чтобы избежать переполнения
div bx ;ax=(dx,ax)/bx
mov bx,ax ;счетчик таймера
in al,61h ;порт РВ
or al,3 ;установить биты 0-1
out 61h,al
mov al,00001011b ;управляющее слово таймера:
;канал 2, режим 3, двоичное слово
mov dx,43h
out dx,al ;вывод в регистр режима
dec dx
mov al,bl
out dx,al ;младший байт счетчика
mov al,bh
out dx,al ;старший байт счетчика
Done:
pop dx ;восстановить регистры
pop bx
pop ax
ret
Sound endp
;
- 37 -
;подпрограмма выключения звука
;
No_Sound proc near
push ax
in al,61h ;порт РВ
and al,not 3 ;сброс битов 0-1
out 61h,al
pop ax
ret
No_Sound endp
Для генерации музыки можно использовать следующий алгоритм.
Пусть octave - номер октавы (1, 2, ...); note - номер ноты в
октаве (до=1, до#=2, ..., си=12). Тогда:
f := 32.625;
for i := 1 to oktave do f := 2*f;
for i := 1 to note do f := 1.059463094*f
Sound (round(f));
Второй способ генерации звука состоит в том, чтобы
генерировать звуковые импульсы не выходом таймера, а установкой
и сбросом бита 1 в регистре РВ. Для управления задержками можно
использовать программный цикл, например:
;
; Программа генерации звука
; Вход: N=количество импульсов
; FREQ=длительность импульса
;
in al,61h ;порт РВ
and al,not ;сброс бита 0
mov 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 - частота
звука в Гц, а t - тактовая частота процессора ПЭВМ, то
N=T*f; FREQ=t/(34*f).
Константа 34 объясняется тем, что длительность каждого из
циклов Wait_on и Wait_off приблизительно равна (17*cx) машинных
- 38 -
тактов.
Неудобство этого метода состоит в том, что ЦП полностью
занят генерацией звука - любое прерывание испортит временную
диаграмму звукового сигнала. Однако он обеспечивает точную
подстройку частоты и позволяет создавать несимметричные импульсы
варьированием задержек в циклах Wait_on и Wait_off.
- 39 -
E5. Программируемый периферийный интерфейсF
|
adfun.ru
|
|
|
|