Компьютерные подсказки

Вылетает Сталкер: Зов Припяти Программа икс рей 1

Stalker lost alpha гид по прохождению

Pony Express отслеживание почтовых отправлений

Pony Express – время и сроки доставки с Алиэкспресс в Россию

Застряли посылки с Алиэкспресс со статусом Hand over to airline: что делать?

РФ (Nigma) — интеллектуальная поисковая система

Данные для семантики — Яндекс Вордстат

Пиар ВКонтакте при помощи бирж: особенности и использование

Почему я не могу отправить сообщение?

Предупреждение «Подключение не защищено» в Google Chrome по протоколу https Нарушена конфиденциальность данных яндекс браузер

Всё что известно о смартфоне Samsung Galaxy S9 Аккумуляторная батарея Galaxy S9 и мощность

Темы оформления и русификация форума SMF, а так же установка компонента JFusion в Joomla

Автоматическое определение движка форума Позже board powered by smf

Коды в игре скайрим - зелья, ингредиенты, заклинания Код на ингредиенты скайрим

Подробная инструкция, как в "скайриме" открыть дверь золотым когтем

Algorithm Builder fo avr, Начинаем Графический ассемблер. Программа на языке Ассемблер в программной среде Algorithm Builder

Algorithm Builder for AVR

Среда предназначена для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла. Разработка программы может быть как на уровне ассемблера, так и на макроуровне с манипуляцией многобайтными величинами со знаком.
В отличие от классического ассемблера программа вводится в виде алгоритма с древовидными ветвлениями и отображается на плоскости, в двух измерениях. Сеть условных и безусловных переходов отображается графически, в удобной векторной форме. Это к тому же освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Вся логическая структура программы становися наглядной.
Графические технологии раскрывают новые возможности для программистов. Визуальность логической структуры уменьшает вероятность ошибок и сокращает сроки разработки. Появляется такое понятие, как дизайн алгоритма, проедполагающее некоторый художественный вкус программиста.
По оценке пользователей, по сравнению с классическим ассемблером, время на разработку программного обеспечения сокращается в 3-5 раз.
Поддерживается автоматическая перекодировка строк ANSI-кодов Windows в коды русифицированного буквенно-цифрового ЖКИ.
Среда объеденяет в себе графический редактор, компилятор алгоритма, симулятор микроконтроллера, внутрисхемный программатор.
При использовании внутрисхемного программатора Вы можете подключать микроконтроллер непосредственно к LPT компьютера без каких-либо дополнительных устройств. Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в нем.

Среда предназначена для работы в ОС Windows 95/98/2000/NT/ME/XP.


Версия программы: 4.20
Размер программы: 1.15 Mb
4.Технические требования.

Данное микроэлектронное реле обладает определенными техническими данными.

Данное микроэлектронное реле имеет один нормально замкнутый (тыловой) и один нормально разомкнутый (фронтовой) контакт для переключения двух нагрузок пульсирующего тока.

При подаче внешнего переменного напряжения частотой 25, 50 и 75 Гц обеспечивается работа в диапазоне от 0,8В до 10В.

Напряжение срабатывании на переменном токе частотой 25, 50 и 75 Гц составляет (2,9- 3,2)В, а напряжение отпадания (2,1-2,3)В.

Примечание: Срабатывание - размыкание тылового контакта и замыкание фронтового контакта. Отпадание – размыкание фронтового контакта и замыкание тылового контакта.

Для вывода информации о входном напряжении использован индикатор с общим анодом.

Контакты осуществляют коммутацию напряжения до 30В.

Частота обновления информации на индикаторе происходит через 12,8 мс.

Для выпрямления входного напряжения использован выпрямитель со средней точкой.

5.Функциональная схема электронного реле.

Импульсное микроэлектронное реле можно разделить на несколько функциональных узлов. Функциональная схема данного реле представлена на рисунке 5. По функциональному назначению в схеме можно выделить:


  • Выпрямитель построенный по схеме с общей точкой.

  • Микропроцессор (МП).

  • Индикатор предназначен для вывода информации.

  • Оптронная пара.
Выпрямитель предназначен для выпрямления поступающего на его вход аналогового сигнала. В свою очередь Аналоговый сигнал поступает с защитного блок фильтра или другого аналогового элемента и представляет из себя переменное напряжение с частотой 25, 50 или 75Гц. С выхода выпрямителя получаем выпрямленное напряжение которое поступает на микропроцессор.

Микропроцессор выполняет заложенные в программе функции. Попадая на вход микропроцессора с выхода выпрямителя выпрямленное напряжение начинает анализироваться при помощи встроенного в микропроцессор АЦП. Затем микропроцессор высчитывает среднее значение измеренного напряжения и выводит его на индикатор. Так же на один из выходов подключаются оптронные пары. Они представляют из себя аналог

Рис.5.Функциональная схема микроэлектронного реле автоблокировки

Контактов реле. В зависимости от порога срабатывания сигнал появляется на одной из оптронной пары.

Индикатор позволяет наблюдать за напряжением которое приходит на микроэлектронное реле. Это позволяет обслуживающему персоналу производить измерение и наблюдать за работой микроэлектронного реле.

Оптопары транзисторные, состоящие из излучающего диода на основе соединения мышьяк – галлий – алюминий и составного кремниевого фототранзистора. Предназначены для использования в качестве переключателя в гальванически развязанных электрических цепях радиоэлектронной аппаратуры. Выпускаются в металлическом корпусе. Масса прибора не более 1,5 г.

6.Алгоритм работы.

Для создания микроэлектронного реле необходимо определить основную задачу. Для начала необходимо произвести настройку микропроцессора, настроить все порты ввода – вывода, установить таймер и АЦП. После этого начинает выполнятся основная задача которая заключается в сборе информации при помощи АЦП, после этого производим анализ полученных данных и выводим их на индикацию. Индикация в свою очередь должна показывать десятичное значении входного напряжения. Более подробный алгоритм работы представлен на рисунке 6.

Алгоритм работы программы состоит из пяти подпрограмм:


  • Настройка микропроцессора

  • Подпрограмма АЦП

  • Подпрограмма таймера

  • Подпрограмма индикации

  • Подпрограмма деления
Рассмотрим работу настройки микропроцессора. Для начала устанавливаем начального значения стека. После этого производим настройку АЦП. Тут мы устанавливаем предделитель СК/128 и устанавливаем режим непрерывного преобразования, когда запуск преобразований выполняется непрерывно через определенные интервалы времени. Затем производим настройку таймера. Устанавливаем режим работы СТС (сброс при совпадении). В этом режиме после достижения значения, записаного в регистре сравнения,счет продолжается со значения «$00». В этом же такте когда обнуляются значения происходит прерывание по таймеру. Потом настраиваем прерывание которое срабатывает от переполнения. После этого производится настройка портов ввода – вывода. Далее устанавливаем все значения флагов, знакоместо индикации, значение суммы, делителя и частного нулевое значение. И разрешаем глобальное прерывание, для чего устанавливает единицу в флаг i. После настройки нашего микропроцессора начинается наша программа. Для этого устанавливаем условие t=1. Пока значение t неравно единицы происходит цикл, как только он становится в значение единицу программа переходит в право где идет на подпрограмму индикации и после ее выполнении устанавливает флаг t в ноль и опять замыкается опять в цикл. Все последующие подпрограммы будут выходить по прерыванию и возвращаться в этот цикл проверки флага t.

Теперь рассмотрим подпрограмму АЦП. Так как мы выше произвели настройку АЦП и сказали, что переход на подпрограмму АЦП производится по прерыванию через определенное значение тактовых импульсов. Так как у нас после настройки микропроцессора программа крутилась в цикле где проверялось значение флага t совместно с этим производился отсчет значений тактов генератора микропроцессора. После достижения определенного значения тактовых импульсов происходит прерывание и программа переходит на подпрограмму АЦП. Как только мы перешли на нее у нас произошло измерение значения входного напряжения. Для запоминания этого значения мы используем два регистра Yl (младший) для запоминания младших байтов и Yh (старший) для запоминания старших байтов. После этого пять проверяем значение флага t, если оно равно нулю то необходимо вывести значение на индикацию, а если флаг t находится в единице то это значит что модно производить перевод значения АЦП в десятичную форму. После этого производим сравнение порога значения измеренного напряжения, если это значение выше порога в 0,8В то мы записываем это значение в регистр и складываем его с последующими измерениями. При каждом сложении значений АЦП увеличиваем значение делителя на единицу. После проверяем значение делителя и если его значение равно 255 то необходимо обнулить значение делителя суммы, но если делитель не достиг значения 255 то происходит выход из подпрограммы АЦП.

Но если у нас после сравнения значения АЦП ниже порога 0,8В то программа переходит в право и после чего выключаем АЦП. Это необходимо для того что бы значение напряжения успело вывестись на индикатор. Потом производим анализ значение делителя и если он не равен нулю то производим сложение значений АЦП и увеличение делителя на единицу. Потом переходим на подпрограмму деления. Это необходимо для вычисления среднего значения напряжения. Но если значение делителя равен нулю то программа переходит сразу после подпрограммы деления. После этого сравниваем значение порога срабатывания АЦП и если он выше порога то выводим в порт ввода – вывода значение единицы, что соответствует срабатыванию и замыканию фронтового контакта, а если значение меньше порога срабатывания то в порт выводится значение нуля что соответствует замыканию тылового контакта. Потом устанавливаем значение делителя и флаг t в ноль. Так же обнуляем значение АЦП и включаем его и выходим из подпрограммы АЦП.

Далее рассмотрим подпрограмму деления переход в которую находится в подпрограмме АЦП. Подпрограмма деления необходима для вычисления среднего значения измеренного напряжения. Программа деления представляет из себя последовательное вычитание значение делителя из суммы всех значений АЦП. Столько раз сколько произошло это вычитание и будет значением среднего значения, то есть частным. Рассмотрим сам алгоритм этой операции. После перехода в подпрограмму обнуляем значение частного, потом проверяем флаг С. Если его значение неравно единице то мы увеличиваем значение частного на единицу и вычитаем значение делителя из суммы всех значений АЦП. В флаг С записывается значение 1 только после того как значение суммы станет меньше значения делителя. Как только в флаг С записалась единица программа выходит из цикла. Значение полученного частного заносим в регистр Х и обнуляем значение суммы. На этом заканчивается программа деления и происходит выход из нее.

Также как подпрограмма АЦП переход на подпрограмму таймера происходит через определенное значение тактовых импульсов. Естественно переход на подпрограмму таймера по прерыванию производится в разное время с прерыванием на подпрограмму АЦП. Соответственно они не мешают друг другу. В подпрограмме таймера у нас происходит постепенный вывод информации на индикаторе. Так как у нас имеется четыре разряда, то нам необходимо выводить значения цифр последовательно друг за другом. Для этого имеется n в которое записываем значение от 0 до 3, что соответствует каждому разряду. После перехода по прерыванию начинается программа. Сначала проверяем значение n и если это значение равно нулю то происходит переход дальше, где подаем ноль для выключения четвертого знакоместа. В порт В выводим число. После этого подаем единицу для зажжения первого знакоместа. В результате этого первая цифра зажигается на индикаторе. Потом происходит переход по метке. Далее увеличиваем значение n на единицу и выходим из подпрограммы. Через определенное время происходит очередное прерывание по таймеру и программа переходит в подпрограмму таймера, где опять производим сравнение значения n.Так как мы его увеличили на единицу то соответственно происходит переход при n равное единице. Далее происходит выключение первого знакоместа, вывод в порт В значение цифры второго числа и зажигаем второе знакоместо. Потом опять происходит переход по метке и увеличивается значение n на единицу. Значение третей и четвертой цифры выводится аналогично, но при выводе четвертой цифры устанавливаем значение n в ноль, это для того чтобы в последующем опять начался вывод первой цифры. Также здесь записываем в флаг t значение единицы. После вывода четвертой цифры на индикаторе программа выходит и попадает в цикл проверки значения флага t.

Так как флаг t установлен в единицу то происходит переход из цикла проверки флага, после этого происходит переход на подпрограмму индикации. В этой подпрограмме определяем значение тысяч, сотен, десятков и единиц, а также определяем значение полученной цифры для вывода ее в порт В. После перехода в подпрограмму индикации устанавливаем запрет на глобальное прерывание. Потом обнуляем значение регистра temp. Затем производим сравнение среднего значения АЦП которое находится в регистре Z. Если оно больше тысячи то производим вычитание 1000 из регистра Z. После вычитания в регистр temp заносим единицу. Единица заносится каждый раз когда из Z вычитается 1000. Содержимое регистра temp соответствует значению тысяч. Как только регистр Z станет меньше 1000 программа переходит дальше. После перехода значение регистра temp переписываем в регистр r0 и обнуляем его. Затем опять сравниваем значение регистра Z и если он больше 100 то опять вычитаем из него 100. При каждом вычитании заносим в регистр temp единицу. Как только значение регистра Z станет меньше 100 программа переходит дальше. После этого переписываем значение сотен в регистр r1. Потом обнуляем значение регистра temp. Потом сравниваем значение регистра Z и если оно больше 10 то вычитаем из регистра Z 10. При каждом вычитании заносим единицу в регистр temp. Как только значение регистра Z станет меньше 10 программа переходит дальше. Далее запоминаем значение десятков в регистре r2. Оставшееся значение в регистре Z является значением определяющее значение единиц. Это значение записываем в регистр r3. Теперь значения тысяч, сотен, десятков и единиц находятся соответственно в регистрах r0, r1, r2, и r3. После этого в регистр Z заносим адрес таблицы кодов в которой находится значение цифр для вывода на индикацию. Если значение тысяч при измерении равно нулю то необходимо погасить значение нуля в старшем разряде. После этого заносим значение первой цифры в регистр r0, потом заносится значение второй цифры в r1, потом значение третьей цифры в r2 и значение последней цифры в регистр r3. После этого разрешаем глобальное прерывание. На этом программа заканчивается и происходит выход из подпрограммы индикации. После этого устанавливаем флаг t в 0 и все начинает повторяться. На этом алгоритм работы программы для микропроцессора заканчивается.

7.Программное обеспечение.

Прежде чем писать программу необходимо выбрать микропроцессор и рассмотреть выполняемые им функции. Для поставленной задачи целесообразно взять микропроцессор ATmega48. Отличительными особенностями которого являются:


  • Высококачественный низкопотребляющий 8- битный AVR микроконтроллер

  • Передовая RISC архитектура
- 130 команд, большинство которых выполняется за один тактовый цикл

32 8 битных рабочих регистра общего применения

Полностью статическая архитектура

Производительность до 16 MIPS при тактовой частоте 16 МГц

Встроенный двухцикловый умножитель


  • Энергонезависимая память программ и данных
- 4КБ внутрисистемно программируемой Flash памяти программы, способной выдержать 10 000 циклов записи/стирания

Вспомогательная секция загрузочной программы с независимым битом защиты


  • внутрисистемное программирование встроенной программой-загрузчиком

  • реальная функция считывания при программировании
- 256 байта EEPROM, способной выдержать 100 000 циклов записи/стирания

512 байта встроенной SRAM памяти (статическое ОЗУ)

Программируемая защита от считывания


  • Характеристики периферии
- Два 8- разрядных таймера/счетчика с отдельным предделителем и режимом сравнения

Один 16- разрядный таймер/счетчик с отдельным предделителем и режимом сравнения и режимом захвата

Счетчик реального времени с отдельным генератором

Пять ШИМ каналов

6 10- битных каналов

2 8- битных канала

6 канальный АЦП у приборов в PDIP корпусе

4 10- битных каналов

2 8- битных канала

Программируемый последовательный USART

Ведущий/ведомый SPI интерфейс

Байт- ориентированный последовательный 2- проводный интерфейс

Программируемый сторожевой таймер со встроенным генератором

Встроенный аналоговый компаратор

Прерывание и пробуждение при изменении состояния выводов


  • Специальные характеристики микроконтроллера
- Сброс при включении питания и детектор кратковременных пропаданий питания

Встроенный откалиброванный генератор - Внешние и внутренние источники прерывания

Пять режимов пониженного потребления: Idle, ADC Noise Reduction, Power-Save, Power-down и Standby


  • Порты ввода - вывода и корпусное исполнение
- 23 программируемых линии портов ввода-вывода

32 выводные TQFP и MFL корпуса


  • Диапазон напряжения питания
- от 1.8 до 5.5 В у ATMega48V

От 2.7 до 5.5 В у ATMega48L

От 4.5 до 5.5 В у ATMega48


  • Различный диапазон рабочих тактовых частот
- от 0 до 1 МГц у ATMega48V

От 0 до 8 МГц у ATMega48L

От 0 до 16 МГц у ATMega48


  • Сверх низкое потребление
- Активный режим:

300 мкА при частоте 1 МГц и напряжении питания 1.8 В

20 мкА при частоте 32 кГц и напряжении питания 1.8 В

Режим пониженного потребления

0.5 мкА при напряжении питания 1.8 В

ATMega48 - низкопотребляющие 8 битные КМОП микроконтроллер с AVR RISC архитектурой. Выполняя команды за один цикл, ATMega48 достигают производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности.

AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.

ATMega48 имеют следующие характеристики: 4КБ внутрисистемно программируемой Flash память программы, 256 байтную EEPROM память данных, 512 байтное SRAM (статическое ОЗУ), 23 линии ввода - вывода общего применения, 32 рабочих регистра общего назначения, три гибких таймера/счетчика со схемой сравнения, внутренние и внешние источники прерывания, последовательный программируемый USART, байт- ориентированный последовательный 2- проводный интерфейс, 6 канальный АЦП, 4 канала которых имеют 10- битное разрешение, а 2- 8- битное, программируемый сторожевой таймер со встроенным генератором, SPI порт и пять программно инициализируемых режима пониженного потребления. В режиме Idle останавливается ядро, а SRAM, таймеры/счетчики, SPI порт и система прерываний продолжают функционировать. В Power-down режиме содержимое регистров сохраняется, но останавливается задающий генератор и отключаются все внутренние функции микропроцессора до тех пор, пока не произойдет прерывание или аппаратный сброс. В режиме Power-save асинхронные таймеры продолжают функционировать, позволяя отсчитывать временные интервалы в то время, когда микропроцессор находится в режиме сна. В режиме ADC Noise Reduction останавливается вычислительное ядро и все модули ввода-вывода, за исключением асинхронного таймера и самого АЦП, что позволяет минимизировать шумы в течение выполнения аналого-цифрового преобразования. В Standby режиме задающий генератор работает, в то время как остальная часть прибора бездействует. Это позволяет быстро сохранить возможность быстрого запуска приборов при одновременном снижении потребления.

Прибор изготовлен по высокоплотной энергонезависимой технологии изготовления памяти компании Atmel. Встроенная ISP Flash позволяет перепрограммировать память программы в системе через последовательный SPI интерфейс программой-загрузчиком, выполняемой в AVR ядре, или обычным программатором энергонезависимой памяти. Программа-загрузчик способна загрузить данные по любому интерфейсу, имеющегося у микроконтроллера. Программа в загрузочном секторе продолжает выполняться даже при загрузке области памяти прикладной программы, обеспечивая реальный режим "считывания при записи". Объединив 8- битное RISK ядро и самопрограммирующейся внутри системы Flash памятью корпорация Atmel сделала приборы ATMega48 мощными микроконтроллерами, обеспечивающими большую гибкость и ценовую эффективность широкому кругу управляющих устройств.

ATMega48 поддерживается различными программными средствами и интегрированными средствами разработки, такими как компиляторы C, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и ознакомительные наборы.

7.1.Расположение выводов ATMega48:

Рис.7.1. Расположение конрактов микропроцессора ATmega48

На рисунке 7.1. приведено назначение выводов микропроцессора, но мы будем использовать только часть из них. Так весь порт В настраиваем на вывод и к нему подключаем индикацию для вывода значения цифр. Порт D0-D3 так же настроен на вывод и к нему подключаем индикатор для зажжения четырех знакомест индикатора. Выводы порта D4-D5 настроены на вывод и к нему подключены светодиоды для отображения замыкания фронтового и размыкания тылового контактов и наоборот для размыкания фронтового и замыкания тылового контактов. Вывод порта С0 использована для АЦП. К выводу AREF подключен источник внешнего опорного напряжения, а к выводу AVCC подключен фильтрующий конденсатор для повышения помехозащищенности.

После того как определились с выбором микропроцессора и составлением алгоритма работы необходимо написать программу для него по данному алгоритму.

Для написания программы я буду использовать программное обеспечение под названием Algorithm Builder. Но перед написанием программы рассмотрим это программное обеспечение.

7.2.Среда разработки Algorithm Builder

ПО "Algorithm Builder",была написанна русским программистом Геннадием Громовым. Данная среда обеспечивает полный цикл разработки, начиная от ввода алгоритма, включая отладку, и заканчивая внутрисхемным программированием кристалла. Вы будете иметь возможность разрабатывать программы как на уровне ассемблера, так и на макро-уровне, при котором возможна работа со знакопеременными величинами произвольной длины. Это приближает возможности программирования к языку высокого уровня. Скачать Algorithm Builder ,последнюю версию, можно с сайта автора http://algrom.net/russian.html .

В отличие от классического ассемблера программа вводится в виде алгоритма с древовидными ветвлениями и отображается на плоскости, в двух измерениях. Сеть условных и безусловных переходов отображается графически, в удобной векторной форме. Это к тому же освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Вся логическая структура программы становися наглядной.

Графические технологии создания программы раскрывают новые возможности для рограммистов. Они позволяют вводить программы на плоскости в виде алгоритма с древовидной структурой. В результате вся логическая структура программы становится полностью наглядной. Основным предназначением таких технологий является максимальное приведение интерфейса разработки к природе человеческого восприятия. Освоение такой среды намного проще, чем освоение классического ассемблера. Более удобный интерфейс раскрывает новые возможности для разработки. По оценке пользователей, время создания программного обеспечения сокращается в 3 - 5 раз по сравнению с классическим

Рис. 7.2.1. Гравное окно програмного обеспечения Algorithm Builder.

Ассемблером.

Среда предназначена для работы под ОС Windows 95/98/2000/NT/ME/XP.

Для нормальной работы редактора требуется наличие шрифта “Courier”.

На рисунке 7.2.1. показано, как выглядит главная панель программы "Algorithm Builder".

Конструкция алгоритма

Любое программное обеспечение можно разбить на отдельные логически завершенные фрагменты. Как правило, финальным оператором этих фрагментов являются такие операторы как безусловный переход или возврат из подпрограммы, т.е. операторы, после которых линейное исполнение программы однозначно прекращается. Разработка программного обеспечения в среде Algorithm Builder сводится к формированию таких блоков, размещению их на плоскости и установлению между ними векторных связей из условных и безусловных переходов.

Элементы алгоритма

Для построения алгоритма в Algorithm Builder предусмотрено семь элементов:

FIELD – Поле;

LABEL – Метка;

VERTEX – Вершина блока;

CONDITION – Условный переход;

JMP Vector – Относительный безусловный переход;

SETTER – Настройщик периферийных устройств;

TEXT – Строка локального текстового редактора.

Элемент «FIELD» - поле

Представляет собой отцентрированную в блоке строку. Объект предназначен для записи большинства операторов микроконтроллера. Для того чтобы добавить поле, выберите либо пункт меню “Elements\Field”, либо нажмите кнопку на панели инструментов, либо клавишу “Alt+F”, либо клавишу “Enter” (если курсор находится вне локального текстового редактора).

В представленном ниже примере алгоритма элементы “Field” обведены овалами.

Элемент «LABEL» - метка

Представляет собой вертикальный штрих, расположенный внутри блока операторов и необязательное имя, располагающееся слева или справа от штриха. Предназначена метка для обозначения мест в алгоритме, куда возможно осуществление условных и безусловных переходов. Для добавления метки в блок выберите пункт меню “Elements\Label”, нажмите клавиши “Alt+L” или кнопку на панели инструментов. При необходимости можете назначить конкретный адрес программы. Для этого, перед именем (если оно есть) необходимо записать константу или алгебраическое выражение, которое определяет этот адрес.

Для изменения расположения имени метки на противоположное нажмите клавишу “Tab”.

В приведенном ниже примере элемент “Label” обведен овалом.

Как правило, к метке должен примыкать один из векторов перехода (со стрелкой на конце). В этом

Случае имя метке давать необязательно. Но Algorithm Builder допускает классическую адресацию переходов с использованием имен меток. В этом случае метке имя дать необходимо. Например:

Кроме того, в операторах алгоритма имя метки может быть использовано как константа, содержащая адрес соответствующего места в памяти программы.

Элемент «VERTEX» - вершина блока

По своему отображению и назначению полностью идентичен метке, но, в отличие от нее, задает

Расположение блока на рабочей плоскости и всегда является его началом. Для того, чтобы добавить новую вершину либо выберите пункт меню “Elements\Vertex”, либо нажмите клавиши “Alt+V”, либо нажмите кнопку на панели инструментов, либо левую кнопку мыши, нажав ее на необходимом месте рабочего поля в комбинации с клавишами “Alt+Ctl+Shift”.

В приведенном ниже примере элементы “Vertex” обведены овалами:

Как правило, имя вершине назначается, только если она является началом подпрограммы или макроса.

Элемент «CONDITION» - условный переход

Этот элемент конструктивно наиболее сложный, предназначен для реализации условных переходов. Представляет собой овальный контур, внутри которого вписывается условие перехода и возможный вектор в виде ломаной линии со стрелкой на конце, возле которой возможно необязательное имя вектора.

Конец вектора должен либо заканчиваться на какой-либо метке, или вершине, либо на отрезке другого вектора, либо иметь имя адресуемой метки.

Для того чтобы провести вектор до нужного места, нажмите левую кнопку мыши при нажатой клавише “Alt”. Для редактирования вектора используйте клавиши направления в комбинации с клавишей “Alt”. Для перехода от редактирования условия к редактированию имени вектора нажмите клавишу “Tab”. Последующие нажатия клавиши “Tab” будут менять положение имени вектора на противоположное. Чтобы ввести новый объект, либо выберите пункт меню “Elements\Condition”, либо нажмите клавиши “Alt+C”, либо кнопку на панели инструментов.

В приведенном ниже примере элементы “Condition” обведены овалами:

Элемент «JMP Vector» - безусловный переход

Этот элемент предназначен для реализации коротких безусловных переходов (в базовом ассемблере это оператор “RJMP”). Представляет собой ломаную линию, исходящую из середины блока со стрелкой на конце, аналогичную вектору объекта “Condition”. Чтобы добавить новый безусловный переход, либо выберите пункт меню “Elements\JMP Vector”, либо нажмите клавиши “Alt+J”, либо кнопку на панели инструментов.

В приведенном ниже примере элемент “JMP Vector” обведен линией.

Элемент «SETTER» - настройщик

Этот объект представляет собой серый прямоугольник, внутрь которого вписано имя настраиваемого периферийного компонента микроконтроллера, такого как Таймер, АЦП, регистр маски прерываний и пр. Настройщик предназначен для формирования последовательности операций микроконтроллера, которые обеспечивают загрузку необходимых констант в соответствующие управляющие регистры ввода-вывода в соответствии с выбранными свойствами.

Перед использованием этого элемента тип микроконтроллера должен быть определен (пункт меню “Options\Project options”, закладка “Chip”)

Для добавления в алгоритм настройщика, либо выберите пункт меню “Elements\Setter”, либо нажмите клавиши “Alt+S”, либо кнопку на панели инструментов. Для редактирования уже введенного настройщика, активизируйте редактор двойным щелчком мыши, либо клавишами “Shift+Enter”.

Объект “Setter” является макро-оператором. После компиляции он преобразуется в последовательность команд микроконтроллера, которые обеспечат загрузку необходимых констант в соответствующие управляющие регистры. При этом следует иметь в виду, что в этих операциях будет использован регистр-посредник r16.

Для ряда компонент, например ADC, настройщик может воздействовать на несколько управляющих регистров. В этом случае при необходимости воздействие на каждый конкретный регистр можно заблокировать.

В приведенном ниже примере элементы “Setter” обведены овальной линией.

Элемент «TEXT» - строка локального текстового редактора

Этот элемент представляет собой текстовую строку, начинающуюся от левого края поля алгоритма. Совокупность из нескольких таких строк образует локальный текстовый редактор, окаймленный пунктирными линиями. Правила работы в нем, аналогичны прочим текстовым редакторам.

Строки предназначены для записи в них ряда директив компилятора, а также для комментариев. Для добавления нового локального текстового редактора либо выберите пункт меню “Elements\Text”, либо нажмите клавиши “Alt+T”, либо кнопку на панели инструментов.

Комментарии должны начинаться с двух косых: “//”.

В приведенном ниже примере элементы “Text” обведены овальной линией.

После того как мы знакомились с основными элементами программного обеспечения Algorithm Builder приступим к созданию программы. Для создания нового проекта выберите пункт меню “File\New”. При этом появится первая закладка и на рабочем поле элемент “TEXT”, “VERTEX” и прикрепленный к нему один элемент “FIELD” с пустым оператором (рис.7.2.2.) “NOP”:

Рис. 7.2.2. Окно новогопроекта.

Затем задаем тип микропроцессора, в нашем случае это ATmega48. Для задания типа микропроцессора выбираем пункт меню “Options\Project options…” (рис7.2.3) :

Рис. 7.2.3. Окно опции проекта.

Здесь мы выбираем наш микропроцессор и нажимаем кнопку применить.

После этого основываясь на алгоритме работы составляем программу. Из за того, что программа здесь представляется в виде алгоритма она будет несильно отличатся от уже составленного и описанного выше алгоритма.

Рассмотрим построение программы. Для начала необходимо задать установить счетчик адреса стека на последнюю ячейку SRAM. Сделать это просто, для этого выбираем элемент SETTER где выбираем Stack Point после

Чего выходит окно Control Register Setting (рис. 7.2.4), где устанавливаем

Рис. 7.2.4 Окно настройки стека.

Галочку и нажимаем кнопку Ok. На рабочем поле появился серый прямоугольник SP. Затем производим настройку значений АЦП для чего выбираем элемент SETTER где выбираем Analog to Digits Converter (ADC) после чего выходит окно Control Register Setting (рис. 7.2.4.) в котором и происходит настройка АЦП. Здесь мы задаем предделитель СK/128. Выбираем ножку микропроцессора на который будем подавать значение АЦП. Здесь же выбираем режим работы микропроцессора для чего

Рис. 7.2.4. Окно настроцки АЦП.

Устанавливаем AVCC with external capacitor at AREF pin. На этом настройка АЦП заканчивается.

Теперь настраиваем таймер/счетчик. Для настройки опять заходим в элемент SETTER где выбираем Timer/Counter 0 после чего появляется окно с настройками таймер/счетчика (рис. 7.2.5). Здесь определяем значение предделителя CK/1024 и выбираем один из режимов его работы. В данном случае выбираем режим CTC, то есть сброс при совпадении. В этом режиме счетный регистр тоже функционирует как обычный сум­мирующий счетчик, инкремент которого осуществляется по каждому им­пульсу тактового сигнала clk T 0 . Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяется регистром сравнения OCRO. После достиже­ния значения, записанного в регистре сравнения, счет продолжается со зна­чения «$00». В том же такте сигнала

Рис. 7.2.5. Окно с настройками таймер/счетчика.

Clk T 0 , в котором обнуляется счет­ный регистр, устанавливается флаг прерывания TOV0 регистра TIFR. В регистр OCRO записываем значение 100 по достижению которого произойдет прерывание и программа перейдет по метке Timer_0_Compare_Match_A.

.

Рис 7.2.6. Окно настройки прерывания.

Затем конфигурируем прерывание выбираем прерывание от переполнения. Для этого опять выбираем элемент SETTING где выбираем Timer/Counter interrupt Mask (TIMSK). В появившемся окне в поле Timer/Counter устанавливаем галочку на Output compare A match (рис. 7.2.6). На этом конфигурирование прерывания заканчивается. Теперь производим настройку портов ввода – вывода, так как нам нужно настроить весь порт B на вывод записываем а него значение 255 и устанавливаем его в единицу. Также производим настройку порта D, но здесь мы используем только первые 6 выводов D0 – D5 для этого записываем в него значение 127. Потом устанавливаем на этом выводе значение логического 0. Порт С настраиваем на вход для чего записываем в него 0. На этом настройка портов ввода – вывода заканчивается. Теперь устанавливаем флаг t в 0. Потом устанавливаем первое знакоместо индикатора, в n записываем 0. Затем сбрасываем значение суммы для этого в sum записываем 0. Так же устанавливаем значение делителя записывая в m значение 0. Обнуляем значение частного chast записывая в него 0. После этого разрешаем глобальное прерывание устанавливая во флаг i значение 1.Это позволить прерывать программу через определенное значение тактовых импульсов и переходить на подпрограмму АЦП или таймер/счетчика.

Потом с помощью элемента LABEL (метка) устанавливаем метку и назначаем ей имя start. Затем нажатием на элемент CONDITION (условный переход) и внутрь вписываем условие для перехода, этим условием будет установка флага t в 1. Если флаг t не равен 1 то программы уходит ниже и затем через элемент JMP Vector (безусловный переход) переходим по метке start. Тем самым создаем цикл в котором программа крутится до того как во флаг t занесется 1. Как только флаг t равен 1 программы уходит по стрелке. Ниже находится вход в подпрограмму преобразования двоичного числа в десятичное, чему соответствует надпись Z_to_Digits. После выполнения подпрограммы преобразования двоичного числа в десятичное которую мы рассмотрим ниже программа возвращается после надписи Z_to_Digits, где опять в флаг t заносится 0. Затем опять выбираем элемент JMP Vector и переходим по метке start.

Теперь рассмотрим подпрограмму прерывания АЦП. Переход на подпрограмму АЦП осуществляется через определенное время. Как только АЦП произвел измерения он записал данные в adcl и adch. Данные из этих двух регистров необходимо переписать в другой регистр для дальнейшего преобразования. Этими регистрами будут zl и zh. Для переписи мы будем использовать строчку adcl → zl , соответственно следующая строчка будет adch→ zh. Затем используем элемент CONDITION (условный переход) с условием t=1. Это условие необходимо для запрета на изменение числа пока не произойдет преобразование числа в десятичную форму. Если t=0 то программа проходит ниже где записана строчка x → z это говорит о том, что число хранящееся в регистре z изменится только после вывода числа на индикацию. Затем используя элемент CONDITION (условный переход) создаем условие y
Далее рассмотрим условие y adc_max то и если условие верно то программа переходит по стрелке. Затем производим вывод информации в порты D.5 и D.4. Записывается это как 1 → D.5 . По этой надписи видно, что на выводе порта D.5 выводится значение логической единицы. В следующей строчке 0 → D.4 выводим в порт D.4 значение логического нуля. Затем программа идет про стрелке. Проверка условия x adc_max. Потом записываются три строчки 0 → m, 0 → t, 0 → y следующие друг за другом. В них сбрасываем значения делимого (m), флага t и содержимое регистра y в котором хранится значение измеренного АЦП. Потом опять запускаем АЦП, после чего выходим из подпрограммы АЦП. На этом подпрограмма измерения входного напряжения заканчивается.

Вход в подпрограмму деления находится в подпрограмме АЦП. После того как программа перешла в подпрограмму деления по div32_8 происходит вычисление среднего значения всех измеренных значения АЦП. Первым делом производим обнуление значения содержимого частного. Для этого записывается 0 → chast. Затем вводим условие где флаг С=1. Во флаг С будет занесена единица только после того как содержимое суммы будет меньше делителя. Но так как во флаге С пока содержится 0 программа идет ниже. Ниже записана строчка chast++ в которой мы увеличиваем значение частного на единицу. Потом производим вычитание из регистра содержащего сумму значений АЦП значение делителя. Затем с помощью элемента JMP Vector (безусловный переход) создаем цикл который приходит перед условием где проверяется флаг С. И как только значение суммы будет меньше делителя во флаге С будет записана единица и программа пойдет по стрелке. Потом значение частного переписываем в регистр х. Этому соответствует строчка chast → х. Ниже записана строчка в которой обнуляем значение суммы 0 → sum. На этом подпрограмма деления заканчивается и программа выходит из нее попадая в подпрограмму АЦП после строчки div32_8.

Рассмотрим подпрограмму прерывания по таймеру в которой определяется зажжения четырех знакомест индикатора. После того как произошло прерывание от таймера и программа перешла по метке Timer_0_Compare_Match_A начинается проверка условий значение знакомест индикатора. Для этого с помощью элемента CONDITION (условный переход) проверяем условие n=0 и если оно верно то программа переходит по стрелке. После этого записываем в порт D.3 значение 0 командой 0 → portd.3. Затем выводим число содержащееся в digit_0 в весь пост В для этого записываем digit_0→ portb. И записываем единицу в порт D.0 для зажжения первого знакоместа индикации, в программе это будет выглядеть 1 → portd.0. Затем с помощью элемента JMP Vector (безусловный переход) производим переход по метке m0. Метка m0 стоит после всех условий содержимого n. Затем увеличиваем значение n для того чтобы следующее число выводилось во второе знакоместо индикатора. После этого выходим из подпрограммы таймера. В следующий раз как произойдет прерывание по таймеру программа вернется в нее но пойдет немного по другому, так как необходимо вывести информацию на второе знакоместо индикатора. Это произойдет после проверки условия где в регистре n должно содержатся единица которая записалась после вывода первой цифра и увеличения значения n на единицу. Так как в n записана единица то программа переходит по условию n=1. После перехода по этому условию необходимо выключить первое знакоместо и для этого записываем в порт D.0 значение нуля. В программе этому соответствует строчка 0 → portd.0. Затем также выводим число содержащееся в digit_1 в весь порт В для этого записываем digit_1→ portb. И записываем единицу в порт D.1 для зажжения первого знакоместа индикации, в программе это будет выглядеть 1 → portd.1. Потом переходим по метке m0 и увеличиваем значение n на единицу как было описано выше. Вывод третей и четвертой цифра на индикаторе аналогичен выводу первых двух, но после вывода четвертой цифры обнуляем значение содержимого регистра n. Для этого записываем 0→n . И устанавливаем значение флага t в единицу чем говорится об окончании вывода числа на индикацию. Для этого записываем 1→t. На этом заканчивается полный цикл вывода числа на индикаторе.

Осталось рассмотреть только подпрограмму индикации переход на которую осуществляется только после проверки условия флага t=1 в основной программе. Так как во флаг t занесена единица после вывода последней цифры на индикаторе. При опросе условия программа переходит по стрелке и затем попадает на Z_to_Digits это и является условием перехода в подпрограмму индикации. Программа переходит по метке и попадает в подпрограмму Z_to_Digits. После перехода первым делом отключаем глобальное прерывание для этого в флаг i вводим значение 0. Записывается это как 0→i. Ниже заносим ноль в рабочий регистр temp. в программе это выглядит как 0→ temp. Теперь используя элемент CONDITION создаем условие в котором регистр Z сравниваем с 1000 и как только значение регистра Z будет меньше 1000 программа перейдет по стрелке. А пока регистр Z больше условие не выполняется и программа уходит ниже. Здесь вычитаем из регистра Z тысячу и записываем это как Z – 1000. Потом увеличиваем значение регистра temp на единицу. С помощью элемента JMP Vector создаем цикл который приходит перед условием сравнивания регистра Z. Как только условие выполнилось и регистр Z стал меньше тысячи программа уходит по стрелке. Теперь содержимое регистра temp переписываем в регистр r0 и в нем теперь хранится значение тысяч числа. Запись выглядит как temp→r0. После этого обнуляем значение регистра temp записывая в него 0. Теперь программа повторяется как и в вычислении тысяч, но теперь необходимо вычислить значение сотен. Опять задаем условие Z
После написания программы ее можно проверить в симуляторе которы имеет программная среда Algorithm Builder. Для исполнения алгоритма в симуляторе нажмите клавишу “F9” или кнопку на панели нструментов.

При этом в начале произойдет компиляция и, если отсутствуют ошибки, запустится симулятор. Открытие необходимых окон компонент микроконтроллера делается через пункт меню “View…”. Для наблюдения процессов во введенном алгоритме достаточно открыть окна “Processor”, “PortD” , “Working registers”, “ADC”, “Timer/Counter 0” и “Process time #0” (рис. 7.2.7).

Рис.7.2.7.Вио симулятора Algorithm Builder.

Метка возле оператора означает текущее положение программного счетчика. Метка располагается перед оператором, который должен быть исполнен в следующем шаге. Сразу после запуска, она располагается на первом операторе программы, располагающемся по адресу $0000. При запуске симулятора содержимое рабочих регистров и SRAM всегда заполняется случайными величинами, поскольку в реальном микроконтроллере их содержимое после подачи питания непредсказуемо. Пошаговое исполнение алгоритма с входом в подпрограммы осуществляется кнопкой “F7” или кнопкой на панели инструментов. Пошаговое исполнение без входа в подпрограммы – клавишей “F8” или кнопкой

Рис 7.2.8 Окно программирования кристалла.

Данное программное обеспечение имеет возможность запрограммировать микропроцессор. Algorithm Builder содержит встроенный внутрисхемный программатор, обеспечивающий последовательное программирование микросхем. Выбор пункта меню “Program\Run with Chip” или нажатие клавиш “Ctrl+Shift+F9” или нажатие кнопкина панели инструментов запускает компиляцию алгоритма, и, в случае отсутствия ошибок, открывает окно программирования (рис 7.2.8).

Программирование микропроцессора производится через COM порт.

Операторы алгоритма делятся на две группы.

В первую группу образуют элементарные операторы, реализующие одну элементарную инструкцию микроконтроллера. Программирование с использованием таких операторов обеспечивает разработку программы на уровне ассемблера. В алгоритме эти операторы отображаются обычным (не жирным) шрифтом.

Во вторую группу образуют макро-операторы, которые при компиляции преобразуются в набор необходимых элементарных инструкций микроконтроллера. Макро-операторы позволяют в удобной форме осуществлять более сложные преобразования, в том числе многобайтные.

Операторы алгоритма в основном записываются в объектах “Field”, условные переходы реализуются посредством объекта “Condition”, а безусловный переход – посредством объекта “

JMP Vector”. Формат записи операторов существенно отличается от классического ассемблера. Он построен по визуально-функциональному принципу и содержит образ выполняемого действия. Запись операторов должна соответствовать шаблону, воспринимаемому компилятором.

Ниже, в таблице, приведены шаблоны всех возможных элементарных операторов для микроконтроллеров AVR. Следует иметь в виду, что некоторые простые типы микроконтроллеров содержат не весть представленный набор.

Символ “#” в шаблоне операторов предполагает константу, представленную либо непосредственно, либо в виде алгебраического выражения, “Rd” и “Rr” – рабочие регистры, “Pn” – регистр ввода-вывода.

Операторы представлены в виде таблицы.

Операнд Комментарий

R Рабочий регистр, стандартный или объявленный в секции Working registers: (...)

# Константа (...)

SRAM Var Переменная, объявленная в секции SRAM: (...)

EEPROM Var Переменная, объявленная в секции EEPROM: (...)

[#] Ячейка SRAM, адресуемая непосредственно

[X] Ячейка SRAM, адресуемая косвенно, по X

[--X] Ячейка SRAM, адресуемая косвенно, по X с предекрементом

Ячейка SRAM, адресуемая косвенно, по X с постинкрементом

[Y] Ячейка SRAM, адресуемая косвенно, по Y

[--Y] Ячейка SRAM, адресуемая косвенно, по Y с предекрементом



Ячейка SRAM, адресуемая косвенно, по Y с постинкрементом

Ячейка SRAM, адресуемая косвенно, по Y со смещением адреса на # байт

[Z] Ячейка SRAM, адресуемая косвенно, по Z

[--Z] Ячейка SRAM, адресуемая косвенно, по Z с предекрементом

Ячейка SRAM, адресуемая косвенно, по Z с постинкрементом

Ячейка SRAM, адресуемая косвенно, по Z со смещением адреса на # байт

P Регистр ввода-вывода (...)

EE[#] Ячейка EEPROM адресуемая непосредственно

Операнды, отмеченные как (...) могут быть объявленными многобайтными. Допускается подстановка операндов разного формата. При этом, если операнд, принимающий результат операции короче другого, то размерность операции будет ограничена наименьшим, в противоположном случае, в недостающие байты будут заполнены нулями. Следует иметь в виду, что для корректности операции, с величинами у которых учитывается знак, у обоих операндов должен быть одинаковый формат, в противном случае, отрицательное число может быть искажено. Формат операндов в макро-условиях должен быть только одинаковый.

Операнды с косвенной адресацией являются однобайтными. Для многобайтных операций с косвенной адресацией необходимо приведение их формата. Для этого к записи необходимо добавить двоеточие и объявление формата, например:

#hAB3E->[Y]:Word

такой макро-оператор будет преобразован в следующую последовательность операторов:

В многобайтных макро-операторах, кроме сдвигов вправо, действия начинаются с младшего байта (в операторах сдвига вправо – со старшего). Учитывая это, существуют ограничения на возможность создание макро-операций с косвенной адресацией:

Для операций, которые начинаются с младшего байта невозможно использование операндов с предекременом, например: [--X]:Word+24000

Для операций, которые начинаются со старшего байта (сдвиги вправо) невозможно использование операндов с постинкрементом, например: :Int24>>

Кроме того, невозможно создание многобайтного макро-оператора с операндом [X], поскольку для регистра X в системе команд AVR отсутствуют косвенная адресация со смещением (

). Используйте или [--X].

Если создание макро-операции окажется невозможным, то компилятор выдаст сообщение: “

Such macro-operation can not be created” (“Такая макрооперация не может быть реализована”).

Макро-операторы записываются исключительно в объектах “Field”. Шаблоны возможных макро-операторов представлены в таблице:

Шаблон Коментарий

* -> * Копирование

* + * Арифметическое сложение

* - * Арифметическое вычитание

* & * Побитная операция “И”

* ! * Побитная операция “ИЛИ”

* ^ * Побитная операция “Исключающее ИЛИ”

* Сброс (запись нуля)

* ++ Инкремент

* -- Декремент

- * - Побитная инверсия

* >> Логический сдвиг вправо

> * >> Логический сдвиг вправо с переносом

± * >> Арифметический сдвиг вправо

<< * Логический сдвиг влево

<< * < Логический сдвиг влево с переносом

При использовании операндов, принадлежащих к EEPROM, компилятор автоматически загрузит необходимый код, обеспечивающий чтение и запись в нее. При этом следует иметь в виду, что если производится запись в EEPROM, то в код включается ожидание окончания записи. При работе это потребует несколько миллисекунд.

При компиляции макро-операторы преобразуются в набор элементарных инструкций микроконтроллера. При этом для реализации такого набора, как правило, используются регистры-посредники r16 и r17. Поэтому, при использовании макро-операторов, во избежание недоразумений, эти регистры использовать не рекомендуется и в подпрограммах обработки прерываний целесообразно их содержимое предварительно сохранять в стеке.

Если в макро-операторе предполагается операция с непосредственной константой, то в этом случае целесообразнее использовать рабочие регистры, объявленные в старшей половине. В противном случае будут использоваться промежуточные инструкции загрузки частей константы в регистр r16. Это может привести к увеличению размера кода, вплоть до удвоения, хотя ошибочной такая запись не будет.

Следует иметь в виду, что возбуждаемые макро-операциями флаги неадекватны аналогичным операциям на уровне элементарных операций микроконтроллера и их использование для условий переходов будет некорректно.

Для реализации циклов удобно использовать макро-условие: “R--”. Оно включает в себя декремент однобайтного регистра и ветвление, если результат не равен нулю.

Объект “Label” – (метка)

Представляет собой вертикальный штрих, расположенный внутри блока операторов и необязательное имя, располагающееся слева или справа от штриха. Предназначена метка для обозначения мест в алгоритме, куда возможно осуществление условных и безусловных переходов. Для ее введения, необходимо либо выбрать пункт меню “Object\Label”, либо нажать клавиши “Alt+L”, либо нажать кнопку с изображением буквы L на панели инструментов. При необходимости метке может быть назначен конкретный адрес программы, для этого перед именем (если оно есть) необходимо записать константу или алгебраическое выражение, которое определяет этот адрес. Для изменения расположения имени метки на противоположное нажмите клавишу “Tab”.

Метки обслуживания прерываний.

Для удобства программирования Algorithm Builder поддерживает специальный вид меток – метки обслуживания прерываний. Для обслуживания прерывания обычным путем необходимо размещение по адресу вектора прерывания кода безусловного перехода на соответствующую подпрограмму. При использовании специального вида меток компилятор проделывает все это автоматически. Для этого вам необходимо дать метке (вершине) стандартное имя прерывания, и пометить ее как макро-образование, нажав клавишу “F2”, при этом имя будет отображаться жирным шрифтом. Тот же результат можно проще получить, выбрав пункт меню “Objects\Interrupt vectors\…”.

Встретив хотя бы одну такую метку, компилятор заполнит свободное пространство векторов прерывания кодом возврата из подпрограммы обслуживания прерывания (“RETI”), а по соответствующему прерыванию адресу разместит код безусловного перехода на данную метку.

Объект “Vertex” – (вершина блока)

По своему отображению и назначению полностью идентичен метке, но, в отличие от нее, задает расположение блока на рабочей плоскости и всегда является его началом. Для того, чтобы создать вершину необходимо либо выбрать пункт меню “Object\Vertex”, либо нажать клавиши “Alt+V”, либо нажать кнопку с изображением буквы V на панели инструментов, либо с помощью мыши, нажав левую кнопку на необходимое место поля в комбинации с клавишами “

Alt+Ctl+Shift”.

Объект “Condition” – (условный переход)

Конструктивно наиболее сложный. Предназначен объект для реализации условных переходов. Представляет собой овальный контур, внутри которого вписывается условие перехода и возможный вектор в виде ломаной линии со стрелкой на конце, возле которой возможно необязательное имя вектора. Для того, чтобы вектор был правильно адресован, его конец должен либо заканчиваться на метке, или вершине, или на отрезке другого вектора, либо иметь имя адресуемой метки.

Редактирование вектора производится либо при помощи клавиш направления в комбинации с клавишей “Alt”, либо при помощи мыши при нажатой левой кнопке так же в комбинации с клавишей “Alt”. Для перехода от редактирования условия к редактированию имени вектора и, затем, изменения его расположения на противоположное, нажмите клавишу “Tab”. Для того, чтобы ввести новый объект, необходимо либо выбрать пункт меню “Object\Condition”, либо нажать клавиши “Alt+C”, либо нажать кнопку с изображением буквы C на панели инструментов.

Операторы условного пропуска следующего оператора.

Здесь возможны три варианта конструкции объекта “Condition”:

1. Вектор объекта отсутствует, а имя вектора – либо отсутствует, либо содержит зарезервированное слово “Skip”. В нижеследующих примерах выполнение операции:

“[X]->r2” будет пропущено, если выполнится условие “r1=r2”.

“[X]->r2”

2. Записывается инверсное условие, вектор отсутствует, а подлежащая пропуску инструкция вписывается как имя вектора. В этом случае объект будет интерпретирован как: выполнить инструкцию, если условие выполняется. Нижеследующие примеры полностью идентичны.

“[X]->r2”

3. Если последующая инструкция является коротким безусловным переходом (RJMP), допускается запись инверсного условия, а вектор этого условия будет интерпретирован как последующий безусловный переход, таким образом, объект будет интерпретироваться как: произвести короткий безусловный переход, если условие выполняется. Далее приводятся три полностью идентичных примера.

R1=R2 стрелка к той строку куда необходимо перейти

Отладочная среда AVR STUDIO.

Отладочная среда разработки приложений для микроконтроллеров семейства AVR содержит:

  • Транслятор ассемблера (Atmel AVR macroassembler)
  • Отладчик (Debugger)
  • Программное обеспечение верхнего уровня для поддержки внутрисхемного программирования.(In-System Programming) ISP)

Отладочная среда поддерживает выполнение программ как в виде ассемблерного текста так и в виде исходного текста языка С. Отладочная среда AVR поддерживает все типы микроконтроллеров AVR и имеет два режима работы:

  • режим программной симуляции
  • режим управления различными типами внутрисхемных эмуляторов фирмы Atmel (In Circuit Emulators)

Интерфейс пользователя не изменяется при выборе между режимами отладки.

Отладочная среда AVR STUDIO позволяет производить отладку приложений с использованием встроенного программного симулятора или внешнего внутрисхемного эмулятора При запуске происходит автоматическое определение наличия эмулятора на одном из последовательных портов компьютера. При обнаружении эмулятора выбирается базовая система отладки При отсутствии эмулятора отладка выполняется на встроенном программном симуляторе AVR.

Внутрисхемный эмулятор позволяет производить отладку приложения непосредственно на готовом изделии. при работе в режиме реального времени отладка на эмуляторе осуществляется быстрее чем в программном симуляторе. информация о текущем режиме отладки выводится в строке состояния AVR STUDIO

В AVR STUDIO для отладки программ предусмотрены две команды пошагового режима Step Over и Trace into Разница между ними в том что команда Step Over не работает в подпрограммах.

Для наблюдения за работой программы предусмотрен режим открытия нескольких окон окна открываются через меню View или кнопок на панели инструментов.

отладочная среда не поддерживает следующие режимы и узлы МК

  • аналого цифровой преобразователь
  • аналоговый компаратор
  • режим часов реального времени
  • режим пониженного энергопотребления

Для аппаратной поддержки AVR STUDIO применяются

  • стартовые и специализированные наборы разработчика
  • внутрисхемные программаторы
  • внутрисхемные эмуляторы

В процессе отладки можно инициализировать внутренне ОЗУ и EEPROM (в трансляционном файле формата.EEP) или сохранять их содержимое в формате.HEX Для этого служит пункт Up/Download Memory в меню File

Через меню File можно открывать выполненные другими пользователями прошивки Open распечатывать написанные программы Print проверять состояние устройств подключенных к последовательному порту COM Port setting .

Меню Tool инструменты содержит команды запуска управляющих программы

меню View содержит средства просмотра:

  • ячеек памяти программ Program Memory
  • памяти данных окно Data
  • EEPROM окно Eeprom
  • регистров портов ввода вывода окно new IO
  • хода исполнения программы окно Memory
  • контроля за изменениями переменных Watch
  • отображения состояния программного счетчика, указателя стека содержимого регистра статуса SREG и индексных регистров X, Y и Z текущего времени исполнения программы тактовой частоты ядра микроконтроллера окно Processor
  • просмотра состояния регистров Registers (Если в процессе выполнения программы в очередном цикле значение, какого либо регистра изменится то этот регистр будет выделен красным цветом. При этом если в следующем цикле значение регистра останется прежним то цветовое выделение будет снято. Аналогичный контроль за изменениями применен в окнах ввода вывода памяти и переменных.)
  • контроля за состоянием периферийных устройств окно I/O window

Меню Edit правка аналогична стандартному текстового редактора.

Меню Windows позволяет регулировать размещение открывающихся окон

Help содержит справочную информацию на английском языке

project позволяет открывать и создавать новые проекты и сохранять их содержимое

Меню debug отладчик позволяет осуществлять

breakpoint регулирует выбор точек останова

Trace& triggers осуществляет трассировку

Option позволяет осуществлять симуляцию или эмуляцию программы

Создание программы

Открыть AVR studio 3.56

Открыть меню новый проект в меню проект в появившемся окне create new project ввести имя проекта в строку project name. Это же имя будет автоматически скопировано в окно initial file

Для определения папки в которой будет находится проект необходимо щелкнуть на кнопке …. Справа от окна location в открывшемся окне select folder в строке current folder необходимо написать имя папки. И щелкнуть на select после чего произойдет возврат в окно create new project

Затем выберите тип проекта Atmel AVR Assembler à Next à select deug platform and device à debug platform à avr Simulator в окне device тип микроконтроллера если частота будет выше появится сообщение

Таким образом мы активируем окно ассемблера с проетом

Символ “. “ директива ассемблера

«;» коментарии не влияющие на работу программмы

F2 поиск маркеров команд в программе

Ctrl +F2 установка маркеров отладчика

F7 ассемблирование программы с сохранением в формате. hex

F11 отладка открытие workspace

Shift +F5 – Reset сброс

Ctrl +F5 - Break назад остановка отладки

F9 – установка метки точки останова

F5 – выполнение программы до точки останова

Ctrl +F10 переход к выполнению команды помеченной курсором

Трансляция и проверка правильности написания.

Project à AssembleàProject Output в этом окне содержатся информация о количестве слов кода и данных о наличии ошибок и другая информация. Для локализации ошибок надо установить курсор мыши на сообщение и два раза щелкнуть левой кнопкой мыши. В результате курсор будет установлен на строку вызвавшую сообщение об ошибке и эта строка будет выделена цветом. Если исходный ассемблерный текст содержал сегмент энергонезависимых данных то при трансляции будет создан файл с разрешением.еер. Этот файл содержит даннные для внутренней ЕЕPROM МК и имеет тот же формат что и выходной файл.

Результатом трансляции является выходной файл

Отладка проекта

Для отладки необходим объектный файл object

Запуск отладчика выполняется через процедуру

Build and run на панели управления

В начале осуществляется трансляция входного ассемблерного файла при которой генерируется и объектный файл а затем объектный файл помещается в отладчик.

Для старых версий предусмотрен вариант трансляции объектного файла на при этом варианте нельзя редактировать исходный файл программы непосредственно в отладчике

Для генерации объектного файла необходимо указать формат выходного файла транслятора

При первом запуске отладчика в окнеOption à Simulator Option выбирается тип микроконтроллера Device и частота процесссорного ядра frequency

В процессе отладки программа может выполняться

Полностью debug àavto step

В пошаговом режиме debug àtrace

Трассируя блоки функций debug àmulti step

До точки указанной курсором debug àRun to cursor

По точкам останова breakpoints à toggle Breakpoint

Для отладки в пошаговом режиме применяются команды

Ster Over (не работающая в под программах) и trace into

Просмотр программы осуществляется в меню View вид, регистров registers, переферийных устройств в окне I /O Windows

Лекция 15 программаторы Программатор ХХХ prog

Программатор поддерживает следующие форматы файлов:

Standard/Extended Intel HEX

Они предназначены для программирования:

· микросхем памяти ,

· внутреннего ППЗУ микроконтроллеров,

· микросхем программируемой логики (только для ChipProg+, MultiProg).

Программатор рассчитаны на совместную работу с IBM PC совместимым компьютером. Связь с компьютером осуществляется через стандартный принтерный порт.

Порядок работы с программатором:

· Удалить микросхему из колодки программатора (если она была

установлена).

· Подключить программатор к сети переменного тока 220В.

Для MultiProg переключателем на корпусе программатора включить

питание. Должен загореться зеленый светодиод, индицирующий подачу

питания на программатор.

· Подсоединить программатор к стандартному принтерному порту

компьютера c помощью кабеля связи, входящему в комплект поставки

программатора.

· На компьютере запустить программную поддержку xxxProg.

· В программной поддержке установить требуемый тип микросхемы.

· Установить микросхему в розетку программатора (микросхемы

устанавливаются в розетку в соответствии с рисунком на корпусе

программатора).

· Выполнить необходимые действия с микросхемой. Если в

процессе работы с микросхемой на корпусе программатора загорится красный

светодиод "ALARM", а на экране компьютера появится предупреждающее

сообщение о срабатывании схемы защиты тока, то это означает, что

микросхема неисправна.

· Перед выключением программатора или сменой типа микросхемы

необходимо удалить микросхему из розетки.

· Выключить питание программатора.

· Отсоединить программатор от компьютера.

Интерфейс связи программатора с компьютером разработан с таким учетом, чтобы не только минимизировать нагрузку на порт компьютера, но и позволить производить коммутацию программатор - компьютер в любой последовательности.

Программное обеспечение xxxProg в плане взаимодействия с микросхемами построено по классической схеме программаторов "файл" - "буфер" - "микросхема". В программной поддержке программатора реализованы буфера памяти. Буфер памяти является промежуточным звеном между файлом и микросхемой:

Файл <----> Буфер <----> Микросхема

Одним из основных элементов программатора являются буфера памяти. Буфер памяти - это объект, предназначенный для хранения данных. Буфер памяти программатора является промежуточным звеном между файлом и микросхемой.

В xxxProg реализована гибкая структура буферов памяти:

· допускается создания бесконечного количества активных буферов.

Ограничением на количество может служить только отсутствие свободной

памяти в системе.

· каждый буфер в своем составе имеет определенное количество

подслоев. Каждый подслой ассоциируется с конкретным адресным пространством

установленной микросхемы.

Например,

- для микросхемы Intel 87C51FA каждый буфер имеет в своем составе

два подслоя: подслой кодовой памяти и подслой таблицы кодирования

(encryption table);

- для микросхемы Microchip PIC16F84 каждый буфер имеет в своем

составе три подслоя: подслой кодовой памяти, подслой памяти данных

EEPROM, подслой пользовательских идентификаторов.

· допускается иметь неограниченное количество окон просмотра

содержимого каждого буфера.

Такая гибкая реализация системы буферов позволяет пользователю очень легко манипулировать с несколькими разными массивами данных, поместив их в разные буфера. Все операции с файлом (загрузка/сохранение файла) взаимодействуют только с буфером. Т.е. можно загрузить файл в буфер, а также сохранить содержимое буфера в файл. Аналогичным образом построено взаимодействие с микросхемой. Все манипуляции с микросхемой (как, например, чтение, запись, сравнение) используют только буфер. Таким образом, можно прочитать микросхему в буфер, записать содержимое буфера в микросхему, сравнить содержимое буфера и микросхемы и т.п. Взаимодействие файла и микросхемы напрямую не допускается.

В программаторе реализована система тестов работоспособности, позволяющая уже на этапе инициализации выявить отказы аппаратуры и, тем самым, предотвратить возможный вывод из строя микросхем пользователя.

Система тестов разделена на две группы:

· тестирования качества связи с аппаратурой программатора,включает в себя только тестирование качества связи с аппаратурой программатора.

· полное тестирование всей аппаратуры программатора.включает в себя полное тестирование всей аппаратуры программатора. Она запускается сразу по окончании работы первой группы тестов. При выполнении полного тестирования на тестовой DIP колодке программатора появляются различные тестовые сигналы, способные вывести из строя установленные в нее микросхемы. Поэтому, перед активизацией теста, пользователь будет предупрежден о необходимости удаления микросхемы из колодки.

При выявлении тестовой системой дефекта оборудования, пользователь будет предупрежден о случившемся, и дальнейшая работа с программатором окажется невозможной.

Думаю, в наше время нет радиолюбителя, который никогда не сталкивался с микроконтроллерами. Рано или поздно, но это происходит. Когда я в первый раз увидел схему с микроконтроллером, тут же закрыл страницу браузера, с мыслью: "А, все равно не соберу". Но время шло, схем с применением микроконтроллеров становилось все больше, и я все-таки решил начать. На деле все оказалось совсем не таким сложным, как я думал.

Для начала давайте разберемся: что вообще такое микроконтроллер (МК)? По сути, это миниатюрный компьютер, предназначенный для выполнения простейших задач. Все необходимое для работы микроконтроллера заключено в одном корпусе. В микроконтроллере имеется различная периферия - порты ввода\вывода, таймеры, интерфейсы связи и т.д. Микроконтроллер имеет три вида памяти, это RAM (оперативная память), FlashROM (Память программы), EEPROM (энергонезависимая память).

Главное отличие микроконтроллера от обычной микросхемы - это то, что микроконтроллер работает не по жесткой логике, установленной на заводе, а программируется. Программа, классически пишется в специальной среде на компьютере на одном из языков программирования, после чего переводится на машинный язык(компилируется) и записывается в память контроллера. В этом курсе все будет немного по-другому - программа будет не писаться, а буквально рисоваться в виде блок-схемы. Благодаря такому подходу программа выглядит более наглядно, а время на разработку программы сокращается в 3-5 раз, по сравнению с классическими приемами программирования.

Algorithm Builder - среда программирования

Algorithm Builder производит полный цикл разработки, начиная от ввода алгоритма, включая процесс отладки и заканчивая записью программы в память.

Начнем с краткого обзора интерфейса программы

Главное меню

  • Файл. Служит для открытия, сохранения, закрытия проектов и отдельных алгоритмов, а так же выхода из программы.
  • Редактировать. Действия, связанные с редактированием алгоритма: вырезать, копировать, выделить и т.д
  • Отображение. Переключение алгоритм/таблица с переменными(о ней ниже) + шаблоны операций и условий.
  • Поиск. Тут пояснять не нужно.
  • Элементы. Алгоритм рисуется из специальных элементов: Текст, Вершина, Поле, Метка, Условие, Вектор б/у (безусловного) перехода, Настройщик. Со всеми ними мы познакомимся в процессе обучения. В меню находится еще несколько важных пунктов: Деактивировать, Макро, Прерывания. Деактивировать - данный компонент не будет компилироваться. Макро - для создания макросов. Прерывания - содержит список названии всех прерываний микроконтроллера. Об этой функции вы узнаете в следующих уроках, сейчас лишь скажу, что это чрезвычайно важная и необходимая для работы вещь.
  • Программа. Действия, связанные с программой - компиляция (перевод на машинный язык), симуляция работы программы, чтение памяти контроллера (Flash и EEPROM) и т.д.
  • Опции. Настройки проекта и среды.
  • ?. Информация о Algoritm Builder и справка.

Панель инструментов

В пояснениях не нуждается. При наведении курсора на элементы панели всплывают подсказки.

Открытый проект

Тут есть особенность. Нельзя открыть два проекта одновременно.Чтобы открыть/создать новый проект нужно закрыть старый. После открытия проекта вы можете открыть/создать лишь отдельный файл-алгоритм. Файл проекта имеет расширение.alp, а отдельный файл-алгоритм имеет расширение.alg

Работа с переменными и константами

Организуется в виде специальной таблицы (переключить можно клавишей F12, либо через меню, либо клавишей на панели инструментов). Таким образом, сам алгоритм освобождается от лишних записей.

Огромное число меток, благодаря которым возможны переходы от одной части программы к другой, сильно загромождают код, и наглядность программы теряется. В Algorithm Builder переходы осуществляются намного проще - стрелкой (вектором) . Но переходы по именованным меткам так же возможны.

Симуляция работы программы

Симулятор показывает все изменения, происходящие внутри виртуального микроконтроллера. Что бы проверить работу программы не обязательно даже покупать микроконтроллер! Симуляция может выполняться пошагово (с заходом в функции или нет), до установленной точки останова или до выделенного участка.

Отладка

Algorithm Builder обладает системой мониторной отладки на кристалле (On Chip debug) которая позволяет наблюдать содержимое памяти реального микроконтроллера в заданных точках. При этом для связи микроконтроллера с компьютером используется всего одна ножка микроконтроллера, причем по выбору пользователя. Мониторная отладка может быть применена практически к любому микроконтроллеру. Это программный вариант протокола debugWIRE.

Так почему же Algorithm Builder малоизвестен среди радиолюбителей? Во-первых, до 2010 программа была платной. Сегодня ПО распространяется абсолютно свободно. Во-вторых, отсутствие официальной поддержки программы. Вы не найдете ни одного апнота производителя в котором бы использовался Билдер. Интернет ресурсы, посвященные данной программе, можно пересчитать по пальцам.

Стоит немного рассказать о необходимых материалах и инструментах

Первое что понадобится - это паяльник . Основной инструмент радиолюбителя. Мощность паяльника должна быть в приделах 30-60 Вт. Почему нельзя больше? Мощный паяльник нагревается сильней, и повреждает дорожки платы и применяемые детали. Да и паять им не так удобно - такой паяльник намного больше и тяжелее.

Для того, чтобы загрузить программу в микроконтроллер нужен программатор - в простейшем варианте состоит всего из нескольких резисторов и диодов (на порт LPT и COM). Если у Вас на компьютере нет порта COM либо LPT, USB программатор можно заказать на , DealExtreame или (Поисковой запрос"avr programmer"; стоит примерно 4-6$). О выборе и сборке программатора я напишу в следующем уроке.

Если две предыдущие программы я рекомендовал как оптимальный вариант для начала работы с электроникой вообще и микроконтроллерами в частности, то эта программа лишь мое личное предпочтение и честно говоря, для повторения конструкций с этого ресурса она Вам не понадобится. Но не упомянуть приятную во всех отношениях программу я не могу.

Итак что имеет Algorithm Builder в своем арсенале?
Полный цикл разработки. Algorithm Builder предназначен для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла.

Algorithm Builder довольно нетрадиционная программа в плане языка программирования. Автор немного лукавит, называя программу Построителем Алгоритмов. На самом деле, алгоритма, в привычном понимании этого слова, нет. Есть ассемблер, завернутый в красивую обертку визуального программирования. Правильнее было бы назвать программу – визуальный ассемблер или построитель ассемблера. А раз это ассемблер то Вы получите на выходе максимально эффективный код.


Работа с переменными
и константами организована гениально просто. Инициализация производиться в отдельном окне в виде таблицы – освобождая алгоритм от лишних записей. В буквальном смысле слова все разложено по полочкам. Удобно иметь в любой момент под рукой перечень всех переменных и констант.

Настройщик периферии. Algorithm Builder имеет удобный настройщик периферии (таймеры, UART, ADC, SPI и т.д.) позволяющий, не читая даташитов, просто выбрать необходимые параметры работы устройства в окне настройки. В этом же окне Билдер честно покажет набор инструкций, обеспечивающих эти параметры.


Переходы
осуществляются в программе очень наглядно – вектором. Если нужно перейти по условию в какую либо точку программы – просто проведите вектор в эту точку. Это освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Переходы по именованным меткам так же возможны.

Внутрисхемное программирование кристалла. При использовании внутрисхемного программатора микроконтроллер подключается к COM порту компьютера через несложный адаптер (три диода и несколько резисторов).Также есть вариант USB подключения. Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в кристалле. Процесс программирования кристалла очень прост — в два «тыка».

Мониторная отладка на кристалле. Algorithm Builder обеспечивает мониторную отладку на кристалле (On Chip debug) которая позволяет наблюдать содержимое реального кристалла в заданной точке останова. При этом для связи микроконтроллера с компьютером используется только один вывод, причем по выбору пользователя. Мониторная отладка может быть применена к любому типу кристалла, имеющего SRAM. Это софтверный вариант debugWIRE. Я без этой штуки просто не представляю себе отладку программ.

Так почему такая хорошая программа так малоизвестна?
Первая причина — программа до 2010 года была платной. Бесплатная демоверсия имела полную функциональность, но ограничивала код откомпилированной программы до 2 килобайт. В 2010 году автор программы сделал новогодний подарок – версия 5.43 вышла свободной от ограничений.
Вторая причина — отсутствие поддержки программы. Вы не найдете ни одного апнота производителя в котором бы использовался Билдер. Интернет ресурсы, посвященные данной программе, можно пересчитать по пальцам.
Жаль, конечно – программа действительно интересна.

Выводы:
Ассемблерщики при переходе на Algorithm Builder будут писать кипятком, так как они будут иметь все тот же ассемблер, но управляться им станет на порядок легче и наглядней. Одно плохо – придется распрощаться с наработанными библиотеками и писать новые.
Сишникам однозначно Билдер не понравится, так как придется опускаться до уровня ассемблера, а какому сишнику понравится возюкаться с регистрами.
Наверное, наилучшая целевая аудитория — начинающие осваивать микроконтроллеры. Программа проста и поэтому будет легко осваивать программирование.
В общем, конечно, выводы получились неоднозначные. Думайте сами… 🙂

Программа имеет мануал, написанный в форме обучающей статьи. В мануале рассмотрено создание простого проекта – вольтметра, даны схемы программаторов COM и USB. Скачать версию без ограничений можно здесь

Среда визуального программирования


Кому интересно посмотреть мануал, а устанавливать программу лениво – вот выкладываю его отдельно


Программа активно развивается, поэтому смотрите свежие версии на сайте программы www.algrom.net . Кроме того, там же есть небольшая подборка библиотек.

P.S. Программа портативная. Тесть после установки папку с программой скидываем на флешку и работаем с нее.

(Visited 17 675 times, 18 visits today)

Вам также будет интересно:

Читы и консольные команды для Counter-Strike: Global Offensive Команда в кс го чтобы летать
В этой статье мы рассмотрим некоторые из наиболее полезных и забавных консольных команд в...
Arduino и четырехразрядный семисегментный индикатор Семисегментный индикатор 4 разряда распиновка
В сегодняшней статье поговорим о 7-сегментных индикаторах и о том, как их «подружить» с...
«Рабочие лошадки» Hi-Fi: собираем бюджетную систему Хороший бюджетный hi fi плеер
Выбор плеера - это сложный процесс, иногда человек желает получить не просто коробочку,...
Как правильно пользоваться сургучными печатями
На самом деле, сургуч - это смесь смол, окрашенная в определенный цвет. Если у вас на руках...
Лагает fallout 4 как снизить графику
10 ноября состоялся релиз долгожданной игры на ПК, PlayStation 4 и Xbox One, и постепенно...