6.7. К порту В подключен аналого-цифровой преобразователь. Напишите программу, аналогичную программе из предыдущего вопроса, только на этот раз решение о стабильности считываемого значения будет приниматься в результате 1000 одинаковых считываний, а в рабочем регистре будет возвращаться код, соответствующий аналоговому напряжению.
6.8. В подпрограмме, являющейся ответом на предыдущий вопрос, возвращается стабильное значение зашумленного оцифрованного сигнала после считывания 1000 одинаковых значений. Используя эту подпрограмму, напишите основную процедуру, которая будет определять, насколько текущий результат отличается от предыдущего, и записывать этот признак в регистр h’40’. В позиции каждого отличающегося бита должна быть записана 1. Номер самого правого изменившегося бита следует поместить в регистр h’41’.
6.9. Подпрограмма, написанная в качестве ответа на вопрос 6.7, не вернет никакого значения, если в аналоговом сигнале будет присутствовать относительно высокочастотный шум, поскольку в результате «дрожания» сигнала появление 1000 одинаковых отсчетов будет весьма маловероятным событием. Для снижения шума можно воспользоваться усреднением множества отсчетов. Если шум является случайным, то считывание
6.10. Схема, приведенная на Рис. 6.12, представляет собой 7-битный генератор псевдослучайных чисел, построенный на базе сдвигового регистра с элементом Исключающее ИЛИ в цепи обратной связи. Напишите подпрограмму, последовательно выдающую в порт В 127 таких двоичных случайных чисел. Подпрограмма должна инициализироваться любым ненулевым значением. Например, если начальное значение будет равно 01, то первые 32 числа будут следующими:
02 04 08 10 20 41 83 06 0C 18 30 61 С2 85 0А 14
28 51 АЗ 47 8F 1E ЗС 79 F2 Е4 С8 91 22 45 8В 16…
Последовательность повторится после формирования 127 значений.
Что произойдет, если в качестве начального значения будет взят ноль?
Рис. 6.12.
6.11. Преобразование значения температуры из шкалы Цельсия в шкалу Фаренгейта осуществляется по формуле
F = C∙(9/5) + 32.
Напишите подпрограмму, в которую передается значение температуры по шкале Цельсия (от 0 до 100 °C) и которая возвращает соответствующее значение температуры по шкале Фаренгейта.
Глава 7
Обработка прерываний
Подпрограммы, которые мы с вами обсуждали в главе 6, можно назвать «предсказуемыми» событиями, поскольку они вызываются в соответствии с логикой программы. Ситуации же реального времени, наступающие в результате взаимодействия процессора с внешними физическими воздействиями, далеко не так просты. Очень часто вне ядра ЦПУ происходят различные события, требующие немедленной реакции процессора. Подавляющее большинство контроллеров способны реагировать на самые разнообразные события такого рода, нарушающие их нормальное функционирование. Что же касается микроконтроллеров, то запросы на обслуживание могут исходить как от встроенных периферийных устройств, например при переполнении таймера, так и извне от источника, совершенно не связанного с микроконтроллером. По меньшей мере, по сигналу внешнего сброса (одно из внешних событий) микроконтроллер должен перейти к первой команде программы. Аналогичным образом, в качестве реакции на внешний запрос на обслуживание, или прерывание, микроконтроллер должен перейти к специальной подпрограмме, называемой подпрограммой обработки прерывания.
Несмотря на то что представители семейства среднего уровня имеют различные наборы встроенных периферийных устройств, таких как аналоговые устройства, последовательные порты, таймеры, все они реагируют на прерывания одинаковым образом. В этой главе мы рассмотрим основные источники таких запросов реального времени, общие для всех моделей микроконтроллеров, и, частично, внешние прерывания. Также мы коснемся вопроса взаимодействия встроенных периферийных устройств с системой прерываний (прерывания, соответствующие конкретным устройствам, будут рассмотрены в соответствующих главах третьей части книги).
Прочитав эту главу, вы:
• Осознаете необходимость обработки прерываний.
• Разберетесь в концепции таблицы векторов как отправной точки при реакции на события сброса и прерываний.
• Ознакомитесь с последовательностью событий, происходящих при обнаружении PIC-микроконтроллером запроса на прерывание.
• Поймете причины возникновения задержки.
• Разберетесь в назначении бита глобального разрешения прерываний.
• Поймете назначение попарно объединенных битов локальной маски прерывания и локального флага прерываний, соответствующих различным источникам прерываний.
• Сможете писать простые обработчики прерываний, реализующие:
— Переключение контекста.
— Определение источника прерывания.
— Возврат по команде rеtfiе.