Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10_МУ10_Программирование и тестирование системн...doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
123.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.

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