Сброс
В микроконтроллере PIC16F84 реализованы следующие способы сброса:
– сброс по включению питания (POR);
– сброс по входу при обычной работе;
– сброс по входу в режиме пониженного энергопотребления SLEEP;
– сброс по сторожевому таймеру WDT при обычной работе;
– сброс по сторожевому таймеру WDT в режиме пониженного энергопотребления SLEEP.
При сбросе некоторые регистры не изменяют свое состояние. При включении питания они имеют неопределенное значение, в остальных случаях их состояние не изменяется. Большинство других регистров устанавливаются в определенное состояние в случаях сброса по включению питания, по входу или по сторожевому таймеру при обычной работе. Они не изменяются при сбросе по сторожевому таймеру из режима пониженного энергопотребления SLEEP, поскольку эта ситуация рассматривается как продолжение обычной работы.
На рисунке 11 приведена структурная схема узла сброса. На входе имеется фильтр, защищающий от небольших импульсов помехи.
Сброс по включению питания (POR). Микроконтроллер содержит специальную схему внутреннего аппаратного сброса по включению питания POR. Для использования этой схемы достаточно соединить выводы MCLR и . При этом отсутствует необходимость во внешних RC компонентах, обычно используемых в схемах сброса. Внутренний импульс сброса по включению питания формируется при достижении питающим напряжением минимального уровня (1,2 – 1,7 В). Работа схемы POR гарантируется при скорости установления напряжения питания не менее 0,05 В/мс и начальном напряжении не более 0,2 В. Схема сброса POR не вырабатывает сброса при выключении питания.
Таймер сброса PWRT предназначен для формирования выдержки времени (типовое значение 72 мс) при включении питания микроконтроллера и работает от отдельного внутреннего RC-генератора. В течение этого времени микроконтроллер находится в состоянии сброса. Эта выдержка времени позволяет напряжению питания установиться до нормального значения. Бит конфигурации PWRTE может разрешить или запретить работу с PWRT.
Примечания
1 Таймер PWRT разрешен при включении питания и активном значении соответствующего бита в слове конфигурации.
2 Таймер OST разрешен при включении питания или при выходе из режима пониженного энергопотребления, если используется XT-, LP- или HS-генератор.
Рисунок 11 – Структурная схема узла сброса
Таймер запуска генератора OST формирует задержку в 1 024 импульса генератора со входа OSC1 после окончания выдержки времени PWRT. Эта задержка предназначена для запуска и стабилизации работы кварцевого резонатора. Задержка OST формируется только в режимах XT, LP и HS и только при включении питания и выходе из режима пониженного энергопотребления SLEEP.
Последовательность включения питания. При включении питания сначала формируется сигнал внутреннего сброса POR, затем выдержка времени PWRT, потом включается таймер запуска генератора OST. Общее время запуска зависит от конфигурации генератора и состояния бита PWRTE (таблица 6). Например, в режиме RC с запрещенным PWRT задержка будет отсутствовать. Все выдержки времени отсчитываются от внутреннего сигнала POR. Если сигнал MCLR находился в низком уровне достаточно долго после включения питания, чтобы выдержки времени успели закончиться, то при переключении MCLR в высокий уровень выполнение программы начнется немедленно. Этот режим удобно использовать для тестовых целей или для синхронизации более чем одного микроконтроллера для одновременного запуска.
Таблица 6 – Общее время запуска микроконтроллера PIC16F84
Тип генератора | Включение питания | Выход из режима SLEEP | |
PWRT разрешен | PWRT запрещен | ||
XT, HS, LP | 72 мс + 1 024 | 1 024 | 1 024 |
RC | 72 мс | – | – |
Примечание – – период тактового генератора |
Внешний сброс. На рисунке 12 приведена типовая схема внешнего сброса. Данная схема необходима, если скорость нарастания напряжения питания недостаточна (менее 0,05 В/мс) либо используется низкочастотный кварцевый резонатор. Диод D предназначен для разряда конденсатора C при выключении питания. Величина сопротивления резистора R не должна превышать 40 кОм, чтобы падение напряжения на нем не превысило 0,2 В при максимальном токе утечки входа 5 мкА. При большем значении падения напряжения уровень напряжения на выводе будет недостаточен для надежного сброса. Резистор R1 может иметь значение в диапазоне от 1 до 100 кОм и предназначен для ограничения тока по выводу при перезаряде конденсатора С и импульсных помехах.
Рисунок 12 – Схема внешнего сброса
Микроконтроллер PIC16F84X имеет четыре источника прерывания:
– внешнее прерывание от вывода RB0/INT;
– прерывание при переполнении счетчика/таймера TMR0;
– прерывание по окончании записи данных в EEPROM;
– прерывание при изменении сигналов на выводах порта RB<7:4>.
Все прерывания имеют один и тот же адрес/вектор 0004h. При этом в регистре управления прерываниями INTCON (0Bh) записывается, от какого именно источника поступил запрос прерывания. Прерывания могут быть запрещены индивидуально или общим битом.
Бит общего разрешения/запрещения прерывания GIE (INTCON<7>) разрешает (если установлен в «1») все индивидуально не замаскированные прерывания или запрещает их (если сброшен в «0»). Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON. Бит GIE обнуляется при сбросе. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата сохраняется в стеке, а в счетчик команд загружается адрес 0004h. Логика прерывания изображена на рисунке 13.
Рисунок 13 – Логика прерываний
Время реакции на прерывание для внешних событий, таких как прерывание от вывода 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>).