Главная » Статьи » Полезные материалы |
Второй метод обработки прерывания подразумевает также вхождение в обработчик, но в нем не нужно выполнять необходимые действия. В нем нужно просто зафиксировать факт того, что поступил запрос от какого-то источника. Пусть это будет таймер. Нам требуется выдать импульс на светодиод на одну секунду – ну, например, чтобы отобразить момент завершения какой-нибудь операции. Это такой момент, когда нам не особенно важно, когда зажжется светодиод. Нам ведь не обязательно, чтобы он зажегся прямо сейчас, не так ли? Пусть он загорится через 100 мСек, после выполнения более важных операций. То есть, мы получили запрос на прерывание, перешли в обработчик, зафиксировали факт прерывания, вышли из обработчика и продолжаем выполнение главной программы. Суть в том, чтобы в цикле главной программы находилось условие проверки факта прерывания! А до этого условия может пройти, например, 50 мСек или больше, или меньше. Зависит от того, как далеко вы разместили это условие и в каком месте выполнялась программа, когда поступил запрос на прерывание. Это можно понять, взглянув на рисунок. Я обычно использую простую переменную размером в бит. В начале программы сбрасываю ее в ноль – это условно состояние отсутствия запроса. Когда произошло прерывание – в обработчике устанавливаю ее в единицу. Таким образом я фиксирую факт прерывания. В теле основной программы находится условие – если переменная равна единице, то выполняю то, что мне нужно было выполнить обязательно после прерывания, но не было критично ко времени начала выполнения. Естественно, в этом условии необходимо сбрасывать в ноль эту переменную, указав таким образом программе, что обработка прерывания завершена. Проверка этого условия происходит через время tx. Это время – которое проходит между запросом на прерывание и обработкой этого запроса. Это время можно сократить, если использовать проверку факта прерывания чаще. Например, записывать в циклах, которые есть в программе. Если прерывание произошло в момент задержки, то вернувшись из прерывания, программа будет выполнять оставшееся время этой задержки. Поэтому лучше задержки организовывать в циклах. Это значит писать не DelayMs 500, а For I = 1 To 10 DelayMs 50 'А здесь вставлять проверку Next Естественно, это абстрактный пример и он может быть модифицирован как угодно. Мы запишем ту же самую программу, но только по этому способу. Будем считать, что нам не критично по времени переключение PORTB.4
| ||
Просмотров: 10629 | Комментарии: 5 | | |
Всего комментариев: 5 | |
| |