Дежурный режим
Основное преимущество PIC-контроллеров заключается в их низком потреблении при высоком быстродействии, что очень полезно в приборах с автономным питанием. Еще большей экономии энергии можно достичь при использовании дежурного режима. При этом основное время микроконтроллер находится в режиме sleep, при котором приостанавливается выполнение программы, выключается тактовый генератор, но может продолжать свою работу Watch Dog таймер и некоторые периферийные устройства. Выход из этого режима может производиться по-разному, в зависимости от типа контроллера.
Например, можно запрограммировать Watch Dog таймер («собаку») на определенный период, при срабатывании которого контроллер «проснется», опросит свои входы и, если нужно, перейдет к процедуре обработки. Если никаких действий совершать не нужно, он выполнит команду SLEEP и будет находиться в этом состоянии до следующего срабатывания таймера. При выполнении процедуры обработки следует периодически сбрасывать «собаку» для предотвращения те повторного срабатывания. Используя подобную методику, можно "строить приборы, не требующие выключателя питания, различные сигнализирующие и контрольные приборы.
Очень часто прибор должен быть выполнен в виде пульта (к примеру - пульт ДУ телевизора), который большую часть времени находится в выключенном состоянии, а при нажатии кнопок управления производить соответствующие действия. Реализовать режим «пульт» можно несколькими способами, один из которых описан выше. Период «собаки» в этом случае следует выбирать в диапазоне 0.05-0.1 секунды.
Другие способы не основаны на использовании «собаки», т.е. контролер не просыпается для опроса кнопок, а остается спать до их нажатия.
В PIC-контроллерах старого семейства (16С5х), для выхода из режима sleep нужно использовать специальную схемотехнику и программирование. При этом обеспечивается подача сигнала «сброс» на контроллер при нажатии любой кнопки (рис. 1).
В дежурном режиме выходы RB2 и RB3 находятся в состоянии «0», конденсатор С заряжен до уровня «1».
При нажатии любой кнопки конденсатор быстро разряжается через резистор R2 или R3, что приводит к подаче сигнала «сброс». При сбросе выходы переходят в высокоимпедансное состояние, и разряд конденсатора через R2 (R3) прекращается. Время разряда должно быть больше требуемого для сброса контроллера (около 18 мс), но меньше минимальной длительности нажатия на кнопку (примерно 50-100мс). После снятия сигнала «сброс» (заряде конденсатора через R1) контроллер начинает выполнение программы. При этом на выходы RB2 и RB3 «0», на короткое (около 10 мкс) время, за которое конденсатор не успевает разрядиться, а с входов RB0 и RB1 считывается состояние кнопок. Аналогично можно подключить матрицу клавиатуры, рис. 2.