Поскольку имеется четыре источника прерываний, выходы всех элементов И, на вход каждого из которых подаются сигналы флага и маски, необходимо объединить по ИЛИ для получения итогового сигнала запроса прерывания, который, собственно, и инициирует реакцию ЦПУ на прерывание. Из Рис. 7.3 видно, что сигнал с выхода этого элемента ИЛИ управляется (с помощью еще одного элемента И) битом общего разрешения прерываний GIE, который расположен в 7-м бите регистра INTCON. Однако для «пробуждения» процессора, если он находится в режиме пониженного потребления, используется именно исходный сигнал с выхода элемента ИЛИ. Как мы увидим далее в главе 10, при останове программы и переводе микроконтроллера в режим пониженного потребления можно значительно снизить ток, потребляемый устройством (до значения не более 1 мкА). Например, при контроле температуры на дне озера в течение года с интервалом в 1 час с помощью регистратора данных с батарейным питанием собственно вычисления занимают ничтожную долю от общего времени работы. Перевод микроконтроллера в режим Power Down после считывания и сохранения каждого отсчета уменьшает емкость батареи, необходимую для обеспечения работы прибора в течение столь длительного времени. Перевод в этот режим осуществляется командой sleep. Для «пробуждения» микроконтроллера используется прерывание от внешнего источника, в данном случае от экономичного генератора с периодом сигнала, равным одному часу. Как говорилось выше, процесс вывода микроконтроллера из «спящего» режима не зависит от состояния бита GIE.
Чтобы проиллюстрировать программные аспекты обработки прерываний, рассмотрим задачу подсчета числа посетителей в небольшом магазине. Одним из возможных решений было бы использование пары маломощный лазер — фотоэлемент, расположенных по бокам от входной двери. При пересечении луча покупателем на управляющий микроконтроллер поступит сигнал запроса в виде прямоугольного импульса
Рис. 7.4.