Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
238 Микроконтроллеры AVR от азов программирования... фициенты деления. Для начала необходимо включить предварительный делитель и выбрать для него коэффициент деления 1/1024. Второй коэффициент деления (780) мы помещаем в специальный системный регистр — регистр совпадения. Сравнение содержимого счет ного регистра с содержимым регистра совпадения будет происходить на аппаратном уровне. В режиме «сброс при совпадении» таймер работает следующим образом. Сразу после запуска значение счетного регистра нач нет увеличиваться. Когда это значение окажется равным значению реги стра совпадения, таймер автоматически сбросится и продолжит работу с нуля. В момент сброса таймера формируется запрос на прерывание. Для имитации бегущих огней, как и в предыдущих примерах, мы будем использовать операции сдвига. При этом нам также понадобится специ альный рабочий регистр. То есть один из регистров общего назначения, в котором будет храниться текущее состояние наших «огней». В начале программы в рабочий регистр необходимо записать исходное значение. То есть число, один из разрядов которого равен единице, а остальные — нулю. В результате операций сдвига эта единица будет перемещаться вправо или влево, создавая эффект бегущего огня. Проверка состояния кнопки и сдвиг на один шаг будет производиться при каждом вызове процедуры обработки прерывания. Исходя из вышесказанного, алгоритм работы программы состоит из двух независимых алгоритмов. Во-первых, это алгоритм основной программы, а во-вторых, алгоритм процедуры обработки прерывания. Рассмотрим их по порядку. Алгоритм основной программы. 1. Настроить стек и порты ввода-вывода микроконтроллера. 2. Настроить таймер и систему прерываний. 3. Записать в рабочий регистр исходное значение. 4. Разрешить работу таймера. 5. Разрешить прерывания. 6. Перейти к выполнению основного цикла. Так как все операции, связанные с движением огней, выполняет про цедура обработки прерываний, в основном цикле программы нам ничего делать не нужно. Для простоты оставим основной цикл пустым. Алгоритм процедуры обработки прерывания. 1. Проверить состояние переключателя режимов. 2. Если контакты переключателя разомкнуты, произвести сдвиг всех разрядов рабочего регистра на один разряд вправо. Если в результате этого сдвига единичный бит выйдет за пределы байта, создать новый единичный бит в крайней левой позиции. 3. Если контакты переключателя замкнуты, произвести сдвиг всех раз рядов рабочего регистра на один разряд влево. Если в результате
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==