Научная литература
booksshare.net -> Добавить материал -> Физика -> Джонс М.Х. -> "Электроника - практический курс" -> 170

Электроника - практический курс - Джонс М.Х.

Джонс М.Х. Электроника - практический курс — М.: Постмаркет, 1999. — 528 c.
ISBN 5-901095-01-4
Скачать (прямая ссылка): elektronika1999.djvu
Предыдущая << 1 .. 164 165 166 167 168 169 < 170 > 171 172 173 174 175 176 .. 195 >> Следующая

прерывания").
Приход запроса на прерывание подобен телефонному звонку на столе у
чиновника - он немедленно оставляет работу, которой был занят, чтобы
ответить по телефону, аккуратно откладывая в сторону свои частично
обработанные бумаги и освобождая место для блокнота, куда он записывает
телефонные сообщения; но после звонка он готов вернуться к своей работе.
Забавно представить себе процессор без входов прерывания как контору, где
в телефонных аппаратах нет звонков. Тогда нужно поручить кому-нибудь
каждые несколько секунд поднимать трубку, чтобы проверить, не звонит ли
кто - это эквивалентно опросу порта ввода.
470 МикроЭВМ и их применения
Прерывания жизненно необходимы для многозадачной операционной системы,
например, для такого важного программного обеспечения, каким является
"Windows", которое дает возможность процессору делать вид, что он
выполняет несколько действий сразу. В действительности, все
осуществляется последовательно, но за счет тщательно организованных
приоритетных прерываний действия процессора кажутся пользователю
фактически происходящими одновременно.
Простой пример, относящийся к микроЭВМ ВВС Micro, продемонстрирует всю
мощь прерываний. Операционная система обрабатывает запросы, идущие от
клавиатуры, следующим образом: прерывания используются для того, чтобы
записывать вводимые с клавиатуры символы в зарезервированную для этого
область памяти, называемую буфером клавиатуры, и происходит это даже в
том случае, когда процессор в это время, возможно, занят выполнением
какой-либо программы. Чтобы познакомиться с этим свойством, запустите
следующую программу, набрав RUN:
10 FOR I = 1 ТО 5000 20 PRINT "ЗАНЯТ"
30 NEXT
Она займет процессор, и будет казаться, что он занят все время, заполняя
экран словом "ЗАНЯТ". Теперь, когда эта программа работает, введите с
клавиатуры слово LIST и нажмите клавишу <return>. Немедленно ничего не
произойдет, но через несколько секунд, когда вывод слова "ЗАНЯТ"
закончится, процессор откликнется на введенную вами команду и выведет
листинг (текст) программы. Процессор, выполнявший программу, был прерван
обращением с клавиатуры, на время, достаточное для того, чтобы поместить
слово LIST в буфер клавиатуры в ОЗУ перед тем, как возобновить вывод на
экран. С точки зрения оператора все выглядело так, как если бы компьютер
делал два дела сразу.
В микроЭВМ ВВС Micro сигнал прерывания нужно подавать на вход СВ\ порта
пользователя. Приводимая ниже программа, написанная на языке ассемблера,
наглядно проиллюстрирует процедуру прерывания. Предполагается, что эта
программа будет введена после программы EXPLORE. Ее основная часть -
строки с 1010 по 1040 - названа "interruptroutine" (подпрограмма
прерывания); она содержит фактическую программу, которую выполняет
процессор после прихода извне прерывания на вход СВ\. Записав содержимое
аккумулятора в стек, подпрограмма выполняет затем свое главное действие -
переносит данные с порта ввода на порт вывода и таким образом в явном
виде указывает на то, что поступил запрос прерывания, независимо от чего-
либо другого, что происходило в это время. Подходящий эксперимент состоит
в том, чтобы, удерживая функциональную клавишу 5 в нажатом положении,
заставить повторяться подпрограмму "countdown" (из программы EXPLORE -
Прим. перев.). Если, не отпуская функциональную клавишу 5, вы на короткое
время с помощью ключа подадите на вход СВ\ логическую 1, то это вызовет
запуск процедуры прерывания. В этот момент независимо от того, в каком
месте счета в обратном
Как отвлечь процессор от выполняемой программы? 471
направлении окажется подпрограмма "countdown", содержимое порта вывода
будет обновлено в результате записи в него новой комбинации логических 0
и 1, заданной ключами на входах порта ввода.
1000 REM эксперименты с подачей сигналов прерываний на вход СВ1 порта
пользователя 1010 [
1020 .interruptroutine
1030 РНА \ запись содержимого аккумулятора в стек
1040 LDA&FE60 \ загрузка в аккумулятор данных из порта ввода 1050
STAFE&61 \ копирование содержимого аккумулятора в порт вывода
1060 PLA \ восстановление содержимого аккумулятора из
стека
1070 RTI \ возврат в основную программу из перывания
1080 .enableinterrupt 1090 LDA#0
1100 STA&FE6C \ занесение нуля в ячейку &FE6C на короткое время является
командой для ИС сопряжения отреагировать на отрицательный перепад
напряжения на входе СВ1
1110 LDA#&6F
1120 STA&FE6C \ занесение в ячейку &FE6C значения &6F запрещает
реагировать на все прерывания, кроме поступающего со входа СВ1
1130 LDA#&90
1140 STA&FE6E \ занесение в ячейку &FE6E значения &90 разрешает перывание
со входа СВ1
1150 .setvector
1160 LDA#interruptroutine MOD 256
\ загрузка в аккумулятор младшего байта адреса, соответствующего метке
"interruptroutine" 1170 STA&0206 \ запись в младший байт
вектора прерывания
младшей части указателя на "interruptrouine" 1180 LDA#interruptroutine
DIV 256
\ загрузка в аккумулятор старшего байта адреса, соответствующего метке
Предыдущая << 1 .. 164 165 166 167 168 169 < 170 > 171 172 173 174 175 176 .. 195 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed