Скачиваний:
37
Добавлен:
01.05.2014
Размер:
53.76 Кб
Скачать

CПГЭТУ

кафедра АиПУ

ЛАБОРАТОРНАЯ РАБОТА N 3

“Программирование системных часов и управление звуком”

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

1996 год

ЦЕЛЬ РАБОТЫ :

1. Изучить способы программирования системных часов ПЭВМ.

2. Освоить программное управление звуком.

ОБЩИЕ СВЕДЕНИЯ :

Для реализации системных часов и генерации звука в ПЭВМ IBM PC/AT используется микросхема таймера Intel 8254, содержащая три независимых програмно-управляемых таймерных канала. Канал 0 осуществляет аппаратную поддержку системных часов.

Канал 1 используется для регенерации памяти. Канал 2 связан с динамикам ПЭВМ и может быть использован для генерации звука. На рис. 1 показана программная модель микросхемы таймера.

Основным компонентом каждого канала является вычитающий 16-разрядный счетчик со своей схемой управления. В любой счетчик допускается загрузка его начального значения СЕ с системной шины SD. В любой момент времени можно считать текущее содержимое счетчика без прекращения счета. На программном уровне можно считать, что каждый из каналов имеет 8-разрядный регистр режима РР, который задает используемый код значений счетчика, идентифицирует режим работы счетчика и определяет порядок считывания и загрузки содержимого счетчика.

По входам CLK во все каналы поступают импульсы от кварцевого генератора с частотой f=1.1931817 Мгц. Входы GATE управляют счетом - при логической единице на входе GATE счет разрешен, при логическом нуле - запрещен.

При генерации каналами таймера периодических выходных сигналов на выходах OUT формируются импульсы от кварцевого генератора с частотой F 4i 0 = f / CE 4i 0,

где f - частота кварцевого генератора, CE 4i 0 - начальное значение i-го счетчика. Так как разрядность счетчика равна 16, минимальная частота на выходе OUT 4i 0 обеспечивается при CE 4i 0=FFFFh, и ее значение приблизительно равно 18.2 Гц.

СLK0 CE0 <16> OUT0

GATE0 RSW0

CLKI CE2 <16> OUT1

GATE1 RSW1

CLK2 CE2 <16> OUT2

GATE2 RSW2

SD<0...7> Рис. 1

Доступ к счетчикам и регистрам режимов таймера осуществляется через порты ввода / вывода 40h - 43h. Порты 40h - 42h позволяют обращаться к счетчикам каналов как по записи, так и по считыванию, порт 43h обеспечивает доступ ко всем регистрам режима посредством загрузки управляющего слова RSW. Назначение портов таймера приведено в таблице 1, формат управляющего слова представлен на рисунке 2.

Номер порта

Назначение

40h

41h

42h

43h

Чтение / Запись счетчика 0

Чтение / Запись счетчика 1

Чтение / Запись счетчика 2

Запись управляющего слова

Табл. 1.

Формат управляющего слова :

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 , FFFFh ; начальное значение счетчика

OUT [40] , AL ; запись младшего байта

OUT [40] , AH ; запись старшего байта

Для управления звуком используется канал 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

Bit 1 & к динамику

.

.

Bit 7 Рис. 3

Для управления звуком можно использовать следующие способы :

Способ 1. Установить бит 0/порт 61h =0. В этом случае на выходе OUT2 канала 2 установится логическая 1. Генерация осуществляется циклическим изменением значения Бит 1/ порт 61h. Частота звука зависит от длительности цикла. Следующий фрагмент программы реализует данный способ :

MOV DX , 100

103 : MOV AL , 32

OUT [61] , AL

MOV CX , 2000 ; ИНТЕРВАЛ Т1

10A : LOOP 10A

MOV AL , 30

OUT [61] , AL

MOV CX , 2000 ; ИНТЕРВАЛ Т2

113 : LOOP 113

DEC DX

JNZ 103

Интервалы Т1 и Т2 определяют тембр и частоту звука (смотри рисунок 4).

Т1 Т2 t

Рис. 4

Способ 2. Запрограммировать канал 2 таймера на генерацию меандра. Установить Бит 0/ Порт61h = Бит 1/Порт 61h =1. Тогда частота звука определяется формулой 1.

Способ 3. Так же как и в способе 1, генерация звука производится циклическим изменением значения Бит 1/ Порт 61h, однако данное действие осуществляется пользовательской программой обработки прерываний 1Ch от системных часов. Частота звука зависит от частоты сигнала на выходе OUT0 канала 0. Для изучения этого способа можно использовать следующую программу:

MOV AX , 0

MOV ES , AX

MOV AX , 12D

CLI

MOV ES:[70],AX ; установка нового вектора

MOV AX , CS ; прерывания 1Ch

MOV ES:[72],AX

STI

MOV BX , 7FFF ; в ВХ начальное значение счетчика

117: CALL 11E ; установка нового значения счетчика

SHR BX , 1 ; логический сдвиг вправо

JMP 117 ; В1 - точка останова

11E: MOV AL , 36 ; Подпрограмма устанавливает начальное

CLI ; значение канала счетчика 0 таймера

OUT [43] , AL ; устанавливаемое значение в регистре ВХ

MOV AX , BX

OUT [40] , AL

MOV AL , AH

OUT [40] , AL

STI

RET

12B : IN AL , [61] ; Пользовательская подпрограмма обработки

XOR AL , 02 ; прерываний системных часов

OUT [61] , AL

IRET

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ :

1. Исследовать генерацию звука по способу 1.

1.1. Прочитать и записать в отчет содержимое порта 61h.

1.2. Из AFD загрузить программу lab3a_1.bin и сверить ее с программой на странице 5.

1.3. Установить точку останова по адресу программы NOP.

1.4. Запустить программу командой G.

1.5. Измерить по секундомеру длительность звучания.

1.6. Рассчитать частоту звука, результаты записать в отчет.

1.7. Увеличить частоту звука в два раза, повторить измерение длительности звучания и выполнить расчет фактической частоты звука.

2. Изучить программирование канала таймера на примере канала 0- канала системных часов.

2.1. В AFD ввести программу установки канала 0 на генерацию меандра, приведенную на странице 5.

2.2. Изменить в программе начальное значение счетчика на значение 1FFFh.

2.3. Сохранить программу в файле с именем timer.bin.

2.4. Выполнить введенную программу.

2.5. Выйти из AFD в NORTON, измерить по секундомеру длительность одной минуты по временному табло NORTON. Результаты занести в отчет. Рассчитать коэффициент ускорения темпа работы системных часов.

3. Выполнить генерацию звука согласно способу 2.

3.1. В AFD запрограммировать канал 2 таймера на генерацию меандра при начальном значении счетчика FFFFh.

3.2. Определить максимальную частоту генерации звука, последовательно уменьшая в два раза начальное значение счетчика.

4. Генерировать звук согласно способу 3.

4.1. Из AFD запустить программу lab3a_2.bin и сверить ее с программой на странице 6.

4.2. Установить точку останова В1, запустить программу командой G. Контролировать наличие звука.

4.3. Продолжить выполнение программы ( нажимая F2 ).

4.4. Повторять многократно пункт 4.3 до зависания системы.

4.5. Записать в отчет последнее начальное значение счетчика, которое содержится в регистре ВХ.

ОФОРМЛЕНИЕ РЕЗУЛЬТАТОВ :

Отчет должен содержать :

1. Структурную схему программной модели канала таймера, правила программирования канала, форматы управляющих команд.

2. Описание способа 1 генерации звука и расчет частоты звука по результатам измерений.

3. Расчет коэффициента ускорения темпа работы системных часов.

4. Функциональную схему системы генерации звука по способу 2 и определение минимальной и максимальной частоты генерации звука.

5. Блок-схему алгоритма генерации звука по способу 3 и соотношение между начальным

значением счетчика канала 0 таймера и частотой генерации звука.

Соседние файлы в папке Лабораторные работы