ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.02.2024
Просмотров: 159
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИСанкт-Петербургский государственныйэлектротехнический университет«ЛЭТИ» им. В.И. Ульянова (Ленина)Кафедра вычислительной техникиотчетпо лабораторной работе№5по дисциплине «Организация ЭВМ и систем»Тема: Использование аппаратных прерываний
Санкт-Петербург2022Цель работыЦель работы – знакомство с различного вида аппаратными прерываниями и создание собственных подпрограмм обработки прерываний.Формулировка заданияПо заданию преподавателя разработать алгоритм и реализовать программу подключения собственной подпрограммы обработки прерывания и использовать её в цепочке со стандартной подпрограммой обработки прерывания от одного из следующих устройств компьютера: 1. системный таймер;2. клавиатура;3. контроллер накопителя на гибких магнитных дисках;4. таймер реального времени;5.контроллер накопителя на жёстком магнитном диске.Техническое заданиеРазработать алгоритм и реализовать программу подключения собственной подпрограммы обработки прерывания и использовать её в цепочке со стандартной подпрограммой обработки прерывания системного таймера.Результат работы программыВ результате вызова функции собственного прерывания на экран будет выведено строку “ TEST PER 2 SECONDS ” с интервалом в 2 секунды (рисунок 1).
Рисунок 1 — Результат работы программы
Структурная схема аппаратных средствИсходный код программы#include
#include
#include
unsigned long far* N = (unsigned long far*) MK_FP(0x0040, 0x006c);
void interrupt Custom(...)
{
if (*N % 36L == 0)
{
cputs(" TEST PER 2 SECONDS");
}
}
int main()
{
void interrupt(*base)(...);
base = getvect(0xc1);
setvect(0x1c, Custom);
getch();
setvect(0x1c, base);
return 0;
}
| Студент гр. 1376 | | Афанасова Я.В. |
| Преподаватель | | Ельчанинов М.Н |
Рисунок 1 — Результат работы программы
|
|
#include
#include
unsigned long far* N = (unsigned long far*) MK_FP(0x0040, 0x006c);
void interrupt Custom(...)
{
if (*N % 36L == 0)
{
cputs(" TEST PER 2 SECONDS");
}
}
int main()
{
void interrupt(*base)(...);
base = getvect(0xc1);
setvect(0x1c, Custom);
getch();
setvect(0x1c, base);
return 0;
}