Режим пониженного энергопотребления

Вход в режим SLEEP осуществляется командой SLEEP. По этой команде, если WDT разрешен, то он сбрасывается и начинает счет времени, бит »в регистре статуса (f3) сбрасывается, бит »устанавливается, а встроенный генератор выключается. Порты ввода/вывода сохраняют состояние, которое они имели до входа в режим SLEEP.

Для снижения потребляемого тока в этом режиме, ножки на вывод должны иметь такие значения, чтобы не протекал ток между кристаллом и внешними цепями. Ножки на ввод должны быть соединены внешними резисторами с высоким или низким уровнем, чтобы избежать токов переключения, вызываемых плавающими высокоомными входами. То же и про RTCC. Ножка /MCLR должна быть под напряжением Vihmc в этом режиме. Выводы OSC1, OSC2 следует подключить к Vss (Общий) через резистор 10 МОм.

Выход из режима SLEEP осуществляется в результате следующих событий:

1. Внешний сброс -импульс низкого уровня на на ножке /MCLR.

2. Сброс при срабатывании WDT (если он разрешен)

3. Прерывания. (Прерывание с ножки INT, прерывание при изменении порта B, прерывание при завершении аналого-цифрового преобразования).

При первом событии происходит сброс всего устройства. Два других события предполагают продолжение выполнения программы. Бит "PD" в регистре статуса (f3), который устанавливается при включении, но обнуляется командой "SLEEP", может быть использован для определения состояния процессора до "просыпания" если процессор был в режиме "SLEEP" (горячий старт), или было просто выключено питание (холодный старт). Бит »позволяет определить, чем был вызван выход из режима SLEEP: или внешним сигналом на ножке /MCLR, или срабатыванием WDT.

Чтобы устройство вышло из режима SLEEP через прерывание, это прерывание должно быть разрешено установкой соответствующей маски в регистре INTCON. При выходе из режима SLEEP будет выполняться фоновая программа, если общая маска запрещает все прерывания (GIE=0). Если GIE=1, то будет выполняться подпрограмма обработки прерываний.