
- •Министерство труда, занятости и трудовых ресурсов Новосибирской области
- •Разработал: а.А.Холин
- •1. Цели:
- •2 Оборудование, аппаратура, материалы, инструменты, документация.
- •3 Форма организации.
- •4 Инструктаж.
- •5 Порядок выполнения.
- •5.2 Изучить программирование канала таймера на примере канала 0- канала системных часов.
- •5.3 Выполнить генерацию звука согласно способу 2.
- •5.4 Генерировать звук согласно способу 3.
- •6. Методические рекомендации.
- •7. Форма отчета.
- •8. Контрольные вопросы.
- •9. Критерии оценки.
5 Порядок выполнения.
5.1 Исследовать генерацию звука через порт 61h (способ 1). 5.1.1 Прочитать и записать в отчет содержимое порта 61h.
5.1.2 В Debug ввести программу генерации звука по способу 1 записывая в регистр DX операнд в старшие 5 битов которого записать Ваш номер по журналу. Например:
- номер по журналу 28; в двоичном коде это 11100; при объединении с 7FF получаем E7FF.
5.1.3 Запустить программу командой G=100 с точкой останова 11A.
5.1.4 Измерить по секундомеру длительность звучания T=.
5.1.5 Рассчитать частоту звука, результаты записать в отчет f=DX/T.
5.2 Изучить программирование канала таймера на примере канала 0- канала системных часов.
5.2.1 В Debug ввести программу установки канала 0 на генерацию меандра.
5.2.2 Изменить в программе начальное значение счетчика на значение из предыдущего задания.
5.2.3 Выполнить введенную программу.
5.2.4 Выйти из отладчика и выполняя команду TIME измерить по секундомеру длительность одной минуты. Результаты занести в отчет. Рассчитать коэффициент ускорения темпа работы системных часов.
5.2.5 Записать программу в отчет с комментариями.
5.3 Выполнить генерацию звука согласно способу 2.
5.3.1. В Debug запрограммировать канал 2 таймера на генерацию меандра при начальном значении счетчика FFFFh.
5.3.2. Определить максимальную частоту генерации звука, последовательно уменьшая в два раза начальное значение счетчика
5.4 Генерировать звук согласно способу 3.
5.4.1 В Debug ввести программу генерации звука по способу 3.
5.4.2 Установить точку останова 11C, запустить программу командой G. Контролировать наличие звука.
5.4.3 Продолжить выполнение программы с той же точкой останова.
5.4.4 Повторять многократно пункт 5.4.3 до зависания системы.
5.4.5 Записать в отчет последнее начальное значение счетчика, которое содержится в регистре ВХ.
5.4.5 Записать в отчет программу с комментариями.
6. Методические рекомендации.
Для реализации системных часов и генерации звука в ПЭВМ IBM PC/AT используется микросхема таймера Intel 8254, содержащая три независимых програмно-управляемых таймерных канала. Канал 0 осуществляет аппаратную поддержку системных часов.
Канал 1 используется для регенерации памяти. Канал 2 связан с динамиком ПЭВМ и может быть использован для генерации звука. На рис. 1 показана программная модель микросхемы таймера.
Основным компонентом каждого канала является вычитающий 16-разрядный счетчик со своей схемой управления. В любой счетчик допускается загрузка его начального значения СЕ с системной шины SD. В любой момент времени можно считать текущее содержимое счетчика без прекращения счета. На программном уровне можно считать, что каждый из каналов имеет 8-разрядный регистр режима РР, который задает используемый код значений счетчика, идентифицирует режим работы счетчика и определяет порядок считывания и загрузки содержимого счетчика.
По входам CLK во все каналы поступают импульсы от кварцевого генератора с частотой f=1.1931817 Мгц. Входы GATE управляют счетом - при логической единице на входе GATE счет разрешен, при логическом нуле - запрещен.
При генерации каналами таймера периодических выходных сигналов на выходах OUT формируются импульсы от кварцевого генератора с частотой F = f / CE,
где f - частота кварцевого генератора, CE - начальное значение i-го счетчика. Так как разрядность счетчика равна 16, минимальная частота на выходе OUT обеспечивается при CE=FFFFh, и ее значение приблизительно равно 18.2 Гц.
С
LK0
CE0 <16>
OUT0
G
ATE0
RSW0
C LKI CE2 <16> OUT1
G
ATE1
RSW1
C LK2 CE2 <16> OUT2
G ATE2 RSW2
SD<0...7> Рис. 1
Доступ к счетчикам и регистрам режимов таймера осуществляется через порты ввода / вывода 40h - 43h. Порты 40h - 42h позволяют обращаться к счетчикам каналов как по записи, так и по считыванию, порт 43h обеспечивает доступ ко всем регистрам режима посредством загрузки управляющего слова RSW. Назначение портов таймера приведено в таблице 1, формат управляющего слова представлен на рисунке 2.
Таблица 1 Назначение портов таймера
-
Номер порта
Назначение
40h
41h
42h
43h
Чтение / Запись счетчика 0
Чтение / Запись счетчика 1
Чтение / Запись счетчика 2
Запись управляющего слова
SC1
SC0 RW1 RW0 M2 M1 M0 BCD
кан.-0 0 0 0-двоичный счет
кан.-1 0 1 1-двоичный-
кан.-2 1 0 десятичный счет
RBC 1 1 0 0 0 - режим 0
0 0 1- режим 1
* 1 0 - режим 2
* 1 1- режим 3
1 0 0 - режим 4
1 0 1 - режим 5
0 0 - код команды
0 1 - чтение / запись младшего байта
1 0 - чтение / запись старшего байта
1 1 - чтение / запись сначала младшего затем
старшего байта
Рис. 2 Формат управляющего слова.
При программировании канала сначала записывается регистр режима путем вывода соответствующего ему управляющего слова в порт 43h, затем значения счетчика.
Для генерации периодических выходных сигналов предназначены два режима :
Режим 2 - импульсный генератор частоты < скважность = CE>,
Режим 3 - генератор меандра < скважность = 2 >.
Установка канала 0 на генерацию меандра с частотой 18.2 Гц поясняется следующим фрагментом программы :
MOV AL , 36 ; значение управляющего слова в AL
OUT 43 , AL
MOV AX , FFFF ; начальное значение счетчика
OUT 40 , AL ; запись младшего байта
MOV AL , AH
OUT 40 , AL ; запись старшего байта
NOP
Для управления звуком используется канал 2 в соответствии с функциональной схемой, представленной на рисунке 3.
RSW 42 0
CE 42
CLK
42 0 Port 43h Port 42h
f=1.1931817 МГц
Port 61h
8254
Bit
0 GATE
42 0 OUT
2
Bit
1
.
Рис. 3 Функциональная схема управления звуком.
Для управления звуком можно использовать следующие способы :
Способ 1. Установить бит 0/порт 61h =0. В этом случае на выходе OUT2 канала 2 установится логическая 1. Генерация осуществляется циклическим изменением значения Бит 1/ порт 61h, не меняя значения других битов. Для этого предварительно необходимо прочитать значение регистра 61h и в регистр AL писать операнды, отличающиеся только значением бита D1. Частота звука зависит от длительности цикла. Следующий фрагмент программы реализует данный способ:
CLI
MOV DX , 07FF
104 : MOV AL , 2E
OUT 61 , AL
MOV CX , FFFF ; ИНТЕРВАЛ Т1
10B : LOOP 10A
MOV AL , 2C
OUT 61 , AL
MOV CX , FFFF ; ИНТЕРВАЛ Т2
114 : LOOP 113
DEC DX
JNZ 103
STI
11A: NOP
Интервалы Т1 и Т2 определяют тембр и частоту звука (смотри рисунок 4), длительность определяет число занесенное в регистр DX.
Т1
Т2 t
Рис. 4
Способ 2. Запрограммировать канал 2 таймера на генерацию меандра. Установить Бит 0/ Порт61h = Бит 1/Порт 61h =1. Тогда частота звука определяется формулой 1.
Способ 3. Так же как и в способе 1, генерация звука производится циклическим изменением значения Бит 1/ Порт 61h, однако данное действие осуществляется пользовательской программой обработки прерываний 1Ch, которое вызывается из обработчика прерываний IRQ 8 от системных часов. Частота звука зависит от частоты сигнала на выходе OUT0 канала 0. Для изучения этого способа можно использовать следующую программу:
100: MOV AX , 0
MOV ES , AX
MOV AX , 12D
CLI
ES:
MOV [70],AX ; установка нового вектора
MOV AX , CS ; прерывания 1Ch
ES:
MOV [72],AX
STI
MOV BX , 7FFF ; в ВХ начальное значение счетчика
117: CALL 11E ; установка нового значения счетчика
SHR BX,1 ;логический сдвиг вправо
11C: JMP 117 ; точка останова
MOV AL , 36 ; Подпрограмма устанавливает начальное
CLI ; значение канала счетчика 0 таймера
OUT 43 , AL ; устанавливаемое значение в регистре ВХ
MOV AX , BX
OUT 40 , AL
MOV AL , AH
OUT 40 , AL
STI
RET
12D IN AL , 61 ; Пользовательская подпрограмма обработки
XOR AL , 02 ; прерываний системных часов
OUT 61 , AL
IRET
Точка останова по адресу 11C.