Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно найти почти в любой обучающей литературе. Чтобы получить “бегущие огни” на выходах порта, нужно последовательно переключать один бит
“Бегущая тень” получается при инверсии “бегущих огней”. В принципе сложностей никаких нет – и вам под силу сделать это самостоятельно.
Мы же попробуем усложнить задачу и объединить в одной программе “бегущие огни” и “бегущие тени”, сделать их непрерывными т.е. рисунок светящихся огоньков будет переходить из конца в начало, а еще включим функцию реверса огней т.е нажав на кнопку сможем “двигать” огоньки в обратном направлении. Проект в Proteus будет выглядеть так:
файлы проекта:
🎁attiny2313_led_2.rar 26.22 Kb ⇣ 127
Программа:
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Работает программа очень просто, огонек начинает двигаться в обратную сторону, если нажать кнопку. Очень легко сформировать бегущую тень, если в строке формирования рисунка прописать все единицы и оставить один нулик. Поэкспериментируйте с разными рисунками огней.
Должно выглядеть примерно так:
“бегущий огонек”: 🎁beg_og1.wmv 1.01 Mb ⇣ 86
“бегущая тень”: 🎁beg_ten1.wmv 878.09 Kb ⇣ 81
“бегущая полоска”: 🎁beg_polos1.wmv 831.7 Kb ⇣ 68
Программа “бегущих огней” написанная несколько иначе:
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
В программе появились новые команды и строчки. Мы изучим их в процессе отладки.
А сейчас вернемся в IDE AVR Studio 5 и рассмотрим более подробно некоторые функции. Сначала копируем или пишем программу в редактор. Компилируем программу нажимая F7 или кликаем по среднему значку панели сборки проекта:
Назначения клавиш слева - направо:
Сборка проекта (Build)
Сборка решения (Build Solution) F7
Отмена (Cancel)
По результатам сборки в окне Output, будет предоставлен отчет о процессе компиляции, а в Solution Explorer будут показаны файлы полученные в результате сборки. Программа создает несколько файлов .hex, .lss, .map, .obj. Файл .hex для программирования микроконтроллера, .lss содержит подробный листинг программы и отчет о компиляции, который можно изучить, если дважды кликнуть по этому файлу, .map файл показывает карту оперативной памяти и задействованные в программе регистры.
Как правило, написание программы занимает меньшее время. Чем сам процесс ее отладки. Поэтому сегодня более подробно рассмотрим функции разных клавиш в AVR Studio 5.
Отладка Debug, начинается с компиляции программы, и если обнаружены явные ошибки, в нижнем окне появляется предупреждения, которые указывают на ее место расположения.
Отладка программы может выполняться в режимах симуляции и эмуляции.
Симуляция не требует специальных отладочных средств и проводится непосредственно в самой программе. Эмуляция предполагает подключение отладочных плат или программаторов, и позволяет наблюдать процесс отладки наглядно сразу в “железе”. Повторюсь, что для AVR Studio 5 можно самому собрать аналог STK500, весьма мощный и функциональный программатор-отладчик.
Мы будем выполнять отладку в режиме симуляции. Для управления процессом симуляции существует панель отладки (Debug Toolbar)
Назначение кнопок панели отладки указаны в таблице
В процессе отладки можно наблюдать за изменениями значений переменных в окне Locals
Контролируя значения переменных, можно понять логику программы.
Для трассировки программы (пошаговой отладки) предназначена (AVR Debug Toolbar) – панель отладки AVR.
Назначение кнопок панели указаны в таблице
Мы уже пользовались опцией просмотра состояния процессора, еще раз посмотрим функции этого окна.
Параметры состояния процессора перечислены ниже
В этом окне, а так же отдельно можно посмотреть текущее состояние регистров общего назначения и 16-битные регистры X,Y,Z.
Окно просмотра памяти позволяет наблюдать, а при необходимости и модифицировать все виды памяти.
Окно дезассемблирования показывает программу на языке ассемблера. Это окно актуально для языков высокого уровня, когда нужно посмотреть, как составлена та или иная команда в кодах ассемблера.
Для контроля и управления регистрами ввода-вывода существует окно просмотра периферии IO View
В этом окне можно включать или выключать конкретные биты регистров ввода-вывода, имитируя нажатие на кнопку или активируя встроенное устройство микроконтроллера. Единичка записанная в бит обозначена темным квадратиком, светлый (пустой) квадрат означает ноль. Мы можем произвольно включать и отключать биты регистров.
Теперь вернемся к нашим бегущим огонькам.
Начало в принципе знакомое и повторяется с предыдущих программ, появилась новая строчка:
Инициализация стека.
Что такое стек? Зачем он нужен?
Стек-это участок оперативной памяти, состоящий из нескольких ячеек, для временного хранения данных, связанных с вызовом подпрограмм.Стек ассоциируют с разными предметами, например блинами положенными друг на друга или патронами в магазине автомата Калашникова. Суть стека такова –
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Входим в режим трассировки F11, смотрим в параметрах состояния процессора строчку Stack Pointer, красной строчкой выделен адрес 0х00DF, кликнем по F11, два раза. Адрес верхушки стека стал равен 0х0074, т.е. мы инициализировали стековую память по адресу 0х0074. В режиме отладки, мы можем инициализировать любой участок ОЗУ, просто 2 раза кликнув по строчке Stack Pointer и вручную набрав нужный нам адрес.
У стековой памяти есть еще оно полезное свойство, мы можем произвольно записать значение регистра общего назначения в стек c помощью команды push. И наоборот записать значение из стека в регистр общего назначения командой pop.
команда push – записывает значение РОН в стековую память по адресу, установленному в указателе стека, и вычитает из этого адреса единицу.
команда pop – записывает в РОН значение стековой памяти по адресу, установленному в указателе стека, и добавляет к этому адресу единицу.
Обратите внимание, что первая строка (Program Counter) стала равна 2 – это адрес программной строки, которая сейчас будет выполнена. (Program Counter) сокращенно PC – счетчик команд, это регистр в котором значение в процессе выполнения линейной программы инкрементируется, но при выполнении команд перехода значение PC может резко меняется. Для того, чтобы выполнение программы продолжить с нужной нам стоки, можно вместо метки записать выражение PC+/-N.
где, N - число строк перехода;
знаки, +/- обозначают переход вверх или в низ.
Например программу задержки можно записать без меток, таким образом:
dec temp1
brne PC-1
dec temp2
brne PC-3
dec temp3
brne PC-5
ret
Попробуйте переписать и убедиться, что программа работает. Можно легко перейти на любую строку программы, набрав ее в строчке Program Counter.
Итак, мы рассмотрели основные функциональные окна AVR Studio 5 и написали несколько программ. Как вы убедились программа достаточно проста по структуре и интуитивно понятна.
Для программирования микросхем рекомендую собрать аналог STK5000, который незаменим в случаях, когда неправильно прошиты фьюзы (биты конфигурации).
В последующих статьях рассмотрим внутреннюю структуру контроллеров AVR, и особенности программного управления. Акцент будет перенесен на особенности написания програм в ассемблере, уже выходя за рамки контроллера ATTINY2313, что даст вам болше возможностей для самостоятельного творчества.
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.