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

лаба ИСПОЛЬЗОВАНИЕ АППАРАТНЫХ ПРЕРЫВАНИЙ ЭВМ

.docx
Скачиваний:
0
Добавлен:
08.07.2025
Размер:
1.53 Mб
Скачать

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

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

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

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

Кафедра вычислительной техники

отчет

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

по дисциплине «Организация ЭВМ и систем»

ИСПОЛЬЗОВАНИЕ АППАРАТНЫХ ПРЕРЫВАНИЙ

Студенты гр. 3352

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

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

2024

  1. Задание на лабораторную работу

  1. Реализовать программу для генерации звуков системного динамика через равные промежутки времени. Использовать собственную подпрограмму обработки прерывания в цепочке с подпрограммой обработки прерывания от системного таймера.

  1. Алгоритмы и тексты отлаженных программ

Для работы созданы глобальные переменные программы: tick_Count – переменная, отвечающая за подсчет интервала между генерацией звука.

Frequency – переменная, задающая частоту звука

Interval_Ticks – задает интервал между сигналами, с учетом того, что в среде DOS таймер обновляется примерно 18.2 раза в секунду.

Функция Interrupt New_Timer (Рисунок 1): выполняет увеличения счетчика для генерации звука с заданным глобальной переменной интервалом и при его достижении воспроизводит звук с учетом выставленной частоты на продолжительность в миллисекундах. В конце для сохранения корректной работы программы вызывается старый обработчик для прерываний, которые могут происходить в программе (прерывание клавиатуры – kbhit 0x16).

Рисунок 1 — Функция Interrupt New_Timer

Функция main (Рисунок 2), получает адрес обработчика с помощью установленного прерывания 0x08, затем устанавливает новый обработчик и воспроизводит звук через заданные промежутки времени с заданной частотой, пока не будет нажата любая клавиша, что означает конец генерации (прерывание 0x16 (INT 16h)). Затем восстановится старый обработчик и программа будет завершена.

Рисунок 2 — Функция main

Текст программы:

#include <conio.h>

#include <dos.h>

void interrupt(*old_timer)(...);

volatile int tick_count = 0;

const int frequency = 700;

const int interval_ticks = 18;

void interrupt new_timer(...) {

tick_count++;

if (tick_count >= interval_ticks) {

tick_count = 0;

sound(frequency);

delay(200);

nosound();

}

(*old_timer)();

}

int main() {

old_timer = getvect(0x08);

setvect(0x08, new_timer);

while (!kbhit()) {

}

setvect(0x08, old_timer);

return 0;

}

  1. Пример запуска программы

При запуске программы генерируется звук с частотой 700 Герц продолжительностью 200 мс примерно каждую секунду до нажатия любой клавиши.

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

Рисунок 3 — Структурная схема

  1. Выводы

В процессе выполнения лабораторной работы создана программа, генерирующая звуки системного динамика через равные промежутки времени с помощью собственной программы обработки прерывания. С использованием прерываний 0x08 (INT 08h) для собственного обработчика прерываний таймера, 0x16 (INT 16h) для клавиатурного завершения работы.