21. Каково время реакции микроконтроллера на событие при программной реализации процедуры ожидания и по прерыванию?
22. Какие ограничения накладываются на длительность обнаруживаемого импульсного сигнала при программной реализации цикла ожидания?
23. Поясните принципы устранения дребезга контактов.
24. Поясните принцип организации процедур подсчёта числа импульсов между двумя событиями и за заданный промежуток времени.
25. Расшифруйте команду MOV TMOD, #01000000B.
26. Поясните принцип организации передачи управления в программе по коду.
27. Как программно и аппаратно формируются задержки разной длительности?
28. Как с помощью микроконтроллера измерить временной интервал и оценить точность и диапазон измерения?
29. Поясните принцип генерации статических, периодических и апериодических сигналов.
30. В чём заключается табличный способ генерации микроконтроллером сложных последовательностей управляющих сигналов?
31. Перечислите и охарактеризуйте средства программы ProView, предназначенные для отладки взаимодействия микроконтроллера с объектами управления.
3. ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА С ОБЪЕКТАМИ
УПРАВЛЕНИЯ
3.1. Прерывания
Подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые будут в ней использованы, а перед возвратом в прерванную программу должна восстановить их значения. Подпрограмма обработки внешнего прерывания уровня 0 (SUBINO) может, например, иметь следующую структуру:
Обратите внимание, что обработчик заканчивается командой возврата из подпрограммы RETI, а переход на него происходит по команде безусловного перехода SJMP. Дело в том, что система прерываний формирует вызов LCALL аппаратно [3].
В целях отладки программу необходимо дополнить следующими командами:
3.2. Ввод информации с датчиков
3.2.1. Опрос двоичного датчика. Ожидание события
В устройствах и системах управления объектами события фиксируются с использованием разнообразных датчиков цифрового и аналогового типов. Наибольшее распространение имеют двоичные датчики типа да/нет.
Ожидание статического сигнала. Типовая процедура ожидания события (WAIT) состоит из следующих действий: ввода сигнала от датчика, анализа значения сигнала и передачи управления в зависимости от состояния датчика. Конкретная программная реализация процедуры зависит от того, каким образом датчик подключен к микроконтроллеру. Например, при подключении датчика к линии бита 3 порта 1 программа ожидания размыкания контакта будет иметь вид:
Другим частным случаем является процедура ожидания замыкания контакта, которая может быть реализована следующим образом:
Для опроса особо важных датчиков с целью уменьшения времени реакции на исключительную ситуацию в объекте целесообразно использовать режим прерывания.
Ожидание импульсного сигнала. Особенность процедуры ожидания импульсного сигнала состоит в том, что микроконтроллер должен обнаружить не только факт появления, но и факт окончания сигнала.
Для программирования этой процедуры удобно воспользоваться рассмотренными выше примерами, смонтировав их последовательно в линейную программу. Оформлять процедуры WAITC и WAIT0 в виде подпрограмм нецелесообразно, так как это удлиняет программу, а длина и, следовательно, время исполнения программы определяют минимальную длительность импульса, который может быть обнаружен программой.
Последовательность следования процедур WAITC и WAIT0 зависит от формы импульса. Для “отрицательного” импульса (1→0→1) процедура WAITC предшествует процедуре WAIT0, для “положительного” (0→1→0) следует за ней.
Ниже приведён пример программной реализации процедуры ожидания “отрицательного” импульсного сигнала (WAITIMP) при подключении датчика к биту 3 порта 1 при условии, что начальное состояние входа – единичное.
Программная реализация цикла ожидания накладывает ограничения на длительность импульса: импульсы длительностью меньше времени выполнения цикла ожидания могут быть “не замечены” микроконтроллером. Для обнаружения кратковременных импульсов обычно используют способ фиксации импульса на внешнем триггере флага. На вход в этом случае поступает не кратковременный сигнал с датчика, а флаг, формируемый триггером. Триггер устанавливается по фронту импульса, а сбрасывается программным путем – выдачей специального управляющего воздействия. Длительность импульса при этом будет ограничена снизу только
быстродействием триггера.
3.2.2. Устранение дребезга контактов
При работе с датчиками, имеющими механические или электромеханические контакты (кнопки, клавиши, реле и клавиатуры), возникает явление, называемое дребезгом. Он заключается в том, что при замыкании контактов возможно появление отскока (BOUNCE) контактов, которое приводит к переходному процессу. При этом сигнал с контакта может быть прочитан микроконтроллером как случайная последовательность нулей и единиц. Подавить это нежелательное явление можно схемотехническими средствами, но чаще это делается программным путем.
Наибольшее распространение получили два программных способа ожидания установившегося значения [1].
Подсчет заданного числа совпадающих значений сигнала. Его суть состоит в многократном считывании сигнала с контакта. Подсчет удачных опросов, обнаруживших, что контакт устойчиво замкнут, ведется счетчиком. Если после серии удачных опросов встречается неудачный, то подсчет начинается сначала. Контакт считается устойчиво замкнутым, если последовало N удачных опросов. Число N подбирается экспериментально для каждого типа используемых датчиков и лежит в пределах от 5 до 50. Пример программного подавления дребезга контакта (DBNC) приводится для случая, когда датчик импульсного сигнала подключен к входу T0, счет удачных опросов ведется в регистре R3, N=20.
Введение временной задержки. Устранение дребезга контакта путем введения временной задержки заключается в следующем. Программа, обнаружив замыкание контакта, запрещает опрос его состояния на время, заведомо большее длительности переходного процесса. Программа (DBNCDL) написана для случая подключения датчика к входу T0 и программной реализации временной задержки:
Временная задержка в пределах 1-10 мс подбирается экспериментально для каждого типа датчиков и реализуется подпрограммой DELAY.
3.2.3. Подсчет числа импульсов
Часто в управляющих программах возникает необходимость ожидания цепочки событий, представляемой последовательностью импульсных сигналов от датчиков. Рассмотрим две типовые процедуры: подсчет числа импульсов между двумя событиями и подсчет числа импульсов в заданный интервал времени.
Подсчет числа импульсов между двумя событиями. Один из возможных вариантов процедуры подсчёта (CNTEVNT) может быть реализован, если использовать вход T1 как вход счетчика внешних импульсов, а T0 – для программного включения и выключения счета. В аккумуляторе фиксируется число импульсов, деленное на 32, так как TL1 работает как 5-битный предделитель [1].
Подсчет числа импульсов за заданный промежуток времени. При решении задачи преобразования числоимпульсного кода в двоичный код, а также в ряде других задач может возникнуть необходимость подсчёта числа импульсов за заданный интервал времени. Эта процедура может быть реализована различными способами [1]:
- программной реализацией временного интервала и программным подсчетом числа импульсов на входе;
- программной реализацией временного интервала и аппаратным подсчетом числа импульсов (на внутреннем таймере/счетчике);
- аппаратной реализацией временного интервала и программным подсчетом числа импульсов;
- аппаратной реализацией временного интервала с аппаратным подсчетом числа импульсов.
Последний способ подсчёта требует использования двух счётчиков
(CNTTIME). На T/C1 можно выполнять подсчёт числа импульсов, а на T/C0 - отсчёт заданного интервала. Датчик импульсов должен быть подключен к входу T1.
3.2.4. Опрос группы двоичных датчиков
Микроконтроллеры чаще всего имеют дело не с одним датчиком, как в рассмотренных выше примерах, а с группой автономных, логически независимых или взаимосвязанных, формирующих двоичный код датчиков. При этом микроконтроллер может выполнять процедуру опроса датчиков и передачи управления отдельным фрагментам прикладной программы в зависимости от принятого кода.
Ожидание заданного кода. Программную реализацию процедуры ожидания заданного кода (WTCODE) рассмотрим для случая подключения группы из восьми взаимосвязанных статических датчиков к входам порта 1.
Передача управления по коду. При опросе двоичных датчиков передачу управления удобно осуществлять по таблице переходов. Ниже приводится текст программы (GOCODE), осуществляющей передачу управления одной из восьми прикладных программ PROG0 - PROG7, которые расположены в пределах одной страницы памяти программ. Передача производится в зависимости от кодовой комбинации на входах P1.0 - P1.2.