Опрос

Наивное решение состоит в том, что нам следует циклически опрашивать признак события (пример 6.1). Это решение хорошо не только концептуальной простотой, но и тем, что если цикл опроса короток, время реакции будет очень маленьким. Поэтому такой метод нередко используют для обработки последовательностей событий, следующих друг за другом с небольшим интервалом. Однако это решение, называемое опросом (polling), имеет и большой недостаток: загрузив процессор опросом, мы не можем занять его чем бы то ни было другим.

Пример 6.1. Пример использования режима опроса

; Приведенный фрагмент кода использует опрос таймера TMRO,
; работающего от "часового" кварцевого генератора с частотой 32768Гц.
; Цикл опроса в чистом виде TMRO — регистр таймера,
; Timervalue — просто переменная,
; регистр 0 — аккумулятор, обозначаемый также как W.
; Такой цикл ожидает одного отсчета таймера.
MovF TMRO, 0
MovWF TimerValue
G5H_Continuel
MovF TimerValue, 0
SubWF TMRO, 0
BNZ G5H_Continuel
; Код содержит два цикла опроса: первый цикл генерирует ; сигнал высокого напряжения, второй — низкого.
; В результате получается периодический сигнал, называемый меандром.
; Фрагмент определителя номера на основе микроконтроллера PIC
; (с) 1996, Дмитрий Иртегов.
; Запрос к АТС ка выдачу номера.
; Генератор меандра с частотой 501.5 гц. Выдает 50 периодов (100 мс).
; генерирует 2 периода по 16 тиков и один — по 17.
; Получается очень похоже.
6enerate500Hz
MovLW 50
MovWF AONByteCounter
MovLW 3
MovWF Tmpl
MovF TMRO, 0
MovWF TimerValue G5H_NextPeriod
MovLW 8
AddWF TimerValue, 1
BSF LINE_CTL_PORT, LINE_ANSWER G5H_Continuel
MovF TimerValue, 0
SubWF TMRO, 0
BNZ G5H_Continuel
MovLW 8
AddWF TimerValue, 1
BCF LINE_CTL_PORT, LINE_ANSWER
DecFSZ Tmpl, 1 GoTo G5H_ContinueO
MovLW 3
MovWF Tmpl
IncF TimerValue, 1 G5H_ContinueO
MovF TimerValue, 0
SubWF TMRO, 0
BNZ GSH_ContinueO
DecFSZ AONByteCounter, 1 GoTo G5H_NextPeriod
Return

Этот недостаток можно переформулировать и иначе: если процессор занят Чем-то другим, он может узнать о событии, только завершив текущую Деятельность. Если событие действительно важное, впрочем, мы можем расставить команды проверки его признака по всему коду программы, но для сложных программ, обрабатывающих много различных событий, это решение вряд ли можно считать практичным.
С точки зрения встраиваемых приложений, режим опроса имеет еще один существенный недостаток: опрашивающий процессор нельзя выключить В то же время, выключенный процессор потребляет гораздо меньше энергии и не создает электромагнитных помех, поэтому при разработке программ для таких приложений считается хорошим тоном выключать (переводить в режим ожидания) процессор всегда, когда это возможно. В этом случае конечно, необходимо предусмотреть какие-либо средства для вывода процессора из этого состояния при возникновении интересующего нас события.