Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УТС 7 семестр / ЛР3 с защитой

.doc
Скачиваний:
2
Добавлен:
10.06.2023
Размер:
434.69 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра АПУ

отчет

по лабораторной работе №3

по дисциплине «Системное программирование»

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

Студент гр. 8391

Гоглев А.А.

Студент гр. 8391

Шушков Д.А.

Студент гр. 8391

Маликов А.А.

Преподаватель

Кораблев Ю.А.

Санкт-Петербург

2021

Цель работы

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

Выполнение работы

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

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. Прочитать и записать в отчет содержимое порта 61h.

20h = 00100000b

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

Так как программы lab3a_1.bin не было найдено, пришлось вводить программу вручную.

Рис. 1.

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

Рис. 2.

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

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

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

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

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

Чтобы увеличить частоту звука, нужно уменьшить значение в регистре CX в два раза, т.е. в строке 110 заменить 2000 на 1000.

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

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

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

Рис. 3.

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

Рис. 4.

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

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

Рис. 5.

1 мин (в NORTON) = 7.5 сек.

Коэффициент ускорения = 60 / 7.5 = 8

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

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

Рис. 6.

MOV AL, B6 ; значение управляющего слова в AL

OUT [43], AL

MOV AX, FFFF ; начальное значение счетчика

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

MOV AL, AH

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

IN AL, [61]

OR AL, 03

OUT [61], AL ; на этой строчке звук должен включиться и будет звучать, пока не выключим

IN AL, [61]

AND AL, FC

OUT [61], AL ; на этой строчке звук выключится

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

Максимальная частота генерации звука достигается при значении счетчика 003F и составляет 18636.8 Гц. При последующем увеличении значения счетчика звук не слышен и это объясняется тем, что среднестатистический человек способен воспринимать органами слуха акустические волны частотой до 20 КГц.

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

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

Так как программы lab3a_2.bin не было найдено, пришлось вводить программу вручную.

Рис. 7.

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 ; точка останова

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

CLI

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

Принцип работы: устанавливается пользовательский обработчик прерывания, который срабатывает 36.4 раза в секунду и включает/отключает работу динамиков. Частота работы таймера канала 0 нарастает по причине логического сдвига вправо значения регистра BX (7FFF, 3FFF, и т.д.).

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

Рис. 8.

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

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

Зависания программы не происходили.

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

ВX = 0000h. При этом звук был такой же (или похож), как и при BX = FFFFh.

Вывод.

В результате выполнения данной лабораторной работы были изучены способы программирования системных часов ПЭВМ, а также освоено программное управление звуком. Были подробно разобраны три независимых программно-управляемых таймерных канала и способы управления звуком.

Выполнение задания на защиту.

Сгенерировать через паузу два звуковых сигнала. Длительность второго в 2 раза больше первого. Реализуем задание при помощи способа 1

Рис. 9

100: MOV DX, 100

103: MOV AL, 32

105: OUT [61], AL

107: MOV CX, 2000

10A: LOOP 10A

10C: MOV AL, 30

10E: OUT [61], AL

110: MOV CX, 2000

113: LOOP 113

115: DEC DX

116: JNZ 103

118: MOV CX, 1000

11B: LOOP 11B

11D: MOV DX, 200

120: MOV AL, 32

122: OUT [61], AL

124: MOV CX, 2000

127: LOOP 127

129: MOV AL, 30

12B: OUT [61], AL

12D: MOV CX, 2000

130: LOOP 130

132: DEC DX

133: JNZ 120

Прослушать результат работы не получилось, так как в ноутбуке отсутствует системный динамик.

9

Соседние файлы в папке УТС 7 семестр