Добавил:
@requali Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АбрамоваИванов0392_Лаб3.pdf
Скачиваний:
7
Добавлен:
08.09.2024
Размер:
69.38 Кб
Скачать

2. Ход работы

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

2.2.1.

Прочитаем и запишем содержание порта 61h. Для этого воспользуемся командой

CMD>> i61

которая возвращает результат 20h = 00100000b.

2.2.2.

Программа отсутствует в каталоге, поэтому была набрана согласно методическим указаниям

2.2.4.

К сожалению, поскольку программа выполнялась на современном ноутбуке, звук не удалось услышать

2.2.5.

2.2.6.

Увеличить частоту звука в два раза можно уменьшив значение 2000 в регистре CX

в два раза.

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

2.3.1.

Введем в AFD программу установки канала 0 на генерацию меандра, приведенную в методических указаниях (Рис. 2.1), изменив значение счетчика на 1FFFh.

2.3.3.

Сохраним программу, выполнив команду

4

Рис. 2.1. Установка канала 0 на генерацию меандра.

CMD>> W timer.bin, DS:0200, 1000

2.3.4.

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

2.3.5.

Выйдя из AFD в NORTON, измерили по секундомеру длительность одной минуты по временному табло NORTON: 1mnorton 7.5s, значит k = 60/7.5 = 8

При этом теоретически должны были получить

1FFFh = 8191

f = 1.1931812 Мгц, Fi = 1193182/8191 = 145.7

t = 145.7/18.2 8 что совпадает с результатами.

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

2.4.1.

Запрограммируем второй канал на генерацию при начальном значении счетчика

FFFFh.

5

 

 

 

 

Рис. 2.2. Способ 2.

 

 

 

 

 

 

0100: MOV

AL,

B6

 

 

0101: OUT

[43],

AL

 

 

0104: MOV

AX,

FFFF

; начальное значение счетчика

 

0107: OUT

[42],

AL

 

 

0109: MOV

AL,

AH

 

 

010A: OUT

[42],

AL

 

 

010C: IN

AL,

[61]

 

 

010E: OR

AL,

03

 

 

0110: OUT

[61],

AL

; включение звука

 

0112: IN

AL,

[61]

 

 

0114: AND

AL,

FC

 

 

0116: OUT

[61],

AL

; выключение звука

 

 

 

 

 

 

 

 

 

 

2.4.2.

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

20h, то есть максимальная частота составляет (20h ·2 = 40h = 64) fmax = 1193182/64 = 18643.47 Гц.

6

2.5. Генерация звука согласно способу 3

Программа не найдена, поэтому введена вручную.

2.5.1.

 

 

 

 

 

 

0100: MOV

AX,

0

 

 

0103: MOV

ES,

AX

 

 

0105: MOV

AX,

12D

 

 

0108: CLI

 

 

 

 

0109: MOV

ES:[70], AX

 

 

010D: MOV

AX,

CS

 

 

010F: MOV

ES:[72], AX

 

 

0113: STI

 

 

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

 

; генерация звука

 

 

 

0114: MOV

BX,

FFFF ; в ВХ начальное значение счетчика 7FFFF

 

0117: CALL

11E

 

; установка нового значения счетчика

 

0118: SHR

BX,

1

 

 

0119: JMP

117

 

 

 

011E: MOV

AL,

36

; Подпрограмма устанавливает начальное значение

 

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

 

0120: CLI

 

 

 

 

0121: OUT

[43],

AL

; устанавливаемое значение в регистре ВХ

 

0123: MOV

AX,

BX

 

 

0125: OUT

[40],

AL

 

 

0127: MOV

AL,

AH

 

 

0129: OUT

[40],

AL

 

 

012B: STI

 

 

 

 

012C: RET

 

 

 

 

; блок кода обработчика

 

 

012D: IN

AL,

[61]

; Пользовательская подпрограмма обработки

 

012F: XOR

AL,

02

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

 

0131: OUT

[61],

AL

 

 

0133: IRET

 

 

 

 

 

 

 

 

7

Благодаря помощи со стороны было выяснено, что приведенный код не отрабатывает корректно, если оставить в обработчике строку IN AL, [61]. Таким образом, установив точку перехода в программе на следующую за проблемной строкой позицию звук по-

явился:

 

0105: MOV

AX, 12F

 

 

 

 

2.5.2.

Программа запускалась пошагово для более тонкого контроля за изменением часто-

ты.

2.5.4.

Программа не зависала ни в одной из версий.

2.5.5.

Последнее значение счетчика, которое содержится в регистре BX = 0000h.

Причем частота при BX = 0000h вернулась к примерно той же, что и при BX = FFFFh.

Рис. 2.3. Конечное значение BX.

8