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

ОргЭВМиС (3 сем) / Лаба №5 / Отчёт по Лабораторной Работе №5

.docx
Скачиваний:
94
Добавлен:
01.06.2019
Размер:
142.45 Кб
Скачать

Минобрнауки России

Федеральное государственное автономное образовательное

учреждение высшего образования

«Санкт-Петербургский государственный электротехнический университет им. В.И. Ульянова (Ленина)»

(СПбГЭТУ «ЛЭТИ»)

Факультет компьютерных технологий и информатики

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

ОТЧЕТ

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

на тему:

«Использование аппаратных прерываний»

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

Выполнил студент группы №

Принял: Гречухин М.Н.

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

2018 г.

Содержание

Введение………………………………………………………………………………..3

  1. Задание…………………………………………………………………………..3

  2. Схема алгоритма.....…………………..............................................................…3

  3. Текст программы………………………………………………………………..6

  4. Пример запуска программы……………………………………………………7

Заключение……………………………………………………………………………..7

Введение

Цель работы: знакомство с различного вида аппаратными прерываниями и создание собственных подпрограмм обработки прерываний.

  1. Задание

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

  1. Схема алгоритма

Функция таймера: Обработчик прерывания клавиатуры:

Функция main:

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

#include <dos.h>

#include <conio.h>

void interrupt(far *oldvect)(...);

long ticks, clics;

void interrupt far timer(...) {

if (!(++ticks % 10))

cprintf("*");

_chain_intr(oldvect);

}

void interrupt far keyboard(...) {

clrscr();

cprintf("Kolichestvo cgenerirovannih scan-codov: %d\n\r", clics++);

cprintf("For end press ESC");

_chain_intr(oldvect);

}

int main()

{

char choice;

do {

clrscr();

cprintf("MENU:\n\r");

cprintf("1 - Timer (prerivanie 1Ch)\n\r");

cprintf("2 - Klaviatura (prerivanie 09h)\n\r");

cprintf("0 - Zavershenie raboti\n\r");

cprintf("Choose punkt menu: ");

choice = getche();

switch (choice) {

case '1':

clrscr();

ticks = 0;

oldvect = _dos_getvect(0x1c);

_dos_setvect(0x1c, timer);

cprintf("Timer ustanovlen (for end press any klavishu)\n\r");

getch();

_dos_setvect(0x1c, oldvect);

cprintf("\n\rPress any button...");

getch();

break;

case '2':

clics = 0;

oldvect = _dos_getvect(0x09);

_dos_setvect(0x09, keyboard);

while (getch() != 27) {}

_dos_setvect(0x09, oldvect);

break;

case '0':

cprintf("\nZavershenie raboti...");

break;

default:

cprintf("\n\rWrong klavisha. Eche raz ples.\n\r");

cprintf("Press any button...");

getch();

break;

}

} while (choice != '0');

return 0;

}

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

Заключение

7