МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторной работе №3
по дисциплине «Системное программирование»
Тема: Программирование системных часов и управление звуком
Студент гр. 8391 |
|
Гоглев А.А. |
Студент гр. 8391 |
|
Шушков Д.А. |
Студент гр. 8391 |
|
Маликов А.А. |
Преподаватель |
|
Кораблев Ю.А. |
Санкт-Петербург
2021
Цель работы
Изучить способы программирования системных часов ПЭВМ. Освоить программное управление звуком.
Выполнение работы
Исследовать генерацию звука по способу 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
Прочитать и записать в отчет содержимое порта 61h.
20h = 00100000b
Из AFD загрузить программу lab3a_1.bin и сверить ее с программой на странице 5.
Так как программы lab3a_1.bin не было найдено, пришлось вводить программу вручную.
Рис. 1.
Установить точку останова по адресу программы NOP.
Рис. 2.
Запустить программу командой G.
Измерить по секундомеру длительность звучания.
К сожалению, данная лабораторная работа выполняется на современном ноутбуке, где отсутствует системный динамик.
Рассчитать частоту звука, результаты записать в отчет.
Увеличить частоту звука в два раза, повторить измерение длительности звучания и выполнить расчет фактической частоты звука.
Чтобы увеличить частоту звука, нужно уменьшить значение в регистре CX в два раза, т.е. в строке 110 заменить 2000 на 1000.
Изучить программирование канала таймера на примере канала 0-канала системных часов.
В AFD ввести программу установки канала 0 на генерацию меандра, приведенную на странице 5.
Изменить в программе начальное значение счетчика на значение 1FFFh.
Рис. 3.
Сохранить программу в файле с именем “timer.bin”
Рис. 4.
Выполнить введенную программу.
Выйти из AFD в NORTON, измерить по секундомеру длительность одной минуты по временному табло NORTON. Результаты занести в отчет. Рассчитать коэффициент ускорения темпа работы системных часов.
Рис. 5.
1 мин (в NORTON) = 7.5 сек.
Коэффициент ускорения = 60 / 7.5 = 8
Выполнить генерацию звука согласно способу 2.
В 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 ; на этой строчке звук выключится
Определить максимальную частоту генерации звука, последовательно уменьшая в два раза начальное значение счетчика.
Максимальная частота генерации звука достигается при значении счетчика 003F и составляет 18636.8 Гц. При последующем увеличении значения счетчика звук не слышен и это объясняется тем, что среднестатистический человек способен воспринимать органами слуха акустические волны частотой до 20 КГц.
Генерировать звук согласно способу 3.
Из 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, запустить программу командой G. Контролировать наличие звука.
Рис. 8.
Продолжить выполнение программы ( нажимая F2 ).
Повторять многократно пункт 4.3 до зависания системы.
Зависания программы не происходили.
Записать в отчет последнее начальное значение счетчика, которое содержится в регистре ВХ.
В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
Прослушать результат работы не получилось, так как в ноутбуке отсутствует системный динамик.