Программирование avr микроконтроллеров: Программирование микроконтроллеров AVR для начинающих

Содержание

Логические операции | Программирование микроконтроллеров AVR ⋆ diodov.net

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

Логические операции

Логические операции отличаются от математических операций, но не в сторону усложнения, а в сторону упрощения. Всего их существует 6 «штук». Мы не будем рассматривать углубленно данную тему, изучим только с позиции, необходимой для программирования МК AVR, но база – есть база, – для всех одинакова.

Сдвиг вправо >>

С помощью данной команды все биты регистра сдвигаются вправо на количество позиций, указанной справа после знака >>. Например, присвоим двоичное значение порту D микроконтроллера:

PORTD = 0b00011100; // начальное значение

Теперь применим операцию сдвига вправо на три разряда

PORTD >> 3; // выполнение операции сдвига

В итоге получим следующее значение в порте D:

PORTD == 0b00000011; // результат

Обратите внимание, что применяя операцию сдвига, освободившиеся разряды заполняются нулями, а вышедшие за пределы биты теряются.

Еще один пример.

PORTD = 0b00011100;

PORTD >> 1;

Результат:

PORTD == 0b00001110;

Сдвиг влево <<

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

Пример:

PORTD = 0b00011100;

PORTD << 3;

Результат:

PORTD == 0b11100000;

Еще один пример:

PORTD = 0b00011100;

PORTD << 1;

Результат:

PORTD == 0b00111000;

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

Логическая ИЛИ |

Операция | ИЛИ выполняет сравнение двух битов. Если хотя-бы один из них или они оба имеют истинное значение, то есть единицу, то результат будет истинна – единица. Результатом будет ноль (ложь), когда оба разряда равны нулю.

 00011100

|01001001

Результат

01011101

Операцию ИЛИ можно представить на примере двух выключателей, соединенных параллельно. Чтобы светодиод засветился достаточно замкнуть один любой выключатель. Разомкнутый выключатель – это аналог ложного состояния (ноль), а замкнутый – истинна (единица).

Логическая И &

Результатом сравнения двух чисел будет единица (истинна), только в том случае, когда оба бита имеют истинное значение. В противном случае получим ноль.

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

  01010101

Логическая НЕ ~

НЕ – самая простая команда, ее еще называют инверсия или отрицание, изменяющая биты на противоположные значения, то есть выполняющая их инверсию или инвертирование:

~00011100

 11100011

Теперь мы рассмотрели все 6-ть необходимых операций и можем с пониманием задействовать их при программировании микроконтроллеров AVR.

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

Еще статьи по данной теме

Программирование AVR микроконтроллеров через CodeVisionAVR

Пример программирование AVR микроконтроллеров при помощи CodeVisionAVR

Сначала скачиваем программу CodeVisionAVR и устанавливаем ее.

Далее прошиваемый микроконтроллер вставляем в панельку LPT программатора, подключаем его к порту компьютера, и подаем питание. Запускаем программу CodeVisionAVR.

1.  Первоначально нам необходимо настроить порт, для этого заходим в меню Settings -> Programmer.

В открывшемся  окне, все настройки выставляем  как на рисунке ниже

2.  Нажимаем ОК, дальше заходим в меню Tools -> Chip Programmer

Откроется следующее окно:

3. Находим необходимый нам микроконтроллер из выпадающего меню. В  данном случае выбираем Attiny2313.

4. Теперь нам необходимо открыть файл прошивки, в этом окошке выбираем  File -> Load FLASH

5. Откроется окно, где нужно выбрать файл прошивки   Прошивка 2.4+.hex, кстати, не забудьте внизу из выпадающего меню «Тип файлов» выбрать этот тип файла.

Если нужно записать файл EEPROM выбираем его точно также, для этого нажимаем меню File -> Load EEPROM, расширение этого файла .eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.Имейте ввиду, что процесс  прошивки FLASH, EEPROM  и фьюзов это отдельные и самостоятельные процедуры.

В связи с этим  рекомендуется программировать сперва FLASH, далее EEPROM, затем фьюзы.

7. Значит, файл прошивки мы загрузили, далее нам необходимо записать программу в память микроконтроллера, для этого выбираем:

После чего пойдет процесс программирования:

8. Потом ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.

Для того чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиод  чтения/записи.

В процессе прошивки микроконтроллера нельзя выключать или  перезагружать ПК.

Все, теперь микроконтроллер можно вставить в панельку платы Tracker Pi-2

P.S. Так как микроконтроллер в данной схеме затактирован от внешнего генератора, то в случае повторного перепрограммирования, на 4 и 5 ногу Attiny2313 необходимо повесить любой кварц частотой от 8 МГц.  до 12 МГц.

Программирование AVR урок 1 — введение

Всем привет. Как и обещал, с сегодняшнего дня начинаем изучать программирования AVR микроконтроллеров (на примере Atmega8). Тем же читателям, которым интересно программирование платы ардуино, не волнуйтесь, статьи по данному направлению будут продолжаться 🙂 .

Можно задать логичный вопрос, почему из ряда других микроконтроллеров (далее — МК) в качестве подопытного выбран именно МК AVR. На это есть несколько причин:

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

Как говорил ранее, в качестве подопытного будем использовать МК Atmega8. Почему именно его?

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

Под портами, понимают шины данных, которые могут работают в двух противоположных направлениях (то бишь на вывод и на ввод).

У Atmega8 3 порта. Порт B состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7). Порт С состоит из 7 ножек-выводов (нумерация 0,1,2,3,4,5,6). Порт D состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7).

Запитывать микроконтроллер можно от 3,3 и 5 В. При напряжении питания 5 В максимальная частота тактирования составляет 16 МГц, а при напряжении питания 3,3 В – максимальная частота тактирования 8 МГц. Пока не будем заморачиваться относительно частот тактирования.

Питания подаётся на 7 ножку-вывод, а «земля» подводится к 8 ножке.

Несколько слов о программной среде (далее — ПС) для работы с

МК AVR. Для данный марки МК существует специальная ПС Atmel Studio.

Скачивается бесплатно. Скачали, установили, запустили 🙂

Первое, с чего следует начать знакомство с Atmel Studio – это создание проекта.

Выбираем File -> new -> project .

Откроется окно выбора. Выбираем папку «Browse», в которой будем сохранять написанные проекты. Папку для проектов создал заранее.

Присваиваем имя проекту, в моём случае lesson_avr_1

Обратите внимание на галочку «create directory for solution». Если отметка стоит, то в той папке, которую мы выбрали для сохранения проектов, будет создана отдельная папка под текущий проект.

Жмём ок.

Дальше появится окно выбора микроконтроллера. В поисковой строке пишем Atmega8. В информационном окне есть ссылка на datasheet для данной модели МК.

На этом всё – проект создан.

Займемся настройкой созданного нами проекта. Нажимаем Projest -> lesson_avr_1 properties или (alt+F7)

Переходим на вкладку Tool. Выбираем – симулятор. Совершенные нами действия сделают возможным отлаживать написанный код. Сохраняем изменения. Можно сохранить изменения в одном (текущем) файле или же во всех файлах проекта сразу. Закрываем настройки.

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

  • /*…………………*/ — текст между указанными границами;
  • // одна строка;

Откомпилируем проект (соберём его). Нажмём «build solution» или F7.

После удачной компиляции мы увидим следующее сообщение)

На этом пока всё. Продолжении следует)

Картотека программирования

Программа для программирования микроконтроллеров avr

AVR — это новое семейство 8-разрядных микроконтроллеров фирмы Atmel. Эти микроконтроллеры позволяют решать множество задач встроенных систем. Они отличаются от других распространенных в настоящее время микроконтроллеров большей скоростью работы, большей универсальностью. Быстродействие данных микроконтроллеров позволяет в ряде случаев применять их в устройствах, для реализации которых ранее можно было применять только разрядные микроконтроллеры, что позволяет ощутимо удешевить готовую систему.


Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Программирование микроконтроллеров avr для начинающих

Atmel Studio


Возможность самостоятельного добавления программаторов, настройки скорости программирования и т. Возможность самостоятельного добавления МК; 3. Редактирование и настройка отображения Fuses битов; 4. Выбор инверсных или прямых Fuses битов; 5. Окна вывода значений Fuses битов в HEX формате; 6.

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

Немаловажно и то, что в программу можно самому вносить изменения — добавлять программаторы, микроконтроллеры, изменять некоторые настройки все подробно расписано на сайте разработчика. Программа не требует установки на компьютер, необходимо только разархивировать скачанный файл и можно сразу приступать к работе, поддерживаются все разновидности Windows — от ХР до В данном примере показаны четыре калибровочные ячейки микроконтроллера ATmega8 для внутреннего RC генератора: ВВ — для частоты 1 МГц частота по умолчанию BD — для частоты 2 МГц В2 — для частоты 4 МГц В2 — для частоты 8 МГц При тактировании микроконтроллера ATmega8 частотой 1 МГц от внутреннего RC генератора по умолчанию содержимое первой калибровочной ячейки автоматически учитывается микроконтроллером для подстройки внутреннего генератора.

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

Тут все просто — расставляем в нужном виде галочки или убираем их и программируем FUSE биты. Очень внимательно устанавливайте FUSE биты — ошибка может привести к отказу микроконтроллера. Хочу обратить ваше внимание на самую распространенную ошибку при установки FUSE битов. Нам, допустим, нужно установить тактовую частоту 8 МГц от внутреннего генератора — сбросить бит CKSEL2 поставить галочку , что мы и делаем. В результате, программируя FUSE биты, мы получаем совершенно иной результат — программа не работает, а МК не реагирует на программатор.

Отчаиваться не надо, главное разобраться в том, что вы получили в результате. В нашем примере — внешний RC, смотрим даташит, подсоединяем к соответствующим входам МК сопротивление и конденсатор по схеме из даташита и с нужными номиналами и восстанавливаем контроль над МК.

Скачать с ЯндексДиска. Микроконтроллеры — первый шаг 2. Системы счисления: десятичная, двоичная и шестнадцатиричная 3. Логические операции, логические выражения, логические элементы 4. Битовые операции 5. Прямой, обратный и дополнительный коды двоичного числа 6.

Добрый День! Спасибо за информацию! Скачал файл с проекта для прошивки Атмега8, но он с расширением. Подскажите, можно ли прошивать файлом. Файл с расширением. В сети мно программ для перекодировки, в том числе бесплатные.

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

Отличная программа! Есть баг на Win10, окно типа Alert то что всплывает после разных действий не показывает ничего, кроме кнопки OK. Однако на другом компьютере там текст есть, про верификацию и чтение. Как пофиксить? Верификация — проверка правильности записанных данных Чтение — чтение программы из МК. Ничего не понял с чтением. Программа что-то делает, пишет что Чтение ОК, и всё! Что ок? А как посмотреть что в контроллере? Что вообще происходит? Перед чтением укажите путь программе куда считать память МК на первой странице, как и в обычных других программах.

Потом в папке просматриваете считанный файл — для этого поищите специальные программы для перевода файлов в. Хотя смысла смотреть в МК — малопривлекательная задача. Чтение нужно для записи считанных данных в другой МК. Он ещё спросил что то про savemode, я нажал Y. Пока шил 1M, всё было нормально. Кварц на аттину не подключен. Попробуйте переустановить программу. Как это лечится? Такой файл кидал в папку Win32, но ошибка осталась.

Может это поможет? Евгений, у меня была очень похожая ситуация. Причина — неверно установленный или вообще не установленный драйвер программатора. Решилась эта проблема простым способом — установкой драйвера вручную.

Пользуюсь уже несколько лет, пока все ОК! Виндоуз ХР. Такая проблема. Подключаю arduino pro mini Горит индикация на ардуине и мигает второй светодиод. Напряжение в норме. Но при попытке прошит, тоже самое не видит программатора. Когда я прошивал данной программой без программирования Fuse, все прошивалось. Однако, когда я решил залить и фьюзы в программе отображалось F7 — то ATMega перестала отвечать.

Появилось сообщение: avrdude. Дело во внешней RC-цепочке, как описано в вашей статье? Если да, то какие номиналы резистора и конденсатор выбрать и куда их подключать? В даташите нашел раздел External Clock, но тем про номиналы ничего не сказано. Здравствуйте Николай. Возможно Вы установили другой способ тактирования МК, что и приводит к ошибке, а может что-то заблокировали. Необходимо точно знать какие установки были при программировании FUSE, тогда можно думать дальше, как исправить проблему.

Проверьте программатор на любом другом МК. На этой картинке указаны инверсные фьюзы Ponyprog. Уточнил необходимые фьюзы именно для Atmega p. Значит фьюзы были выставлены правильно и становится непонятным, почему же он перестал откликаться? Здравствуйте Михаил! Простите старого человека. Но выскажу своё мнение. Не вижу разницы между Khazama, SinaProg и прочими оболочками.

Конечно, С. Боднар молодец! Нет возможности из оболочки редактировать командную строку, нужно лезть в ini или config. Конечно, моё субъективное мнение вообще о программировании АВР негативное. Не зря Атмел был поглощён Майкрочипом.

Не выдержал конкуренции. Практические примеры: не считывается сигнатура, малейшая ошибка во фьюзах камень превращается в кирпич. Запускай фьюзбитдоктор! С точки зрения потребителя сплошные неудобства. Потребительские качества ПИКов на порядок выше. Ошибся — стёр, переписал. Вот, если бы С. Боднар, слава ему за проделанную работу! Как Вы додумались настроить скорость программирования в настройках программатора?

Понятно, что командой -В задается в avrdude, но как в самом programm.


Что нужно для программирования микроконтроллеров?

Рассмотрим процесс преобразования исходного кода в машинный код, пригодный для записи в память микроконтроллера. Узнаем какие есть программные инструменты в операционной системе Linux для компиляции и прошивки программ в микроконтроллеры используя языки программирования Си и Ассемблер. Давайте разберемся как происходит компиляция, подготовка и запись программы в микроконтроллер AVR. Допустим что мы будем писать программу на языке Си для AVR микроконтроллера, вот что будет происходить в процессе работы:. Intel HEX — это специальный формат файлов, который служит для представления двоичных данных в текстовом виде. Данный формат позволяет указывать с точностью до байта в какие адреса нужно поместить те или иные данные в памяти микроконтроллера.

WinAVR — Мощная среда разработки с открытым исходным кодом, созданная с целью написания программ для микроконтроллеров серии AVR от.

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ AVR

Что такое микроконтроллер? Микроконтроллер это по сути микрокомпьютер с процессором, оперативной и постоянной памятью, портами ввода-вывода, во многих микроконтроллерах имеется аналого цифровой преобразователь. Пожалуйста, переустановите приложение. Выбираем GCC C Executable Project на изображении под цифрой 1 , В низу, в поле Name 2 указываем имя нашего проекта, в поле Location 3 можем выбрать местоположение проекта или оставить путь по умолчанию, нажимаем OK. В окне появится среда разработки написания кода, где уже будет стандартный код на Си и несколько закомментированных строк с указанием авторства и даты:. Под цифрой 1 находится окно написания кода, под цифрой 2 файлы с исходным кодом, библиотеки и все файлы, связанные с исходным кодом, в файле main. В итоге скомпилированная прошивка будет в формате. HEX и будет лежать по адресу опять же, если вы не изменили стандартное месторасположение :. Если выбрать вариант сборки Release, то прошивка будет лежать в соответствующей папке то есть не в папке Debug, а в папке Rele ase. Код , который ничего не делает это не очень интересно, напишем программу, которая мигает 2 раза в секунду светодиодом:.

Как написать код для AVR, программирование микроконтроллеров Atmel AVR на Си

Re: пассики для проигрывателей винила Re: Динамическая индикация на LCD дисплее Re: Пассик на пленочный магнитофон Re: Продам набор SMD конденсаторов в корпусе

Программа распространяется бесплатно.

Среда разработки AVR Studio (Windows) ATMega128

Соловьева совместно с предприятием НПП САТЭК плюс уже несколько лет разрабатывается новая интегрированная среда разработки программ для встраиваемых систем на базе микроконтроллеров. В этой статье я, Большаков Олег, руководитель разработки, хотел бы рассказать об этом проекте. Среда, о которой пойдет речь, предназначена для радиолюбителей, робототехников, ардуинистов и всех тех, кто хотел бы разрабатывать программы для микроконтроллеров быстрее и проще, а исходный код программы был понятнее и прозрачнее. Микроконтроллеры используются почти в любой встраиваемой системе, особенно в носимой электронике, робототехнике, где необходим энергоэффективный вычислитель с малыми габаритами, весом и позволяющий считывать и выдавать определенные сигналы. Известно множество инструментов для разработки программ управления микроконтроллерами.

026-Программы для прожига AVR микроконтроллеров.

Как загрузить программу в микроконтроллер. Как запрограммировать микроконтроллер AVR. Можно через простейший адаптер — буквально «пять проводков» схема ниже соединяющих принтерный порт ПК с прошиваемым микроконтроллером AVR. Скачать весь курс по AVR одним архивом на заглавной странице курса. Результат написания и компиляции программы — файл-прошивку с расширением. МК AVR можно пере- программировать не менее раз, при чем это можно делать прямо в устройстве в котором они будут работать — такое программирование называют «в системе» — «ин систем программин» или ISP.

WinAVR — Мощная среда разработки с открытым исходным кодом, созданная с целью написания программ для микроконтроллеров серии AVR от.

Простая программа для AVR микроконтроллера на языке Си

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

1.4 Устройство микроконтроллеров avr

Импульсные блоки питания Линейные блоки питания Радиолюбителю конструктору Светодиоды, ламы и свет 3D печать и 3D модели Если вы, как и я, используете в своих конструкциях как микроконтроллеры PIC, так и чипы AVR, было бы удобно для программирования обеих линеек микросхем использовать один и тот же программатор. Посему можно предположить окончание многолетнего холивара на тему что же лучше. Оба типа контроллеров имеют свои недостатки и преимущества, но это тема для другой статьи или видеоролика.

Войдите , пожалуйста. Хабр Geektimes Тостер Мой круг Фрилансим.

Программы для микроконтроллеров

Руководство по установки новой версии ATmega находится здесь. В ниже приведенном руководстве описывается установка среды разработки AVR для операционной системы Windows, используя платформу разработки AVR Studio-t. Перед установкой программного обеспечения необходимо добыть нижеследующее программное обеспечение, с сайта производителя или сайта Домашней Лаборатории или с диска находящегося в чемодане Домашней Лаборатории. AVR Studio 4 IDE inglise keeles Integrated Development Environment — это программа, которая предназначена для написания программного кода и загрузки его в микроконтроллер. Это свободное программное обеспечение, которое можно найти на сайте Sourceforge. При инсталляции WinAVR предлагает имя каталога, которое также содержит номер версии, но директория должна быть изменена вручную:.

Программа распространяется бесплатно. Скачать программу вы можете с официального сайта Atmel Studio. В программе применяется технология программирования непосредственно в самой схеме.


Программирование микроконтроллера AVR — запуск со встроенной системой

Программирование микроконтроллера AVR

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

Программирование микроконтроллера AVR. Здесь вы можете разобраться с микроконтроллером AVR.Ознакомьтесь практически со всеми аспектами микроконтроллера AVR. Какие основные опции поставляются с программированием AVR? А также, архитектура микроконтроллера AVR. Здесь вы, вероятно, поймете о подходе к программированию. Дополнительно базовый обзор программного обеспечения AVR studio.

Обзор микроконтроллера

Другими словами, микроконтроллер AVR представляет собой высокоразвитую версию миникомпьютера, встроенного в небольшой чип с использованием процессора, памяти и программируемых периферийных устройств ввода/вывода.Основной задачей микроконтроллера AVR всегда является цифровое управление любой системой. Чтобы указать, электрические, механические или автомобильные, различные устройства, коммерческие предприятия и множество электронных гаджетов и приборов. Вообще говоря, программирование микроконтроллера AVR — это первая встроенная флэш-память, входящая в 8-битные, 16-битные, 32-битные интегрированные микросхемы.

История усовершенствованного микроконтроллера AVR

По сути, это передовой и инновационный микроконтроллер, разработанный компанией ATMEL в 1996 году.И его архитектура была первой разработкой двух студентов Альфа-Эгиля Богена и Вегарда Воллана из Норвежского технологического института. Действительно, поэтому только AVR означает микроконтроллер RICS (вычисления с сокращенным набором команд) Альфа-Эгиля Богена и Вегарда Воллана. Микроконтроллеры AVR делятся на несколько групп.

Обычно существует несколько микроконтроллеров семейства AVR, таких как ATmega8, ATmega16, ATmega32 и другие. Кроме того, микроконтроллер имеет различные приложения для электронного оборудования, такого как мобильные телефоны, автомобили, стиральные машины, камеры, охранная сигнализация и многое другое.

Какие существуют типы классификации контроллеров AVR?

  • Классический AVR (AT90SXXXX)
  • Крошечный AVR (ATtinyXXXX)
  • Мега AVR (ATmegaXXXX)
  • Xmega AVR (ATXmegaXXXX)
  • AVR для конкретного приложения
  • 32-битный AVR

Кроме того, AVR studio с различными версиями представляет собой встроенную среду разработки ATMEL для создания нескольких приложений в соответствии с потребностями. Кроме того, сетевое взаимодействие является главным для каждой отдельной системы.И обучение аппаратному обеспечению широко используется в сетевом секторе. Возможность использовать язык C или язык ассемблера для построения кода для программирования микроконтроллера AVR.

Каковы особенности микроконтроллера AVR?

  • Многофункциональный
  • Несколько внутренних генераторов
  • Флэш-память до 256 КБ
  • Внутренние данные EEPROM до 4 КБ
  • Внутренняя SRAM до 16 КБ
  • Два таймера 8-битные, а один таймер 16-битный

Какие шаги нужно выполнить для создания проекта в AVR Studio?

  • Первоначально запускает студию AVR и выбирает вариант нового проекта.
  • Войдите в имя проекта и выберите AVR GCC, введите местоположение, после чего нажмите «Далее».
  • Выберите платформу отладки (симулятор AVR) и необходимое устройство (AtmegaXX) и нажмите «Готово».
  • Откроется окно, просто нажмите кнопку проекта и проверьте параметры настройки, выберите необходимые варианты и нажмите «ОК».
  • Напишите нужный код в главном окне.
  • Для компиляции выберите кнопку сборки и проверьте параметр компиляции. В случае ошибки компиляция завершится неудачно.
  • В то же время генерация HEX-файла поддерживает программу в микроконтроллере AVR. Только для этого вам нужно с помощью программатора выгрузить HEX-файл в AVR. Обычные программаторы, используемые для микроконтроллера AVR, это AVRISP и AVRISP2.

Каковы наилучшие области применения микроконтроллера AVR?

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

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

  • Для обнаружения сигнала
  • Сбор данных
  • Управление движением
  • Для дисплеев на ЖК-дисплее
  • Для подключения двигателей, GSM и GPS
  • Для автоматизации тяжелой техники
  • На разработки БПЛА (беспилотных летательных аппаратов)

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

Проект документации Linux


Информация о ЛДП
Часто задаваемые вопросы
Манифест/лицензия
История
Добровольцы/персонал
Должностные инструкции
Списки рассылки
ИРК
Обратная связь

Автор / вклад
Руководство для авторов LDP
Поддержите / помогите
Ресурсы
Как отправить
  GIT-репозиторий
Скачано
Контакты

Спонсор сайта LDP
Мастерская

LDP Wiki : LDP Wiki — это точка входа для любой незавершенной работы
Участники | Авторы | Посетители
Документы

HOWTO : тематическая помощь
последние обновления | основной индекс | просматривать по категориям
Направляющие : более длинные, подробные книги
последние обновления / основной индекс
Часто задаваемые вопросы : Часто задаваемые вопросы
последние обновления / основной индекс
справочные страницы : помощь по отдельным командам (20060810)
Газета Linux : интернет-журнал
Поиск/Ресурсы

  Ссылки
Поиск OMF
Объявления / Разное


Обновления документов
Ссылка на HOWTO, которые были недавно обновлены.

Последовательное программирование микроконтроллеров AVR

В этом блоге мы попытаемся демистифицировать процесс прошивки 8-битного микроконтроллера AVR ATmega328P с использованием алгоритма последовательного программирования.

Зачем вам знать о последовательном программировании?

Наш интерес к какой-либо области возникает, когда у нас возникает вопрос, касающийся этой области. Ребенок, сидящий на крыше и смотрящий в небо, может заинтересоваться классификацией различных звезд, когда задаст вопрос «Почему некоторые звезды имеют голубой цвет, а другие — оранжевый?» .Малыш будет узнавать об этом из разных источников и может стать следующей Джоселин Белл.

Большинство проектировщиков и программистов встраиваемых систем заинтересовались этой областью, когда задали такие вопросы:

«Как я могу сделать свои собственные цифровые часы? »
«Как я могу запрограммировать микроконтроллер и что-то построить? »
«Как я могу взаимодействовать между различными устройствами?
и так далее.

В основе ответов на каждый из этих и других подобных вопросов лежит утверждение «Вы можете сделать это с помощью программирования. . Многие люди умеют писать код, однако то, как на самом деле программируется система, или как она хранит в памяти различные байты, которые несут в себе суть нашего кода, некоторым до сих пор неизвестно. Важно, чтобы любители и другие люди, работающие в области встроенных систем, хотя бы имели представление о том, что на самом деле делает чувак по имени «avrdude» или загрузчик, когда они программируют свою плату Arduino. Эти знания помогут им узнать, как программируются их платы Arduino, или в чем может быть ошибка, когда avrdude выдает ошибку «Период SCK не определен».

Что происходит, когда вы нажимаете кнопку «Проверить» в Arduino IDE?

Когда вы нажимаете кнопку «Проверить», ту, что с символом «галочка», в Arduino IDE выполняется ряд шагов, которые проверяют вашу программу на наличие ошибок, связывают ее с необходимыми библиотечными файлами и, наконец, выдают шестнадцатеричный файл с расширением .hex. Эта серия шагов в совокупности называется «Компиляция». Компиляция выполняется компиляторами, и конечным результатом успешной компиляции является файл, содержащий шестнадцатеричные эквиваленты 1 и 0, который называется «Машинный код» или «Исполняемый код».Это файл, который процессор наших компьютеров может понять и выполнить.

Компиляция скетча мигания перед его прошивкой в ​​Arduino Uno

Итак, когда вы пишете простой код для мигания светодиодом на Arduino Uno, не думайте, что микроконтроллер на Uno, ATmega328p, хранит ваш код со всеми его операторами вроде предложения в книге. Он сохраняет машинный код, эквивалентный вашему коду, в своей памяти.

Исходный код (справа) мигающего встроенного светодиода на Arduino Uno и соответствующий ему шестнадцатеричный файл (слева), полученный после компиляции

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

Аналогия с лекцией, прочитанной учителем, и заметками, которые мы пишем: среда (язык, устная речь, доска и т. д.), с помощью которой учитель преподает, аналогична язык высокого уровня, который мы пишем своими словами в наших заметках.Эти заметки легко понятны ведущему и аналогичны машинному языку.

ПРИМЕЧАНИЕ 1: В целях единообразия с этого момента мы ограничим наше обсуждение только микроконтроллером ATmega328P. Это микроконтроллер, подключенный к DIP-разъему Arduino Uno или припаянный к плате Arduino Nano. Даже с этим ограничением на наш выбор микроконтроллера обсуждение, которое мы будем здесь вести, будет относиться к большинству микроконтроллеров семейства 8-разрядных микроконтроллеров AVR, и читатель обнаружит, что большинство микроконтроллеров, поддерживающих последовательное программирование, имеют аналогичный алгоритм программирования.

ПРИМЕЧАНИЕ 2: Поскольку мы будем снова и снова обращаться к техническому описанию ATmega328P, вот ссылка для загрузки последнего технического описания:
https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A- PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf

ПРИМЕЧАНИЕ 3: Скобка, содержащая номер с префиксом «Pg», относится к страницам в описании ATmega328P, которые следует читать по порядку. детально разобраться в конкретной теме.

Структура памяти ATmega328P

ATmega328P имеет три различных типа встроенной памяти.Это:

  1. Флэш-память/программная память: Это память, в которой находится машинный код, эквивалентный нашему исходному коду. Его следует использовать только для целей программирования, а не для хранения переменных (стр. 26).
  2. SRAM: Оперативная память — это память, в которой мы храним наши переменные. Будь то массивы или символы для последовательной отправки на наш ноутбук, все они хранятся здесь (стр. 28).
  3. EEPROM: Электрически стираемая программируемая постоянная память или сокращенно EEPROM — это пространство памяти, в котором мы храним постоянные переменные (стр. 29).

Если мы отключим питание от нашего микроконтроллера, содержимое флэш-памяти и EEPROM сохранится, но содержимое SRAM будет стерто.

Сначала рассмотрим структуру SRAM (стр. 28). Ее также называют памятью данных.

Карта памяти данных. В ATmega328P доступно 2 КБ SRAM

Как видно из карты памяти, SRAM разделена на 4 ячейки:

  1. 32 регистра: Которые используются процессором в микроконтроллере для хранения значений операндов.
  2. 64 регистра ввода/вывода: Это регистры, с помощью которых микроконтроллер считывает ввод и отправляет вывод. Эти регистры также управляют различными другими свойствами микроконтроллера, такими как его таймеры и счетчики.
  3. 160 доб. Регистры ввода-вывода: Эти регистры соответствуют 160 ячейкам расширенной памяти ввода-вывода.
  4. SRAM: Следующие 2048 ячеек составляют наши 2 КБ SRAM для хранения переменных.

Теперь поговорим о структуре flash и EEPROM.Именно здесь мы можем продолжить нашу аналогию с заметками, нацарапанными на листе бумаги. Штрихи пера составляют одну букву или символ. Осмысленная комбинация этих символов составляет слово. Набор слов составляет предложения, которые объединяются в абзац, и именно набор абзацев составляет наши заметки, которые несут информацию, которую мы узнали. В компьютерном программировании 0 и 1, известные как биты, являются нашими «росчерками пера». Набор из восьми таких битов составляет байт (который также отображается в ASCII).Два байта, объединенные вместе, образуют последовательность из 16 битов, которую мы называем словом. Слово состоит из старшего байта и младшего байта. В памяти каждый байт хранится в ячейке памяти. Эти байты можно рассматривать группами по два, т. е. как слова. Эти слова составляют страницу памяти.

Отношение между байтами и словом

Флэш-память ATmega328P имеет общий размер 32 Кбайт или 16 К слов. Эта память разделена на 256 страниц, каждая из которых может содержать 64 слова (стр. 294).

Характеристики флэш-памяти ATmega328P

Аналогично, EEPROM этого микроконтроллера имеет общий размер 1Кбайт. Он разделен на 256 страниц, каждая из которых может содержать 4 байта (стр. 294).

Спецификации EEPROM ATmega328P

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

Организация страниц и слов во флэш-памяти ATmega328P

Теперь возникает вопрос, как мы можем получить доступ к ячейкам памяти во флэш-памяти и EEPROM? Для этого вернемся к таблице данных. В таблице 28-11 под PCWORD написано PC[5:0], а под PCPAGE написано PC[13:6]. Это означает, что в одном 16-битном адресе слова биты [5:0] составляют адрес слова на одной странице, а биты [13:6] составляют адрес страницы в памяти. . Таким образом, мы имеем следующий шаблон для записи адреса слова в память.

Здесь все биты, отмеченные w , составляют адрес слова на странице, а все биты, отмеченные p , составляют адрес страницы.
Например, полный адрес слова, хранящегося в 34-м месте на странице 78, задается как

0001 0011 1010 0010

В качестве упражнения читатель может просмотреть таблицу 28-12 и определить шаблон для адресации. байт в EEPROM ATmega328P.

Настройка нашего микроконтроллера для последовательного программирования

Теперь мы подошли к основной теме этого блога — последовательному программированию ATmega328P.Здесь под словом «последовательный» мы подразумеваем, что данные будут отправляться синхронно с тактовым сигналом. ATmega328P — микроконтроллер, который нужно запрограммировать. Это наше целевое устройство. В терминологии встроенных систем это называется slave . Система, которая будет программировать этот микроконтроллер, называется master .

При последовательном программировании ATmega328P (и вообще других микроконтроллеров AVR) нам потребуется 6 строк для соединения ведущего и ведомого.Вот эти строки (стр. 304):

  1. Master In Slave Out (MISO) (PB4): Данные передаются по этой линии последовательно от ведомого к ведущему.
  2. Master Out Slave In (MOSI)(PB3): Данные последовательно передаются по этой линии от ведущего к ведомому.
  3. SCK(PB5): Это линия тактового импульса. Когда тактовый импульс отправляется по этой линии, один бит отправляется или считывается либо ведущим, либо ведомым устройством.
  4. СБРОС: Это однонаправленная линия с активным низким уровнем, которая используется ведущим для сброса ведомого.Когда RESET = 0, ведомое устройство готово к приему и отправке инструкций и данных по упомянутым выше последовательным каналам.
  5. Vcc: Это наша общая шина питания. Для ATmega328P должно быть 5В.
  6. GND: Это наша земля или шина 0В. Рекомендуется установить конденсатор между шиной питания и шиной заземления, чтобы отфильтровать любые пульсации питания.

Мы подключим ведомое устройство к этим шести линиям, как показано на рис. 28-7 (стр. 303).

Настройка ведомого микроконтроллера для последовательного программирования

Теперь вопрос: кто главный? Кто находится на другом конце этих линий? Что ж, в данном случае мы являемся мастером и будем посылать импульсы по линиям MOSI и SCK через какие-то идеальные тактильные переключатели, у которых нет дребезга переключателей.Конечно, таких переключателей не существует в реальном мире. В реальном мире мы будем использовать обычный тактильный переключатель. Однако мы можем устранить дребезг переключателя, используя триггеры Шмитта. Тактильный переключатель будет подключен к Vcc с помощью подтягивающих резисторов 1k, откуда провод соединит выход нашего тактильного переключателя с шестигранным инверторным триггером Шмитта. Итак, когда мы нажмем переключатель, выход триггера Шмитта станет высоким, в противном случае он останется низким. Это сделает наш «идеальный переключатель».

Мы можем прикрепить тумблер к контакту RESET микроконтроллера.Это позволит нам переводить микроконтроллер в состояние RESET или нормальное состояние по мере необходимости.

Еще одна вещь, которую мы можем сделать, это подключить светодиоды с нашими линиями MOSI, MISO и SCK. Это даст визуальную индикацию того, какой бит передается по определенной линии. Мы подключим синий светодиод к нашей линии SCK, а красный и зеленый к нашим линиям MOSI и MISO соответственно.

С учетом всего сказанного и сделанного мы получаем установку, показанную ниже.

Установка для последовательного программирования ATmega328P

Теперь пришло время для последовательного программирования нашего микроконтроллера.

Алгоритм последовательного программирования

Это алгоритм, которому мы должны следовать для связи с нашим микроконтроллером и его последовательного программирования (стр. 304).

  • Шаг 1: Последовательность включения питания
    Питание подается между Vcc и GND. Выход SCK и MOSI низкий. СБРОС дается одиночным импульсом.
  • Шаг 2: Подождите 20 мс.
  • Шаг 3: Инструкция включения программы: Отправьте команду «включение программы» ведомому устройству.Обратите внимание, что строка MOSI будет прочитана по переднему фронту SCK, а MISO будет отправлена ​​по заднему фронту SCK. Итак, процедура отправки бита ведомому должна быть:

Шаг а: Если бит = 0, не нажимайте MOSI. Если бит = 1, нажмите MOSI.
Шаг b: Нажмите SCK.
Шаг c: Разблокируйте SCK.
Шаг d: Если была нажата кнопка MOSI, отпустите ее.

  • Шаг 4: Если связь между ведущим и ведомым синхронизирована, 0x53 будет возвращено или, скажем, повторено ведомым устройством при отправке третьего байта команды включения программы.Отправьте все четыре байта инструкции. Если эхо-сигнал неправильный, вернитесь к шагу 1 и начните заново.
  • Шаг 5: Выполнить стирание чипа: Если вы хотите стереть содержимое флэш-памяти и EEPROM (что вы должны сделать, если ваша программа не работала правильно в последний раз), отправьте команду стирания чипа последовательно подчиненному устройству. .
  • Шаг 6: Программирование флэш-памяти: Флэш-память программируется постранично. Машинный код для одной страницы сначала загружается в буфер страницы.Когда мы будем загружать наши слова в буфер страницы, мы предоставим вместе с командой загрузки страницы памяти программы старший/младший байт машинного кода, эквивалентный этой инструкции, и адрес, по которому эта инструкция должна быть сохранена. Каждая инструкция имеет ширину 16 или 32 бита. Соответственно, мы можем решить, сколько инструкций можно разместить на одной странице. Обратите внимание, что младший байт инструкции должен быть загружен первым перед загрузкой старшего байта инструкции в буфер.Как только буфер загружен, вы можете записать его, используя инструкцию «записать страницу памяти программы», приведенную в таблице 28.8.3, снабдив ее 7 старшими битами (MSB) адреса страницы. Затем машинный код следующей страницы загружается в буфер страницы. Аналогичным образом можно запрограммировать EEPROM.

Это становится слишком сложно, да? Что ж, в этой таблице данных есть красивая диаграмма, рисунок 28-8, которая наглядно поясняет, как программируются флэш-память и EEPROM ведомого устройства (стр. 306).

Это показано ниже:

Последовательное программирование памяти программ/памяти EEPROM

Небольшой пример последовательного программирования

Алгоритм последовательного программирования станет понятен с помощью примера. В этом примере мы запрограммируем наш микроконтроллер ATmega328P с помощью довольно простого кода, который переводит контакт 0 порта D в высокий уровень. Если есть светодиод, анод которого подключен к контакту 0, а катод к земле через резистор, он будет светиться. Мы напишем этот код на ассемблере, соберем его вручную, а затем последовательно запрограммируем с его помощью микроконтроллер.

Теперь, прежде чем мы начнем, мы введем слабую подсветку синтаксиса для битов, которая облегчит понимание и следование рассуждениям в этом примере.

Цвет бита Описание
0 или 1 8 Такие биты составляют низкий уровень. 8 таких биты составляют старшие байты слова
0 или 1 6 таких бит составляют адрес слова в странице
0 или 1 8 таких битов составляют адрес страницы во флэш-памяти.Для этого нам сначала нужно установить бит 0 регистра DDRD. Это настроит контакт 0 как входной контакт. Затем мы установим бит 0 регистра PORTD, чтобы установить вывод 0 нашего микроконтроллера в высокий уровень. Вот ассемблерный код для этого:

 LDI R1, 0x01 ;сохранить 0x01 в регистре 1
OUT 0x0A, R1 ;сохранить значение регистра 1 в регистре DDRD (номер регистра ввода/вывода 0x0A)
OUT 0x0B, R1 ;сохранить значение регистра 1 в регистре PORTD (номер регистра ввода-вывода 0x0B) 

Часть 2: Сборка кода вручную

Сборка — это процедура преобразования кода на языке ассемблера в код на машинном языке.Каждая ассемблерная инструкция транслируется в последовательность битов (которая может быть записана в виде шестнадцатеричного числа), и это единственное, что понимает машина. Для сборки мы рассмотрим руководство по набору инструкций AVR (ссылка для скачивания: http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf) для получения наших инструкций и преобразовать их в соответствующий 16-битный код операции.

Преобразуем LDI R1, 0x01 в его 16-битный код операции. Шаблон для того же приведен ниже (стр. 115 руководства по набору инструкций):

Регистр R1 — это регистр 0x01.SO, DDDD = 0001.

Непосредственное число 0x01 = 0000 0001. Итак, KKKK KKKK = 0000 0001.

Затем необходимый 16-битный OPCOD

Аналогичным образом мы собираем инструкции с использованием приведенного ниже шаблона (PG 134 Руководства по набору инструкций):

OUT 0x0A, R1 1011 10001010

9062 OUT 0X0BB, 0X0BB, 0X0BB, 0X066 30001

7 9062 OUT 0X0BB, R1

7 9062 OUT 0X0BB. → 1011 1000 0001 1011

Наш полный собранный код станет

1110 0000 0001 0001
1011 1000 0001 10109
1011 100011111199 0007

. После того, как код собран, все, что нам теперь нужно сделать, это последовательно запрограммировать микроконтроллер, используя алгоритм последовательного программирования, который мы обсуждали.Мы подадим питание на Vcc и GND, оставим SCK и MOSI на низком уровне и подадим импульс на контакт RESET через наш тумблер и установим его обратно в 0 (будет полезно отметить, какое направление высокое, а какое низкое на Переключить переключатель). Подождав не менее 20 мс, мы отправим микроконтроллеру команду включения программы, которая в основном сообщает ему

«Эй! Мы сейчас будем последовательно программировать вас» .

Эта инструкция приведена ниже (стр. 305):

Двоичная версия этих шестнадцатеричных кодов приведена ниже (поищите в Google, как преобразовать шестнадцатеричные числа в двоичные числа и наоборот.Это довольно просто):

1010 1100 0101 0011 0000 0000 0000 0000

Как мы упоминали ранее, состояние вывода MOSI считывается по переднему фронту тактового импульса. Если вы хотите, чтобы микроконтроллер считывал 0, просто нажмите тактильный переключатель SCK. Если вы хотите, чтобы микроконтроллер считывал 1, сначала нажмите переключатель MOSI, а затем нажмите SCK. Отпустите MOSI, а затем отпустите SCK. Если MISO имеет высокий уровень, светодиод на линии MISO будет светиться, когда SCK будет отпущен. Это становится запутанным, верно? Что ж, следующие временные диаграммы прояснят ситуацию.Первый показывает, как отправляются первые два байта инструкции разрешения программы.

Отправка байта 1 и 2 инструкции включения программы

Следующая показывает, как передаются последние два байта инструкции. На этот раз 0x53 возвращается обратно на спадающем фронте тактового сигнала.

Отправка байтов 3 и 4 инструкции разрешения программы. 0x53 возвращается обратно на MISO по заднему фронту такта

Если 0x53 не возвращается обратно, это означает, что наш ведущий и подчиненный не синхронизированы друг с другом.В этом случае подайте импульс на контакт RESET и снова отправьте команду. Несколько возможных причин несинхронизированности ведущего и ведомого:

  1. Пульсации питания
    Решение: Подключите конденсатор между шинами Vcc и GND
  2. Неправильное нажатие переключателей SCK и MOSI.
    Решение: следуйте приведенному алгоритму. Нажмите MOSI, а затем нажмите SCK.
  3. Ваша кожа касается проводов цепи.
    Решение: Убедитесь, что вы не касаетесь проводов.

После того, как 0x53 будет отражено в третьем байте инструкции включения программы, отправьте четвертый байт. Наш ведомый теперь готов к последовательному программированию.

Часть 4: Стирание микросхемы

Сотрите содержимое флэш-памяти и EEPROM, отправив команду «стереть микросхему». Он приведен ниже:

Его двоичный эквивалент 1010 1100 1000 0000 0000 0000 0000 0000 . Это то, что мы должны отправить через MOSI.

Часть 5: Загрузка инструкций в буфер страниц

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

Наша собранная программа приведена ниже.

1110 0000 0001 0001
1011 1000 0001 1010
1011 1000 0001 1011

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

Для загрузки первой строки используется команда инструкции загрузки. Шаблон для этой команды приведен ниже:

В соответствии с этим, если мы посылаем следующие биты последовательно,

0100 0000 0000 0000 0000 0000 0001 0001
0100 1000 0000 0000 0000 0000 1110 0000

буфер страницы будет загружен с первой инструкцией.

Для загрузки второй инструкции нам необходимо обновить LSB адреса на 1 и отправить следующие биты серийно на MOSI,

0100 0000 0000 0000 0000 0001 0001 1010
0100 1000 0000 00000011101006
0100 1000 0000 000011101100100 0100 1000 00000011101009
0100 1000 00001001 100006
0100 1000 000010011106
.

Чтобы загрузить третью команду, мы снова увеличиваем младший бит адреса на 1 и отправить следующие биты последовательно,

0100 0000 0000 0000 0000 0010 0001 1011
0100 1000 0000 0000 0000 0010 1011 1000

Это загружает нашу программу в буфер страницы ATmega328P.

Часть 5: Запись страницы памяти программ

Наконец, нам нужно записать содержимое буфера страниц на определенную страницу, в данном случае на страницу 0. Для этого у нас есть следующая инструкция последовательного программирования:

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

0100 1100 0000 0000 0100 0000 0000 0000

Если бы мы должны были написать страницу 63 памяти, мы использовали бы:

0100 1100 0000 1111 1100 0000 0000 0000

4100 0000 1100 1100 0000 0000 00009

41414100 1100 1100 0000 0000 00009

41414100 1100 1100 0000 0000 00009

41414100 1100 1100 0000 0000 00009

4141100 нормальная работа

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

Добавить комментарий

Ваш адрес email не будет опубликован.