- •Вступление
- •1 Программная среда avr Studio
- •1.1 Общие сведения
- •1.1.1 Отладка программы
- •1.1.2 Программный отладчик
- •1.1.3 Аппаратный отладчик
- •1.1.4 Полнофункциональные программные имитаторы электронных устройств
- •1.1.5 Внутренний отладчик микроконтроллеров avr
- •1.1.6 Программная среда «avr Studio»
- •1.2 Описание интерфейса. Главная панель программы «avr Studio»
- •1.3 Создание проекта
- •1.4 Трансляция программы
- •1.4.1 Форматы файлов
- •1.4.2 Формат нех-файла
- •1.4.3 Процедура трансляции
- •1.5 Отладка разрабатываемой программы
- •1.5.1 Ошибки алгоритма и его реализации
- •1.5.2 Этапы процесса отладки
- •1.5.3 Применение точек останова
- •1.5.4 Просмотр и изменение содержимого введенных переменных
- •1.6 Исправление ошибок
- •2. Лабораторные работы
- •2.1 Лабораторная работа №1
- •1 Принципиальная электрическая схема
- •2 Алгоритм
- •3 Программа на Ассемблере
- •4 Директивы
- •5 Операторы
- •6 Описание программы (листинг 1.1)
- •7 Задания для самостоятельной работы
- •8 Задания к лабораторной работе
- •9 Содержание отчета
- •2.2 Лабораторная работа №2
- •1 Принципиальная электрическая схема
- •2 Алгоритм
- •Программа на Ассемблере
- •3 Описание программы (листинг 2.1)
- •4 Задания для самостоятельной работы
- •1 Постановка задачи
- •2 Схема
- •3 Алгоритм
- •4 Программа на Ассемблере
- •5 Описание программы (листинг 3.1)
- •6 Задания для самостоятельной работы
- •7 Задания к лабораторной работе
- •8 Содержание отчета
- •9 Контрольные вопросы
- •3. Сводная таблица команд Ассемблера микроконтроллеров avr
- •Проектирование микропроцессорных систем
- •65044, Украина, Одесса, пр. Шевченко, 1
- •65044, Украина, г.Одесса, пр. Шевченко, 1, корп. 5
2 Схема
Обратимся к лаб. работе №1, к схеме на рис. 2.2. В схеме используется кнопка, имеющая одну группу из двух нормально разомкнутых контактов. При
замыкании и размыкании контактов возникает явление дребезга, с которым нужно бороться. Поэтому эту схему мы будем использовать и в нашей лабораторной работе №3.
Рассмотрим борьбу с дребезгом контактов программным путем.
3 Алгоритм
Алгоритм лаб. работы № 2 необходимо доработать, введя в программу специальные задержки. Рассмотрим исходное состояние, когда контакты кнопки разомкнуты. На входе РD.0 установился высокий потенциал. Программа находится в цикле ожидания события – замыкания контактов, то есть, появления на входе РD.0 низкого потенциала. В момент замыкания возникает дребезг контактов.
Дребезг приводит к тому, что на входе PD.0 вместо простого перехода с единицы в ноль мы получим серию импульсов. Для того, чтобы избавится от их паразитного влияния, программа должна сработать следующим образом. Обнаружив первый же нулевой уровень на входе, программа должна перейти в режим ожидания. В режиме ожидания программа приостанавливает все свои действия и просто отрабатывает задержку. Время задержки должно быть выбрано таким образом, чтобы оно превышало время дребезга контактов.
Такую же процедуру задержки нужно ввести в том месте программы, где она находится в цикле ожидания отпускания кнопки, т.е. появления высокого потенциала.
Для разработки нового алгоритма возьмем за основу предыдущий (лаб. работа №2, рис. 2.4). Доработанный алгоритм с добавлением операций антидребезговой задержки приведен на рис. 3.1. Как видно из рисунка, вся доработка свелась к включению двух процедур задержки. Одна – после обнаружения факта нажатия кнопки, а вторая – после обнаружения факта ее отпускания.
4 Программа на Ассемблере
Для реализации нового алгоритма немного доработаем программу (листинг 2.1). Новый вариант программы приведен ниже (листинг 3.1). В этой программе используются следующие новые операторы:
rcall
Переход к подпрограмме. У этого оператора всего один параметр – относительный адрес начала подпрограммы. Относительный адрес – это просто смещение относительно текущего адреса. Выполняя команду rcall, микроконтроллер запоминает в стеке текущий адрес программы из счетчика команд и переходит по адресу, определяемому смещением. Такой же принцип задания адреса для перехода мы уже встречали в команде гjmp. В строке 20 программы (листинг 3.1) производится вызов подпрограммы задержки по адресу, соответствующему метке wait.
Рис. 3.1 – Алгоритм управления светодиодом с антидребезгом
ret
Команда выхода из подпрограммы. По этой команде микроконтроллер извлекает из стека адрес, записанный туда при выполнении команды rcall, и осуществляет передачу управления по этому адресу. В листинге 3.1 команду ret мы можем видеть в конце подпрограммы wait (строка 37).
push
Запись содержимого регистра общего назначения в стек. У данного оператора всего один операнд – имя регистра, содержимое которого нужно поместить в стек. В строке 32 программы (листинг 3.1) в стек помещается содержимое регистра с именем loop.
pop
Извлечение информации из стека. У этого оператора тоже всего один операнд – имя регистра, в который помещается информация, извлекаемая из стека. В строке 36 программы информация извлекается из стека и помещается в регистр loop.
dec
Уменьшение содержимого РОН. У команды один параметр – имя регистра. Команда dec (декремент) уменьшает на единицу содержимое регистра, имя которого является ее параметром. В строке 34 программы уменьшается на единицу содержимое регистра loop.
brne
Оператор условного перехода (переход по условию). У этого оператора всего один параметр – относительный адрес перехода. Условие перехода звучит как «не равно». Чтобы разобраться, как проверяется это условие, необходимо рассмотреть регистр состояния микроконтроллера (SREG).
Каждый бит этого регистра представляет собой флаг. Все флаги регистра предназначены для управления работой микроконтроллера. Кроме флага I (глобальное разрешение прерываний), этот регистр имеет ряд флагов, отражающих результаты работы различных операций.
В данном случае нас интересует лишь один из таких флагов – флаг нулевого результата (флаг Z). Этот флаг устанавливается в том случае, когда при выполнения очередной команды результат окажется равным нулю. Например, при вычитании двух чисел, сдвиге разрядов числа или в результате операции сравнения. В нашем случае на значение флага влияет команда dec (строка 34). Если в результате действия этого оператора содержимое регистра окажется равным нулю, то флаг Z устанавливается в единицу. В противном случае он сбрасывается в ноль.
Флаг Z будет хранить записанное в него значение до тех пор, пока какая-нибудь другая команда его не изменит. Какие из команд оказывают влияние на флаг Z, а какие нет, можно узнать нз приложения.
Команда brne использует флаг Z в качестве условия. Команда выполняет переход только в том случае, если флаг Z сброшен. То есть когда результат предыдущей команды не равен нулю. В нашей программе (листинг 3.1) подобный оператор применяется в строке 35.