Первый блок начинается с оператора "LDI XL,$20" с меткой "SubName", а завершается оператором безусловного перехода "RJMP", два других - начинаются с оператора "SBI" с метками "Label1" и "Label2", соответственно, а заканчиваются оператором "RET".
Визуальное разделение таких блоков на плоскости является одним из принципов графических методов. Другим принципом является возможность графического отображения алгоритма программы. Благодаря этому, обеспечивается возможность ввода программы на плоскости в двух измерениях в виде алгоритма с древовидной структурой, с визуальным отображением направления условных и безусловных переходов. В результате - вся логическая структура как на ладони.
На рис. 1 показано отображение вышеприведенной программы в графической среде "Algorithm Builder".
Рис. 1. Отображение программы в среде "Algorithm Builder" Поскольку основная масса условных и безусловных переходов вводится и отображается графически, программа освобождается от бесчисленных имен меток, которые в ассемблере являются неизбежным балластом, загромождающим текст программы. Необходимость имен для меток остается только для входов в подпрограммы.
Графическая технология ассемблера в среде "Algorithm Builder" реализуется посредством нескольких базовых объектов, из которых выстраивается конструкция алгоритма. Среди них:
"Label" (метка) - отображается в виде вертикального штриха, расположенного на оси блока операторов. Метка может иметь необязательное имя, которое располагается слева или справа от штриха. Метки предназначены для подвода концов векторов переходов;
"Vertex" (вершина) используется в качестве начала блока, а по своему отображению и назначению аналогичен метке;
"Field" (поле) предназначен для записи операторов алгоритма и представляет собой отцентрированную строку в блоке;
"Condition" (условие) предназначен для обозначения операторов условных переходов. Конструктивно наиболее сложный. Графически представляет собой контур, располагающийся посредине блока, внутри которого вписывается текст с условием перехода и возможный вектор перехода в виде ломаной линии, исходящей от одного из краев контура, со стрелкой на конце, которая должна заканчиваться на метке или вершине. Действие интерпретируется как ветвление, если вписанное условие выполняется;
"JMP Vector" предназначен для представления безусловного перехода. Графически представляет собой ломаную линию, исходящую из середины блока операторов, аналогичную вектору объекта "Condition".
Редактор среды позволяет свободно вносить на рабочее поле любые необходимые объекты, модифицировать их, вставлять и так далее. Принципы редактирования аналогичны используемым в других графических редакторах.
Рис. 2. Основное окно редактора Для удобства, конец вектора ветвления разрешается останавливать на отрезке другого вектора, если конечно адрес у них общий. Но при большом нежелании рисовать вектор ветвления, либо, если это ветвление слишком длинное, всегда остается возможность адресовать переход классическим способом, на имя метки.
Рис. 3. Окно программиста В целом данная среда программирования является самодостаточной системой. Она содержит в себе компилятор алгоритма, симулятор микроконтроллера и внутрисхемный программатор, обеспечивающий загрузку откомпилированного алгоритма в кристалл. Кроме того, обеспечивается режим мониторной отладки, при котором к откомпилированному коду программы добавляется скрытый код, обеспечивающий вывод всего внутреннего состояния реального микроконтроллера в заданных точках останова в соответствующие окна, как при работе в симуляторе. При работе мониторного отладчика и программатора микроконтроллер непосредственно подключается к параллельному порту LPT несколькими цепями.
Рис. 4. Окно настройки таймеров В числе дополнительных возможностей, не связанных непосредственно с графическими технологиями, можно назвать метки со стандартным именем прерывания. Встретив такую метку, компилятор автоматически вставит в соответствующее вектору прерывания место программы код необходимого безусловного перехода. Имя таких меток можно выбрать через соответствующий пункт меню. Реализован также удобный интерфейс настройки таймеров, который избавляет от необходимости помнить назначение каждого бита управляющего регистра и ряд других сервисных возможностей.
Рис. 5. Работа симулятора Среда "Algor ithm Builder" предна- значена для работы в операционной системе Windows 95/98.
На рис. 6 приведен более сложный пример фрагмента программы. Слева - в классическом ассемблере, а справа - полная его копия в среде "Algor ithm Builder".
Рис. 6. Ассемблер: классика и графика Конечно, в рамках одной статьи невозможно достаточно подробно описать все особенности работы в графической среде.
В ближайшее время среда "Algor ithm Builder" будет адаптирована под иные типы микропроцессорных архитектур.
Переход к использованию такой среды труден психологически. В голове многих проскользнет мысль: "может, ассемблер и не располагает этими возможностями, но я к нему очень привык, мне и с ним хорошо". Это чем-то сродни переходу от командной (DOS) к графической оболочке (Windows). Однако, освоение этого инструмента и последующая работа с ним заметно проще классического ассемблера. Во всяком случае, те, кто его уже используют, пути назад не ищат.
Algorithm Builder fo AVR, Начинаем
http://vrtp.ru/index.php?showtopic=2211&st=0
Качаем и устанавливаем Algorithm Builder fo AVR http://algrom.net/russian.html Внимательно читаем Manual.pdf
За основу берём ATMega8 http://www.hth.com/filelibrary/PDFFILES/ATmega8.pdf Далее набираем алгоритм как на рисунке.
ПОМИГАЕМ КА СВЕТОДИОДОМ???
Теперь попорядку:
RESET(жирным) - отсюда идёт начало программы
Блок SP - инициализация стека
#b00000001->DDRD - настраиваем порт PD0 на выход
1->LED - записываем в PORTD единицу, т.е. устанавливаем на выводе МК 1(вывод 2 для ATMega8)
Paus - вызываем подпрограмму
0->LED - записываем в PORTD ноль, т.е. устанавливаем на выводе МК 0(вывод 2 для ATMega8)
Paus - опять вызываем подпрограмму
-> - далее стрелкой зацикливаем подпрограмму
Paus - имя подпрограммы
300000->Vremya - записываем в регистры с именем Vremya число 300000
Vremya-- - декремент(т.е. вычитаем из Vremya единицу)
-= - этот блок означает: если Vremya не равно 0, то переходим по стрелке, иначе вниз
RET - выход из подпрограммы
Присоединённое изображение
Переключаем с алгоритма на таблицу(или наоборот): Жмём F12(или соответствующие пункты, или значки на панеле) Заполняем поля как на рисунке:
Vremya - присваиваем имя регистру(ам)
2 - номер регистра
Int24 - занимаем 3-и регистра под имя Vremya(т.е. будем работать с 3-я регистрами как с одним -> СУПЕР)
Led PORTD.0 - присваиваем имя LED регистру ввода/вывода PORTD.0(т.е. порту PD0)
Далее жмём: Опции -> Опции проекта, в появившемся окне выбираем кристал ATMega8 и ставим частоту 4000000Гц -> Применить
Программы-> Компилировать. Теперь в папке проекта появится файл с расширением .hex, которым можно прошить микроконтроллер
Присоединённое изображение
Отлаживаем: Жмём F9(или соответствующие пункты, или значки на панеле)
Открываем окна: Открыть -> Working registers -> Table - это окно будет показывать, что происходит в каждом регистре(вообще изначално во всех 0)
Открыть -> Process time -> #0 - это окно будет показывать время выполнения программы
Открыть -> I/O Registers -> PortD - это окно будет показывать, что происходит на выходе PD0
Отлаживаем
Присоединённое изображение
Симулируем в Proteus: Собираем схемку.. Мигаем светодиодом
Присоединённое изображение
Ââèäó îãðàíè÷åí-
íîãî îáúåìà æóðíàëà êîäû ïðîãðàì-
ìû çäåñü íå ïðèâîäÿòñÿ, è òå, êîìó
îíè íåîáõîäèìû, ìîãóò îáðàòèòüñÿ â
ðåäàêöèþ èëè íà ñàéò æóðíàëà (www.
compitech.ru/data/shem/01_00/#1)
www.compitech.ru
|