Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект, часть 5 (15.12.08), чистовик.doc
Скачиваний:
28
Добавлен:
29.04.2019
Размер:
6.55 Mб
Скачать

Прерывания

Время реакции на прерывание для внешних событий, таких как прерывание от вывода INT или порта B, составляет от трех до четырех периодов тактовой частоты.

В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре INTCON. Этот бит должен быть программно сброшен внутри подпрограммы обработки прерывания для исключения рекурсивных прерываний, флаги запросов прерываний не зависят от соответствующих маскирующих бит и бита общего разрешения GIE. Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания.

Внешнее прерывание по выводу RB0/INT осуществляется по перепаду сигнала: либо по перепаду 0/1, если бит INTEDG в регистре OPTION<6> установлен, либо по перепаду 1/0, если бит INTEDG сброшен. Когда на выводе INT фиксируется перепад сигнала, устанавливается бит запроса INTF (INTCON<1>). Это прерывание может быть запрещено сбросом управляющего бита INTE (INTCON<4>). Бит запроса INTF должен быть очищен обработчиком прерывания перед тем, как опять разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен. Состояние бита GIE при этом определяет, будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP.

Прерывание от таймера/счетчика TMR0. Переполнение счетчика TMR0 (FFh/00h) установит бит запроса T0IF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски T0IE (INTCON<5>).

Прерывание от порта RB. Любое изменение сигналов на четырех входах порта RB<7…4> установит бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RBIE (INTCON<3>).

Сохранение состояния при прерываниях

При прерывании в стеке автоматически сохраняется только значение счетчика команд PC. Обычно пользователю также необходимо сохранить некоторые регистры, например регистры W и STATUS. Для временного хранения используются регистры W TEMP и STATUS TEMP.

Сторожевой таймер wdt

Сторожевой таймер WDT (рисунок 14) представляет собой независимый встроенный RC-генератор, не требующий никаких внешних цепей. Он работает, даже если основной тактовый генератор остановлен, как это происходит при исполнении команды SLEEP. При нормальной работе сторожевой таймер по истечении заданной выдержки времени вырабатывает сигнал сброса. Если контроллер находился в режиме пониженного энергопотребления SLEEP, срабатывание сторожевого таймера выводит его из этого режима и переводит в режим нормальной работы. Функционирование сторожевого таймера может быть запрещено путем записи «0» в бит конфигурации WDTE на этапе программирования микросхем.

Примечание: PSA и PS2…PS0 – биты регистра OPTION

Рисунок 14 – Структурная схема сторожевого таймера

Период сторожевого таймера. Номинальная выдержка сторожевого таймера составляет 18 мс (без использования предварительного делителя). Она зависит от температуры и напряжения питания, а также меняется от разброса характеристик кристаллов. Если требуется увеличить время задержки, то к WDT может быть подключен встроенный предварительный делитель с коэффициентом деления до 1:128, программируемый путем записи в регистр OPTION, таким образом могут быть реализованы выдержки до 2,3 с.

Команды CLRWDT и SLEEP обнуляют WDT и предварительный делитель, если он подключен к WDT. Таким образом, выдержка времени начинает отсчитываться сначала и на некоторое время выработка сигнала СБРОС предотвращается. При срабатывании сторожевого таймера обнуляется бит в регистре STATUS.

Выдержка времени сторожевого таймера максимальна при следующей комбинации параметров: минимальное напряжение , максимальная температура и максимальный коэффициент деления делителя. При этих условиях выдержка времени сторожевого таймера может составлять несколько секунд.